Swift toolchainを使ってWindows10のSwiftビルド環境

# まえがき
Siwftを勉強したい、Swiftで競技プログラミングに参加したいあるいはアプリを作りたい。
しかし自分のマシンはWindows……
ということで、Windows10で必要な環境を整えることにしました。~~Mac買え~~
こちらはその備忘録になります。

2020年9月以降、WindowsでSwiftをビルド可能にするSwift toolchainが提供されています。
今回はそちらを利用していきます。

Swift公式のインストールガイド
https://swift.org/getting-started/

# 環境
Windows10 Home
(バージョン2004)

# 必要なもの
- **Swift toolchain**  
https://swift.org/download/  
- **Visual Studio 2019**(以下、VS 2019)  
https://visualstudio.microsoft.com/ja/downloads/


# Swift toolchainの設定
流れに身を任せる。
Toolchainインストーラは一本道なので迷うことはないと思います。

# VS 2019の設定
**インストール**
必須項目と推奨項目があるので、すべてに☑が入るようにします。
下記のワークロードを設定することで「Windows Universal C Runtime」と「Git for Windows」以外は設定されます。

- Python 開発
- C++ によるデスクトップ開発

「Windows Universal C Runtime」と「Git for Windows」は個別のコンポーネントから検索して設定します。
ただし、日本語環境では「Windows Universal C Runtime」は「Windows ユニバーサル CRT」という名前になっています。
(Universalで調べても出てきません……)

**必須項目**

|No| Component | Visual Studio ID |
|:-:|:-:|:-:|
|1|MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.25)|Microsoft.VisualStudio.Component.VC.Tools.x86.x64|
|2|Windows Universal C Runtime|Microsoft.VisualStudio.Component.Windows10SDK|
|3|Windows 10 SDK (10.0.17763.0)|Microsoft.VisualStudio.Component.Windows10SDK.17763|
※1,3に関してはこれより新しいバージョンであればOK

**推奨項目**

|No| Component | Visual Studio ID |
|:-:|:-:|:-:|
|1|C++ CMake tools for Windows|Microsoft.VisualStudio.Component.VC.CMake.Project|
|2|Git for Windows|Microsoft.VisualStudio.Component.Git|
|3|Python 3 64-bit (3.7.8)|Component.CPython.x64|
※Git, Python3が既にインストール済みの場合は飛ばしてOK

**サポートファイルの設定**
設定ファイルを上書きします。
VS 2019のインストール時に同時にインストールされている「X86 Native Tools Command Prompt for VS 2019」を管理者権限で起動して、以下のコマンドを順に実行します。
※ 非常に残念ながら、VS 2019のインストールファイルを上書きしている関係上、Visual Studioのアップデート毎にこの作業をする必要があります。~~やはりMacを買った方が早いのでは?~~

```cmd
copy %SDKROOT%\usr\share\ucrt.modulemap "%UniversalCRTSdkDir%\Include\%UCRTVersion%\ucrt\module.modulemap"
copy %SDKROOT%\usr\share\visualc.modulemap "%VCToolsInstallDir%\include\module.modulemap"
copy %SDKROOT%\usr\share\visualc.apinotes "%VCToolsInstallDir%\include\visualc.apinotes"
copy %SDKROOT%\usr\share\winsdk.modulemap "%UniversalCRTSdkDir%\Include\%UCRTVersion%\um\module.modulemap"
```
  

**Python3を環境変数のパスに設定**(VS 2019からのインストールまたは設定していない場合)
Python3のインストールをVS 2019のワークロードから行った場合、環境変数を別途設定する必要があります。

```cmd
> path %ProgramFiles(x86)%\Microsoft Visual Studio\Shared\Python37_64;%PATH%
```

バージョンが確認できればOKです。

```cmd
>python -V
Python 3.7.8
```
Windows10 May Update 2019以降Microsoft StoreにあるPythonインストーラに飛ばす環境変数が追加されています。
飛ばされた方は環境変数の優先順位を確認してみましょう。


# 世界にご挨拶
では、エンジニアご用達の例のやつをやってみましょう。

**Swiftのバージョン確認**
ここまでの設定ができていれば、コマンドラインからSwiftのバージョンが確認できます。

```
> swift --version
compnerd.org Swift version 5.4 (swift-5.4-RELEASE)
Target: x86_64-unknown-windows-msvc
```

**ハローワールド**
適当なフォルダに以下のファイルを作成します。

```Swift:hello.swift
print("Hello, World!")
```

コマンドプロンプトでファイルのあるフォルダに移動して、コマンドを実行していきます。

```cmd
>set SWIFTFLAGS=-sdk %SDKROOT% -I %SDKROOT%/usr/lib/swift -L %SDKROOT%/usr/lib/swift/windows
>swiftc hello.swift -o hello.exe %SWIFTFLAGS%
```
「ライブラリ hello.lib とオブジェクト hello.exp を作成中」と表示された後、同じフォルダにhello.exeが作成されているはずです。  
実行すると……

```cmd
>hello
Hello, World!
```
挨拶できました！

# あとがき
というわけで
環境構築からハローワールドまでの備忘録でした。

提供が始まって半年とちょっと、まだまだ情報が少ないのでどなたかの参考になれば幸いです。