はじめに
少し前に"Rustのエラーライブラリ利用状況を調べてみた"という記事を書きました。このときは執筆時点でのライブラリ使用数を比較しましたが、実際にあるライブラリが流行っているかどうかはそれだけではわかりません。
そこでGoogleトレンドのように時系列でライブラリの使用数が見れるコマンドを作ってみました。
使い方
ユーザはRustプログラマだと思うので、
$ cargo install cargo-trend
でインストールしてください。
引数なしだとカレントディレクトリのRustプロジェクトが依存しているクレートのトレンドグラフをtrend.svgに出力します。
$ cargo trend
引数にクレート名を与えることもできます。
例えばエラーライブラリの場合なら
$ cargo trend failure error-chain quick-error snafu err-derive
こんな感じです。
-o
オプションで出力ファイル名を与えることができて、拡張子によってフォーマットが変わります。対応しているのは.svg
/.png
/.bmp
/.jpeg
/.jpg
です。
トレンドグラフの例
いくつか面白かったものを載せておきます。
まず、前回記事で取り上げたエラーライブラリです。
最初期のquick-errorからerror-chainへの移り変わりと、failureの急速な伸びが分かります。
これを見ていると当分failureだろうと思います。
次に引数パーサライブラリです。
clapがデファクトスタンダードですが、二番手のstructoptも勢いがあるようです。
(次期clapがstructoptの機能を取り込むようなので、そうなったらclap一強でしょうか)
最後はターミナルにカラー出力するためのライブラリです。
これはまだデファクトスタンダードと言えるものは現れていないようです。
仕組み
前回の記事ではcrates.ioのWeb APIから情報を取得しましたが、過去の情報は取れませんし、あまり大量のリクエストを投げるのも良くないので、別の方法を考える必要があります。
幸いcrates.ioが保持しているクレートのインデックスはgithub上に存在します。
このリポジトリのmasterブランチは2018/9/26開始ですが、それは履歴が増えすぎて過去の履歴をブランチに追い出したためで、ブランチを辿れば2014年くらいからの全てのインデックス情報が得られます。
そこで最初のコミットから1日毎にチェックアウトして依存数のデータベースを構築しました。
データベースはgzip圧縮したJSONで、ここにあります。過去4年分で700KB程度になりました。
cargo-trendコマンドはこの構築済みデータベースをダウンロードしてトレンドグラフを生成します。
cargo tally
ここまで作ってRustのユーザフォーラムに投稿したところ、dtolnay氏(synとかquoteとかマクロ周りの有名クレートを作ってるすごい人)から「ほとんど同じものあるよ」というコメントを貰いました。
現状のcargo trendに不足している機能もいくつか教えてもらったので、そのあたりをキャッチアップしつつ差別化要素を考えようと思います。