1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【54歳おっちゃん】統合失調症からの復帰×AI協働開発で個人開発したら、有料機能を無料公開せざるを得なくなった話

1
Posted at

はじめに

og-image.png

「Scratchみたいにブロックで文章を組み立てられたら、面白くないか?」

これが、僕がAI向けビジュアルプロンプトエディタ「Promps」を作り始めたきっかけです。

統合失調症で約20年、社会から離れていました。その間にプログラミングの世界は激変し、AIが当たり前のツールになっていた。リハビリも兼ねてAIと対話するようになり、気づいたことがありました。

自分はAIをうまく使えている。でも周りの人はプロンプトで苦労している。

「なぜだろう?」と考えてみると、プロンプトの書き方に正解がなく、毎回ゼロから考えなければいけないのがハードルになっていた。

「じゃあ、プロンプトをテンプレート化して、ブロックで組み立てられるようにしたら?」

ScratchのビジュアルプログラミングとAIプロンプトの課題が、頭の中で一つに繋がった瞬間でした。

こうしてPrompsの開発が始まりました。この記事では、AI協働開発でうまくいったことと、笑えない大失敗について書きます。

AI協働開発で「うまくいったこと」

レイヤードアーキテクチャ × ミニマル実装の相性

Prompsの開発で最もうまくいった判断は、レイヤードアーキテクチャミニマル実装の組み合わせでした。

UI層(Svelte)
    ↓
アプリケーション層(コマンド・イベント)
    ↓
ドメイン層(ブロック・文法・バリデーション)
    ↓
インフラ層(ファイル保存・ライセンス認証)

なぜこれがAI協働開発と相性が良いのか。

AIに「この層だけ変更して」と指示できるからです。

例えば「エクスポート機能を追加して」と言うとき、AIが触る範囲が明確になる。UI層にボタンを追加し、アプリケーション層にコマンドを追加し、インフラ層にファイル書き出しを実装する。ドメイン層は触らない。

ミニマル実装を心がけることで、各層のコード量が少なく保たれ、AIがコンテキストを把握しやすくなります。1ファイルが500行を超えたら分割するルールを設けていました。

AIへの指示で意識していたこと

AI協働開発で学んだコツをいくつか共有します。

1. 「何を作るか」ではなく「なぜ作るか」を伝える

❌ 「ブロックにお気に入り機能を追加して」
✅ 「よく使うブロックに素早くアクセスしたい。
    パレットから探す手間を省きたいのが目的」

「なぜ」を伝えると、AIが実装方法を自分で考えてくれます。お気に入り機能だけでなく「フローティングパレットにしたらもっと便利では?」という提案までしてくれることもありました。(実際にそうなりました)

2. 既存コードを先に読ませる

新機能を追加するとき、まず関連する既存ファイルをAIに読ませてから指示を出す。これだけで、コードの一貫性が劇的に上がります。

3. 一度に一つのことだけ頼む

「エクスポート機能を追加して、ついでにUIも整えて、あとバグも直して」みたいな指示は事故の元です。

Claude Opusのプランモードが最強だった

Prompsの開発で一番お世話になったのが、Claude Code(CLI版)のプランモードです。

プランモードでは、AIがまずコードベースを調査し、実装計画を立ててくれます。「この機能を追加したい」と伝えると、どのファイルを変更するか、どういう順序で実装するかを事前に整理してくれる。計画に同意すると、そのまま一気通貫で実装まで進みます。

これがレイヤードアーキテクチャと組み合わさると強力で、AIが「UI層→アプリケーション層→インフラ層」と正しい順序で計画を立て、一貫性のあるコードを一気に書き上げてくれます。

ただし、一気通貫ゆえの怖さもあります。

プランモードはまとまった変更を一度に行うので、途中で方向がズレると、修正が広範囲に及びます。レイヤードアーキテクチャでスコープを絞っていても、複数ファイルにまたがる変更をロールバックするのは骨が折れる。

成功すれば数時間の作業が数分で終わる。失敗すると、手動で一つずつ戻す羽目になる。ハイリスク・ハイリターンの機能です。

……と、ここまでは成功体験。ここからは、AI協働開発の「影」の部分を正直に書きます。

ここからが本題:大失敗の記録

大失敗 その1:有料機能2つがパブリックリポジトリに流出した

Prompsには3つのエディション(Free / Pro / Ent)があり、それぞれ別リポジトリで管理しています。Freeはパブリック、Pro/Entはプライベートリポジトリです。

ある日、Pro向けの新機能を実装していたときのこと。カレントディレクトリはプライベートリポジトリ。安心して作業を進めていました。

ところが、AIが編集していたのはパブリックリポジトリ(Free版)の方だった。

僕はそれに気づかず、AIの変更をそのままコミット&プッシュ。

プッシュした直後、GitHubのパブリックリポジトリにはBot/クローラーが即座にアクセスしてきます。つまり、有料機能のソースコードが世界中に流出した瞬間です。

git revertで戻しても、Gitの履歴には残る。force-pushで歴史ごと消しても、すでにクローラーがキャッシュしている可能性がある。

一度パブリックに出たコードは、もう取り返しがつかない。

結果、2つの有料機能をFree版に組み込むことにしました。売上になるはずだった機能が、無料公開です。

この事故の根本原因は、AIがどのリポジトリのファイルを編集しているか、人間が確認していなかったこと。AI協働開発では、AIは指示されたことを忠実に実行してくれますが、「今どのリポジトリにいるか」までは判断してくれません。

教訓として:

  • 作業開始時にリポジトリとブランチを必ず確認する
  • AIの変更をgit diffで確認してからコミットする
  • パブリック/プライベートが混在する環境では、ディレクトリ構成自体を見直す

個人開発ではレビュワーが自分しかいません。AIは優秀な相棒ですが、「ここ本当にプッシュして大丈夫?」とは聞いてくれない。最後の砦は自分自身です。

大失敗 その2:Gitコンフリクト解消で、Entの大部分をPro機能で上書き

もう一つの大失敗は、Gitのコンフリクト解消で起きました。

Proの機能をEntリポジトリにマージする作業中、大量のコンフリクトが発生。一つ一つ解消していく中で、Pro側の変更を全採用してしまった箇所がありました。

結果、Ent独自の機能(カスタムテンプレートアイコン、カテゴリ管理など)がPro版の内容で上書きされ、消えました。

問題は、コンフリクトの量が多すぎて、「とりあえずPro側を採用しておこう」という判断を安易にしてしまったこと。Ent固有のコードがどこにあるかを把握しきれていなかったのが原因です。

リカバリは、マージ前のコミットに戻して一からやり直し。コンフリクト箇所を一つずつ、Ent側のコードを確認しながら慎重に解消しました。最初にサボった時間の何倍もかかりました。

この失敗から学んだのは:

  1. コンフリクト解消は絶対に急がない(疲れているときは翌日に回す)
  2. マージ前にgit diffで差分を必ず確認する
  3. 大量コンフリクトが出たら、ファイル単位で慎重にどちら側を採用するか判断する
# マージ前のセーフティネット
git stash       # 作業中の変更を退避
git diff main..feature-branch --stat  # 差分の規模を把握してからマージ

AI協働開発では、AIが大きな変更を一度に行うことがあります。人間同士の開発よりもコンフリクトが大きくなりやすい。だからこそ、マージ作業だけは人間が慎重にやる必要がある、という痛い学びでした。

振り返って思うこと

2つの大失敗に共通しているのは、**「AIを信頼しすぎた」のではなく、「自分の確認を怠った」**ということです。

AIは間違えません。指示された通りに動いただけです。間違えたのは、確認をサボった僕の方。AI協働開発の時代だからこそ、人間がダブルチェックする意識は、むしろ昔より重要になっていると感じています。

それでも、AIとの協働開発がなければ、20年のブランクから復帰して一人で3エディションのデスクトップアプリをリリースすることは不可能でした。

公開2週間で66カ国から1,900人以上の方がサイトを訪問してくれました。決済システム(Paddle)の審査も通り、正式に販売を開始しています。

失敗込みで、ここまで来られた。それがAI協働開発のリアルです。


Promps - AI向けビジュアルプロンプト言語
ブロックを組み合わせて、構造化されたプロンプトを直感的に作成できます。

公式サイト(Pro/Ent版のライセンス購入できます) : https://promps.org

GitHub(Free版): https://github.com/BonoJovi/Promps

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?