無料かつ爆速デプロイできるVapor Cloudを使ってSwiftアプリケーションをホスティング #love_swift


[VaporをつかってHerokuにデプロイ](https://qiita.com/n0bisuke/items/478cc037b39130f4f057)を試してましたが、実は公式で用意してくれてるホスティング環境のvapor cloudなるものを発見したので使ってみます。

(早く知りたかった)

> https://vapor.cloud/

![](https://i.gyazo.com/59e780d245af7e0dcf8d8ed68898d002.jpg)

あと、爆速って書いたのは手順の話ですがNode.jsの[now](https://zeit.co/now)の方が圧倒的に簡単なので若干釣りタイトル疑惑あります(つっこまれるまえに謝罪）

## vaporコマンド

まずはvaporコマンドを使えるようにします。

[公式ドキュメント](https://docs.vapor.codes/2.0/getting-started/toolbox/)を参考にUbuntuにインストールします。

リポジトリの登録

```
$ wget -q https://repo.vapor.codes/apt/keyring.gpg -O- | sudo apt-key add -
echo "deb https://repo.vapor.codes/apt $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/vapor.list
```

apt-getでインストール

```
$ sudo apt-get install vapor
```

確認

```
$ eval "$(curl -sL check.vapor.sh)"
✅  Compatible with Vapor 2
```

問題なくインストールできました。

## Vaporコマンドでプロジェクト作成

`vapor new Hello`でHelloプロジェクトを作成します。

```
$ vapor new Hello
Cloning Template [Done]
Updating Package Name [Done]
Initializing git repository [Done]

                                    **
                                  **~~**
                                **~~~~~~**
                              **~~~~~~~~~~**
                            **~~~~~~~~~~~~~~**
                          **~~~~~~~~~~~~~~~~~~**
                        **~~~~~~~~~~~~~~~~~~~~~~**
                       **~~~~~~~~~~~~~~~~~~~~~~~~**
                      **~~~~~~~~~~~~~~~~~~~~~~~~~~**
                     **~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
                     **~~~~~~~~~~~~~~~~~~~~~~~~~~~~**
                     **~~~~~~~~~~~~~~~~~~~~~++++~~~**
                      **~~~~~~~~~~~~~~~~~~~++++~~~**
                       ***~~~~~~~~~~~~~~~++++~~~***
                         ****~~~~~~~~~~++++~~****
                            *****~~~~~~~~~*****
                               *************

                      _       __    ___   ___   ___
                     \ \  /  / /\  | |_) / / \ | |_)
                      \_\/  /_/--\ |_|   \_\_/ |_| \
                        a web framework for Swift

                     Project "Hello" has been created.
              Type `cd Hello` to enter the project directory.
          Use `vapor cloud deploy` to host your project for free!
                                  Enjoy!

```

やはり **デザインがいい。**大事。

```
$ cd Hello
$ ls
cloud.yml  Config  license  Package.swift  Public  README.md  Sources  Tests
```

こんな感じでプロジェクトが作成されます。

## Vapor Cloudでデプロイしてみる

Vapor Cloudは`vapor`コマンドのサブコマンドとして使えるので特に別途インストールとかはいりません。

### 登録

ユーザー登録からです。CLIからできます。

```
$ vapor cloud signup
Email:
> 
Password:
>
Confirm Password:
>
First Name:
> nobisuke
Last Name:
> sugawara
Organization? (enter to use 'nobisuke's Cloud')
>
Creating User [Done]
Welcome to Vapor Cloud.

Would you like to login now?
y/n> y
Logging in [Done]
Welcome back.
```

### ログイン

登録したメールアドレスとパスワードでログインします。

```
$ vapor cloud login
Email:
> hogehoge@gmail.com
Password:
>
Logging in [Done]
Welcome back.
```

### デプロイ

#### リモートリポジトリの登録

デプロイするにあたり、これを先にやっておかないとエラーが出ました。リモートリポジトリ側に作成したプロジェクトをプッシュしておきます。

* **GitHubなどでリポジトリを作成しましょう。**
* そこにプッシュします。

```
$ git init
$ git remote add origin git@github.com:n0bisuke/vapor-testapp.git
$ git push origin master
```

`vapor new`コマンドで雛形を作ってから編集してないのでそのままpushで問題ないです。

#### 対話型のCLIでデプロイ

結構質問多いです笑

何回か途中で`Is the above information correct?`と質問が来ますが、上の情報正しい？みたいな確認なので`y`で進みます。

```
$ vapor cloud deploy

app: vapor-testapp
git: https://github.com/n0bisuke/vapor-testapp
No environments found.
Create environment: vapor cloud create env
Would you like to create an environment now?
y/n> y
app: vapor-testapp
git: https://github.com/n0bisuke/vapor-testapp
environment: staging
default branch: master
replica size: Free
Is the above information correct?
y/n>
```

設定が問題なく完了するとデプロイがスタートします。

```
Creating deployment [Done]
Connecting to build logs ...
Waiting in Queue [Done]
Checkout branch 'master' [Done]
Verifying base folder [Done]
Selected swift version: 4.0.0 [Done]
Building vapor [Done]
Trying to find executable [Done]
Found executable: Run [Done]
Creating container registry [Done]
Building container [Done]
Pushing container to registry [Done]
Updating replicas [Done]
Deployment succeeded: https://vaporttestapp-staging.vapor.cloud [Done]
Successfully deployed.
```

最後にURLが発行されます。

`https://vaporttestapp-staging.vapor.cloud/hello`にアクセスすると

`vapor new`で作成された雛形APIを確認することができます。

![](https://i.gyazo.com/4ce8abe043ce3899611e77ad7d8726f3.png)

## 所感

### 料金プラン: 月間20000リクエストまで無料

**月間20000リクエストまで無料** みたいなので、テストアプリケーションを動かす際には

![](https://i.gyazo.com/80566ed3ef66eff37c35dab3a063c655.png)

### SSL対応しててくれてこれもまた嬉しい

慣れればHerokuよりも早いと思います。
またVapor公式なのでVaporを使ってAPIサーバーを作るときや、 LINE BOTなどSSL対応しておかないとそもそも先に進めない、みたいなアプリケーションを試す際には便利だと思います。