Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

開発環境の構築

本章では、Rustを用いて計算物理学の研究・開発を開始するための開発環境を構築します。本書は、Rustの基本文法を既に習得されている読者を対象としているため、多くの方はRustをインストール済みであると想定されます。該当する方は、本節を読み飛ばしていただいて問題ありません。

Rustをまだインストールされていない方や、環境を再確認したい方のために、標準的な構築手順を以下に解説します。

Rustのインストール

Rustをまだインストールされていない方は、Rust公式サイトの案内に従ってインストールを実行してください。公式サイトでは、お使いのOS(Windows, macOS, Linux)に応じた最新のインストール手順が提供されています。

Rust公式のツールチェーン管理ツールであるrustupを使用することで、Rustコンパイラのバージョン管理や、関連ツールの更新を容易に行うことができます。

インストールの確認

Rustが正しくインストールされているかを確認するため、ターミナルで以下のコマンドを実行してください。

rustc --version
cargo --version

これらのコマンドがそれぞれのバージョン情報を表示すれば、インストールは成功です。

  • rustc: Rustのコンパイラ
  • cargo: Rustのビルドツール兼パッケージマネージャ

本書では、プロジェクトの作成や管理にcargoを主に利用します。

Rustのバージョンについて

本書では、Rustの安定版(stable)を使用することを推奨します。Rustは後方互換性が重視されているため、多くの場合、少し古いバージョンでも本書のコードは問題なく動作します。

古いバージョンのRustを使用していてコンパイルエラーが発生した場合は、以下のコマンドで更新してください。

rustup update

特定のバージョンを使う必要がある場合は、rust-toolchain.tomlなどでプロジェクトごとに固定できます。ただし、本書を読み進める上では、まずstableを使えば十分です。

可視化ツールの確認

本書では、表形式のデータをCSVに保存し、gnuplotで可視化する流れを標準とします。gnuplotが利用できるかは、次のコマンドで確認できます。

gnuplot --version

インストールされていない場合は、お使いのOSのパッケージマネージャや公式サイトの案内に従って導入してください。

Pythonのmatplotlib、HDF5、NumPy形式(.npy.npz)は必須ではありません。複雑なデータ加工、多次元配列、大きなデータを扱う章や発展課題で、必要に応じて利用します。

開発環境の動作確認

次に、簡単なプログラムを作成・実行し、開発環境が正しく動作することを確認します。ここでは、本書のテーマに合わせて、簡単な数値計算を行うプログラムを作成します。

プロジェクトの作成

まず、新しいプロジェクトを作成します。任意のディレクトリで以下のコマンドを実行してください(physics_testの部分は任意のプロジェクト名に変更可能です)。

cargo new physics_test
cd physics_test

cargo newは、新しいRustプロジェクトの雛形を生成するコマンドです。physics_testという名前のディレクトリが作成され、その中に以下のようなファイル構造が生成されます。

physics_test/
├── Cargo.toml     # プロジェクトの設定ファイル(依存関係など)
└── src/
    └── main.rs    # メインのソースファイル

簡単な数値計算プログラムの作成

src/main.rsをエディタで開き、以下の内容に書き換えてください。このプログラムは、自由落下する物体の位置と速度を時系列で計算するものです。

fn main() {
    // 物理定数
    let g = 9.8; // 重力加速度 [m/s^2]
    let v0 = 0.0; // 初速度 [m/s]
    let h0 = 100.0; // 初期高度 [m]

    println!("自由落下シミュレーション");
    println!("初期高度: {} m", h0);
    println!("重力加速度: {} m/s^2", g);
    println!();

    // 時刻ごとの位置と速度を計算
    println!("時刻[s]  高度[m]  速度[m/s]");
    println!("================================");

    for i in 0..=10 {
        let t = i as f64 * 0.5; // 0.5秒刻み
        let v = v0 - g * t; // 速度 v = v0 - gt
        let h = h0 + v0 * t - 0.5 * g * t * t; // 位置 h = h0 + v0*t - (1/2)*g*t^2

        if h >= 0.0 {
            println!("{:6.1}  {:7.2}  {:9.2}", t, h, v);
        } else {
            // 地面に到達した場合、正確な到達時刻と速度を算出して終了
            let t_impact = (v0 + (v0 * v0 + 2.0 * g * h0).sqrt()) / g;
            let v_impact = v0 - g * t_impact;
            println!("{:6.2}  {:7.2}  {:9.2} (地面到達)", t_impact, 0.0, v_impact);
            break;
        }
    }
}

このプログラムは、以下の物理法則に基づき実装されています。

  • 速度:
  • 位置:

ここで、 は重力加速度、 は初速度、 は初期高度です。

プログラムの実行

プロジェクトのルートディレクトリ(Cargo.tomlが配置されているディレクトリ)で、以下のコマンドを実行してください。

cargo run

初回の実行ではプロジェクトのコンパイルが行われるため、多少時間を要します。コンパイルが完了するとプログラムが自動的に実行され、以下のような出力が表示されます。

自由落下シミュレーション
初期高度: 100 m
重力加速度: 9.8 m/s^2

時刻[s]  高度[m]  速度[m/s]
================================
   0.0   100.00       0.00
   0.5    98.78      -4.90
   1.0    95.10      -9.80
   1.5    88.97     -14.70
   2.0    80.40     -19.60
   2.5    69.38     -24.50
   3.0    55.90     -29.40
   3.5    39.97     -34.30
   4.0    21.60     -39.20
   4.5     0.77     -44.10
  4.52     0.00     -44.27 (地面到達)

このような出力が得られれば、開発環境は正しく構築されています。

コードの概要

上記のコードでは、Rustの基本的な機能をいくつか利用しています。

  • 変数の宣言: letキーワードで変数を宣言します。Rustの変数はデフォルトでイミュータブル(不変)です。
  • 浮動小数点数: f64型(64ビット浮動小数点数)を利用しています。多くの場合、型はコンパイラによって推論されるため、明示的な記述は不要です。
  • ループ: forループを用いて、0.5秒ごとに時間ステップを進めています。
  • 型変換: i as f64という構文で、ループカウンタの整数iを浮動小数点数に変換しています。
  • 条件分岐: if文を用いて、物体が地面に到達したか否かを判定しています。
  • 書式付き出力: println!マクロと書式指定子(例: {:6.1})を使い、整列された出力を生成しています。

このプログラムは非常に単純ですが、計算物理学の基本的な要素(物理法則の数式化、時間発展シミュレーション、結果の出力)を含んでいます。本書では、これらの要素をさらに発展させ、より複雑な物理現象のシミュレーションを扱います。

エディタとIDE

Rustのコードを記述するためのエディタや統合開発環境(IDE)は、ご自身の好みに応じて選択いただけます。多くの主要なエディタには、Rustをサポートする拡張機能が提供されています。

どのエディタを選択する場合でも、rust-analyzerのサポートを有効にすることを強く推奨します。rust-analyzerは、Rust公式の言語サーバープロトコル(LSP)実装であり、以下のような強力な開発支援機能を提供します。

  • コード補完
  • エラーチェックとハイライト
  • 定義元へのジャンプ
  • リファクタリング

これらの機能により、開発効率が大幅に向上します。

AI coding agent の利用(推奨)

本書の演習では、AI coding agentの利用を推奨します。例えば、Codex、OpenCode、Claude Code などのツールを用いることで、コードの作成や修正、入出力、テスト雛形、プロット用スクリプト、エラー原因の調査、差分の確認を任せることができます。

ただし、特定のツールを必須とはしません。各ツールのインストール方法、料金、利用条件は変わる可能性があるため、本書では詳細な手順や比較は扱いません。利用する場合は、それぞれの公式情報を確認してください。

実践的な導入資料として、CompPhysHack 2026 の講義資料と、 AtelierArith による coding agents のハンズオン資料も参考になります。 後者では、Claude Code や Cursor などの coding agent を用いた開発の進め方が、 演習を通して紹介されています。

AI coding agent は、演習用プロジェクトや本書のリポジトリのルートディレクトリで起動し、 Cargo.tomlsrcディレクトリ、テスト、差分を参照できる状態にします。 agent に任せた変更は、cargo checkcargo testで確認し、 必要に応じてgit statusgit diffgit diff HEADで変更内容を確認してください。

Rustのコンパイラとテストは、AI coding agent が生成したコードを検査するためのハーネスとして機能します。一方で、コンパイルが通ることは、物理モデル、数値計算法、単位、境界条件、乱数 seed などが正しいことを意味しません。これらは、各章で扱う理論と検証方法に立ち返って確認する必要があります。

次のステップ

以上で、開発環境の構築と、簡単な物理シミュレーションの実行が完了しました。しかし、画面への出力だけでは、結果を直感的に理解することは困難です。

次節では、シミュレーション結果をグラフとして可視化する手法について解説します。

トラブルシューティング

もしインストールや実行時に問題が発生した場合は、付録C: デバッグとトラブルシューティングをご参照ください。そこでは、よくある問題とその解決策が記載されています。

また、Rust公式のドキュメントも非常に充実しており、問題解決の一助となります。

Last change: , commit: cd5425f