概要
- 個人プロジェクト の進行と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ツールを活用する姿勢