修理/メンテ/改造/開発/DIY

みなさまこんばんは、うはるんです。
実は、ここ数日こんなものを作るのに没頭しておりました…
オールドAndroidでも快適に使えるプレイヤーアプリが欲しかった。
私は過去にこのような、あまりにも古いスマートフォンで遊ぶ記事をアップしてきました。
2016年モデルのSH-02Jを今さら新品で買ってみたり、三辺狭額縁のAQUOSの謎機能で遊んでみたり。
そんな、これらオールドAndroid、というよりオールドAQUOSスマホ全般に言えることなのですが、
Playストアを介さずに入れられて、UIが自分好みな音楽プレイヤーアプリが存在しない、というか巡りあえていないんですよね。
同じ時代のスマホでも、Xperiaなどであれば優秀なプレイヤーアプリがプリインストールされてるのが多いのですが、AQUOSに関してはホントに、音楽プレイヤーとして使うには大なり小なり工夫が必要な印象。


でもやっぱり、いかにもAQUOSらしい三辺狭額縁のデザインの端末をDAP代わりに出来たらめっちゃアツいじゃないですか。
というわけで、AIにほぼ丸投げする形でオリジナルの音楽プレイヤーアプリを開発してみようじゃないか!って思い立って、
実践してみたのです。
そもそもこのサイト自体が。
はい。皆さんが利用しているこのガジェッター。
吉田製作所さんがAIを駆使して作り上げたサイトだっていうのはもう周知の事実ですよね。
サイトが作れるんだったら、Androidアプリだって作れるのは当たり前だろうって思いますよね。
でも、一つだけ決定的な違いがあります。

元々吉田さんはAIが無い頃から、縮小革命というWindows向けソフトを開発していたという実績がある方です。
対して私うはるんは、全くそんな、自分オリジナルのアプリやウェブサイトを開発・デザインしたことがない正真正銘のド素人です。
今回の記事は、そんなド素人なうはるんでも、AIを使いこなしてAndroidアプリを作ることは出来るのか?という視点での検証となります。
いきなり完成品のお披露目

いきなり結論にはなりますが、ちゃんとAIの力でアプリは作れましたw
こちらが今回私が、チャッピーとGeminiと一緒に開発したオリジナルアプリ。
UH Music Player Liteです。
謎にLite版を名乗っていますが通常版は存在しません。

自分のハンドルネームを元にしたアプリを開発するって、いかにもクリエイターになれたかのような気分になれて高まりますよね。
何事も形から入るタイプ。それがうはるん。
一番最初にGeminiが生成してくれたコードで出来たAPKは、本当にただ、端末内の音楽データがアルバム分けもされずにすべて表示されてそれを再生できるだけのアプリでした。
また、その一番最初のプレイヤー自体も、Geminiに書いてもらったコード全部コピペしてはい出来上がりではなく、エラー箇所をスクショでGeminiに見せてアドバイスを仰ぎながらガバを修正したりして完成しました。
なお、Androidアプリを開発するにはこちらのページからAndroid StudioのWindows向けアプリをインストールする必要があります。
AIにほぼほぼ丸投げであったとしても、人間側にAndroid Studioアプリをちゃんと不自由なく扱えるスキルも必要だしプログラミング言語の仕組み的なものもある程度理解しないといけないので結構難航しました。
で、一番最初のアプリを実際に触ったうえでそこから少しずつ、
本格的な音楽プレイヤーアプリとして便利に使えるよう、UIや機能の希望をGeminiに伝えて実装してもらいました。
途中からGeminiではなくChatGPTに乗り換えたのですが、基本的なUIを作ってくれたのはGeminiでそれをより便利にする方向で魔改造していったのがチャッピーという感じです。
一応こだわったUI

UIはスマホ用プレイヤーアプリやDAPなどでよくある、
ライブラリ画面でも画面下部にバー状のミニプレイヤーが常駐するスタイルにしました。当然ライブラリ画面でもバックグラウンドで常に音楽は再生可能です。
こちらのスクショでは、ミニプレイヤー上で、あいみょんの「愛を知るまでは」を再生している状況が表示されています。
簡素化のために、こちらのミニプレイヤーの状態ではシークバーや曲送りボタンなどは表示しない作りにしています。

アルバムジャケットをタップするとそれを開いてアルバム内の楽曲リストの画面に遷移します。
で、そこから再生したい楽曲をタップすることで…

音楽の再生が始まり、ミニプレイヤーの再生状況に現在流している曲の情報が反映されます。

ミニプレイヤーをタップすることで、全画面のプレイヤーへと遷移します。
ここでは、
- シークバー
- リピート再生ボタン
- シャッフル再生ボタン
- 3点リーダーメニュー(プロパティを開く)
- 曲戻しボタン
- 再生・一時停止ボタン
- 曲送りボタン
といった操作ボタン群が配置されており、一通りの再生操作が出来るようになっています。
とはいえシャッフルとリピートはボタンが別になってても両立することがないので、双方をひとまとめにしてタップするたびに再生モードが変わる方式に変えたいなと思ったり。
…そして、ここまでのUIの説明でお話しした、
「ミニプレイヤーをライブラリに配置しつつ、全画面の専用プレイヤーも用意する」というシステム。これを実装するのがなかなか大変でした。
どのように実現しているかというと、
- アルバム一覧画面
- 楽曲一覧画面
- 全画面プレイヤー
という3つのアクティビティ全てにプレイヤー機能を搭載することで実現しています。
そして音楽の再生処理そのものは、アプリ内に組み込んだMusicServiceに集約していて、
プレイヤー側はそのMusicServiceに対して現在の楽曲の再生状況などを「ちょーだい♥」っておねだりして提供してもらって、
それを元にシークバーなどが反映されています。
つまり、ミニプレイヤーから全画面プレイヤーに表示を切り替えたときには、
全画面プレイヤー側が、バックグラウンドで楽曲を再生し続けているMusicServiceから楽曲情報や再生状況再生位置などの情報を取得し、その状態をUIに反映しているという恰好です。
実装に難儀した横画面プレイヤー

当たり前のように横画面専用全画面プレイヤーのUIも用意しているのですが、
これを実装するのがホント大変でした。
最初にGeminiを使って開発していたとき、
いろいろと情報伝達に齟齬が生じて、当初の設計だった「全画面プレイヤーは、ミニプレイヤーとは全く別のプレイヤーにする」という方針が実現しておらず、
ずーっと「横画面にしても、縦画面プレイヤーをそのまま横画面に対して表示しているので下が切れてる」という状態でした。
あまりにもそれが解決しなかったので、ChatGPTに乗り換えたという経緯で、
各部のガバポイントを的確に指摘してくれたおかげでたちまち解決。
その時点での全画面プレイヤーは、専用のPlayerActivityが立ち上がっておらず楽曲一覧画面のアクティビティ内のプレイヤーをBottomSheetとして下から展開して再生されていた、というオチだったのです。

うはるん的こだわり:初回起動時の手引的ポップアップ

Android 7.0を搭載したSH-02Jで、初回起動時の流れをスクショでお伝えしていきます。
アプリをインストールして初回に起動すると、このようなポップアップメッセージが表示されます。
要は、ライブラリとして読み込むフォルダを指定してね!というメッセージです。
これも本格的なプレイヤーアプリには一般的な機能なのですが、
例えば「Musicフォルダの中身しか読み込まないように!」とか、厳格に指定できます。端末内に存在する音楽以外の音声データが読み込まれることを防止しています。

で、次の画面で端末内のデータへのアクセス権限を求められます。
実はこの時点で、OSバージョンによって分岐があるのですが・・・それは後でお話しします。

内部ストレージかSDカードかをはじめに選択できます。これも後から実装した機能なのですが、これを実装するためにいろいろと手間取りました…。

そして、ライブラリフォルダの指定を途中でやめて離脱しようとした際のメッセージも作りました。
このメッセージでは、ここでライブラリ設定をやめても、あとで環境設定から行えるよ!ということを明確にユーザーに伝えています。
…ユーザー私だけですが(笑)
何事も、正式リリース版のように作りたくなってしまうタイプなんですよね。自分しか使わないからって適当に済ませたくなくてw
で、ちゃんとライブラリとして読み込むフォルダを指定した段階で初めて、ライブラリ画面にアルバムのジャケットが並ぶという感じです。
余談:さらに古いOSにも対応している

先ほどのスクショ…
スクショを撮っている端末はAndroid 7.0なので、このメッセージでOKを押したらそのあと、ストレージへのアクセス権限の付与を求められるのですが、
本アプリはAndroid 4.2.2という化石OSすらもターゲットにしています。
Android 5.x系以前のOSは、アプリの権限はストア等からインストールする際に一括で許可する方式でした。
Android 6.0以降から、権限を求められるのがアプリを起動してからになったので、それらであれば、
ポップアップに表示されている「ストレージへのアクセス権限の許可が必要です」というメッセージも違和感ないのですが…
…でも、アプリ利用中に権限の付与を求められないAndroid 4.x系の端末を使っている時に、
「ストレージへのアクセス権限の許可が必要です」とメッセージが出ても、既に許可は出ているわけですから矛盾しています。

そこで、初回起動時には実行している端末がAndroid5.x系以前かAndroid 6.0以降かを判別し、それによって表示するメッセージを分岐させるというシステムを実装w
Android 4.2.2のSHT22では、「ストレージへのアクセス権限の~」の文言が表示されないよう設計し、実際にそれが正常に動作しているわけですね。
ダークモードにも対応

環境設定にある「ダークモードに切り替える」というボタンを押すことで、ダークモードに変更が可能です。
最近のAndroid OSは端末の設定としてライトモード・ダークモードという設定がありますが、今回ターゲットにした端末たちは非常に古い世代の端末ですのでそのような設定がありません。
なので、端末のライト・ダークモードの設定に合わせるといった方式ではなくアプリ内の独立した設定として実装しています。

ボタンを押すと、しばらくの待ち時間ののちに暗転しますw
もちろん、その待ち時間の間もバックグラウンド再生は継続されます。
で、ライトモード時には「ダークモードに切り替える」だった項目が、
ダークモード時には「ライトモードに切り替える」と変化しています。
こういった変化も、ちゃんと矛盾しないよう実装しないとなと思ってこだわって作りました。
…いや、作ってもらいました(笑)

ダークモードでのライブラリ画面。白の表示を最小限に抑えています。

全画面プレイヤーUIはこんな感じ。
アイコンも、ダークモードにしても闇に溶け込まないよう調整しています。
その他の実装機能
- ライブラリフォルダの再指定機能
- ライブラリの再スキャン機能
- ライブラリのソート(並べ替え)機能(アルバム名 昇順降順 ・ 更新日 昇順降順)
- 楽曲のプロパティの閲覧機能
- 通知欄での音楽コントロール機能(再生一時停止・曲戻し・曲送り)
実際に使ってみた結果:普通に便利で快適すぎてヤバい

このUH Music Player Liteは当然、私(とAI)による、私のためのアプリですので、
私が使いやすいように作られていますw 当たり前ですね。
ですから、音楽再生時の使いやすさはピカイチ。
イコライザー機能こそ未実装ですが、SH-02Jの端末スピーカーに普段の有線イヤホン直刺しでも全然音良いです(これは端末が優秀なだけ)。
OSの古い端末は、当然ネットに繋ぐ時間も最小限にしたい…ってのは、前回の記事でもお話ししましたよね。
このSH-02Jには、PlayストアからダウンロードしたPowerampのフルバージョン(有償版)がインストールされているのですが、
一度、オフラインの時にライセンスが確認できないとか言われてネット繋がないとそれが治らなくて、プレイヤーとして使うんだったらそういうのに悩まされるのも嫌だなあって思ったということもあって、
今回、AIに頼んで作ってもらったって面もありますね。

最初にお話しした、三辺狭額縁のモデルをDAPにするっていう用途も全然イケちゃいますよね。
下部以外のベゼルを極限まで狭くした三辺狭額縁(EDGEST)デザインは、DAPとして考えるとこの上なく合理的なデザイン…
というかむしろ、中華音響メーカーのAndroid搭載DAPとかでこういうスタイルが多い気がしますw
こうして見てみると、このSHV32のデザイン、カクカクしながらもやわらかな雰囲気のあるピンク色が似あってていいなあと感じますね。
まとめ:ド素人でもAIと一緒にアプリ開発は出来る!!!

今回身をもって検証したことにより、
非常に実用的なアプリを一つ製作することが出来たため、ド素人でもAIを使えばオリジナルアプリを作れる!と結論付けたいと思います。

自分の思いのままに、自分の便利なようにアプリを作れるとなったら、いろいろ夢が広がりますよねえ。
とりあえず今後は、このUH Music Player Liteの開発を続け、その他さまざまな機能を実装していけたらなあと思っております。
…ユーザー私だけですけどね!!!!
まとめ
AIって便利だなあ。
そして、UH Music Player Liteも便利に出来て良かったです。
- ド素人でも一つ作品が出来た
- 作業は相当大変だったし時間も相当使った
- AIがなんでも作ってくれるんでしょ、と思ったら大間違いであった
評価
関連商品
商品情報
- メーカー
- OpenAI
- 製品名
- ChatGPT Go
- 購入価格
- ¥1,400


コメント (1件)