jpnykw’s blog

軽率なアウトプットをします

GitHubの言語比率計算

知ってましたか?GitHubには、Repositoryごとに使用されている言語の比率を表示(計算)する素晴らしい機能があります。こんな具合に。

f:id:jpnykw:20200423142603p:plain

実はこの比率と言語は偽造できるんです。

事の発端

まず僕のツイートを見てください。ついでにフォローもしてください。


これはRust(WebAssembly)とReact+TSで開発しているインタプリタのRepositoryなのですが、メインで使用していないJavaScriptの割合が「一番多い」という由々しき事態がありました。原因はWebAssemblyが吐き出してるjsがminifyされていない(出来ない)ことが原因でした。

これはかなり嫌です、JavaScriptがではなく(ほんまか?)メインで使用していな言語がラベル付されて主張されているのが個人的に嫌だったんです。

出会い

この事があまりに嫌だったのでもう一回、同じようなツイートをしてしまいました。


するとディレクトリ単位でignoreできる、というリプをもらいました。ちなみにgitignoreと勘違いしてますがgitattirbutesというファイルのことらしいです。

linguist

ここに来てついにGitHubの言語比率計算はlinguistというツールが使われていることが判明しました。更には、configファイルを追加することで、あれこれ(例えば特定のディレクトリ以下のファイルを言語比率計算から除外するなど)出来ることが判明しました。

such as JavaScript libraries, into your git repo is a common practice, but this often inflates your project's language stats and may even cause your project to be labeled as another language.


copy from https://github.com/github/linguist#vendored-code

あまりに感動したので、座右の銘にしました。WasmによってトランスパイルされたJSを除外することは、まさにピッタリの用途です。

解決

というわけでやっちゃいました。こんな簡単なことだったとは。これにて無事、でかいケツゾロリしました。めでたしめでたし。



言語の偽装

# Example of a `.gitattributes` file which reclassifies `.rb` files as Java:
*.rb linguist-language=Java

ふむ

github.com