読者です 読者をやめる 読者になる 読者になる

文字っぽいの。

文字を書いています。写真も混ざります。

開発合宿で熱海に行って、サーバサイドSwiftでWebアプリを作りました。

f:id:FromAtom:20170212193157j:plain

fromatom.hatenablog.com

これの旅行記です。熱海でもくもくとサーバサイドSwiftをいじって、Webアプリを作ってきました。

開発成果

見たい映画やアニメがどのサービスで配信しているか探せるWebアプリ『sansa』を作りました。

f:id:FromAtom:20170212175628p:plain

例えば iron で検索するとこうやって出てくる。

f:id:FromAtom:20170212175756p:plain

詳細画面に飛ぶと

f:id:FromAtom:20170212175808p:plain

こうなっていて、下にあるHuluとかを押すとHuluの視聴ページに飛ぶ。ただし、USリージョン(かつ英語)しか対応してないので、日本人には使いにくい。この辺については後述。

背景

あるアニメや映画を見たい時に、「さて、いったいどのサービスで見られるんじゃろ?」となることが多くて、それを解決したかった。僕はAmazon プライムビデオとHuluを契約してるんだけど、例えば「けものフレンズ」が観たいと思った時に、両方のサービスにログインして検索をする必要があって面倒だった。そもそもなかったときの徒労感がヤバイ

技術的な話

このWebアプリはHTMLとCSS以外はすべてSwiftで書かれています。そうですServer Side Swiftです。みなさんはSwiftですか?

github.com

フレームワークkitura、テンプレートエンジンにStencilを利用している。本腰を入れてServer Side Swiftで開発した感想としては、とにかくつらい。つらさを箇条書しておく。

  • JSやCSSなどの静的ファイルを配信する方法がわからない
    • 情報がなさすぎてたどり着くまで大変だった
  • APIKitやDecodableなどのiOSで手慣れたライブラリが使えない
    • APIKitはなぜか通信が走らない
      • Kituraとの相性がわるい?Linux対応してない?
    • Decodableは動いたけどHeroku上で動かない
      • Linux対応してないってP-R見てわかった
  • 新しいライブラリを追加する度に swift package generate-xcodeproj を叩かないとXcode上でライブラリが認識されない
    • なんでやねん
    • 簡単なMakefileを作って解決した

こんな感じで入れたライブラリが軒並み動かなくて、全部自分でAPIClientやJSONのObject Mappingまわりを自作した。成果発表の5時間前にDecodableがHerokuで動かないことが分かって、全部のモデルを書き換えたのはさすがに疲れた。

現状の、Server Side SwiftはJSONを生成して返す程度なら良さそう。ただ、プロダクションレベルで導入するのは、まだ待ったほうが良いなという印象。Swiftは、Swift3でようやくベータ版が終わってver1.0.0なった言語だと思う。ようやくLinuxでもへんてこなツールや環境変数を使わなくても開発ができるようになったので、1年後ぐらいには強くなってそうだなという気持ちです。

また、映画の情報は Guidebox API | A Free Movie, TV and Video APIというAPIを利用した。無料で使えて便利なんだけど、US Regionしかまだデータが揃ってないらしい。JPでアクセスすると「手伝ってくれる人募集!」って書いてあってなるほどってなった。

宿

[熱海 開発合宿] で検索したけど、微妙そうだったり、部屋の空きがなかった。というか[熱海 開発合宿]で検索するといろんな会社の開発ブログみたいなのがヒットするんだけど、みんな同じ場所を利用していて新規性皆無で辟易とした。新規開拓したいので、じゃらんと一休でえっさほいさ検索した。

探した時のポイントは、

  • 予算は1泊1万円程度
  • そこそこ高速な有線LANか無線LANが部屋にある
    • Free Wi-Fiがロビーのみにあるってのが結構多い
  • 朝晩のご飯が部屋食ではない
    • 開発合宿は延長コードバトルになるので部屋食は大変
  • お風呂の利用可能時間が長い
    • 夜10時に閉まるとかだと厳しい

という感じ。手順としては最初にじゃらんでいくつか良さそうな宿をみつくろっておいて、全部の宿に電話して「部屋にネットあります?Youtubeが快適に見られますか?」と聞いていくといい感じになる。最終的に、チェーンなホテルだけどココにした。

www.livemax-resort.com

ウェルカムドリンクとしてコーヒーが飲み放題で、ガブガブ飲んでいた。あと、チェックアウトを1部屋1000円で12時にできるのが嬉しい。開発合宿の最終日は疲れ切っているし、のんびりしていたいのでとても良い。

しおり

事前にDropbox Paperでしおりを作って配布しておいた。持ち物や宿情報とか、宿でXcodeのインストールをしないなど基本的なことをまとめてある。

f:id:FromAtom:20170212181633p:plain

開発環境

f:id:FromAtom:20170212193316j:plain

窓際を陣取って、こういう風景を見ながら、ワインを飲みながらコードを書いていた。高等遊民感があってとても良かった。

よくあるご飯で安心。ソフトドリンクが飲み放題で良かった。朝からメロンソーダやコーラが飲めて脳みそがクラクラする。 f:id:FromAtom:20170212182256j:plain f:id:FromAtom:20170212182228j:plain

発表会

部屋に大きいディスプレイ(一般人はテレビと呼ぶ)があったので、それにつなげて発表会をした。2日目の24時に発表開始だったんだけど、それまでになんとか動くものを作ろうとみんな必死になっていて良さがあった。

f:id:FromAtom:20170210003435j:plain

ノウハウ

連絡手段

今回は8人で参加したんですが、連絡手段はSlackにしました。新しくTeamを作って、slackinをHerokuにデプロイして招待した。こういう短期的なやつでも面倒くさがらずにTeam作ったほうが良いと思う。会社でSlackを使っている場合、そこで新しくchannelを作ろうと考えがちだけど、そうすると仕事の通知も見ることになって集中できない。あと、使い捨てのWebHookやBotも気軽に入れられるし、Teamごと消せばいいので後処理も楽ちん。

f:id:FromAtom:20170212183745p:plain

けものフレンズメソッドによる煽りも飛び交う、実に平和なSlackでした。

持ち物

電源タップとAnkerのUSB充電器(5口とかのやつ)が重要。後は、家で使っている無線LANルータを引っこ抜いて持ってくと良い。

あとは、こういうのを持っていって、Jazzとかけものフレンズとかあいまいみーを流しておくと良い。

今回得た知見として、天井から音楽を流すとカフェっぽくなって集中しやすいというのがある。

泊数

1泊だと全然時間無くてつらいし、3泊だとだれるので、2泊3日がちょうどよい。

熱海

熱海、開発合宿に向いて無さそう。日帰り湯で他の宿行こうかなって思っていたけど、すごい強気の値段設定だし、宿と宿の間が離れていてつらい。『湯巡り』コンテンツがないと厳しい。あと、観光目的でブラブラ歩いても何もないのがちょっとつらい。これはたぶん開発合宿の2日前に京都に旅行に行っていたので、相対評価になっている気がする。ただ、干物や鮮魚は美味しかったし、今回利用したホテルは良かった。

海が見たいという理由と、都内からアクセスしやすいという理由で選んだけど、おそらく望んで再訪することはないと思う。次は湯田中渋温泉郷とか、白骨温泉に行こうかな。

まとめ

  • 熱海で2泊3日の開発合宿をしました
  • サーバサイドSwiftでWebアプリを作りました
  • 開発合宿は技術的な疑問を雑に聞けるので良いですね
  • 今回泊まったホテルは便利で良かった
  • たーのしー!