【神修正】Geminiのプロンプト抽出ブックマークレットが突然全滅?神AIに頼んだら秒で復活した件 ※プロンプト付
絶望の足音と、冷や汗が背中を伝う朝
自作の作業効率化ツールが急に動かなくなる絶望は、まるで朝の通勤ラッシュで愛用の自転車のタイヤがペシャンコにパンクした時のような、胃がキリキリ痛む感覚に似ています。
昨日まで便利に使えていた「Geminiの会話履歴を一発で抜き出す自作ブックマークレット」を開いた瞬間、画面には何も表示されず、冷や汗が背中を伝いました。
画面の向こうでUIの仕様変更という見えない地殻変動が起き、これまで頼り切っていた時短テクニックが一瞬で砕け散ったのです。
崩れ去った作業効率と、不毛なコピペ地獄
毎日コツコツ溜めてきたプロンプトという資産を前にして、手作業で1行ずつコピペする不毛な作業に戻ると思うと、頭がクラクラしてきました。
仕事の生産性を爆上げするためにAIを使いこなしているはずなのに、ツールメンテナンスに時間を奪われるのは本末転倒です。
画面を睨みつけながら途方に暮れていても、時間は刻一刻と過ぎていきます。
当事者に直談判!Gemini自身による外科手術
そこで私は、壊れたツールそのものをGemini自身に差し出し、最新のDOM構造に合わせて書き直してもらうという、AIによる外科手術を試みました。
エラーの症状と実際の出力結果を交互に提示し、重複テキストを削ぎ落とすやり取りを数回重ねることで、見事に完全復活を遂げたのです。
不具合の原因と、最新仕様に対応した解決プロセスは次の通りです。
プロンプト重複の主な原因
・Gemini側のUI更新により、画面表示用と内部アクセシビリティ用の要素が二重生成されていたこと
・文字データを一括取得する処理が、入れ子構造のタグを重複して拾ってしまっていたこと
修正時のポイント
・最外枠のメッセージブロックのみを1発言として厳密に指定したこと
・文字データの取得方法を最適化し、重複する文字列を自動でカットするロジックを組んだこと
パズルがハマる爽快感!快適な作業空間の奪還
修正されたJavaScriptコードをブラウザのブックマークに上書きした瞬間、求めていたテキストが整然と画面に表示されました。
カチッとパズルがハマったような爽快感と、指先から伝わる作業のスムーズさに、思わず小さなガッツポーズが出ました。
AIの仕様変更に振り回されるストレスから解放され、再び快適な作業空間を取り戻せた感動は格別です。

以上いかがでしたでしょうか?
もし共感したら、コメントやスキを押してくれると励みになります。
この記事が少しでもお役に立てたら、今後の活動の励みになりますので、広告を見ていただいたり、チップいただけると嬉しいです!
なお、チップは全て地元NPOへ寄付させていただきます。
※ブックマークを編集してURLの箇所に下記コードをコピーして使えます。(PC版ChromeでもOK)
javascript:(function(){const d=document.createElement('div');d.style='position:fixed;bottom:0;left:0;right:0;z-index:2147483647;background:rgba(30,30,30,0.95);border-top:2px solid #1a73e8;padding:12px;border-radius:16px 16px 0 0;box-shadow:0 -4px 15px rgba(0,0,0,0.5);font-family:sans-serif;box-sizing:border-box;padding-bottom:calc(12px + env(safe-area-inset-bottom));color:#fff;';const b=document.createElement('button');b.innerText='EXTRACT';b.style='width:100%;padding:12px;background:#1a73e8;color:#fff;border:none;border-radius:8px;font-weight:bold;font-size:16px;margin-bottom:8px;box-sizing:border-box;';const t=document.createElement('textarea');t.style='width:100%;height:150px;font-size:14px;border:1px solid #444;padding:8px;box-sizing:border-box;border-radius:4px;display:block;margin-bottom:8px;background:#fff;color:#000;';const cp=document.createElement('button');cp.innerText='COPY';cp.style='width:100%;padding:10px;background:#34a853;color:#fff;border:none;border-radius:8px;font-weight:bold;margin-bottom:8px;box-sizing:border-box;';const c=document.createElement('button');c.innerText='CLOSE';c.style='width:100%;background:#444;color:#fff;border:none;padding:8px;font-size:14px;border-radius:4px;box-sizing:border-box;';b.onclick=()=>{let found=[];/* ユーザーの発言ブロック(最外枠)のみを絶対指定 */const uqList=document.querySelectorAll('user-query, [data-message-author-role="user"]');uqList.forEach(uq=>{/* 表示用の最も深いテキスト保持ノードを1個だけピンポイント取得 */let target=uq.querySelector('.query-text-content, .query-text, p')||uq;let rawTxt=(target.textContent||'').replace(/あなたのプロンプト|Your Prompt/g,'').trim();if(!rawTxt)return;/* 完全・部分重複テキストを強力カット(文字列が2重連なっている場合の判定) */let cleanTxt=rawTxt;const half=Math.floor(cleanTxt.length/2);for(let i=half;i>=5;i--){const head=cleanTxt.substring(0,i).trim();const tail=cleanTxt.substring(i).trim();if(head===tail||tail.startsWith(head)){cleanTxt=head;break}}if(cleanTxt&&!found.includes(cleanTxt)){found.push(cleanTxt)}});if(found.length>0){t.value=found.map((txt,i)=>'('+(i+1)+') '+txt).join('\n\n')}else{t.value='Not found. Try scrolling up/down to load prompts.'}};cp.onclick=()=>{t.select();if(navigator.clipboard&&navigator.clipboard.writeText){navigator.clipboard.writeText(t.value).then(()=>{const old=cp.innerText;cp.innerText='COPIED!';setTimeout(()=>cp.innerText=old,2000)}).catch(()=>{document.execCommand('copy')})}else{document.execCommand('copy')}};c.onclick=()=>{document.body.removeChild(d)};d.appendChild(b);d.appendChild(t);d.appendChild(cp);d.appendChild(c);document.body.appendChild(d)})();
#Gemini #プロンプト #ブックマークレット #AI活用 #業務効率化 #JavaScript #生成AI #時短術 #Note書き方 #生産性向上
#悪用厳禁 #失敗から学ぶ
<参考プロンプト>
(1) 最近Geminiのチャットで、自分が入力したプロンプトを取得する下記#ブックマークレットプログラムで、取りこぼしや先頭と末尾だけしか取得出来ない様になっているので、対応できる様に修正してください。
#… 最近Geminiのチャットで、自分が入力したプロンプトを取得する下記#ブックマークレットプログラムで、取りこぼしや先頭と末尾だけしか取得出来ない様になっているので、対応できる様に修正してください。 #ブックマークレット javascript:(function(){const d=document.createElement('div');d.style='position:fixed;bottom:0;left:0;right:0;z-index:2147483647;background:rgba(30,30,30,0.95);border-top:2px solid #1a73e8;padding:12px;border-radius:16px 16px 0 0;box-shadow:0 -4px 15px rgba(0,0,0,0.5);font-family:sans-serif;box-sizing:border-box;padding-bottom:calc(12px + env(safe-area-inset-bottom));color:#fff;';const b=document.createElement('button');b.innerText='EXTRACT';b.style='width:100%;padding:12px;background:#1a73e8;color:#fff;border:none;border-radius:8px;font-weight:bold;font-size:16px;margin-bottom:8px;box-sizing:border-box;';const t=document.createElement('textarea');t.style='width:100%;height:150px;font-size:14px;border:1px solid #444;padding:8px;box-sizing:border-box;border-radius:4px;display:block;margin-bottom:8px;background:#fff;color:#000;';const cp=document.createElement('button');cp.innerText='COPY';cp.style='width:100%;padding:10px;background:#34a853;color:#fff;border:none;border-radius:8px;font-weight:bold;margin-bottom:8px;box-sizing:border-box;';const c=document.createElement('button');c.innerText='CLOSE';c.style='width:100%;background:#444;color:#fff;border:none;padding:8px;font-size:14px;border-radius:4px;box-sizing:border-box;';b.onclick=()=>{let found=[];/* Deep Scan for both Gemini and ChatGPT /const s=['[data-message-author-role="user"]','.user-query-content','.query-text','.prose.max-w-3xl','div[data-testid="user-message"]'];s.forEach(sel=>{document.querySelectorAll(sel).forEach(el=>{let txt=el.innerText.replace(/|/g,'').trim();if(txt&&!found.includes(txt))found.push(txt)})});/* Additional Gemini specific fallback */if(found.length===0){document.querySelectorAll('div[dir="ltr"]').forEach(el=>{if(el.closest('.query-content')||el.parentElement.innerText.length < 5000){let txt=el.innerText.trim();if(txt&&txt.length>0&&!found.includes(txt))found.push(txt)}})}if(found.length>0){t.value=found.map((txt,i)=>'('+(i+1)+') '+txt).join('\n\n')}else{t.value='Not found. Try scrolling to see prompts.'}};cp.onclick=()=>{t.select();document.execCommand('copy');navigator.clipboard.writeText(t.value).then(()=>{const old=cp.innerText;cp.innerText='COPIED!';setTimeout(()=>cp.innerText=old,2000)})};c.onclick=()=>{document.body.removeChild(d)};d.appendChild(b);d.appendChild(t);d.appendChild(cp);d.appendChild(c);document.body.appendChild(d)})();
(2) 出力される一覧のテキストが、各アイテム毎に重複した内容が出ています。
(3) 出力される2番目のアイテム以降で依然として重複したテキストがアイテム毎に出ています。
(4) 下記の様な感じで、それぞれの項目の中で同じテキストが繰り返されています。
例)
(1) スズキが出資している全個体電池のメーカーはどこでしたか?
スズキが出資している全個体電池のメーカーはどこでした… 下記の様な感じで、それぞれの項目の中で同じテキストが繰り返されています。 例) (1) スズキが出資している全個体電池のメーカーはどこでしたか? スズキが出資している全個体電池のメーカーはどこでしたか? (2) 最近公開されたスズキのBEVのeスカイのプロトタイプで、BYD製の26kwのLFPバッテリーが使われていますが、カナデビアの全個体電池が車輛に使われる可能性はいつ頃でしょうか? 最近公開されたスズキのBEVのeスカイのプロトタイプで、BYD製の26kwのLFPバッテリーが使われていますが、カナデビアの全個体電池が車輛に使われる可能性はいつ頃でしょうか? (3) ただもし「eスカイ」が大幅に売れると、BYDとしては面白くないでしょうから、バッテリーの供給リスクにつながるんじゃないかって思われるので、その点を考慮したらどうでしょうか? ただもし「eスカイ」が大幅に売れると、BYDとしては面白くないでしょうから、バッテリーの供給リスクにつながるんじゃないかって思われるので、その点を考慮したらどうでしょうか? (4) スズキが全個体電池を手掛けるからには手に届きやすいコストにしてくると考えられますね。 スズキが全個体電池を手掛けるからには手に届きやすいコストにしてくると考えられますね。
(5) ユーザーのテキスト表示用だけを最初から取得する事は出来ませんか?
(6) まだ重複していますし、1つ前のプログラムでは更にダブって取り込まれていました。
(7) いい感じになりました。ありがとうございました。
(8) 上記のやりとりを元にして、少し前からGeminiのプロンプトを一覧で取得するブックマークレットがGeminiの表示仕様の変更が有った様で、一覧取得出来なくなっていました。その為Geminiに最新の仕様… 上記のやりとりを元にして、少し前からGeminiのプロンプトを一覧で取得するブックマークレットがGeminiの表示仕様の変更が有った様で、一覧取得出来なくなっていました。その為Geminiに最新の仕様に基づいて一覧を取得する様にブックマークレットプログラムを修正してもらったというストーリーで、次の点を考慮してnote向けの記事を書いてください。 ①noteで注目を集めるキーワードを織り交ぜる。 ②冒頭に共感を誘うような強めのネガティブ要素もしっかり入れる。 ③総じて「共感→問題提起→解決策→感動」の構成とする。 ④五感を刺激する「シズル」を織り込む。 ⑤身近なものや日常のことに例えること。 ⑥章に分けて、各章のタイトルは共感を呼ぶ刺激的な内容で大きい文字とする。 ⑦記事のタイトルも作ってください。切り口としては、失敗したけど解決出来た風で共感が持てて検索に掛かり易く、また4U法則を交えたものにする。 ⑧表になる内容は、表は使わず箇条書きにする。 ⑨ 記事の内容に沿うように、SEOに強いワードを入れてください。 ⑩ 絵文字や特殊記号は使わないでください。 ⑪視覚的な読みやすさを最優先してください。 ⑫すべての文 の「。」の後に改行を入れ、その行(空行になるはずの行)に全角スペースを1つだけ入力し、さらに改行を入れてから、次の文を開始してください。 ⑬文章をダラダラと繋げず、1文1文を短く区切って配置してください。 ⑭記事全体で1000文字以内に収まる様にしてください。 記事が終わった後に下記の#文末テキストを挿入してください。 その後に続いて、noteでヒットしそうな記事内容と関連したハッシュタグも作ってください。ハッシュタグは改行せずに半角スペースで区切って横にならべてください。 #文末テキスト 以上いかがでしたでしょうか? もし共感したら、コメントやスキを押してくれると励みになります。 この記事が少しでもお役に立てたら、今後の活動の励みになりますので、広告を見ていただいたり、チップいただけると嬉しいです! なお、チップは全て地元NPOへ寄付させていただきます。
(9) 章に分けて、章は見出し設定をしてください。
(10) 下記案件で感動している普通の60歳の男性で髪の毛は普通にある人の漫画風のイラストで、 サイズは16:9の横長、背景は白地で青い万年筆の線画で描いてください。
<案件>
Geminiのプロンプトを一覧… 下記案件で感動している普通の60歳の男性で髪の毛は普通にある人の漫画風のイラストで、 サイズは16:9の横長、背景は白地で青い万年筆の線画で描いてください。 <案件> Geminiのプロンプトを一覧化するアプリをスマホで使って頷いている60代の男性
(11) スマホは1台だけにしてください
いいなと思ったら応援しよう!
ここまで読んでくださり、ありがとうございます。
静岡生まれの還暦オヤジ、「とりあえずやってみる」を合言葉に記事を書いています。
もし「ちょっと応援してやるか」と思っていただけたら、チップで励ましてもらえると次の“やってみる”の力になります😊