この4連休で開催されたiOSDC 2020に参加してきました。iOSDCの二日目は例年体調不良になって途中帰宅していましたが、今年も例外ではなく昼ぐらいから頭痛が起きていました。
iOSDC 2020 の感想
記事のサムネイル用に写真が欲しくてニコ生の動画のワンショットの写真を取ろうとしました。ですが長谷川さんの入った動画部分をスクリーンショットしてよいのかどうか分からなかったので写真を撮りませんでした。
2日間ずっとニコ生動画の会場とツイッターからのタイムラインの熱量がこちらまで伝わってきてるから本当に凄いなと思いました。ほんとに。
初めてのオンライン開催とは思えないぐらい動画がテンポよくて、ネット環境によっては遅延するかなと予想していましたが全く遅延しませんでした。これはひょっとしたらこのスタイルのオンラインカンファレンスがこれから流行って来るのかもって感じですね。
あと、他の皆さんの登壇資料が作り込まれていて圧倒するしかありませんでした。
# LT資料についてと後日談
LTタイトル: 「SwiftUIとFlutterを比較する」
事前に届いていたメールにレギュラートークが事前収録の形式だったのでライトニングトークも事前収録だと思って一度8月末までに80%の仕上がりまで作ってしまいました。
そして、作ったLT資料に基づいて普通にトークしてみると7分かかっていたので、そこから削る作業がとてもつらかったのを覚えています。色々な要素を削って、結局比較だけして結論を書いても6分ほどかかってしまったので台本を作って時間を調整する形にしました。
その台本が下のとおりです。ほぼ発表した内容と同じ事を下の書き下ろしにしています。
LT書き下ろしの文章
では、始めていきます。
最初に自己紹介します。レアジョブでモバイルアプリを作ってるTamappeといいます。下のリンクはQiitaや個人ブログ、ツイッターのリンクを張っています。
このテーマは今年のWWDCのセッションでGridが紹介されているのを見てこれはFlutterにもすでにあるねと思いました。よく見たらSwiftUIとFlutterは似てると思いました。じゃあ、SwiftUIとFlutterの比較をしたら面白いだろうなと思ったのでトークを考えてみました。
結論はというとFlutter最高ということを主張したいです。SwiftUIの思想は多分Flutterを意識しているんじゃないかと思ってます。
こちらはアジェンダになります。3つの視点からSwiftUIとFlutterを比較します。どれだけ似ているかを比較しながらFlutterのイケてるところについて紹介していきます。
最初はコンポーネントについてです。上がSwiftUIで下がFlutterです。SwiftUIはProtocolで準拠させるやり方をとっています。それに対してFlutterはWidgetという概念を採用しています。それでSwiftUIはViewやUIViewRespontableといったプロトコルがあり、そういったプロトコルに準拠させると言ったアプローチを採用しています。対して、FlutterはWidgetのアプローチを取っています。大体の場合は静的なコンポーネント用のStatelessWidgetと動的なコンポーネント用のStatefulWidgetを把握しておけばOKです。非常に覚えやすいです。
SwiftUIのプロトコルはこれだけではなく他にもあって、プロトコルの量だけ使い方を覚える必要があります。それと使い方の情報量が今もそこまで多くないという印象があります。
それに対してFlutterのリファレンスは丁寧に書かれていて迷うことがありません。もうリファレンスを見ればいいというレベルです。さらにYouTubeでFlutter専用のチャンネルもあって力の入れ具合が全然違います。
なのでここは丁寧なドキュメントと情報量の多さからFlutterの方が軍配が高いと思っています。Flutter最高です。
次にレイアウトの組み方についてです。SwiftUI、Flutterともにデフォルト位置が中央です。オートレイアウトはありません。ではどうやってコンポーネントの間隔を調整するかですが、SwiftUIではVStack、HStack、ZStackなどがありますね。これらをうまく組み合わせて調整します。それに対してFlutterはColumnやRowやContainerといったウィジェットがあります。
ここでSwiftUIは命名が統一されていますが、Flutterはちょっとややこしいです。Flutterの覚え方はColumnとRowがあることを覚えます。RowはUITableViewのindexPath.row のrowに引っ張られますが、それの逆と覚えておけばイメージが合います。RowはHorizontal なレイアウトです。
ということで、ここはSwiftUIに軍配が上がると思うじゃないですか?それでもここはFlutterの方が最高だと思ってます。Flutterでのアプリ開発ではIDEのショートカット機能がとても優秀に感じます。IDEの話になります。Xcodeでもレイアウトを乗せることができるのですが、Flutterではもちろんウィジェットを乗せたり、削除したりすることもとても簡単です。あと、メニューが見やすいので、開発上ストレスを感じることが少ないです。
最後のセクションのListとCollectionでの比較です。UIKitのTableViewに近いものがSwiftUIにはListであり、FlutterにはListViewが存在しています。次にCollectionViewに該当するものがSwiftUIではiOS14から使えるLazyVGridやLazyHGridで、FlutterではGridViewというコンポーネントがあってそれで対応できます。
ただしSwiftUIではGridはiOS14からしか使えません。iOS13ではGridをサポートしていないのがデメリットのように感じます。一応、ListでもGridのように実装できなくないですが、横スクロールの実装は大変になりがちの印象です。
そんな印象がありますので、私はここはダントツFlutterに軍配があると思いました。SwiftUIも頑張ってる印象がありますが、もうちょっと頑張ってくれたらなと思います。せめて今後のXcodeのアップデートでiOS13でもGridを使えるようにしたり、Gridを2つに分けずにLazyGridと一つに統一されたら使いやすくなると思います。
まとめです。これまで3つの視点で比較してきました。コンポーネントではWidgetのアプローチを取っているFlutterでレイアウトではショートカットメニューが充実しててストレスなく組み立てられるのでやっぱりFlutterで、List と Collection ではGridのサポートの弱さからFlutterに軍配があるということで総合的にはやっぱり、Flutterが最高としました。
そして、最後に宣伝です。今回のセッションで紹介しましたFlutterの特集を雑誌Software Designでも掲載されます。10月18日発売の11月号で載りますので、ぜひ読んでみて頂ければと思います。
他にもサンプルアプリや学習コストの話をしたいのですが、ミスって時間が足りなくなっていましたので資料の最後におまけコンテンツとして作っています。
以上ご静聴ありがとうございました。
最後に
今年のiOSDCはオンラインでしたので、適度に休憩できました。
普段はask the speakerには足を運びませんでしたが、今年はDiscordでask the speakerをしたのでask the speakerでの話しも聞けて非常に学びになりました。
ボタン一つでいろんなask the speakerが聴けましたので、リアルな休憩時間がなくなったのも思い出深い話しになります。
今年は念願のiOSDCでの初登壇がやっと達成できました。来年からはレギュラートークの枠を狙っていきたいですね!
** LT資料作成に辺り、@jumboOrNotさんに監修していただきました。