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) ※これもOK

REST 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 $PROFILE

Falseが返る場合は、ファイルを新規作成します:

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]::InputEncodingShift-JIS (932)UTF-8 (65001)入力の文字化け防止
[Console]::OutputEncodingUTF-8 (65001)UTF-8 (65001)出力の文字化け防止(念のため明示)
$OutputEncodingUTF-8 (65001)UTF-8 (65001)パイプ経由の文字化け防止(念のため明示)
SecurityProtocolSystemDefaultTLS 1.2 + 1.3HTTPS接続の安定化
ContentTypeなしapplication/json; charset=utf-8日本語JSONの自動charset付与
$ProgressPreferenceContinueSilentlyContinueダウンロード高速化

まとめ:たった1ファイルの設定で快適なAPI開発環境に

PowerShellでWordPress REST APIが失敗する本体の原因は、InputEncodingがShift-JIS(CP932)のままであることがほとんどです。

プロファイルファイルにたった数行の設定を追加するだけで、以下の恩恵が得られます:

  • ✅ Basic認証が安定的に成功する
  • ✅ 日本語を含むリクエストが文字化けしない
  • ✅ HTTPS接続が安定する
  • ✅ 新しいセッションを開くたびに自動適用される
  • ✅ 別のPCにも簡単に移行できる

Google Antigravityとの組み合わせでWordPress開発をされている方は、ぜひこの設定を最初に行っておくことをおすすめします。一度設定してしまえば、REST API周りのトラブルに悩まされることはなくなるでしょう。