VaporのToolboxについて

この記事では以下の環境で動作を確認しています。

* Xcode9.0
* macOS Sierra バージョン 10.12.6
* Vapor Toolbox: 2.0.4
* Vapor Framework: 2.2.2

# Vapor Toolbox
Vapor ToolboxはVaporが提供しているコマンドラインツールです。これを使ってアプリケーションの作成やビルドや実行ができます。
またXcodeのプロジェクトファイルの生成や、Herokuへのデプロイなどができます。

この章ではVapor Toolboxの使い方をみていきます。

# インストール
Vapor toolboxはパッケージ管理システムHomebrewで提供されています。

## Homebrewのインストール
Homebrewがまだインストールされていない方はインストールしましょう。
ターミナルで以下のコマンドを実行します。

```bash
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
```

インストールできたか確認します。

```bash
$ brew -v
Homebrew 1.3.2
```

## Homebrew Tap
HomebrewのTapコマンドを実行してVaporの全てのパッケージをインストール出来るようにします。

```bash
$ brew tap vapor/homebrew-tap
$ brew update
```

## Vapor Toolboxのインストール
下記のコマンドでインストールができます。
インストール後は`vapor --help`でインストールできているかをチェックしましょう。

```bash
$ brew install vapor
# インストールの確認
$ vapor --help
```

# アプリケーションの作成 
アプリケーションはVapor Toolsを使って簡単に作成できます。
アプリケーションの作成は`$ vapor new`コマンドを実行します。
`--templete`というオプションでテンプレートからアプリケーションを作成することができます。構文は以下です。

```bash
$ vapor new <name> [--template]
```

テンプレートはデフォルトで以下が用意されています。

|名前|オプション|説明|
|:--------------|:--------------|:--------------|
|API|--template=api|Fluent のデータベースを使ったJSON APIのテンプレート|
|Web|--template=web|Leafを使ったHTMLサイトのテンプレート|
|Auth|--template=auth|Auth認証サーバーを作成するテンプレート|



テンプレート指定は以下の仕組みで動いています。

* `—template=web` は http://github.com/vapor/web-template をクローンします。
* `—template=user/repo` は http://github.com/user/repo をクローンします。
* `—template=http://example.com/repo-path` は指定されたURLでクローンします。


-template=[web|api|auth]は以下のようなショートカットの指定もできます。

```bash
$ vapor new <name> —-web
$ vapor new <name> —-api
$ vapor new <name> —-auth
```  

# Webアプリケーションをつくってみる
実際にVaporアプリケーションを作ってみましょう。
下記のコマンドを実行します。

```
$ $ vapor new SampleWeb --web
$ cd SampleWeb
```

## アプリケーションをビルド、実行する
テンプレートによってアプリケーションのソースがすでに作成されています。
アプリケーションを起動してみましょう。

```bash
$ vapor build
$ vapor run
```

http://0.0.0.0:8080/
にてローカルサーバーが立ち上がります。
デフォルトのWebページが表示されます。

![VaporToolbox_fig1.png](https://qiita-image-store.s3.amazonaws.com/0/31587/5073f8db-de48-705e-10bf-b26225b73798.png)


## Xcodeのプロジェクト作成
Swiftで開発している方なら、普段と同じIDEのXcodeで開発したいですよね？
VaporにはXcodeのプロジェクトを生成するコマンドがありますのでそれを使ってみましょう。

```bash
$ vapor xcode
Generating Xcode Project [Done]
Select the `Run` scheme to run.
Open Xcode project?
y/n> 
# yを入力するとXcodeが起動
```

`SampleWeb.xcodeproj`が作成されます。
 これでVapor開発でもXcodeが使えるようになります。

<img width="1512" alt="VaporToolbox_fig2.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/31587/6bf795c8-3fd0-d83d-33f1-ee4a8541d08c.jpeg">


##  Herokuにデプロイ
ローカルで開発したらデプロイして一般に公開したいものです。
Vapor ToolsにはHerokuアプリケーションを作成するコマンドがすでにあります。
gitでコミットして、` vapor heroku init`をすればherokuのアプリケーションが作れます！

まずはコマンドラインでHerokuにログインしましょう。

```bash
$ heroku login
Enter your Heroku credentials:
Email: <YOUR MAIL>
Password: ****************
```

そしてソースをgitでコミットします。

```bash
$ git init
$ git add ./
$ git commit -m "init commit"
```

`vapor heroku init`を実行することで、Heroku上にVaporのアプリケーションを作成することができます。
Herokuアプリケーションを作成する関係上、コマンドラインで様々な入力を求められます。適切なものを指定していきましょう。
以下の例にインラインにて私の環境で聞かれたものをコメントします。

```bash
$ vapor heroku init
Would you like to provide a custom Heroku app name? #独自のHerokuアプリ名を設定するか？
[y]es or [n]o> n
Would you like to deploy to a region other than the US? #USリージョン以外でデプロイするか？
y/n> n
https://secure-thicket-91213.herokuapp.com/ | https://git.heroku.com/secure-thicket-91213.git

Would you like to provide a custom Heroku buildpack? #独自のビルドパックを利用するか？
y/n> n
Setting buildpack...
Are you using a custom Executable name? #独自の実行名を利用するか？
y/n> n
Setting procfile...
Committing procfile...
Would you like to push to Heroku now? #HerokuへPushを今するか？
y/n> y
This may take a while...
Building on Heroku ... ~5-10 minutes
```

上手く行けばHerokuにアプリケーションが作成されます。

開発が進み、ソースが更新されたら、Gitでコミットが終わった後に`heroku push`コマンドを実行すればHerokuへプッシュが行われます。

```bash
$ vapor heroku push
```

# 参考
[Getting started  Toolbox](https://docs.vapor.codes/2.0/getting-started/toolbox/)