VaporでサーバーサイドSwiftを試してみた

## サーバーサイドSwiftとは

プログラミング言語であるSwiftは、2014年のWWDCで大々的に発表され、2015年にはオープンソース化されました。
Objective-Cの後継として、macOS・iOS・tvOS・watchOSのアプリ開発に活用されていますが、サーバーサイドの開発でも使えるようにしようという取り組みがおこなわれています。

サーバーサイドでの開発といえば、PHPやPythonやRubyなどなど、いろいろな言語があります。しかし、Swiftでも開発できるようになると、ひとつの言語でアプリもサーバーサイドも開発ができるようになります。

Swift大好きなわたしにとっては、夢のような話です。

## サーバーサイドSwiftフレームワーク

サーバーサイドSwiftを実現するためのフレームワークはいくつかあります。

有名なところでは[Perfect](https://www.perfect.org)や[Kitura](https://www.kitura.io/index.html)や[Vapor](https://vapor.codes)などがあります（ほかにもたくさんあるので、興味があるかたは「サーバーサイドSwift フレームワーク」で検索してみてください）。

今回は、VaporをつかってmacOSでHello, World!をしてみます（公式ドキュメントの[Install on macOS](https://docs.vapor.codes/3.0/install/macos/)を参照しながら進めていきます）。

## Xcodeをインストールしよう

まずは、Xcodeをインストールしましょう。

VaporをmacOSで使うためには、Xcode 9.3以上が必要です（Xcode 9.3をインストールするためには、macOSをHigh Sierra以降にする必要があります）。Mac App Storeか、Developer CenterでXcodeをダウンロードしてインストールしてください。

**インストールを完了するためには、Xcodeを開く必要があるので注意してください。**

インストールが完了したかをチェックします。ターミナルを開いて

```
swift --version
```

を実行してください。
次のようなメッセージが表示されます。

```
Apple Swift version 4.1.0 (swiftlang-900.0.69.2 clang-900.0.38)
Target: x86_64-apple-macosx10.9
```

Vaporは、Swift 4.1以降が必要なので、 `Apple Swift version` の数字が `4.1.0` 以降になっていればオッケーです。

## Vaporをインストールしよう

次に、[Vapor Toolbox](https://docs.vapor.codes/3.0/getting-started/toolbox/)をつかってVaporをインストールします。

Vapor Toolboxは、新しいプロジェクトをつくるためのCLIツールが含まれています。ターミナルを開いて

```
brew install vapor/tap/vapor
```

を実行してください。

Homebrewをインストールしていなければ、[brew.sh](https://brew.sh)でインストールしてから上のコマンドを実行してください。

インストールが完了したかをチェックします。ターミナルを開いて

```
vapor --help
```

を実行してください。
次のように、Vaporのコマンド一覧が表示されます。

```
Usage: vapor command

Join our Slack if you have questions, need help,
or want to contribute: http://vapor.team

Commands:
       new Creates a new Vapor application from a template.
           Use --template=repo/template for github templates
以下略
```

これでVaporのインストールが完了しました。

## 新しいプロジェクトをつくろう

準備ができたので、いよいよHello, World!に進みます。
そのために、新しいプロジェクトをつくって、ビルドして、実行するという手順を踏みます。

まずは、新しいプロジェクト「Hello」をつくりましょう。

ターミナルを開いて、プロジェクトをつくりたいディレクトリに移動してから、Vapor Toolboxの[newコマンド](https://docs.vapor.codes/3.0/getting-started/toolbox/#new)を実行します。

```
vapor new Hello
```

**上の例では「Hello」がプロジェクト名です。[公式ドキュメント](https://docs.vapor.codes/3.0/getting-started/toolbox/#new)によると、プロジェクト名は「HelloWorld」や「MyProject」のようにPascalCaseにする必要があるそうです。**

インストールが完了すると、ターミナルにVaporのロゴが表示されます。

<img width="593" alt="Vapor001.png" src="https://qiita-image-store.s3.amazonaws.com/0/38924/75d47fa4-c90f-8af9-5e6c-4734f700e568.png">


懐かしのX-1やPC-8801のゲームを思い出して、ほっこりしました。

さて、それではターミナルで次のコマンドを入力して、

```
cd Hello
```

Helloプロジェクトのディレクトリに移動しましょう。

## Xcodeプロジェクトをつくろう

newコマンドでプロジェクトをつくっただけだと以下のような状態なので、Xcodeで開くことはできません。

<img width="605" alt="Vapor002.png" src="https://qiita-image-store.s3.amazonaws.com/0/38924/36616074-1c1f-1867-d8bd-f5fdc60b25ba.png">


Xcodeで開けるようにするために、Xcodeプロジェクトをつくりましょう。

ターミナルを開いて、Vapor Toolboxの[xcodeコマンド](https://docs.vapor.codes/3.0/getting-started/toolbox#xcode)を実行します。このコマンドを実行することで、iOSアプリのように、Xcodeでソースを修正したりビルドや実行することができるようになります。

```
vapor xcode
```

プロジェクトの作成が完了すると

```
Open Xcode project?
```

Xcodeプロジェクトを開きますか？
と聞かれるので

```
y/n> y
```

yを入力してreturnすると、

<img width="1512" alt="Vapor003.png" src="https://qiita-image-store.s3.amazonaws.com/0/38924/eb715d18-8ea9-38ee-0380-5bacdde48561.png">


自動的にXcodeが起動して、Helloプロジェクトが開きます。

## ビルドして実行しよう

次はビルドして実行します。

<img width="236" alt="Vapor004.png" src="https://qiita-image-store.s3.amazonaws.com/0/38924/ed439972-b184-6646-4d18-6281103180b0.png">


XcodeのSchemeでRunを選択して、Deployment TagetはMy Macを選択してから、三角の実行ボタンをクリックします。
実行されるとデバッグエリアに次のメッセージが表示されます。

```
Server starting on http://localhost:8080
```

## ブラウザーでつないでみよう

ブラウザーを起動して、次のURLにアクセスします。

```
localhost:8080/hello
```

![Vapor005.png](https://qiita-image-store.s3.amazonaws.com/0/38924/ec24256f-f5b2-d2d7-e89f-01923215b0a8.png)


「Hello, world!」が表示されています。

おめでとうございます！
はじめてのVaporアプリをつくって、ビルドして、実行することができました🎉