実績

iOSDC 2020にLT登壇してきた話と後日談を書きます

この4連休で開催されたiOSDC 2020に参加してきました。iOSDCの二日目は例年体調不良になって途中帰宅していましたが、今年も例外ではなく昼ぐらいから頭痛が起きていました。

iOSDC 2020 の感想

記事のサムネイル用に写真が欲しくてニコ生の動画のワンショットの写真を取ろうとしました。ですが長谷川さんの入った動画部分をスクリーンショットしてよいのかどうか分からなかったので写真を撮りませんでした。

2日間ずっとニコ生動画の会場とツイッターからのタイムラインの熱量がこちらまで伝わってきてるから本当に凄いなと思いました。ほんとに。

初めてのオンライン開催とは思えないぐらい動画がテンポよくて、ネット環境によっては遅延するかなと予想していましたが全く遅延しませんでした。これはひょっとしたらこのスタイルのオンラインカンファレンスがこれから流行って来るのかもって感じですね。

あと、他の皆さんの登壇資料が作り込まれていて圧倒するしかありませんでした。

# LT資料についてと後日談

LTタイトル: 「SwiftUIとFlutterを比較する」

事前に届いていたメールにレギュラートークが事前収録の形式だったのでライトニングトークも事前収録だと思って一度8月末までに80%の仕上がりまで作ってしまいました。

そして、作ったLT資料に基づいて普通にトークしてみると7分かかっていたので、そこから削る作業がとてもつらかったのを覚えています。色々な要素を削って、結局比較だけして結論を書いても6分ほどかかってしまったので台本を作って時間を調整する形にしました。

その台本が下のとおりです。ほぼ発表した内容と同じ事を下の書き下ろしにしています。

LT書き下ろしの文章

では、始めていきます。

最初に自己紹介します。レアジョブでモバイルアプリを作ってるTamappeといいます。下のリンクはQiitaや個人ブログ、ツイッターのリンクを張っています。

このテーマは今年のWWDCのセッションでGridが紹介されているのを見てこれはFlutterにもすでにあるねと思いました。よく見たらSwiftUIFlutterは似てると思いました。じゃあ、SwiftUIFlutterの比較をしたら面白いだろうなと思ったのでトークを考えてみました。

結論はというとFlutter最高ということを主張したいです。SwiftUIの思想は多分Flutterを意識しているんじゃないかと思ってます。

こちらはアジェンダになります。3つの視点からSwiftUIFlutterを比較します。どれだけ似ているかを比較しながらFlutterのイケてるところについて紹介していきます。

最初はコンポーネントについてです。上がSwiftUIで下がFlutterです。SwiftUIProtocolで準拠させるやり方をとっています。それに対してFlutterWidgetという概念を採用しています。それでSwiftUIViewUIViewRespontableといったプロトコルがあり、そういったプロトコルに準拠させると言ったアプローチを採用しています。対して、FlutterWidgetのアプローチを取っています。大体の場合は静的なコンポーネント用のStatelessWidgetと動的なコンポーネント用のStatefulWidgetを把握しておけばOKです。非常に覚えやすいです。

SwiftUIのプロトコルはこれだけではなく他にもあって、プロトコルの量だけ使い方を覚える必要があります。それと使い方の情報量が今もそこまで多くないという印象があります。

それに対してFlutterのリファレンスは丁寧に書かれていて迷うことがありません。もうリファレンスを見ればいいというレベルです。さらにYouTubeFlutter専用のチャンネルもあって力の入れ具合が全然違います。

なのでここは丁寧なドキュメントと情報量の多さからFlutterの方が軍配が高いと思っています。Flutter最高です。

次にレイアウトの組み方についてです。SwiftUIFlutterともにデフォルト位置が中央です。オートレイアウトはありません。ではどうやってコンポーネントの間隔を調整するかですが、SwiftUIではVStackHStackZStackなどがありますね。これらをうまく組み合わせて調整します。それに対してFlutterColumnRowContainerといったウィジェットがあります。

ここでSwiftUIは命名が統一されていますが、Flutterはちょっとややこしいです。Flutterの覚え方はColumnRowがあることを覚えます。RowUITableViewindexPath.row rowに引っ張られますが、それの逆と覚えておけばイメージが合います。RowHorizontal なレイアウトです。

ということで、ここはSwiftUIに軍配が上がると思うじゃないですか?それでもここはFlutterの方が最高だと思ってます。Flutterでのアプリ開発ではIDEのショートカット機能がとても優秀に感じます。IDEの話になります。Xcodeでもレイアウトを乗せることができるのですが、Flutterではもちろんウィジェットを乗せたり、削除したりすることもとても簡単です。あと、メニューが見やすいので、開発上ストレスを感じることが少ないです。

最後のセクションのListCollectionでの比較です。UIKitTableViewに近いものがSwiftUIにはListであり、FlutterにはListViewが存在しています。次にCollectionViewに該当するものがSwiftUIではiOS14から使えるLazyVGridLazyHGridで、FlutterではGridViewというコンポーネントがあってそれで対応できます。

ただしSwiftUIではGridiOS14からしか使えません。iOS13ではGridをサポートしていないのがデメリットのように感じます。一応、ListでもGridのように実装できなくないですが、横スクロールの実装は大変になりがちの印象です。

そんな印象がありますので、私はここはダントツFlutterに軍配があると思いました。SwiftUIも頑張ってる印象がありますが、もうちょっと頑張ってくれたらなと思います。せめて今後のXcodeのアップデートでiOS13でもGridを使えるようにしたり、Grid2つに分けずにLazyGridと一つに統一されたら使いやすくなると思います。

まとめです。これまで3つの視点で比較してきました。コンポーネントではWidgetのアプローチを取っているFlutterレイアウトではショートカットメニューが充実しててストレスなく組み立てられるのでやっぱりFlutterで、List Collection ではGridのサポートの弱さからFlutterに軍配があるということで総合的にはやっぱり、Flutterが最高としました。

そして、最後に宣伝です。今回のセッションで紹介しましたFlutterの特集を雑誌Software Designでも掲載されます。1018日発売の11月号で載りますので、ぜひ読んでみて頂ければと思います。

他にもサンプルアプリや学習コストの話をしたいのですが、ミスって時間が足りなくなっていましたので資料の最後におまけコンテンツとして作っています。

以上ご静聴ありがとうございました。

最後に

今年のiOSDCはオンラインでしたので、適度に休憩できました。

普段はask the speakerには足を運びませんでしたが、今年はDiscordでask the speakerをしたのでask the speakerでの話しも聞けて非常に学びになりました。

ボタン一つでいろんなask the speakerが聴けましたので、リアルな休憩時間がなくなったのも思い出深い話しになります。

今年は念願のiOSDCでの初登壇がやっと達成できました。来年からはレギュラートークの枠を狙っていきたいですね!

** LT資料作成に辺り、@jumboOrNotさんに監修していただきました。

 

ABOUT ME
tamappe
都内で働くiOSアプリエンジニアのTamappeです。 当ブログではモバイルアプリの開発手法について紹介しています。メインはiOS、サブでFlutter, Android も対応できます。 執筆・講演のご相談は tamapppe@gmail.com までお問い合わせください。