Rustのエコシステムにおいて、プログラムの動作速度や安全性と同じくらい重視されているのが、開発者の生産性とコードの保守性です。

その中心的な役割を担っているのが、標準のフォーマットツールであるcargo fmtです。

多人数での開発はもちろん、個人プロジェクトであっても、一貫性のあるスタイルを維持することは、将来の自分やチームメンバーへの最大の貢献となります。

本記事では、2026年現在のRust開発におけるcargo fmtの最新活用術と、プロジェクトの品質を自動的に担保するためのCI環境の構築手法について詳しく見ていきましょう。

Rustにおけるコードフォーマットの重要性

Rustは言語仕様が厳格である一方で、書き方の自由度が比較的高いため、意識的にルールを設けないとプロジェクトごとにコードスタイルが分散してしまいます。

コードの可読性はレビューの効率に直結し、結果としてプロジェクトの進行速度を左右します。

「だれが書いても同じスタイルになる」という環境を整えることは、些細なスタイルの違いによる議論を排除し、ロジックの本質に集中するために不可欠です。

Rust公式が提供するrustfmtおよび、それをCargo経由で呼び出すcargo fmtは、この目的を達成するための最も標準的で信頼できる手段です。

cargo fmtの基本操作と導入手順

まずは、基本的な使い方と導入の確認から始めましょう。

最近のRustツールチェーンをインストールしている場合、通常は標準で含まれていますが、入っていない場合は以下のコマンドで追加できます。

Shell
# rustfmtのインストール
rustup component add rustfmt

プロジェクトのルートディレクトリで以下のコマンドを実行すると、プロジェクト内のすべてのRustソースコードが、デフォルトのスタイルルールに従って再フォーマットされます。

Shell
# プロジェクト全体のフォーマットを実行
cargo fmt

特定のファイルだけでなく、ワークスペース全体を対象にするため、非常に効率的です。

また、実際にファイルを書き換える前に、現在のコードがルールに従っているかどうかを確認したい場合は、--checkオプションを使用します。

Shell
# フォーマットが必要な箇所があるかチェック(書き換えは行わない)
cargo fmt -- --check

このコマンドは、フォーマットが崩れている箇所がある場合に非ゼロの終了コードを返すため、後述するCI環境でのチェックに重宝します。

rustfmt.tomlによる高度なカスタマイズ

デフォルトの設定でも十分に強力ですが、プロジェクト独自のルールを適用したい場合には、rustfmt.toml(または .rustfmt.toml)という設定ファイルをプロジェクトルートに配置します。

2026年における推奨設定の例

現在のRust開発では、特に長いメソッドチェーンや複雑なマクロの可読性を高めるために、いくつかのオプションを調整するのが一般的です。

以下に、実戦的な設定例を記述します。

TOML
# rustfmt.toml の設定例

# 1行の最大文字数を100文字に制限
max_width = 100

# RustのEditionを指定(2024 editionを推奨)
edition = "2024"

# コメント内もフォーマットの対象にする
wrap_comments = true

# インポートの並び替え(アルファベット順)
reorder_imports = true

# 型の定義における記述スタイルを統合
type_alias_box_threshold = 1

注意点として、一部の設定項目は「Unstable」扱いとなっている場合があります。

不安定なオプションを使用するには、nightlyチャンネルのRustを使用するか、特定のフラグを渡す必要がありますが、一般的なチーム開発では安定版の範囲内で設定を完結させるのが安全です。

設定の優先順位

rustfmtは、以下の順序で設定ファイルを探します。

  1. 実行ディレクトリにあるrustfmt.toml
  2. 親ディレクトリを遡って最初に見つかったrustfmt.toml
  3. グローバルな設定ファイル

チームで共有するリポジトリであれば、リポジトリのルートに必ず設定ファイルをコミットしておくことを強く推奨します。

これにより、開発者ごとの環境差異をなくすことができます。

特定の箇所でフォーマットを無効化する

稀に、特定の関数の並びや複雑な行列計算の記述など、手動で整えた方が圧倒的に見やすいケースがあります。

そのような場合には、アトリビュートを使用して部分的にフォーマットをスキップさせることが可能です。

Rust
// 特定の関数に対してフォーマットをスキップ
#[rustfmt::skip]
fn complex_matrix_layout() {
    let matrix = [
        1, 0, 0,
        0, 1, 0,
        0, 0, 1,
    ];
}

// モジュール全体に対してスキップ
#[rustfmt::skip]
mod generated_code;

ただし、安易なスキップの多用はコードベースの統一感を損なうため、どうしても必要な場合に限定するべきです。

生成されたコード(コードジェネレータによる出力)などは、この機能の格好の対象となります。

CIにおける自動化手順(GitHub Actions)

コードの品質を維持する最も確実な方法は、「フォーマットされていないコードのビルドを失敗させる」という仕組みをCI(継続的インテグレーション)に組み込むことです。

ここでは、GitHub Actionsを利用した自動化の手順を解説します。

ワークフローの構築

リポジトリの .github/workflows/fmt.yml に、以下のような設定を記述します。

YAML
name: Code Formatting Check

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  fmt:
    name: Rustfmt Check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: Run cargo fmt check
        run: cargo fmt --all -- --check

このワークフローは、プルリクエストが作成された際やメインブランチへのプッシュ時に自動的に実行されます。

--checkフラグがあるため、1箇所でもフォーマット違反があればジョブが失敗し、マージをブロックできます。

自動修正コミットの導入

一部のプロジェクトでは、チェックするだけでなく、CI側で自動的にフォーマットを修正してコミットを戻す手法も採用されています。

しかし、コミットログがCIによる修正で埋まることを嫌うチームも多いため、 基本的にはローカルでの修正を促す「チェックのみ」の運用が一般的です。

開発者は、エディタの「保存時にフォーマット(Format on Save)」機能を有効にしておくことで、CIで落とされるストレスを最小限に抑えられます。

ローカル開発環境の最適化

cargo fmtを真に活用するためには、CIだけでなく、各開発者のエディタ環境と統合することが欠かせません。

エディタ推奨される設定方法
VS CodeRust-analyzer拡張機能を導入し、"editor.formatOnSave": true を設定する。
IntelliJ / RustRover設定の “Rust” セクションから “Run rustfmt on save” にチェックを入れる。
Neovimrust.vimlspconfig を使用し、保存時の自動コマンド(autocmd)を設定する。

これらの設定を行うことで、開発中に一度もコマンドを叩くことなく、常にrustfmt.tomlに準拠した美しいコードが保たれます。

これは、開発者の認知的負荷を大幅に軽減する効果があります。

大規模プロジェクトでの注意点

プロジェクトが成長し、ワークスペース(Workspace)内に多数のクレートが存在するようになると、cargo fmtの挙動に注意が必要になる場合があります。

デフォルトでは、cargo fmtはワークスペース内のすべてのパッケージを対象とします。

もし、特定のパッケージだけを個別にフォーマットしたい場合は、パッケージディレクトリへ移動して実行するか、-pフラグを使用します。

Shell
# 特定のパッケージのみフォーマット
cargo fmt -p my_sub_crate

また、2026年時点の最新のcargoでは、依存関係の解決と同様にフォーマットの並列処理も最適化されていますが、非常に巨大なモノレポ(Monorepo)構成では、差分のみを対象とするフォーマットツールとの併用が検討されることもあります。

しかし、標準のcargo fmtが提供する一貫性のメリットを捨ててまで外部ツールに依存するのは、慎重に判断すべきです。

まとめ

cargo fmtは、単なる「見た目を整えるツール」ではありません。

それは、Rustコミュニティが長年培ってきた「共有された美意識」をプロジェクトに導入し、開発者同士のコミュニケーションを円滑にするためのインフラです。

本記事で解説した以下のステップを実践することで、プロジェクトのコード品質は劇的に向上します。

  1. cargo fmtの基本コマンドを把握し、日常的に使用する。
  2. rustfmt.tomlを作成し、プロジェクト固有のルールを明文化する。
  3. GitHub ActionsなどのCI環境で--checkを実行し、品質を強制する。
  4. エディタの保存時フォーマットを有効化し、無意識にルールを守れる環境を作る。

Rustの2024 edition以降、エコシステムの安定性はさらに増しており、ツールチェーンの連携もより強固になっています。

「コードが動くこと」だけでなく「コードが美しく読みやすいこと」を当たり前にするために、ぜひ今日からcargo fmtをフル活用してください。