こんにちは、モバイルクライアントグループの大石(id:k_oishi)です。
2021/9/16~18に開催されたiOSDC Japan 2021へ参加した件をブログにします。 今回、弊社はシルバースポンサーとしてスポンサードしており、レギュラートーク(20分)での登壇が1名、他のメンバーは勉強会・カンファレンス参加補助で参加しました。
はじめに
弊社スタディプラス株式会社はシルバースポンサーとして、ノベルティボックスに特製グッズを提供させていただきました。もし、機会がありましたら活用してもらえればと思います。(切実)
感想
今回は弊社モバイルクライアントグループのiOSエンジニアとAndroidエンジニアが業務扱いで参加しました。 モバイルクライアントグループではiOSとAndroidのお互いの開発をできるよう取り組んでおり、Androidエンジニアでも興味があればiOSDC Japanへ自由に参加しています。
私たちのグループに興味がありましたら以下をお読みいただければと思います。
それでは各メンバーの感想です。
明渡
iOSエンジニアが主軸の明渡です。 2日目に「対話を頑張らなくても作れるSiri Shortcuts向けIntents App Extension」というテーマで登壇をしました。 立木文彦さんに自分の名前を読み上げられるという、普通に生きてたら一生に一度もなさそうな不思議な経験をしました。
書き起こしと補足を以下の記事へまとめておりますので、興味のある方は是非ご覧ください。
以降は、印象に残ったセッションについてです。
noteのiOSアプリで実装したアクセシビリティの全て
UIKitベースで目的とする挙動、実現するための具体的な実装を綺麗にまとめている素晴らしいセッションでした。永久保存しておきたいです。
定常の開発や品質管理に組み込んで、取り組みをこつこつ重ねているという話も興味深かったです。 アクセシビリティ対応は後回しにしがちなので、曜日と時間帯を決めつつ取り組めるとよさそう、と思いました。
大規模なアプリのマルチモジュール構成の実践
マルチモジュール化を進める際に、悩まされるのが循環参照やメインターゲットでしか動作不可の実装です。 画面毎にモジュール分離した際、循環参照を防ぐため具体的にどう実装したかを紹介していただいていて、非常に参考になりました。
たくさん載っていた参考資料も一通り目を通しつつ、真似して新規開発分からこつこつ取り入れられるものを取り入れたいです。
上原
メインをiOSエンジニアとして、最近はFlutterを少し触ったりしています。上原です。
SwiftUIで使ったアプリを1年運用してみてわかったこと
Studyplusでも一部分SwiftUIに挑戦し実装した画面があるので、マルっとSwiftUIを利用したアプリの運用はどうなっているんだろうと興味を持ち視聴しました。 問題になった部分ではNavigationLinkやEnvironmentObjectでの描画不具合など、自アプリではまだ出会ったことのない問題に遭遇しており、今後作っていくなかで参考になりました。 今から本格的にSwiftUIの導入を進めていくかはまだ決まっていませんが、SwiftUIで書きたい意欲は話を聞いていて高まりました!!
若宮
最近Realm-CocoaとかSwiftUIとか触っています、若宮です。 書いているコードはSwiftよりもDartが多い毎日ですが、レビューや機能追加を考えると、キャッチアップも必要だよなぁと日々感じています。
そんなわけで、今回は業務で知見が必要そうなところとチーム開発について考えたいなと考え、セッションを選んでいました。
StoreKit のこれまでとこれから
StudyplusはAppStore経由の課金に対応しているので、興味深く視聴しました。 StoreKit2、早く導入したい。
これまでのKitの課題が解決され、主なユースケース(というより正常な利用ケース)での利用が非常に簡便になる印象です。
とりわけ非同期処理が async/await
で実装されている点は、Swiftの発展に合わせて開発のしやすさ(≒課金の導入のしやすさ)を高めてくれるように感じました。
一方で、iOS 15以降でしか使えないことを考えると、iOS 15のユーザーが増えるにつれ開発チームを悩ませそうです。 また弊社はFlutterを利用したアプリを開発しているので、Flutterのプラグイン側でどの程度対応が進むのかも気になります。 つまり、プラグインがOSバージョンごとの差分をどう吸収するのか、その結果をどう返すのかです。
iOS 15のリリース直前に、iOS 15以降の課金について把握できるセッションでした! ありがとうございます!
DateComponentsと仲良くなる
Studyplusでは、学習記録の記録日時に学習した時間を扱っています。 その他には、目標を設定した際の日付やタイムラインの投稿日時など、時間に関わる処理は多くあります。
これまではStudyplusの歴史的な経緯により、Date型ベースの処理となっています。 そのため、実装していると「やりにくいな……」と感じることがしばしばあります。
そんな事情もあり、 Date
と Calendar
、そして DateComponents
が整理され、明日から既存処理のリファクタリングをしたい気持ちが高まるセッションでした!
社外に公開しているSDKも含めて、より便利に日付けを扱っていきたいと思います!
隅山
Androidチームの隅山です。 最近はiOSよりFlutterの方を触る機会が多いですが、キャッチアップとしてiOSDCを聴講しました。
大規模リファクタリングの極意
Studyplusではリファクタリングと新機能開発のバランスがうまく取れていますが、他の大規模なアプリの技術的負債の問題をどう対処しているのか興味がありました。 この発表では技術的負債がアプリの設計レベルだったため、アーキテクチャ選定から大規模なリファクタリングまでを1年間で行っていました。 アプリの設計からリファクタリングする場合、適切なアーキテクチャを選定できる知識と新機能開発の間にリファクタリングするためのルール作りが非常に大事だと感じました。 StudyplusのAndroidアプリでは設計レベルの大規模なリファクタリングが終わったので問題ありませんが、今後に向けてアーキテクチャの情報は追っていこうと思います。
中島
最近小さいながらもiOSのリファクタリングなどに手をつけ始めました、Androidチームの中島です。 iOSDCは去年から聴講し始めましたが、Androidにない視点、Androidと共通の視点がそれぞれ垣間見えて面白いですね。 スピーカーの方々、スタッフ関係者の方々にはこの場を借りて感謝申し上げたいと思います。ありがとうございました!
async/awaitやactorでiOSアプリ開発がどう変わるか Before&Afterの具体例で学ぶ
Swift Concurrencyは社内でも話題に上っていましたので、普段Kotlin Coroutinesを使っている身としては興味が湧いていました。 Before/Afterでコードを比較しながら説明されることで、Swiftを書き慣れていない自分でも、Coroutines対応の時を思い出しつつ聞いているとストンと内容が飲み込める感覚でした。 Coroutinesで言うこれ(async表記がsuspend、TaskがCoroutineContextなど)、という感覚で頭の中で置き換えやすかった感じです。 対応後のコードだけ見るよりもイメージが鮮明に浮かびました。
ただやはりスレッドの問題はあるんだなとも感じました。 actorによる指定ですが、各アプリの実装に委ねるのではなく、ライブラリなどの側で隠蔽/動作スレッドの補償が行われている状態がベターかもという感想です。
当初はiOS 15じゃないとConcurrencyを使えないという話でしたが、後にiOS 13まで互換性が効くとの発表も聞いておりますし、リリースされたら自分もリファクタに参加したいなと感じました。
知られざる課金ステータス
Studyplusの課金はアプリ内課金としてiOS/Androidでそれぞれ実装しています。 月額/年額とプランが複数あることからプランの切り替えを調査しましたが、AppStoreよりGooglePlayの方が自由度の高さからくる難しさがあったと記憶しています。 *1
Studyplusでは試用期間やプローモーションオファーなどを提供していないので、このセッションでそれらの話を聞き、かなりの複雑さと難しさを感じました。 サービス側がきちんと把握しておかないとユーザーに不利益がいくものですし、Androidの方も含めて改めて勉強しておこうかなという気持ちが生まれました。
大石
いろいろ気になったトークがあった中で印象に残ったトークの感想は以下のとおりです。 また、iOSDCチャレンジについてトークンを掲載する側と探す側の両方に参加しましたのでそちらの感想も記念に書きたいと思います。
agoraを使ってライブ配信機能を1ヶ月半でリリースした話
スマホアプリ上からのライブ配信について個人的に調査していたことがあり、興味深く聞くことができました。また、トーク中に登場するPusherは以前の会社で担当していたオンライン家庭教師向けのアプリの開発でも使っていたのですんなりアーキテクチャをイメージすることができました。 全体的に丁寧でわかりやすいトークでしたので設計から実装レベルまで参考になる内容でした。 ありがとうございました。
元ゲーム開発者が贈る描画パフォーマンス改善
トークのタイトルからして大変興味深いのですが、みんな大好きInstrumentsが登場します。 毎年発売される端末の性能がどんどんアップするので少し重くてもスムーズに動いてしまいがちなアプリのパフォーマンス改善に関する内容で非常に参考になりました。 普段少しおざなりになっているかもしれないパフォーマンス視点での改善の必要性を再認識しました。このトークがアーカイブとして残ることはすごく価値のあることだと思います。 ありがとうございました。
アンカンファレンス 14年前の2tchのソースコードをコンパイルできるか?
アンカンファレンスのトークでしたが、すごく楽しいトーク&視聴者参加型のイベントでした。 2ちゃんねるブラウザの14年前のコードということで最初のコードの紹介ではObjective-Cの記法やVCSがSVNだった話や野良アプリ時代の話が飛び出す大変楽しく、今となっては貴重なiOSアプリ開発の歴史を垣間見るトークだったと思います。
そして、肝心のソースコードは最初はなかなか動かないものの、ビルドエラーの原因となるその後のiOSアプリで追加された要素を追加したり、クラッシュする部分をコメントアウトすることで昔懐かしのiOSアプリが起動するところまで辿り着き、それはすごい盛り上がりでした。
終了後はDiscord上で延長戦が行われ、最終的には2ch.scへの書き込みが成功するという参加者の期待を上回るエンディングだったことも強い印象に残ったトークでした。 ありがとうございました。
hak & tomzoh 特別企画
毎年?開催されている運営のtomzohさんとhakさんの特別トークです。
パターソン&ヘネシーのコンピュータの構成と設計を題材にしたYouTubeチャンネルの出張版で視聴者からの質問に答える内容でした。YouTubeの動画を見ていなくても興味深い内容でしたので、コンピューターサイエンスに興味がある自分には楽しめました。またチップの話してる…。
YouTubeチャンネルの動画もチェックしようと思います。
iOSDCチャレンジについて
まず、今回弊社が掲載したiOSDCトークンは以下のとおりでした。
iOSDCトークン | 掲載場所 |
---|---|
#学習管理ならStudyplus | 事前公開したテックブログ |
#学ぶ喜びをすべての人へ | パンフレットの弊社掲載枠 |
#オフィスの隣が予備校 | 2日目スポンサーツイート |
#サじゃなくてプのほう | 3日目登壇予告ツイート |
#口コミで累計600万ユーザー | 3日目登壇予告ツイート |
個人的にiOSDCチャレンジにも参加したのですが、トークンを掲載する側と探す側の両方を踏まえた現在の心境としては以下のとおりです。
- パンフレットに大きく載せるのはすぐに見つかって読み飛ばされてしまう気がした
大きく載せるなら強くアピールしたい内容をトークンに含めた方が良さそう。 - ある程度読ませる文章を作ってその中に入れる
結果的に多くの人に読んでもらえそう。 - iOSDCチャレンジは最終日の15時に終了する
それを考慮して前日には全てのトークンにたどり着ける状態にするのが良さそう。 - 短いワードより社名やサービスを入れたワードにしてパンフレットに入れる
入力しているときに会社の印象が残りそう。 - イベントに合わせてノベルティを製作できるならノベルティにも入れると印象が強くなりそう
良いノベルティであることも大事、でもノベルティなし参加者もいるので必須ではないかもしれません。
これらを次回に生かしたいと思います。
運営の皆さん、楽しい企画をありがとうございました。
いかがでしたか?
iOSDC Japan 2021の感想でした。 運営の皆さん、登壇された皆さん、参加された皆さん、お疲れ様でした!
最後に
現在、モバイルアプリエンジニアの募集はクローズしているのですが、もしご興味のある方はカジュアル面談でお話しできればと思っております。 お気軽にお申し込みください。
なお、現在弊社のサーバーサイドとウェブアプリケーションのエンジニアを募集しております。ご興味のある方は以下のリンクからご覧になっていただけますと幸いです。