web-dev-qa-db-ja.com

GitHubリポジトリからコードの行数を取得できますか?

GitHubリポジトリでは、言語で書かれたプロジェクトのパーセントを表示する「言語統計」を見ることができます。ただし、プロジェクトが何行のコードで構成されているかは表示されません。多くの場合、私はプロジェクトの規模と複雑さを素早く理解したいと思いますし、コードの行数が良い第一印象を与えることができます。 500行のコードは比較的単純なプロジェクトを意味し、10万行のコードは非常に大規模で複雑なプロジェクトを意味します。

それでは、できれば複製せずに、GitHubリポジトリからさまざまな言語で書かれたコード行を取得することは可能ですか?


gitリポジトリの行数を数える ”という質問は、ローカルGitリポジトリのコード行数を数える方法を尋ねていますが、

  1. あなたはプロジェクトを複製しなければなりません。たとえば、Wineのようなプロジェクトのクローンを作成するには何年もかかります。
  2. I13nファイルのように、必ずしもコードとは限らないファイル内の行を数えることができます。
  3. just(たとえば)Rubyファイルを数えると、JavaScriptのような他の言語の大量のコードを見逃してしまう可能性があります。プロジェクトで使用されている言語をあらかじめ知っておく必要があります。また、プロジェクトで使用されている言語ごとにカウントを繰り返す必要があります。

結局のところ、これは「プロジェクトの規模を素早くチェックする」には時間がかかりすぎる可能性があります。

307
Hubro

シェルスクリプト、cloc-git

このシェルスクリプトを使用して、1つのコマンドでリモートGitリポジトリの行数を数えることができます。

#!/usr/bin/env bash
git clone --depth 1 "$1" temp-linecount-repo &&
  printf "('temp-linecount-repo' will be deleted automatically)\n\n\n" &&
  cloc temp-linecount-repo &&
  rm -rf temp-linecount-repo

Installation

このスクリプトをインストールするには _ cloc _ (“ Count Lines of Code”)が必要です。 clocはおそらくあなたのパッケージマネージャと一緒にインストールすることができます - 例えば Homebrew を付けたbrew install cloc

スクリプトをインストールするには、そのコードをファイルcloc-gitに保存し、chmod +x cloc-gitを実行してから、ファイルを$PATHなどの/usr/local/bin内のフォルダーに移動します。

使用法

スクリプトは1つの引数を取ります。これはgit cloneが受け入れる任意のURLです。例は、https://github.com/evalEmpire/Perl5i.git(HTTPS)または[email protected]:evalEmpire/Perl5i.git(SSH)です。 「クローンまたはダウンロード」をクリックすると、どのGitHubプロジェクトページからでもこのURLを取得できます。

出力例

$ cloc-git https://github.com/evalEmpire/Perl5i.git
Cloning into 'temp-linecount-repo'...
remote: Counting objects: 200, done.
remote: Compressing objects: 100% (182/182), done.
remote: Total 200 (delta 13), reused 158 (delta 9), pack-reused 0
Receiving objects: 100% (200/200), 296.52 KiB | 110.00 KiB/s, done.
Resolving deltas: 100% (13/13), done.
Checking connectivity... done.
('temp-linecount-repo' will be deleted automatically)


     171 text files.
     166 unique files.                                          
      17 files ignored.

http://cloc.sourceforge.net v 1.62  T=1.13 s (134.1 files/s, 9764.6 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Perl                           149           2795           1425           6382
JSON                             1              0              0            270
YAML                             2              0              0            198
-------------------------------------------------------------------------------
SUM:                           152           2795           1425           6850
-------------------------------------------------------------------------------

代替案

手動でコマンドを実行する

シェルスクリプトを保存してインストールするのが面倒な場合は、手動でコマンドを実行できます。例:

$ git clone --depth 1 https://github.com/evalEmpire/Perl5i.git
$ cloc Perl5i
$ rm -rf Perl5i

言語学者

結果をGitHubの言語パーセンテージと正確に一致させるには、 _ cloc _ の代わりに Linguist をインストールしてみてください。 そのREADME に従って、gem install linguistを実行してからlinguistを実行する必要があります。うまく動かなかった( issue#2223 )。

225
Rory O'Kane

Google Chromeブラウザ - _ gloc _ の拡張子があり、パブリックおよびプライベートリポジトリで動作します。

以下からプロジェクトのコードの行数を数えます。

  • プロジェクト詳細ページ
  • 検索結果ページ
  • トレンドページ
  • 等.

One repo Many repos

91
Artem Solovev

あなたは簡単に何かを実行することができます

git ls-files | xargs wc -l

これで合計数がわかります→

lines of code

またはこのツールを使用する→ http://line-count.herokuapp.com/ /

83
Ahmad Awais

Graph/contributorsページに行くと、リポジトリへの全ての貢献者のリストとそれらが追加したり削除した行数を見ることができます。

足りない場合を除き、すべての貢献者の間で追加された総行数から削除された総行数を差し引くと、リポジトリ内のコードの総行数が得られます。 (編集:結局私は何かが足りなかったことがわかりました。詳細については orbitbotのコメント をご覧ください。)

更新:

このデータはGitHubの _ api _ でも入手できます。そこで、データを取得して計算するための簡単なスクリプトを作成しました。

'use strict';

//replace jquery/jquery with the repo you're interested in
fetch('https://api.github.com/repos/jquery/jquery/stats/contributors')
    .then(response => response.json())
    .then(contributors => contributors
        .map(contributor => contributor.weeks
            .reduce((lineCount, week) => lineCount + week.a - week.d, 0)))
    .then(lineCounts => lineCounts.reduce((lineTotal, lineCount) => lineTotal + lineCount))
    .then(lines => window.alert(lines));

Chrome DevToolsのスニペットに貼り付け、リポジトリを変更して[実行]をクリックするだけです。

免責事項( lovasoa のおかげで):

いくつかのリポジトリ(sorich87/bootstrap-tour)では負の値になるため、GitHubのAPIから返されたデータに問題がある可能性があるため、このメソッドの結果を塩の粒で見てください。

更新:

合計行数を計算するこの方法は、完全に信頼できるわけではありません。詳細については orbitbotのコメント をご覧ください。

62
Lewis

git clone --depth 1 <url>を使用して最新のコミットだけを複製してから、Githubが使用しているのと同じソフトウェアである Linguist を使用して独自の分析を実行できます。それが、私がコードの lines を取得することを私が知っている唯一の方法です。

もう1つのオプションは プロジェクトで使用されている言語をリストするためにAPIを使用する です。行単位ではなくバイト単位で指定します。例えば...

$ curl https://api.github.com/repos/evalEmpire/Perl5i/languages
{
  "Perl": 274835
}

それを一粒の塩と考えても、そのプロジェクトは{ Webサイトが認めるYAMLとJSONを含む } _だが、APIはそうではない。

最後に、 code search を使用して、どのファイルが特定の言語に一致するかを尋ねることができます。この例では、Perl 5iのどのファイルがPerlであるかを尋ねます。 https://api.github.com/search/code?q=language:Perl+repo:evalEmpire/Perl5i。それはあなたに行を与えないでしょう、そしてあなたはファイルごとに別々に返されるurlを使ってファイルサイズを尋ねなければなりません。

36
Schwern

Github.comまたはそのAPIでは現在不可能です

私はカスタマーサポートに話しかけて、これがgithub.comではできないことを確認しました。しかし彼らはこの提案をGithubチームに渡しましたので、将来的には可能になると思います。もしそうなら、私は必ずこの答えを編集します。

一方、 Rory O'Kaneの答え は、clocと浅いリポジトリクローンに基づく素晴らしい代替案です。

31
Hubro

次の関数のようにGitHub APIを使ってslocを取得できます。

function getSloc(repo, tries) {

    //repo is the repo's path
    if (!repo) {
        return Promise.reject(new Error("No repo provided"));
    }

    //GitHub's API may return an empty object the first time it is accessed
    //We can try several times then stop
    if (tries === 0) {
        return Promise.reject(new Error("Too many tries"));
    }

    let url = "https://api.github.com/repos" + repo + "/stats/code_frequency";

    return fetch(url)
        .then(x => x.json())
        .then(x => x.reduce((total, changes) => total + changes[1] + changes[2], 0))
        .catch(err => getSloc(repo, tries - 1));
}

個人的に私はgithubプロジェクトリストとプロジェクト詳細ページの両方にSLOCの数を示すクロムエクステンションを作りました。プライベートリポジトリにアクセスしてapiレート制限を回避するように、パーソナルアクセストークンを設定することもできます。

あなたはここからダウンロードすることができます https://chrome.google.com/webstore/detail/github-sloc/fkjjjamhihnjmihibcmdnianbcbccpnn

ソースコードはこちらから入手できます https://github.com/martianyi/github-sloc

11
Yi Kai

Firefoxアドオン Github SLOC

私はgithubプロジェクトのページにコードの行数を表示する小さなFirefoxアドオンを書きました: Github SLOC

10
lovasoa

質問が「できますかすばやく githubリポジトリの行数を取得してください」の場合、他の回答で述べられているように、答えは「いいえ」です。

しかし、質問が「できますか迅速にプロジェクトのスケールを確認してください」の場合、私は通常、プロジェクトのサイズを見てプロジェクトを評価します。もちろん、サイズにはすべてのアクティブなコミットからのデルタが含まれますが、大きさのオーダーは非常に近いため、適切なメトリックです。

例えば。

「docker」プロジェクトの大きさは?

ブラウザで、api.github.com/repos/ORG_NAME/PROJECT_NAMEと入力します。つまり、api.github.com/repos/docker/docker

応答ハッシュでは、サイズ属性を見つけることができます。

{
    ...
    size: 161432,
    ...
}

これにより、プロジェクトの相対的な規模がわかります。数値はKBのように見えますが、コンピューターで確認すると、桁の大きさは一定ですが、実際には小さくなっています。 (161432KB = 161MB、du -s -h docker = 65MB)

8
Jimmy Da