Fortranのソースコード(.f90や.f)を実行ファイルに変換するのがFortranコンパイラです。この記事で比較するのは、2026年10月時点で開発が続いているGNUのgfortran、IntelのifxやNVIDIAのnvfortran、LLVM Flang、AMDのAOCC、有償のNAGの6系統で、NAG以外は無料で使えます。
この記事では各コンパイラの最新版・対応OS・規格対応を比較し、gfortranのインストールから最初のコンパイル、開発時に付けるべきオプション、複数のコンパイラを混ぜたときの落とし穴までを整理します。オプションの効き目と.modファイルの互換性は、GCC 14.4・15.3・16.2とLLVM Flangを実際に動かした結果を載せています。
まとめ:用途別のFortranコンパイラの選び方
- 最初の1本・学習・Mac:gfortran(GCC 16.2)。Windows・macOS・Linuxのどれでも無料で入ります。
- Intel CPUのサーバーで性能を詰める:Intel ifx(2026.1.1)。商用でも無料、ライセンス登録も不要です。旧ifortはoneAPI 2025で提供終了しました。
- NVIDIA GPUで既存コードを速くする:nvfortran(NVIDIA HPC SDK 26.9)。
do concurrentをGPUで実行できますが、対応OSはLinuxだけです。 - 規格違反や未初期化変数を徹底的に洗い出す:NAG Fortran Compiler 7.2(一般166,100円・税込)。Fortran 2018をフルサポートしています。
- LLVMのツールチェーンに揃えたい:LLVM Flang(LLVM 23.1.3)。公式文書上の位置付けはまだ「開発中」です。
迷ったらgfortranで書き始め、開発中は-fcheck=allを付けて誤りを表に出します。性能が要る段階でifxやnvfortranでも同じソースをコンパイルして比べる進め方が安全です。
主要Fortranコンパイラ6種の最新版・価格・対応OSの比較
| コンパイラ | コマンド | 最新版 | 価格 | 対応OS | GPU |
|---|---|---|---|---|---|
| GNU Fortran | gfortran | GCC 16.2(2026-08-07) | 無料(GPL) | Windows・macOS・Linux | OpenMP/OpenACC(要対応ビルド) |
| Intel Fortran | ifx | 2026.1.1(2026-07-29) | 無料 | Windows・Linux(WSL 2含む) | Intel GPU |
| NVIDIA HPC SDK | nvfortran | 26.9(2026年9月) | 無料(使用許諾に同意) | Linux(x86_64・Arm) | NVIDIA GPU |
| LLVM Flang | flang | LLVM 23.1.3(2026-10-06) | 無料(OSS) | Linux・macOSほか | 開発中 |
| AMD AOCC | flang | 5.2(2026-05-12) | 無料 | Linux | なし(CPU最適化) |
| NAG Fortran | nagfor | 7.2 | 166,100円(一般) | Linux・macOS(Windowsは IDE 版) | なし |
版番号と日付は、GCCのリリース一覧、Intel Fortranのリリースノート、NVIDIA HPC SDKのリリース一覧、LLVMのリリース一覧、AMD AOCCの製品ページ、日本NAGの製品ページで確認した2026年10月15日時点の値です。ifxのリリースノートが挙げる対応ホストOSはWindows 10/11・Windows ServerとLinux各種(WSL 2を含む)で、macOSは入っていません。nvfortranの現行インストーラーもLinux x86_64とLinux Arm向けだけです。MacでFortranを書くなら、gfortranかNAGが現実的な選択肢になります。
無料と有償の差:ライセンスとサポートの範囲
Intelは公式FAQで、oneAPIツールキットを「無料でダウンロードでき、商用・非商用のどちらにも使える」「ライセンスは不要」と明記しています。つまりIntel Fortranは商用利用でも無料です。NVIDIA HPC SDKも価格の設定はなく、ソフトウェア使用許諾契約(SLA)に同意すればダウンロードできます。
コンパイラ本体が有償なのはNAGです。価格は一般166,100円・アカデミック82,500円(いずれも税込)で、年間保守は一般49,830円です。法人・研究機関・大学を対象に4週間の無料トライアルがあり、手元のコードで検査能力を確かめてから購入できます。
無償で使えることと、ベンダーに問い合わせできることは別の話です。Intelの無償版はPriority Support(有償の優先サポート)の対象外で、無償のまま使う場合の窓口はコミュニティフォーラムです。NVIDIAもnvfortranなどのコンパイラに有償の技術サポートを用意しています。障害時の問い合わせ先が必要な組織は、NAGの年間保守とこれらの有償サポートを並べて比べてください。
gfortran(GNU Fortran)のインストールとコンパイル手順
gfortranはGCC(GNU Compiler Collection)に含まれるFortranコンパイラです。公式サイトは対応状況を「Fortran 2003とFortran 2008の大部分、Fortran 2018の相当数の機能、Fortran 2023の初期サポート」と説明しており、全規格への完全準拠はうたっていません。GCC 16ではFortran 2023の組込みサブルーチンsplitが使えるようになりました。
OS別のインストールコマンド(Ubuntu・macOS・Windows)
# Ubuntu / Debian
sudo apt install gfortran
# macOS(Homebrewのgccにgfortranが含まれる)
brew install gcc
# Windows(MSYS2のUCRT64ターミナルで実行)
pacman -S mingw-w64-ucrt-x86_64-gcc-fortran
# 入ったかを確認
gfortran --version
macOSではGCC一式を入れるとgfortranも使えるようになります。Ubuntuのaptで入るのはディストリビューションが固定した版なので、GCC 16系の新機能を使いたい場合はgfortran --versionで実際の版を確かめてください。
Windowsでの導入経路:MSYS2を推す理由とPATHの設定
MSYS2は64ビット版のWindows 10(1809以降)か11で動き、公式は迷ったらUCRT64環境を選ぶよう案内しています。UCRT64ターミナルで上のpacmanコマンドを実行すると、2026年10月時点ではGCC 16.2.0のgfortranが入ります。pacman -Syuで他のパッケージと一緒に更新できるので、古い版に取り残されません。
PowerShellやVS Codeのターミナルからgfortranを呼ぶには、既定の場所に入れた場合はC:\msys64\ucrt64\binをユーザー環境変数のPATHに追加します。追加後に開き直したPowerShellでgfortran --versionが返れば設定は完了です。
検索上位の古い解説が勧める導入経路は、2026年には選ばない方が無難です。Quickstart Fortran on WindowsはGitHubの最新リリースがv1.9(2023年6月2日)で止まり、同梱はGCC 12.2.0とfpm v0.8.2のままです(fpmの現行はv0.13.0)。TDM-GCCも最終版はGCC 10.3.0ベース(2021年5月)です。Linuxと同じ手順書で揃えたいチームは、WSLで開発環境を構築する手順に沿ってUbuntuを用意し、apt install gfortranで入れる方法でも構いません。ifxもWSL 2を対応環境に挙げています。
最初の1本:hello.f90のコンパイルと実行
! hello.f90
program hello
implicit none
print *, 'Hello, Fortran!'
end program hello
gfortran hello.f90 # 出力名を指定しないと a.out(Windowsでは a.exe)
./a.out
Hello, Fortran!
gfortran hello.f90 -o hello # -o で実行ファイル名を付ける
GCC 16.2で上のとおりに実行すると、a.outができて「Hello, Fortran!」が表示されます。行頭に空白が1つ入るのは、print *(並び出力)の書式によるものです。Windowsではa.exeができるので、.\a.exeで実行します。
モジュールを使うソースのコンパイル順序
! physics.f90
module physics
implicit none
real(8), parameter :: g = 9.80665d0
contains
real(8) function fall_distance(t)
real(8), intent(in) :: t
fall_distance = 0.5d0 * g * t**2
end function
end module physics
! main.f90
program main
use physics
implicit none
print *, fall_distance(2.0d0)
end program main
# モジュールを定義したファイルを先にコンパイルする
gfortran -c physics.f90 # physics.o と physics.mod ができる
gfortran -c main.f90 # physics.mod を読んで main.o を作る
gfortran physics.o main.o -o fall
./fall
19.613299999999999
順序を逆にしてmain.f90を先にコンパイルすると、GCC 16.2はFatal Error: Cannot open module file 'physics.mod' for readingで止まります。ファイル数が増えて順序の管理が面倒になったら、依存関係を自動で解決するfpm(Fortran Package Manager)に任せるのが簡単です。別のディレクトリでfpm new fallを実行すると雛形ができ、cd fallで移動してfpm runを実行すると雛形のビルドから実行まで進みます。手元のコードを載せるときは、モジュールをsrcに、メインプログラムをappに置きます。
エディタの設定:VS CodeのModern Fortran拡張
エディタはVS Codeに拡張機能「Modern Fortran」(fortran-lang.linter-gfortran)を入れる構成が定番です。2026年1月に4.0系が出ており、Marketplaceの統計ではインストール数が約62万(2026年10月時点)です。言語サーバーのfortls(PyPIの現行は3.2.2)と組み合わせると補完・定義ジャンプ・ホバー表示が使え、保存時の検査(リンター)には既定でgfortranの-Wallが走ります。ifxやnagforをリンターに切り替える場合はfortran.linter.compilerを設定し、PATHに無いときはfortran.linter.compilerPathで実行ファイルの場所を指定します。
gfortranのコンパイルオプション:開発時と本番で分ける設定
gfortranのコンパイルオプションは、開発中と本番で分けて使います。gfortranは既定では配列の境界を検査せず、浮動小数点のゼロ除算でも止まらないため、誤りがあっても計算が続くことがあります。開発中は検査を全部有効にして誤りを表に出し、検証が済んでから最適化に切り替えます。
開発・デバッグ時の検査オプション
gfortran -O0 -g -Wall -fcheck=all -fbacktrace \
-ffpe-trap=invalid,zero,overflow -std=f2018 physics.f90 main.f90 -o main
| オプション | 効果 |
|---|---|
| -fcheck=all | 配列境界など-fcheckの全検査を有効化 |
| -ffpe-trap=invalid,zero,overflow | 不正演算・ゼロ除算・オーバーフローで停止 |
| -Wall | 避けるべき書き方の警告群を有効化 |
| -std=f2018 | Fortran 2018への厳格な適合を検査 |
| -g | デバッガ用のシンボルを埋め込む |
| -fbacktrace | 実行時エラーで呼び出し履歴を表示 |
-fcheck=allと-ffpe-trapの実行結果
要素数5の配列に6番目まで書き込む誤りを入れたプログラムを、GCC 16.2で実行して違いを確かめました。
! oob.f90
program oob
implicit none
integer :: a(5), i, n
n = 6
do i = 1, n
a(i) = i * 10 ! i = 6 で範囲外に書き込む
end do
print *, 'sum =', sum(a)
end program oob
$ gfortran -O0 oob.f90 -o oob && ./oob
sum = 150
$ gfortran -O0 -g -fcheck=all -fbacktrace oob.f90 -o oob && ./oob
At line 7 of file oob.f90
Fortran runtime error: Index '6' of dimension 1 of array 'a' above upper bound of 5
今回の検証では、境界検査を付けない実行は範囲外への書き込みがそのまま通り、終了コード0で終わりました。正常終了は結果が正しいことの保証になりません。-Wallを付けても、上限が変数nで決まるこの例では警告は出ませんでした。-fcheck=allを付けると誤りのある7行目で止まり、終了コードは2になります。コンパイル時の警告だけでは範囲外参照を防げないので、開発中のビルドには実行時検査を必ず入れてください。
ゼロ除算も同じです。y = 1.0 / xに0を読み込ませると、オプションなしではy = Infinityと表示して終了コード0で終わりました。-ffpe-trap=invalid,zero,overflowを付けるとSIGFPEで止まります。デバッグ情報を埋め込む-gも付けておくと、バックトレースに止まった行(この例では割り算の5行目)まで表示されました。NaNや無限大がどこで生まれたかを追えるので、浮動小数点数とIEEE 754の例外の扱いに慣れていない場合ほど付けておく価値があります。
本番計算で使う最適化と並列化のオプション
# 最適化(まず -O2、効果を測ってから -O3)
gfortran -O2 physics.f90 main.f90 -o main
gfortran -O3 -march=native physics.f90 main.f90 -o main
# OpenMPで共有メモリ並列化(!$omp 指示文を有効化)
gfortran -O2 -fopenmp physics.f90 main.f90 -o main
-O3は-O2の最適化に追加の変換を加えますが、数値が丸めの順序で微妙に変わることがあります。検証済みの結果と突き合わせてから採用してください。-march=nativeはビルドしたマシンのCPU命令(AVX2などのSIMD命令と自動ベクトル化)をすべて使うため、GCCの公式文書が注意するとおり、別のマシンでは動かない場合があります。計算ノードとビルドノードのCPUが違うクラスタでは付けないでください。
Intel Fortran(ifx):ifortの提供終了と無料での導入
Intelのリリースノートには「Intel Fortran Compiler Classic(ifort)はoneAPI 2025リリースで提供終了」とあります。現行はLLVMベースのifxだけで、2026年の版は2026.0(4月29日)、2026.1(7月7日)、2026.1.1(7月29日)と出ています。ifxは「Fortran 2018までを完全にサポートし、Fortran 2023の機能もいくつか含む」とされています。2026.1.1は-O2のループ最適化で誤った結果を出す不具合の修正を含むので、2026.1を使っている場合は上げておきます。
ifortからifxへの移行時のビルド設定と数値検証
ifortとifxの違いは、コンパイラの中身(旧来の自社バックエンドかLLVMか)と提供状況です。移行はビルドスクリプトのコマンド名をifxに替えるところから始めます。数値の最終桁が変わることがあるので、移行時は回帰テストの許容誤差を先に決めてから差分を見てください。ifortを使い続けるには2024年以前のoneAPIを保持するしかなく、新しいOSやCPUへの対応は受けられません。
WindowsでifxをVisual Studioと組み合わせる前提
Windowsでifx 2026.1をVisual Studio 2022に統合する場合、Visual Studio 2022 17.14.27と「C++によるデスクトップ開発」ワークロードが前提です。Visual Studio 2026にもFortranのIDE拡張で対応し、Visual Studio 2019向けのIDE拡張は2026.0で提供を終えました。デバッガでFortranの式を評価する拡張(Fortran Expression Evaluator)は2025.3からツールキットに含まれず、VSの拡張機能として別に入れる必要があります。IDE統合を使わず、CIでビルドするだけならLinux版かWSL 2で動かす方が構成は単純です。
NVIDIA nvfortran:do concurrentのGPUオフロード
nvfortranはNVIDIA HPC SDKに含まれます。現行版は26.9(2026年9月)で、CUDA 13.3を同梱したLinux x86_64版とLinux Arm版が配布されています。NVIDIAの製品ページはFortranの対応を「Fortran 2003と、Fortran 2008の多くの機能」と書いており、規格の新しさではgfortranやifxより控えめです。
標準Fortranのままでの GPU 実行(-stdpar=gpu)
! saxpy.f90
subroutine saxpy(n, a, x, y)
implicit none
integer, intent(in) :: n
real, intent(in) :: a, x(n)
real, intent(inout) :: y(n)
integer :: i
do concurrent (i = 1:n)
y(i) = a * x(i) + y(i)
end do
end subroutine saxpy
nvfortran -stdpar=gpu -Minfo=accel saxpy.f90 -c
NVIDIAのユーザーガイドによれば、条件を満たすdo concurrentループは-stdpar=gpuを付けてコンパイルするとGPU上で並列実行されます。指示文もCUDA固有の構文も要らないので、同じソースをgfortranやifxでもそのままコンパイルできます。標準Fortranの構文だけでGPU実行を指定できる点が、OpenACCやCUDA Fortranとの違いです。性能をさらに詰めたい箇所だけCUDA Fortranで書き、併用することもできます。
このGPUオフロードはLinuxとNVIDIA GPUが揃った環境でしか使えません。nvfortranはCPU向けにも使え、-stdpar=multicoreを付けると同じdo concurrentをCPUのスレッドで並列実行します。
LLVM FlangとAMDのFortranコンパイラの位置付け
LLVM Flang:flang-newからflangへの改名と現状
LLVM Flangは、LLVMプロジェクトに入っているFortranフロントエンドです。現行のLLVMは23.1.3(2026年10月6日)で、コマンド名は旧名のflang-newからflangに変わっています。ただしUbuntu 26.04のパッケージ(flang-22)はflang-22とflang-new-22の両方の名前で入るので、古い手順書のコマンドもそのまま動きます。LLVM 23.1.0の公式文書は「LLVM Flang is under active development」と書いており、本番の数値計算の主力にするにはまだ慎重な段階です。
紛らわしいのが、名前の同じ「Classic Flang」(flang-compiler/flang)です。LLVMの公式文書は両者を「別個の独立したFortranコンパイラ」と明記しています。「flang vs gfortran」を比べる記事を読むときは、どちらのFlangを指しているかを最初に確認してください。
Pythonのように1行ずつ対話的に実行したい場合は、LLVMベースのLFortranがあります。現行はv0.67.0(2026年10月7日)で、Jupyterからも使えます。ただし公式サイトは自らをアルファ版とし、他者が書いたコードは動かない前提だと明記しているので、学習や試行にとどめてください。
AMD AOCC 5.2と次期コンパイラaof
AMD EPYC向けに最適化されたAOCCの現行版は5.2(2026年5月12日)で、Fortranのドライバーはflangです。AMDはAOCC 6.0で、LLVM FlangをベースにしたFortranコンパイラaofを導入する計画を公表しています。ROCm向けの「AMD Next-Gen Fortran Compiler」もdrop 22.2.0が出ていますが、AMD自身が「PRE-PRODUCTION SOFTWARE」と明記しているので、評価用にとどめてください。
NAG Fortran Compiler:規格チェックの厳しさで選ぶ有償版
NAG Fortran Compilerの現行版は7.2です。リリースノートは「Release 7.2はFortran 2018の全機能をサポートし、既定の言語レベルを-f2018とした」と述べています。日本NAGは、配列の範囲外参照、未定義ポインタの参照、初期化忘れ、実引数と仮引数の型の不一致など、コンパイル時と実行時を合わせて32項目のエラー検出例を公開しています(検出にはコンパイラオプション-C=を使います)。対応はLinux(x64・Arm64)とmacOS(Apple Silicon・Intel)で、Windowsでは単体のコンパイラではなくIDE付きの「Fortran Builder」として提供されます。
古いコードを移植する前に、規格違反とコンパイラ依存の書き方を洗い出す用途に向きます。Fortran Builderの価格はコンパイラ単体と同額です。旧版から7.2へ上げる場合は新しいライセンスキーが必要です。
Fortran標準規格(Fortran 77〜2023)と-stdでの指定
最新の規格はFortran 2023(ISO/IEC 1539-1:2023)で、2023年11月17日に国際規格として発行されました。次の版もISOで開発が進んでいます。各コンパイラの対応状況は次のとおりです。
| コンパイラ | 公式の記述 |
|---|---|
| gfortran | 2018は相当数・2023は初期サポート |
| ifx | 2018まで完全・2023は一部 |
| NAG 7.2 | 77〜2018をフルサポート |
| nvfortran | 2003と2008の多く |
古いFORTRAN 77のコード(固定形式の.fファイル)も、上記のコンパイラはすべてコンパイルできます。新しく書くコードは自由形式の.f90にして、gfortranなら-std=f2018を付けて規格外の拡張に頼っていないかを確かめてください。規格対応はコンパイラごとに違うので、移植先でもビルドして数値結果を比べてください。
複数のコンパイラを混ぜるときの落とし穴:.modファイルとランタイム
複数のFortranコンパイラを使うときに注意が必要なのが、useで読み込む.modファイルの互換性です。GCC 15のリリースノートは「GCC 15が生成する.mod形式は、GCC 8〜14が生成する形式と互換性がない(GCC 15は互換のためGCC 8〜14の.modを読める)」と明記しています。
GCC 14・15・16とFlangで.modを読ませた結果
前章のphysics.f90をあるコンパイラで-cし、できたphysics.modを別のコンパイラでmain.f90から読ませました(Docker上のGCC 14.4・15.3・16.2と、Ubuntu 26.04のflang-22で実行)。
| .modを作った版 | .modの版表記 | 読ませた版 | 結果 |
|---|---|---|---|
| GCC 16.2 | version ’16’ | GCC 14.4 | エラーで停止 |
| GCC 15.3 | version ’16’ | GCC 14.4 | エラーで停止 |
| GCC 16.2 | version ’16’ | GCC 15.3 | 成功 |
| GCC 15.3 | version ’16’ | GCC 16.2 | 成功 |
| GCC 14.4 | version ’15’ | GCC 15.3・16.2 | 成功 |
| GCC 16.2 | version ’16’ | flang-22(22.1.2) | エラーで停止 |
# GCC 14.4 で GCC 16.2 の .mod を読ませたとき
Fatal Error: Cannot read module file 'physics.mod' opened at (1), because it was created by a different version of GNU Fortran
# flang-22 で gfortran の .mod を読ませたとき
error: Cannot parse module file for module 'physics': Incomplete character literal
互換性の境目はGCC 14と15の間にあり、15と16は同じ形式で相互に読めました。gfortranの.modはgzipで圧縮された独自形式で、展開すると先頭にGFORTRAN module version '16'と書かれています。Flangの.modは!mod$ v1で始まるテキスト形式で、そもそも別物です。ベンダーをまたいで.modを使い回すことはできません。
ライブラリ配布とCIの運用ルール
ここから導ける運用ルールは3つです。第一に、ライブラリを.modと.aの組で配らず、ソースで配って利用側のコンパイラでビルドします。GCC 14以前の利用者がいる限り、GCC 15以降で作った.modは渡せません。第二に、gfortranとifxなど別ベンダーの成果物を1つの実行ファイルにリンクする構成は避けます。ランタイムライブラリ(libgfortranなど)がベンダーごとに別物だからです。第三に、どうしても言語やベンダーをまたぐなら、iso_c_bindingとbind(C)でCの呼び出し規約に揃えた境界を作ります。PythonからFortranを呼ぶNumPyのf2pyも、Fortranの手続きをC拡張モジュールで包んで呼び出す仕組みです。
CIで複数のコンパイラをテストする場合は、ビルドディレクトリをコンパイラごとに分けてください。gfortranの-Jオプションで.modの出力先を指定できます。
Fortranコンパイラに関するよくある質問
Fortranコンパイラは無料で使えますか?
使えます。gfortran(GCC)、Intel ifx、NVIDIA nvfortran、LLVM Flang、AMD AOCCはいずれも無料です。Intelは公式FAQで商用・非商用のどちらでも無料、ライセンス不要と明記しています。有償なのはNAG Fortran Compiler(一般166,100円・税込)で、法人・研究機関・大学のお客様向けに4週間の無料トライアルがあります。
WindowsでFortranを使うにはどうすればよいですか?
手軽なのはMSYS2のUCRT64環境でpacman -S mingw-w64-ucrt-x86_64-gcc-fortranを実行してgfortranを入れ、C:\msys64\ucrt64\binをPATHに足す方法です。Visual Studioで開発したい場合はIntel ifxを入れ、Visual Studio 2022 17.14.27と「C++によるデスクトップ開発」を用意します。Quickstart Fortranは2023年6月から更新されておらず、同梱のGCCは12.2.0です。
ifortとifxの違いは何ですか?
ifortは従来のIntel Fortran Compiler Classicで、oneAPI 2025で提供が終わりました。ifxはLLVMベースの後継で、2026.1.1が現行版です。ifxはFortran 2018まで完全対応し、Intel GPUへのオフロードにも対応します。既存のビルド設定はコマンド名をifxに替え、計算結果を回帰テストで比べてから切り替えます。
gfortranとifxはどちらを選ぶべきですか?
学習やMacでの開発、複数OSでの配布はgfortranです。Intel CPUのLinuxサーバーやWindowsで性能を詰める段階ではifxも試す価値があります。どちらも無料なので、同じソースを両方でコンパイルし、実行時間と結果を比べて決めるのが確実です。そのためにも規格外の拡張に頼らないコードにしておきます。
Fortranの最新規格とバージョンはどれですか?
最新の規格はFortran 2023(ISO/IEC 1539-1:2023、2023年11月17日発行)で、次の版がISOで開発中です。コンパイラの対応は規格に遅れて進み、本記事の比較対象では、2026年10月時点でFortran 2018を全面サポートと明記しているのはNAG 7.2とifxです。gfortranは2018の相当数と2023の初期サポートにとどまります。