UNIXやLinuxのシステム管理(システム・コマンド・設定)に関する世界観7(タイムゾーンとロケール)です。
Linuxを日本語環境にするためには、Linuxカーネル, GNOME/KDE, Firefox, X11, 日本語入力, あるいはApache/PHPやMySQLの文字コードまで、さまざまな設定が必要です。
ですが、基本はタイムゾーンとロケールを設定します。
Linuxでは、/usr/share/zoneinfo/以下に、UTCからの時間のズレを記述したバイナリのゾーン情報ファイルがあるので、タイムゾーンを設定するにはこれを/etc/localtimeにコピーする。コピーではなくシンボリックリンクを張っても良い。
タイムゾーンの設定:
# cp /usr/share/zoneinfo/Asia/Tokyo /etc/localetime
また、一時的に変えたい時は環境変数TZを設定しても良い。
$ export TZ="Asia/Tokyo"
dateコマンドを実行してJSTと表示されればOK。
$ date
また、CentOS7ではtimedatectlコマンドを使う。
(【設定確認から変更方法まで】Linuxでのタイムゾーンの扱い方 - エンジニアの入り口を参考に執筆・引用しました。)
gettextのような仕組みを用いることで、国際化と地域化が容易になる。
文字列に
printf(_("hoge is %s."), hoge_name);
と言うエイリアスをつけ、.poファイルでこのように翻訳出来る。
#: src/hoge_prog.c:20 msgid "hoge is %s." msgstr "ほげとは%sである。"
下にあるロケールの設定をすることで、プログラムのメッセージが日本語に翻訳されたものになる。
ロケールを作るためには、Gentoo Linuxでは/etc/locale.genに「ja_JP.UTF-8」を追加して、locale-genを実行する。
基本的に、英語と日本語のja_JP.UTF-8のロケールは作っておこう。
ロケールの設定は、LANGやLC_*の環境変数を設定する。
基本的に、 LC_ALLを設定すると、他の全ての環境変数が上書きされるため、設定すれば日本語のUnicodeの環境になる。ただ、一般的にはLC_ALLよりもLANGを設定すべきである。LC_ALLはすべてのLC_*を同じ言語で上書きするが、LANGでは個別のLC_*を別々に設定できる。多くの解説(Gentoo Wikiなど)でも「LC_ALLを設定するのは避けるべき」だとされている。よって、
export LANG=ja_JP.UTF8
のように.bashrcあるいは.bash_profileに書けば、それだけでロケールを設定できる。
LANG=ja_JP.UTF8 ls
のように環境変数を設定した上でコマンドを実行すれば、一時的に日本語の環境にした上でコマンドを実行出来る。逆に英語にした上で
LANG=C ls
とすることも可能。
個別のロケールを設定したい場合は、LC_MESSAGES(メッセージのローカライズ用の言語で、設定することでコマンドなどのメッセージを日本語などに変えられる)やLC_COLLATE(文字の順序付け)やLC_CTYPE(文字の属性、どのような文字がアルファベットや数に含まれるかなど)やLC_TIME(日付と時刻の表記)やLC_MONETARY(通貨の表記)やLC_NUMERIC(数値の表記)やLC_PAPER(用紙のサイズ)などのLC_*系の環境変数を設定すれば良い。
実際のシステム管理では、システム全体のロケールは英語のC(UNIXでは英語のASCIIコードを表すために単に「C」とする)にしておいて、ユーザーの環境だけ、環境変数でLANGを設定する、というやり方もある。これはサーバーなどで使うために、基本的環境をCにしたい時に有効。一般ユーザでもCで使う人も居るが、これはメッセージ(ユーザーインターフェースやコマンド出力)が英語になるほか、適切に設定しないと日本語入力もできない(たぶん何とかすればできる)、ハードコアな環境になるので注意が必要。
ローカライゼーション系の環境変数を表示するには、localeコマンドを実行する。
$ locale
設定を恒久的に残したい場合は、.bashrcや.bash_profileなどに「export LANG=ja_JP.UTF-8」と記述すること。
systemdを使うCentOS 7ではlocalectlという専用のコマンドも用意されている。
詳しくは以下を参照のこと。
2023.12.24編集
ただし、ロケールの設定には注意が必要。コンソール端末で表示させた場合、日本語ロケールを使っていると、コンソールで日本語の文字が表示されないことがある。
このような時にはfbtermを使う。
Debianなどの場合、fbtermは最初から入っている。以下のようにfbtermを実行し、その後にmanなどを読めばいい。
$ fbterm (ターミナルの見た目が変わる) $ man ls
文字コードは、システム全体の文字コード、各テキストファイルの文字コードから、PHPやMySQLの文字コードなどがあるし、クライアント側とサーバー側で合わせる必要もあります。
今の標準はUTF-8です。ファイルは出来るだけUTF-8で作るようにしましょう。でも、Windowsで書いた文章は、どうしてもShift-JISになってしまいますし、EUC-JPと言う昔のUNIXの文字コードも混在します。
後日注記:たとえば、WindowsでPerlを使った場合、UTF-8でprint文を実行すると文字化けして日本語が表示できない。perlスクリプトを必ずShift-JISで作る必要がある。だが、そういうUNIXとWindowsとの違いの部分が、Linuxを使えないものにしているという側面はある。Windowsで作ったShift-JISの日本語ファイル名を含むzipの圧縮ファイルは、Linuxで解凍すると文字化けしてしまう。convmvコマンドを使うことで、こうしたファイル名が文字化けしたファイルの名前を変換できる。
Linuxの日本語環境は鬼門で、ディストリビューションごとにも違う。迷った時は英語を読むぐらいの覚悟が必要。日本語入力も昔は難しかった。最近は簡単に、GNOMEでインプットメソッドを設定するだけで出来る。設定方法以前に、そもそも対応していない場合もある(KDE3派生であるTrinityでは、最近の入力システムは動かない)。Linuxに日本語は期待しない方が良い。商用OSほどの国際化がされていると高々に謳う一方で、本当は日本語なんか誰も使っていないからだ。IRCで質問する場合でも、英語で質問して英語で返ってくる、それが普通だ。
本当は、日本語環境を使ってもそんなに悪いシステムではない。だが、ほとんどのユーザーが見て、劣悪なシステムにはなっている。時間がWindowsと一緒にならないとか、文字化けするとか、フォントの種類が少ないとか、英文と日本語文を混在させた時にレイアウトがおかしいとか、色んなおかしな点がある。翻訳もきちんとされていない個所があり、設定項目などで日本語と英語が混じることも少なくない。だから、最初から英語で使って、英語の生活に慣れるという発想もおかしくはない。不思議と、英語で使うと、最初からApacheやMySQLに設定も要らないし、フォントも豊富で、LibreOfficeもきちんとプロ並みに使える、という良い環境になる。決して日本語では使うな、と言いたいわけではなく、最近はインプットメソッドの設定やツールもどんどん進歩しているし、ブラウザのフォントも以前は表示できなかったきちんと太字などが表示できるようになってきた。だが、.zipファイルの中の日本語ファイル名が文字コードで文字化けするなどの不備は今でもFedoraなどで残っている。だが、インプットメソッドのような、本当に必要なところでの日本語対応はきちんとしている。だが、Debianではuimの変換候補の表示位置がおかしいなどの問題はある。
どうすれば良いかと言うと、むしろ、英語に慣れるためだと思って英語を使う生活をし、どうしても必要なところではロケールの設定も出来る、という「両刀使い」を目指すしかない。英語漬けの勉強だと思って英語を基本的に使いながら、日本語入力や日本語文書の表示(特にブラウザなど)は日本語もマルチに使えるように設定しよう。Apacheの設定も、英語のマニュアルを見ながら、日本語のHTMLの文章もサーバできちんと表示させられるように設定できるようになろう。
英語が出来ないと、海外では教養のない人間に見える。英語ぐらい分かるようになっておこう。そのためには、辞書なんか見なくて良い。英会話教室などの教室に行って6年も会話していれば、英語のメッセージは聞き取れるようになるし、英語の日本語と全く違うおかしな話し方を「どのように話していいのか」が分かるようになる。
後日注記:とはいえ、英語でLinuxのメッセージなどを見るのはハードルが少し高い。たとえば、セグメンテーションエラーなどは、Linuxのセグメント機能を知っている上で、英語も理解できなければ理解することができない。だが、エラーメッセージなどは比較的Google検索などで調べやすいメッセージだし、多くの英語のメッセージは簡単である。ただし、システムについての警告などを英語だからといって無視してOKを押すようなことはシステム管理者としては避けるべきだし、商業サーバーなどでは、顧客のデータが日本語で(たとえばホームページのHTMLファイルなど)書かれていることは多くある。こういう時はきちんと日本語ロケールを設定しよう。
最近は日本語に翻訳された環境も整ってきていて、Linuxを使うのに必ずしも英語は必要なくなってきている。
だが、絶対に英語が必要ないかと言うと、そうでもなくて、プログラミングや開発をしたいなら、英語は分かっていた方が良い。
特に、UNIX的な情報の一次情報源を読んだり、開発に参加したりするために、ドキュメントを英語で読んだり、開発者の人と英語でコミュニケーション出来たりすることは、ほとんど必須である。
だが、僕の場合、そんなに英語でドキュメントを読んだ記憶がない。Gentoo Handbookぐらいを英語で読んだだけで、あとは日本語の情報でほとんどのことは分かった。
ただし、英語が分かっていた方が良いと痛感したことはたくさんある。特に、昔はメーリングリストを読むことが出来なかった。
そういうわけで、英会話学校に行くのが良いだろう。僕は英会話教室に通っている。僕の書いた英会話の世界観も参照して欲しい。
ただ、僕はそんなに開発に参加しているわけでもないし、本当に日本語の情報だけでUNIXの基本的な仕組みは分かる。だから、英語が分からないからと言って諦めないでほしい。繰り返し言うが、僕は英語の情報源をあまり読んだ記憶がない。日本語の情報だけでも、ほとんどのことは分かる。恐れないでほしい。
Linuxの日本語環境(入力・表示)については、Linux日本語入力やLinux日本語入力・表示(コンソール・コマンドライン)のページを参照のこと。
英語の学習方法については、英会話も参照のこと。