はじめに
この記事は「Rustのエラーライブラリ利用状況を調べてみた」の続きです。前回から3ヶ月も経っていませんが、そこそこ大きな変化があったので更新することにしました。
2020年1月時点のトレンドグラフ
前回の記事では単に各エラーライブラリの使用数を表にまとめただけでしたが、その後クレートのトレンドグラフを作るcargoサブコマンドcargo-trendを作ったので、その結果で解説します。
(cargo-trendの紹介はこちら)
縦軸は全クレートに対する割合で、例えば現在のfailureは全クレートの6%程度に使用されています。
冒頭に述べた大きな変化というのはこのfailureの割合が減り始めたということです。
その代わりanyhowとthiserrorが大きくシェアを伸ばしています。
(重なっていて見づらいですが、右下で急上昇中の2つです)
以下は直近1か月で使用率の伸びたクレートトップ5ですが、anyhow/thiserrorの両方が入る結果となりました。
anyhowとthiserror
この2つのクレートは昨年11月頃にリリースされました。作者はsynやquoteといったマクロ周りの重要クレートをたくさん作っているdtolnay氏です。出たばかりですがすでにバージョン1.0になっていて、その点でも選びやすい気がします。
2種類あるのは用途が違うためです。ざっくりと言えばanyhowがアプリケーション用、thiserrorがライブラリ用です。
failureでは同じライブラリの使い方を変えることでアプリケーションとライブラリの両方をカバーしていました。
個人的にはこのように別れている方が分かりやすいと思います。
試しに手元のアプリケーションをいくつかanyhowにしてみましたが、ほとんどfailureと同じAPIが提供されているのでuseを書き換えるくらいで簡単に移行できました。
最近cargoのエラーライブラリがfailureからanyhowに変わった("Migrate from the failure
crate to anyhow
#7776")ようですし、今後作るアプリケーションはanyhowで行こうと思います。
まとめ
まだ当分failureが主流かと思っていましたが、意外と早く世代交代するのかもしれません。