クリップボードは、一部のオペレーティングシステムがアプリケーションプログラム内およびアプリケーションプログラム間での短期的な保存と転送のために提供するバッファです。クリップボードは通常一時的なもので名前は付けられておらず、その内容はコンピュータのRAMに保存されます。[1]
クリップボードは、切り取り、コピー、貼り付けの操作をプログラムが指定できるアプリケーション プログラミング インターフェイスを提供します。ユーザーがこれらの操作を指示する方法 (キーバインドやメニュー選択など) はプログラム側で定義します。要素がコピーまたは切り取られると、クリップボードには、要素がどこに貼り付けられても適切な結果が得られるだけの情報が保存されている必要があります。アプリケーション プログラムは、オペレーティング システムが提供するクリップボード機能を拡張できます。クリップボードマネージャーは、ユーザーにクリップボードに対する追加の制御機能を提供する場合があります。特定のクリップボードセマンティクスはオペレーティング システムによって異なり、同じシステムのバージョン間でも異なる場合があり、プログラムやユーザーの設定によって変更されることもあります。
Windows、Linux、macOSは単一のクリップボードトランザクションをサポートしています。[2] [3]
歴史
クリップボードを小さなテキスト スニペットのバッファーとして初めて使用したのは、ペンティ カネルバです。彼はクリップボードを使用して、削除したテキストを保存し、復元できるようにしました。[4]ある場所でテキストを削除して別の場所で復元できるため、この場合、「削除」という用語は想定されていませんでした。ラリー テスラーは1973 年にこれをカット、コピー、ペーストに改名し、このバッファーを「クリップボード」と名付けました。これらのテクニックでは、コピーまたはカットしたデータを一時的に保存するためにクリップボードが必要になるためです。[5]
データ形式
アプリケーションは、オブジェクトのシリアル化された表現、またはプロミス(大きなオブジェクトの場合)のいずれかを提供することで、クリップボードを介して通信します。 [6]状況によっては、特定の共通データ形式の転送が、抽象ファクトリの使用によって不透明に実現される場合があります。たとえば、Mac OS X は、 NSImageと呼ばれるクラスを使用して、クリップボードに格納された画像データへのアクセスを提供しますが、オブジェクトのバックアップとなる画像データの実際の形式は隠されています。送信側アプリケーションと受信側アプリケーションは、それらの間で転送できる形式をネゴシエートします。多くの場合、アクティブなGUI ウィジェットが許容可能な型変換を提供します。ペーストボードでは、URL、色、画像、文字列、属性付き文字列(リッチテキスト)、サウンドなどの一般的な項目を転送できます。オペレーティングシステムと GUI ツールキットは、リッチテキストからプレーンテキストへの変換やその逆など、いくつかの一般的な変換を提供する場合があります。データ転送用のさまざまな型識別子が最新のオペレーティングシステムによってサポートされており、 MIMEとUniform Type Identifierの間など、型システム間の許容可能なマッピングを自動的に提供できます。[7] [8]
コンピュータセキュリティ
クリップボードハイジャックまたはクリップボードインジェクションは、クリップボードの内容を悪意のあるデータ(悪意のあるウェブサイトへのリンクなど)に置き換えるエクスプロイトです。 [9]たとえば、ユーザーが仮想通貨の受信アドレスをクリップボードにコピーすると、ハイジャックプログラムはそれをハイジャック犯が管理するアドレスで上書きできるため、ユーザーがそのアドレスを貼り付けると、仮想通貨は意図した受信者ではなくハイジャック犯に送信されます。[10]一部のセキュリティホールは修正されましたが、JavaScript は「ペーストジャッキング」と呼ばれる攻撃によってクリップボードの内容を変更するために引き続き使用できます。[11] [12]この攻撃を開発した Dylan Ayrey は、このエクスプロイトを使用してユーザーをだまして実行したくないコマンドを実行させる方法を示す Web サイトを立ち上げました。[13]
ウェブページがクリップボードのデータを取得するエクスプロイトが存在します。2013年初頭、研究者はAndroidベースのパスワードマネージャーに起因するリスクを明らかにし、これらのアプリのうち最も人気のある21のパスワードが、非常に低いレベルの権限を持つアプリを含むAndroidデバイス上の他のアプリからアクセスできる方法を文書化しました。[14] Joe Siegristは、これは「Androidで実行されるすべてのものに影響を与えるOSレベルの問題」であると指摘しています。[15] [1]
クリップボードの管理と拡張機能

クリップボード マネージャー拡張機能は、オペレーティング システムの統合クリップボード機能に機能を追加します。これらは、ユーザーがクリップボードを操作できるようにするアプリケーションです。複数の互換性のない GUI ツールキットを使用する Linux などのプラットフォームでは、異なるフレームワークを使用するアプリケーション間でデータを転送するためにクリップボード マネージャーがよく使用されます。
クリップボード マネージャーが複数のカット アンド ペースト トランザクションを提供する場合、クリップボードはスタックまたはスクラップ ブックとして扱われ、新しいカット アンド コピーは最近のトランザクションのリストに配置されます。標準の貼り付け操作では最新のトランザクションがコピーされますが、特殊な貼り付けでは他の保存されたトランザクションにアクセスできます。これらのマネージャーは通常、トランザクション履歴を表示するウィンドウも提供し、ユーザーは以前のコピーを選択、編集、フォーマットの変更、さらには検索も行うことができます。
ほとんどのオペレーティング システム (Windows、macOS、Linux、X11、Android、iOS など) はクリップボードの内容を永続的なストレージに保存しません (ユーザーがログアウトするかシステムを再起動するとクリップボードの内容は削除されます)。そのため、クリップボードを永続的に保存する機能が追加されました。別の例としては、コピーまたは切り取りイベント時にクリップボードのデータをオンラインの場所に保存し、このデータをオンライン アプリケーションで貼り付けられるようにすることで、ローカル クリップボードをオンライン アプリケーションで動作させることが挙げられます。クリップボード マネージャーは、コピーと貼り付けをサポートしていないソフトウェアの制限を克服するツールとしても機能します (たとえば、リモート Windows サーバーにログインしているときに、ユーザー名とパスワードをコピーして貼り付けることはできません)。
オペレーティングシステム固有のクリップボード
アミーガOS
Amigaオペレーティングシステムは256ユニットを使用するため、複数のクリップボードを同時に使用できます。[16]
アンドロイド
Android は、最大 1 つのクリップ オブジェクトを保持でき、システム全体でアクセスできるクリップボードを提供します。単純なテキストはクリップボードに直接保存され、複雑なデータは参照によって保存されます。クリップ オブジェクトには、テキスト文字列、URI オブジェクト、またはインテントの 3 つの形式のいずれかがあります。[17]
クリップボードとやりとりするために、アプリはClipboardManagerクラス[18]とシステムコールを使用してオブジェクトの切り取り、コピー、貼り付けを行います。
Android 8.0 では、クリップボードが初めてユーザー インターフェースに表示されます。ユーザーがクリップボードから貼り付けようとしている状況では、「クリップボード」オプションが表示され、ユーザーは過去にクリップボードにコピーまたは切り取った多くのオブジェクトにアクセスできます。それ以外の以前のバージョンでは、ユーザーはクリップボードを利用できるアプリ以外ではクリップボードにアクセスできません。
iOS
クリップボードは、OS Xと同様にiOSでも「ペーストボード」と呼ばれます。このオペレーティングシステム上のアプリは、UIPasteboardクラスのインスタンスと呼ばれる追加のペーストボードを作成できます。これはパブリックまたはプライベートにすることができます。1つのインスタンスには、1つのアイテムまたは異なる形式の複数のアイテムを保持できます。[19]
フォーマットはUniform Type Identifiers(UTI)によって識別されます。[20]
ペーストボードに含まれるデータはGUI経由ではアクセスできず、システムとアプリケーションからのみアクセスできます。
macOS
macOSのクリップボードには、 1 つの項目が複数の形式で保持されます。
クリップボードの内容は、Finderの編集メニューからクリップボードを表示メニュー項目を選択すると表示できます。生データと保存された形式は、クリップボードビューアを使用して表示できます。[21]
次のコマンドを使用すると、コマンドラインからクリップボードにアクセスできます。[22] [23]
$ # データをクリップボードにコピーするには:
$ echo 'hello world' | pbcopy
$ # クリップボードから貼り付けるには: $ pbpaste
hello world
Microsoft Windows と ReactOS
ReactOS コマンド clip | |
| 開発者 | Microsoft、ReactOS 貢献者 |
|---|---|
| オペレーティング·システム | Windows、ReactOS |
| タイプ | 指示 |
| ライセンス | Windows:商用 ソフトウェア ReactOS: GNU General Public License |
| Webサイト | docs.microsoft.com/en-us/windows-server/administration/windows-commands/clip |
Microsoft WindowsおよびReactOSのクリップボードには、1 つの項目が複数の形式で保持されます。
各アイテムには少なくとも1つのクリップボード形式がありますが、同じデータでも異なる種類の形式を持つことができます。可能な形式は3種類あります。[24]
- 標準フォーマット[25](例:CF_BITMAP、CF_UNICODETEXT)、
- 登録されたフォーマット[26](例:CF_HTML)
- 社内使用のためのプライベートフォーマット
Windows XPまでは、クリップボードにはクリップブックビューアアプリケーションを介してアクセスできました。[27] Windowsの新しいバージョンでは、クリップボードマネージャーを介してコンテンツにアクセスできます。
データは、clipコマンドを使用してコマンドライン経由でWindows [28]およびReactOS [29] のクリップボードに保存できます。[30]
$ # フォルダーの内容をクリップボードに貼り付ける:
$ dir | clip
クリップボードにはPowerShell経由でもアクセスできます: [31] [32]
# ディレクトリの内容をクリップボードに貼り付けるには
Set-Clipboard -Path "C:\directory\"
# クリップボードの内容を取得するには
Get-Clipboard
Windows 10およびWindows 11にはクリップボード アプリケーションが含まれており、複数のテキストベースのクリップボード項目を保存できます。Windows + V を押すとアクセスできます。
X ウィンドウ システム
UnixおよびLinuxシステムで一般的に使用されているX Window Systemには、3 つのクリップボードがあり、それぞれ「CLIPBOARD」、「PRIMARY」、「SECONDARY」と名付けられています。[33]さまざまな選択の使用方法と処理は標準化されていません。ただし、 GNOMEやKDEなどの最新のツールキットやデスクトップ環境のほとんどは、freedesktop.org仕様で概説されている、広く受け入れられている規則に従っています。 [34] 1 つの選択である CLIPBOARD は、Windows と同じショートカットを持つ従来のクリップボード セマンティクスに使用されます。もう 1 つの選択である PRIMARY は、X11 固有のメカニズムです。データはハイライトするとすぐに「コピー」され、3 番目の (中央) マウス ボタンで貼り付けられます。[35]このコピーされたデータは通常、CLIPBOARD 選択とは分離されており、その内容は変更されません。[36] SECONDARY は PRIMARY の代替として計画されましたが、一貫性のない方法でのみ使用されています。[33]
クリップボードにアクセスできるコマンドラインツールは2つあります(xselとxclip)。[37]
$ # xclip を使用して標準出力をクリップボードに貼り付ける
$ echo text | xclip -in -selection clipboard
$ # xsel を使用して標準出力をクリップボードに貼り付ける
$ echo text | xsel --clipboard
OS XとWindowsとの主な違いは、CLIPBOARDクリップボードには実際にはデータは保存されず、コピーまたは切り取られたデータへの参照のみが格納されることです。アプリケーションはCLIPBOARD選択の所有権を主張し、その所有権をXサーバーに伝えます。[35]このデータを貼り付ける場合、データとその利用可能な形式は、CLIPBOARD選択を所有するアプリケーションから要求されます。[38]
APIについて
アプリケーションはAPIを介してクリップボードまたはそのデータにアクセスできます。
JavaScript
JavaScriptには、ユーザーのクリップボードデータの変更を検出するクラス(ClipboardEvent) [39]と、クリップボードの内容を変更したり読み取ったりする関数(clipboardData.getData()、clipboardData.setData()) [40]がありますが、ユーザーのクリップボードを変更するとセキュリティ上の問題が発生する可能性があるため、すべてのブラウザでサポートされているわけではありません。
クォート
Qtには、サポートされているすべてのプラットフォーム用のラッパー[41]が存在します。これは、QClipboardクラスを使用してウィンドウシステムのクリップボードへのアクセスを提供します。このクラスは、関数による一般的なデータ型へのアクセスを容易にします。[42]クリップボードに格納されている要素のデータ型はMIMEを介して示され、このクラスの関数の助けを借りてMIMEデータをクリップボードに配置することもできます。
参照
参考文献
- ^ ab 「コンピューティングにおけるクリップボードとは? - Techopedia の定義」。Techopedia.com。2018年2 月 2 日時点のオリジナルよりアーカイブ。2018 年 2 月 1 日に取得。
- ^ Kimmatkar, Sarang B. (2014). 「デフォルトクリップボードの機能拡張」(IJCSIT) International Journal of Computer Science and Information Technologies 5 . 6 .
- ^ Stephens, Rod (2010). Visual Basic 2010: プログラマーズリファレンス. Library Genesis. インディアナポリス、インディアナ州: Wiley Pub., Inc. ISBN 978-0-470-49983-2。
- ^ モグリッジ、ビル (2007)。インタラクションのデザイン。マサチューセッツ州ケンブリッジ:MIT プレス。p. 65ff。ISBN 9780262134743。
- ^ Larry Tesler. 「ユーザーエクスペリエンスの回顧」。2018年2月2日時点のオリジナルよりアーカイブ。2018年1月23日閲覧。
- ^ 「ファイルのドラッグ」。developer.apple.com 。 2018年12月9日閲覧。
- ^ 「NSPasteboard - AppKit | Apple Developer Documentation」。developer.apple.com。2018年5月26日時点のオリジナルよりアーカイブ。2018年12月9日閲覧。
- ^ 「統一型識別子の採用」。developer.apple.com 。 2018年7月21日時点のオリジナルよりアーカイブ。2018年12月9日閲覧。
- ^ 「クリップボードハイジャック攻撃とは? - WhatIs.com の定義」 WhatIs.com 。2017年 1 月 5 日時点のオリジナルよりアーカイブ。2017 年1 月 4 日閲覧。
- ^ 「Torブラウザを装って配布されるクリップボードインジェクター」securelist.com 2023年3月28日2024年5月15日閲覧。
- ^ Chirgwin, Richard. 「Pastejack 攻撃によりクリップボードが脅威に」 The Register. 2017 年 1 月 4 日時点のオリジナルよりアーカイブ。2017年1 月 4 日閲覧。
- ^ 「研究者がユーザーのクリップボードを狙った『ペーストジャッキング』ハッキング攻撃について警告」グラハム・クルーリー、2016年5月26日。2017年1月5日時点のオリジナルよりアーカイブ。 2017年1月4日閲覧。
- ^ “dxa4481/Pastejacking”. GitHub . 2017年1月4日時点のオリジナルよりアーカイブ。2017年1月4日閲覧。
- ^ Fahl, Sascha; Harbach, Marian; Oltrogge, Marten; Muders, Thomas; Smith, Matthew (2013). 「おい、お前、私のクリップボードから降りろ」(PDF) .金融暗号とデータセキュリティ. コンピュータサイエンス講義ノート. 第 7859 巻. pp. 144–161. doi :10.1007/978-3-642-39884-1_12. ISBN 978-3-642-39883-4. 2017年9月19日時点のオリジナルよりアーカイブ(PDF) 。 2017年1月4日閲覧。
- ^ 「Android でパスワード マネージャーを使用していますか? スニッフィング攻撃に対して無防備になる可能性があります」。Ars Technica。2014 年 11 月 21 日。2017 年 1 月 4 日時点のオリジナルよりアーカイブ。2017年1 月 4 日閲覧。
- ^ 「クリップボードデバイス - AmigaOS ドキュメント Wiki」。wiki.amigaos.net。2018年 2 月 5 日時点のオリジナルよりアーカイブ。2018 年 2 月 3 日閲覧。
- ^ 「コピー&ペースト | Android Developers」。developer.android.com。2018年2月7日時点のオリジナルよりアーカイブ。2018年2月6日閲覧。
- ^ “ClipboardManager | Android Developers”. developer.android.com . 2018年2月7日時点のオリジナルよりアーカイブ。2018年2月2日閲覧。
- ^ “Pasteboard”. developer.apple.com . 2018年2月7日時点のオリジナルよりアーカイブ。2018年2月1日閲覧。
- ^ 「Uniform Type Identifier」。developer.apple.com。2018年2月7日時点のオリジナルよりアーカイブ。2018年2月6日閲覧。
- ^ “ClipboardViewer”. developer.apple.com . 2018年2月7日時点のオリジナルよりアーカイブ。2018年2月6日閲覧。
- ^ 「OS X のターミナルからクリップボードにコピーする」rogeriopvl.com。 2013 年 8 月 15 日時点のオリジナルよりアーカイブ。2013 年 7 月 2 日閲覧。
- ^ 「pbcopy(1) Mac OS X マニュアルページ」。apple.com。2014年3月28日時点のオリジナルよりアーカイブ。2013年7月2日閲覧。
- ^ 「クリップボード形式 (Windows)」。msdn.microsoft.com。2018年 2 月 7 日のオリジナルからアーカイブ。2018 年 2 月 3 日に取得。
- ^ 「標準クリップボード形式 (Windows)」。msdn.microsoft.com。2018年 2 月 7 日のオリジナルからアーカイブ。2018 年 2 月 3 日に取得。
- ^ 「HTML クリップボード形式 (Internet Explorer)」。msdn.microsoft.com。2018年 2 月 7 日時点のオリジナルよりアーカイブ。2018 年 2 月 3 日閲覧。
- ^ 「Windows 10/8/7 でクリップボードを表示および管理する」。The Windows Club。2013年 4 月 12 日。2018 年 2 月 12 日時点のオリジナルよりアーカイブ。2018年 2 月 6 日閲覧。
- ^ 「clip | Microsoft Docs」。Docs.microsoft.com。2017 年 10 月 16 日。2019年 9 月 26 日閲覧。
- ^ 「reactos/base/applications/cmdutils/clip at master · reactos/reactos · GitHub」。Github.com 。 2019年9月26日閲覧。
- ^ 「コマンドライン出力を Windows クリップボードにコピーする方法」www.labnol.org。2018 年 2 月 7 日のオリジナルからアーカイブ。2018 年 2 月 6 日に取得。
- ^ sdwheeler. 「Get-Clipboard (Microsoft.PowerShell.Management)」。docs.microsoft.com。2018年 1 月 26 日のオリジナルからアーカイブ。2018年 2 月 6 日に取得。
- ^ sdwheeler. 「Set-Clipboard (Microsoft.PowerShell.Management)」。docs.microsoft.com。2018年 2 月 7 日のオリジナルからアーカイブ。2018 年 2 月 6 日に取得。
- ^ ab "Clipboard - ArchWiki". wiki.archlinux.org . 2018年2月17日時点のオリジナルよりアーカイブ。2018年2月16日閲覧。
- ^ "clipboards-spec". freedesktop.org. 2014年12月24日時点のオリジナルよりアーカイブ。2014年8月16日閲覧。
- ^ ab “Copy & Paste, Drag & Drop [MI Wiki]”. wiki.mi.ur.de (ドイツ語). 2018年2月16日時点のオリジナルよりアーカイブ。 2018年2月16日閲覧。
- ^ "gnu.org". www.gnu.org . 2017年12月24日時点のオリジナルよりアーカイブ。2018年2月16日閲覧。
- ^ 「コマンドラインでシステムクリップボードにコピーして貼り付ける — Fernando Basso」fernandobasso.github.io。 2018 年 2 月 7 日のオリジナルからアーカイブ。 2018 年 2 月 6 日に取得。
- ^ 「X 選択、X カット バッファ、および Emacs キル リング」www.jwz.org。2018 年 3 月 4 日時点のオリジナルよりアーカイブ。2018 年 2 月 2 日閲覧。
- ^ 「クリップボード API とイベント – ClipboardEvent」。www.w3.org。2018年 1 月 28 日時点のオリジナルよりアーカイブ。2018 年 2 月 8 日閲覧。
- ^ 「クリップボード API とイベント – 同期クリップボード API」。www.w3.org。2018年 1 月 28 日時点のオリジナルよりアーカイブ。2018 年 2 月 8 日閲覧。
- ^ "platforms\plugins\src - qt/qtbase.git - Qt Base (Core, Gui, Widgets, Network, ...)". code.qt.io . 2018-02-09 のオリジナルからアーカイブ。2018-02-02に取得。
- ^ 「QClipboard クラス | Qt GUI 5.10」。doc.qt.io。2018年 2 月 2 日時点のオリジナルよりアーカイブ。2018年 2 月 2 日取得。
さらに読む
- Stanek, William R. (2008)。Windowsコマンドライン管理者のポケット コンサルタント、第2版。Microsoft Press。ISBN 978-0735622623。
- McElhearn, Kirk (2006)。Mac OS X コマンドライン: Unixの裏側。John Wiley & Sons。ISBN 978-0470113851。
外部リンク
- クリップ | Microsoft Docs
- 2. ICCCMの選択によるピアツーピア通信
- Windows デベロッパー センター: ドラッグ アンド ドロップとクリップボードを使用してシェル オブジェクトを転送する
- Microsoft Developer Network: クリップボードの仕組み、パート 1
- Microsoft Developer Network: クリップボードの仕組み、パート 2
- Microsoft Developer Network: クリップボード データの遅延レンダリング
