GitHubのorganizationのリポジトリの言語比率を取得する
GitHubのorganizationのリポジトリの言語比率情報を知りたい
ここでいう言語比率情報とは次のようなものです。
- organizationのリポジトリ一覧における"Language"の集計
- 各リポジトリの右下にある"Languages"の比率の集計
たとえば次のような状況のとき、前者はRuby: 2
、後者はRuby: 0.5, JavaScript: 0.4, CSS: 0.1
となります。
- リポジトリA
- Ruby 55%, JavaScript 45%
- リポジトリB
- Ruby 45%, JavaScript 35%, CSS 20%
知りたい理由
パワプロでいうと、オールE・Dのような選手になりたいのではなく、どれかのスキルはA・Bになりたいと思っています。
自分がスーパーマンじゃないことは自覚しているので、広く薄い理解に時間をかけることが自信につながらない、無駄な時間に感じるんだろうなと思っています。
実装
https://github.com/mfham/github_repos_analysis
試しに"github"に対して実行した結果は次のようになりました。
// 主要言語とリポジトリ数 // 実装のREADME.md要参照 {"Ruby"=>98, "JavaScript"=>70, "Go"=>25, "TypeScript"=>22, "C"=>16, "Shell"=>16, "HTML"=>13, "Objective-C"=>10, "Python"=>8, "Java"=>7, "C#"=>7, "CSS"=>6, "CoffeeScript"=>6, "Puppet"=>4, "CodeQL"=>3, "C++"=>3, "Swift"=>3, "Jupyter Notebook"=>2, "Haskell"=>2, "Scala"=>1, "Rich Text Format"=>1, "Handlebars"=>1, "PowerShell"=>1, "Clojure"=>1} // 言語とバイトコード比率 // https://github.com/github/linguist要参照 {"Ruby"=>28.86, "JavaScript"=>19.63, "TypeScript"=>8.54, "Go"=>7.2, "Shell"=>5.09, "C"=>4.25, "HTML"=>4.08, "Objective-C"=>3.27, "Python"=>2.73, "Java"=>2.18, "CSS"=>2.1, "C#"=>2.08, "CoffeeScript"=>1.97, "Puppet"=>1.29, "C++"=>0.99, "CodeQL"=>0.92, "Swift"=>0.66, "Haskell"=>0.62, "Jupyter Notebook"=>0.48, "SCSS"=>0.35, "PowerShell"=>0.32, "Handlebars"=>0.31, "Rich Text Format"=>0.31, "Scala"=>0.3, "Makefile"=>0.24, "Dockerfile"=>0.23, "Clojure"=>0.17, "Gherkin"=>0.13, "Perl"=>0.12, "Inno Setup"=>0.11, "Vim script"=>0.08, "TeX"=>0.06, "Protocol Buffer"=>0.04, "Tcl"=>0.03, "Lua"=>0.03, "M4"=>0.02, "Groovy"=>0.02, "Batchfile"=>0.02, "Liquid"=>0.02, "Awk"=>0.01, "Yacc"=>0.01, "Common Lisp"=>0.01, "Objective-C++"=>0.01, "Smalltalk"=>0.01, "Prolog"=>0.01, "CMake"=>0.01, "Augeas"=>0.0, "Thrift"=>0.0, "UnrealScript"=>0.0, "ApacheConf"=>0.0, "Scilab"=>0.0, "Assembly"=>0.0, "Ragel in Ruby Host"=>0.0, "XS"=>0.0, "PHP"=>0.0, "Scheme"=>0.0, "Pascal"=>0.0, "Visual Basic"=>0.0, "ANTLR"=>0.0, "Logos"=>0.0, "Bison"=>0.0, "Erlang"=>0.0, "SystemVerilog"=>0.0, "Emacs Lisp"=>0.0, "Mathematica"=>0.0, "XSLT"=>0.0, "Perl 6"=>0.0, "SQLPL"=>0.0, "PLSQL"=>0.0, "Smarty"=>0.0, "RPC"=>0.0, "Jsonnet"=>0.0, "ASP.NET"=>0.0, "Lex"=>0.0, "RAML"=>0.0, "Vue"=>0.0, "F#"=>0.0, "Meson"=>0.0, "Raku"=>0.0, "Starlark"=>0.0, "Haml"=>0.0, "Slim"=>0.0, "HCL"=>0.0, "R"=>0.0, "Dart"=>0.0, "Mako"=>0.0, "sed"=>0.0, "Ragel"=>0.0, "GDB"=>0.0, "Kotlin"=>0.0, "AspectJ"=>0.0, "Roff"=>0.0, "DTrace"=>0.0, "Racket"=>0.0, "TSQL"=>0.0}
リファクタとRSpec実装は時間を見つけてやります。
実装を見てもAPIの戻り値や変数の中身がわからないので、こういうときにRSpecファイルが存在すると理解しやすいんだろうなと思いました。
最後に
APIのドキュメントやRubyライブラリの調査含めて、このボリュームで実装1人日くらいでした。
これが今の自分です。
実装しているときはとてもワクワクしていました。
おそらく自分がやりたいと思っていたことがやれているからだと思っています。
ちなみに実装ではちゃっかりRuby 3.0.0を使っています。