生成AI活用

AIでコードブロックにコピーボタンを追加する【CSS+JS生成】

更新日:2026-05-10 著者:unigram 読了目安:3分

この記事の要点

AIでコードブロックにコピーボタンを追加する方法。Clipboard APIを使ったコピー処理とフィードバック表示のCSS+JSをプロンプト例・コード付きで解説します。

技術系ブログでよく見る「コードをコピー」ボタン。クリックするとクリップボードにコードがコピーされ、ボタンが「コピーしました!」に変わるUIです。

方法①:既存のHTMLからCSS・JSを生成する

AIへのプロンプト例

以下のコードブロックHTMLに、
・右上に「コピー」ボタンを表示するCSS
・クリックするとクリップボードにコードをコピーするJavaScript
・コピー後2秒間「コピーしました!」に変わり、元に戻る処理
を追加してください。

<div class="code-block">
  <pre><code class="code-content">const greeting = 'Hello, World!';
console.log(greeting);</code></pre>
</div>

生成されたCSS例

.code-block {
  position: relative;
  background: #1e1e1e;
  border-radius: 8px;
  overflow: hidden;
}
.code-block pre {
  margin: 0;
  padding: 20px;
  overflow-x: auto;
  color: #d4d4d4;
  font-family: 'Menlo', 'Monaco', monospace;
  font-size: 0.875rem;
  line-height: 1.7;
}
.copy-btn {
  position: absolute;
  top: 10px;
  right: 10px;
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.2);
  color: #d4d4d4;
  font-size: 0.75rem;
  padding: 4px 10px;
  border-radius: 4px;
  cursor: pointer;
  transition: background 0.2s;
}
.copy-btn:hover {
  background: rgba(255, 255, 255, 0.2);
}
.copy-btn.copied {
  color: #4ec9b0;
  border-color: #4ec9b0;
}

生成されたJS例

document.querySelectorAll('.code-block').forEach(block => {
  const btn = document.createElement('button');
  btn.className = 'copy-btn';
  btn.textContent = 'コピー';
  block.appendChild(btn);

  btn.addEventListener('click', async () => {
    const code = block.querySelector('.code-content').textContent;
    await navigator.clipboard.writeText(code);
    btn.textContent = 'コピーしました!';
    btn.classList.add('copied');
    setTimeout(() => {
      btn.textContent = 'コピー';
      btn.classList.remove('copied');
    }, 2000);
  });
});

📝 用語メモ

navigator.clipboard.writeText():クリップボードにテキストを書き込むブラウザAPIです。async/awaitで非同期処理として書きます(コピー完了を待ってから次の処理へ進みます)。

方法②:HTMLとセットで生成する

AIへのプロンプト例

コードブロックに「コピー」ボタンが右上についたUIをHTML・CSS・JavaScriptで作ってください。
・ダークテーマのコードブロック
・コピーボタンはホバーで明るくなる
・コピー後「コピーしました!」に変わり2秒後に戻る
・複数のコードブロックがあっても各自で動作する

ポイント

  • navigator.clipboardはHTTPS環境でないと動作しません。ローカル開発環境ではlocalhostなら使えます
  • 複数コードブロックがある場合は、JSがすべての.code-blockにボタンを自動で追加するように設計するとスマートです

この記事を書いた人

unigram
web、印刷、映像などの制作をしています。@京都、フリーランス18年目。 大学で講師もしています。 自身の備忘録も兼ねて、Web制作・WordPress・SEO・GA4・生成AI活用をテーマに情報発信しています。わかりやすく優しい内容で記事作成を心がけています。