【JavaScript】クリップボードにテキストをコピーする方法

Webサイトやアプリを開発する際、クリップボードにテキストをコピーする必要がある場合があります。
本記事では、初心者でもわかるように、JavaScriptでクリップボードにテキストをコピーする方法を解説します。

テキストをコピーする方法とは?

Clipboard APIとdocument.execCommand()の2種類の方法があります。

Clipboard APIを利用してコピーする

まずはClipboard APIを利用する方法を紹介します。
Clipboard APIは、クリップボードへのアクセスを可能にするAPIで、クリップボードに対して読み込みと書き込みができます。
以下は、Clipboard APIを使ってクリップボードにテキストをコピーするコード例です。

function copyToClipboardApi(text) {
  navigator.clipboard.writeText(text);
}
JavaScript

注意点

Clipboard APIは新しいブラウザでしか使えませんが、より高度な操作が可能です。
IEなど古いブラウザではサポートされていないので、注意が必要です。
ブラウザ対応表

document.execCommand()を利用してコピーする

document.execCommand()は、コマンドを実行するためのメソッドです。
‘copy’というコマンドを使うことで、クリップボードにテキストをコピーすることができます。
以下は、document.execCommand()を使ってクリップボードにテキストをコピーするコード例です。

function copyToClipboardCommand(text) {
  const input = document.createElement('textarea');
  input.value = text;
  document.body.appendChild(input);
  input.select();
  document.execCommand('copy');
  document.body.removeChild(input);
}
JavaScript

上記のコードでは、まずテキストを引数として受け取ります。
それを一時的に作成したtextarea要素に格納し、select()で選択し、document.execCommand(‘copy’)でコピーしています。
最後に、一時的に作成したtextarea要素を削除しています。

注意点

document.execCommand()を使う方法は古いブラウザでも動作するため、広く利用されています。
ただし、最新のブラウザでは、セキュリティ上の理由から使えない場合があります。
また、Safariでは、クリップボードへのアクセスに制限があるため、使えない場合があります。
ブラウザ対応表

まとめ

対応するブラウザによって実装が異なるので、事前に想定してから実装を行いましょう。
もしも、どちらも利用したい場合は以下のようなコードを試してみてはいかがでしょうか。

function copyToClipboard(text) {
  if (navigator.clipboard) {
    copyToClipboardApi(text);
  } else {
    copyToClipboardCommand(text);
  }
}
JavaScript

Webアプリケーション開発においては、クリップボードにテキストをコピーする機能は、ほぼ必須のものです。
是非、この記事を参考に実装してみてください。

役にたったと思ったら応援をお願いします m(._.)m

著者

Webエンジニア歴30年、フリーランスバックエンドエンジニア。

PHP歴約30年(Laravel 7年・FuelPHP 5年・CakePHP・自作FW)、
JavaScript歴約20年(React・Vue各4年)。
AWS(EC2 / CloudFront / RDS / API Gateway など)・
GCP(BigQuery)を使ったバックエンド開発を中心に、
複数の事業会社・受託案件でシステム設計から実装・運用まで担当しています。

PHPがバージョン4の時代から書いており、
Laravelが普及する前のフレームワーク乱立期も経験しています。
「昔はこう書いていたが今はこう」という変遷を肌で知っているエンジニアとして、
単なるコマンドの使い方だけでなく、なぜそうするのかの背景まで伝えることを意識して書いています。

このブログでは、実務で実際に詰まった箇所・調べたこと・気づいたことを
そのまま記事にしています。誰かの「詰まり」が解決するきっかけになれば幸いです。

千原 耕司をフォローする

役にたったと思ったら応援をお願いします m(._.)m

JavaScript
スポンサーリンク
シェアする
千原 耕司をフォローする
タイトルとURLをコピーしました