GitHubは1000万以上の膨大なリポジトリ数を誇り、ソフトウェアリポジトリのマイニングに興味を持つ研究者を惹きつけています。GitHubのリポジトリを分析・調査することで、ソフトウェア開発活動を改善するための貴重な知見を得ることができます。しかし、ソースコードの変更履歴やコミュニケーション履歴にアクセスするための標準的な方法は、現在のところ存在しない。
本論文では、GitHubからコミュニケーション履歴を取得することを目的とした「argo」というツールの実装を紹介します。Argoは、ユーザのGraphQLクエリを受け付けてGitHubに記録されたコミュニケーション履歴を取得し、その遷移を可視化するためのラインチャートを生成する。事例として、3種類のGraphQLクエリを実装し、GitHubにホストされている有名プログラミング言語の11のリポジトリから、スターゲイザー、イシュー、プルリクエストのデータをフェッチしました。
Argo を使用すると、驚くべき速度でデータをフェッチすることができました。スターゲイザー、イシュー、プルリクエストの1秒あたりのエントリ数は、それぞれ145.19、81.27、139.90でした。このうち、リポジトリ「golang/go」のスターゲイザーのデータ取得は最も時間がかかり、96,425件、716秒を要した。
以上、本ツールArgoは、GitHubからデータを取得し、取得した情報をもとに折れ線グラフを作成できることを実証しました。
queryディレクトリにあるStar.py, Issue.py, PullRequest.pyの個人アクセストークンを設定しないと動かない. user側からコマンドラインで設定できるようにする.
GNU General Public License version 3 (GPLv3)
Auto Repository Graph Outputの略称である.
"Argo"のロゴは,Argogorytes(アワフキバチ)から蜂のアイコンにする.
argo [GLOBAL_OPTIONS] <COMMAND> [<ARGS>]
GLOBAL_OPTIONS
-c, --config <CONFIG> specify configuration file path.
-h, --help print this message.
COMMANDs
help print help message.
fetch fetch data from GitHub.
draw draw line chart from fetched data.
list list available queries and metrics.
fetch-draw fetch data and draw line chart.
argo fetch [OPTIONS] <ARGS...>
OPTIONS
-q, --query <QUERY> specify the query. This option is mandatory.
-c, --cache-dir <DIR> specify the cache directory path.
--ignore-cache ignore the stored cache data.
--no-cache no cache the fetched data.
-Q, --queries-dir <DIR> specify the directory contains GraphQL queries.
ARGS
specify GitHub repository by owner/name format.
- queriesディレクトリにプログラム作成
- cli/cli1.pyにメトリクス追加
- FileMake.pyのfindCursorメソッドにメトリクス追加 - メトリクスメソッドの作成
argo draw [OPTIONS] <ARGS...>
-m, --metric <METRIC> specify the metric (chart script). This option is mandatory.
-c, --cache-dir <DIR> specify the cache directory path.
--ignore-cache ignore the stored cache data.
--no-cache no cache the fetched data.
-d, --write-data <DEST> set file name of graph data destination. if this option is absent, argo outputs no graph data.
-f, --format <FORMAT> specify the output image format. available: pdf, svg, and png. default: svg.
-M, --metrics-dir <DIR> specify the directory contains chart scripts.
-u, --unit <UNIT> specify the unit time. Default is 1M.
Available: nD, nW, nM, and nY. n is the integer number,
D, W, M, Y means day, week, month, and year, respectively.
ARGS
specify GitHub repository by owner/name format.
argo list
-M, --metrics-dir <DIR> specify the directory contains chart scripts.
-Q, --queries-dir <DIR> specify the directory contains GraphQL queries.
.config/argo
├── caches
│ ├── microsoft
│ │ └── vscode
│ │ ├── issues
│ │ ├── pullrequests
│ │ └── stargazers
│ └── ruby
│ └── ruby
├── config
│ └── default.json
├── metrics
│ ├── microsoft
│ │ └── vscode
│ │ ├── N-STAR
│ │ └── R-RIS
│ └── ruby
│ └── ruby
├── scripts
│ ├── LT-CIS.awk
│ ├── LT-RP.py
│ ├── N-RIS.rb
│ ├── N-STAR.py
│ ├── R-MGPR.py
│ ├── R-PRLP.py
│ └── R-RIS.py
└── queries
├── issues.graphql
├── pullrequests.graphql
└── stargazers.graphql
First Survey
200it [00:00, 1835581.62it/s, 2]
200it [00:00, 1536375.09it/s, 2]
Data acquisition completed! : 1.4907136
- GitHubで公開されている11のプログラミング言語を対象に8つのメトリクスを描画した.