MENU

WSL環境でMac風のpbcopy/pbpasteを実現する方法

目次

前提環境

この記事は以下の環境での動作を前提としている。

  • Windows 10/11
  • WSL2(Windows Subsystem for Linux 2)
  • Ubuntu 20.04以降(他のディストリビューションでも同様の手順で可能)
  • Bash または Zsh シェル

背景と課題

Macユーザーであれば、コマンドラインからクリップボードを操作する際にpbcopypbpasteコマンドを使用することに慣れているだろう。これらのコマンドは非常に便利で、パイプを使ってテキストをクリップボードにコピーしたり、クリップボードの内容を取得したりできる。

一方、WSL環境では標準でこのような機能は提供されていない。Linux用のクリップボードツールであるxclipをインストールしても、これはX Window System内でのクリップボード操作に留まり、Windowsのシステムクリップボードとは連携しない。つまり、WSL内でxclipを使ってコピーした内容を、Windows側のアプリケーションで貼り付けることはできないのである。

WindowsのネイティブなクリップボードAPI

実は、Windowsにはclip.exeというコマンドラインツールが標準で付属している。このツールを使用することで、パイプ経由でテキストをクリップボードに書き込むことが可能である。

echo "Hello World" | clip.exe

上記のコマンドを実行すると、「Hello World」がWindowsのクリップボードにコピーされ、任意のWindowsアプリケーションで貼り付けることができる。

ただし、clip.exeは書き込み専用であり、クリップボードの内容を読み取る機能は提供されていない。そのため、Macのpbpasteに相当する機能を実現するには別の方法が必要となる。

PowerShellを活用したクリップボード読み取り

Windowsでクリップボードの内容を取得するには、PowerShellのGet-Clipboardコマンドレットを使用する。WSL内からPowerShellを呼び出すことで、この機能を利用できる。

powershell.exe -command "Get-Clipboard"

このコマンドを実行すると、現在のクリップボードの内容がターミナルに出力される。なお、-commandパラメータは省略可能であり、以下のように短縮して記述することも可能である。

powershell.exe "Get-Clipboard"

エイリアスによる利便性の向上

毎回長いコマンドを入力するのは非効率的であるため、エイリアスを設定してMacと同様の使い勝手を実現する。使用しているシェルの設定ファイル(Bashの場合は~/.bashrc、Zshの場合は~/.zshrc)に以下の行を追加する。

alias pbcopy='clip.exe'
alias pbpaste='powershell.exe -command "Get-Clipboard"'

設定を反映するために、シェルを再起動するか、以下のコマンドを実行する。

# Bashの場合
source ~/.bashrc

# Zshの場合  
source ~/.zshrc

実際の使用例

エイリアスを設定した後は、Macと同様の感覚でクリップボード操作が可能になる。以下に実用的な使用例を示す。

基本的な使用方法

# テキストをクリップボードにコピー
echo "テスト文字列" | pbcopy

# クリップボードの内容を表示
pbpaste

ファイルの内容をクリップボードにコピー

# SSH公開鍵をクリップボードにコピー(GitHubへの登録などに便利)
cat ~/.ssh/id_rsa.pub | pbcopy

# 設定ファイルの内容をクリップボードにコピー
cat ~/.vimrc | pbcopy

Gitとの連携

# 最新5件のコミット履歴をクリップボードにコピー
git log --oneline -5 | pbcopy

# 現在のブランチ名をクリップボードにコピー
git branch --show-current | pbcopy

# 現在のリモートURLをクリップボードにコピー
git remote get-url origin | pbcopy

ディレクトリパスの活用

# 現在のディレクトリパスをクリップボードにコピー
pwd | pbcopy

# 特定のファイルの絶対パスをクリップボードにコピー
readlink -f example.txt | pbcopy

パフォーマンスと制限事項

このアプローチにはいくつかの注意点がある。まず、powershell.exeの起動には若干の時間がかかるため、pbpasteの実行速度は純粋なLinuxコマンドと比較して遅くなる。ただし、日常的な使用においては実用上問題となることは少ない。

また、非常に大きなテキストをクリップボードに格納する場合、PowerShellの制限によって一部のデータが切り取られる可能性がある。通常の開発作業で扱うテキストサイズであれば問題ないが、大容量のデータを扱う場合は注意が必要である。

さらに、この方法はWSLからWindowsの実行ファイルを呼び出すため、WSL2の場合はネットワークを介した通信が発生する。セキュリティ設定によっては、この通信が制限される可能性もある。

まとめ

WSL環境においても、Windowsの標準機能とPowerShellを組み合わせることで、Macのpbcopy/pbpasteと同等の機能を実現できる。エイリアスを設定することで、Macからの移行時も違和感なく使用できるようになる。

この方法の最大の利点は、追加のソフトウェアをインストールすることなく、Windowsの標準機能のみで実現できることである。WSLでの開発効率を向上させる簡単で実用的な設定として、ぜひ活用していただきたい。

目次