🧑‍💻

DroidKaigi2023のカンファレンスアプリに一ヶ月間継続してコントリビュートしました

2023/09/13に公開

初めに


  • 今年の目標は前回出来なかったプロジェクトの公開からカンファレンス前日までの一ヶ月間途切れることなくコントリビュートすることでした
  • 主目標は無事達成出来ました
  • 以下は貢献数の比較と前回出来なかったが今回出来た事になります

前回との貢献の比較

PR作成数(マージされたもののみ)

2022 2023
38件 55件
  • 前年比: 144.74%

コミット数

2022 2023
100件 229件
  • 前年比: 229.00%

Issue消化数

2022 2023
16件(内HighPriority:5件) 25件(内HighPriority:5件)
  • 前年比: 156.25%

awesomeタグ付与数

2022 2023
2件 4件
  • 前年比: 200.00%

今回新しく出来たこと(一部抜粋)

iOS側へのコントリビュート

  • 2022年のカンファレンスアプリではAndroid側への貢献のみでした
  • 今回も当初はiOS側へのコントリビュートは考えていませんでした
  • しかし9月前時点で着手可能なAndroidのIssueが枯渇しておりiOS側のIssueが大量に残っていました
  • そこで完遂可能だと予想されるIssueにチャレンジしてみることにしました
  • 普段は業務でAndroidコードのみを書いているため最初はXcodeの操作も不慣れで環境の構築にも躓きました
    • OSS開発で時間が限られているので一つ一つの疑問点を運営の方に聞くわけにはいきません
    • そこで今回はChatGPTを使用してAndroidStudioで出来る種々の操作をXcodeでどのように行うことが出来るのか・環境構築で躓いている点を質問しこの関門は突破出来ました
  • 今回はAndroid側で担当したTypographyの実装をiOS側でも同じように使用出来るようにするタスクであれば知識が少なくとも諦めることなく完了させられると予想し取り組みました
  • 残念ながらAndroidで実装したexpect/actualの実装はiOS側で使用出来ないことが途中で判明しました
  • そこで通常のiOS開発のようにフォントをswiftgenによってアプリで使用可能な形で提供する実装方針へ転換しこのタスクは完了出来ました
  • このタスクを完了した段階で「もしかしたら他のiOSタスクも簡単なものなら出来るかも?」と感触を得られたのでバグ修正なども行い無事マージされました
  • 今回の貢献を通じてモダンなiOS開発の知見を得ることが出来たため非常に良質な学びが得られました

Animated Vector Drawableを使った見た目の向上

  • SplashScreenの実装を完遂する中で時間が限られているため素材の修正をデザイナーの方を待たずに自分でしなければならない場面が有りました
  • しかしAVDファイルをAndroidStudio上で手作業で修正することは困難を極めました
    • XMLファイルですが中のパスの数値を手作業で修正する事はほぼ不可能です
  • そこでChatGPTへ質問したところShapeShifterというサービスの存在を知りました
  • 残念ながらSplashScreenの素材修正はこのサービスでは出来ませんでした
  • しかしこのサービスを使えば簡単なAVDファイルであれば自力で作成することが可能であることは分かりました
  • そこで元のデザイン仕様には存在しませんでしたが以下二点を提案し無事提案を受け入れてもらえました
  1. セッション詳細画面のブックマークボタンを押した際にAVDファイルを使い簡単なアニメーションを付ける
  2. タイムテーブル画面上部で浴槽に浸かっているドロイド君を定期的に瞬きさせる(X上でも好評だったようなので嬉しかったです)
  • Figmaで用意されているSVG素材の加工も行う必要が有ったためこれはInkscapeを使用しました
  • Inkscapeの操作も不慣れだったため操作方法などはChatGPTへ質問することで把握しました
  • 今回の貢献を通じてプログラマー側からもデザイン上の簡単な提案を行うことが出来る道筋が見えました

Compose compiler metricsの導入とAndroidStudio上から簡単にレポート出力を可能にする

  • 他の貢献者の方によって修正されるまでスポンサー一覧画面のパフォーマンスが悪く許容出来ないカクつきが発生していました
  • これを解決したいと考えこのスライドで紹介されていたComposeCompilerMetircsを導入し解決の役に立てようとしました
  • 此方はNowinAndroidのREADMEに記載のようにターミナルでコマンドを実行することでレポートを出力することが出来ます
  • しかしコマンドを覚えておくことは現実的ではないので毎回ドキュメントを見に行く必要が有り使い勝手が悪いと感じていました
  • 後日他の貢献者の方のこのPRの内容を見て応用可能ではないかと予想し実装したところAndroidStudioからGUI操作のみでレポートを出力することが可能になりました
  • このPRが無ければこの方法が存在するという事を知る事は出来ず自力で解決することは出来ませんでした
  • 今回の貢献を通じて実業務でも応用可能なrunディレクトリのXMLファイルの作成方法と利用方法の知見を得ることが出来ました

KMP(KotlinMultiplatform)開発の知見を深めた

  • FigmaのTypography定義をAndroid/iOS両方で使用可能にするためにexpect/actual実装をしなければなりませんでした
  • expect/actual実装についてはDroidKaigi以前の業務で触れる機会は有りましたが深く携わる事は無く知見は乏しいものでした
  • 今回はこの記事を参考にして実装することが出来ました
  • 残念ながら今回実装したTypographyのexpect/actual実装はiOS側で使用することは出来ませんでした
    • Composableアノテーションが付いているactualメソッドはスキップされXCFrameworkで生成されるshared.swiftには含まれません
  • しかしKMP開発においてAndroid側の実装をiOS側へ共有するためにXCFrameworkのassemble定義をbuild.gradle.ktsにて行いterminalからコマンドを実行するという開発手法の知識を得ることが出来ました
  • iOS側で共有されたコードは自動生成されたshared.swiftによって提供されます
  • それをiOS側の必要な箇所でimportすることでKotlin側のコードを使用可能にしているのだと理解することが出来ました
  • 今回の貢献を通じてKotlin側だけでなくiOS側で実際に使用するとどうなるかをデバッグしながら実装するための知見を得ることが出来ました

端末のLight/DarkモードによってMarkdownの画像を出し分ける

  • READMEの内容をもっと改善出来ないかとドキュメントを眺めているとprefers-color-scheme機能を発見しました
  • これを応用すればREADMEトップの画像をLight/Darkモードで切り替えられ面白いと感じました
  • そこでこれを提案し無事提案は受け入れられました
  • 今回の貢献を通じてGitHubでのMarkdownにおいて端末のLight/Darkモードによって画像を出し分ける機能が存在する事を知る事が出来ました

最後に

  • DroidKaigiの運営の方々によって作られた素晴らしいモダンなアプリの骨子・デザインによって今回のように一ヶ月という短期間でモダンな(若しくは未来にデファクトスタンダードとなるであろう)開発の体験をする事が出来ました
  • また何よりも過去および今回コントリビュートされた他の貢献者の方々の知見の偉大さを大いに感じることが出来ました
  • 運営の方々・偉大なる他のコントリビューターの方々・Androidの素晴らしいドキュメントこれらの巨人の肩の上に立つ事が出来た事が今回の貢献を可能にしました
  • これらのどれが欠けても今回の貢献は不可能でした
  • これは個人の考えですがDroidKaigiは開催前に公開されるプロジェクトへの貢献が何よりも良質な学びを短期間で得られるまたとない機会だと考えています
  • カンファレンスで発表される資料は開催後も公開され続けているため後から見ることも可能です
  • しかしプロジェクトへの貢献は年に一度およそ一ヶ月間の期間限定でしか実行出来ません
  • まだ貢献したことが無い方も是非ミニマムステップから始めてみては如何でしょうか?
  • 私はこの一ヶ月間とても充実した毎日を送ることが出来楽しかったです
  • 他のコントリビューターの方の貢献が更なる貢献を生む連鎖の加速感と最初は困難に思えた課題を乗り越えられた時の爽快感は最高です
    • 勿論全てが自力という訳ではなく運営の方の懇切丁寧なレビューによって助けられた場面が幾多も存在します
  • この楽しみを他の方々にも知ってもらいたいと切に思います

Discussion