ハクソク

世界を動かす技術を、日本語で。

プロジェクトを復活させるためのコーディング支援ツールの活用方法

概要

  • 個人プロジェクトの進行とAIコーディング支援の活用体験
  • OpenSubsonic APIを利用したYouTube Musicのクライアント化
  • Claude Codeによる実装過程とワークフローの詳細
  • 必要最小限のMVP構築と実用化までの課題整理
  • AI支援の意義と自己成長とのバランスへの考察

Claude CodeでOpenSubsonic対応YouTube Music Shimを作った話

  • 長年未完だった個人プロジェクトの再挑戦
    • 例:日本語の「積ん読」のような、いつかやりたい積みプロジェクト
  • 今回のPOCはYouTube MusicOpenSubsonic APIの橋渡し
    • OpenSubsonicはクライアント・サーバー分離を容易にするAPI仕様
    • サーバーにNavidrome、デスクトップにFeishin、AndroidにSymfoniumを愛用
  • ytmusicapiでメタデータ取得、yt-dlpで音楽ストリーミングを実装
  • 基本的なストリーミングはすぐ動作、だが全エンドポイントの準拠実装に手間
  • 新しいプロジェクトに目移りしがちで中断、典型的な積みプロジェクト化

Claude CodeによるMVP実装の準備

  • すでに手書きでPOC済みのため、実装方針を明確化
  • uvプロジェクト作成、FastAPIPydanticytmusicapiyt-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実装を依頼
  • 実装後はダブルチェックを依頼し、ミスを修正
  • 主要な変更ごとに/initCLAUDE.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ツールを活用する姿勢

Hackerたちの意見

自分が一番放置しがちなプロジェクトはゲームだな。放置したプロジェクトが何十個も入ったフォルダがあって、今はそれを実験として捉えてる。先週、これらのプロジェクトの一つをClaudeにやらせてみたんだけど、めっちゃ楽しかった!すぐに全体の流れを掴んでくれた。CCに放置プロジェクトだって言ったら、「まずはV0のゲームプレイループを完成させよう、そしたらさらに楽しめるし、諦めないで済むよ」って言ってくれた。ゲーム開発がすごく楽しくて、デザインのアイデアを出したら、ちゃんと動くコードを持ってきてくれる。手続き型アルゴリズムに関する資料を渡したら、実装もしてくれたし、ブレインストーミングもしてくれた。グラフィック資産も作ってくれて(外部ツールとして手続き型2Dジェネレーターのセットを作った)、ストーリー作りも手伝ってくれた。最近、コンピュータを使っててこんなに楽しいのは久しぶりだよ。Claude Code + Godot = 楽しい。またやりたくなってきた。
手続き型の話で、実験してることの一つは、手続きループの中にLLMを組み込むことなんだ。つまり、ライブでナラティブを書く感じ。残念ながら、ローカルモデルはまだちょっと遅くて弱いけど、どんな結果が出るか見るのは面白かったよ。
誰かがLLMを「彼」と呼んでるのを初めて見た気がする。「それ」とは言わずにね。別に批判するわけじゃないけど、ちょっと興味深かったし、戸惑った。
Godotって、LLMと一緒に使うにはちょっと設計が悪い気がするんだけど。例えば、何度か間違ったtresファイルができちゃったし、LLMにIDを生成させるのはちょっと不安定に感じる。
最近楽しいのは、数ヶ月前や1年前にLLMを使って始めたプロジェクトを再開することなんだ。途中で壁にぶつかって、最新のClaudeやCodexでは続けられなかったプロジェクトを進めるのが面白い。一部は今すぐにでも立ち上げられるけど、まだエージェントが構築するには複雑すぎるものもある。でも、個人アプリを作るのがどんどん簡単になってきてる。もうすぐ「アレクサ、冷蔵庫の食材の写真を撮って栄養価をまとめて、ワークアウトアプリと同期させて、健康アプリのフィットネス目標に基づいて理想的な食材を比較して、コストパフォーマンスが良くて地元の、そしてダイエット制限に合った食材を見つけてメールで教えて」って言ったら、15分でそのアプリができちゃう時代が来るよ。
> 彼は「V0のゲームプレイループを完成させよう」と明言して、 > 彼はストーリー作りも手伝ってくれた。これまでのところ、コンピュータを使って一番楽しかった時間の一つだよ。大人の男と彼のニューラルネットワークの間の友情についての、心温まる感動的な話だね。でも、こんなバカげた話を読んで大笑いできたから、感謝してるよ!
AIコーディングのおかげで、ずっと作りたかったアプリを3つも作れたんだ。でも今はちょっと違う。使う時間がないんだよね。
12年前、自分のためにシンプルなアプリを作ろうとしたんだ。日や週、月が短くなるにつれて小さくなるバーを表示して、天気を最大気温と最小気温、雲のカバーなどのバーで示すものだった。テキストとASCIIで表示するのはうまくいったけど、日常的に使いたくなるようなインターフェースにはできなかったし、グラフィカルインターフェースも全然うまくいかなかった。Claude Codeに投げて、グラフィカルインターフェースのイメージを伝えたら、まさに自分が欲しかったアプリができたんだ。しかも、気づかなかった日付パーサーのバグまで見つけてくれた。今は画面の隅で常に動かしてる。次に作るアプリは、子供が学校に行ってないときに朝のアラームを全部オフにするiPhoneアプリ。ずっと欲しかったけど、iPhoneアプリの作り方なんて全然知らないし、学ぶ時間もないから作れなかった(子供のせいでね)。Claude Codeは個人アプリにピッタリだよ。コードの質なんてあんまり関係ないから、出てきたものをそのまま使えばいいんだ。
ほんとそうだね。物を作るのが好きだけど、時々は誰かに作ってもらいたい時もある。特定の目的のために個人的なツールが欲しい時、LLMの助けは最高だよ。コードの質なんて気にしないで、週末を潰さずに済むからね。
アプリを作る必要はないよ。内蔵のショートカットアプリを使えばいいんだ。すべてのアラームをオフにするショートカットを作って、カレンダーを読み込ませたりして、特定の日や時間にアラームをオン/オフするかどうかを判断させることができるよ。定期的に実行するように設定すればOK。
> Claude Codeは個人用アプリには最高だよね。そう思う。何年も使ってたMacのクリップボードマネージャーがOSのアップデート後に調子を崩しちゃって、App Storeの類似アプリも探してた機能がなかったんだ。だから、Simon Willisonのブログ記事を見て、SwiftUIアプリを作るためにClaude Codeに頼んでみた。動くまでに何度か試行錯誤したけど、今はMacのメニューバーに常駐して、俺が望んでたことを全部やってくれてる。特に驚いたのは、CCに追加機能の提案を頼んだときに、考えもしなかったアイデアのリストをくれたこと。自分が欲しいものを選んで、それを実装してくれた。二日前、自分用の専用マークダウンエディタが欲しくなって、LibreOfficeの新しいマークダウン編集コンポーネントみたいな、もっと小さくて軽いものを頼んだんだ。新しいGPT 5.5にそのプログラムのアウトラインを作ってもらって、CCに実装してもらった。二回のバイブコーディングセッションの後、今はほとんどやりたいことを全部できる軽量のネイティブMacアプリができたよ:マークダウンファイルを開いたり作ったり、ワープロみたいな環境で編集したり、標準的なマークダウン形式で保存したり。まだマークダウンテーブルには対応してないけど、その機能も今日中にCCに実装してもらうつもり。
サイドプロジェクトに関しては、ほとんどの場合、やる気がないときはやる価値がないと思ってる。結果よりもプロセスや経験を重視するのがレジャーだと呼んでる。結果を重視するのが仕事だね。もし多くのサイドプロジェクトが結果のためだけにやってるなら、それは自由な時間を使って働いてるってことだし、それを考えると本当に自由なのか?現代は、精神的な余裕以上に結果を求められる時代だから、サイドプロジェクトは精神のために残しておきたい。例外として、本当に信じる大義のための結果は、目的を与えてプロセスや経験を豊かにしてくれるかもしれないね。
この考えには賛成だな、すごく健康的だと思う。プログラミングを30年以上やってるけど、コマンドラインアプリにはずっと慣れてる。最近になってやっとQtに手を出して、UIを追加して本格的なデスクトップアプリにしようとしてる。学ぶことが多くて大変だったけど、なんとか乗り越えたよ。で、LinkedInにアプリのスクリーンショットを投稿して、無料でオープンソースにするって言ったら、「LinkedInタイプの人たち」から何百ものコメントが来たんだ。大手エンジニアたちが「これを私たちのワークフローに統合するのが楽しみ」とか「こういうのは初めてじゃない」とか言ってきた。やる気が出るどころか、せっかく頑張ってるのに、みんながただ利用して「見つけた」ってクレジットを取るか、単に自分には合わないから批判するだけなんじゃないかって気分になった。だから、1ヶ月くらい完全に作業を止めちゃった。でも、やっと君が言ったように考えるようになった。自分が好きだったのはQtを学ぶプロセスと、古いプログラムが生き返るのを見ることだったから、今は「プロジェクトカー」みたいになってる。いつも作ったり壊したりしてるし、データモデルを完全に再設計して、どんな利点があるか試してる。自分のグラフィカルビューを作ったり、言語翻訳を実装したりもしてる。もう「完成」してるけど、実は中身が全然違うバージョンが5つもあるんだ。それが楽しいんだよね。仕事中は一日中使ってるけど、LinkedInではもう一度も言及してないよ(笑)。
コーディングが目的なら、まあそうかもね。でも、やりたいことがあってもモチベーションや時間がないとしたら、それは「自由な時間に働いてる」って言えるのかな?以前は週末や休暇を丸々使ってたプロジェクトが、今では15分で終わることもある。これって、働くってことの真逆だよね。
趣味がたくさんあるんだ。プログラミングもその一つだけど、唯一じゃない。趣味の一つを助けるソフトウェアがあればいいなと思うこともあるけど、そのソフトウェアを作るために趣味Xの時間を奪いたくないんだ。しかも、そういうのは楽しくやりたいコーディングとは関係ないことが多い。LLMを使ったコーディングは、俺にとってちょうどいい場所だよ。趣味をもっと楽しむためのアプリをいくつか作ったけど、目的はプログラミングじゃなくて趣味を楽しむことなんだ。だから、これはまだ趣味の時間で、仕事じゃないけど、趣味はコーディングじゃないんだ。
この2年間でツールの環境がすごく変わったから、18ヶ月前にはしっかりしてた自動化の設定を見直してるよ。再構築するのには時間がかかるけど、週に何回もやることなら、その効率の向上は十分に価値があると思う。
一度、初心者フリーランサー向けのプロジェクトを考えたことがあるんだ。放置されたプロジェクトを、発展途上国の安い料金で複数の人にやらせるってアイデアだった。安い国にはある程度プログラミングできる人がたくさんいるから、例えば1日3ユーロで誰かを雇えるんだ。彼らが日々の進捗報告でどこでつまずいたかを説明してくれたら、ちょっと手助けしたり、放っておいたりしてもいい。もちろんもっとお金を払ったり、パソコンやインターネット接続、書籍、コース、オフィスを提供することもできるけど、必須ではないよ。プロジェクトごとに4週間ごとに60ユーロ払って、あとは無視してればいい。面白い進捗があったら見るのが楽しい。
これって、昔のアートパトロネージに似てるよね(今もそうなのかな?)。
どのサイトを使ったの?
プライベートリポジトリに3つのノートテイキングアプリの試作があるけど、アイデアと自由時間の間で止まってる。Claude Codeのおかげで、やっと本当に欲しかったアプリを2ヶ月で出せた。作るのが今まで見つけた中で最高の趣味だよ。ゲームやスクロールよりも楽しい。何年もアイデアを抱えてきたから、やっと完成したアプリには自分がたくさん詰まってるし、これからソロビルダーからもっとこういうのが出てくると思う。
でも、誰がそれを買うの?古いプロジェクトを作ることに文句はないけど、すごく特化したプロジェクトが市場にあふれちゃうよね。昔は、どのアプリにも箱に仕様が書いてあったのが懐かしいな。使い方のために、そんな感じのものが必要だと思う。新しいモデリング言語とか、何かね。
2020年、Svelte用のGraphiQLでReactを置き換えるプロジェクトの手助けを求めるためにCodemirrorのフォーラムにいたんだけど、難しすぎて諦めちゃったんだ。昨日、Claudeにそれを実現してもらうよう頼んだら、俺が作ったスレッドを参照してくれた。とにかく、今は見た目を良くする作業をしてる(ちゃんと動いてるよ!!)それを俺の意見満載のGraphQLサーバーに統合する前にね。もう「変わりたいなら自分がその変化になれ」って言い訳は通用しないよね。
すごいよ。今、個人的なソフトウェアがめちゃくちゃ増えた。昨日は、メディアウィキに完全に統合されたネイティブテキストエディタを作ったんだ。リンクを自動補完したり、構文を使いやすくしてくれるやつ。これを作れるのは俺だけだと思う、他の人には価値がないからね。でも、俺が作るには時間がかかりすぎるんだ。でも、エージェントを使ってコーディングすると、限られたリソースは俺の注意力になるから、自由な脳のサイクルがタスクに集中してれば大丈夫。だから、こういう個人的なものは、タブループに入れておくのに最適なんだ。素晴らしい時間を過ごしてるよ。
1998年に始めたQuake 2のモッドを、ついに数週間前に完成させた。AIが、COVIDのバーナウトを乗り越える手助けをしてくれてる。半分しかできてなかったプロジェクトが多すぎたからね。今日はターミナル(RDPツール)を修正したよ。10年前に開いたOpenRAのバグにも取り組んでるんだ。エンジンは10倍速くなって、経路探索もほぼ正常に動いてる。
ほんとにクレイジーだよ。今は120個くらいの個人用ツールを持ってるけど、君が言ってるパターンがまさにその通り。ボトルネックが実装からコンテキストスイッチに移った感じ。作業を止めるたびに、次のステップや状態を記録するために、プロジェクトのルートにマークダウンファイルを置くようにしてるんだ。そうすれば、20分も「どこまでやったっけ?」って悩む必要がなくなるからね。エッジケースを処理したり、使わない人のためにドキュメントを書くプレッシャーもないし、ただ自分の問題を解決して次に進むだけだよ。
AIの素晴らしい点は、開発が複雑すぎて管理できない時や、知識のギャップを埋められない時に、一時停止できることだね。そういう障害が問題にならないだけじゃなくて、視点が狭いハッキングから、プロジェクトを完成させるためのメタな視点にシフトできる。これって、ウィンウィンどころか、ウィンのパワーだね。