プロジェクトを復活させるためのコーディング支援ツールの活用方法
概要
- 個人プロジェクトの進行とAIコーディング支援の活用体験
- OpenSubsonic APIを利用したYouTube Musicのクライアント化
- Claude Codeによる実装過程とワークフローの詳細
- 必要最小限のMVP構築と実用化までの課題整理
- AI支援の意義と自己成長とのバランスへの考察
Claude CodeでOpenSubsonic対応YouTube Music Shimを作った話
- 長年未完だった個人プロジェクトの再挑戦
- 例:日本語の「積ん読」のような、いつかやりたい積みプロジェクト
- 今回のPOCはYouTube MusicとOpenSubsonic APIの橋渡し
- OpenSubsonicはクライアント・サーバー分離を容易にするAPI仕様
- サーバーにNavidrome、デスクトップにFeishin、AndroidにSymfoniumを愛用
- ytmusicapiでメタデータ取得、yt-dlpで音楽ストリーミングを実装
- 基本的なストリーミングはすぐ動作、だが全エンドポイントの準拠実装に手間
- 新しいプロジェクトに目移りしがちで中断、典型的な積みプロジェクト化
Claude CodeによるMVP実装の準備
- すでに手書きでPOC済みのため、実装方針を明確化
- uvプロジェクト作成、FastAPI・Pydantic・ytmusicapi・yt-dlpを依存関係に追加
main.pyをFastAPIのサンプルに変更、openapi.json(OpenSubsonic仕様)を配置- READMEにプロジェクト説明を記載
- CLAUDE.mdを
/initコマンドで生成し、コーディング規約も追記- 型アノテーション・Googleスタイルdocstring・Pydantic V2・pytestスタイルのユニットテスト推奨
- この初期状態をGitリポジトリとして公開
Claude Codeを使った開発ワークフロー
- プランモードで次の作業をプロンプト
- 初期プランの抜けや問題点は追加質問で深掘り
- 必要に応じてリソースリンクを提示、検索ツールでイディオム調査も依頼
- 「Accept and clear context」で文脈を整理しつつ繰り返し進行
- 最初のプロンプト例:
- openapi.jsonを参照し、新しいjsonエンドポイントのみFastAPIで非同期stub実装を依頼
- 実装後はダブルチェックを依頼し、ミスを修正
- 主要な変更ごとに
/initでCLAUDE.mdを更新
MVP(Minimum Viable Product)で必要な機能の実装
- サブソニッククライアント接続、曲検索、ストリーミングに必要な最小機能をClaudeに質問
ytmusicapiで検索、yt-dlpでストリーム- Feishinで接続時に問題発生→サーバーログをClaudeに渡して反復修正
- 例:
.viewサフィックスの除去、エンドポイントのレスポンス形式修正
- 例:
- エラー発生時にはユニットテストを追加し、再発防止
- 数回の反復で音声ストリーミング成功を体験
実用化への長い道のり
- OpenSubsonicは約80エンドポイント、15カテゴリに分散
- MVPでは以下のみサポート
- getLicense, getUser, getGenres, getMusicDirectories(いずれも空だが構造は正しいレスポンス)
- getSong(IDパススルー)、search3(シンプルな検索)、stream(最適音質URL抽出)、getCoverArt(カバー画像URL抽出)
- フル機能対応には
ytmusicapiのキャッシュ導入、sqliteでメタデータ保存、閲覧系エンドポイントの実装- ストリーム中の曲をディスクに保存し、再ダウンロード防止
- クライアントが途中切断した場合のファイルクリーンアップ処理
- 認証関連は未対応(公開予定なしのため)
AIコーディング支援の意義と自己成長のバランス
- AI支援で「本当に欲しいけど実現できなかったプロジェクト」を形に
- 例:積ん読の本が一冊減る感覚
- 一方で、AI依存によるスキル低下も懸念
- 例:Rust学習は自力で継続
- 学び・成長のためのプロジェクトと実現したい願望系プロジェクトを分けて考える重要性
- どちらも大切、バランスが肝要
- 「Sub-standard」と命名したこのプロジェクトは、後者の典型例
まとめ
- AIコーディング支援は積みプロジェクトの消化や、願望実現に有用
- ただし、自己成長のための挑戦も並行して行うことが大切
- それぞれのプロジェクトの意味合いを意識しつつ、AIツールを活用する姿勢