SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

イベントレポート

ReactorKitの生みの親も登壇した「ReactorKit Meetup Japan」レポート

「try! ReactorKit」Satoshi Hachiya, RCUBE

 八谷賢氏で「try! ReactorKit」というタイトルでの発表です。八谷氏は、パンケーキさんという名前でも知られ、「try! Swift」の運営と、Swift Package Managerのコントリビュートもしています。

 この発表では八谷氏がReactorKitを使ってみて、つまづいた点をまとめています。まだReactorKitを利用していない開発者にとって、非常にありがたい内容です。

 八谷氏は「try! Swift NYC 2017」に運営として参加していましたが、その際すでにReactorKitの作者であるJeon氏と会っていたと振り返りました。また、最近だとWWDC 2018(の開催後)に偶然出会い、話をしたそうです。実際にReactorKitに触れたのはその後のことになります。そのときに感じた印象やつまづいた点について紹介がありました。

 ReactorKitについて、ドキュメントが非常に読みやすく、サンプルコードが豊富にあり、いつでも始められることを強調しました。サンプルコードについては、ReactorKitのREADMEの最後にリンク一覧があります。また、菅原氏が書かれた「ReactorKitを学ぶ」シリーズの記事も挙げられ、初学者向けの日本語ドキュメントが豊富にある点についても触れられました。

 では、早速導入から始めます。CocoaPodsでインストールします。注意点としては、オフィシャルにCarthage対応されていないことが挙げられます。

 次に、導入したいView Controllerに対応するReactorを作成します。最初に、Actionを書きます。ActionはEnumなのでcaseを追加していきます。今回は、増加と減少なので、increaseとdecreaseを追加します。

 次に、Mutationを書きます。こちらもEnumで、変化の仕方を記述します。今回は、値を増やすか・減らすかなので、increaseValueとdecreaseValueを追加します。

 次にStateです。StateはStructで必要なプロパティを宣言します。今回は値の増減なので単純にvalueというIntのプロパティを宣言します。

 次にReactorのプロパティとしてinitialStateを初期化します。これは状態の初期値を表します。valueは0から始めたいのでvalueに0をセットしてinitalStateを初期化します。

 続いてView Controllerです。View ControllerにViewというプロトコルを準拠させ、bind関数を書きます。このbind関数でボタンのタップのObservableをAction.increaseにマップしてそれをreactor.actionにバインドします。これで、インタラクションからアクションを発行することができました。非常に簡単ですね。

 ここで八谷氏は、つまづいた具体的ケースについて紹介しました。

 まず、「アクションが発行されない」問題です。実は今までの流れで抜けているパートがあります。それは、「View Controllerに作成したReactorをセットする」パートです。ここで重要なのは、そのView Controllerの外側でセットする点です。

Fig. 5.1 ReactorKit READMEではReactorをViewの外から設定することを説明している(登壇資料:page 26より引用)
Fig. 5.1 ReactorKit READMEではReactorをViewの外から設定することを説明している(登壇資料:page 26より引用)

 次につまづいた点は、View Controllerが持つCollection Viewのコンテントオフセットからアクションを発行する際に起きたランタイムエラーです。これはRxCocoaでのエラーで、そのView ControllerをUICollectionViewDelegateに準拠させる必要があったそうです。RxSwiftやRxCocoaを初めて利用するケースを含め、こういった情報は非常に役立ちます。

 さて、もう一度振り返り、「一方向のデータフロー」を体感します。ViewでボタンのtapからAction.increaseがReactorに伝搬します。ActionからMutationに変換します。そして最後にMutationからStateに変換し、ViewでStateをラベルのテキストに反映したら終了です。これでボタンを押すと、1増えて表示されるということが実現できました。

まとめ

 八谷氏は全体としてコードが読みやすくなる点を指摘しつつ、特に以下の特徴を挙げていました。

  • 責務を分けやすい
  • Viewの状態を簡単に管理できる
  • データフローを追いやすい

 ここまで読んで「簡単そう!」と感じた方、ぜひ「try! ReactorKit」しましょう。

次のページ
「Test-Driven-Development with ReactorKit in StyleShare」Wooseong Kim, StyleShare

この記事は参考になりましたか?

イベントレポート連載記事一覧

もっと読む

この記事の著者

永田 健人(ウォンテッドリー株式会社)(ナガタ ケント)

 ソフトウェアエンジニア。ウォンテッドリー株式会社所属。Wantedly Visitを通して、より多くの人と企業が「気軽に出会う体験」をつくっています。サーバサイドはRails、フロントはReact/Redux、iOSでSwiftをメインに開発をしています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10971 2018/07/25 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー