🔍
Claude Code 実践検証 Day 6|sqlcmd日本語文字化け問題、シェル使い分けで解決
疑問:日本語の文字化け、どう対処する?
Claude CodeはUTF-8で動作しますが、Windows環境には複数の文字コードが混在しています。
| 環境 | 文字コード |
|---|---|
| Claude Code | UTF-8 |
| PowerShell(従来) | Shift-JIS(CP932) |
| Git Bash | UTF-8 |
| 既存プロジェクト | Shift-JIS(多い) |
対処法も複数考えられます:
- 全部UTF-8に統一する - シンプルだが既存ファイルの変換が必要
- Shift-JISファイルはCLAUDE.mdで指示する - 既存プロジェクト向け
- シェルを使い分ける - 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