mikoto2000/embulk-output-chart を作っていろいろ遊ぼうとしたけれど、そもそも機能が足りないという感じであんまりうれしくなかった。
環境
- OS: Windows 10 Pro
- シェル: PowerShell, PSVersion 5.1.17134.407
- Java: java version "1.8.0_151"
- 登場プラグイン:
やろうとしたこと
vim/vim-history リポジトリから、日ごとのコミット数をグラフにした(したかった)。
作業記録
概要としてはこんな感じ。
- vim-history リポジトリをクローン
- git log を xml として出力
- xml から sqlite に取り込み
- sqlite に集計クエリを投げつつチャート表示
vim-history リポジトリをクローン
git clone https://github.com/vim/vim-history.git
cd vim-history
git log を xml として出力
メッセージのエスケープ問題を回避するため、 xml の CDATA を活用することにした。
練習用に、今回使わない情報も入れている。 必要に応じて追加削除修正する感じで。
date は、書いた時の日付ということで、 author date のほうを取得している。
echo "<xml>"$(git log --pretty=format:'<commit><hash><![CDATA[%H]]></hash><subject><![CDATA[%f]]></subject><body><![CDATA[%b]]></body><author><![CDATA[%aN]]></author><commiter><![CDATA[%cN]]></commiter><author><![CDATA[%aN]]></author><date><![CDATA[%aI]]></date></commit>')"</xml>" > history_tmp.xml
xml から sqlite に取り込み
必要プラグインのインストール
embulk.bat gem install embulk-parser-xml embulk-output-jdbc
sqlite 用 jar ファイルのダウンロード
Maven リポジトリから sqlite-jdbc-3.25.2.jar
をダウンロードしてカレントディレクトリに配置。
設定ファイル記述
in:
type: file
path_prefix: ./history_tmp.xml
parser:
type: xpath
root: //commit
schema:
- {path: hash, name: hash, type: string}
- {path: author, name: author, type: string}
- {path: date, name: date, type: string, timestamp_format: "%Y-%m-%dT%H:%M:%S.%L%z", timezone: "+0000"}
- {path: body, name: body, type: string}
out:
type: jdbc
driver_path: './sqlite-jdbc-3.25.2.jar'
driver_class: 'org.sqlite.JDBC'
url: 'jdbc:sqlite:vim_history.sqlite3'
table: vim_history
mode: 'replace'
create_table_constraint: PRIMARY KEY(hash)
embulk 実行
embulk.bat run .\xml2sqlite.yml
sqlite に集計クエリを投げつつチャート表示
必要プラグインのインストール
embulk.bat gem install embulk-input-jdbc
embulk-output-chart のクローン
gem 化されていないので、 git clone
で持ってきてビルドする。
git clone https://github.com/mikoto2000/embulk-output-chart.git ..\embulk-output-chart
cd ..\embulk-output-chart
.\gradlew.bat package
cd ..\vim-history
設定ファイル記述
exec:
max_threads: 1
min_output_tasks: 1
out:
type: chart
chart_type: LINE
x_axis_name: Date
x_axis_type: NUMBER
y_axis_name: Commit
y_axis_type: NUMBER
serieses:
- {name: "commit count", x: d_date, y: count}
in:
type: jdbc
driver_path: './sqlite-jdbc-3.25.2.jar'
driver_class: 'org.sqlite.JDBC'
url: 'jdbc:sqlite:vim_history.sqlite3'
query: select cast(strftime('%s', date(date), 'utc') as long) as d_date, count(date) as count from vim_history group by d_date;
column_options:
d_date:
value_type: long
count:
value_type: long
チャート表示実行
..\..\embulk\embulk.bat run -L ..\embulk-output-chart .\sqlite2chart.yml
はい。
まー、そうですね...。残念ですねという感じで。
今後に向けて
- Date Axis が欲しい
- カスタムラベルとかでごまかせるかな?
- 表示範囲調整機能が欲しい
- 集計が SQL 任せなのつらい
- 画像保存できないとダメでは???
以上。ぼちぼちやっていきましょう。(そもそもチャート表示して嬉しいの?ということは考えてはいけない)