「やりたいことはあるが、技術的にできるのか、そもそも出していいのか分からない」——そんな発注をご検討中の方に向けて書いています。

題材は、私たちが自社で開発・リリースしたリズムゲーム 「UTap(ユータップ/旧 Rumble Beats)」 です。専門用語はできるだけ翻訳し、「どんな課題に、私たちがどう判断して、どう着地させたか」を中心にお伝えします。攻めた企画を、生き残る形にどう落とすか——その判断の記録として読んでください。

📝 3行まとめ
① UTapは「検索した曲が、その場で音ゲーになる」アプリ。譜面は1曲も手作りしていません。
② 最大の売り(世界中の曲で遊べる)は、同時に最大の法務リスクでもありました。
③ 私たちは「攻める場所」と「逃げ道」を最初に設計し、グレーを“歩ける形”に変えました。

UTapとは ― 譜面を1曲も作らないリズムゲーム

音ゲーの最大のコストは譜面制作です。普通は1曲ずつ職人が手で叩いて作ります。だから収録曲はなかなか増えません。

UTapは、ここを全自動にしました。ユーザーが曲を検索して選ぶと、アプリがその場で曲を解析し、ノリに合わせた譜面(ノーツ)を自動生成します。収録曲をこちらで用意しないので、遊べる曲は実質無限。これがUTapの設計思想です。

ただ、この企画は最初から分かっていました。いちばんの売りが、いちばんの法務リスクだと。「世界中の曲」とは、つまりほぼYouTubeのことだからです。

💡 発注者の方へ:ここで「リスクがあるのでやめましょう」と言うのは簡単です。でもそれだと企画そのものが死にます。私たちが取ったのは 「攻める場所と、守る場所を分ける」 という設計判断でした。攻めるから価値が出て、守るから生き残れる。この線引きを最初に握ることが、攻めた企画の受託でいちばん喜ばれるポイントです。

グレーゾーン①:検索を「公式API無し」で通した理由

まず曲を探す機能。普通はYouTubeの公式API(YouTube Data API)を使います。ところが公式APIには1日あたりの利用上限(クォータ) があり、ユーザーが増えるほど検索が止まる。しかもキー管理や審査も必要です。

そこで私たちが採ったのは、正直に言えばグレーな方法でした。

  • アプリ内に画面に表示しないブラウザ(WebView) を持たせ、YouTubeの検索結果ページを裏で開く
  • ページの描画が終わるのを待ってから、表示後のHTMLをまるごと取得する
  • そのHTMLから「動画へのリンク」だけを抜き出して、検索結果として並べる

公式APIを使わないので、クォータも、APIキーも、審査もゼロ。ユーザーが何回検索しても止まりません。

💡 発注者の方へ:「正規のやり方だとコストや制約で実現できない要件」を、別ルートで通すのも提案力のひとつです。ただし私たちは、“技術的にできる”と“やっていい”は別問題だと理解した上で選んでいます。何を踏んでいて、何がリスクなのかを必ず言葉にして依頼主と共有する。黙って踏むのが、いちばん危ない進め方です。

グレーゾーン②:「埋め込み動画」で逃げ道を一本通す

ここが、この企画でいちばん大事な判断です。

私たちは 「埋め込みが許可されている動画しか、ゲームに出さない」 というフィルタを最初から入れました。

仕組みはこうです。各動画のページには、外部サイトへの埋め込み用の情報(og:video:secure_url というタグ)が入っていることがあります。このタグがある=権利者が「外部での再生を許可している」と表明している動画。UTapは、それ以外を候補から落とします。

なぜ、わざわざ遊べる曲を減らすのか。逃げ道を一本、最初から通しておくためです。

  • 権利者が「埋め込みOK」と明示した範囲だけを扱う、という建て付けにできる
  • 万一クレームやストア審査の指摘が来ても、「埋め込み可の動画に限定している」という説明の軸を持てる
  • 将来「ダウンロードはやめて、純粋な埋め込み再生だけに切り替える」方向へも舵を切れる

正直に言えば、これで完全にクリーンになるわけではありません。けれど「グレーを全部まとめて踏む」のと、「一箇所だけ正規の逃げ道を確保しながら攻める」のとでは、抱えるリスクの大きさが桁で変わります。

💡 発注者の方へ:これが“グレーの歩き方”です。攻めた企画を持ち込まれたとき、私たちは「全部ダメ/全部やる」の二択にしません。“どこに逃げ道を一本通せば、攻めても死なないか” を設計します。UTapでいう「埋め込み可フィルタ」がそれ。この“逃げ道の設計”込みで提案できることが、ただ作るだけの開発会社との違いだと考えています。

再生ボタンを押してから、裏で起きていること

ここからは中身の話。ユーザーが曲を選んで「Play」を押すと、数秒のあいだに裏でこれだけのことが起きています。

① ストリームの取得YouTubeの動画は、固定のファイルがどこかに置いてあるわけではありません。再生のたびに発行される一時的なURLを取りに行き、一番画質の高いものを選びます(映像と音声が別々なら、その両方を取ります)。

② ネイティブのFFmpegで「音」と「映像」に分解取得したデータを端末に落とし、FFmpegという定番ツールで2つに分けます。

  • 音声 → 解析用の生の波形データ(WAV) に変換する
  • 映像 → そのままコピーする(作り直さないので速い)

このFFmpegはUnity単体では動かないため、OSごとにネイティブで組み込みました。Androidは専用ライブラリをJava経由で、iOSはC言語の関数を直接、開発用のMacではインストール済みのFFmpegを、と3経路を用意しています。

③ 譜面の自動生成(ここが心臓部)取り出した音の波形を解析して、ノーツをその場で配置します。

  • まず曲のテンポ(BPM) を推定する
  • 16分音符くらいの細かさで区切り、音がグッと立ち上がった瞬間を拾う
  • その強さを点数化し、強いタイミングにノーツを置く
  • 難易度に応じて「ノーツの密度」「左右同時押し」「スワイプ」を出し分ける

つまり、人間が一切譜面を作らなくても、曲のノリに合ったリズムゲームが生成される。これがUTapの核です。

💡 発注者の方へ:「YouTube連携」と聞くと簡単そうに見えますが、中身は 通信・OSネイティブ(Java/C)・音声信号処理・ゲーム同期 という、まったく別々の専門領域を1本の体験に縫い合わせる仕事です。私たちはこの“縫い合わせ”を一気通貫でやれます。「画面だけ」「サーバーだけ」では完成しないもの を、丸ごと引き受けられるのが強みです。

いちばん苦しんだのは「403」だった

きれいに動くデモを作るのは、実はそこまで難しくありません。本当の地獄は 「保存した曲が、後日なぜか再生できない」 でした。

原因は2つありました。

  1. 再生用の一時URLは数時間で失効する。だから「曲を保存」したときにURLを覚えていると、翌日には全部リンク切れになる。
  2. アクセスが集中したり弾かれたりすると、サーバーが 「403(アクセス拒否)」や「429(回数制限)」 を返してくる。

これに対して打った手が2つです。

  • 保存するのはURLではなく、絶対に変わらない11桁の「動画ID」だけにする。 再生のたびに、新しい一時URLを取り直す。これで「翌日に全曲再生不可」が消えました(しかも、過去の保存データが壊れないように後方互換も確保)。
  • 403/429/通信切れは「一時的な失敗」と判断し、URLを取り直して最大3回までやり直す。 一方で「動画が削除された・非公開・年齢制限」は何度やっても無駄なので、潔く諦めて、原因を日本語でユーザーに伝える。

地味な話ですが、この“失敗の仕分け”があるかないかで、アプリのレビュー評価は変わります。「なんか動かない」と、「この動画は再生できません(削除・非公開の可能性)」では、ユーザーの納得感がまったく違うからです。

💡 発注者の方へ:ここが一番喜ばれたところ。デモが動くことより、「想定どおりに失敗してくれること」 にこそ受託の価値があります。私たちは成功パターンを作るだけでなく、どう失敗を見せ、どこでリトライし、どこで潔く諦めるか まで設計します。リリース後の問い合わせ件数は、たいていここで決まります。

正規ルートと、UTapの設計の違い

「公式APIで普通に作ればいいのでは?」——もっともな疑問です。整理すると、こうなります。

観点公式APIで素直に作るUTapの設計
遊べる曲提携・許諾した曲に限られる検索したほぼ全曲(埋め込み可に限定)
利用上限1日のクォータで頭打ち上限なし(裏側の作りで回避)
譜面1曲ずつ手作り or 別途用意音声解析でその場で自動生成
リスク低い(が、企画は成立しにくい)グレー。“逃げ道設計”で管理する
向いている案件権利がクリアな曲を扱うものまず体験を成立させて検証したいもの

どちらが正解という話ではありません。大事なのは、案件の目的に応じて、攻め方とリスクの取り方を選べることです。

リリースの現実:改名・広告・自社送客

最後に、出すまで/出してからの生々しい話を少しだけ。

  • アプリ名を Rumble Beats → UTap に改名。 覚えやすさと検索のしやすさを優先した、わりとドライな経営判断です。
  • 広告(AdMob)を導入し、収益化の土台を入れました。攻めた企画ほど、マネタイズを後付けにしないことが効いてきます。
  • 自社の別アプリへの送客バナーもアプリ内に仕込みました(日本語のユーザーにだけ表示する、など)。1本の集客を、自社アプリ群で回収する考え方です。
  • 日本語/英語の多言語対応や、iPhoneのノッチ(セーフエリア)対応といった、ストアに出すと必ず指摘される“地味な必須項目”もやり切っています。
💡 発注者の方へ:「作って終わり」ではなく、改名・広告・送客・多言語・審査対応まで含めて“事業”として並走できます。私たちは自社アプリで毎回これを通しているので、あなたのアプリでも同じ轍を踏まずに済みます。

正直な線引き ― これを書けるのが信頼だと思う

この記事では、グレーな手法も包み隠さず書きました。最後に、私たちのスタンスをはっきり書いておきます。

  • 「技術的に可能」と「事業として続けられる」は別物。続けられる形に落とすのが私たちの仕事です。
  • だから攻めるときは、必ず逃げ道(UTapでいう埋め込み可フィルタ)を一本通す
  • そして、踏んでいるリスクを依頼主に黙らない。判断するのは依頼主、選択肢と確率を出すのが私たち。

攻めた企画ほど、「攻め方と引き際を、一緒に設計してくれる開発会社」 が必要になります。私たちは、それをやります。

私たちが提供できること

UTapの開発を通じて、私たちはこんなことが得意になりました。

  • 攻めた企画の“着地設計”(どこを攻め、どこに逃げ道を通すかの線引き)
  • 外部サービス連携(YouTube等、公式・非公式の両方の経路を理解した上での実装)
  • 音声・映像処理 × ゲーム開発(信号処理から同期再生まで一気通貫)
  • iOS / Android アプリのリリースと運用(多言語・広告・審査・改善まで並走)

「やりたいことはあるけれど、できるか・出していいか分からない」——その壁打ちの段階から歓迎です。“面白いけど難しい”を、一緒に生き残る形にしましょう。