補足: このプログラムの改良版を、以下に公開しています。
【改良版】WSL2版 Claude Code にスクショをサクッと渡す操作を 3→2キーに減らした
その他の環境構築まとめはこちら
Claude Code 環境構築・運用Tipsまとめ
初めに(困りごと)
WSL2版のClaude Codeはクリップボード経由の画像貼り付けに対応していません。
スクリーンショットを渡すには、一度ファイルとして保存し、 @/path/to/image.png とパスを手入力する必要があります。
そこで、ショートカットキーで、最新スクショをWSL環境に移して、そのファイルパスをクリップボードに貼り付けできるようにしました。Snipping Toolの自動保存 と PowerShellスクリプトを使います。
前提条件
- Windows 10/11 + WSL2
- Snipping Tool(Windows標準)
- PowerShell 5.1以降
スクリプト
2つのファイルで構成されています。同じフォルダにまとめて配置してください。
screenshot-to-wsl.ps1
メインスクリプトです。スクリーンショットフォルダから最新のPNGをWSL側にコピーし、@<WSLパス>/<ファイル名> 形式の文字列をクリップボードにセットします。
コピー時にファイル名をASCIIにリネームします(例: スクリーンショット YYYY-MM-DD HHMMSS.png → ss_YYYYMMDD_HHMMSS.png)。Snipping Toolのデフォルトファイル名には日本語とスペースが含まれており、Claude Codeの @FILE 構文でパスが正しく解釈されない場合があるためです。
# ---- 設定(自分の環境に合わせて書き換える) ----
$winDestPath = '\\wsl$\Ubuntu\home\yourname\screenshots'
$wslDestPath = '/home/yourname/screenshots'
# ------------------------------------------------
# スクリーンショットフォルダをレジストリから取得(OneDriveリダイレクト対応)
$regKey = "HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders"
$guid = "{B7BEDE81-DF94-4682-A7D8-57A52620B86F}"
$screenshotDir = (Get-ItemProperty $regKey -Name $guid -EA SilentlyContinue).$guid
if ($screenshotDir) {
$screenshotDir = [Environment]::ExpandEnvironmentVariables($screenshotDir)
} else {
$screenshotDir = Join-Path ([Environment]::GetFolderPath('MyPictures')) "Screenshots"
}
# 最新PNGをWSL側にコピー(ASCII名にリネーム)
$latestFile = Get-ChildItem $screenshotDir -Filter "*.png" |
Sort-Object LastWriteTime -Descending | Select-Object -First 1
if ($null -eq $latestFile) {
Write-Host "エラー: .png ファイルが見つかりません" -ForegroundColor Red; exit 1
}
# ファイル名をASCIIにリネーム(スペースや日本語を含む名前はCLIで問題を起こすため)
if ($latestFile.BaseName -match '(\d{4})-(\d{2})-(\d{2})\s+(\d{6})') {
$destName = "ss_$($Matches[1])$($Matches[2])$($Matches[3])_$($Matches[4]).png"
} else {
$destName = "ss_$([int](Get-Date $latestFile.LastWriteTime -UFormat %s)).png"
}
Copy-Item $latestFile.FullName (Join-Path $winDestPath $destName) -Force
$clipboardText = "@$wslDestPath/$destName"
Set-Clipboard $clipboardText
Write-Host "クリップボード: $clipboardText" -ForegroundColor Green
setup-shortcut.ps1
デスクトップに Ctrl+Alt+S のショートカットを作成するセットアップスクリプトです。初回のみ実行します。
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
$ps1Path = Join-Path $scriptDir "screenshot-to-wsl.ps1"
$shell = New-Object -ComObject WScript.Shell
$shortcut = $shell.CreateShortcut((Join-Path ([Environment]::GetFolderPath("Desktop")) "screenshot-to-wsl.lnk"))
$shortcut.TargetPath = "powershell.exe"
$shortcut.Arguments = "-NoProfile -NoLogo -ExecutionPolicy Bypass -File `"$ps1Path`""
$shortcut.Hotkey = "Ctrl+Alt+S"
$shortcut.WindowStyle = 7 # 最小化
$shortcut.Save()
セットアップ
1. Snipping Toolの自動保存をONにする
Snipping Toolを開き、設定(歯車アイコン)から「スクリーンショットを自動的に保存する」をONにします。
これで Win+Shift+S で撮影したスクショが ピクチャ\スクリーンショット に自動保存されるようになります。
2. ファイルを配置してパスを編集
上記2ファイルを同じフォルダに配置し、screenshot-to-wsl.ps1 冒頭の2行を自分の環境に合わせて編集します。
WSL側にもコピー先ディレクトリを作成しておきます。
mkdir -p ~/screenshots
3. ショートカットを作成
PowerShellで setup-shortcut.ps1 を実行すると、デスクトップに Ctrl+Alt+S のショートカットが作成されます。
powershell -ExecutionPolicy Bypass -File .\setup-shortcut.ps1
使い方
-
Win+Shift+Sでスクショ撮影(Snipping Toolが自動保存) -
Ctrl+Alt+Sで最新スクショをWSLにコピー&パスをクリップボードにセット - Claude Codeで
Ctrl+V→@/home/yourname/screenshots/ss_YYYYMMDD_HHMMSS.pngが貼り付けられる
スクリプトはレジストリからスクリーンショットフォルダを自動検出するので、OneDriveでリダイレクトされている環境でもそのまま動きます。
最後に
そのうち、アプリ版のClaude Codeばかり使うようになるのかなぁ…
参考
今回の記事からさらに改良した記事がこちらです。