目次

1. 初めに

GitHubのリポジトリページには言語統計(Languages)が表示されています。 自分のレポジトリを確認している際、表示されている割合に違和感を覚えたので少し調べてみました。 その結果どうやら、外部ライブラリや記事で紹介したツールの成果物も集計されているみたいでした。 今回はそれらを集計から除外する方法をまとめました。

2. 言語統計の提供元(github-linguist)

GitHubで言語統計を表示する機能は、RubyGemsのgithub-linguistの機能の一部です。 github-linguist - RubyGems の説明を翻訳すると以下のように書いてあるため、「言語のブレークダウングラフの生成」が担っていることがわかります。

私たちは、blob言語の検出、コードのハイライト、バイナリファイルの無視、差分での生成ファイルの抑制、 言語のブレークダウングラフの生成を行うためにGitHubではのライブラリを使っています。

3. ドキュメントの確認

Linguist - 動作を変更する方法 を確認するとドキュメントに解決策が記載されていました。 必要そうな箇所のみを和訳し、以下にまとめました。

3.1. 設定ファイル gitattributes

プロジェクトに.gitattributesファイルを追加し、下記概要の特殊な属性を使い、オーバーライドしたいファイルに対して、 .gitignoreのような標準的なgitのパスマッチャーを使用します。 このファイルは言語統計を確定するために使われ、構文の強調にも使われます。

3.1.1. 概要

Git属性 定義ファイル ファイルでの効果
linguist-detectable languages.yml 言語の種類がdataやproseであっても統計に包含される
linguist-language=name languages.yml 指定された言語としてハイライトされ、分類される
linguist-documentation documentation.yml ドキュメントとして統計から除外される
linguist-generated generated.rb 生成されたファイルとして統計からは除外され、diffでは隠される
linguist-vendored vendor.yml ベンダから提供されたファイルとして統計から除外される

3.1.2. ベンダから提供されたファイル

JavaScriptライブラリなど、自分が書いていないコードをリポジトリにコミットするのはよくあることですが、 これはプロジェクトの言語統計情報を肥大化させ、プロジェクトが別の言語としてラベル付けされる原因にもなります。

デフォルトでは、Linguistvendor.ymlで定義された全てのパスをvendoredとして扱い、リポジトリの言語統計に含めません。

パスのベンダリングやベンダリング解除にはlinguist-vendored属性を使用します。

.gitattributes

# フォルダ内のすべてのファイルにオーバーライドを適用する
special-vendored-path/* linguist-vendored

# 特定のファイルにオーバーライドを適用する
jquery.js -linguist-vendored

# フォルダ内のすべてのフォルダとファイルにオーバーライドを適用する
ano-dir/** linguist-vendored

4. 設定ファイルの作成

.gitattributesファイルを作成することにより、任意のファイルを集計から除外できることがわかりました。

実際に作成したファイルを以下に示します。

.gitattributes

# Excluded from stats
assets/lib/** linguist-vendored
assets_of_posts/** linguist-documentation

自分のリポジトリの構成上、外部ライブラリや記事添付ファイルは除外したいと思っていました。 その結果、上記の設定となりました。

5. 設定ファイルの適用結果

設定ファイル適用前

言語統計_設定前

設定ファイル適用後

言語統計_設定後

上記画像により言語統計から外部ライブラリや記事添付ファイルを除外できたことがわかります。

6. 最後に

.gitattributesファイルを作成し、指定したファイルに対して特殊な属性を設定することにより、 言語統計に包含できることや、言語統計から除外できることがわかりました。 今回は外部ライブラリや記事添付ファイルを除外する方法をまとめました。

7. 参考サイト

  1. github-linguist - RubyGems
  2. Linguist - リポジトリ
  3. Linguist - 動作を変更する方法(今回であれば除外ファイル指定)
  4. Linguist - デフォルトで除外するファイルやフォルダを設定するファイル