サンプルアプリ紹介
GeminiとオンデバイスAIを活用した最先端のAndroidアプリ開発を解説。AI時代の実践的な開発手法を習得できます。
この本は「何を作るか」にこだわって設計されています。退屈なサンプルコードではなく、実際に使いたくなるアプリを11本、ゼロから作ります。各章はひとつのアプリを完成させる構成になっているので、読み終わるたびに「動いた!」という達成感があります。
以下で、各章のサンプルアプリをひとつずつ紹介します。
じゃんけんアプリ

Androidアプリ開発の最初の一歩として、じゃんけんゲームを作ります。グー・チョキ・パーのボタンをタップすると、コンピューターがランダムに手を出して勝敗を判定します。シンプルなゲームに見えますが、この1本にUIの組み立て・状態管理・画像の切り替えという3つの柱がコンパクトに詰まっています。読み進めながら「動くものを作る」感覚をここで掴んでもらうのが、この章の一番の目的です。
- グー・チョキ・パーのボタンタップでコンピューターと対戦
- 勝ち・負け・あいこをリアルタイムで判定・表示
- 選んだ手に応じてキャラクターのイラストが切り替わる
- Column・Row・Image・Button — Composeの基本部品を網羅
最初のアプリにじゃんけんを選んだのには理由があります。「条件分岐」「状態の変化」「画像の切り替え」という要素がコンパクトに揃っていて、プログラミングの面白さを最短距離で体験できるからです。「書いたコードが画面に現れる」その瞬間を、できるだけ早く体験してほしいと思っています。
注文アプリ



ハンバーガーショップの注文アプリを作ります。トップ画面には店舗の写真・営業時間・アクセス情報が並び、「注文へ進む」ボタンをタップすると注文画面に切り替わります。注文画面では、ラジオボタン・チェックボックス・スライダー・ドロップダウンメニューという4種類の入力UIを使って、バーガーの種類やサイドメニュー、ソースの量を選べます。スカイブルーからグリーンへのグラデーション背景が映える、見た目にも本格的な仕上がりです。
- トップ画面:店舗写真・営業時間・アクセス情報・メニュー一覧を表示
- 注文画面:ラジオボタン・チェックボックス・スライダー・ドロップダウンを実装
- Material Design 3 の複数ボタンスタイルを使い分ける
- グラデーション背景で視覚的に洗練されたUIを実現
- 画面間の切り替え(ナビゲーション)を初めて体験
カウントダウンタイマー

残り時間を円形のインジケータでビジュアルに伝えるカウントダウンタイマーアプリです。円弧が時間の経過とともに徐々に短くなる演出は、数字だけで表示するよりも直感的に「あとどれくらいか」が伝わります。開始・一時停止・リセットに加えて、時間を後から加算する機能も実装します。さらにこの章では、ViewModelを使った状態管理を学びます。画面を回転させてもタイマーが止まらない、ライフサイクルに強い設計の作り方です。
- 円形インジケータが残り時間に応じてリアルタイム更新
- 開始・一時停止・リセット・+1分加算を実装
- ViewModel でライフサイクルに安全な状態管理
- 画面回転してもタイマーが止まらない堅牢な設計
カメラアプリ



スマートフォンのカメラをアプリから完全にコントロールします。カメラのリアルタイムプレビューを画面に表示し、シャッターボタンで写真を撮影・端末に保存、そして他のアプリへの共有まで実装します。Googleが現在推奨する最新のカメラAPI「CameraX」を使うことで、かつては複雑だったカメラ制御をシンプルなコードで実現できます。また、ユーザーにカメラの使用許可を求めるパーミッション管理の実装も、この章でしっかり学びます。
- カメラプレビューをリアルタイムで画面に表示
- シャッターボタンで写真撮影・端末ストレージへ保存
- 撮影した写真を他のアプリへ共有
- パーミッションのリクエストと結果ハンドリング
- CameraX ライブラリで最新のカメラAPIを習得
インスタ風 投稿リストアプリ






Instagramのような投稿リストアプリ「PostMyStory」を作ります。インターネットから写真を取得してリスト表示する画面、写真をグリッド(格子状)で選ぶ画面、コメントを入力して投稿する画面という3画面構成です。インターネット通信が走っている間は「NOW LOADING…」の表示が現れ、写真が読み込まれると一覧に変わります。この非同期処理の制御とネット画像の効率的な読み込みは、現代のアプリ開発に欠かせない技術です。
- インターネットから写真を取得してリスト表示(Coilライブラリ)
- 写真グリッドから画像を選択する画面
- コメントを入力して投稿する画面への遷移
- 通信中の「NOW LOADING…」表示と完了後の切り替え
- LazyColumn・LazyGrid で大量データをメモリ効率よく表示
アニメーションするチュートリアル画面



ファッション・フォトアプリ風のオンボーディング画面を作ります。ページをスワイプするたびに、テキストが位置を変えながら滑らかにアニメーションし、下部のドットインジケータも連動して動きます。よく作り込まれたアプリの初回起動画面によく見られる、あの「スタイリッシュな演出」です。Jetpack Compose のアニメーションAPIには高レベルと低レベルの2種類があり、この章ではその両方を実践的に使い分ける方法を学びます。
- 複数ページをスワイプで切り替え(HorizontalPager)
- テキストがスライド・フェードで滑らかにアニメーション
- ページ位置を示すドットインジケータがスワイプに連動
- AnimatedVisibility・animate*AsState の実践的な使い分け
スライドショーアプリ

10枚の写真を上下スワイプまたはボタン操作で切り替えるスライドショーアプリです。「前へ」「次へ」の他に「先頭へ」「末尾へ」のジャンプボタンも用意し、さらに自動スライドショー機能のオン・オフも実装します。ページ切り替えにはアニメーションが付いて、遷移がなめらかです。この章では Scaffold レイアウトを使って、トップバー・ボトムバー・本体コンテンツを組み合わせるAndroidアプリの定番構造を身につけます。
- 上下スワイプで写真を切り替え(スムーズなアニメーション付き)
- 前へ・次へ・先頭・末尾ボタンでページジャンプ
- 自動スライドショーの開始・停止を実装
- Scaffold でトップバー・ボトムバーを配置する定番構造を習得
タブ切り替えWebブラウザアプリ



アプリ内で複数のWebページをタブで切り替えて表示するアプリを作ります。ニュースアプリが記事をアプリ内ブラウザで開いたり、ECアプリが商品説明ページをアプリ内で表示したりと、実際のアプリで広く使われているパターンです。AndroidネイティブのWebViewをJetpack Composeと組み合わせるには、AndroidViewという橋渡しの仕組みが必要です。この章ではその使い方を学びながら、タブUIの実装も合わせて習得します。
- タブをタップして異なるWebページを切り替えて表示
- TabRow・Tab コンポーザブルでタブUIを構築
- AndroidView でネイティブWebViewをComposeに統合
- インターネットパーミッションとWebViewの基本設定
桜の名所検索アプリ



「桜100選」の名所データをアプリ内のJSONファイルから読み込んで一覧表示し、Wikipedia の検索APIを使ってリアルタイムに関連情報を取得するアプリです。リストの桜スポットをタップするとGoogle マップが起動して場所を確認でき、Wikipedia記事はブラウザで読むこともできます。JSONデータの扱い方と REST API による通信という、実際の業務アプリでも必ず使う2つの技術を、桜という身近なテーマで楽しく学べます。
- 「桜100選」タブ:JSONファイルから桜データを読み込んで一覧表示
- 「Wikipedia」タブ:REST APIでリアルタイムに検索結果を取得・表示
- 名所をタップするとGoogle マップが起動して場所を確認
- Wikipedia記事をブラウザで閲覧するインテント呼び出し
- JSONのパース(解析)と構造化データの扱い方を習得
Todoリスト管理アプリ



アプリを閉じてもデータが消えない、本格的なTodoリストアプリを作ります。ホーム・追加・編集の3画面で構成し、完了/未完了のフィルター切り替えや削除確認ダイアログも実装します。データの永続化には Android 標準のデータベースライブラリ「Room」を使います。3画面を管理するJetpack Navigationの使い方も含め、「複数画面 × データベース」という組み合わせはほぼあらゆるアプリの基本構造です。この章を終えると、実用的なアプリを設計するための土台が揃います。
- ホーム画面:Todoの一覧・完了/未完了のフィルター切り替え
- 追加画面:タイトルと詳細を入力してTodo登録
- 編集画面:既存Todoの編集・削除(確認ダイアログ付き)
- Room でデータベース永続化(アプリを閉じてもデータが残る)
- Jetpack Navigation で3画面の遷移を管理
写真から始まるテキストRPG






本書の最終章は、すべての技術が集結するクライマックスです。スマートフォンで撮った写真1枚を読み込むと、端末の中のAI(Gemini Nano)がその写真を解析してオリジナルのRPGシナリオを生成します。廃墟の写真が「霧に沈む古城の遺構」になり、夕暮れの公園が「夢魔の潜む異界の庭園」に変わります。同じ写真でも選ぶジャンルによって世界観がまったく変わるのが、このアプリ最大の面白さです。
ジャンルは「ファンタジー」「ホラー」「SF」「ミステリー」の4種類。5ターンの選択肢を選びながら物語を進め、エンディング画面ではAIが冒険のあらすじを3行で自動生成します。過去の冒険は履歴画面でジャンル別に振り返ることができます。そしてすべての処理は、インターネット接続なし・端末の中だけで完結します。
- 写真をAIが解析し、その場所に合わせた物語世界を自動生成
- ジャンル選択(ファンタジー・ホラー・SF・ミステリー)で世界観が一変
- 5ターンの選択肢または自由入力で物語が分岐
- エンディングでAIが冒険のあらすじを3行に自動要約
- 履歴画面でクリア済みの冒険をジャンル別に振り返り
- Gemini Nano(オンデバイスLLM)でネット接続ゼロ・プライバシー完全保護
「同じ写真でも、ジャンルを変えるたびに全く別の物語が生まれる。」
これがオンデバイスAIの面白さです。クラウドに画像を送ることなく、手のひらの中だけで本格的な生成AIが動く体験は、まさにAndroid開発の新しい地平です。「AIはクラウドにあるもの」という常識が、Gemini Nanoによって変わりつつあります。この章を通して、その変化を自分のアプリで実感してください。

コメント