PowerShell(パワーシェル)

組み込みツール
PowerShell
パワーシェル
Claude CodeがWindows本来のPowerShellへコマンドを直接流すための組み込みツール。これまでのGit Bash(Windowsの中でMac風コマンドを動かす後付けの仕組み)経由をやめて、Windows地元の言葉でファイル操作などを実行する。Windowsで前に出る機能で、Mac・Linux・WSLでは自分で明示的にオンにして使う。

WindowsでClaude Codeを使っている人向け

Windowsでアプリやサイトを作っていて、Git Bash経由のコマンドがファイルの場所の取り違えなどで空振りして困っているときに、settings.jsonでCLAUDE_CODE_USE_POWERSHELL_TOOLをオンにし、Claude CodeにWindows流のコマンドを直接叩かせる。Git Bashを入れていないWindowsなら自動で有効になる。

PowerShellは、Claude CodeがWindows上でコマンドを実行するときに使う組み込みの実行口です。これまでWindowsのClaude Codeは、Git for Windowsに付いてくるGit Bashを経由してコマンドを叩いていました。Git Bashは、Windowsの中でMacやLinux風の書き方のコマンドを動かす後付けの仕組みです。PowerShellツールは、その遠回りをやめて、Windows本来のPowerShellへ直接コマンドを流します。

つまりWindowsユーザーにとっては「やっと地元の言葉で話せるようになった」みたいな話です。

噛み砕くと

Claude Codeは内部で、ファイルを並べたり中身を読んだりするのに、機械への命令文を投げています。その命令文には方言があります。MacやLinuxの方言と、Windowsの方言です。

これまでWindowsのClaude Codeは、Windowsの上にわざわざMac風の通訳を一枚かませて、Mac方言で喋っていました。この通訳がGit Bashです。通訳をはさむぶん、文字化けや相性問題が起きやすい。PowerShellツールは、その通訳を外して、Windowsに最初からいる地元民とそのまま話す方式です。

地元の言葉なので速いし、こじれにくい。

大事な前提:Windows以外では自分でオンにしないと出てこない

このツールが標準で前に出るのはWindowsです。公式の説明では、Git Bashが入っていないWindowsでは自動で有効、Git Bashが入っているWindowsでは段階的に配布中、という扱いになっています。

Mac・Linux・WSLでは、自分で明示的にオンにしないと使えません。WSLはWindowsの中でLinuxを動かす公式の仕組みです。しかもその場合はPowerShell 7以降を自分でインストールしておく必要があります。これはpreview、つまり試験提供中の機能なので、この前提条件はバージョンで動く可能性があります。

「Windowsで写真整理ツールを作る」を例に、実際の手順を見る

Windowsのパソコンで、撮りためた写真を月ごとにフォルダ分けする小さなツールをClaude Codeに作ってもらう、という場面で追います。

ステップ1: まず自分のWindowsで有効になっているか確かめる

Windowsでこのツールが効いているなら、Claude Codeはファイル一覧を取るときにWindows流の命令を使います。確かめたいなら、Claude Codeに「いまどのツールが使える?」と日本語でそのまま聞くのが早いです。一覧にPowerShellが出ていれば有効です。

ステップ2: 出てこなかったら設定ファイルでオンにする

Mac風の通訳経由のままだった場合は、設定ファイル settings.json に1項目足してオンにします。書くのはこれだけです。

{
  "env": {
    "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1"
  }
}

逆にWindowsで「まだ使いたくない」なら、同じ場所で値を "0" にして配布から抜けられます。

ステップ3: 写真フォルダの中身を見てもらう

「Picturesフォルダの中の写真を月ごとに分けたい」と頼みます。するとClaude Codeはまず中身を確認しようとして、Windows流の Get-ChildItem を投げようとします。これはフォルダの中身一覧を出す命令です。初期状態ではこの読み取り命令にも確認プロンプトが入ります。毎回の確認が邪魔なら、次のステップ4で allow ルールに入れると飛ばせます。

Get-ChildItem ~/Pictures

ステップ4: 毎回の確認は、自分で許可リストを作れば減らせる

ここで初心者がやりがちな勘違いがあります。「毎回ぜんぶ許可ボタンを押させられるのでは」という心配です。どのコマンドを確認なしで通すかは、settings.jsonallow(許可)ルールで自分が決めます。

たとえば Get-ChildItem のような中身を見るだけの命令を allow に足しておけば、次からは確認なしで通ります。何も設定していなければ、Get-ChildItem のような中身を見るだけの命令も含めて、PowerShellツールがそのコマンドを初めて投げるたびに確認が入ります。Bashには lscatgrep のような「読むだけの命令を最初から確認なしで通す組み込みリスト」がありますが、PowerShellツールにこの仕組みはありません。確認なしで通したい命令は、allow ルールに書いた分だけ飛ばせます。書き方はこんな形です。

{
  "permissions": {
    "allow": [
      "PowerShell(Get-ChildItem *)"
    ],
    "deny": [
      "PowerShell(Remove-Item *)"
    ]
  }
}

公式の説明では、Get-ChildItem を許可しておくと、その別名にあたる gcidir も一緒に通る扱いになります。逆に消す系の Remove-Itemdeny(拒否)に入れておけば、間違って消そうとしても止まります。

ステップ5: 仕分けスクリプトを書いて走らせる

Claude Codeは写真を月別フォルダへ移すための短い .ps1 ファイルを書いて実行します。.ps1はPowerShellの手順書ファイルです。Windowsは標準だと、こうした手順書ファイルの実行をセキュリティ設定で止めることがあります。

ただClaude Codeはこの実行を、その場かぎり、つまり今回動いているプログラムの中だけの許可で立ち上げる作りになっていて、パソコン全体の安全設定はいじりません。だから普段は止まらず動きます。会社のパソコンなどで管理者がガッチリ縛っている場合は、そちらの縛りが優先されてやはり止まります。

ステップ6: 結果を確認する

移動が終わったら、Get-ChildItem でフォルダがちゃんと月別に分かれたか見せてもらって完了です。ここまで全部、Windowsの地元の言葉だけで進みます。

つまり PowerShell は何をしてくれるのか

  • やってくれる: WindowsでClaude Codeが叩くコマンドを、通訳をはさまずWindows本来のPowerShellへ直接流す。settings.jsonallow ルールで許可した命令は、次から確認なしで通せる
  • やってくれない: あなたの代わりにPowerShellの文法を覚えてくれるわけではありません。命令を考えて投げるのはClaude Code側で、あなたは日本語で頼むだけです。会社の管理者が機械全体にかけた実行禁止の縛りも破ってはくれません
  • 意味が薄い場面: MacやLinuxでふだん作業している人。Windowsを使っていなければ、わざわざ自分でオンにする理由はほぼない

使いどころ3シナリオ(具体題材で再現)

シナリオ1: Windowsで家計簿アプリを作っていて、Git Bash由来の不具合に疲れたとき

Windowsで家計簿アプリを組んでいると、ファイルの場所を表す文字列の区切り記号が、Mac風の / とWindows風の \ でぶつかって、Claude Codeのコマンドが空振りすることがあります。PowerShellツールを有効にすると、Claude CodeがWindows流の書き方で命令を出すようになるので、この手の取り違えが減ります。地元の言葉で喋るぶん事故が起きにくい、というのが体感の差です。

シナリオ2: そもそもGit Bashを入れていないWindowsの初心者のとき

プログラミングを始めたばかりで、Gitすらまだ入れていないWindowsパソコン。この状態だとMac風の通訳がそもそも存在しません。公式の説明では、Git Bashが入っていないWindowsではPowerShellツールが自動で有効になります。つまり何も準備していない初心者ほど、最初からWindowsネイティブで動く恩恵を受けます。

シナリオ3: チームでビルド前チェックを自動で走らせたいとき

WindowsのチームでWebサイトを作っていて、保存のたびに決まったチェック命令を走らせたい場面。Claude Codeのhookの設定で "shell": "powershell" と書いておくと、そのチェックだけをPowerShellで走らせられます。hookは特定のタイミングで自動実行される仕掛けです。これはツール全体のオン・オフ設定に関係なく効くので、「ツール自体はまだ切ってるけど、この自動チェックだけはWindows流で動かしたい」が通ります。

初心者が踏みやすい落とし穴

  • 「Windowsなら全員すぐ有効」ではない。Git Bashが入っているWindowsでは段階的な配布中なので、人によってまだ前に出ていないことがあります。確認は settings.json で明示的にオンにするのが確実です。
  • Mac・Linux・WSLでは自分でインストールが要る。これらの環境では設定をオンにするだけでなく、PowerShell 7以降を別途入れて、起動できる場所に置いておく必要があります。
  • 「読むだけの命令は最初から確認なし」ではない。確認を飛ばすかどうかは settings.jsonallow ルールで自分が決める話です。Get-ChildItem のような命令を確認なしで通したいなら、自分で allow に書いておきます。何も書かなければ確認は入ります。
  • preview、つまり試験提供なので制限が残っている。起動時にPowerShellの個人設定ファイル、いわゆるプロファイルは読み込まれません。Windowsでは安全に隔離して動かす仕組み、いわゆるサンドボックスも今は未対応です。
  • 会社の機械ロックは破れない。Claude Codeはその場かぎりの許可で手順書ファイルを動かしますが、管理者が機械全体にかけた実行禁止の縛り、いわゆるGroup Policyはそのまま効きます。動かないときはまずここを疑います。
  • 機械の安全設定を尊重させたいなら別設定が要る。あえてパソコンの実行ポリシーに従わせたい場合は CLAUDE_CODE_POWERSHELL_RESPECT_EXECUTION_POLICY=1 を立てます。これを知らずに「なぜ自由に動くのか」と戸惑う人がいます。
  • Git Bashが消えるわけではない。PowerShellツールを有効にしても、Git Bashが入っていればMac風スクリプト用にBashツールも残ります。両方使い分けられる、が正しい理解です。
  • あなたがPowerShellの命令を打つわけではない。命令を考えて投げるのはClaude Codeです。あなたは日本語で「写真を月別に分けて」と頼むだけで、文法の暗記は要りません。

書き方

settings.json に { "env": { "CLAUDE_CODE_USE_POWERSHELL_TOOL": "1" } } を書いて有効化(Windowsでは自動有効の場合あり)

やってみるとこうなる

入力

settings.json で CLAUDE_CODE_USE_POWERSHELL_TOOL を "1" にし、Claude Code に「Picturesフォルダの写真を月別に分けて」と頼む

出力例

Claude Code が Windows 流の Get-ChildItem でフォルダの中身を確認し、写真を月別フォルダへ移す .ps1 を書いて実行。settings.json の allow ルールに入れた命令は確認なしで通り、許可していない副作用のある操作は確認が入る。

このページに出てきた言葉

PowerShell
Windowsに最初から入っているコマンド実行環境。<code>Get-ChildItem</code> のような独自の命令でファイル操作や設定変更ができる
Git Bash
Windowsの中で、MacやLinuxと同じ書き方のコマンドを動かせるようにする後付けの仕組み。Gitと一緒に入ることが多い
CLAUDE_CODE_USE_POWERSHELL_TOOL
このツールを使うかを決める、Claude Codeが起動時に読む設定値。<code>1</code> でオン、<code>0</code> でオフ
allow / deny ルール
<code>settings.json</code> に書くコマンドの許可リストと拒否リスト。<code>allow</code> に入れた命令は確認なしで通り、<code>deny</code> の命令は止まる。自分で書いて設定する
WSL
Windowsの中でLinuxをまるごと動かす公式の仕組み。Windows Subsystem for Linux の略
preview(プレビュー)
正式版の前の試験提供段階。動くが仕様が変わったり制限が残っていたりする
.ps1ファイル
PowerShellの命令をまとめて書いておく手順書ファイル。PowerShellに読ませて順番に実行する

関連項目

公式ドキュメント

https://code.claude.com/docs/en/tools-reference

-

← 戻る