# MaguyvaのFortran対応: 科学技術コードのためのコードグラフ

Canonical source: https://maguyva.ai/ja/languages/fortran

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

MaguyvaはAST、シンボル、グラフでFortranに対応しています。AIエージェントは数値計算コードを変更する前に、サブルーチン、モジュール、派生型をたどれます。

## 対応状況スナップショット

- 対応レベル: AST・シンボル対応
- プログラミング
- 拡張子: .f, .f03, .f08, .f90, .f95, .for, ほか1件
- 構文を考慮した検索と構造コンテキストのための実際のAST解析。
- 名前付きシンボルはセマンティック検索と相互参照に利用されます。関係抽出が有効な場合は、グラフナビゲーションも利用できます。
- この言語は、グラフを考慮した検索にシンボルと関係情報を提供します。対応するエッジの種類は、その言語固有の構文要素によって異なります。
- AST解析とシンボル抽出の両方に対応しています。

## 最適な用途

- 現在のチームより古いFortranのソルバー、シミュレーション、数値ライブラリを保守する研究・エンジニアリング・HPCチーム。
- 固定形式の `.f` ファイルと自由形式の `.f90` 以降のモジュールが混在し、CやPythonのラッパーが並ぶことも多いリポジトリ。
- 数値計算の変更前に、共有モジュールに触れるサブルーチンを洗い出すことが最初の仕事になる、エージェント支援型のレビュー。

## エージェントワークフロー

- ソルバールーチンの引数や単位を変更する前に、それを呼び出すサブルーチンと関数をたどる。
- プログラム単位が `use` で取り込むモジュールを一覧にし、その定義までたどる。
- 派生型がどこで宣言され、どの手続きがそれを扱っているかを見つける。

## Fortranに必要なのは文字列マッチではなく構造

Fortranのコードベースは、古く、大きく、ソフトウェアチームではなく分野の専門家によって書かれていることがよくあります。`SOLVE`、`Solve`、`solve` という名前のルーチンはすべて同じルーチンです。モジュールは数百のファイルで共有され、組み込み手続きのライブラリも大きいため、素朴な呼び出し一覧はほとんどが `SQRT`、`SUM`、`WRITE` で埋まります。

grepしか使わないエージェントは、このノイズに埋もれてしまいます。Maguyvaはまず構造を渡します。どのプログラム単位が存在し、どのモジュールを使い、どのユーザールーチンが互いに呼び出しているのかです。

## MaguyvaがFortranで抽出するもの

Maguyvaは固定形式と自由形式のソース（`.f`、`.for`、`.ftn`、`.f90`、`.f95`、`.f03`、`.f08`）に対応しています。関数とサブルーチンは呼び出し可能なシンボルとして抽出され、派生型は構造検索で型定義として選択できます。

シンボルの照合はFortran自身の規則に合わせて大文字と小文字を区別しません。インポート関係は `use` と `include` から作られ、キーワードを取り除いてモジュール名をグラフに保存します。呼び出し、読み取り、代入、型参照、そして拡張された派生型からの継承もグラフに含まれます。

関係性フィルターは約165個の組み込み手続き（I/O文、数学、配列、文字列、型変換、ビット操作のルーチン）を除外するため、残るエッジはあなた自身のコードを指します。

## エージェントへのプロンプト例

- 「`compute_flux` を呼び出すサブルーチンはどれで、それぞれどのモジュールを使っているか？」（`find_symbol`、次に `dependency_search` の incoming）
- 「ソルバーループで境界条件がどのように適用されているかを追跡して。」（`get_task_context`）
- 「`constants` モジュールを使うプログラム単位をすべて見つけて。」（`text_pattern_search` で `use constants` を検索し、次に `find_symbol`）

## 既知の制限

- Fortranにはデコレーターも例外処理もないため、それらの関係タイプは適用対象外としてマークされています。
- 型束縛手続きは、通常の関数やサブルーチンと同じノードを共有します。`structural_search` では `functions` プリセットを使ってください。`methods` プリセットはFortranのノードを選択しません。
- 除外された組み込み手続きへの呼び出しはグラフのエッジとして現れません。すべての `WRITE` や `OPEN` が必要なときは `text_pattern_search` を使ってください。

## 次のステップ

[クイックスタート](/ja/docs/quickstart)でリポジトリを接続し、[互換性ページ](/ja/docs/compatibility)で完全な対応マトリクスを確認してください。FortranがCのグルーコードと並んでいる場合は、[Cガイド](/ja/languages/c)もご覧ください。

## エンジンの詳細

- Fortranの対応は固定形式と自由形式のソースを含みます: `.f`、`.for`、`.ftn`、`.f90`、`.f95`、`.f03`、`.f08`。
- 関数とサブルーチンは呼び出し可能なシンボルであり、シンボルの照合は大文字と小文字を区別せず、`use` と `include` はインポートの関係になります。
- 約165個の組み込み手続き（I/O、数学、配列、文字列、型変換、ビットのルーチン）は関係性から除外されます。デコレーターと例外の関係は適用対象外としてマークされています。

## 役立つMCPエントリーポイント

- `find_symbol`: サブルーチン、関数、モジュールの名前から始めてください。照合はFortranと同じく大文字と小文字を区別しません。
- `dependency_search`: 数値計算の変更前に、ソルバーや共有モジュールのルーチンに対してincomingのトラバーサルを使い、すべての呼び出し元を確認してください。
- `get_task_context`: 「ソルバーループで境界条件がどのように適用されているかを追跡して」のようなプロンプトに使ってください。
