はじめに:「未完成のリポジトリ」の墓場から抜け出すために
こんにちは。突然ですが、あなたのGitHubには「土日に意気揚々と作り始めたものの、途中で力尽きて放置されたプライベートリポジトリ」がいくつ眠っていますか?
アイデアを思いつき、バックエンドの実装までは楽しかったのに、フロントエンドの微調整、環境構築、さらには「どうやってこれをユーザーに届けるか(マーケティング)」という壁にぶち当たり、月曜日の朝にはすべてを投げ出してしまう。
「一人でフルスタックを開発する孤独と限界」
それは、多くの個人開発者が抱える深い絶望です。私もその一人でした。
しかし現在、私は Python × WASM (marimo) を用い、「サーバー維持費0円・完全オフライン動作」という強烈な制約をクリアしたBtoB向けWebアプリを、驚異的なペースで量産・リリースしています。
▼ 我々のチームが突破してきた「WASMの壁」
- [第1回] AIのハルシネーション(存在しない
mo.flex)との死闘 - [第3回] ブラウザ内Pandas処理によるシフト作成ツールの実装
- [第4回] 日本語フォント「豆腐化」を回避するためのAltairへの完全移行
- [第5回] モバイルUIの崩壊を突破した、完全オフラインQRコード一括生成ツールの完成
「いくらWASMとはいえ、個人でなぜそんなに泥臭い課題をハイペースで突破し、アプリを量産できるのか?」
結論から言います。実を言うと、私はコードをほぼ一行も書いていません。
今回は技術解説を一旦お休みし、私がコードを書く「作業者」を辞め、GeminiやClaudeといったAIたちを束ねる 「ハイブリッドAIチームのPM(プロダクトマネージャー)」 として、いかにして自律的なアプリ量産体制を構築したのか。
その「狂気のチームビルディング」の裏側を公開します。
1. 脱チャットボット:AIに「役職」と「裁量」を与える
多くのエンジニアは、AIを「優秀な壁打ち相手」や「コードの自動補完ツール(チャットボット)」として使っています。
しかし、それではあなたの「作業」が少し早くなるだけで、フルスタックの重圧からは解放されません。
圧倒的な生産性を生むためには、AIに「役割」を定義し、 役職と裁量を与えること(ロールプレイの極致) が必要でした。
私は自分の開発環境に、以下の「役員(エージェント)」を配置しました。
-
The Architect (クラウドAI): プロジェクトの総指揮・設計
要件定義からWASMの厳しい制約(サーバーレス・通信不可)をクリアするアーキテクチャを選定する技術トップ。 -
Biz Partner (クラウドAI): CSO(最高戦略責任者)
「どんな機能なら顧客の財布の紐が緩むか?」「維持費0円をどうマーケティングで魅せるか?」を定義し、DRM(ダイレクト・レスポンス・マーケティング)の視点で要件を磨き上げる。 -
Code Architect (ローカルAIエージェント): 実行部隊
The Architectから渡されたJSON設計図を受け取り、ローカル環境で黙々とmarimoのコードを書き、テストし、修正を繰り返す職人。
私はこのチームの「開発者」ではなく、彼らをつなぎ、最終的な決断を下す 「PM(プロダクトマネージャー)」 に徹したのです。
2. 魔法の杖は「Markdown」:プロトコル駆動でAIを統率する
では、どうすればAIたちは「ただのチャットAI」から「プロジェクトの文脈を理解した熟練の相棒」に進化するのか?
その最大の秘訣が、 「Markdownファイルで彼らの行動規範(プロトコル)を定義し、リポジトリで管理すること」 です。
いわば、Prompt as Code(コードとしてのプロンプト管理) です。
例えば、ビジネスパートナー(CSO)役のAIには、リポジトリ内に配置した biz_partner.md を読み込ませ、以下のような厳格なルールを叩き込んでいます。
# Role: Biz Partner (Chief Strategy Officer)
## 🗡️ DRM Protocol
機能(What)を語るな。なぜそれが必要か(Why)を語れ。
WASMの「サーバー不要」を、顧客の「維持費0円・情報漏洩ゼロ」という最強のメリット(USP)に変換せよ。
## 🛡️ Handoff Protocol
開発要件をエンジニアへ引き継ぐため、必ず以下の厳格なJSONフォーマット(`product_spec.json`)で出力せよ。
そして、出力されたこの product_spec.json は、単なるドキュメントではありません。
次工程を担当するローカルAIエージェント(Code Architect)の初期プロンプト(System Context)として動的に読み込まれ、 実装の絶対的な仕様書として機能します。
自然言語の曖昧さをJSONという構造化データで排除することで、AI間の伝言ゲームによる要件のブレを完全に防ぐ。これが我々の「Handoff(引き継ぎ)」の要です。
エンジニア役のAI(coder.md)への指示も同様です。
単に「Pythonを書いて」ではなく、過去のデバッグで血を流して得た「WASM/marimo特有の痛い教訓」をすべてMarkdownに蓄積し、絶対の掟(Iron Laws)として注入します。
- **【幻覚の排除】** `mo.flex` はv0.19.0のWASM環境では動作しないため絶対に提案せず、レイアウトは `mo.vstack` と `mo.hstack` のみで構築せよ
- **【脱SSR】** 日本語を含むグラフ描画に Matplotlib を使わず(WASMには日本語フォントがないため豆腐化する)、ブラウザのネイティブフォントを描画に利用できる `Altair` を第一選択とせよ
- **【インメモリ制約】** WASMはローカルファイルシステムにアクセスできないため、ファイルの読み書きはすべて `io.BytesIO` と Base64 エンコードを用いたインメモリ処理で完結させよ
こうした文脈をMarkdownで明文化し、AIの脳(コンテキスト)に直接インストールする。
これだけで、AIは「見当違いなライブラリを提案してくる新人」から、「我々の環境のクセ(制約)を完璧に理解したテックリード」へと激変します。
3. 人間の最後の仕事:コードを書く「作業者」から決断する「PM」へ
「じゃあ人間は何もしていないのか?」と言われれば、そうではありません。
むしろ、責任はかつてないほど重大です。
どれだけ優秀なAIでも、放置すれば「存在しない機能」を捏造(ハルシネーション)したり、モバイルでUIが崩壊する実装をプルリクしてきたりします。
ここで重要になるのが Human-in-the-Loop(人間の介在) です。
AIが叩き出してきた要件定義や実装コードに対し、私(人間)は冷酷なレビューアー、そして 「未知のバグに対する水先案内人」 として立ち塞がります。
- 「そのライブラリ、Pyodide(WASM)で本当に動く?
micropipで依存関係が解決できるか確認しろ。Reject」- 「スマホで横スクロールが発生している。Shadow DOMの壁に阻まれているな。生の
<style>タグ注入とインラインCSSの併用で突破しろ」
私は、エディタで括弧の数を数える単純作業からは解放されました。
その代わり、ブラウザのコンソールエラーと睨み合いながらアーキテクチャの妥当性を検証し、AIがWASMの制約で手詰まりになった際は、公式ドキュメントから突破口を見つけ出し「こう実装しろ」と指示を与える。
極めて抽象度が高く、エキサイティングな「技術的決断」だけを連続して行うようになったのです。
おわりに:個人開発は「プロデュース」の時代へ
今回、技術ブログの読者の皆様に一番お伝えしたかったこと。
それは、 「開発の楽しさは、コードを直接タイピングすることだけではない」 という事実です。
- WASMという厳しい制約の中でパズルを解く楽しさ
- AIという超優秀なメンバーに役職を与え、最強のチームを編成する楽しさ
- 彼らがバケツリレーのように要件定義から実装までを繋ぎ、自分のアイデアが目の前で高速に具現化していく快感
これからの個人開発は、「一人でフルスタックを頑張り、週末に疲弊する」時代から、「自分専用の最強AIチームをプロデュースし、指揮を執る」時代 へと確実にシフトしています。
この「ハイブリッドAIチーム×Markdownプロトコル」の手法により、私の手元にはアイデアが枯渇する暇もなく、維持費0円のWASMアプリが次々と生み出されています。
あなたの頭の中に眠っている素晴らしいアイデアたちも、一人で抱え込まずに「チーム」に任せてみませんか?
次回はまた、我々のチームが直面した技術的な死闘(WASM特有のディープな話)をお届けする予定です。お楽しみに!