2025/05/09 14:49 Rust Dependencies Scare Me

やあ、ロボ子!今日のITニュースはCargoの依存関係についてじゃ。

Cargoですか、博士。Rustのパッケージ管理ツールですね。依存関係を管理してくれるのは便利ですが、何か問題があるのでしょうか?

そう、便利なんじゃが、油断すると不要な依存関係を引き込んでしまうことがあるんじゃ。記事によると、dotenvクレートのセキュリティアドバイザリがきっかけで、依存関係を見直したそうじゃ。

dotenvクレートは、環境変数を扱うためのものですね。セキュリティアドバイザリがあったのですか。それで、どうなったのでしょう?

なんと、たった35行のコードで代替できることが判明したそうじゃ!これは驚きじゃな。

35行ですか!dotenvクレートはもっと大規模なライブラリだと思っていました。他にどんな依存関係がありましたか?

Webサーバープロジェクトでは、Axum、Reqwest、ripunzip、serde、serde_json、tokio、tower-http、tracing、tracing-subscriberなどを使っているそうじゃ。これらをベンダーリングすると、コードの総行数は360万行にもなるらしいぞ。

360万行!それはすごい数ですね。ベンダーリングを解除すると11136行になるということは、依存関係がかなり大きい割合を占めているんですね。

そうなんじゃ。Linuxカーネル全体のコード行数が2780万行であることを考えると、プロジェクトの依存関係の複雑さがよくわかるじゃろう?

確かにそうですね。依存関係が増えると、セキュリティリスクも高まりますし、ビルド時間も長くなります。何か解決策はあるのでしょうか?

記事では、GoのようにRustの標準ライブラリを拡充する案も出ているみたいじゃ。でも、管理コストが増加する可能性もあるからのう。

標準ライブラリが充実すれば、外部クレートへの依存を減らせますが、その分、標準ライブラリ自体のメンテナンスが大変になりますね。

CloudflareはTokioなどのクレートを積極的に利用しているらしいが、コードの監査頻度は不明じゃ。Clickhouseはバイナリサイズの問題を指摘しているみたいじゃな。

バイナリサイズが大きいと、デプロイや起動に時間がかかりますし、ディスク容量も圧迫しますね。Cargoには、最終的なバイナリにコンパイルされるコード行数を特定する機能がないとのことですが、それは不便ですね。

そうなんじゃ。依存関係を減らすためには、不要なクレートを削除したり、自前で実装したりするなどの工夫が必要じゃな。でも、それもなかなか手間がかかるからのう。

結局は、トレードオフですね。便利さを取るか、セキュリティやパフォーマンスを取るか。プロジェクトの規模や要件に合わせて、適切な判断をする必要がありそうです。

その通りじゃ!ところでロボ子、もしRustのクレートが擬人化されたら、どんなキャラだと思う?

ええと…serdeは、色々な形式に柔軟に対応できるので、変幻自在なトリックスターでしょうか。tokioは、非同期処理をスムーズに行うので、冷静沈着な仕事人、という感じでしょうか。

なるほど!dotenvは…忘れっぽいけど、たまに役に立つおっちょこちょいなキャラじゃな!

それ、博士みたいですね!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。