Osaka Mix Leap Study #11 に参加しました #mixleap

かなり前ですが、参加して懇親会 LT してきました。

yahoo-osaka.connpass.com

普段 Kotlin はなかなか触らないので、Kotlin の話も一緒に聞けて勉強になりました。 Swift の ownership も把握しそこねていたので良い機会でした。

懇親会 LT 枠があったので発表してきました。
僕も場も 🍻 していたので、もっと勢い重視の方がよかったかもしれない。

Cocoa勉強会関西で「アプリのお問い合わせ機能をサーバーレスでつくる Firebase 編」を発表しました #cocoa_kansai

ずいぶんと時間が経ってしまいましたが…
第77回 Cocoa勉強会関西で、「アプリのお問い合わせ機能をサーバーレスでつくる Firebase 編」という発表をしました。

cocoa-kansai.connpass.com

内容

モバイルアプリにしばしばあるお問い合わせ機能 (フィードバックフォームなど) について、サーバレスで実現できないかと思い調べた内容を発表しました。
iOS だと通常は MFMailComposeViewController を使ったり、自サービスの Web API へポストしたりすると思います。

今回は Firebase での実現方法を検討しました。
Firestore と Cloud Functions for Firebase を利用しています。
(Firestore でなく Firebase Realtime Database でも実現できます)
雑ですがサンプルコードもあります。

github.com

この構成はまだプロダクションには乗せられていないので、しばらくやってみてからまたアウトプットしたいですね…

補足

いくつかご質問を頂きましたが、発表中にちゃんとフォローできなかったのでここで補足します。

インターネットにつながっていない場合はどうなる?

オフラインでの永続性を設定している場合は、オンラインになったときに自動的に送信されるようになります。

オフライン データを有効にする (Firestore)

端末がオンラインに戻ると、アプリがローカルで行った変更とリモートの Cloud Firestore に保存されたデータが同期されます。

Firestore ではデフォルトだとこの設定が有効なため、オンラインに戻ると自動的に送信されます。

iOS のオフライン機能 (Realtime Database)

Realtime Database では isPersistenceEnabled オプションを true に設定すると利用できます。

データの内容は管理画面で見れる?

f:id:urouro_n:20180423211245p:plain

Firebase のダッシュボードで、このような形で見ることができます。

iOSDC Japan 2017 に参加してきました #iosdc

iOSDC Japan 2017 に参加してきました。 すさまじく体験の高いイベントでした。ありがとうございました。

よかった

発表者の方や企業の方との距離が近く、普段聞けないような話などがしやすかったです。
特に企業ブースでは、企業さんの開発シーンとかプロダクトのこととか、普段気になってることが気軽に聞けました。
発表者の方ともAsk the speakerコーナーでコミュニケーションできたりして、さまざまなお話ができて良かったです。

iOSのカンファレンスとはいえ、トークの幅が広く、多彩な情報が得られました。
他言語と絡んだ話やチーム開発に関する話、FirebaseのようなmBaaSについてなど、iOSアプリそのものだけにとどまらず、関連する様々な知見が行き交っていました。
おそらくiOSアプリの経験が浅い方も楽しめたのかなと思いますし、モバイルアプリの開発もずいぶんとジャンルが多様になってきたな、という体感がありました。

個人的におもしろかった発表

Swaggerで始めるAPI定義管理とコードジェネレート

Swagger Codegenがかなり良さそうで、早速実戦投入してみるつもりです。
僕のメインの守備範囲がiOSとAPI開発なので、APIの設計と同時にアプリを作ることも多く、開発効率を上げられそうな感じがしています。

具体例とクイズで学ぶ、Swiftの4種類のエラーの使い分け

Swiftにおけるエラーの種類と、クイズを通してなぜそのエラーを選んだかを解説されていて、参考になりました。

Swift (iOSアプリ) は他の言語から来ている開発者も多いと思っていて、来る前の言語によってエラー設計が分かれる印象を持っています。
return nil する設計に偏ってしまったり、throwsする設計に偏ったり…など(僕はPHP 5.3-やJSを経てiOSに入ったので、 return nil したり fatalError したりすることが多いので反省)
最適な設計は、言語のスタンダードに寄り添っているのももちろんですが、チームの文化に寄り添っているかも重要かと思いますし、そのためのヒントを得られる発表だったと思います。

RxSwift の Observable とは何か

僕の場合最近はどのプロダクトでもRxSwiftをほぼ確実に使うのですが、なんとなく理解してなんとなく使っている側面が強く、この発表で理解をしなおすことができました。
発表内容が詳しくあとでもう一度資料を見直すつもりです。30分では足りずもっと聞きたい内容でした。

ディープリンクの設計と実装

とりわけUniversal Linksは手探りで実装してしまっていることも多く、知見が整理されてまとまっていてよかったです。
ナビゲーション周りの再現は特に悩むことが多くて、そのあたりにも触れられていて参考になりました。

結婚式を支えた技術 Firebaseを活用したサーバレスiOSアプリケーション開発

プログラマなら結婚式でプロダクトを披露するのはいいなと常々思っていて、それを実践されていてなるほどすごいと思いました。
ちなみに近頃Firebaseを使ったアプリにいくつか携わっていて、タイムラインの実装などで悩みポイントがあったのでAsk the speakerで質問させて頂いて、ヒントを得ることができました。ありがとうございました。

サポート効率を上げるためのロギング環境構築

どういう情報をログに残すか/そもそもどういう情報が取れるかは、現場の勘所によるところも多いと思っていて、そのあたりの知見が得られました。
ログは「最低限だけ取って、最悪がんばって状況再現する or 予想して対処して様子見」というのができるっちゃできるのでログをあまり残していないケースもあります。が、やはりヒントは多い方が開発的にもユーザサポート的にも良いので、そのあたりをどうしているのか参考になりました。

その他

ノベルティ

f:id:urouro_n:20170915230720j:plain

カンファレンスあまり行ったことなかったですが、こんなにノベルティ頂けるものなんでしょうか。すさまじい。

スポンサー紹介


iOSDC Japan 2017 スポンサー紹介

気持ち