D言語環境構築 2022年版

## はじめに

2022年における**人生最良の行動、すなわちD言語インストール**の方法について解説します。

## Linux・Mac・WSL2といったPOSIX系環境

[インストールスクリプト](https://dlang.org/install.html)により、ホームディレクトリに手軽に処理系を導入できます。

なお、利用のためにはGnuPGが必要になるので、そちらは`apt`などで事前に準備しておいてください。

Ubuntuでは以下のような感じで利用できます。

```bash
# curlでinstall.shをダウンロードし、即実行
$ curl https://dlang.org/install.sh | bash -s
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 37302  100 37302    0     0  41036      0 --:--:-- --:--:-- --:--:-- 40991
Downloading and unpacking http://downloads.dlang.org/releases/2.x/2.101.0/dmd.2.101.0.linux.tar.xz
######################################################################## 100.0%
Using dub 1.30.0 shipped with dmd-2.101.0

Run `source ~/dlang/dmd-2.101.0/activate` in your shell to use dmd-2.101.0.
This will setup PATH, LIBRARY_PATH, LD_LIBRARY_PATH, DMD, DC, and PS1.
Run `deactivate` later on to restore your environment.

# sourceコマンドでactivateを読み込んで該当バージョンを有効化
$ source ~/dlang/dmd-2.101.0/activate

# プロンプトに現在有効なD言語処理系が表示される。試しにdmdバージョン表示
(dmd-2.101.0) $ dmd --version
DMD64 D Compiler v2.101.0
Copyright (C) 1999-2022 by The D Language Foundation, All Rights Reserved written by Walter Bright

# 試しにHello,World実行
(dmd-2.101.0) $ rdmd --eval='writeln("Hello,D World!")'
Hello,D World!

# deactivateでD言語使用終了
(dmd-2.101.0) $ deactivate
$ 
```

後は、パッケージマネージャの[dub](https://code.dlang.org/)等を使用してD言語でガンガンプログラミングするだけです。

D言語そのものの学習には、[Dlang Tour](https://tour.dlang.org/tour/ja/welcome/welcome-to-d)や[D Cookbook](https://dlang-jp.github.io/Cookbook/)を見てみてください！

## MacやWindowsでインストーラーを使う

MacやWindowsには公式でDMGが用意されていて、そちらを利用することも可能です。
詳しくは、[D言語本家のダウンロードページ](https://dlang.org/download.html)を参考にしてください。

## Windowsでの注意点

Windowsでは、libc相当のランタイムライブラリを利用するために、VC++の再配布可能パッケージやVisual Studioそのもののインストールが必要です。
D言語のためだけに何GBもあるVisual Studioをインストールするのは微妙だと思うので、インストール時にはVC++の再配布可能パッケージを利用する形でインストールしたほうがよいと思います。

具体的には、インストーラーで以下の画面になったら、下記画像の通りの選択肢を選んでください。

![D言語セットアップ画面 Install VC2010 redistributables...を選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/a4603222-b4e2-ec78-a292-85f6faf5ef55.png)

すると再配布可能パッケージのインストールが始まるので、指示に従ってインストールします。

![再配布可能パッケージのインストール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/a17b5f23-19de-fc8e-db48-9cc0d0afdf2b.png)

これで巨大なVisual StudioなしでD言語が利用できます。

![インストールしたdmdを確認](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/463d9f5c-2ab9-23a0-f2ba-a1bef2dc8bc9.png)

## Visual Studio Codeを使ったWindowsでの環境構築

さて、時代は令和に入ってすでに4年、もうすぐ令和5年です。
いまどき個別のインストーラーやスクリプトでインストールし続けるのもモダンなエンヂニヤ達の心には響かないものがあるでしょう。
というわけで、今年は**Visual Studio CodeのD言語拡張機能だけで環境構築**をやってみます！

下記のように素のVisual Studio Codeをまずは用意します。Windows Sandboxを使っているので、マジでdmdも何も入っていない状態からの素からやっていきます。

![素のVSCode](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/9803f9a7-e8ce-7ae8-9bb9-a08cbe22d732.png)

まずは拡張機能のインストールです。Extensionsメニューで`dlang`で検索をすると一瞬で最上部に出てきます。即インストールします。

![D言語拡張機能インストール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/3891cf92-324e-1564-d887-003324af0df6.png)

最初はこんな画面になるので、Setup D Compilerを押下します。**レッツ人生最良の行為！**
![人生最良の行為初回](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/7f5f95de-9ce6-f690-e50b-8fdfb4180860.png)

しかしなぜか最初はPreview index.mdが開いてしまいます。この時は初回起動なので、右下のFirst time setupを押します。
![人生最良の行為なぜか横槍](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/dc461a3a-950c-0a1d-4b32-8761ef31e153.png)

元の画面に戻ります。ここで先ほどから右下に出ているReinstall serve-dを押しましょう。**これをやらないと後続手順がうまくいきませんでした。**
(私のような特別な訓練を受けた人間なら、冷静に普通のWindowsインストーラーを使ってパスを通すだけの話なのですが)

![Reinstall serve-dを押す](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/f4fc5beb-fe88-bdf5-9050-ff894ba410c1.png)

それからSetup D Compilerを押します。

![Setup D Compiler押し](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/3c9fa142-cadf-d77e-db03-705eadc33c0b.png)

すると、コマンドバーに選択肢が出ます。

![人生最良の行為2回目の挑戦](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/7a24f300-00d5-b80a-b295-75560e94aaad.png)

とりあえずレコメンドなDMDを選択

![インストーラー選択](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/6682c79d-48db-13a3-94d4-dcb0ae59be26.png)

Run installerでインストール開始します。

![Run installer押し](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/7eda00ea-1445-1e6a-b7b5-bd19c099585c.png)

夢にまで見たインストーラーが起動します！あとは先ほどの[注意点](#Windowsでの注意点)に従ってインストールします。

![VC2010 redistributableを選んでね](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/330accdd-3726-3774-1eb0-4ddf8534f6d4.png)

インストールが完了したら、環境変数の再読み込みの関係から一度VSCodeをしっかり再起動します。**Reload Windowだけではダメです。**
再起動すれば、Termnialでdmdが動くことを確認できます。

![再起動後に確認](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/7511c091-20c6-0c44-cbce-e608b39e377e.png)

せっかくのVSCodeなのだからターミナルで動かしてばかりいても仕方ないです。コマンドでプロジェクトを作ってみます。
まずプロジェクト用フォルダを用意してVSCodeで開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/98473fb2-7f30-dc54-42dd-bfbad805f1f8.png)

Yes, I Trustですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/72ad9997-9ee7-5b8e-fa2e-3c2914520665.png)

Ctrl + Shift + Pでコマンドメニューを開いて `code-d: Create New Project`を選びます。
まずは基本のEmpty Console Applicationを選びましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/4e0a5adb-23dd-67c2-c8df-41619a434c34.png)

こんな感じでシンプル極まりないプロジェクトができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/ac30764b-b501-f587-be41-10b028fed658.png)

現状でコードサジェスチョンが効きます！当たり前のようですが一昔前からD言語使っているDゲンガーには感涙ものです……。

![感動のコードサジェスチョン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/290b71ec-d7df-e793-44ea-b35fd9a28e25.png)

## トラブル情報

ここで、dubとか使ってHello,Worldを動かして今年の仕事一丁終わり！ と行きたかったのですが……。

**どうも今はWindows版のdmdで`-m64`でのビルド結果が怪しいようです……。**

現状ではエラーが出て終わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/dd793bb6-8936-5a45-0a7b-73c4e6bd5520.png)

rdmdで動かしてみるとこんな感じです……。`-m64`をつけると正常に実行されません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735/be8aefc3-8657-8899-6d36-1d5a4556f05f.png)

dmd-2.101はまだ新しいから何かトラブルがあるのかも……。

**続報こうご期待！**