Caesar Wirth
CyberAgentのソフトウェアエンジニアです。これまでEコマース、SNS、動画ストリーミングなど多くのiOSアプリを開発してきました。Swiftがクロスプラットフォームであるように、Androidアプリやバックエンドサーバのコードも書いてます。コードを書いてない時は、ハイキングやボルダリングをしたり、東京近郊のおいしいタコライスを探し回ってます!
多くのMacやiOSアプリはバックエンドのサーバと通信します。 今やSwiftはオープンソース化され、アプリ開発しているときと同じ言語でバックエンドの実装を行えるようになりました。サーバサイドSwiftを初める方法をお話しします。
So I guess Speaker Deck is the cool place to host slides, so I uploaded my slides there as well #tryswiftconf https://t.co/WPJOHPBcEa
— Caesar Wirth (@cjwirth) 2016年3月5日
おはようございます

多くの方々は私がスケジュールに載っていなかったと思うかもしれません。
数日前新しいアプリを作り、try! Swift などカンファレンスのオーガナイザをしています。

ミニマルなサーバーサイドSwiftアプリを作りましょう
クライアントサイドでリクエストを送る時のコードはこのようなものですね

Pokedexからポケモンを取ってくると。
サーバーサイドをする時、他ではどうしているのかを参考にできると思います。


Node

でもRubyやJSを書きたい訳ではありませんね?誰かSwift書きたくないといつか言っていましたが(笑い)

Swiftの利点は型があることです。

クライアントサイドと変わりません。

基本値なものだけ書いていますが、基本的型があれば何をサポートしているか分かる。
サーバータイプを定義する

データのIn /Out、サーバーは関数のようなものです。

ソケットをリスニングする、コネクションを開く、スレッドを起動する、Lowレベルの作業したくないことがいっぱい。
そこでフレームワークが使えます

アプリの実装からこういった事柄を切り離すことが出来ます。

一つの関数になりました。

実行するとレスポンスが帰ってきます。
もうすこしRoutingの面倒を見る必要があります。一つのサーバータイプでは対処できません。

メンテナンス可能でシンタックスを使えるようにしたい。
ルーターを作っていきます。

ハンドルをしていきます。ルーティングを登録して、ハンドラーが集まってきたらハンドルファンクションも作れます。
半トラータイプというのはThrowもできます。リクエスト失敗に500、のエラーを返すことも可能。

リクエストを投げて存在しなければエラーを投げる。エラーはもう一つのレスポンスタイプになる。
ハンドルファンクションはルーターと同じですね?

サーバーにファンクショナリティを追加していきたいと思います。

サーバーは何をしているかというと

Pokedexを作ります。捕まえたポケモンが見れる。

すべてのポケモンを返していくようなものにしましょう
シンプルです

Getパスからポケモンを取ってきます。シンプルです。
Jsonライブラリを使っているので簡単にやってしまいます

ポケモンが下で定義されていませんでした

サーバー側はポケモンを返す。

リクエストボディをパースします。無ければBadRequest。そしてポケモンをリクエストから取る。JSON Parse は失敗することも有りますよね?do で try します。

パースして取れなければBadRequest、またパース自体に失敗してもBadRequest

ポケモンを追加して応答します

最低限以上になります。
試してみましょう


Fetchしてみます

初めの三匹が入っています。エキサイティングですね
でもこれでもまだ静的データをハンドリングしているだけです。実際にサーバーで何か実行したい。
Postでなにか捕まえたモノを送りたい

Postのレスポンスには何も戻ってきません。ステータスを出しただけで何も送ってないからです。
でも次に、フェッチすると、入っています!(3匹にさらにピカチューが帰ってきた)
いまはローカル環境のサーバーでやっているだけなので、これを本番環境にあげたい、「とりあえずリリースしようぜ!」

マーク・ザッカーバーグが、多分動くと思うからリリースしようぜ、と、直接の引用ではないが言っております。
Herokuでデプロイしてみましょう。SwfitEnvは必須ではないが便利です。あとは必須です。

自分の場合はこんな感じ

Heroku ブランチにPush

ご自身でやるときはもう少し早いと思います、デバッグモードでやれば
機能するプロダクション環境が出来たはずです。
先ほどと同じように、でもローカルホストではなくてHerokuでホストされています。

おっと

コミットしていませんでした

ビルド中に

ルーティングを書き直したいことがあるかもしれません。でも使えるものがあれば書き直す必要はありませんね
ライブラリを見てみました

Perfect:最も成熟している、セットアップが簡単、スタートがすぐ。この場で開発者の話を聞けると思います。
IBMがKituraを出しています。最もモジュラー化されています。とてもモジュール構成。でも25日前にうまれた赤ちゃん賞でもある
Vapor、私にとって最も直感的。私のコードが好きならこれが向いていると思います。
デモが出来たようです

DBライブラリは何が提供されているか
PostgreSQL、MySQL、SQLiteなど。Vaporはまだ足りないようです。調べてみてください。
本当に完璧にできていなくてもリリースした方がいいでしょうか。
みなさんのニーズ次第だと思います。作って壊したければどんどん出せば良いし。
2日前のセッションではまだGCDはLinuxに向けて存在しないということですが、どのようにハンドリングしていますか
リポジトリにはマージされたようだがこの段階ではまだ完成していなかった。どうやっているのか気になってみてみた。Perfectは自分のスレッドを管理している、Vaporも。コンカレンシーはまだ未完成、でもマージされたらいいと思います。この段階ではまだ至っていないという感じだと思います。
”QAに行くなら日本語もできるのでよろしくお願いします。”
Web APIをポケモンに例えるの分かりやすいね。 #trypokemonconf #tryswiftconf
— iyuto (@iyuto_) March 4, 2016
まさに!!
— ジャンボ (@jumbOS5) March 4, 2016
RT: Swift on RailsのSwiftonなんてのもあるようです。 https://t.co/NXr82IVP8f #tryswiftconf pic.twitter.com/oPk41bB0rW
Server Side Swiftのサービス一覧。スライドに紹介されていた。 #tryswiftconf https://t.co/kazwRuxZO1
— Hirohito Kato ⌘ (@hkato193) March 4, 2016
Perfect触ってみたくなった! #tryswiftconf
— haranicle (@haranicle) March 4, 2016
「"Swiftでサーバを書いてみよう" : "Soaring Swiftly - Server Side Swift." ~多分動くと思うから、リリースしようぜ!~ #tryswiftconf」をトゥギャりました。 https://t.co/FKaJ28F7mq
— トゥギャッター開発まとめ (@tg__dev) March 4, 2016
気に入った記事は はてなブックマーク
はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift
そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!
