概要
VSCodeからFortranを利用するための設定のまとめと課題です.
環境はWindowsで,Windows上にインストールしたVSCodeから,下記2通りのコンパイラを使う設定をまとめます.
- WindowsにインストールしたFortranコンパイラ
- WSL上にインストールしたFortranコンパイラ
WSL上にインストールしたコンパイラをWindowsから使うために試行錯誤していたのですが,幸か不幸かその翌日にRemote Development with VS Codeのアナウンスがあったので,知識の供養も兼ねています.
まとめ
コンパイラ | コンパイル | デバッグ |
---|---|---|
gfortran (windows) | 成功 | 失敗 (インストール環境の問題.mainルーチン内へステップインできない.) |
gfortran (Ubuntu for WSL) | 成功 | 成功 |
Intel (windows) | 成功 | 失敗(デバッガの互換性の問題.デバッグウィンドウに情報を表示できない.) |
PGI Fortran (windows) | 成功 | 不可 |
PGI Fortran (Ubuntu for WSL) | 成功 | 不可 |
使用環境
コンパイラ | バージョン |
---|---|
Intel Fortran for Windows | 17.0.4.210 |
PGI Fortran for Windows | 18.7 |
gfortran for Windows | 4.10.0 |
PGI Fortran for Linux | 19.4 (Ubuntu on WSL) |
gfortran for Linux | 7.3.0 (Ubuntu on WSL) |
VSCode拡張のインストール
VSCodeは軽量で優秀なエディタです.拡張機能で言語サポートをインストールすることにより,さらに利便性が向上します.Fortran向けの言語拡張は多くはありませんが,非常に有用です.個人的な感想ですが,Visual Studioに統合された環境と比較しても,プロジェクトのプロパティ(コンパイルオプションの選択)を除いて,VSCodeの方が支援が優秀です.
Fortran用の拡張機能としては,下記2件をインストールしておけばとりあえずはOKでしょう.
Modern FortranはSyntax Highlightと変数・関数・モジュール定義への移動,FORTRAN IntelliSenseは変数の入力補完と関数・サブルーチン引数の入力支援やホバーによる関数の引数定義の確認などが利用できます.
Modern Fortranでは変数の入力支援はできませんが,組込関数・サブルーチンの支援機能があります.FORTRAN IntelliSenseには,組込関数・サブルーチンに加えて,変数およびモジュールの支援機能があります.そのため,拡張機能を二つインストールすると,組込関数の入力候補が2重に現れます.
インストールは,VSCodeの拡張機能ウィンドウで"Modern Fortran"を検索すれば簡単に見つけられます.ただし,バージョン違いの複数のModern Fortranが見つかるので,一番新しいバージョンをインストールしましょう.
Modern Fortranはlintingにgfortranを使うので,Modern Fortranインストール後,VSCodeの設定からgfortranの実行ファイルのパスを追加します.
FORTRAN IntelliSenseのインストールと設定
Modern Fortranと同様,VSCodeの拡張機能ウィンドウからインストールします.FORTRAN IntelliSenseはFortran Language Serverを利用するので,インストールしてパスを設定します.著者はAnacondaを使っていますが,Anacondaのチャンネルでは見つからなかったので,conda
ではなくpip3
を使ってインストールします.
pip3 install fortran-language-server
インストール後は,これもVSCodeの設定からfortran-language-serverの実行ファイルのパスを追加します.
VSCodeのビルド,デバッグの設定(一般的な話)
VSCodeでは色々な単位でソースを管理できます(ファイル,フォルダ単位,ワークスペース単位).VSCodeのメニューからフォルダーを開くか,フォルダーをVSCodeにドラッグアンドドロップすると,フォルダ単位で管理されるようになります.
このようにすると,ビルドやデバッグの設定はフォルダ単位で管理されるようになります.開いたフォルダの配下に.vscode
フォルダが作られ,そこにtasks.json
とlaunch.json
が作られます.ビルドの設定はtasks.json
,デバッグの設定はlaunch.json
に書きます.
gfortran (on Windows)
gfortranはUnofficialなバイナリ1をC:\Program Files (x86)\gfortran
に置き,パスを通してあります.
配列の値を2倍して表示するプログラムをサンプルとして用いました.
サンプルプログラム
program main
implicit none
integer :: i(4) = [4, 1, 2, 3]
integer :: n
do n = 1, size(i)
i(n) = i(n)*2
end do
do n = 1, size(i)
print *,i(n)
end do
end program main
ビルド(コンパイル)の設定
メニューバーのターミナル→ビルドタスクの実行を選択するか,ショートカットキーCtrl+Shift+B
を入力すると,コマンドパレットに実行するビルドタスクはありません.ビルドタスクを構成するというメッセージが現れるので,それを選択→テンプレートからtasks.jsonを生成→Othersと選んでいくと,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 using gfortran",
"type": "shell",
"command": "gfortran",
"args":[
"-g",
"-O0",
"-o",
"${workspaceFolder}\\${fileBasenameNoExtension}.exe",
"${fileBasename}"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared",
"showReuseMessage": true,
"clear": false
}
}
]
}
"command"
がコンパイラの実行コマンド,"args"
がコンパイルオプションです."-o"
で出力ファイルのパスまで指定しているのは,WSLを使うときの設定と統一するためです.変数を使うことで,一般的な設定を書くことができます.
"presentation"
は必須の設定ではありませんが,"focus": true
を設定しておくと,ビルド時に統合ターミナルにフォーカスが移るので,ビルドタスクが終了後,Enterキーを押せばターミナルを閉じつつエディタに戻れます.
tasks.json内で使っている変数の意味は以下の通りです2.下記表には,後で使う変数も挙げてあります.
変数名 | 意味 |
---|---|
${fileBasename} |
現在開いているファイル名 |
${fileBasenameNoExtension} |
現在開いているファイル名(拡張子を除く) |
${workspaceFolder} |
VSCodeで開いているフォルダ名(フォルダまでのパスを含む) |
${workspaceFolderBasename} |
VSCodeで開いているフォルダ名(フォルダまでのパスを含まない) |
${env:windir} |
Windowsのディレクトリ |
デバッグの設定
メニューバーのデバッグ→デバッグの開始を選択するか,F5キーを入力することでデバッグが開始されます.launch.json
を設定していない場合には,環境の選択というメニューが出てくるので,**C++(GDB/LLBD)**を選択します.
設定する箇所は,"program"
と"miDebuggerPath"
です.デバッグする実行ファイルのパスとデバッガのパスを入力します."stopAtEntry"
がfalse
だと,デバッグ時にプログラムが途中で止まることなく実行され,プログラムが終了します.ここはtrue
に変更しておきます.
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files (x86)\\gfortran\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
launch.json
を設定するとデバッグができるようになります.しかし,gfortranのunofficial Binaryを置いただけだと,デバッグを正しく実行できないようです.
惜しいところまでいきました.MinGWでインストールした人はデバッグまで成功していると思われます.
gfortran (on Ubuntu for WSL)
この記事の本命です.Windows上のVSCodeでプログラムを書き,Ubuntu on WSLにインストールしたgfortranでプログラムをコンパイルします.
ビルド(コンパイル)の設定
gfortran (on Windows)のときと同じ手順で,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 using gfortran on wsl",
"type": "shell",
"options": {
"shell": {
"executable": "${env:windir}\\sysnative\\wsl.exe",
"args": [],
}
},
"command": "gfortran",
"args": [
"-g",
"-O0",
"-o",
"/home/<Ubuntuのユーザ名>/projects/${workspaceFolderBasename}/${fileBasenameNoExtension}.out",
"${fileBasename}"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared",
"showReuseMessage": true,
"clear": false
}
}
]
}
このように書いたタスクでは,以下のコマンドを実行したのと同じ結果が得られます.
C:\windows\system32\wsl.exe gfortran -g -O0 -o /home/<Ubuntuのユーザ名>/projects/sample_g_wsl/main.out main.f90
wsl.exe
はbash.exe
に置き換えることもできます.その際は,"-c"
オプションが必要です.
"executable": "${env:windir}\\sysnative\\bash.exe",
"args": ["-c"],
コンパイルするには,Ubuntu上にディレクトリを作っておく必要があります.コンパイルすると,当該ディレクトリ内にmain.out
が作成されます.
デバッグの設定
デバッグもgfortran (on Windows)のときと同じ手順でlaunch.json
を設定します.
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "/home/<Ubuntuのユーザ名>/projects/${workspaceFolderBasename}/${fileBasenameNoExtension}.out",
"stopAtEntry": true,
"cwd": "/home/<Ubuntuのユーザ名>/projects/${workspaceFolderBasename}/",
"environment": [],
"externalConsole": true,
"windows": {
"MIMode": "gdb",
"miDebuggerPath": "/usr/bin/gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
},
"pipeTransport": {
"pipeCwd": "",
"pipeProgram": "${env:windir}\\sysnative\\bash.exe",
"pipeArgs": ["-c"],
"debuggerPath": "/usr/bin/gdb"
},
"sourceFileMap": {
"/mnt/c": "C:/",
"/mnt/d": "D:/",
"/usr": "C:/Users/<Windowsのユーザ名>/AppData/Local/Packages/CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc/LocalState/rootfs/usr/"
}
}
]
}
Windows版と比較すると,"pipeTransport"
と"sourceFileMap"
の設定が追加されています.tasks.json
とは異なり,"pipeProgram"
がwsl.exe
だと実行できません."sourceFileMap"
でWindowsのフォルダ構造とUbuntuのディレクトリ構造を対応付けます.ここの設定では,フォルダのパスの区切りに\\
ではなく/
を用います.Ubuntuのインストール先は各自で調べてください.
"stopAtEntry": true
としてデバッグを実行すると,mainルーチンの末尾で停止します.ステップインをクリックすると,メインルーチン内のデバッグを行うことができます.デバッグウィンドウでは,変数の値の表示や値の変更ができます.
Intel Fortran for Windows
コンパイルの設定
VSCodeの設定だけでIntel Fortranを使えるようにするのは,結構手間です.
色々な方法を試すと,できそうなのにあと一歩のところでうまくいきません.忌々しい存在Xめ.これは,Intel Fortranのパス設定に起因しています.Intel Fortranは,使用する前にipsxe-comp-vars.bat
というバッチファイルを実行してパスを設定します.バッチファイルはアーキテクチャやVisual Studioのバージョンを引数にとるうえ,引数で分岐していくつものバッチファイルを呼び出しているので,どのフォルダのパスを通せばよいのかがわかりません.
何通りかの方法を試したので,その試行錯誤を記載しておきます.結局は,Intel Fortranのパスの設定とVSCodeの起動を行うバッチファイルを作るのが簡単でした.
とりあえず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 using intel fortran for intel64",
"type": "shell",
"options": {
"shell": {
"executable": "${env:windir}\\sysnative\\cmd.exe",
"args": ["/c"]
}
},
"command": "ifort",
"args":[
"/debug:full",
"${fileBasename}"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared",
"showReuseMessage": true,
"clear": false
}
}
]
}
Windowsなので,shellにはcmd.exe
を用います.コンパイラの実行ファイルの名前はifort
です.
options.envに必要なパスを書き出す方法
上のtasks.json
でビルドタスクを実行しても,ifortへのパスが通っていないため,コンパイルできません.
'ifort' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
そこで,task.options
に環境変数の設定を追加します.
"options": {
"env": {
"PATH": "ここにパスを必要なだけ追加する"
},
"shell": {
"executable": "${env:windir}\\sysnative\\cmd.exe",
"args": ["/c"]
}
},
PATH
に登録するフォルダは,コマンドプロンプトでipsxe-comp-vars.bat
を実行した後,パスを出力してコピー&ペースとします.このとき,明らかに不要なフォルダ(ドキュメントのフォルダやシステムフォルダ)へのパスを削除し,パスの区切りを\\
に変更します.
そうすると,目論見どおりifort
は実行でき,オブジェクトファイルが作られているところまでは確認できますが,リンク時にエラーが出ます.
Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.0.0.117 Build 20180804
Copyright (C) 1985-2018 Intel Corporation. All rights reserved.
Microsoft (R) Incremental Linker Version 14.15.26726.0
Copyright (C) Microsoft Corporation. All rights reserved.
-out:main.exe
-debug
-pdb:main.pdb
-subsystem:console
main.obj
LINK : fatal error LNK1104: ファイル 'ifconsol.lib' を開くことができません。
ターミナルの処理が終了しました (終了コード: 1104)
ifconsol.lib
の場所を上述のPATH
に追加しても,このエラーは消えません.
そのため,options.env
でPATH
を設定するのは諦めました.設定がうまくリンカに渡っていないのでしょうか?
先に環境変数を設定するタスクを実行し,その後コンパイラを呼ぶ方法
tasks.json
では,複数のタスクを設定して,依存するタスクを指定できます3.コンパイルを実行する前に,環境変数を設定するタスクを実行すればよいと考えるのは自然でしょう.
"tasks": [
{
"label": "build using intel fortran for intel64",
"dependsOn": ["environment for intel64 VS2017"],
//...中略
"command": "ifort",
"args":[
"/debug:full",
"${fileBasename}"
],
//...中略
},
{
"label": "environment for intel64 VS2017",
"type": "shell",
"options": {
"shell": {
"executable": "${env:windir}\\sysnative\\cmd.exe",
"args": [
"/c",
]
}
},
"command": "\"C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_<バージョン>\\windows\\bin\\ipsxe-comp-vars.bat\"",
"args":[
"intel64",
"vs2017"
]
}
]
残念ながら,この方法ではタスク毎にコマンドプロンプトが終了し,環境変数は引き継がれないようです.そのため,ifort
が見つからないというエラーが出てコンパイルできません.
環境設定用のバッチを実行し,&で区切ってコンパイルを連続実行する方法
ビルドタスクで実行するコマンドには,いくつかの引数を渡すことができます.そこで,ビルドタスクで実行するコマンドをパス設定用のバッチファイルipsxe-comp-vars.bat
とし,その引数を渡すついでに,&
で区切ってifort
を連続実行します.
"command": "\"C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_<バージョン>\\windows\\bin\\ipsxe-comp-vars.bat\"",
"args":[
"intel64",
"vs2017",
"&",
"ifort",
"/debug:full",
"${fileBasename}"
],
このように"command"
と"arg"
を書くと,以下のようにコマンドが実行されます.
C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_<バージョン>\windows\bin\ipsxe-comp-vars.bat" intel64 vs2017 & ifort /debug:full main.f90
この方法は無事にコンパイルできますが,ちょっと強引すぎます.
環境変数用設定とVSCodeの起動を行うバッチファイルを作る方法
ここまでの試行錯誤の中で,Intel Fortranの環境変数を設定したコマンドプロンプトからVSCodeを起動すると,どうやらすべての環境変数が引き継がれることがわかりました.そのため,VSCodeを起動するためのバッチファイルを作ることにしました.
@echo off
call "C:\Program Files (x86)\IntelSWTools\compilers_and_libraries_<バージョン>\windows\bin\ipsxe-comp-vars.bat" intel64 vs2017
code .
上記のバッチファイルをソースファイル(.f90)があるフォルダにコピーし,ダブルクリックで起動すれば,起動したVSCode内で環境変数が有効になります.本節冒頭に示したtasks.json
で問題なくビルドを実行できました.
Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.0.0.117 Build 20180804
Copyright (C) 1985-2018 Intel Corporation. All rights reserved.
Microsoft (R) Incremental Linker Version 14.15.26726.0
Copyright (C) Microsoft Corporation. All rights reserved.
-out:main.exe
-debug
-pdb:main.pdb
-subsystem:console
main.obj
この方法を用いれば,デバッガも利用できます.
ただし,メニューから新しくフォルダを開いた場合などは,環境変数が初期化されるようです.
デバッグの設定
デバッグの設定は,今のところうまくいっていません.
Intel Fortranには,gdb
を拡張したgdb-ia
が付属します.ipsxe-comp-vars.bat
を実行するとgdb-ia.exe
へのパスが通ります.gfotranと同じように設定すればデバッグ実行は可能になりますが,ステップ実行も,デバッグウィンドウに変数を表示することもできていません.
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "gdb-ia.exe",
}
]
}
Intel FortranのWindows版では,Visual Studioと統合してデバッグができるので,デバッグの環境は**C++(GDB/LLBD)ではなくC++(Windows)**とした方がよいのかもしれません.これについては継続調査していきます.
PGI Fortran for Windows
コンパイルの設定
PGI Fortranも,Intel Fortranと同じく,バッチファイルを実行してパスを設定します.したがって,Intel Fortranと同じやり方で設定できます.
とりあえず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 using pgi fortran",
"type": "shell",
"options": {
"shell": {
"executable": "${env:windir}\\sysnative\\cmd.exe",
"args": ["/c"]
}
},
"command": "pgfortran",
"args":[
"-g",
"-O0",
"${fileBasename}"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared",
"showReuseMessage": true,
"clear": false
}
}
]
}
envにすべてを書き出す
PGI Fortranでは,設定するパスの数が7件だけとIntel Fortranよりも圧倒的に少ないので,コンパイルするだけならoptions.env
にPATHを列挙するのがおすすめです.
"options": {
"env": {
"PATH": "ここにパスを必要なだけ追加する"
},
"shell": {
"executable": "${env:windir}\\sysnative\\cmd.exe",
"args": ["/c"]
}
},
追記するパスは,"C:\Program Files\PGI\win64\<バージョン>\pgi_env.bat"
に書かれています.リンク時にエラーが出ることもありません.ですが,この方法ではVSCodeからデバッガを呼ぶことはできません.
環境変数用設定とVSCodeの起動を行うバッチファイルを作る方法
Intel Fortranと同様に,環境変数を設定したコマンドプロンプトからVSCodeを起動することで,すべての環境変数を引き継いでVSCodeが起動できます.
@echo off
call "C:\Program Files\PGI\win64\<バージョン>\pgi_env.bat"
code .
上記のバッチファイルをソースファイルがあるフォルダにコピーし,ダブルクリックで起動すれば,起動したVSCode内では環境変数が有効です.本節冒頭で作ったtasks.json
を用いて,問題なくビルドを実行できました.
デバッグの設定
デバッグはおそらく不可能です.
PGI Fortranには,デバッガとしてpgdbg
コマンドが付属します.これはGUIが標準で,-text
オプションを付けるとコマンドラインモードで起動できます.VSCodeのlaunch.json
では,デバッガの起動時のオプションが設定できなさそうです.
PGI Fortran (on Ubuntu for WSL)
上の章で,Ubuntu on WSLにインストールしたgfortranでプログラムをコンパイル,デバッグしました.PGI FortranにもLinux版があり,無償のCommunity版も提供されています.サンキューNVIDIA(次は機能の実装をしっかりと・・・)
Windows側で書いたプログラムを,Ubuntu on WSLにインストールしたpgfortranでコンパイルしてみます.PGI Fortranは,公式サイトからダウンロードし,すべて推奨の設定でインストールしました.つまり,コンパイラは/opt/pgi
配下にインストールされています.
ビルド(コンパイル)の設定
gfortranと同じように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 using pgi fortran on wsl",
"type": "shell",
"options": {
"shell": {
"executable": "${env:windir}\\sysnative\\wsl.exe",
"args": []
}
},
"command": "/opt/pgi/linux86-64/2019/bin/pgfortran",
"args":[
"-g",
"-O0",
"-o",
"/home/<Ubuntuのユーザ名>/projects/${workspaceFolderBasename}/${fileBasenameNoExtension}.out",
"${fileBasename}"
],
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always",
"focus": true,
"panel": "shared",
"showReuseMessage": true,
"clear": false
}
}
]
}
gfortranとは異なり,コマンド名(pgfortran)のみを書くと,コマンドが見つからないというエラーが出ます.
>wsl pgfortran
/bin/bash: pgfortran: コマンドが見つかりません
試行錯誤の結果,コマンドプロンプトからwsl.exe
経由でコマンドを実行するとき,PATH
は/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
にしか通らないようです.PATH
の設定を~/.bashrc
や/etc/bash.bashrc
,/etc/profile
に追記しても,/etc/profile/profile.d
にスクリプトを置いても,パスが通りませんでした.解決策を知っている方がいらっしゃれば,ぜひご教示ください.
今回はフルパスを書くことでコンパイルまではできましたが,ライブラリのリンクなど,少し複雑な状況になるとうまくいかないような気がします.
デバッグの設定
デバッグは,Windows版と同様の理由でうまくいきません.
まとめ
いずれのコンパイラを利用しても,VSCode上からショートカットキー1発でコンパイルできるようにはなりました.
コンパイルはできたとしても,デバッグ環境は十分ではありません.また,コンパイルオプションを選べるようなGUIがほしいところです.
-
現在はリンクが切れているのでダウンロードできません. ↩