😽

FortranをVSCodeで書くための環境構築

2022/11/26に公開

環境

Windows11(64bit)を使用している前提で解説します.

インストールするもの

  • Visual Studio Code(以下VSCode)
    拡張機能として
    • Japanese Language Pack for Visual Studio Code
    • C/C++
    • Modern Fortran
  • gfortran, gdb
  • Python
    • fortls
    • fprettify

VSCode のインストール

Visual Studio Code の公式ページへアクセスしDownload for Windowsを押す.
ダウンロードされたVSCodeSetup-x64-x.xx.x.exeを実行する.

拡張機能をインストール

Ctrl+Shift+Xを押してMarketplaceで拡張機能を検索してインストールする.
もしくは

このアイコンをクリック.

Japanese Language Pack for Visual Studio Code

  • VSCode の日本語化

C/C++

  • デバッグ時に使用する.

Modern Fortran

  • Fortranの言語機能全般

以上の3つをインストール

gfortran, gdb のインストール

MinGW のインストール

Minimalist GNU for Windowsへアクセスする.
mingw-get-setup.exeをダウンロードして実行し,MinGW installation managerを開く.

Basic Setupを選択し,mingw32-gcc-fortran-binの左にあるチェックボックスをクリックし,Mark for installationをクリック.

次にAll Packagesからmingw32-gdb-binを同様に選択し,

installationからApply Changesをクリックするとインストールが始まる.

システム環境変数の設定


Winキーを押し,システム環境変数の編集と入力してEnterを押す.

ダイアログの環境変数をクリックする.

システム環境変数の一覧からPathという項目をクリックする.

新規でC:\MinGW\binを追加し,OKを押してダイアログを閉じる.

Python のインストール

python公式サイトにアクセスし,DownloadsからWindowsを選択し,Stable Releasesの一番上にあるバージョンからDownload Windows installer (64bit)を選択する.ダウンロードが完了したら,インストーラを起動し,install nowをクリックする.  
コマンドプロンプトもしくはpowershellを開き,

python -V

と入力しEnterを押す.

Python 3.x.x

と出力されればOK.

仮想環境の作成

各自,Fortranのファイルを置いているフォルダをVSCode上で開く.(ここではドキュメント内にFortranという名前のフォルダを作成して説明する.)

VSCode上でフォルダを開く.フォルダの開き方はCtrl+Shift+Oもしくは左上メニューのファイルからフォルダーを開くをクリックし,エクスプローラーから選択する.

Ctrl+Shift+@を押してターミナルを起動して,以下のコマンドを実行.

pip install virtualenv

virtualenvという仮想環境を作るためのライブラリがインストールされる.
.fortranという名前の仮想環境を作成する.(名前は.fortranである必要はなく,自由に決めてよい)

virtualenv .fortran

仮想環境を起動する.仮想環境内にインストールされたactivate.ps1を起動する.

./.fortran/Scripts/activate.ps1

powershellの表示が

(.fortran) PS C:\users\.....>

のようになっていればOK.

fortls, fprettifyのインストール

仮想環境を起動した状態で,以下のコマンドを実行する.

pip install fortls fprettify

仮想環境を終了するために以下のコマンドを実行する.

deactivate

jsonファイルの編集


現在のフォルダに .vscode という名前のフォルダを作成し,以下の名前のファイルを作成する.

  • launch.json
  • settings.json
  • tasks.json

tasks.jsonを記述する

tasks.jsonではコンパイルなどの作業を自動化することができる.

tasks.json
{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build fortran",
            "type": "shell",
            "command": "gfortran",
            "args": [
                "-g",
                "${fileBasename}",
                "-o",
                "${fileBasenameNoExtension}"
            ]
        }
    ]
}

labelにはタスクの名前を設定する.ここではbuild fortranとしている.
typeではshellを選択する.コンパイルをコマンドラインで実行するためのオプションである.
commandでは起動するコンパイラの名前を記述する.先ほどインストールしたgfortranを設定する.
argsではコンパイラに渡す引数を指定する.

  • -g: gdbを使ったデバッグオプションを有効にする.
  • ${fileBasename}: 現在開いているファイルの名前.
  • -o: .exeファイルに名前を付けるためのオプション.
  • ${filBasenameNoExtention}: 現在開いているファイルの拡張子を除いた名前.

この設定により,このタスクを走らせることでFortranのコンパイルとビルドが自動化できる.

launch.jsonを記述する.

launch.json
{
    "configurations": [
        {
            "name": "build and debug fortran file with gdb",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "C:/MinGW/bin/gdb.exe",
            "preLaunchTask": "build fortran",
            "setupCommands": [
                {
                    "description": "gdb の再フォーマットを有効にする",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description":  "逆アセンブリ フレーバーを Intel に設定",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

launch.jsonではデバッグの設定を行う.
requestでlaunch(起動)を選択する.
programでは実行したいexeファイルへのパスを指定する.
cwdはワークスペースのフォルダを指定する.
externalConsoleではVSCode内部のターミナルを使用するか,コンソールを別に起動するかを選択できる.
MIModeはgdbとする.
miDebuggerPathではgdb.exeへのパスを指定する.gfortranと同じフォルダにある.
preLaunchTaskではデバッグ実行前に実行するタスクの名前を指定する.先ほどtasks.jsonで記述したbuild fortranを指定することでデバッグ前にコンパイルを行う.
それ以外はそこまで気にしなくても大丈夫.

settings.jsonを記述する

settings.jsonではgfortranやfortls, fprettifyなどの設定を記述する.
まずはgfortranから

"fortran.linter.compiler": "gfortran",
"fortran.linter.compilerPath": "C:/MinGW/bin/gfortran.exe"

使用するコンパイラの種類と,インストールされている場所を記述する.

次にfortls

"fortran.fortls.path": "C:/users/username/Documents/Fortran/.fortran/Scripts/fortls.exe",

こちらもインストールした場所を記述.

次にfprettify

"fortran.formatting.path": "C:/users/username/Documents/.fortran/Scripts/fprettify.exe",
"fortran.formatting.formatter": "fprettify",
"fortran.formatting.fprettifyArgs": ["--indent", "4", "--enable-decl", "--strip-comments", "--case", "1", "1", "1", "1"]

こちらもインストールされている場所を記述し,formatするときのスタイルを指定する.

最後にfortran全般に関わる設定をする.

"fortran.preferredCase": "lowercase",
"[FortranFreeForm]": {
	"files.autoGuessEncoding": true,
	"files.encoding": "shiftjis"
},

prefferedcaseで大文字・小文字の設定を行う.また文字コードをデフォルトで Shift-JIS にしておき,ファイルを開くときにエンコードが自動で推測されるようにする(VSCodeはデフォルトの文字コードがUTF-8のため).

最終的にはこのような感じになる(usernameのところは各自で変更すること).

settings.json
{
    "fortran.linter.compiler": "gfortran",
    "fortran.linter.compilerPath": "C:/MinGW/bin/gfortran.exe",
    "fortran.fortls.path": "C:/users/username/Documents/Fortran/.fortran/Scripts/fortls.exe",
    "fortran.formatting.formatter": "fprettify",
    "fortran.formatting.path": "C:/users/username/Documents/Fortran/.fortran/Scripts/fprettify.exe",
    "fortran.formatting.fprettifyArgs": [
        "--indent",
        "4",
        "--enable-decl",
        "--strip-comments",
        "--case",
        "1",
        "1",
        "1",
        "1"
    ],
    "fortran.preferredCase": "lowercase",
    "[FortranFreeForm]": {
        "files.autoGuessEncoding": true,
        "files.encoding": "shiftjis"
    }
}

F5を押すとデバッグ開始.ファイルがコンパイルされ,exeが生成されたのちに実行される.
行番号の左側をクリックすると,ブレークポイント(赤丸)を設定できる.
ブレークポイントを設定すると,その行でデバッグを停止できる.F5でデバッグ再開.

左側のウィンドウに変数が表示される.次の一行を実行するにはF10を押す.
write関数で表示した変数はデバッグコンソールに青字で表示される.

Discussion