Cloud9で始めるServer Side Swift (Vapor)


Server Side Swiftを試してみたいけど、環境づくりが面倒だなぁと思って敬遠していたのですが、Cloud9を使えば簡単に動かせることが分かりました。

[Vapor](http://vapor.codes/)はMac環境にも対応しているので(Xcodeでコーディングもできます！)、Ubuntu＋OSS版Swiftが必須というわけではないのですが、後々HomebrewでDBをインストールしたりする環境構築は避けたいと思いました。

とりあえずCloud9で試してみて、もっと「本格的に」となったら、目的に応じた環境構築(Docker等の仮想環境でつくる、Ubuntuの動いているサーバを用意する)をしていったら良いのではないかと思います。

Cloud9をご存知ない方は下記リンクをご参照ください。

[プログラミングの開発環境に便利！Cloud9の使い方【Rails・WordPressテンプレートの解説あり】](https://techacademy.jp/magazine/6168)

[簡単に開発環境が構築できる！cloud9 使い方を徹底解説](https://blog.codecamp.jp/cloud9)


##Cloud9のうれしい点

- ローカル環境を汚さない  
後々ゴミが残ったり、ストレージを消費しないので、お試しにピッタリ
- DBが用意済み  
Cloud9はPostgreSQLがインストール済み
- 環境がコピーできる  
セットアップした状態を残しておいて、失敗したらすぐに消してやり直しできる
- 一応無料  
サンプルコードを動かすだけならPublicで構わないので、無料で使える


##セットアップ手順
**Cloud9のアカウントは取得済みとします**

###Swift3のインストール

Signin後、Dashboardからworkspaceを作成します。
[Create a new workspace] をクリックします。

![01_workspace0.png](https://qiita-image-store.s3.amazonaws.com/0/15905/9f56354a-1acb-b5cc-e234-a9c70dc335b0.png "01_workspace0.png")

Workspaceに名前をつけます。
ex. swift3

![01_workspace1.png](https://qiita-image-store.s3.amazonaws.com/0/15905/2be1ad01-3c57-13e2-b731-d28f64698e05.png "01_workspace1.png")

Blank を選択し、[Create workspace] をクリックします。

![01_workspace2.png](https://qiita-image-store.s3.amazonaws.com/0/15905/7d250aa5-61d3-2f2c-08eb-a83051270a85.png "01_workspace2.png")

少し待ちます。Containerがセットアップされているようですね。

![01_workspace3.png](https://qiita-image-store.s3.amazonaws.com/0/15905/e6b74353-f43c-1217-4485-36fd7c6567a9.png "01_workspace3.png")

-----

Workspaceが作成できました。

![02_blank1.png](https://qiita-image-store.s3.amazonaws.com/0/15905/cff7e73f-ea02-f8c8-4aae-b489138c7d7b.png "02_blank1.png")

Ubuntu14.04です。

![02_blank2.png](https://qiita-image-store.s3.amazonaws.com/0/15905/9658fe52-50f5-8ddb-8a35-c1475587b16e.png "02_blank2.png")

パスは /home/ubuntu/workspace/ となっていました。

![02_blank3.png](https://qiita-image-store.s3.amazonaws.com/0/15905/cb223b98-1dd0-672d-9897-060a5e725957.png "02_blank3.png")

この環境にSwift3をインストールします。

```
git clone https://github.com/keygx/swift3-ubuntu14-installer.git 
```

これはSwiftセットアップ用のスクリプトで、Ubuntu14.04にSwift3.0.2をインストールできます。

![03_install1.png](https://qiita-image-store.s3.amazonaws.com/0/15905/971901ee-9346-0e50-61fb-d667a3a95df2.png "03_install1.png")


ディレクトリを移動して、

```
cd swift3-ubuntu14-installer 
```

スクリプトを実行します。

```
./install_swift.sh
```

途中質問された場合は、適宜回答ください。
これはインストールにかかるディスク容量について訊かれているので Y で

![03_install2.png](https://qiita-image-store.s3.amazonaws.com/0/15905/c4434b80-a07c-e2fb-1170-cdd1d83e376c.png "03_install2.png")

しばらく待つとインストールが終わります。

![03_install3.png](https://qiita-image-store.s3.amazonaws.com/0/15905/81a5eb34-5f51-b50c-e3db-236a544c0d76.png "03_install3.png")

いわれたとおり
```
source ~/.profile
```
します。

![03_install4.png](https://qiita-image-store.s3.amazonaws.com/0/15905/5e1fdd91-3358-ca81-ccaf-007745fb2093.png "03_install4.png")

```
swift -v
```

Swift3.0.2がインストールできました。

![03_install5.png](https://qiita-image-store.s3.amazonaws.com/0/15905/d6a48a69-cf1a-d140-7e05-0535720f2d49.png "03_install5.png")

Swift3環境を残しておきたいので、一端Dashboardに戻ります。
右上にあるCloud9のロゴをクリックします。

![04dashboard1.png](https://qiita-image-store.s3.amazonaws.com/0/15905/1dcda5a4-7b75-0d26-67df-9244a8c94f65.png "04dashboard1.png")

-----

###Vaporのインストール

Dashboardで先ほどセットアップしたSwift3環境のWorkspace「swift3」を [Clone] します。

![04dashboard2.png](https://qiita-image-store.s3.amazonaws.com/0/15905/18c8af42-a581-b330-5830-d7166355f6df.png "04dashboard2.png")

Workspaceに別の名前をつけます。
ex. swift3-vapor

![04dashboard3.png](https://qiita-image-store.s3.amazonaws.com/0/15905/c7f06b42-7617-f72f-5e7a-4c421545dd90.png "04dashboard3.png")

-----

新たに別のWorkspaceとして、Swift3セットアップ済み環境が起動します。

![05vapor1.png](https://qiita-image-store.s3.amazonaws.com/0/15905/50ef913e-d816-8d88-4fe3-ea397f57ed7c.png "05vapor1.png")

ここにVaporをインストールします。

```
curl -sL swift.vapor.sh/ubuntu | bash
```

![05vapor2.png](https://qiita-image-store.s3.amazonaws.com/0/15905/cdcdbb52-17d7-da7a-28f3-98cae36e14d7.png "05vapor2.png")


さらに Toolboxをインストールします。

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

![05vapor3.png](https://qiita-image-store.s3.amazonaws.com/0/15905/6bba1438-e647-69ae-a312-aa3d76d19038.png "05vapor3.png")


インストールが完了したら、この環境残しておくために、Dashboardに戻ります。

-----

###Vaporでアプリを作成

vaporインストール済み環境をクローンしてアプリをつくっていきます。

![06dashboard1.png](https://qiita-image-store.s3.amazonaws.com/0/15905/6ce98e4b-2052-bb9f-2ac0-b31da7fbdbaf.png "06dashboard1.png")

Workspaceに別の名前をつけます。
ex. swift3-vapor-hello

![06dashboard2.png](https://qiita-image-store.s3.amazonaws.com/0/15905/39608034-e616-ea4c-ef66-8b75bd424b42.png "06dashboard2.png")

-----

新規にアプリを作成します。

```
vapor new hello
```

![07hello2.png](https://qiita-image-store.s3.amazonaws.com/0/15905/41e3d87f-32e7-3bbf-1893-46e809b827e0.png "07hello2.png")


生成されたアプリのディレクトリに移動し、buildします。

```
cd hello
```
```
vapor build 
```

![07hello3.png](https://qiita-image-store.s3.amazonaws.com/0/15905/fc67807d-9292-1f6d-31eb-503569f56e62.png "07hello3.png")

buildはけっこう時間がかかりますので、気長に待ちましょうw

![07hello4.png](https://qiita-image-store.s3.amazonaws.com/0/15905/54910a7a-08a9-eb15-f411-28980ad88066.png "07hello4.png")

buildが完了したら、サーバを起動します。

```
vapor run serve
```

![07hello5.png](https://qiita-image-store.s3.amazonaws.com/0/15905/bdb906a9-7e52-42ac-b9f4-2c218850f4f1.png "07hello5.png")


各Workspaceは下記のようなURLがふられているようで、
https://[workplace]-[username].c9users.io/

このサンプルだと
https://swift3-vapor-hello-keygx.c9users.io/ にてアクセスできます。

![07hello6.png](https://qiita-image-store.s3.amazonaws.com/0/15905/ca2ca2af-8e73-ed3a-5add-59e8ccc76aeb.png "07hello6.png")

以上で、SwiftのセットアップからVaporのインストール、アプリの起動までができました。

私はこの後、公式の [ドキュメント](https://vapor.github.io/documentation/getting-started/hello-world.html) を写経してみたり、こちらの [SCREENCAST](https://videos.raywenderlich.com/screencasts) の内容を参考にして勉強しています。


##補足

###Cloud9のDB

DBを使いたくなった際は、下記のページが参考になりました。Cloud9はPostgreSQLがすぐに使えるようになっています。

Cloud9でのPostgreSQL
https://community.c9.io/t/setting-up-postgresql/1573

###Workspaceの使い方

この記事の通りに進め場合、Workspaceは

- swift3 (Swift3)
- swift3-vapor (Swift3 + Vapor)
- swift3-vapor-hello (Swift3 + Vapor + helloアプリ)

の3つとなります。

Vaporの勉強をすすめていく際は、お題ごとに swift3-vapor を [Clone] していくのが良いかなと思います。また、Vapor以外のFrameworkを試したくなったら、swift3 を [Clone] して…　とすれば、別の環境もつくることができます。