Instiq
第3章 · システム管理·v1.0.0·更新 2026/7/6·読了目安 約11分

変更要約: 初版(主題1.08・副主題1.08.1〜1.08.3に対応)

3.3ローカライゼーションと国際化

この節の要点

言語・地域設定の仕組みを学びます。国際化(i18n)とローカライゼーション(l10n)の違い、ロケールと環境変数(LANGLC_ALLLC_*)、locale コマンド、文字コードASCIIUnicodeUTF-8ISO-8859ISO-2022-JP)とiconv による変換、スクリプトで LANG=C が役立つ理由を押さえます。

「日本語のはずが文字化けする」「ソートの結果が環境で違う」——原因はたいていロケール文字コードです。日本語環境の管理者にとっては実害が身近なだけに、仕組みから理解しておくと強いテーマです。

3.3.1ロケールと環境変数

  • 国際化(i18n)=ソフトを多言語対応できる作りにすること/ローカライゼーション(l10n)=特定の言語・地域に合わせ込むこと。
  • ロケール=言語・地域・文字コードの組(ja_JP.UTF-8 =日本語/日本/UTF-8)。現在値の確認=locale コマンド・利用可能一覧=locale -a
  • 優先順位=LC_ALL(全カテゴリを強制上書き)> LC_*(LC_TIME・LC_COLLATE 等の個別カテゴリ)> LANG(既定値)
  • LANG=C(POSIX ロケール)=メッセージが英語・ソートがバイト順になる基準環境。スクリプトでコマンド出力を parse するときは LANG=C にして、翻訳による出力差を排除するのが定石。

3.3.2文字コードと iconv

  • ASCII=英数字と記号の7ビット基本セット/ISO-8859=欧州言語向けの8ビット拡張群/Unicode全世界の文字に番号を割り当てる規格で、その代表的な符号化が UTF-8(ASCII 互換・現在の Linux 標準)。
  • ISO-2022-JP=日本語メールで伝統的に使われる7ビット符号化(JIS)。
  • iconv=文字コード変換(iconv -f SHIFT_JIS -t UTF-8 old.csv > new.csv-f 変換元・-t 変換先)。対応一覧は iconv -l
試験ポイント

「LC_ALL > LC_* > LANG の優先順位」「スクリプトの出力 parse には LANG=C」「iconv -f 元 -t 先」 が3大頻出です。「UTF-8 は Unicode の符号化方式のひとつ(Unicode=符号化方式そのものではない)」という規格と符号化の区別も選択肢で問われます。

なぜ LANG=C が「スクリプトの保険」になるのかを具体で見ましょう。df -h の出力見出しは、日本語ロケールでは「使用%」、英語では「Use%」——grep や awk での抜き出しがロケール次第で壊れるわけです。スクリプト冒頭(またはコマンド単位で LANG=C df -h)で C ロケールに固定すれば、どのサーバーでも同じ英語出力・同じバイト順ソートが保証されます。もうひとつの実務定番が文字化けファイルの救出です。Windows から届いた Shift_JIS の CSV が Linux(UTF-8 前提)で化けたら、iconv -f SHIFT_JIS -t UTF-8 受領.csv > 変換済.csv で正規化します。優先順位の実験は LC_TIME=C dateLC_ALL=ja_JP.UTF-8 LC_TIME=C date を見比べるのが早く、後者では LC_ALL が LC_TIME を握りつぶして日本語表示になります——「LC_ALL は個別設定をすべて上書きする」を体で覚えられる例です。

変数/規格役割要点
LANGロケールの既定値個別 LC_* が無い部分に適用
LC_ALL全カテゴリ強制上書き最優先(デバッグ・固定用)
LANG=CPOSIX 基準環境スクリプトの出力を安定化
UTF-8Unicode の符号化方式ASCII 互換・Linux 標準
注意

ひっかけ: 「LANG は LC_ALL より優先される」は誤りです。優先順位は LC_ALL > LC_* > LANG で、LANG は最後の既定値です。また「iconv はファイルのロケールを変更するコマンド」も誤り=iconv が変換するのは文字コード(テキストの中身)で、ロケール(環境変数)とは別物です。「Unicode と UTF-8 は同じもの」も不正確=UTF-8 は Unicode の符号化方式のひとつです。

LC_ALL>LC_*>LANG の優先順位・LANG=C の用途・iconv 変換の図。
parse する時は LANG=C

3.3.3この節のまとめ

  • 優先度 LC_ALL>LC_*>LANG・確認は locale(-a)。スクリプトの parse は LANG=C で固定
  • UTF-8=Unicode の符号化(Linux 標準)・メールの伝統は ISO-2022-JP。変換は iconv -f 元 -t 先

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. ロケール関連の環境変数の優先順位として正しいのはどれ?

Q2. コマンド出力を grep で解析するスクリプトが、日本語環境のサーバーでだけ動かない。出力を環境非依存にする定石はどれ?

Q3. Windows から受け取った Shift_JIS の CSV ファイルを UTF-8 に変換したい。適切なコマンドは?

理解度を確認第3章「システム管理」の問題を解く