nevertheless diary

AIに聞いたことの備忘録

Amazon Musicで気に入った曲の詳細を表示するアプリ(2):とりあえず完成したので仕様書

この記事の続き。

nevertheless.hatenablog.com

今回は、前回のようにカメラや外部のAPIを使うこともなかったので、比較的スムーズにできた。それでもエラーログを投げてはコードを書き直してもらう、の繰り返しは数回あったのだが。

 

Q1)無事に動作しました。では、このアプリについての詳細な仕様書を作成してください。また、Androis Studioでのファイル構成とその役割の概要についても解説してください。

アプリの動作確認、おめでとうございます! エラーを乗り越えて、ご自身のアイデアが形になって動く瞬間は格別ですよね。

ご依頼いただいた「アプリ詳細仕様書」と、今回触ったAndroid Studioのファイル構成と役割」についてまとめました。今後の開発や振り返りにご活用ください。


📱 アプリ仕様書:Music Digger

1. アプリ概要

アプリ名: Music Digger(仮)
目的: Amazon Music等の音楽ストリーミングサービスで聴いている楽曲について、「YouTube動画」「公式サイト」「信頼できるメディアのレビュー」をワンタップで深掘り(Dig)するためのランチャーアプリ。

2. ユーザーフロー

  1. 共有: ユーザーがAmazon Musicアプリで楽曲の「共有」ボタンを押す。
  2. 起動: 共有先リストから「Music Digger」を選択する。
  3. 解析: アプリが起動し、共有されたテキストから「アーティスト名」と「曲名」を自動抽出して画面に表示する。
  4. 修正: 必要に応じて、ユーザーがアーティスト名や曲名を手動で修正する。
  5. 検索: 目的のボタン(YouTube / 公式サイト / レビュー)をタップし、外部ブラウザやアプリで情報を閲覧する。

3. 機能要件

A. データ受信機能

  • インテントフィルタ: Androidの共有機能(ACTION_SEND)に対応し、テキストデータ(text/plain)を受け取る。
  • 起動時処理: アプリ起動時に共有テキストが存在する場合、自動的に解析ロジックを実行する。

B. テキスト解析ロジック

  • 対象フォーマット: Amazon Music内で[アーティスト名]の[曲名]を見る
  • 処理内容:
    • 正規表現を用いて「アーティスト名」と「曲名」を分離・抽出する。
    • URLや不要な空白を除去する。
    • フォーマットが一致しない場合、テキスト全体を「曲名」として扱い、アーティスト名は空欄とする(フォールバック処理)。

C. 検索アクション機能

以下の3つのボタンを提供し、それぞれ異なるクエリでWeb検索を行う。

ボタン名 検索対象 生成される検索クエリ (URLエンコード済)
YouTubeで聴く YouTube [アーティスト名] [曲名]
公式サイトを探す Google [アーティスト名] official site
厳選レビューを読む Google [アーティスト名] [曲名] (site:pitchfork.com OR site:nme.com ...)

※レビュー検索対象サイト: Pitchfork, NME, RollingStone, Rate Your Music, Mikiki, amass, ナタリー, CINRA.NET, Real Sound, Wikipedia

4. 技術スタック


📂 Android Studio プロジェクト構成と役割

今回、私たちが手を加えたファイルを中心に、Androidアプリがどのような構造で動いているかを解説します。

MusicDigger/
 ├── app/
 │   ├── manifests/
 │   │   └── AndroidManifest.xml  <-- [1] アプリの名札・設定図
 │   ├── java/
 │   │   └── com.example.musicdigger/
 │   │       └── MainActivity.kt  <-- [2] アプリの本体(脳みそと顔)
 │   ├── res/                     <-- [3] 画像や文字などの素材
 │   └── build.gradle.kts         <-- [4] 設計図・組み立て指示書
 └── gradle/ ...

[1] AndroidManifest.xml (マニフェストファイル)

役割: アプリの「身分証明書」兼「基本設定図」 Androidシステムに対して、「このアプリはこういう名前で、こういう権限が必要で、こういう機能を持っています」と宣言する場所です。

  • 今回のポイント:
    • <intent-filter> というタグを追加しました。これにより、スマホ本体が「おっ、このアプリはテキストの共有を受け取れるんだな」と認識し、Amazon Musicの共有メニューに表示してくれるようになります。

[2] MainActivity.kt (メインアクティビティ)

役割: アプリの「プログラム本体」 画面の表示(UI)と、裏側の処理(ロジック)が書かれています。

  • 今回のポイント:
    • UI (Jetpack Compose): MusicDiggerApp 関数の中に、「入力欄を縦に並べる」「ボタンを置く」といった画面のデザイン指示が書かれています。
    • ロジック: parseAmazonMusicText 関数などで、受け取ったテキストを分解したり、ボタンが押されたときにブラウザを開く命令を出したりしています。

[3] res フォルダ (リソース)

役割: 「素材置き場」 プログラムコード以外のデータ(アプリアイコン、画面に表示する固定の文字、色設定など)が入っています。今回は直接編集しませんでしたが、アプリアイコンを変更する場合などはここを触ります。

[4] build.gradle.kts (Module: app)

役割: アプリの「組み立て指示書」 ビルドツール(Gradle)に対して、どうやってアプリをコンパイルするかを指示するファイルです。

  • 今回のポイント:
    • Plugins: 最後に苦戦した部分です。「Androidアプリとして作る」「Kotlinを使う」「Composeを使う」という基本的な道具セットを指定しました。
    • Dependencies: 「Material3(デザイン部品)」や「Activity(画面機能)」など、アプリ開発に必要な外部ライブラリ(部品セット)を取り込むリストです。

今後のステップ(提案)

アプリは完成しましたが、さらにブラッシュアップするなら以下のようなことができます。

  1. アプリアイコンの変更: デフォルトのドロイド君アイコンから、オリジナルの「Digger」っぽいアイコンに変える。
  2. 解析精度の向上: Amazon Music以外のアプリ(SpotifyApple Music)の共有テキストにも対応させる。
  3. 履歴機能: 過去に検索した曲のリストを保存しておく。

もし「ここを直したい」「アイコンを変えてみたい」などの要望があれば、いつでも相談に乗ります。 まずは、ご自身のスマホでバリバリ使ってみてください!

Music Diggerアプリ情報

 

Amazon Musicの画面

 

楽曲の共有画面

 

Music Diggerの画面。ここで修正可能。

 

YouTube動画へのリンク

 

公式サイトへのリンク

 

レビューサイトへのリンク

 

Q2)他に追加を検討している機能はこんな感じでしょうか。
・検索した履歴(日時情報も)を残す
・AmazonMusicのほか、Spotifyにも対応
・レビューの概要をまとめたものをテキストとして保存(AIが必要か)
これらを実装する上での注意点、Android Studioでどのファイルをどう修正するか、などについて解説してください。
※コードはまだ生成しないでください。
また、他に何か面白そうな機能があれば提案してください。

素晴らしい着眼点です! これら3つの機能は、アプリを「単なるランチャー」から「個人の音楽ライブラリ・データベース」へと進化させる重要なステップです。

それぞれの機能を実装する上での技術的なポイント、必要なファイル変更、注意点を解説します。


1. 検索履歴(日時情報)を残す

検索した曲をリストとして保存し、後から見返せるようにする機能です。

  • 技術的な仕組み:
    • Androidの標準的なデータベース機能である Room (SQLite) を使用するのがベストです。
    • 「いつ(Timestamp)」「誰の(Artist)」「何の曲を(Song)」というデータをスマホ内部に保存します。
  • 修正・追加するファイル:
    • build.gradle.kts: Roomを使うためのライブラリを追加。
    • HistoryEntity.kt (新規): データの設計図(表の定義)。
    • HistoryDao.kt (新規): データの保存・削除・読み出しを行う命令セット。
    • AppDatabase.kt (新規): データベース本体の設定。
    • MainActivity.kt: 画面下部に「履歴リスト」を表示するUIを追加し、検索ボタンを押したタイミングで保存する処理を追加。
  • 注意点:
    • データが増えすぎないように「最新100件のみ保存」などの制限を入れるか検討が必要です。
    • アプリをアンインストールするとデータは消えます。

2. Spotifyにも対応

Amazon Musicだけでなく、Spotifyの共有テキストも解析できるようにします。

  • 技術的な仕組み:
    • Spotifyの共有テキストは [曲名] - [アーティスト名] https://open.spotify.com/... のような形式が多いです。
    • 現在の解析ロジック(parseAmazonMusicText)を拡張し、Amazonの形式ならこれ、Spotifyの形式ならこれ」と判断できるようにします。
  • 修正・追加するファイル:
    • MainActivity.kt:
      • 解析関数を parseSharedText のような名前に変更。
      • 正規表現Regex)のパターンを追加。
  • 注意点:
    • Spotifyは設定やバージョンによって共有テキストの形式が微妙に変わることがあるため、柔軟な(少し緩めの)解析ロジックにする必要があります。

3. レビュー要約の保存(AI活用)

ここが一番チャレンジングで面白い部分です。

  • 技術的な仕組み:
    • アプローチA(Webスクレイピング): 指定したサイトのHTMLを取得して解析する。
      • 難点: サイトごとに構造が違うため実装が大変で、規約で禁止されている場合も多いです。スマホアプリで行うのはあまり推奨されません。
    • アプローチB(生成AI活用・推奨): Google Gemini API などをアプリに組み込みます。
      • プロンプト:「[アーティスト名]の[曲名]という曲の、音楽メディアでの評価やレビューの概要を3行でまとめて」とAIに投げる。
      • 返ってきたテキストを画面に表示し、データベース(履歴)に保存する。
  • 修正・追加するファイル:
    • build.gradle.kts: Google AI SDK (Gemini) の追加。
    • AndroidManifest.xml: インターネット通信権限(すでにありますが確認)。
    • MainActivity.kt: 「AI解説を作成」ボタンの追加と、APIを叩く非同期処理。
  • 注意点:
    • APIキーの発行と管理が必要です(無料枠で十分遊べます)。
    • AIはたまに嘘をつく(ハルシネーション)可能性があることを考慮する必要があります。

💡 他に面白そうな機能の提案

さらに「Digる」体験を深めるために、こんな機能はいかがでしょうか?

A. 「自分メモ」機能(Dig Log)

  • 履歴機能の拡張です。
  • 検索した曲に対して、AIの要約だけでなく、「自分がどう感じたか(★評価や一言メモ)」を記録できるようにします。
  • これで、単なる履歴ではなく「自分だけの音楽レビュー帳」になります。

B. 歌詞検索へのショートカット

  • YouTubeやレビューだけでなく、Genius歌ネット などの歌詞サイトを検索するボタンを追加します。
  • 「歌詞の意味を知りたい」というニーズに対応します。

C. クリップボード監視(自動検知)

  • 共有メニューから飛ばなくても、Amazon Musicで「リンクをコピー」した状態でこのアプリを開くと、自動的にクリップボードの中身を読み取って解析してくれる機能。
  • 共有メニューが使いにくい場合に便利です。

今後の進め方

一気に全部やると大変なので、以下の順序で実装していくのがおすすめです。

  1. Spotify対応(ロジックの修正だけで済むので簡単・すぐに効果が出る)
  2. 履歴機能の実装(データベースの基礎を作る)
  3. AI要約 or 自分メモ機能(履歴機能の上に積み上げる)

まずは 「1. Spotify対応」 から着手してみませんか? よろしければ、Spotifyの共有テキストのサンプル(もしあれば)を教えていただくか、一般的な形式でコードを作成します。

 

とりあえず、しばらく使ってみてから考えよう。