mcpField
W
windows-shell

windows-shell

github.com/nicoforclaude開発845 回インストール48 週間前に更新
リポジトリ

windows-shell について

Windows Shell Skill は、Windows 上の Claude Code でコマンドやパスを扱うためのガイドです。パスの引用方法、Bash と PowerShell の注意点、Git やファイル操作の実践例をまとめています。

主な機能

  1. 01Windows パス形式のガイド
  2. 02空白やバックスラッシュを含むパスの引用
  3. 03Bash と PowerShell のコマンド例
  4. 04リダイレクトとエスケープの問題回避
  5. 05複数リポジトリでの Git 操作

活用シーン

  1. 01Windows の Git Bash で Git コマンドを実行
  2. 02Bash 経由で PowerShell コマンドを安全に使う
  3. 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 ファイルに記述します

実際のエラー例

よくあるエラーパターン:

  1. cd の後に findstr を使用 → FINDSTR: Cannot open [dirname]
  2. cd の後に PowerShell のパイプを使用 → The term 'C:...' is not recognized
  3. パスを引用符で囲まない → cd: C:KolyaRepositories...(バックスラッシュが削除される)
  4. Git Bash で >nul を使用 → "nul" という名前のファイルが作成され、git status が汚れる
  5. Bash 経由で PowerShell に感嘆符を使用 → バックスラッシュと感嘆符の組み合わせは認識されない
  6. PowerShell でインラインの $variable を使用 → 変数が空になる、または削除される

解決方法: このスキルのパターンに従うことで、すべて解決できます。

  • パスを引用符で囲みます:cd "C:\KolyaRepositories\repo"
  • cd の後にパイプを使用しません:git status --short(| findstr なし)
  • Git Bash では /dev/null を使用します:command > /dev/null 2>&1(>nul は使用しません)
  • 否定には感嘆符ではなく -not を使用します
  • 複雑な PowerShell のロジックには .ps1 スクリプトファイルを使用します

コメント