👓

VSCodeでのFortran開発環境2021年版

2021/12/08に公開

この記事はFortranアドベントカレンダー2021 8日目の記事です。

ネタがないので、今年に構築したFortranの開発環境の記事をまとめてみます。

GitHub

Remote用の設定ファイルを置きました。

https://github.com/bluepost59/remote-fortran-vscode

ローカル (Ubuntu, WSL2)

手前味噌ですが下記の記事を見てください。。。

Ubuntu + VSCodeでFortran開発環境を構築する(WSL2対応)

SSHサーバ

ここが本題かも、というところです。Fortranの開発環境は「スパコンのログインノードにSSH」というケースが多いと思います。VSCodeにはRemoteプラグインというSSHサーバ上での開発に使えるプラグインがあるのでそれを使ってみます。なおSSHサーバはラズパイで作ります。

(このために久しぶりにRaspberry Pi 3を引っ張り出してきてOS最新にしました。Raspberry Pi Zero 2は争奪戦になりそうなので買えなさそうです。。。)

Remoteプラグインのインストール

VSCodeにRemote-SSHプラグインをインストールします。昔はRemoteというプラグインしかありませんでしたが、最近はSSH用、WSL用、Dockerコンテナ用に分かれたようです。

https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh

初回

Remoteをインストールすると左下にリモートのアイコンが表示されるのでクリックします。

クリックするとコマンドパレットが開くので、「Connect to Host...」を選択します。パスワードの入力を求められるので、それに従ってログインします。

公開鍵がある場合やログインユーザーを変更したい場合などは「Open SSH Configration File」を選択してSSHのconfigファイルを編集します。

.vscodeの設定

.vscodeのlaunch.jsonとtasks.jsonを記述します。ローカルの場合とおおむね同じです。

launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) 起動",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb", //確認して書き込む
            "setupCommands": [
                {
                    "description": "gdb の再フォーマットを有効にする",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build" // tasks.jsonの"label"タグの値を書く
        }
    ]
}
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",
            "type": "shell",
            "command": "gfortran",
            "args": [
                "-g",
                "-o",
                "${workspaceFolder}/${fileBasenameNoExtension}",
                "${fileBasename}"
            ],
            "group": {
                "kind": "build",
                "isDefault": true,
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": true,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": false
            }
        }
    ]
}

うまくいくとローカルの場合と同じように開発することができます。デバッグ実行やブレークポイントの設定もできます。

SSH接続がうまくいかない場合

WSL2のSSHだとうまくいくのにVSCodeだとうまくいかないというケースがあります。自分の場合Remote-SSHプラグインを再インストールすることで解消しました。

https://qiita.com/motoshi_cocoa/items/b21e6545d5c38ee51445

ちなみに

同じネットワークにつないだ「myhost」というホストネームのデバイスは、「myhost.local」というアドレスで名前解決できます。LLMNRという仕組みを使っているようです(よくわかりません)。

https://atmarkit.itmedia.co.jp/ait/articles/1305/23/news107.html

Discussion