エディタ設定: VSCode#

qc-rs はどのエディタでも使えますが、Visual Studio Code(VSCode)は良い既定です。無料で、どの OS でも同じ ように動き、Python と Jupyter のサポートが優秀で、そして量子化学で重要なことに、リモートマシン(クラスタ)の コードをローカルのように編集・実行できます。この章では快適な qc-rs ワークスペースを整えます。任意なので、別の エディタが好みなら クイックスタート へ飛んでかまいません。

VSCode と必須拡張を入れる#

code.visualstudio.com から VSCode を入れ、いくつかの拡張を追加します (拡張パネルはサイドバーの四角いアイコン、または Ctrl/Cmd+Shift+X):

  • PythonPylance(Microsoft)— 言語サポート、補完、インタプリタ管理;

  • Jupyter(Microsoft)— ノートブックと対話セルの実行;

  • Remote - SSH(Microsoft)— リモートマシンでの編集・実行(下記);

  • 任意:Live Preview(本マニュアルの HTML プレビュー)、Rust コアを触るなら rust-analyzer

推奨:AI コーディングアシスタント#

先に進む前に、AI コーディングアシスタント — Claude CodeCodex — を入れて、VSCode の統合ターミナル(Terminal → New Terminal、 または Ctrl+`)で開いたままにしておくことを勧めます。これは qc-rs にとって単なる「あると便利」ではなく、 qc-rs が本来そう使われることを意図した AI ファースト("vibe coding")の流儀であり、プロジェクト自身がそれで 作られている流儀そのものです。すぐに効く具体的な理由をいくつか:

  • qc-rs をビルドしてくれる。 新しいマシンでは、make setup / make install を実行してビルドプロファイルを 保存するよう頼めば、BLAS/MPI/Python を検出してフラグを自分で直します。これは インストール §3.1 の推奨ビルド手順です。

  • リポジトリの中から「どうやるの?」に答える。 ソースと本マニュアルを読むので、計算の回し方・オプションの 意味・ビルド失敗の原因を、エディタを離れずに尋ねられます。

  • 一緒にコードを書き・直す。 アシスタントはターミナルに常駐するので、VSCode で開いているまさにそのファイルを 編集します;その差分はエディタのソース管理ビューでレビューできます。

次章 はこれらのツールの導入と操作に充てています(Node.js 不要の curl | sh 一行 インストーラ)。Claude Code には公式の VSCode 拡張もあり(拡張パネルで "Claude Code" を検索)、ターミナル CLI に サイドパネルを重ねられます。GUI が好みならこちらを。

リモートマシン(クラスタ)で作業する#

量子化学のジョブは、手元のノート PC ではなく共有サーバで動くことがよくあります。Remote - SSH を使うと、 リモートマシンを VSCode の中に開けます:

  1. Ctrl/Cmd+Shift+P"Remote-SSH: Connect to Host…" → サーバを選ぶ(または追加)、例 you@cluster

  2. 新しい VSCode ウィンドウがサーバ上で開きます。File → Open Folder… で qc-rs のチェックアウトを選択。

  3. これ以降、ターミナル・Python・マニュアルのビルドなど、すべてがサーバ上で動きます。手元の PC は画面と キーボードにすぎません。

Tip

Remote-SSH はポートも自動転送します。これが、ローカルで配信した Web ページ(ビルドしたマニュアルなど)を 手元のブラウザで見る仕組みです — 下の「マニュアルをプレビュー」参照。

VSCode を qc-rs 環境に向ける#

VSCode には、どの Python を使うか — qc-rs が入った uv venv — を教える必要があります。make setup が既に やってくれています:git-ignore の .vscode/ フォルダに 4 つのファイルを生成します。VSCode がどのように venv を 使い、Rust コアを再ビルドし、正しい環境で実行するのかが分かるので、読む価値があります。(これらはすべて プロファイル由来です — インストール → プロファイルの中身 参照。)

settings.json — ワークスペース設定#

{
  "python.defaultInterpreterPath": "/home/you/local/myproj/.venv/bin/python",
  "python.envFile": "${workspaceFolder}/.vscode/my.env",
  "python.testing.pytestEnabled": true,
  "python.testing.pytestArgs": ["tests"],
  "python.terminal.activateEnvironment": true,
  "terminal.integrated.env.linux": { "UV_PROJECT": "/home/you/local/myproj" },
  "rust-analyzer.cargo.noDefaultFeatures": true,
  "rust-analyzer.cargo.features": ["intel-mkl-system", "xc-bundled", "pcm"],
  "rust-analyzer.cargo.extraEnv": { "MKLROOT": ".../mkl/2025.2", "MKL_THREADING_LAYER": "GNU" }
}
  • python.defaultInterpreterPath — VSCode をあなたの venv の Python(qc-rs 入り)に向け、Run と ターミナルが自動でそれを使う。

  • python.envFile — コード実行時に .vscode/my.env(下記)から環境変数を読み込む。

  • python.testing.pytestEnabled / pytestArgsTesting パネルを有効にし pytest tests を実行 — 個々のテストをクリックで実行・デバッグできる。

  • python.terminal.activateEnvironment / terminal.integrated.env.linux.UV_PROJECT — 新しい統合 ターミナルで venv を自動有効化し UV_PROJECT を設定するので、uv コマンドが正しいプロジェクトに作用する。

  • rust-analyzer.cargo.*Rust コアを編集する場合のみ関係:Rust 言語サーバをビルドと同じ機能/環境で コンパイルさせ、インラインエラーを実際と一致させる。

my.env — 実行時環境変数#

# GENERATED by mytools/setup/bootstrap.py — do not edit by hand.
MKL_THREADING_LAYER=GNU
MKL_INTERFACE_LAYER=LP64
LD_LIBRARY_PATH=.../mpi/2021.16/lib

拡張が実行時に必要とする変数です(MKL のスレッド/インターフェース層;MPI ライブラリパス)。settings.json と デバッグ構成がこのファイルを読むので、RunF5 が何も export せずに「そのまま動き」ます。

tasks.json — ビルドタスク#

"maturin develop (MKL, myproj)" のようなラベルのシェルタスクが 1 つ。そのコマンドはビルド環境を source し (~/.cargo/env・venv・oneAPI vars.sh)、RUSTFLAGS を設定し、あなたの機能一覧で maturin develop を実行 — つまりプロファイルの build.pre / rustflags / maturin_args そのものです。Ctrl/Cmd+Shift+P → "Tasks: Run Build Task"make install を打つ代わりに実行します。

launch.json — 実行/デバッグ構成#

2 つの debugpy 構成、"Python: Current File (qc-rs)""Python: helloworld.py"。それぞれ:あなたの インタプリタで統合ターミナルで実行し、.vscode/my.env を読み込み、justMyCode: false(ライブラリコードにも ステップイン可)を設定し、そして重要なことに preLaunchTask を上のビルドタスクに設定 — なので VSCode はデバッグ実行のたびに qc-rs を再ビルドします。F5 を押すと、編集した Rust コアが再コンパイルされ、 スクリプトが走ります。

なので make setup の後、VSCode は既に正しいインタプリタを選んでいるはずです。もし選ばれていなければ、 Ctrl/Cmd+Shift+P"Python: Select Interpreter"uv venv の下のものを選びます(そのパスは settings.json にあります)。選択中のインタプリタは下部のステータスバーに表示されます。

注釈

.vscode/make setup が生成したgit-ignore の機械設定で、あなた専用でありコミットされません。 再生成が必要なら(venv やバックエンドを変えたときなど)make setup を再実行してください。

コードの実行とデバッグ#

  • スクリプト実行。 .py を開いて右上の ▷ Run ボタン、または F5 でデバッガ付き実行。

  • エディタから qc-rs を再ビルド。 Rust コアを変更したら、Ctrl/Cmd+Shift+P"Tasks: Run Build Task"make install を打つ代わりに maturin ビルドタスクを実行。

  • 対話 / ノートブック。 .ipynb ノートブック(または .py# %% セルマーカー)を作り、セルを 1 つずつ 実行 — 計算の探索、収束のプロット、分子の表示に最適。ノートブックでは %matplotlib inline でセル内に図を表示。

  • デバッグ。 行番号の左(ガター)をクリックしてブレークポイントを置き、F5。そこで実行が止まり変数を調べ られます — スクリプトが思い通りに動かないときに非常に有用。

Tip

Python メモ .ipynb ノートブックは、コードセルとその出力(数値・表・図)を 1 つの文書に交互に並べます。qc-rs を試す 最も初心者向けの方法です:セルを実行し、結果を見て、編集し、また実行。

Jupyter ノートブックと helloworld.ipynb#

ノートブックは qc-rs を探索する最も楽しい方法です:セルを 1 つ実行し、結果を見て、いじって、また実行。リポジトリ には遊べるものが同梱されています — myworkspace/helloworld.ipynb — 本物の SCF 計算をいくつか実行し、実況の 量子化学風ログを流します。

ノートブック環境を整える#

  1. venv に ipykernel が入っていることを確認(VSCode がそこでカーネルを起動できるように): uv add --dev ipykernel --project "$UV_PROJECT"、その後 make install で qc-rs を再ビルド(uv add が 拡張を prune することを思い出してください)。

  2. Jupyter 拡張を入れる(本章上部の拡張一覧)。

正しいカーネルを選ぶ — import qc が動くように#

ここが皆がつまずく唯一のステップです。ノートブックはカーネル(ある Python)に対して動き、それは qc-rs が入った uv venv の Python でなければなりません — さもないと最初のセルが ModuleNotFoundError: No module named 'qc' で失敗します。make setup はそのインタプリタを既に .vscode/settings.jsonpython.defaultInterpreterPath)に記録しているので、VSCode は通常それを提示します。 確実にするには:myworkspace/helloworld.ipynb を開き、ノートブック右上の "Select Kernel""Python Environments…"uv プロジェクト配下のインタプリタ(例 …/myproj/.venv/bin/pythonsettings.json に 表示されるのと同じパス)を選びます。

Tip

カーネル = VSCode インタプリタ = あなたの uv Python ノートブックのカーネル、VSCode のインタプリタpython.defaultInterpreterPath)、そして uv プロジェクトpython は、すべて同じ venv でなければなりません。ずれると import qc が壊れます。迷ったら セルで import sys; print(sys.executable) を実行 — …/.venv/bin/python が出るはずです。

遊ぶ、そしてログを見る#

myworkspace/helloworld.ipynb を開き、セルを実行(セルの ▷、または Run All)。水のチェックポイントを作り SCF を実行し、次に重い例(ECP + RI + DFT + 分散の銀錯体)を実行します。一番の見どころは run(log=...)実況ログです:

mychk = qc.chk.new(atom="O 0 0 0; H 0.757 0.586 0; H -0.757 0.586 0",
                   ao="def2-svp", unit="angstrom")
mychk = mychk.scf(ref="r").run(log="stdout")     # 量子化学風トランスクリプトを流す
── System ───────────────────────────────────────────────
  formula H2O
  charge 0   spin 1 (2S+1)   electrons 10 (5α / 5β)
  basis sets (spherical AOs):  AO def2-svp   24 functions
  nuclear repulsion: 9.1939131606 Eh
── plan ──────────────────────────────────────────────────
  2 steps (topological order)
    1  guess:sad        [auto]         ⇒ guess, density, mo
    2  scf:rhf          [user]  ← 1    ⇒ scf-ref, mo, density
── SCF rhf ────────────────────────────────────────────────
 cycle        E / Eh             dE       RMS[grad]  accel
     1       -75.465273843             -      2.56e-1      —
     …
     9       -75.961008958     -9.42e-11      2.37e-7  cdiis
✓ converged in 9 cycles

このトランスクリプト — システム要約、自動挿入された sad 推定(中核概念)、DIIS 加速つき SCF サイクル表、収束チェック — が、本物の量子化学の出力です。

いくつかの run(...) オプション#

.run() は出力と並列のオプションを取ります。まず手を伸ばすであろう少数(全体は ログと出力の章):

オプション

何をするか

log="stdout"

実況トランスクリプトをセルに流す(ファイルパスやオブジェクトも可)

log_style="modern" / "orca"

トランスクリプトの見た目のスタイルを選ぶ

plot=True

SCF 収束プロットをインライン描画(matplotlib + %matplotlib inline が必要)

nthread=8

この実行に CPU スレッド 8 本を使う

実行後は再計算なしにトランスクリプトを再表示・確認できます:mychk.log() はテキストで表示 (format="markdown"/"jsonl" も)、mychk.show() は現在の状態と結果のスナップショットを描画、 mychk.run_events() は生イベントを JSON で返します。

マニュアルをプレビュー#

編集しながら本マニュアルを読むには、HTML をビルドしてプレビューします:

make docs-html          # docs/user/{en,ja}/_build/html をビルド(jupyter-book が必要)

そのあと、docs/user/en/_build/html/index.html を右クリック → "Open with Live Preview"、または配信して VSCode にポート転送させます:

python -m http.server 8000 --directory docs/user/en/_build/html

ブラウザで http://localhost:8000 を開きます(Remote-SSH がポート 8000 を自動転送)。

エディタとノートブックが整ったら、クイックスタート で最初の計算を実行しましょう。