SwiftUIに着目してiOSDC Japan 2021を振り返る
●はじめに
今年、初めてiOSDCに参加しました!😁
去年のiOSDCで発表された資料やYoutubeを見て、日本でやってるiOS開発に関するカンファレンスの中ではとても質が高いものという認識を得たので
アーリーバードのチケットを買って
ノベルティのTシャツを着ながら、ワクワクで参加しました。
今回参加した目的は、タイトルにもあるようにSwiftUIに関しての知見を少しでも得るためです。
現在、仕事でSwiftUIをプロダクション開発で使用するというチャレンジングなプロジェクトに参画しています。
iOSの開発経験自体1年に満たないのに、まだベストプラクティスが確立してないSwiftUIを使うということで、毎日ドキドキです。💗
iOSDCで、セッションタイトルにSwiftUIと入っているセッションは全て聞いたので、あとで振り返るように資料のリンクや感想を残しておこうと思います。(少なくともパンフのスケジュールに載ってたセッションには!)
資料がなさそうなやつは私のメモを書いてます。
今後アップされ次第、追加していこうと思います。
●SwiftUI関連セッション
・SwiftUIを使ったアプリを1年間運用してみてわかったこと
KAUCHEというアプリをSwiftUIで実装されているFukayaさんのお話です。
アーキテクチャは、MVVMを採用されているそうです。
具体的に存在しているクラスは
View、ViewModel、 UseCase、 Repository
とのこと。
今私が実務で関わっているプロジェクトのアーキテクチャにかなり近いため、大変参考になるお話でした。
具体的なコードを使っての説明も業務にすぐ活かせそうで聞いてとても良かったです。😊
Combineフレームワークの使い所とか、あと一番興味あったのはLazyViewの導入ですね。
これ公式が対応してくれるまでは実装しといた方が良いのかな。頭が悪くてなぜ必要かがちゃんと理解できなかった・・・後でこれを読みながら理解しよう。
・SwiftUIで実プロダクトを音速リリースした話
AkkeyLabさんのお話。
どういう要件がSwiftUIではできないのか、をコードとともに詳細に教えてくれた。
ButtonStyleとViewModifierの使い所は、かなり実用的な感じ!
ViewModifierはよく使ってましたが、ButtonStyleも使っていこー!
特に知れて良かったのは、
TextField入力時、SwiftUIではデフォルトで勝手に画面が上がってくれるが、TextFieldが被らない程度にしか上がってくれない。
つまり下にボタンがある場合、ボタンとキーボードは被ってしまう。
こと。これをやりたいために、UIKitを使ってるとのこと。
最近悩んでたんですよね。
知れて良かったと同時にまじか・・・という感じ。😢
UIKitから完全に離れるのはまだ先みたいですね。UIViewRepresentableにまだ苦手意識があるので、使わずに実装できるならそうしたいのですが・・・
内容とは関係ないですが、この方発表が非常にうまいですね。😎
私が聞いたセッションの中で最もパッションがあって聞きやすかったです。
・宣言的UIの状態管理とアーキテクチャ - SwiftUIとGraphQLによる実践
Appifyというアプリを開発しているそな太さんのお話です。
私には状態管理に関するアーキテクチャは未知の領域のため、話がちょっと難しかったです・・・🙇♀️
セッションはとても良かったのだと思います!って上から目線な言い方ですみません。
「iOSアプリ設計パターン入門」の本を読んで勉強してから、出直してきます!💪
この後のセッション紹介にも出てきますが、SwiftUIとGraphQLの組み合わせで挑戦している人、いることはいるんですね。
GraphQLもとても興味あるけど、SwiftUIだけでだいぶお腹いっぱいな状態なので、両方取り入れてる人はすごいな・・・
・App Store用スクリーンショットの自動生成をアラビア語対応してSwiftUIで実装してみた
Cookpadアプリに関わる生井さんのお話。
意外にたくさんの画像が必要なApp Store用スクショ。
知らなかったですが、cookpadアプリは、23だか22言語だかに対応しているとのこと・・すごい。
しかしそのために、用意するスクショも膨大でなんと500超。
他にもいろんな理由があり、スクショを自動で準備するに至ったようです。
このセッションは、SwiftUIでアプリ開発というわけではなく、スクショの自動生成をSwiftUIで行う、という他と比べてちょっぴり異色なセッションでした。
App StoreスクショをSwiftUIのViewから生成するライブラリをこちらで公開されているそうです。😲
・SwiftUI.Textを使いこなす5分間
こちらはatsuyaさんのお話。イベント1日目のLT後半戦での発表だった。
SwiftUIのTextは、色々とできるというのをコードで紹介してくださった。
どうやらまだ?資料が公開されていないらしいので、私がとったメモを書きます。
こちらのforteeにサマリは載ってました。
イメージとテキストのセットや3桁区切りなど知らないことも結構ありました!共有ありがとうございます!です。🤗
まず、textの一部のみ太字にしたい時の実装。
「+」を使って、異なるモディファイアを適用させたTextを連結できる。
HStack(spacing: 8) {
Text("iOSDC").bold()
+
Text("Hey!")
}
イメージとテキストをセットにしたい時の実装。
Text("
\(Text(Image(systemName: "heart")))
.foregroundColor(.pink))
\(Text("iOSDC").bold())
Japan 2021
")
3桁区切り文字列の実装。
UIKitの実装だと多分自分で3桁ずつ区切りながら、カンマ入れるとか独自実装しないといけないんじゃないでしょうか。実装したことないので勘ですが・・・
SwiftUIなら、Int型で入れれば、勝手に区切ってくれるそうです。
これ逆にいうと、区切りたくない場合は、String型じゃないと区切られちゃうってことですかね?
ただ、3桁区切りを標準でサポートする方が効果高そうですよね。
Text("合計 \(amount)円")
あと、これはちょっと聞き逃したのですが、
iOS15から、FormatStyleが利用可能になるそうです。
この記事とかわかりやすそう。
と思ったら、資料公開されてました!
この記事公開後に気づいたので、追記です!
・「スタディサプリ」がFull SwiftUIを選択した先に見えてきたもの。
スタディサプリ、を開発しているnakamuraさんのお話。
SwiftUIだと、アニメーションの実装が簡単にできるよ、というのをコードで示してくださった。
あと個人的にはSwiftUIで困ったこと、についても必見でした。Firebaseで対応してないのあるんか。はよ対応してーー。
・UITestを活用しまだまだ不安定なSwiftUIアプリを安定的に実務運用する方法
nakamuraさんに同じく、スタディサプリの開発に携わっているななしきさんのお話。
SwiftUIでの不安定な挙動、バグのお話や、
そういった不安定な環境の中でも品質を担保するためにUITestを活用している実用的な話だった。
一番興味深かった兼おどろきだったのが、
OSのマイナーバージョンアップでも、挙動が変わるものがある
こと😇
.alert、.sheetや.fullScreenCoverに関してですね。
これは知らなかったので、知れて良かったです。というか今開発してるアプリが心配なので、連休明けに要確認だ・・・😰
他の人のセッションも聞いてると全体的に、画面遷移系には要注意な印象。
・SwiftUI+GraphQLで新規プロダクトの継続的破壊(Continuous Destruction)に立ち向かう
たまねぎさんのSwiftUIとGraphQLのお話。
View側に関しては、Previewsで複数の表示パターンを実装することで、Continuous Destructionのサイクルを早く回すというのがとても印象的でした。👀
正直Previewsなんだか上手く使えてないので、もっと上手く使えるようになりたい・・・
あとGraphQLは
RESTのデメリットの1つである、アンダーフェッチ(クライアントに必要なデータが不足)やオーバーフェッチ(クライアントには不要なデータも余分に取得)を克服しているのは、改めて聞くとやはりでかい気がしました。
それによってクライアントとサーバーサイドの開発両方で、変更に素早く対応できるとのこと。
メリットは理解しているものの、GraphQLのAPIの仕組みがわかってないので、自分で実装してみたいですね。
●個人的に印象的だったSwiftUI以外のセッション
この記事ではSwiftUI関連のセッションについてメインに書いていますが、他にも印象的だったセッションがあったので、タイトルと(あれば)資料リンクだけ載せます。
※私(iOS開発歴が浅い)に響いたというだけなので、他にも良いセッションはたくさんあります。
・ランタイムデバッグのススメ
noppeさんのお話。
DebugMenuというのを実装するケースがあること自体初めて知りました。
なんとDebugMenuのライブラリを作られたそう・・😲
この存在自体初めて聞いたので、それを知れただけでも良かったです。
・Hello, Swift Concurrency world.
shizさんの最新の非同期処理に関するお話。
去年の「そろそろCombine」も面白かったです。
Swiftでの非同期処理に関してのトピックを追ってる方みたい。
JavaScriptのasync/awaitの書き方の方が、Swiftの非同期処理の書き方よりもまだ見慣れてるので、同じように実装できるのは嬉しい。
・iOSアプリのセキュリティ基礎
食べログアプリに関わっているsatenさんのお話。
私にとって、今回のセッションの中でSwiftUIの次に気になる内容でした。意外とiOSのセキュリティにフォーカスした資料ってあまり見つけられず・・・iOSアプリ開発に限らず、大変ためになる話でした。
セキュリティ要件について考えるのは個人的には精神的負担なのですが、(だって穴があった時を考えるとね・・)技術自体にはとても興味があります。
フロントエンド技術と比べるとセキュリティ関連技術は変遷が遅いですが、その分一度理解すれば長く使える知識になるし、
遅いだけ?奥深く学ぼうと思えば学べるのでその点面白いと思っています。
iOSアプリ開発を始めようと思っている人は、必見だと思いました。
●SwiftUI関連セッションを聞いてのまとめ
全体の個人的まとめは以下です。
・SwiftUIはUIKitよりも簡潔なコードで実装できる
・でもViewの実装はまだまだUIKitを使わないと、全要件は満たすには足りないことが多い(だからSwiftUIをメインで使うなら、UIViewRepresentableを使えるようにしよう)
・ライブラリも対応してないものがある(今回複数人が言及していたのが、Firebase Analyticsのスクリーンログ)
・不安定だからこそ、テストやQAは非常に重要
痒いところに手が届くような情報が盛り沢山でした!😊
早速これからの開発に活かしていこう。
SwiftUIとは直接関係ある訳ではないですが、変更容易性という意味でGraphQLとの相性が良いんでしょうか。
Apollo-iOSによるSwiftコードの自動生成も可能なようですし、自分で色々触ってみたいです。
●最後に
SwiftUIに着目してiOSDC全体を見てきました。
色々不安定なことは多く、これはSwiftUI固有の不具合なのか、それとも自分の実装がおかしいのか毎日迷走してます。
個人的にはSwiftUIはUIKitよりも好みなので、今後も追いかけていきたいです。
iOSDC、最高の三連休をありがとう。🤗
おわり。