IntelliJ IDEAでD言語を使ってみた

# はじめに
[D言語アドベントカレンダー 2020](https://qiita.com/advent-calendar/2020/dlang) 19日目の記事です。

IntelliJ IDEAは、私にとって、なじみのあるツールです。
D言語の開発環境を構築することもできるので、紹介したいと思います。

# IntelliJ IDEAとは
[IntelliJ IDEA](https://www.jetbrains.com/ja-jp/idea/)（以下、IntelliJ）とは、JetBrains社が開発した統合開発環境です。
gitをコマンドで操作するのが不慣れな私は、IntelliJを通して、gitを使ってたりします。

# IntelliJのインストール手順（Windows版）
インストール手順は、D言語を使うかどうかに関わらず、汎用的な手順となります。
有料版のUltimateと無料版のコミュニティがあります。まずはコミュニティを試してみてはいかがでしょうか。
IntelliJのダウンロード先は、[こちら](https://www.jetbrains.com/ja-jp/idea/download/#section=windows)です。

（１）ダウンロードしたEXEファイルを実行します。「Next」を押します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/58298fc2-4486-f2ff-886d-66d99617d74a.png)
（２）新規インストールの方は（５）へ進んでください。古いバージョンをインストールされている方は、アンインストールするかどうかを選んでください。デフォルトで選択されているので、そのまま「Next」で進みます。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/3eab0a9c-9193-bb9b-7427-26cbc2d169f6.png)
（３）削除したいものがあれば選んで「Uninstall」を押します。デフォルトは選択されていないので、そのまま進みます。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/c8a55201-a865-25ba-ccee-53ace81986c7.png)
（４）処理終了後、「Close」を押します。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/8cde473c-a21a-950f-a486-7eb91a2f43f3.png)
（５）インストール先を決めて、「Next」を押します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/bc0f66fe-26a3-cab4-8c78-bce3c2387f3c.png)

（６）ショートカットや関連付けが必要な方は選んで、「Next」を押します。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/0f25fe0c-51cc-ad4f-b86c-d9ada27cd7a6.png)
（７）「Install」を押します。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/88fe2fc2-c312-75d8-0953-4c511a9508cb.png)
（８）「Finish」を押します。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/073f1607-74f7-fb96-0c97-ac717f91da51.png)

# IntelliJ Pluginインストール手順
次に、D言語のプラグインをインストールします。

（９）IntelliJを起動します。古いバージョンのD言語プラグインをインストールされている方は、画面のようなエラーが出ますが、一旦無視して先に進みます。新規インストールの方は、エラーは出ません。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/7fe74de7-d067-4e76-ac1d-468ecd36bfd7.png)

（１０）（９）の画面下にある「Configure」を押すとメニューが現れます。「Plugins」を選択します。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/3a0938df-baf3-6981-60f8-49d58a883159.png)
（１１）日本語対応したい場合、検索欄に「japanese」と入力すると「Japanese Language Pack EAP」が表示されるので、選択して「Install」を押してください。この手順ではインストールしません。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/b824c379-90c0-9d16-c9ff-4fc91a2a6645.png)
（１２）D言語対応プラグインを初めてインストールする場合、検索欄に「d language」と入力するとプラグインが表示されますので、選択して「Install」をを押してください。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/fa5d93a4-22e5-7277-2571-a1807fc9a580.png)
（１３）古いD言語対応プラグインをインストール済みの場合、「Installed」タブを押すとインストール済みのプラグインが表示されます。選んで「Update」を押します。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/bf7b869f-ca8f-83b9-862f-5a35c4b7a9e8.png)
（１４）インストールまたはアップデートが完了したら、「Restart IDE」を押します。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/6c3a4a19-f6cd-b705-be02-6f9e6eaf4e48.png)
（１５）「Restart」を押します。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/a698a9ed-19cc-3961-9891-949b15d0288d.png)
（１６）（９）の画面のようにプラグインのエラーが出ていなければ、インストール完了です。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/e6bf02c9-a100-ad37-b653-ff9cd5d079be.png)
（１７）「Configure」メニューの「Plugins」を選択すると、バージョン1.25がインストールされていることがわかります。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/ace97b2a-d572-8d72-84f8-d7d1d1fcd7d9.png)

# D言語のツール設定
（１８）（１６）の初期画面で「Configure」を押します。メニューで「Settings」を選択します。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/8705e16c-fb45-70ad-02d1-233373e0b332.png)
（１９）「Languages & Frameworks」「D Tools」メニューで各ツールの保存先を指定します。私の環境での設定例を紹介します。各ツールはあらかじめ用意する必要があります。[D言語ツールの実行モジュール作成](#d言語ツールの実行モジュール作成)で各ツールの作成方法を紹介します。
![19-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/24903315-35e2-dace-1f2a-9bf16b3837f5.png)
![19-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/e83871b9-611f-6ca8-cef0-695c71b4cea4.png)
![19-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/aef53833-ec59-5d3d-1913-e683167ddadc.png)
![19-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/58114f76-de1f-63fb-77b0-daaa46e15cb2.png)
![19-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/42af2dbf-35d1-232a-c1c6-cbac712a06ee.png)
![19-6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/ebaeee50-3d5c-f162-466f-8589fcba0f12.png)

# IntelliJでのプロジェクト作成
D言語のプロジェクトは「D Application with DUB」と「D Application」が選択できます。それぞれについて、手順を紹介します。

##「D Application with DUB」編
（２０）（１６）の初期画面で「New Project」を選択します。「New Project」画面で「D Application with DUB」を選択し、「Next」を押します。
![20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/b3f1848a-a30e-ea28-4316-1a9a02236dbf.png)
（２１）dubがインストールされているフォルダを指定し、「Next」を押します。pathが通っていれば自動入力されます。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/c171a793-46dc-d3a5-7758-c10f0100e9be.png)
（２２）「Next」を押します。
![22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/c9172224-6644-5704-2f16-fa6d05116a3a.png)
（２３）「Project Name」「Project location」に入力して、「Finish」を押します。
![23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/d52caaa4-0c24-a9ff-6f65-43a099e09d05.png)
（２４）`app.d`が自動生成されます。この手順では、`app.d`をそのまま使います。
![24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/c361ba8b-737e-b3b8-59ca-3867c91cca4c.png)
（２５）コンパイル、実行方法です。「Run」メニューから「Run...」を選択します。
![25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/03446750-f518-0075-d258-02d9b062d64f.png)
（２６）「Run DUB」を選択します。
![26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/31cc92df-f167-1e88-7d5b-11dc03fc2d1e.png)
（２７）コンパイルの後で、モジュールが実行されます。下の「4:Run」画面で`writeln`の出力内容が正しく表示されています。
![27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/b1a45b6b-9a23-c868-52b6-4915236751cb.png)

## 「D Application」編
通常「D Application with DUB」でプロジェクトを作成すればよいですが、「D Application」プロジェクトの作成例も紹介します。
（２８）（１６）の初期画面で「New Project」を選択します。D言語のプロジェクトは「D Application」を選択して、「Next」を押します。
![28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/47f6d83c-3234-0692-8571-0446000bb83b.png)
（２９）「Project Name」「Project location」に入力して、「Finish」を押します。
![29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/e6a756af-f700-c73f-c44e-d1a1813e6cb1.png)
（３０）「Create」を押します。
![30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/4f2768cf-11ed-e758-3fda-1699fc639e54.png)
（３１）左の「1:Project」タブを押した後、「source」を右クリックするとメニューが出ます。「New」「D New File」を選択します。
![31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/6453c1fc-d378-f167-7415-3e7657598a6f.png)
（３２）「Module」を選択し、モジュール名を入力します。
![32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/267e5fcb-c7ab-d7f9-b31d-501c93011985.png)
（３３）前の画面で「hello」と入力すると`hello.d`が作成されます。
![33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/6307615b-5443-3124-8fc0-06c415898ee8.png)
（３４）ソースコードを編集します。
![34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/17455fd7-330e-9727-d427-1861d8895f5b.png)

```d:hello.d
module hello;
import std;
void main()
{
    writeln("hello D!");
}
```
（３５）コンパイル方法です。「Run」メニューから「Run...」を選択します。
![35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/4b86e8bf-65fd-7621-5f66-18613e12e59e.png)
（３６）「Compile with DMD」を選択します。
![36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/d32b13ed-acc6-ad7c-dcea-bc096aba94ef.png)
（３７）コンパイルが成功したとのメッセージが出力されます。
![37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/b4bcf346-162a-1376-5dfd-46917446e3d8.png)
（３８）実行方法です。（３５）と同じように「Run」メニューから「Run...」を選択し、「Run D App」を選択します。
![38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/ccbfb721-4b12-9146-c519-1189b5ce41bd.png)

（３９）「4:Run」タブに実行結果が表示されます。
![39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675901/811f16a2-cde5-cd01-c6c2-051cd78ff6c2.png)

# D言語ツールの実行モジュール作成
手順（１９）の「D Tools」で設定するD言語ツールの作成方法について、紹介します。

# 開発環境
* OS : Windows 10 64ビット版 (バージョン 1909)
* D言語コンパイラ : DMD v2.094.2

## D言語コンパイラ（DMD）のインストール
事前に`DMD`をインストールします。
インストール手順は、[こちら](https://qiita.com/outlandkarasu@github/items/da4d4fdc6e528fbe13d4)が参考になります。

`DMD`をインストールすると`DUB`はインストール済みとなるため、その他のツールを`DUB`コマンドで作成します。
`gdb`は`GNU Debugger`です。[ソースコード](http://www.gnu.org/software/gdb/)を入手して実行モジュールを作成するか、ビルド済みファイルを入手するか（例えば、[ここから](http://www.equation.com/servlet/equation.cmd?fa=gdb)）になります。

```text:実行コマンド抜粋
dub build dscanner --build=release --arch=x86_64
dub build dcd --build=release --config=client --arch=x86_64
dub build dcd --build=release --config=server --arch=x86_64
dub build dfmt --build=release --arch=x86_64
dub build dfix --build=release --arch=x86_64
```
以下は、私の開発環境のコマンドプロンプトでの実行例です。
それぞれの実行ファイルが、`C:\Users\ユーザ名\AppData\Local\dub\packages\`フォルダ以下に作成されます。
手順（１９）では、作成された実行ファイルを`D:\Dev\Bin\Packages`フォルダに移動させています。（移動は必須ではありません）

```text:コマンドプロンプトでの実行例
D:\Dev> dub build dscanner --build=release --arch=x86_64
Package 'dscanner' was not found locally but is available online:
---
Description: Swiss-army knife for D source code
Version: 0.11.0
---
Do you want to fetch 'dscanner' now? [Y/n]: Y
Fetching dscanner 0.11.0...
Building package dscanner in C:\Users\devmynote\AppData\Local\dub\packages\dscanner-0.11.0\dscanner\
Fetching emsi_containers 0.8.0 (getting selected version)...
Fetching dsymbol 0.11.3 (getting selected version)...
Fetching libddoc 0.7.4 (getting selected version)...
Fetching libdparse 0.17.0 (getting selected version)...
Fetching inifiled 1.3.3 (getting selected version)...
Invalid source/import path: C:\Users\devmynote\AppData\Local\dub\packages\dscanner-0.11.0\dscanner\bin
Running pre-generate commands for dscanner...
Invalid source/import path: C:\Users\devmynote\AppData\Local\dub\packages\dscanner-0.11.0\dscanner\bin
Performing "release" build using D:\Dev\dmd2\windows\bin\dmd.exe for x86_64.
stdx-allocator 2.77.5: target for configuration "library" is up to date.
emsi_containers 0.8.0: building configuration "library"...
libdparse 0.17.0: building configuration "library"...
dsymbol 0.11.3: building configuration "library"...
inifiled 1.3.3: building configuration "library-quiet"...
libddoc 0.7.4: building configuration "lib"...
dscanner 0.11.0: building configuration "application"...
Linking...

D:\Dev> dub build dcd --build=release --config=client --arch=x86_64
Package 'dcd' was not found locally but is available online:
---
Description: The D Completion Daemon is an auto-complete program for the D programming language
Version: 0.13.1
---
Do you want to fetch 'dcd' now? [Y/n]: Y
Fetching dcd 0.13.1...
Building package dcd in C:\Users\devmynote\AppData\Local\dub\packages\dcd-0.13.1\dcd\
Fetching msgpack-d 1.0.1 (getting selected version)...
Fetching libdparse 0.15.4 (getting selected version)...
Running pre-generate commands for dcd:common...
Performing "release" build using D:\Dev\dmd2\windows\bin\dmd.exe for x86_64.
dcd:common 0.13.1: building configuration "library"...
stdx-allocator 2.77.5: target for configuration "library" is up to date.
emsi_containers 0.8.0: building configuration "library"...
libdparse 0.15.4: building configuration "library"...
dsymbol 0.11.3: building configuration "library"...
dcd 0.13.1: building configuration "client"...
Linking...

D:\Dev> dub build dcd --build=release --config=server --arch=x86_64
Building package dcd in C:\Users\devmynote\AppData\Local\dub\packages\dcd-0.13.1\dcd\
Running pre-generate commands for dcd:common...
Performing "release" build using D:\Dev\dmd2\windows\bin\dmd.exe for x86_64.
msgpack-d 1.0.1: target for configuration "default" is up to date.
dcd:common 0.13.1: building configuration "library"...
stdx-allocator 2.77.5: target for configuration "library" is up to date.
emsi_containers 0.8.0: target for configuration "library" is up to date.
libdparse 0.15.4: target for configuration "library" is up to date.
dsymbol 0.11.3: target for configuration "library" is up to date.
dcd 0.13.1: building configuration "server"...
Linking...

D:\Dev> dub build dfmt --build=release --arch=x86_64
Package 'dfmt' was not found locally but is available online:
---
Description: Dfmt is a formatter for D source code
Version: 0.13.2
---
Do you want to fetch 'dfmt' now? [Y/n]: Y
Fetching dfmt 0.13.2...
Building package dfmt in C:\Users\devmynote\AppData\Local\dub\packages\dfmt-0.13.2\dfmt\
Invalid source/import path: C:\Users\devmynote\AppData\Local\dub\packages\dfmt-0.13.2\dfmt\bin
Running pre-generate commands for dfmt...
Invalid source/import path: C:\Users\devmynote\AppData\Local\dub\packages\dfmt-0.13.2\dfmt\bin
Performing "release" build using D:\Dev\dmd2\windows\bin\dmd.exe for x86_64.
stdx-allocator 2.77.5: building configuration "library"...
libdparse 0.15.4: building configuration "library"...
dfmt 0.13.2: building configuration "application"...
Linking...

D:\Dev> dub build dfix --build=release --arch=x86_64
Package 'dfix' was not found locally but is available online:
---
Description: Tool for automatically upgrading D source code
Version: 0.3.5
---
Do you want to fetch 'dfix' now? [Y/n]: Y
Fetching dfix 0.3.5...
Building package dfix in C:\Users\devmynote\AppData\Local\dub\packages\dfix-0.3.5\dfix\
Performing "release" build using D:\Dev\dmd2\windows\bin\dmd.exe for x86_64.
stdx-allocator 2.77.5: building configuration "library"...
libdparse 0.8.8: building configuration "library"...
dfix 0.3.5: building configuration "application"...
Linking...
```

# 参考情報
[IntelliJ IDEA](https://www.jetbrains.com/ja-jp/idea/)
[IntelliJ IDEAダウンロード](https://www.jetbrains.com/ja-jp/idea/download/#section=windows)
[IntelliJ IDEA D Language plugin](https://plugins.jetbrains.com/plugin/8115-d-language/reviews)
[IntelliJ IDEA：日本語化](https://blog.jetbrains.com/ja/2020/05/11/intellij-idea-localization-eap/)