【個人開発】プロンプトをプログラミングのように管理できるChrome拡張を作った話
毎日「この動画を要約して」って言うのに疲れて作ったChrome拡張の話
🤦♂️ また同じことを繰り返している自分を発見
この記事で得られるもの:
- AIプロンプトをコードみたいに再利用する方法(もう同じこと言わなくて済む!)
- 6つのAIサービスを一気に連携させる実戦開発ノウハウ
- YouTube字幕抽出からChrome拡張まで、試行錯誤の全記録
- 個人開発者が5000人に使われるツールを作るまでのリアル体験談
想定読者: 毎日AIで要約作業してる人、個人開発に興味ある人、「なんか面白そう」って思った人
🙄 きっかけ:同じプロンプトを何回打ってるんだ問題
ある日の夜中、子供を寝かしつけた後。いつものようにChatGPTを開いて...
私:「この技術記事を要約してください」
ChatGPT:(要約してくれる)
私:「じゃあ初心者向けに説明して」
ChatGPT:(また要約してくれる)
私:「これ企画書に使えるポイントは?」
ChatGPT:(さらに要約してくれる)
あれ?毎回同じ内容に対して違う角度で質問してるじゃん...
そこで気づいたんです。プログラミングでは関数を作って再利用するのに、なんでプロンプトは毎回手打ちしてるんだろうって。
💡 「プロンプトもプログラミングできるはず」という発想
エンジニアなら誰でも思うはず:
// これができるなら...
function summarizeForBeginner(content) {
return `${content}を初心者向けに段階的に説明して`;
}
// プロンプトでもできるんじゃない?
const promptTemplates = {
'beginner': '初心者向けに段階的に説明してください',
'business': '企画書に使えるポイントを整理してください',
'technical': '技術的なメリット・デメリットを分析してください'
};
これだ! と思って、夜な夜な開発を始めました。
🛠️ 開発で遭遇した「まさか」の問題たち
問題1: AIごとにUIが全然違う問題
ChatGPT、Claude、Gemini...みんな入力欄のHTMLが違いすぎる!
// ChatGPTは素直
const chatgptInput = 'div[contenteditable="true"][data-testid="composer-text-input"]';
// Claudeはちょっと気難しい
const claudeInput = 'div[contenteditable="true"][role="textbox"]';
// Geminiは独自路線
const geminiInput = '.ql-editor[contenteditable="true"]';
解決策: 「全部に対応する汎用テキスト挿入ライブラリ」を作成
function insertText(text, aiType) {
const element = document.querySelector(AI_SELECTORS[aiType]);
// AIごとに最適な挿入方法を使い分け
switch (AI_METHODS[aiType]) {
case 'execCommand':
element.focus();
document.execCommand('insertText', false, text);
break;
case 'dispatchEvent':
// Claudeはイベントを直接発火させないと反応しない
element.dispatchEvent(new InputEvent('input', { data: text }));
break;
// その他のパターンも対応...
}
}
問題2: YouTube字幕が取れない問題
YouTube APIには字幕取得機能がないという衝撃の事実...
最初の作戦: DOMから直接抽出
// うまくいった時は良いけど...
const subtitles = document.querySelectorAll('.ytd-transcript-segment-renderer');
現実: YouTubeのUI変更で頻繁に動かなくなる 😭
最終作戦: 3段階フォールバック機構
async function getYouTubeTranscript(videoId) {
try {
// 作戦A: 既存の字幕パネルから抽出
return await extractFromTranscriptPanel();
} catch {
try {
// 作戦B: 字幕ボタンをクリックして強制表示
return await forceShowSubtitles();
} catch {
// 作戦C: ユーザーに「手動でコピペしてね」とお願い
return await askUserToCopy(videoId);
}
}
}
問題3: Chrome拡張のストレージ制限問題
発覚したとき: 長いプロンプトテンプレートを保存しようとしたら...
Error: QUOTA_BYTES_PER_ITEM quota exceeded
Chrome拡張のsync storageは4KBまで! 長いプロンプトは保存できない...
解決策: サイズに応じて自動振り分け
async function smartSave(key, data) {
const size = new Blob([JSON.stringify(data)]).size;
if (size > 4000) {
// デカいデータ → ローカルに保存(同期はしない)
await chrome.storage.local.set({[key]: data});
console.log('大きなテンプレートなので、このデバイスでのみ利用可能です');
} else {
// 小さいデータ → 同期ストレージ(全デバイスで共有)
await chrome.storage.sync.set({[key]: data});
console.log('全デバイスで同期されました!');
}
}
🎉 リリース後の反応が予想外すぎた
数字で見る現実
- ダウンロード数: 約5,000人(思ったより多い!)
- 毎日使ってくれる人: 約1,500人
- 一番人気の用途: 技術記事の要約(35%)
ユーザーの使い方が想像と全然違った
私の想定: YouTube動画の要約メイン
実際の使われ方:
- Qiitaの技術記事を学習用に整理 📚
- 会議資料の要点抽出 📊
- 競合他社の分析資料作成 🔍
- たまにYouTube動画 📺
印象的だったレビュー:
「同じ記事でも『学習用』『企画用』『共有用』で全く違う要約が作れて驚きました」
心に刺さったフィードバック:
「チーム内の分析品質が統一されて、会議の効率が上がりました」
🤯 作ってみて分かった「プロンプトプログラミング」の威力
Before(従来)
私: 「この技術記事を要約して」
AI: (普通の要約)
私: 「初心者向けに説明して」
AI: (また最初から要約)
私: 「企画に使えそうなポイントは?」
AI: (また最初から分析)
After(テンプレート化後)
// 一度設定すれば...
const templates = {
learning: `この内容を以下の形式で整理:
1. 前提知識
2. 段階別学習ステップ
3. 実践課題
4. 参考資料`,
business: `ビジネス観点で分析:
1. 市場への影響
2. 競合優位性
3. 実装コスト
4. ROI予測`
};
同じコンテンツから複数の価値を一気に抽出!
🚀 今後やりたいこと(妄想込み)
近日実装予定
- GitHub公開(コード整理がんばり中...)
- チーム共有機能(「俺のテンプレート使ってみて」機能)
- 使用統計(どのテンプレートが一番効果的かわかる)
夢のような機能(いつかできたら...)
// こんなのできたら面白そう
class AIWorkflow {
async autoAnalysis(content) {
const results = await Promise.all([
this.summarize(content), // 要約
this.extractKeywords(content), // キーワード
this.generateQuestions(content) // 質問生成
]);
return this.synthesize(results); // 統合分析
}
}
💭 個人開発者として感じたこと
開発時間の現実
- 平日: 夜中の2-3時間(子供が寝た後)
- 休日: 朝の1-2時間(みんなが起きる前)
- 合計: 週に約15時間
一番嬉しかった瞬間
朝起きてChrome Web Storeを見たら、新しいレビューが:
⭐⭐⭐⭐⭐ 「これ作った人天才すぎる。毎日使ってます!」
コーヒーが美味しすぎて泣きそうになりました ☕😭
技術的に一番学んだこと
- Content Scriptの制約下でのDOM操作テクニック
- 各AIサービスのUI変更に耐える設計パターン
- ユーザーの使用パターンは想定と90%違うという現実
🎯 最後に:同じことの繰り返しはもう終わり
「同じコンテンツでも、質問の仕方次第で全く違う価値が生まれる」
これがAI時代の一番面白いところだと思います。
でも毎回手打ちでプロンプト書くのは、プログラマーとしてのプライドが許さない!
ということで作ったこのツール、よかったら使ってみてください:
Chrome Web Store: ChatPage AI コンテンツ要約
使ってみて「これ便利じゃん!」って思ったら、レビューもらえると夜中の開発が続けられます 🙏
何か質問や「こんな機能欲しい」というリクエストがあれば、コメント欄でお気軽にどうぞ!
Discussion