先日iOSオールスターズ2に登壇させていただきました。

スクリーンショット 2016 11 23 10 34 52

画像: https://eventdots.jp/event/602872

なんのネタにしようかと思っていたのですが、転職してRxSwiftをフルで使っているので、実践で使ってみてどうなの?という内容でお話させていただきました。

トップバッターとして発表させていただいたのですが、オールスターズということで他の発表者のみなさんのお話がとても面白くて「あれ、オレ大丈夫だったかな」と少し不安になりました。

聞いていて飽きない、実践的な発表ばかりだったので、自分の発表も含めてまとめてみました。

RxSwift in Practice

発表順はくじ引きで直前に決まりました。他の人の発表を落ち着いて聞くことができるのでトップバッターが良いな〜と思っていたので嬉しかったです。

まずは自分の発表のまとめから。

スライドはこちら。

今の会社に転職するまでRxSwiftを本格的に使ったことはなく、概念とかちょっとしたサンプルコードを触ったりして「ふ〜ん。なるほどね。よく分かんないな。」という感じでした。

いまはガッツリ使っていてよく分からないと思っていた部分が分かってきた気がするので、今回はそのあたりを整理して発表してみました。

よくある入力されたテキストをUILabelに反映するとか、バリデーションとかはよく見るパターンなので、テキストの扱い以外かつ実践的な内容にしようと思って自分がリリースしたアプリを書き換える内容にしてみました。

スライドで言うと、

この辺の実装するときの手順みたいなところに変化が表れて来るんじゃないかと思っています。

Rxは時間の流れに伴って変化する値の扱いを楽にしてくれる点が良いと思っていて、それはiOSで言うとユーザーの操作によって変更される画面の状態などが該当するのではないかと思います。

本当はViewModelに処理を移してテストまで行うところまでやってみたかったんですが、資料作成の時間がなかったのと、僕のアプリの既存のコードの問題でそこに至りませんでした。また何かの機会があればその時にでも。

VC「もしかして…」Model「私たち…」「「入れ替わってるー!?」」を前前前世から防ぐ方法

ハッキリと言ってしまうとLiveで見てたときは面白すぎて内容が何も頭に入ってきませんでしたw

資料を見返してみると、ViewControllerがModelの行うべきことをやっちゃうことはあるけどModelとは入れ替わってはないのでは?というマジレスはさておき、面白いのはもちろんなんですが、よくまとまっているな〜と思いました。

たぶん最初ガツガツ書いてるときは責務とかよりも動かすものを作るのが大事だと思っているので、それはそれで良いと思っているのですが、そのうちアプリの保守性が大事なフェーズに突入してくると思います。そんなときに”クリーンアーキテクチャ”という素晴らしいワードを目にすることになると思います。

未成熟なチームで起こりがちだな〜と思う問題について書かれていてとても参考になります。これからチーム作るけどメンバーの経験値が低いようなチームはなんとなくでも目を通しておくと良いのではないかと思います。

Type-safe URL Routing in Swift

try! Swiftのスピーカーでもあり、iOSDC Japan 2016でベストトーク賞1位にもなった稲見さんのお話です。

ルーティング処理についてです。

最近だとクライアント側でもルーティング処理を書いたりすると思います。

アプリ内の離れた場所から離れた場所の画面を開きたい!とかそんな場合にカスタムURLスキームをアプリ内で呼び出してある画面を表示する、とかそんな感じです。

アプリカティブとかは齧ったくらいで下手なことを言いたくないので端折りますが、indirectなenumを使ってルーティング処理を実現する稲見さんの発想力に驚かされました。

Using PDF in iOS

PDFについてのふか〜いお話でした。

最近はアプリのアセットとしてもPDFを使うようになってますます目にするようになりました。

以前PDFをアプリに組み込むことがあったのですが、そのときは単にPDFの表示を行いたいだけだったのでM13PDFKitを使ったりしましたが、PDFの仕様などについては調べたことがありませんでした。

CoreGraphicの座標からUIViewの座標への変換、UIScrollViewでズームした際の問題などなどPDFを扱う際のtipsについて色々とご紹介されていました。

ZPDFというSwiftベースのライブラリを開発中とのことです。

「このセッションで一番大事なことはPDFで困ったら@codelynxに聞いてください」とのことでしたw

Xcode8で開発はどうかわったのか

iOSDC Japan 2016でベストトーク賞3位の@dealforestさんの発表でした。

Xcode8で強化されたデバッグ機能の話でした。

View Debuggingの強化や、Memory Graph Debugging、Automatic Signingなどの新しい機能について解説されていました。

Automatic Signingのハマりどころについても解説されていましたが、きちんと対処方法についても説明されていてさすがだな〜という感じでした。

すっかり存在を忘れていたXcode Extensionについても触れていました。現時点ではApp StoreからXcode Extensionがあるかどうかは分からないようです。

tib/awesome-xcode-extensionsに一覧があるとのことです(人の手で追加されているらしい…)。

探してみたらよく使うXAlignが合ったので見てみたらXcode Extension用の説明がREADMEに追加されていました。

これから始めるProtocol Buffers導入

@kyoheig3さんのProtocol Buffersの紹介。

この話があったときにProtocol Buffersについて発表しようかなと思っていたので、個人的にはこれが一番聞きたかった内容でした。

発表の中にもありましたが、Appleがapple/swift-protobufを公開したときにJSONをレガシーにしようとしているのではないかと何人かがtwitterで呟いて興味がわきました。

Goなどが先行して対応していて、Swiftもalexeyxo/protobuf-swiftがすでにありましたが、Appleがapple/swift-protobufを公開して話題になったという感じです。

バイナリで通信するので安全で高速、データ量も抑えられるとのことです。.protoを定義して上記ライブラリを使ってコンパイルすると、.swiftファイルが生成されるみたいです。詳しい手順はスライドに書かれています。

バイナリから直に変換を行うと、デシリアライズするときにどこで失敗したのかわからなくなるのではないかと思っていたのですが、JSONシリアライゼーションもサポートされていて、バイナリ→JSONに変換できるとのことで、これなら問題なさそうです。

まだベータなので気をつけましょうとのことですが、早く使ってみたいですね。

DIを前提にしたiOSアプリの設計

@yonekawaさんのDIについてのお話。

SwiftになってからDIは普通に使うようになったけど、まだDI Containerを使ったことがなかったので勉強になりました。

次の日、はてブでもこのスライドが一番バズっていたので、iOSでみんなが求めている内容だったのではないかと思います。

Constructor Injectionを基本的に使って、オブジェクトの生成を管理できないもの、例えばprepareForSegueでStoryboardが生成したインスタンスに何かDIを行いたい場合などはProperty Injectionを使うことを推奨していました。

DIフレームワークの比較についても詳細に解説されています。

Swiftらしい表現を目指そう

トリは@es_kumagaiさん。

いつも楽しそうに発表されていて、こっちが楽しくなります。

仕事でコードを書いているとSwiftらしい表現ができているのか不安になることがあります。

変換イニシャライザに引数名がないのはなんでだろうか??と思っていたんですが、その辺りについても解説されていてさすがでした。

「型の”性質”に着目する」という言葉でProtocol Orientedをすごく丁寧に解説していました。

それから「あ、これは…」と思ったのがこの部分。

CustomStringConvertibleを使うことでenumのrawValueを使わずに文字列の表現が行えること、自分のコードを振り返ってみてこれを使っていればもっと楽になった場面があっただろうな〜と反省しました。

これたぶんベストプラクティスなので、今後は積極的にCustomStringConvertibleを使っていこうと思います。

QAコーナー&懇親会

最後にQAコーナーと懇親会が開かれました。

QAコーナーでは「なんでiOSエンジニアなの?」とか「Swift3移行について」などの質問が挙がりました。他の発表者のバックグラウンドを聞けたりして、こういうことを話す機会ってあまりないので面白かったです。

懇親会でもお酒を飲みながらRxSwiftについて話をしたり、開発体制などについて参加者の皆さんとお話できてとても楽しかったです。

まとめ

2016年も終わりに近づいてきて、今年話題になったiOS関連のワードを多く目にした勉強会でした。Reactive Extension、クリーンアーキテクチャ、DI、Protocol Buffers、Swift3、Functional Programmingなどなど。

そういえば今年はtry! Swiftがあって、iOSDCがあってと日本でiOS関連の大規模なカンファレンスが立ち上がった年で、だからこの辺のワードをよく目にしたのかもしれません。

最近勉強会にあんまり参加していなくて2ヶ月ぶりくらいの発表だったんですが、資料を準備してて楽しかったですし、色んなお話も聞けてすごく面白かったです。

アウトプットしていく中で得られるものがたくさんあるな〜ってことを再認識しました。