サーバーサイドもswiftで書きたい!!webフレームワーク:vapor編


はじめに

swiftがオープンソース化して、サーバーサイドもswiftで書いてみたい!と思っていたけど
開発途中でまだ触るのは早いかな?と様子を見ていました。

そろそろ触ってみるか!と思い立って、とりあえず今勢いが良さそうなvaporを触ってみました。
サクッと使えたのでインストールや基本的な使い方についてメモしておきます。

vaporってなに?

  • swiftのwebフレームワーク
  • phpのフレームワークlaravelに影響を受けている
  • Proudly sponsored by Nodes
  • slackでのサポートあり
  • 2017/2/13現在でgithubのスター数:8700超え

vaporを使うその前に・・・

swiftenvの導入

swiftenvはswiftのバージョン管理ツール

swiftは開発速度や変更点が多いので
バージョン管理して状況に応じて切り替えて使うのがオススメ!

インストール

$ brew install kylef/formulae/swiftenv

環境設定

$ echo 'if which swiftenv > /dev/null; then eval "$(swiftenv init -)"; fi' >> ~/.bash_profile
$ source ~/.bash_profile

スナップショットのインストール

https://swift.org/download/#snapshots
上記からスナップショットのURLを取得してくる

$ swiftenv install <スナップショットのURL>

インストール済みスナップショットの確認

$  swiftenv versions 
      DEVELOPMENT-SNAPSHOT-2016-04-12-a 
 * DEVELOPMENT-SNAPSHOT-2017-01-27-a 

「*」は使用中のバージョン

使用するスナップショットの指定

$ swiftenv global <使用するバージョン>

vaporの使い方

インストール

$ brew install vapor/tap/toolbox

プロジェクトの作成

$ vapor new <プロジェクト名>

ビルド

$ cd <プロジェクト名>
$ vapor build

サーバー立ち上げ

$ vapor run serve 

表示確認

http://0.0.0.0:8080/
にアクセスして下記画面が出ればOK

その他メモ

Xcodeでソースコード編集したい

$ cd <プロジェクト名> 
$ vapor xcode

設定ファイル周り

  • jsonで記述
  • Configディレクトリ下に置く
  • 環境ごとに設定を変えられる
  • ディレクトリは3種類 production/development/secrets
  • secretsディレクトリはどの環境でも最優先で読まれ、デフォルトで.gitignore対象
WorkingDirectory/
├── Config/
│   ├── server.json
│   ├── production/
│   ├── development/
│   └── secrets/

vaporのコアクラス

Droplet

ルート登録、サーバーの起動、ミドルウェアの追加などを行うVaporのコアクラス

import Vapor
let drop = Droplet()

// your magic here

drop.start()

蒸気(vapor)を取り込んで(import)
雫(droplet)を作る

使用例

Config/server.json
{
  "http": {
    "host": "0.0.0.0",
    "port": 8080
}
Sources/App/main.swift
import Vapor
let drop = Droplet()

let host = drop.config["server", "http", "host"]?.string

まとめ

導入はサクッとできた!
herokuにbuildpackもあるから、実際簡単に何か作りたいときはheroku使うといいかも。
筆者もherokuで試してますが、ビルドがやたら遅い。。
でも開発は活発なようなので今後の発展に期待してます!!