windows-shell について
Windows Shell Skill は、Windows 上の Claude Code でコマンドやパスを扱うためのガイドです。パスの引用方法、Bash と PowerShell の注意点、Git やファイル操作の実践例をまとめています。
主な機能
- 01Windows パス形式のガイド
- 02空白やバックスラッシュを含むパスの引用
- 03Bash と PowerShell のコマンド例
- 04リダイレクトとエスケープの問題回避
- 05複数リポジトリでの Git 操作
活用シーン
- 01Windows の Git Bash で Git コマンドを実行
- 02Bash 経由で PowerShell コマンドを安全に使う
- 03複数リポジトリの状態を確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ nicoforclaude/ claude-windows-shell --skill windows-shellインストール後、Claude Code で/windows-shellを入力して読み込まれたか確認します。
詳細
Windows Shell スキル
このスキルでは、Windows で Claude Code を使用する際によくある問題を避けるため、Windows のファイルシステムパスとコマンドの扱い方を説明します。
基本原則
パス形式
スキルと設定では:
- 常にスラッシュ(Unix 形式)を使用します:
scripts/helper.py - スキル内でバックスラッシュは使用しません:
scripts\helper.py - これにより、クロスプラットフォームでの互換性が確保されます
Bash コマンドでは:
- スペースまたはバックスラッシュを含むパスは、必ず引用符で囲みます:
cd "C:\KolyaRepositories\project" - 引用符がないと、バックスラッシュが失われます:
cd C:\KolyaRepositories\project - 結果:
/usr/bin/bash: line 1: cd: C:KolyaRepositoriesproject: No such file or directory
シェルコマンドのパターン
適切なパターン:
# Quoted paths work reliably
cd "C:\KolyaRepositories\repo" && git status
# Multiple commands in sequence
cd "C:\KolyaRepositories\repo" && git rev-parse --abbrev-ref HEAD && git status --short
# Direct git commands without piping
git status --short
不適切なパターン:
# Unquoted paths fail
cd C:\KolyaRepositories\repo && git status
# Piping to findstr after cd fails
cd "C:\KolyaRepositories\repo" && git status --short | findstr /R "."
# Error: FINDSTR: Cannot open repo
# PowerShell via -Command loses cd context
cd "C:\KolyaRepositories\repo" && powershell -Command "git status --short | Where-Object { $_ }"
# Error: The term 'C:\KolyaRepositories\repo' is not recognized
よくある問題
1. ディレクトリ変更後の Findstr
問題: cd の後にパイプでつなぐと、findstr はディレクトリ名をファイル引数として解釈します。
# Fails
cd "C:\KolyaRepositories\calc" && git status --short | findstr /R "."
# Error: FINDSTR: Cannot open calc
解決策: 不要なパイプを使わず、直接コマンドを実行します。
# Works
cd "C:\KolyaRepositories\calc" && git status --short
2. PowerShell コンテキストの喪失
問題: cd の後に powershell -Command を使うと、シェルコンテキストが誤って解釈されます。
# Fails
cd "C:\KolyaRepositories\calc" && powershell -Command "git status --short | Where-Object { $_ }"
# Error: The term 'C:\KolyaRepositories\calc' is not recognized
解決策: 最初から PowerShell を直接使用するか、bash の cd の後に PowerShell のパイプ処理を行わないようにします。
# Works - all in PowerShell
powershell -Command "cd 'C:\KolyaRepositories\calc'; git status --short"
# Works - no PowerShell piping
cd "C:\KolyaRepositories\calc" && git status --short
3. Bash で引用符で囲まれていないパス
問題: Bash は、引用符で囲まれていない Windows パスからバックスラッシュを取り除きます。
# Fails
cd C:\KolyaRepositories\calc
# Error: cd: C:KolyaRepositoriescalc: No such file or directory
解決策: バックスラッシュを含むパスは必ず引用符で囲みます。
# Works
cd "C:\KolyaRepositories\calc"
4. null デバイスへの出力リダイレクト
コンテキスト: Claude Code は Windows 上で Git Bash を使用します。Git Bash では Unix 形式のパスが使えます。
Git Bash(Claude Code のデフォルト)では:
# CORRECT - Git Bash provides /dev/null
command > /dev/null 2>&1
# WRONG - creates a literal file named "nul" in working directory!
command >nul 2>&1
警告: Git Bash で >nul を使用すると、git status に不要なファイルが表示されます。Git Bash では常に /dev/null を使用してください。
PowerShell では:
command 2>$null
command | Out-Null
5. PowerShell の特殊文字のエスケープ
問題 A — 否定演算子: Bash 経由で PowerShell コマンドを渡すと、感嘆符がバックスラッシュ付きの感嘆符にエスケープされます。
# Fails - ! becomes \!
powershell -Command "if (!(Test-Path 'file.txt')) { Write-Output 'missing' }"
# Error: \! is not recognized
解決策: 否定には感嘆符ではなく -not を使用します。
# Works
powershell -Command "if (-not (Test-Path 'file.txt')) { Write-Output 'missing' }"
問題 B — 変数の展開:
PowerShell の $variable 構文は、Bash 経由で渡すと取り除かれます。
# Fails - $pdf and $sizeKB are empty
powershell -Command "$pdf = Get-Item 'file.pdf'; $sizeKB = [math]::Round($pdf.Length / 1KB, 1); Write-Output $sizeKB"
# Output: (empty or partial)
解決策: 複雑な処理には .ps1 スクリプトファイルを使用するか、シンプルなコマンド間で出力をパイプします。
# Works - use script file
powershell -ExecutionPolicy Bypass -File "script.ps1" -Path "file.pdf"
# Works - simple piped commands
powershell -Command "Get-Item 'file.pdf' | Select-Object Length"
PowerShell をインラインで使用する場合のまとめ:
- 感嘆符ではなく
-notを使用します - 変数を使う複雑なロジックにはスクリプトファイルを使用します
- インラインコマンドはシンプルに保ちます(単一の処理と出力のパイプ)
複数リポジトリを操作する際のベストプラクティス
複数のリポジトリを順に処理する場合(例:ステータスの確認):
パターン 1 — && で連結した逐次コマンド:
cd "C:\KolyaRepositories\repo1" && git status --short
cd "C:\KolyaRepositories\repo2" && git status --short
パターン 2 — 独立したコマンド:
git -C "C:\KolyaRepositories\repo1" status --short
git -C "C:\KolyaRepositories\repo2" status --short
パターン 3 — ツール呼び出しの並列実行: 独立した操作には、1 つのメッセージ内で複数の Bash ツール呼び出しを使用します:
- Bash ツール 1:
cd "C:\repo1" && git status - Bash ツール 2:
cd "C:\repo2" && git status - Bash ツール 3:
cd "C:\repo3" && git status
Windows での PowerShell と Bash
PowerShell を使用する場面
次の用途では PowerShell を使用します:
- Windows 固有の操作(レジストリ、サービスなど)
Where-ObjectやSelect-Objectを使った複雑なフィルタリング- .NET オブジェクトの操作
- Windows システム管理タスク
# PowerShell example
powershell -Command "Get-ChildItem -Path 'C:\KolyaRepositories' -Directory | Select-Object Name"
Bash(Git Bash/WSL)を使用する場面
次の用途では Bash を使用します:
- Git 操作
- 標準的な Unix ツール(grep、sed、awk)
- クロスプラットフォームのスクリプト
- ほとんどの開発ツール(npm、docker など)
# Bash example
cd "C:\KolyaRepositories\repo" && git status --short
Bash より優先して使うツール
ファイル操作には、bash コマンドではなく、専用の Claude Code ツールを使用します:
| 操作 | 使用するツール | Bash では使わない |
|---|---|---|
| ファイルの読み取り | Read ツール | cat、head、tail |
| ファイルの検索 | Glob ツール | find、ls |
| 内容の検索 | Grep ツール | grep、rg |
| ファイルの編集 | Edit ツール | sed、awk |
| ファイルの書き込み | Write ツール | echo >、cat <<EOF |
Bash は、git、npm、docker、ビルドコマンドなど、実際のターミナル操作に使用します。
概要チェックリスト
Windows のファイルシステムコマンドを実行する前に:
- バックスラッシュを含むパスは引用符で囲みます:
"C:\Path\To\Dir" - Git Bash で出力をリダイレクトする場合は
/dev/nullを使用します(ファイルが作成される>nulは使用しません) -
cdの後に不要なパイプを使用しません(特にfindstr、Where-Object) - ファイル操作には Bash ではなく、専用ツール(Read、Glob、Grep)を使用します
- 複数の独立した操作には並列のツール呼び出しを使用します
- スキルではスラッシュを使用します:
scripts/helper.py - Windows 固有のタスクには PowerShell、Unix 形式の操作には Bash を使用します
- PowerShell での否定には感嘆符ではなく
-notを使用します - 複雑な PowerShell のロジックはインラインコマンドではなく
.ps1ファイルに記述します
実際のエラー例
よくあるエラーパターン:
cdの後にfindstrを使用 → FINDSTR: Cannot open [dirname]cdの後に PowerShell のパイプを使用 → The term 'C:...' is not recognized- パスを引用符で囲まない → cd: C:KolyaRepositories...(バックスラッシュが削除される)
- Git Bash で
>nulを使用 → "nul" という名前のファイルが作成され、git status が汚れる - Bash 経由で PowerShell に感嘆符を使用 → バックスラッシュと感嘆符の組み合わせは認識されない
- PowerShell でインラインの
$variableを使用 → 変数が空になる、または削除される
解決方法: このスキルのパターンに従うことで、すべて解決できます。
- パスを引用符で囲みます:
cd "C:\KolyaRepositories\repo" cdの後にパイプを使用しません:git status --short(| findstrなし)- Git Bash では
/dev/nullを使用します:command > /dev/null 2>&1(>nulは使用しません) - 否定には感嘆符ではなく
-notを使用します - 複雑な PowerShell のロジックには
.ps1スクリプトファイルを使用します