はじめてのFortran開発 ～windowsにfortran開発環境を構築する編～

# シリーズ目次
- はじめてのFortran開発 ～windowsにfortran開発環境を構築する編～
- はじめてのFortran開発 ～Fortran製オープンソースFEM解析プログラムをビルドしてみる編～



# 1. はじめに

このシリーズは、はじめてFortranで開発することになった私の初心者の記録です。
そろそろ Fortran も古くなるだろうと敬遠していましたが、Fortran製で現在でも活発に開発・更新されているプログラムが存在し未だに現役の言語です。今更ながらFortranをまじめに勉強してみようと思い立ちました。
今回は、 windows に gfortran をインストールするところを書きます。

# 2. GFortran のインストール

Fortran を無料で楽しむには  GNU Fortran (GFortran)  というコンパイラをインストールすればいいらしい 

> 参考：[Windows PCへのgfortranのインストール (2019年5月）](http://www.compe.media.kyoto-u.ac.jp/syoseki/windows/windows-gfortran.html)

## 2.1 GFortran のインストーラーをダウンロードする

### 2.1.1 下記の URL から TDM GCCのdownloadページを開く

https://jmeubank.github.io/tdm-gcc/download/

### 2.1.2 tdm-gcc-webdl.exe ボタンをクリックしダウンロードする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/1a49bf85-c1f5-a16f-dd4e-695fd14ca776.png)


## 2.2 GFortran をインストーラーする

### 2.2.1 tdm-gcc-webdl.exe を実行

ダウンロードした**tdm-gcc-webdl.exe**を実行し，ダイアログの指示に従いインストールを行う．

![Animation3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/e6c99366-bcae-fd32-881e-90be85508f08.gif)


- デフォルトのインストールディレクトリは、`C:\TDM-GCC-64`であった．
- ダイアログの項目が「New Installation:Choose Components」 (NextボタンがInstallボタンに変化した項目)の時に[Components] → [gcc] → [fortran] に必ずチェックをつけて，Installボタンを選択する．


## 2.3 正常にインストールできたか確認する

インストールが適切に終了すると，コンパイラに相当する実行ファイルgfortran.exeが `C:\TDM-GCC-64\bin` 内に作成され，パスが通されてどこからでも実行できる状態となる．コマンドプロンプトを起動して，

```
gfortran --version
```

と入力すると，

```
GNU Fortran (tdm64-1) 10.3.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
```

のように表示されれば，インストールは成功である．


# 3. テストプログラムを実行してみる

## 3.1 拡張機能から `Modern Fortran` をインストール

Vs Codeで 拡張子 .f90 のファイル作成し、表示させてみると

`Marketplace には、'.f90' ファイルに役立つ拡張機能があります` というメッセージが出ますので、`MarketPlace で検索` ボタンを押下する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/ff08fa6a-5041-854c-b15c-1c3682d84acb.png)

### 3.1.1 拡張機能から `Modern Fortran` をインストールします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/3786c2ed-38ec-453f-a090-afa6a341a1de.png)

### 3.1.2 `Modern Fortran` の設定

インストールされた「Modern Fortran」を右クリック→拡張機能の設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/b0993132-cfbf-142d-ef42-9d9100460421.png)

gfortranの場所を指定します。

`C:\TDM-GCC-64\bin\gfortran.exe`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/7beda773-db20-395f-8669-3b2b14af8092.png)


## 3.2 テストプログラムを実行してみる

### 3.2.1 下記のテストプログラムを書きます

```fortran:test.f90
program hello
    print *, 'Hello World!'
end program hello
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/0a034057-f20c-e375-dd93-995c1cbcb382.png)

### 3.2.2 手順1. fortranソースコードをコンパイル

fortran を実行するには、

1. コンパイル
1. 実行

の2つの手順が必要です。

コンパイルするには、ターミナルで以下のコマンドを実行します。

`gfortran -g -o <出力ファイル名> <プログラムファイル名>`

例えば下記のようにコマンドを実行すると、 test.exe ファイルが生成されます

```
gfortran -g -o test test.f90
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/e34c47b1-d0d1-12b8-d185-1d5c63a8084f.png)

### 3.2.3 手順2. 生成された test.exe を実行

ターミナルで以下のコマンドを実行します。
```
./test.exe
```

`Hello World!` を表示されれた成功です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/752e1c12-f02e-1928-381d-25836d65a677.png)


# 4. Vs CodeでFortranをデバックできるようにする

fortran で書かれたソースコードをコンパイルすることに成功しました。
次は、ソースコードの途中にブレークポイントを設定して、実行途中でブレーク(中断)できるようにvscodeの設定を行います。


## 4.1 .vscode フォルダに 2つのファイルを作成する

`.vscode`フォルダに `launch.json`と`tasks.json` という名の2つのファイルを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/a36c5f24-12dc-1ff5-40e9-f53ba9a84ebf.png)

### 4.1.1 tasks.json を以下のように設定する

```
{
    "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
            }
        }
    ]
}
```


> "command": "gfortran",
>             "args": [
>                 "-g",
>                 "-o",
>                 "＄{workspaceFolder}/＄{fileBasenameNoExtension}",
>                 "＄{fileBasename}"
>             ],

この部分が、`gfortran -g -o <出力ファイル名> <プログラムファイル名>` のコマンドを実行するように設定している部分で、

このタスクを `"build"`という名前として登録しています。


### 4.1.2 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": "C:/TDM-GCC-64/bin/gdb.exe", //確認して書き込む
            "setupCommands": [
                {
                    "description": "gdb の再フォーマットを有効にする",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "build" // tasks.jsonの"label"タグの値を書く
        }
    ]
}
```

`"miDebuggerPath": "C:/TDM-GCC-64/bin/gdb.exe",` この部分はgfortranをインストールしたフォルダに `gdb.exe` が存在することを確認し、そのパスを記述する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/60e5e4fc-9848-5b44-cf8a-dbb363d7c235.png)


## 4.2 ブレークポイントを設定して事項してみる

### 4.2.1 実行する方法は、 VSCODE の ▷ ボタンをクリックする

ブレークポイントで、実行が中断したことが確認できます。

![Animation5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142847/f059ee1e-cc75-bac2-b6b9-3b682f1804cc.gif)


実際に開発をするときは、このように途中で止めながら開発をすすめていくことになります。

# 次回

次回は、Fortran製オープンソースのプログラムをダウンロードし、プログラムをビルドしてみることにチャレンジしたいと思います。

ありがとうございました。