採択 2021/09/18 11:30〜 Track E レギュラートーク(40分)

React Nativeにおける状態管理サバイバルガイド iOSDC Japan 2021

22
kfurumiya 古都こと kfurumiya

エンジニアに「状態管理うまくいってますか」という言葉を投げつけるのは、心に深い傷を刻む結果になると一般に知られています。

宣言的UIの流行により、GUIアプリケーションにおける支配者は状態(データ)となり、表示コンポーネントは状態の落とす影に過ぎない存在となりました。これにより「開発者は状態管理だけをうまくやればいい」という仕組みが出来上がるのですが、我々は次の現実に直面することになります。そもそも状態管理をうまくできない、と。

私がウェブ技術を17年間触れてきた中で、状態管理というのは最も難しい技術に分類されると感じています。そしてウェブ技術をベースにしているReact Nativeではその問題が直撃します。

密結合にすると変更に対して硬直化する、疎結合にすると流れが把握できなくなる、綺麗にするために状態管理ライブラリを入れたのに逆に散らかってきた、公式サイトに書いてある方法でやっても改善しない、ベストプラクティスを実践しているはずなのに結果が出ない。何も思い通りにならない。チームが技術に振り回されてる気がする。状態管理だけうまくいけば開発はスムーズにいくのに、状態管理ができない!

実際に状態管理の設計に取り組むと「管理と言いつつもほとんどの状態は管理できない場所にある」ことに気づきます。HTTP通信、デバイスのセンサ、回線の状況。つまり状態管理というのは、根本的に管理できないものを管理する技術でもあります。

このトークでは、そもそも状態とは何なのかという基本的なところから、状態をいかにコントロールして、アンコントローラブルな状態に対してどう立ち向かえばいいのかという実践的なところまで、私が今まで開発に携わってきたtoBのシステムや音声ライブサービスなどから得られた経験をもとに知見を共有したいと思います。