Caesar Wirth
CyberAgentのソフトウェアエンジニアです。これまでEコマース、SNS、動画ストリーミングなど多くのiOSアプリを開発してきました。Swiftがクロスプラットフォームであるように、Androidアプリやバックエンドサーバのコードも書いてます。コードを書いてない時は、ハイキングやボルダリングをしたり、東京近郊のおいしいタコライスを探し回ってます!
多くのMacやiOSアプリはバックエンドのサーバと通信します。 今やSwiftはオープンソース化され、アプリ開発しているときと同じ言語でバックエンドの実装を行えるようになりました。サーバサイドSwiftを初める方法をお話しします。
おはようございます
多くの方々は私がスケジュールに載っていなかったと思うかもしれません。
数日前新しいアプリを作り、try! Swift などカンファレンスのオーガナイザをしています。
ミニマルなサーバーサイドSwiftアプリを作りましょう
クライアントサイドでリクエストを做る時のコードはこのようなものですね
Pokedexからポケモンを取ってくると。
サーバーサイドをする時、他ではどうしているのかを参考にできると思います。
Node
でもRubyやJSを書きたい訳ではありませんね?誰かSwift書きたくないといつか言っていましたが(笑い)
Swiftの利点は方があることです。
クライアントサイドと変わりません。
基本値なものだけ書いていますが、基本的型があれば何をサポートしているか分かる。
サーバータイプを定義する
データのIn /Out、サーバーは関数のようなものです。
ソケットをリスニングする、コネクションを開く、スレッドを起動する、Lowレベルの作業したくないことがいっぱい。
そこでフレームワークが使えます
アプリの実装からこういった事柄を切り離すことが出来ます。
一つの関数になりました。
実行するとレスポンスが帰ってきます。
もうすこしRoutingの面倒を見る必要があります。一つのサーバータイプでは対処できません。
メンテナンス可能でシンタックスを使えるようにしたい。
ルーターを作っていきます。
ハンドルをしていきます。ルーティングを登録して、ハンドラーが集まってきたらハンドルファンクションも作れます。
半トラータイプというのはThrowもできます。リクエスト失敗に500、のエラーを返すことも可能。
リクエストを投げて存在しなければエラーを投げる。エラーはもう一つのレスポンスタイプになる。
ハンドルファンクションはルーターと同じですね?
サーバーにファンク書なリティを追加していきたいと思います。
サーバーは何をしているかというと
Pokedexを作ります。捕まえたポケモンが見れる。
すべてのポケモンを返していくようなものにしましょう
シンプルです
Getパスからポケモンを取ってきます。シンプルです。
Jsonライブラリを使っているので簡単にやってしまいます
ポケモンが下で定義されていませんでした
サーバー側はポケモンを返す。
リクエストボディをパースします。無ければBadRequest。そしてポケモンをリクエストから取る。JsonParseは失敗することも有りますよね?do で try します。
パースして取れなければBad、パース失敗したらBad
ポケモンを追加して応答します
最低限以上になります。
試してみましょう
Fetchしてみます
初めの三匹が入っています。エキサイティングですね
でもこれでもまだ静的データをハンドリングしているだけです。実際にサーバーで何か実行したい。
Postでなにか捕まえたモノを送りたい
何も戻ってきません。ステータスを出しただけで何も送ってないからです
でも次にフェッチすると、入っています!(3匹にさらにピカチューが帰ってきた)
ローカルでやっているだけなので本番環境にあげたい、「とりあえずリリースしようぜ!」
マーク・ザッカーバーグが、多分動くと思うからリリースしようぜ、と直接引用ではないが行っております。
Herokuでデプロイしてみましょう。SwfitEnvは必須ではないが便利です。
自分のばあいはこんな感じ
へろくブランチにPush
ご自身でやるときはもう少し早いと思います、デバッグモードでやれば
機能するプロダクション環境が出来たはずです。
先ほどと同じように、でもローカルホストではなくてHerokuでホストされています。
おっと
コミットしてない
ビルド中に
ルーティングを書き直したいことがあるかもしれません。でも使えるものがあれば書き直す必要はありませんね
ライブラリを見てみました
Perfect:最も成熟している、セットアップが簡単、スタートがすぐ。この場で開発者の話を聞けると思います。
IBMがKituraを出しています。最もモジュラー化されています。とてもモジュール更生。でも25日前にうまれた赤ちゃん賞でもある
Vapor、私にとって最も直感的。私のコードが好きならこれが向いていると思います。
デモが出来たようです
DBライブラリは何が提供されているか
PostgreSQL、MySQL、SQLiteなど。Vaporはまだ足りないようです。調べてみてください。
本当に完璧にできていなくてもリリースした方がいいでしょうか。
みなさんのニーズ次第だと思います。作って壊したければどんどん出せば良いし。
2日前のセッションではまだGCDはLinuxに向けて存在しないということですが、どのようにハンドリングしていますか
リポジトリにはマージされたようだがこの段階ではまだ完成していなかった。どうやっているのか気になってみてみた。Perfectは自分のスレッドを管理している、Vaporも。コンカレンシーはまだ未完成、でもマージされたらいいと思います。この段階ではまだ至っていないという感じだと思います。
”QAに行くなら日本語もできるのでよろしくお願いします。”
Web APIをポケモンに例えるの分かりやすいね。 #trypokemonconf #tryswiftconf
— iyuto (@iyuto_) 2016年3月4日
まさに!!
— ジャンボ (@jumbOS5) 2016年3月4日
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) 2016年3月4日
Perfect触ってみたくなった! #tryswiftconf
— haranicle (@haranicle) 2016年3月4日
「"Swiftでサーバを書いてみよう" : "Soaring Swiftly - Server Side Swift." ~多分動くと思うから、リリースしようぜ!~ #tryswiftconf」をトゥギャりました。 https://t.co/FKaJ28F7mq
— トゥギャッター開発まとめ (@tg__dev) 2016年3月4日
気に入った記事は はてなブックマーク
はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift
そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!