サーバサイドSwiftフレームワークを4つインストール（だけ）してみた！

Swiftには触りつつも、Server Side Swiftは全然触ってこなかったので、どれがいいのかわかりませんが、とりあえず複数個インストールしてみました。
本当はDB接続くらいまで触ってみたかったのですが、インストールで終わってしまいました...。無念です。
せめてこれからサーバサイドSwiftを触る人の手助けになれば幸いです...!!

## 環境
* macOS Sierra 10.12.1

## 触ってみるフレームワーク一覧
* Vapor
* Perfect
* Kitura
* Zewo

## Vapor
Vaporとは
> It provides a beautifully expressive and easy to use foundation for your next website, API, or cloud project.

ウェブサイト、API、またはクラウドプロジェクトのための美しく表現力と使いやすい基盤を提供をうたうSwiftのWebフレームワークです。

### インストール
[公式のドキュメント](https://vapor.github.io/documentation/getting-started/install-swift-3-macos.html)を参考にインストールします。

下記コマンドでチェックします。
Xcode8が入っていない場合はAppStoreからインストールしておいてください。

```
curl -sL check.vapor.sh | bash
```

### インストール
下記コマンドでVaporコマンドをインストールします。

```
curl -sL toolbox.vapor.sh | bash
```

### Hello World!
VaporコマンドでHelloプロジェクトを作ります。
コマンドを叩くと、叩いた場所にプロジェクトが作成されます。

```
vapor new hello-vapor
```

このままビルドしてみます。

```
vapor build
```

サーバを起動すると、localhost:8080でアクセスできるようになります。

```
vapor run serve
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/120969/4d829741-3199-640c-cc0b-78c9274167fb.png" width="320px">

## Perfect
Perfectとは
>It provides everything a Swift engineer needs for developing lightweight, maintainable, and scalable apps and other REST services entirely in the Swift programming language for both client-facing and server-side applications

軽量で保守性がありスケーラブルなアプリケーションやその他のRESTサービスをクライアントとサーバーの両方をSwiftで開発するために必要なものはすべて提供するそうです。githubのスターもかなり多いですね。

### インストール
まずはSwiftのバージョンを確認します。

```
swift --version
Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1)
Target: x86_64-apple-macosx10.9
```

[PerfectのGetStart](https://github.com/PerfectlySoft/PerfectDocs/blob/master/guide/gettingStarted.md)を参考にインストールします。

```
git clone https://github.com/PerfectlySoft/PerfectTemplate.git
```

### Hello World

インストールしたプロジェクトに移動し、ビルドしてみます。

```
cd PerfectTemplate
swift build
```

サーバを起動します。起動するとlocalhost:8181でアクセスできるようになります。

```
.build/debug/PerfectTemplate
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/120969/8c073bcc-d913-a123-b6b9-0b1497a68297.png" width="320px">

## Kitura
KituraとはIBMが公開していることで割と有名なフレームワークですね。

[公式ドキュメント](http://www.kitura.io/en/starter/gettingstarted.html)を参考にインストールします。

### インストール
プロジェクトのフォルダを作成します。

```
mkdir hello-kitura
```

フォルダへ移動し、その後Swift Package Managerでスケルトンを作成します。

```
swift package init --type executable
```

作成したら、Package.swiftを編集します。

```
import PackageDescription

let package = Package(
    name: "myFirstProject",
    dependencies: [
        .Package(url: "https://github.com/IBM-Swift/Kitura.git", majorVersion: 1, minor: 2)
    ])
```

下記のコマンドでビルドします。

```
swift build
```

main.swiftを編集します。

```
import Kitura

// Create a new router
let router = Router()

// Handle HTTP GET requests to /
router.get("/") {
    request, response, next in
    response.send("Hello, World!")
    next()
}

// Add an HTTP server and connect it to the router
Kitura.addHTTPServer(onPort: 8090, with: router)

// Start the Kitura runloop (this call never returns)
Kitura.run()
```

そして下記コマンドで起動するとlocalhost:8080で表示できるようになります。

```
.build/debug/hello-kitura
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/120969/eabfed00-666f-02e9-b64a-cbe753acd265.png" width="320px">

## Zewo
>Zewo is a set of open source libraries that help you build
modern and blazing fast server software.

Zewoは近代的で驚異的な高速サーバーソフトウェアのビルドに役立つ一連のオープンソースライブラリだそうです。


### インストール
プロジェクトのフォルダを作成します。

```
mkdir hello-zewo
```

フォルダへ移動し、その後Swift Package Managerでスケルトンを作成します。

```
swift package init --type executable
```

作成したら、Package.swiftを編集します。

```
import PackageDescription

let package = Package(
    name: "hello-zewo",
    dependencies: [
        .Package(url: "https://github.com/Zewo/HTTPServer.git", majorVersion: 0, minor: 14),
    ]
)
```

下記のコマンドでビルドします。

```
swift build
```

その後、main.swiftを編集します。

```
import HTTPServer

let log = LogMiddleware()

let router = BasicRouter { route in
    route.get("/hello") { request in
        return Response(body: "Hello, world!")
    }
}

let server = try Server(port: 8080, middleware: [log], responder: router)
try server.start()
```

main.swiftを書いたらビルドします。
起動するとlocalhost:8080で表示できるようになります。

```
.build/debug/hello-zewo
```

<img src="https://qiita-image-store.s3.amazonaws.com/0/120969/af28ce0d-542a-b5b0-bd37-ad865d6362f1.png" width="320px">

<img src="https://qiita-image-store.s3.amazonaws.com/0/120969/cb5fd9ec-2796-21ba-de6e-68b74085429e.png" width="320px">

## インストールを終えて
インストールしてみたこれらについて、ベンチーマークをとってどれが一番良さそうか見てみたいと思います！