Google AntigravityでWordPress REST APIが失敗するときの完全対処法【PowerShell設定ガイド】

こんにちは。今回は、Google AntigravityでWordPress REST APIを使おうとしたとき、PowerShellのコマンドが失敗する問題について、根本原因と解決方法をご紹介します。
「認証情報は正しいはずなのに401エラーが返ってくる」「日本語を含むリクエストが文字化けする」など、一見わかりにくい問題の原因は、実はPowerShellのデフォルト設定にあります。
この記事で解決できること
- WordPress REST APIへのBasic認証が
401 Unauthorizedで失敗する Invoke-RestMethodで日本語を含むリクエストが文字化けする- PowerShellからのHTTPリクエストがタイムアウトや予期しないエラーを返す
- 他のPC・ドメインでも同じ環境を再現したい
なぜPowerShellでREST APIが失敗するのか
原因1:InputEncodingがShift-JIS(CP932)のまま
これが最大の原因です。WindowsのPowerShellは、デフォルトでInputEncoding(入力エンコーディング)がShift-JIS(コードページ932)に設定されています。
確認してみましょう:
[Console]::OutputEncoding.CodePage # → 65001 (UTF-8) ※これはOK
[Console]::InputEncoding.CodePage # → 932 (Shift-JIS) ※これが問題!
$OutputEncoding.CodePage # → 65001 (UTF-8) ※これもOKREST APIのリクエストボディやヘッダーに日本語が含まれる場合、このエンコーディングの不一致が原因で認証ヘッダーが壊れたり、リクエストボディが文字化けしたりします。
特にBasic認証では、ユーザー名とパスワードをBase64エンコードする過程で文字列のバイト変換が行われるため、エンコーディングの問題が顕著に現れます。
原因2:Content-Typeにcharsetが付与されない
Invoke-RestMethodはデフォルトでContent-Typeヘッダーにcharset=utf-8を付けません。サーバー側がリクエストのエンコーディングを正しく判定できず、日本語が含まれるJSONボディが正しく処理されないことがあります。
原因3:TLSバージョンの問題
環境によっては、PowerShellのデフォルトTLS設定が古いバージョン(TLS 1.0/1.1)を使用していることがあります。最新のWordPressサーバーや多くのホスティング環境ではTLS 1.2以上を要求するため、接続自体が失敗します。
原因4:プログレスバーによる遅延
Invoke-WebRequestでファイルダウンロードなどを行う際、進捗バーの描画が原因でパフォーマンスが大幅に低下することがあります。これはAPIレスポンスの速度にも影響します。
解決方法:PowerShellプロファイルの設定
すべての問題を一括で解決するには、PowerShellのプロファイルファイルに設定を追加します。プロファイルは新しいPowerShellセッションを開くたびに自動で読み込まれるため、一度設定すれば毎回手動で実行する必要がありません。
ステップ1:プロファイルの場所を確認
echo $PROFILE通常は以下のパスになります:
# PowerShell 7 (Core) の場合
C:\Users\<ユーザー名>\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
# Windows PowerShell 5.1 の場合
C:\Users\<ユーザー名>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1ステップ2:プロファイルが存在するか確認
Test-Path $PROFILEFalseが返る場合は、ファイルを新規作成します:
New-Item -Path $PROFILE -ItemType File -Forceステップ3:プロファイルに設定を追加
以下の内容をプロファイルに書き込みます。テキストエディタで直接開いてもOKです:
notepad $PROFILE追加する内容:
# =============================================================================
# PowerShell プロファイル設定
# REST API / 外部コマンドとの通信で発生する問題の包括的対策
# =============================================================================
# --- UTF-8 エンコーディング統一 ---
# InputEncoding を Shift-JIS(932) → UTF-8(65001) に変更
# REST API や外部コマンドとのやり取りで文字化けを防止
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
$OutputEncoding = [System.Text.Encoding]::UTF8
# --- TLS 1.2 / 1.3 を強制 ---
# 古いTLSバージョンしか試行しないケースを防止
# HTTPS接続の安定化に必須
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13
# --- Invoke-RestMethod / Invoke-WebRequest のデフォルト設定 ---
# Content-Type に charset=utf-8 を自動付与
# 日本語を含むJSONリクエストの文字化けを防止
$PSDefaultParameterValues['Invoke-RestMethod:ContentType'] = 'application/json; charset=utf-8'
$PSDefaultParameterValues['Invoke-WebRequest:ContentType'] = 'application/json; charset=utf-8'
# --- プログレスバー非表示(高速化) ---
# Invoke-WebRequest 等のダウンロード進捗表示を非表示にして高速化
$ProgressPreference = 'SilentlyContinue'ステップ4:設定を即座に反映
プロファイルを保存した後、現在のセッションに反映するには以下を実行します:
. $PROFILEステップ5:設定の確認
正しく適用されたことを確認しましょう:
Write-Host "InputEncoding: $([Console]::InputEncoding.CodePage)"
Write-Host "OutputEncoding: $([Console]::OutputEncoding.CodePage)"
Write-Host "OutputEncoding var: $($OutputEncoding.CodePage)"3つすべてが 65001(UTF-8)になっていれば成功です。
WordPress REST APIの動作確認
設定が正しく反映されたら、実際にWordPress REST APIへのリクエストを試してみましょう。
GETリクエスト(認証なし)
Invoke-RestMethod -Uri 'https://your-domain.com/wp-json/wp/v2/posts?per_page=1'投稿データがJSON形式で返ってくれば、REST APIへの基本的なアクセスは成功です。
Basic認証付きリクエスト
WordPressの管理操作(投稿の作成・更新など)にはBasic認証が必要です。事前にアプリケーションパスワードを生成しておいてください。
WordPress管理画面 → ユーザー → プロフィール → アプリケーションパスワード から生成できます。
$user = 'your-username'
$pass = 'xxxx xxxx xxxx xxxx xxxx xxxx' # アプリケーションパスワード
$cred = "${user}:${pass}"
$b64 = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes($cred))
$headers = @{ Authorization = "Basic $b64" }
# 認証テスト(自分のユーザー情報を取得)
Invoke-RestMethod -Uri 'https://your-domain.com/wp-json/wp/v2/users/me' -Headers $headersユーザー情報が返ってくれば認証成功です。
日本語を含むPOSTリクエスト
$body = @{
title = '新しい投稿タイトル'
content = '<p>これはREST APIから作成した投稿です。</p>'
status = 'draft'
} | ConvertTo-Json -Compress
$result = Invoke-RestMethod `
-Uri 'https://your-domain.com/wp-json/wp/v2/posts' `
-Method POST `
-Headers $headers `
-Body ([System.Text.Encoding]::UTF8.GetBytes($body))
Write-Host "作成された投稿ID: $($result.id)"ポイント:
-Bodyに文字列をそのまま渡すのではなく、[System.Text.Encoding]::UTF8.GetBytes($body)でバイト配列に変換して渡すと、エンコーディングの問題をより確実に回避できます。
それでも失敗する場合のトラブルシューティング
SiteGuardプラグインが有効な場合
WordPressにSiteGuardプラグインを導入している場合、REST APIへのアクセスがブロックされることがあります。
確認方法:
- ブラウザで
https://your-domain.com/wp-json/wp/v2/にアクセスして、JSON応答が返るか確認 - wp-login.php にアクセスして404が返る場合はSiteGuardがログインURLを変更しています
対処法:
SiteGuardの管理画面で「REST APIの無効化」設定を確認し、必要なエンドポイントを許可してください。
WAF(Web Application Firewall)が干渉している場合
レンタルサーバー(ロリポップ、エックスサーバーなど)のWAF設定がREST APIリクエストをブロックすることがあります。
対処法:
- サーバーの管理画面からWAF設定を一時的に緩和する
- 特定のIPアドレスからのアクセスを許可する
User-Agentによるフィルタリング
セキュリティプラグインやサーバー設定がブラウザ以外のUser-Agentからのアクセスを制限している場合があります。
$headers = @{
Authorization = "Basic $b64"
'User-Agent' = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) PowerShell/7.4'
}User-Agentヘッダーを追加することで回避できる場合があります。
新しいPCへの設定移行
別のPCでも同じ環境を再現するには、プロファイルファイルをコピーするだけでOKです。
# コピー元(設定済みPC)
Get-Content $PROFILE | Set-Clipboard
# コピー先(新しいPC)
# 1. プロファイルを作成
New-Item -Path $PROFILE -ItemType File -Force
# 2. クリップボードの内容を貼り付け
notepad $PROFILE
# 3. 反映
. $PROFILEもしくは、Gitリポジトリやクラウドストレージでプロファイルを管理するのもおすすめです。
各設定項目のまとめ
| 設定 | デフォルト値 | 変更後 | 効果 |
|---|---|---|---|
[Console]::InputEncoding | Shift-JIS (932) | UTF-8 (65001) | 入力の文字化け防止 |
[Console]::OutputEncoding | UTF-8 (65001) | UTF-8 (65001) | 出力の文字化け防止(念のため明示) |
$OutputEncoding | UTF-8 (65001) | UTF-8 (65001) | パイプ経由の文字化け防止(念のため明示) |
SecurityProtocol | SystemDefault | TLS 1.2 + 1.3 | HTTPS接続の安定化 |
ContentType | なし | application/json; charset=utf-8 | 日本語JSONの自動charset付与 |
$ProgressPreference | Continue | SilentlyContinue | ダウンロード高速化 |
まとめ:たった1ファイルの設定で快適なAPI開発環境に
PowerShellでWordPress REST APIが失敗する本体の原因は、InputEncodingがShift-JIS(CP932)のままであることがほとんどです。
プロファイルファイルにたった数行の設定を追加するだけで、以下の恩恵が得られます:
- ✅ Basic認証が安定的に成功する
- ✅ 日本語を含むリクエストが文字化けしない
- ✅ HTTPS接続が安定する
- ✅ 新しいセッションを開くたびに自動適用される
- ✅ 別のPCにも簡単に移行できる
Google Antigravityとの組み合わせでWordPress開発をされている方は、ぜひこの設定を最初に行っておくことをおすすめします。一度設定してしまえば、REST API周りのトラブルに悩まされることはなくなるでしょう。








ディスカッション
コメント一覧
まだ、コメントがありません