Rust の .gitignore 設定
Cargo を使用する Rust プロジェクトの適切な .gitignore 設定。target ディレクトリ、ライブラリとバイナリでの Cargo.lock の判断、デバッグアーティファクトを解説します。
詳細な説明
Rust のパッケージマネージャー Cargo は target/ ディレクトリに大量のビルドキャッシュを生成します。正しい .gitignore で再現可能なビルドを保証するファイルを保持しつつ、これをバージョン管理から除外します。
Rust の必須無視パターン:
/target/
**/*.rs.bk
*.pdb
target/ ディレクトリ:
ここに Cargo はコンパイルに関するすべてを保存します:
target/debug/— デバッグビルド出力(デフォルトモード)。コンパイル済みバイナリ、中間オブジェクトファイル、インクリメンタルコンパイルキャッシュを含みます。target/release/—cargo build --releaseによる最適化されたリリースビルド出力。target/doc/—cargo docで生成されたドキュメント。target/.fingerprint/— インクリメンタルビルド用の Cargo 依存関係追跡キャッシュ。target/deps/— コンパイル済み依存関係アーティファクト。
target/ ディレクトリは依存関係が多いプロジェクトでは数ギガバイトに達することもあります。Cargo.toml と Cargo.lock から常に完全に再現可能です。
Cargo.lock の判断:
これは Rust で最も重要な .gitignore の判断です:
- バイナリプロジェクト(アプリケーション):
Cargo.lockを常にコミットしてください。すべての開発者と CI サーバーが同一の依存関係バージョンでビルドすることを保証します。「自分のマシンではコンパイルできる」問題を防ぎます。 - ライブラリクレート: Rust の慣習では、ライブラリの
Cargo.lockを無視します。ライブラリは固定バージョンではなく、依存関係の最新互換バージョンでテストすべきです。ダウンストリームの利用者は独自の lockfile を使用します。
ライブラリクレートの場合のみ Cargo.lock を .gitignore に追加します:
# Only for library crates
Cargo.lock
その他のパターン:
**/*.rs.bk—rustfmtがコードを再フォーマットする際に作成するバックアップファイル(ツールの古いバージョン)。*.pdb— MSVC ターゲットでのコンパイル時に生成される Windows デバッグシンボルファイル。
ワークスペースプロジェクト: 複数のクレートを持つ Cargo ワークスペースでは、target/ ディレクトリはワークスペースルートで共有されます。ルートの .gitignore の /target/ パターン1つですべてのメンバークレートをカバーします。
コミットすべきもの: Cargo.toml、Cargo.lock(バイナリの場合)、rust-toolchain.toml(Rust バージョンの指定)、rustfmt.toml(フォーマット設定)。
ユースケース
CLI アプリケーションと共有ライブラリクレートの両方を公開する Rust チームが、それぞれ異なる Cargo.lock 戦略を必要としており、明確な .gitignore で対応する必要があります。