🔍

Claude Code 実践検証 Day 6|sqlcmd日本語文字化け問題、シェル使い分けで解決

に公開

疑問:日本語の文字化け、どう対処する?

Claude CodeはUTF-8で動作しますが、Windows環境には複数の文字コードが混在しています。

環境 文字コード
Claude Code UTF-8
PowerShell(従来) Shift-JIS(CP932)
Git Bash UTF-8
既存プロジェクト Shift-JIS(多い)

対処法も複数考えられます:

  1. 全部UTF-8に統一する - シンプルだが既存ファイルの変換が必要
  2. Shift-JISファイルはCLAUDE.mdで指示する - 既存プロジェクト向け
  3. シェルを使い分ける - Git Bash + PowerShellのハイブリッド運用

どれが実用的なのか、実際に検証してみました。

結論

3. シェルを使い分けるが最も実用的でしたね。

シェル 用途 設定
Git Bash 通常の開発作業 PYTHONUTF8=1 を環境変数に設定
PowerShell sqlcmd を使う時だけ chcp 65001 + -f 65001 / -f o:65001

既存ファイルを変換する必要もなく、CLAUDE.mdで複雑な指示を書く必要もありません。


検証環境

検証実施日: 2025-12-07
OS: Windows 11 Pro
Python: 3.13.9
sqlcmd: 16.0.1000.6
SQL Server: 2016 SP1-CU8 (13.0.4474.0)

検証1: PYTHONUTF8=1 の効果

環境変数 PYTHONUTF8 の有無でPythonの挙動がどう変わるか確認しました。

未設定時(Git Bash)

$ python -c "import sys; print(f'stdout encoding: {sys.stdout.encoding}')"
stdout encoding: cp932

$ python -c "print('日本語テスト')"
���{��e�X�g  # 文字化け

PYTHONUTF8=1 設定時(Git Bash)

$ export PYTHONUTF8=1
$ python -c "import sys; print(f'stdout encoding: {sys.stdout.encoding}')"
stdout encoding: utf-8

$ python -c "print('日本語テスト')"
日本語テスト  # 正常
項目 PYTHONUTF8未設定 PYTHONUTF8=1
sys.stdout.encoding cp932 utf-8
日本語出力 文字化け ❌ 正常

これは単純。Git Bashでは PYTHONUTF8=1 を設定しておけばOKです。


検証2: Claude Code vs sqlcmd の文字コード

あれ?と思ったのがここでした。

Claude Codeでsqlファイルを作成すると、どのエンコードで保存されるのか。

$ file sql/claude_created.sql
sql/claude_created.sql: Unicode text, UTF-8 text

Claude Codeは常にUTF-8(BOMなし)でファイルを作成する。

で、このファイルをsqlcmdでそのまま実行すると…

> sqlcmd -i claude_created.sql
メッセージ 173、レベル 15...
'備考]   NVARCHAR(500) NULL...' の定義にはデータ型を含めてください。

見事にエラー。日本語が正しくパースされず、構文エラーになりました。

正直、最初は何が起きてるのかわからなくて、30分くらい悩みましたね。これがミスマッチの正体だったんです。


検証3: sqlcmd のオプションで解決

sqlcmdには -f オプションがあり、これで文字コードを制御できます。

入力ファイル(PowerShell)

ファイル オプション 結果
Shift-JIS なし ✅ 成功
UTF-8(Claude Code作成) なし ❌ 失敗
UTF-8(Claude Code作成) -f 65001 ✅ 成功

コンソール出力(PowerShell)

> sqlcmd -Q "SELECT N'日本語テスト' as test_col"
���{��e�X�g  # 文字化け

> chcp 65001
> sqlcmd -Q "SELECT N'日本語テスト' as test_col"
日本語テスト  # 正常

ファイル出力(PowerShell)

> sqlcmd -Q "SELECT ..." -o output.txt
# → CP932で出力される(文字化けの可能性)

> sqlcmd -Q "SELECT ..." -f o:65001 -o output.txt
# → UTF-8で出力される

sqlcmd利用時の設定まとめ(PowerShell)

# コンソール文字コードをUTF-8に
chcp 65001

# Claude Code作成のSQL(UTF-8)を実行
sqlcmd -S server -d db -f 65001 -i script.sql

# 結果をUTF-8ファイルに出力
sqlcmd -S server -d db -Q "SELECT ..." -f o:65001 -o output.txt
オプション 用途
chcp 65001 コンソール表示をUTF-8に
-f 65001 入力ファイルをUTF-8として読む
-f o:65001 出力ファイルをUTF-8で書く

まとめ

「日本語の文字化け、どう対処する?」への回答:

シェルを使い分けるのが最も実用的でした。

  • 通常の開発: Git Bash + PYTHONUTF8=1
  • sqlcmd利用時: PowerShell + chcp 65001 + -f 65001 / -f o:65001

既存のShift-JISファイルを変換する手間もなく、日本語・特殊文字(①②③、㈱、㌔)も問題なく扱えます。

同じところで詰まった人の参考になれば。


検証日: 2025-12-07
環境: Windows 11 + Claude Code + SQL Server 2016

Discussion