好奇心の足跡

飽きっぽくすぐ他のことをしてしまうので、忘れないため・形にして頭に残すための備忘録。

Githubのコードから使用しているOSS一覧とライセンスなどの情報を収集するツール紹介

Githubのコードから使用しているOSS一覧を収集するツールを作ったので、使い方やデモを紹介します。

github.com

機能

Githubの指定したリポジトリからOSSライブラリ管理ファイル(Gemfile, package.jsonなど)をクロールし、管理ファイルに書かれたOSSの情報をとってきてcsvやtext形式で出力します。
事前にGithubのtokenを取得しておけば、privateリポジトリの情報もクロールできます。

※ライブラリ管理ファイル以外で管理されているOSS(直接ライブラリが埋め込まれている)や、OSSソースコードのコピーは検出できませんのでご注意ください。

開発プロセスに「OSSを使用するときはライブラリ管理ファイルを使用すること」がルール付けられている、もしくはレビューでこれが担保されているような場合は、OSSライセンス確認ツールとしてお使いいただきやすいかと思います。
個人開発時のOSSライセンスチェックとしても使いやすいかと思います。

2018年9月現在の機能一覧

  • 対応source
  • 対応ライブラリ管理ファイル:
  • 収集情報
    • ライブラリ名
    • 指定バージョン (version)
    • 著作者 (author)
    • ライセンス (license)
    • ホームページ (homepage url)
    • ソースコード置き場 (source code url)
  • 出力形式

インストール

python3 で動くので、python3環境を用意してください。
後は下記コマンドで git clone するか、zipでリポジトリを落としてきます。

$ git clone https://github.com/kusuwada/libcollector.git
$ cd libcollector
$ pip install -r requirements.txt

以上。

使い方

まずはサンプルを動かしてみる

$ cd libcollector
$ python libcollector.py

これで、sampleとして kusuwada/libcollector のリポジトリOSS一覧がcsv形式で出力されます。
数が少なくて物足りない場合は、 libcollector/settings.yml を開いて、コメントアウトしてある vuejs/vue などの公開リポジトリを入れて実行してみてください。

vuejs/vue リポジトリに対するクロール結果

f:id:kusuwada:20180905232834p:plain

事前準備

もしprivateリポジトリを対象にしたい場合や、高い頻度で回したい場合は、github access token for commandline を取得しておきます。
取得方法は下記を参照。
GitHub Help: Authenticating to GitHub.
scope selectionではrepoの権限を選択してください。

設定

libcollector/settings.ymlを編集します。

target_repositories

クロール対象のリポジトリを設定します。フォーマットは下記です。

{owner}/{repository}

例:

target_repositories:
  - kusuwada/node-slack-log-exporter
  - kusuwada/ruby-slack-log-exporter
  - requests/requests

プライベートリポジトリも同様に設定できます。

target_manager

クロール対象のライブラリ管理ファイルを指定できます。
基本的には初期設定で問題ないかと思いますが、特定の言語・特定の管理ファイルで管理されているOSSだけ収集したい・処理を高速化したいときは、不要なものを外してください。

output

出力形式を指定できます。出力形式は複数指定できます。指定フォーマットは下記になります。

{output_type}: {output_path}

optional_information

出力時に出力する情報を制限できます。
これらのoptionをすべてFalseにすると、ライブラリ名・バージョンのみの出力となります。また、ライブラリ情報を取りに行かないため処理が高速になります。

デモ

サンプルの vuejs/vue リポジトリjavascript メインのリポジトリだったので、他の言語のリポジトリも。

sinatra/sinatra (ruby/Gemfile)

f:id:kusuwada:20180905235135p:plain

gunthercox/ChatterBot (python/requirements.txt)

f:id:kusuwada:20180906000853p:plain