Ayaka Nonaka
AyakaはVenmoのiOSリードで最近はSwiftばかり書いています。iOS 4の頃からiOS開発を始め、テイラー・スウィフトの曲を聴きながらSwiftを書くのが大好きです。これまでSwiftにおける自然言語処理や、スクリプティング、VenmoアプリをSwiftで書き直したことなどをテーマに講演を行いました。東京出身なので、東京のカンファレンスで話せることがとても楽しみです!「宜しくお願いします。」
Gary BernhardtさんのBoundariesという講演 https://www.destroyallsoftware.com/talks/boundaries) をご存知でしょうか。関数型プログラミングの講演ではよく言及されています。私は数年前に初めてこの講演を聴いたとき、「Functional Core, Imperative Shell」を理論的には理解できたのですが、実際の場面でにどのようにこの概念を適用できるのかよく分かりませんでした。しかし、毎日少しずつSwiftを書いているうちに、この概念は関数型プログラミングだけではなく、良いエンジニアリングに一般的に適用できることがわかってきました。今回は「Boundaries」をどのように利用して、より良い、より安全な、そして将来性のあるSwiftを書くことができるのかを、いくつかの事例を紹介しながらお話しします。「Boundaries」をご覧になったことがなくても私の話をご理解いただけると思いますが、もしお時間があればぜひ一度ご覧ください。すばらしい講演です。
コードの芯をファンクショナルにする
すべてをファンクショナルにすることは出来ない。UIKitを使うと副作用だらけ。 こんなイメージ。
私もその立場に居ました。
"Functional Core, Imperative Shell"をどう活用できるか分からないでいました。 でもそれでよかった。まず感覚を覚えて、使えるかな?と思った時に、使えば良い。 少しずつコードを書いているうちに、エンジニアリング全体に適用できると思うようになりました。幾つかの事例を紹介します。 こんなアプリで好きなストーリーを選択してコメントを見れます。 機能追加が必要に。Push通知の機能。StoryboardからViewControllerを表示したり。
サイドプロジェクトで新しいアプリを作っています。新しいアイディアを試す機会が増えました。その一つが
ViewControllerは他のVCを知らないということです。 コーディネーターを使うとアプリは木構造になる。Search機能を足すのも簡単。コーディネーターを足すだけ。 ログインも簡単。
サインアップも同じようにたせます。このコーディネーターパターン気に入ってます アプリのフロー全体をコーディネータに任せるとこんな感じ
抽象化
アブストラクションはソフトウェアエンジニアとして結構始めに習うコンセプトです。インターフェースが綺麗というイメージが有りますね?でもSwiftでインターフェースを抽象化するだけでは足りないということが明らかになって来ました。
アーキテクチャの何処がイミュータブル、堅実なパターンに適しているかを把握するのが大切です。
そして同じようにどの部分がネットワーク硬度のように流動的なパターンに適しているかを把握するのが大切です。
鍵は堅実さと流動さのバランス、境界(Boundary)をいつけること
そうすることで安全で将来性のあるコードが書ける (機材の都合で逆になっているだけです)
2つのコンセプトの紹介がありました。新しいコードに足すのは簡単かもしれないが既存に適用するのはどうしたら良い?
コーディネーターパターンは新しいコードベースで使ったが、いいと思ったから既存のアプリでも使うようにしました。
コーディネーターパターンについて質問。現実のアプリでPushとPopだけじゃなくて、関係ない画面でボタン押したら、ナビゲーションコントローラーのスタックが入れ替わるようなときは、VCの互いの感心を排除できるというメリットはなくなるかと思うがどのように対処するか
それは多分、コード見てみたいですね、やったことないです。
そういう仕様は避けろ、ということですね
(会場笑)
コーディネータパターンはバイパーで言うワイヤーフレームかなと思った。それでは、ワイヤーフレーム毎に参照を持っていて、根本まで通知して根本で差し替えるというパターンになると思います。
↑という意見
Storyboardとの関係はどうなるのかなと思いました
私はStoryboard使いません。ViewControllerが互いに関心をもつことになってしまう
バイパーでワイヤーフレーム使っていてStoryboard使わないかと思ったが独自にライブラリを作って参照をなくしつつStoryboardを利用するようにしている
あとで見せてください
Githubに公開しています
今の質問で出ていたライブラリーはこれですね https://t.co/n8rdiHro74 #tryswiftconf
— Syo Ikeda / いけしょー (@ikesyo) 2016年3月3日
続きはQAセッションでお願いします。
このセッションもタイトル通り実践的だし Swift に限った話じゃないものでいい話。 #tryswiftconf
— stewie (@griffin_stewie) 2016年3月3日
試してみようと思ったのは間違いない! #tryswiftconf
— Tsuyoshi Yonemoto (@yoneapp) 2016年3月3日
後でQAルーム見に行った方が面白そうだ #tryswiftconf
— iida (@iida_0213) 2016年3月3日
「より良くより安全な将来性のあるSwiftコードを書こう! Boundaries実践入門 #tryswiftconf」をトゥギャりました。 https://t.co/hHdhEogrzv
— トゥギャッター開発まとめ (@tg__dev) 2016年3月3日
気に入った記事は はてなブックマーク
はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift
そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!