本文へスキップ
  1. Web BENTO JS
  2. カテゴリ一覧
  3. コピー・共有
08 / CLIPBOARD 12 パーツ

クリップボードコピーのJS実装 12選

コピペで動くコピー・共有パーツのサンプル集です。プレビューのボタンは実際にクリックでコピー・共有できます。HTML / CSS / JS タブでコードを確認し、全部コピーを押せば1回の貼り付けで完成します。すべてnavigator.clipboardexecCommand フォールバック内蔵の依存ライブラリなしのバニラJSで、data-bnto-* 属性による自動初期化式です。

該当するパーツが見つかりませんでした。

テキストコピー

<!-- data-copy の中身がそのままコピーされる -->
<button type="button" class="bnto-cp1" data-bnto-copy
  data-copy="ここに書いた文字列がコピーされます">
  <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect width="14" height="14" x="8" y="8" rx="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>
  <span class="lb">テキストをコピー</span><span class="ok">コピーしました ✓</span>
</button>
使い方のコツ

コピーする文字列は data-copy 属性を書き換えるだけです。navigator.clipboardhttps(または localhost)でしか動かない点に注意——このJSは非対応環境で自動的に execCommand('copy') へフォールバックします。

npm install web-bento
npx bento init

コードブロックコピー

<!-- pre の中身がコピーされる。記事内に複数置いてもOK -->
<div class="bnto-cp2" data-bnto-codecopy>
  <button type="button" class="cp"><span class="lb">コピー</span></button>
  <pre>npm install web-bento
npx bento init</pre>
</div>
使い方のコツ

技術ブログのコード掲載に向いています。pre の中にHTMLタグを書くときは &lt; &gt; にエスケープしてください(textContent で取り出すのでコピー時は元のタグに戻ります)。

URLコピー(ツールチップ付き)

<button type="button" class="bnto-cp3" data-bnto-urlcopy>
  <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"/><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"/></svg>
  このページのURLをコピー
  <span class="tip" role="status">コピーしました!</span>
</button>
使い方のコツ

SNSボタンが使われにくいBtoBサイトでも「URLをコピー」はよく使われます。ツールチップの role="status" でスクリーンリーダーにも成功が伝わります。記事ページの末尾やヘッダーに常設するのがおすすめです。

入力欄の値コピー(クーポン風)

<div class="bnto-cp4" data-bnto-inputcopy>
  <input type="text" value="BENTO-2026-OFF30" readonly aria-label="クーポンコード">
  <button type="button" class="cp"><span class="lb">コピー</span></button>
</div>
使い方のコツ

クーポンコード・招待コード・APIキーの表示に向いています。readonly を付けておくと誤編集を防げます。コードを変えるときは value 属性を書き換えるだけでOKです。

Web Share API(フォールバック付き)

<!-- 対応ブラウザ:OSのシェアシート/非対応:URLコピーに自動切替 -->
<button type="button" class="bnto-cp5" data-bnto-share
  data-share-title="ページのタイトル"
  data-share-text="紹介文をここに">
  <svg width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8"/><polyline points="16 6 12 2 8 6"/><line x1="12" x2="12" y1="2" y2="15"/></svg>
  <span class="lb">このページをシェア</span><span class="ok">URLをコピーしました ✓</span>
</button>
使い方のコツ

navigator.sharehttpsのページでしか動きません。対応はモバイルブラウザ中心で、PCはOS・ブラウザにより対応が分かれます(Windows版Chrome/Edge、macOS版Safariなどは対応)。非対応環境でボタンが「押しても無反応」にならないよう、URLコピーへのフォールバックを必ずセットで用意してください。

SNSシェアリンク生成

<!-- data-share-text + ページURLで intent リンクを組み立てて開く -->
<button type="button" class="bnto-cp6" data-bnto-snsshare
  data-share-text="シェア時の文言をここに">
  <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg>
  シェアする
</button>
使い方のコツ

ボタンを押すと X(旧Twitter)の投稿画面が開きます。APIキー不要で今も使える公式の intent リンク方式です。data-share-text#ハッシュタグ を含めてもOK(encodeURIComponent が自動処理)。&via=アカウント名 で「via @〜」も付けられます。Facebook・LINE など他サービスも、それぞれのシェアURLに差し替えれば同じ仕組みで動きます。

カラーコードチップ

<!-- data-hex と --sw を揃えてチップを増やす -->
<div class="bnto-cp7" data-bnto-colorchips>
  <button type="button" class="chip" data-hex="#E8557E" style="--sw:#E8557E;">
    <i class="sw"></i><span class="lb">#E8557E</span>
  </button>
  <button type="button" class="chip" data-hex="#3DA9E0" style="--sw:#3DA9E0;">
    <i class="sw"></i><span class="lb">#3DA9E0</span>
  </button>
  <!-- .chip を色の数だけ -->
</div>
使い方のコツ

デザインシステムやスタイルガイドのページに最適です。チップは data-hex--sw を揃えて増やすだけです。rgb() や CSS変数名をコピーさせたいときは data-hex の中身を差し替えればOKです。

お礼メールの定型文
件名:お打ち合わせのお礼

株式会社◯◯ ◯◯様

本日はお時間をいただき
ありがとうございました。

メールテンプレコピー

<!-- .tpl の中身(改行込み)がそのままコピーされる -->
<div class="bnto-cp8" data-bnto-mailtpl>
  <div class="hd">
    <span>お礼メールの定型文</span>
    <button type="button" class="cp"><span class="lb">テンプレをコピー</span></button>
  </div>
  <pre class="tpl">件名:お打ち合わせのお礼

株式会社◯◯ ◯◯様

本日はお時間をいただき
ありがとうございました。</pre>
</div>
使い方のコツ

問い合わせ返信・営業メール・社内報告などの定型文集に向いています。pre なので改行やインデントがそのままコピーされます。ソースコード上の字下げもコピーに含まれる点だけ注意してください(テンプレ部分は左端から書くのが安全です)。

商品単価在庫
のり弁当480円12
から揚げ弁当580円8

表をコピー(表計算ソフト対応)

<!-- table の中身がTSV(タブ区切り)になってコピーされる。th / td 両対応 -->
<div class="bnto-cp9" data-bnto-tablecopy>
  <table>
    <thead>
      <tr><th>商品</th><th>単価</th><th>在庫</th></tr>
    </thead>
    <tbody>
      <tr><td>のり弁当</td><td>480円</td><td>12</td></tr>
      <tr><td>から揚げ弁当</td><td>580円</td><td>8</td></tr>
    </tbody>
  </table>
  <button type="button" class="cp"><span class="lb">表をコピー</span></button>
</div>
使い方のコツ

料金表や仕様表を「Excelで扱いたい」ユーザー向けの気配りパーツです。セル内の改行や連続する空白はスペース1つに置換しています(残すと貼り付け先で行がずれるため)。colspan / rowspan の結合セルは1セルとして出力されるので、列がずれる場合は結合のない表で使ってください。

画像をコピー

<!-- canvas に描いた画像を ClipboardItem(image/png) でコピー -->
<div class="bnto-cp10" data-bnto-imagecopy>
  <canvas width="248" height="110" aria-label="デモ画像"></canvas>
  <button type="button" class="cp"><span class="lb">画像をコピー</span></button>
</div>
使い方のコツ

QRコードやグラフなどCanvasで生成した画像をそのままコピーさせたいときに便利です。画像コピーは ClipboardItem が使える https のページ限定で、形式は image/png が最も広く対応しています。非対応環境では自動でPNGダウンロードに切り替わるため、ユーザーが行き止まりになりません。既存の img をコピーしたい場合は、いったんCanvasへ drawImage してから同じ流れでコピーできます(別オリジンの画像はCORS許可が必要です)。

Markdownでコピー

<!-- ページタイトルとURLを [タイトル](URL) 形式でコピー -->
<div class="bnto-cp11" data-bnto-mdcopy>
  <div class="sw" role="group" aria-label="コピー形式の切替">
    <button type="button" class="md is-on" aria-pressed="true">Markdown</button>
    <button type="button" class="pl" aria-pressed="false">プレーン</button>
  </div>
  <button type="button" class="cp"><span class="lb">タイトルとURLをコピー</span></button>
</div>
使い方のコツ

ドキュメントツールやチャットなどMarkdownが使える場所へのページ共有がワンクリックになります。document.titlelocation.href を自動取得するので、どのページに置いても書き換え不要です。形式を増やしたいとき(HTMLの a タグ形式など)は、text を組み立てている部分に分岐を足すだけです。

この文章の好きな部分をドラッグで選択してから、下のボタンを押してください。選択した文がページ名とURL付きの引用としてコピーされます。

引用としてコピー

<!-- ページ内で選択したテキストを「"選択文" — 出典: ページ名(URL)」でコピー -->
<div class="bnto-cp12" data-bnto-quotecopy>
  <p class="src">引用元になるサンプル文章をここに</p>
  <button type="button" class="cp"><span class="lb">引用としてコピー</span></button>
  <p class="st" aria-live="polite"></p>
</div>
使い方のコツ

記事の一文を出典付きで引用シェアしてもらうための気配りパーツです。ポイントはボタンの mousedownpreventDefault() していること——これが無いとボタンを押した瞬間に選択が解除されてしまいます。引用符や「出典:」の書式は quote を組み立てている1行を書き換えるだけで変更できます。デモの対象は .src の文章ですが、実際はページ内のどこを選択してもコピーできます。

クリップボードAPIの基礎知識

「コピーする」ボタンは、クーポンコード・シェア用URL・コードスニペットなど手入力させたくない文字列があるページの定番UIです。現在の標準は navigator.clipboard.writeText()(非同期Clipboard API)で、このページのサンプルはすべて依存ライブラリなしのバニラJavaScriptで実装しています。

使い方は、HTML / CSS / JSの3タブをそれぞれ貼り付けるか、「全部コピー」ボタンでひとまとめになったコードを1回貼り付けるだけです。初期化は data-bnto-* 属性の自動検出式なので、同じページに何個置いても、うっかりコードを2回貼っても壊れません。

navigator.clipboard は https 必須(セキュアコンテキスト)

navigator.clipboard が使えるのは https のページと localhost だけです。http のテストサーバーや一部の社内環境では navigator.clipboard 自体が undefined になるため、「ローカルでは動いたのに本番で動かない」(またはその逆)が起こりがちです。サンプルでは window.isSecureContext もあわせてチェックしています。

execCommand フォールバックで古い環境もカバー

非対応環境では、一時的に textarea を生成して document.execCommand('copy') を実行する古典的な方法に自動で切り替えます。execCommand は非推奨APIですが、削除されておらず後方互換の受け皿として今も有効です。このページの全パーツがこの2段構えを内蔵しているので、貼り付け先の環境を選びません。

コピー成功のフィードバックUX

クリップボードへのコピーは画面に何の変化も起こさないため、「コピーしました ✓」の明示的なフィードバックが必須です。ボタンのラベル・色を1.5秒ほど切り替える、ツールチップを出す、トースト通知を出す、のいずれかを必ず添えましょう。連打対策として setTimeout のIDを保持して clearTimeout する実装にしてあります。

「全部コピー」と「分けて貼る」の使い分け

「全部コピー」を使うと、HTML・CSS・JavaScriptがひとつの自己完結ブロックとしてコピーされるので、1回の貼り付けだけですぐ動きを確認できます。動作のお試しや、1ページ完結のLPに組み込むときはこの方法が手軽です。

一方、本番サイトへ本格的に組み込む場合は、CSSはスタイルシート(.cssファイル)へ、JavaScriptは</body>直前や共通の.jsファイルへ、HTMLは使いたい場所へと分けて貼るのが一般的です。スタイルとスクリプトを1か所に集約できるため、複数ページ・複数パーツで使い回すときの管理がしやすく、ブラウザのキャッシュも効きやすくなります。なお、同じパーツをページ内で何度も使う場合でも、CSSとJSを貼るのは1回だけで大丈夫です(初期化スクリプトが該当要素すべてに自動で効きます)。

よくある質問

navigator.clipboard が動かないことがあるのはなぜですか?
navigator.clipboardhttps(または localhost)のセキュアコンテキストでしか使えません。http のページや古いブラウザでは動かないため、このページのサンプルはすべて document.execCommand('copy') への自動フォールバックを内蔵しています。
コピーしたコードはそのまま動きますか?
はい。「全部コピー」を押すとHTML・CSS・JSがひとつの自己完結ブロックになってコピーされ、ページに貼り付けるだけで動きます。ライブラリの読み込みは一切不要です。
同じページに複数設置しても大丈夫ですか?
大丈夫です。初期化スクリプトは data 属性で対象を自動検出し、初期化済みの要素はスキップするため、複数設置してもコードを2回貼っても壊れません。
Web Share API が使えないブラウザではどうなりますか?
navigator.share が未対応の環境(主にPCブラウザ)では、自動的にページURLのクリップボードコピーに切り替わり、「URLをコピーしました」とフィードバックを表示します。ユーザーを行き止まりにしない設計です。
このページのパーツはAIコーディングツールでも使えますか?
はい。Claude CodeやCursorのようにWebページを読めるAIには、このページのURLとパーツ名(例:「コードブロックコピー」)を伝えるだけで実装を指示できます。AIがWebを読めない場合は、「全部コピー」で取得した自己完結ブロックをチャットに貼り付けて調整を頼むのが確実です。改変後のコードは、公開前に動作確認することをおすすめします。

関連カテゴリ

コピー・共有パーツと組み合わせて使いやすいパーツはこちらです。