💪
DroidKaigi2025のカンファレンスアプリを改善するIssueを106件作成しました(約一ヶ月間継続貢献)
初めに
-
フリーランスのAndroid開発者とだやま.Rです
-
本日(09/10)はDroidKaigi2025のWorkshopDayですが、いかがお過ごしでしょうか。
-
自分は例年通り明日明後日参加します。
-
毎年恒例となりましたが、今回も開催約1ヶ月前に公開されたカンファレンスアプリのプロジェクトへ継続してコントリビュートした結果と、得られた知見について紹介します。
- 今年は例年と異なり、リポジトリの公開日がカンファレンス開催1ヶ月前ではなく24日前の08/17のため、コントリビュート可能な期間が一週間短い中での貢献となりました。
-
去年の記事については以下をご覧ください
-
今年の目標は以下の通りでした
- DroidKaigi開催まで継続して貢献する(PRは一つ以上必ず毎日作成する)
- 意味の有るIssueを100個以上作る
-
両方とも無事達成することができました
-
以下は貢献数の比較と今回新しく貢献できたこと等になります
前回との貢献の比較
- 今年は例年に比べて貢献可能期間が一週間短かったので数値としては全体的にマイナスですが、健闘した方だと思います。
PR作成数(マージされたもののみ)
2024 | 2025 |
---|---|
![]() |
![]() |
107件 | 43件 |
- 前年比: 40.19%
コミット数
2024 | 2025 |
---|---|
![]() |
![]() |
342件 | 207件 |
- 前年比: 60.53%
Issue作成数
2024 | 2025 |
---|---|
![]() |
![]() |
20件 | 106件 |
- 前年比: 530%
- 元々Issue自体がリポジトリ公開時点で非常に少なく、不足していました。
Issue消化数
2024 | 2025 |
---|---|
![]() |
![]() |
43件(内HighPriority:21件) | 39件(内HighPriority:1件) |
- 前年比: 90.70%
- HighPriorityについては全体的にタグの運用が余り細かくされておらず、付与数自体が少ないです。
awesomeタグ付与数
2024 | 2025 |
---|---|
![]() |
![]() |
6件 | 1件 |
- 前年比: 16.67%
- そもそも今年は全体付与数が自分のものを含めて4件しかありません。
今回新しく出来た・学べたこと(一部抜粋)
Compose Multiplatform for Desktop (旧称 JetBrains Compose Desktop)
- 昨年はライブラリバージョンの関係もあり、コントリビュート期間の終盤になるまでapp-desktopモジュールの追加とJVMアプリケーションの実行は不可能でした。
- 今年はコントリビュート期間の最初からapp-desktopモジュールが利用可能だったので、普段触れないJVMアプリケーション開発に集中して貢献すれば、得られるものが大きいと判断しました。
- いくつかJVM関係ではないPRも混じっていいますが、具体的に何に対応したのかはここから確認できます。
- Android開発では全く見かけないであろうsun.misc.Unsafeというクラス起因による問題など、新鮮でした。
-
compose-hot-reloadも導入されていたので、
hotRun --auto
コマンドで起動するとUIの変更がほぼリアルタイムで反映される体験も出来ました。(ただし物によっては反映されない)
- JVMアプリケーション開発はAndroidやiOSの開発とは色々と勝手が異なる部分があり、時間が足りず解決出来ない問題が残ったままになってしまいました。
- AndoridやiOSでは比較的簡単に実装可能な画像とテキストをセットで共有する仕組みをJVMでどうするか
- Windowsの場合配布物経由でインストールしようとすると、証明書が無いのでUACによる警告が表示されるが、これに対応する場合継続での費用負担が必須
- UIがレスポンシブ対応されておらず、単純にAndroid/iOSで表示されるデザインをそのまま出しているだけなので、大きすぎたり小さすぎるUIが表示されてしまう(統一的なIssueを作っていない事に記事を執筆しながら気づきました)。
- 今回基本的な実装はしたので、来年のDroidKaigiでは引き続き今回対応出来なかった部分の対応をしていきたいです。
Metro・Soil・Navigation3
- 普段のAndroid開発だとDIはDagger Hilt(またはDagger2)一択なので、Metroについてはカンファレンスアプリを通じて初めて接しました。
- DI以外にもData Layerにはリポジトリが存在する構成が普段は一般的なので、Soilを使ってAndroid側はリポジトリを使用しない構成は新鮮でした。
- iOS側はリポジトリを介してDataStoreやWebAPIを扱うようになっています。
- Navigationについても3はまだ実務で触れたことが無いので実際のコードを触ったのはカンファレンスアプリが初めてでした。
- 設定画面の実装を行うタスクはMetro・Soil・Nav3を学ぶのに丁度良いタスクでした。
- JVMで一部画面のナビゲーションに不具合があり、その対応をしましたが、余りにもワークアラウンドすぎました。
- この問題の根本原因はJVMターゲットにおいてNavEntryDecoratorが一部利用出来ないことでした。
- NavEntryDecoratorについては、カンファレンスアプリのスタッフをされているmikanさんのLTスライドをkitakkunさんのPRを見る際に参考にしました。
- しかしNav3に不慣れな為、NavEntryDecoratorの不足が原因という観点が無く、カンファレンスアプリのリードを担当されているkitakkunさんが対応するPRを出したことで根本原因に気付くことが出来ました。
iOSのopenURLメソッドについて
- 去年まで動作したopenURLメソッドが今年は動かなかったので修正したPR
- 去年の段階で元のコードのシグネチャのopenURLメソッドはDeprecatedになっていました。
- しかし動作していたので問題にはなっていませんでした。(Android Studio上でも特にDeprecated表記にもならないのでドキュメントを見に行かないと気付かない状態)
- iOS 18からDeprecatedメソッドなど非推奨コードが実行された場合
BUG IN CLIENT OF UIKIT…Force returning false
がランタイムでログ出力されメソッド実行されないように変わったようです。- 公式の情報を探しましたが、この部分についてはこの変更が入ったことを示す公式情報へ辿り着けませんでした。
iPadOSでのシェア機能について(マルチシーン・ポップオーバーアンカーの概念)
- iOSでは動作するものの、iPadOSではポップオーバーアンカーが設定されていないのでクラッシュするコードを修正したPR
- 普段iOS開発をしないので、まずポップオーバーという概念を知りませんでした。
- iPadの場合はUIActivityViewControllerはポップオーバーとして表示され、アンカー指定がされていない場合クラッシュしてしまいます。
- クラッシュとは関係がないですが、元のコードではマルチシーン対応がされていないので、2画面分割表示時にシェア機能のコードが実行されるとkeyWindowが取得出来ずnilになってクラッシュする状態になっていたと思います。
- 変更後のコードではとりあえず画面の中央にシェアウィンドウが表示されるようにしていますが、調整の余地は有るかもしれません。
Compose Animation(Not AnimatedVectorDrawable)
- 今年のアニメーション導入PR
- 去年・一昨年のデザインはAnimated Vector Drawableとして扱いやすい構造でした。
- しかし、今年は一体化した画像のため、例年のようにAVDとしてアニメーションを付けることは不可能でした。
- そのため、今回はandroidx.compose.animationの機能を使用してアニメーションを実装しました。
最後に
- 今年はプロジェクトのリードがtakahiromさんからkitakkunさんへ代わり、色々と体制に変化が有ったと思います。
- 慣れない中体調を崩しつつも尽力いただき感謝しています。
- mikanさんとkuwaさんについても日々の業務の合間にレビューなど対応頂きありがとうございました。
- 今年も短い期間で多くの事柄を学ぶことが出来ました。
Discussion