はじめに
こんにちは!
最近、Android開発の界隈を眺めていると、Jetpack Composeがすごい勢いで普及しているのを感じます。気づいたら世の中は宣言型UIが当たり前になっていて、「これは本気でやらないと乗り遅れるぞ…」と、ちょっと焦りました(笑)。
そこで今回は、モダンなAndroid開発の基礎固めと、今後の本格的なアプリ開発に向けた「土台」を作ることを目的として、シンプルなメモアプリを開発していこうと思います。
単にライブラリの使い方を学ぶだけでなく、その背景にある「宣言型UI」の設計思想や「状態管理」の考え方など、本質的な部分をしっかり自分のものにすることが、このプロジェクトの一番の狙いです。
このプロジェクトで目指すこと
この開発を通じて、以下の3つのゴール達成を目指します。
-
モダンな開発フローの体得
- Jetpack ComposeでのUI構築と、ViewModelを介したロジックの分離(MVVM)という、Googleが推奨する現代的な開発フローを一通り経験します。これにより、**関心の分離(SoC)**という、大規模開発で破綻しないための重要な原則を体に叩き込みます。UIとロジック、それぞれの役割分担を明確にするってやつですね。
-
「状態管理」の基本をマスター
- 個人的には、宣言型UIの肝は「状態管理」にあると考えています。Composeにおける
State
やremember
といった仕組み、そしてViewModelからStateFlow
でUIに状態を伝える**単方向データフロー(UDF)**を実装します。データの源泉をViewModelに一つに集約(SSOT)することで、「あれ、こっちの画面とあっちの画面で表示が違う…」みたいな最悪の事態を防ぐ狙いです。
- 個人的には、宣言型UIの肝は「状態管理」にあると考えています。Composeにおける
-
今後のための「雛形」作成
- このアプリは、作って終わりではありません。適切なパッケージ構成やMVVMの型を、今後より複雑なアプリを作る際の**自分だけのボイラープレート(雛形)**にします。新しいプロジェクトを始めるたびに毎回同じ設定をするのは、正直ちょっと面倒ですしね w
アプリの主な機能
今回実装する機能は、上記の目的を達成するために意図的に最小限に絞っています。
機能 | 概要 |
---|---|
メモの一覧表示 | アプリを起動すると、作成したメモがシンプルなリストで表示されます。 |
メモの追加 | 入力フォームとボタンを使って、新しいメモをリストに追加できるようにします。 |
技術選定とその理由
今回のプロジェクトでは、以下の技術スタックを採用します。なぜそれらを選ぶのか、その理由も明確にしておきます。
-
言語: Kotlin
- 理由: もはや説明不要のGoogle公式開発言語ですね。Null安全、コルーチンなど、一度この味を知るとJavaには戻れません(笑)。
-
UI: Jetpack Compose
- 理由: XMLと比べて圧倒的に少ないコード量でUIを構築でき、プレビューも超強力。何より、UIを「状態の関数」として捉えるこの考え方が、UIロジックをシンプルに保つ鍵だと感じています。
-
アーキテクチャ: MVVM (ViewModel)
- 理由: Google公式推奨。ライフサイクルを意識したデータ保持が可能で、画面回転にも強いのが魅力です。ロジックが分離されるので、テストが書きやすいというメリットも大きいですね。
-
バージョン管理: Git / GitHub
-
理由: 開発現場の必須ツール。今回は
feat:
やfix:
といったConventional Commitsの規約に則って、「未来の自分が見ても分かりやすいコミットログ」を意識してみようと思います。
-
理由: 開発現場の必須ツール。今回は
今回のスコープ(やらないこと)
技術的な意思決定において、「何をやらないか」を決めることは、「何をやるか」と同じくらい重要だと考えています。
-
データの永続化(データベース連携)
- 理由: まずはUIをしっかり動かすところまで。いきなりDBまでやろうとすると、だいたい途中で心が折れるので…(笑)。次のステップとして、Roomあたりを導入するのが王道かなと考えています。
-
複雑なUIデザインやアニメーション
- 理由: デザインに凝り始めると時間が溶けるので、今回はMaterial Designの標準コンポーネントが提供してくれる美しさに頼ります。本質的なロジックの実装を最優先します。
-
メモの編集・削除機能
- 理由: まずはプロダクトの最小単位(MVP)として、「一覧(Read)」と「追加(Create)」に絞ります。ここがしっかり作れれば、あとは応用なので!
まとめ
まずはこの骨太な要件定義を元に、モダンAndroid開発の第一歩を踏み出してみようと思います。実際に開発を進める中で得られた知見や、思い通りにいかなかった点なども含めて、今後この開発ログに正直に記録していく予定です。(サボらないように頑張ります w)
もし同じような勉強をしている方がいれば、ぜひ情報交換しましょう!