【コラム】

新・OS X ハッキング!

72 日本語ロケールと「Kyokoさん」の関係

72/199

iPhone 5の軽さに慣れたタイミングで我が家にやってきた「iPad mini」。いやあ、ラクです。とにかく軽い。iPad用に最適化されたデジタルマガジンを見る場合、ちょっと文字が小さいかな、と感じることはありますが、なにせ軽いので許せてしまいます。今後は取材のときにも活躍しそうです。

さて、今回は「日本語ロケール」について。ふだん何気なく利用していると気付かないが、OS Xにはいくつかのロケール機構が存在する。そのしくみを解説するとともに、ロケール機構により日本語メッセージを出力するコマンド「date」の使い方を紹介してみよう。

OS Xのロケールのしくみ

多言語対応のソフトウェアは、出力するメッセージの内容や通貨・日付などの単位を国/地域によって切り替える機構を備えている。それが「ロケール」で、多言語対応のOSであるOS Xにおいても、ロケール機構により日本語や英語、フランス語といった各種言語を切り替えている。

その設定ツールが、システム環境設定の「言語とテキスト」パネルだ。そこに表示されている言語のリストは、システムおよびアプリケーションから参照され、もっとも上に表示されているものが最優先でロケールとして適用される。だからOS Xを日本語環境で利用している場合、いちばん上の行には「日本語」と表示されているはずだ。

システム環境設定「言語とテキスト」パネル。ここで最優先に設定した言語が「.CFUserTextEncoding」に記録される

2行目以降は、最優先の言語に対応したリソースがシステム/アプリケーションに存在しない場合適用される。たとえば、日本語の言語リソースを持たないアプリケーションを起動した場合は、2行目の言語リソースの有無を試し、それもなければ3行目……という順序で処理される。

その「言語とテキスト」パネルで設定した最優先言語の情報は、ホームフォルダに「.CFUserTextEncoding」というファイル名で記録される。先頭が「.」から始まるFinderでは不可視のファイルだが、Terminalでcatコマンドなどを使い内容を表示すれば、日本語が最優先のときは「1:14」、英語は「0:00」、ドイツ語は「0:30」……と値が変わることを確認できるはずだ。

シェルの世界のロケールは?

と、ここまではOS X独自のレイヤーでの話。シェルとその上で動作する各種コマンドは、決められた環境変数を参照して使用する言語を決定する。日付と時刻のフォーマットを設定する「LC_TIME」、通貨単位や金額の表記を決める「LC_MONETARY」などいくつかの種類があるが、これらをまとめて設定するために「LC_ALL」と「LANG」が用意されている。

なお、「LC_ALL」は他のロケール用環境変数に優先され、どのような値が設定されていても上書きする。一方の「LANG」はもっとも効果が弱く、他のロケール用環境変数に上書きされてしまう。もっとも、多くのコマンドは「LANG」を設定しておけばじゅうぶんで、日本語環境(テキストエンコーディングはUTF-8)で利用する場合は、以下のような記述をシェルのスタートアップファイル(「~/.bashrc」や「~/.bash_profile」など)へくわえておけばいい。

export LANG=ja_JP.UTF-8

Terminalでlocaleコマンドを実行し、現在のロケール用環境変数を一覧したところ

このロケール関連の環境変数に影響を受けるコマンドで好例が「date」コマンドだ。OS Xに収録されているdateコマンドは多言語対応で、指定されたロケールで月日の表示スタイルを変更する。たとえば、以下のとおりコマンドを実行すると、上から順に米国(en_US.UTF-8)、日本(ja_JP.UTF-8)、中国語繁体字(zh_TW.UTF-8)のスタイルで現在時刻を表示できる。

$ LC_TIME=en_US.UTF-8 date
Mon Nov 12 20:14:03 JST 2012

$ LC_TIME=ja_JP.UTF-8 date
2012年 11月12日 月曜日 20時14分23秒 JST

$ LC_TIME=zh_TW.UTF-8 date
2012年11月12日 周一 20時14分57秒 JST

dateコマンドとKyokoさんは好相性?

さて、Terminalにおけるロケールの仕組みを一通り説明したところで、次はdateコマンドを活用してみよう。その対象は……「say」コマンド。そう、流ちょうな日本語を話すKyokoさん(名前からして当然だが)にdateコマンドの出力を渡せば、なかなか実用的なことができるのだ。第38回でsayコマンドを取り上げたときの応用編、と考えていただいて差し支えない。

まず、表1をご覧いただきたい。dateコマンドでは、システムが持つ日時情報をさまざまなフォーマットで出力できるが、そのうちいくつかがロケール対応となっている。日本語ロケールを設定していれば、現在時刻を「20時30分25秒」のように時分秒の単位付きで返してくれたり、曜日を「月曜日」や「火曜日」などとしてくれたりするのだ。

表1:dateコマンドで使えるロケール対応のフォーマット

フォーマット 内容 出力例
%A 曜日 月曜日、火曜日
%B 11月、12月
%a 曜日 月、火、水
%X 時分秒 20時49分03秒

これを多少加工してsayコマンドに引き渡せば、なかなかイイ感じでKyokoさんが話してくれる。手はじめは、現在時刻。現在時刻情報の前に「ただいま」、末尾に「です」をくわえて出力することで、sayコマンドには「ただいま20時55分05秒です」という文字列が引き渡され、その結果Kyokoさんも自然な感じで現在時刻を読み上げてくれる。

$ date +"ただいま"%X"です" | say

または

$ say `date +"ただいま"%X"です"`

次に紹介する事例は、コマンド実行時点の月日に続けて曜日を読み上げるというもの。たとえば、11月12日に実行すると、「きょうは11月12日、月曜日です」という声が聞こえる。Terminalの起動直後に実行するよう設定しておくなど、なかなか実用的なのではないだろうか。本当は、launchdを使いsayコマンドを自動実行するところまで解説するつもりだったのだが、紙幅が尽きてしまい……それはまたの機会とさせていただきたい。

$ date +"きょうは"%B%e"日、"%A"です" | say

または

$ say `date +"きょうは"%B%e"日、"%A"です" `

72/199

インデックス

連載目次
第199回 Mac経由で「Raspberry Pi Zero」をインターネットに接続
第198回 「自作関数」でTerminalをもっと快適に
第197回 「Quick Look」をもっと快適に
第196回 JXAを使えば「通知」がもっと便利に
第195回 Terminalで快適に日本語検索するために
第194回 「ShairPort」でこれからのAirPlayを考える
第193回 Yet Anotherな「Live Photos」の鑑賞方法
第192回 Sierra時代のキーカスタマイズ術
第191回 「pdftk」でPDFのハンドリングが自由自在(2)
第190回 「pdftk」でPDFのハンドリングが自由自在(1)
第189回 WindowsユーザとZIPをやり取りするために
第188回 「MinimServer」でMac上の楽曲をネットワーク再生
第187回 Sierraで厳しくなった「Gatekeeper」と付き合う
第186回 もっと! ユニバーサルクリップボードを活用する
第185回 Sierraで消えたFinder関連の便利機能を復活させる
第184回 NASのアクセス速度を改善する
第183回 「Quartzフィルタ」でPDFをコンパクトに
第182回 Sierraで「アクセス権の修復」が消えた理由とその対策
第181回 いま敢えて確認したい、「プレビュー」のPDF加工術
第180回 NASに貯めた楽曲を「OpenHome」で快適再生 (後編)
第179回 NASに貯めた楽曲を「OpenHome」で快適再生 (前編)
第178回 いま敢えてファンクションキーをカスタマイズする
第177回 Universal Clipboardをもっと便利に
第176回 新MacBook Proの「Touch Bar」をTerminalから眺める
第175回 Apple File System(APFS)を試す
第174回 あの「PDFプリンタ」をもう一度
第173回 新MacBook Proの「Touch Bar」はどう使われるか
第172回 SierraのSiriは「ヘイ、シリ」できるか?
第171回 Terminalで「ユニバーサルクリップボード」を使う
第170回 「Bash on Windows」とOS Xのシェル環境を比較する
第169回 Terminal上で「ダ」や「パ」が付くファイルを検索できない理由と対策
第168回 非Macユーザと「dot_clean」
第167回 OS X El Capitanでも健在の「ディレクトリサービス」
第166回 開発者でなくても「Swift」は便利に使える
第165回 次の「Sierra」で消えるあれこれ
第164回 「Continuity」非対応の旧型Macで「AirDrop」や「HandOff」を利用できるワザを発見!
第163回 URLスキームでiPhoneと賢く連携
第162回 El Capitan時代のデスクトップ裏設定術
第161回 El Capitan時代のFinder裏設定術
第160回 コマンド環境の充実度でWindows 10が急伸!? 負けじとOS Xの「bash」を日本語対応させる
第159回 Safari Technology Previewを試す
第158回 機能逆引きなら使える? 便利に使えるワンフレーズコマンド集(5)
第157回 機能逆引きなら使える? 便利に使えるワンフレーズコマンド集(4)
第156回 機能逆引きなら使える? 便利に使えるワンフレーズコマンド集(3)
第155回 機能逆引きなら使える? 便利に使えるワンフレーズコマンド集(2)
第154回 機能逆引きなら使える? 便利に使えるワンフレーズコマンド集(1)
第153回 まだまだ現役の光学ドライブを「drutil」で使う
第152回 El Capitanの「SIP」をもっと知る
第151回 さようならiTunes ~正確にCDを取り込む~
第150回 さようならiTunes ~MPDのススメ その2~
第149回 さようならiTunes ~MPDのススメ その1~
第148回 「El Capitan」のココが気になる ~音声入力編~
第147回 「El Capitan」のココが気になる ~ホスト名編~
第146回 El Capitan」のココが気になる ~Disk Utility編~
第145回 「El Capitan」のココが気になる ~消えた機能対策編~
第144回 「El Capitan」のココが気になる ~Spotlight編~
第143回 Terminalから見た「El Capitan」の変更点(2)
第142回 Terminalから見た「El Capitan」の変更点(1)
第141回 「Raspberry Pi」をOS Xで快適に使うために(3)
第140回 「Raspberry Pi」をOS Xで快適に使うために(2)
第139回 「Raspberry Pi」をOS Xで快適に使うために(1)
第138回 単発処理もOK、「pmset」の電源管理ワザ
第137回 Yosemiteで「Web共有」を復活させる
第136回 いまさら聞けない? シェルの基本技(2)
第135回 いまさら聞けない? シェルの基本技(1)
第134回 いまさら聞けない? ターミナルの環境整備(3)
第133回 いまさら聞けない? ターミナルの環境整備(2)
第132回 いまさら聞けない? ターミナルの環境整備(1)
第131回 軽いPNGをもっと「軽く」する
第130回 実は種類がある「PNG」の見分けかた
第129回 Yosemite使いは知っておくべき「Core Storage対策」
第128回 「lsappinfo」で知るCoreApplicationServices
第127回 知られざるツール「Widget Simulator」
第126回 Yosemiteでついに消えた「あのファイルたち」
第125回 「Sublime Text」奮闘記 ~実践編~
第124回 「Sublime Text」奮闘記 ~導入編~
第123回 MacとiPhoneですぐに試せる「iBeacon」
第122回 OS XのTTSフロントエンド「say」が歌う!
第121回 BSDレイヤー温故知新(5)「固有コマンド:textutil」
第120回 BSDレイヤー温故知新(4)「Spotlight」
第119回 BSDレイヤー温故知新(3)「スーパーサーバ」
第118回 BSDレイヤー温故知新(2)「KEXT」
第117回 BSDレイヤー温故知新(1)「iノード」
第116回 インタラクティブになった「say」と戯れる
第115回 意外に奥深い? 「字数カウント」のテク
第114回 Kindle本発売記念、defaultsコマンドのYet Anotherな使い方
第113回 あのファイルシステムをOS Xでラクに読み書き(1)
第112回 知っているとファイル検索が変わる「mdfind」
第111回 Yet Anotherなファイアウォール「PF」をラクに使う
第110回 MavericksにしたらNASがおかしい、そんなときの対策
第109回 FinderとTerminalの連携を考える
第108回 『Mavericksの新コマンド(2)』
第107回 『Mavericksの新コマンド(1)』
第106回 Mavericks目前だから「添付ファイル」を整理!
第105回 iOS 7公開直前! iOSデバイスのバックアップを整理する
第104回 OS Xの音声入力、知られざるワザ
第103回 Mavericksに備えてホームディレクトリをお引っ越し
第102回 Mavericksの新規インストールは「キーチェーン」のコピーで快適!
第101回 OS Xのデスクトップに「シェル由来の機能」を見る
第100回 いま敢えて「お約束のシェルの機能」を知る
第99回 Mavericks以降なくなる(はずの)アレコレ
第98回 ここにSVGファイルがあるじゃろ?
第97回 Mountain Lionの知名度は低いが有用なコマンドたち
第96回 スパイも安心? なファイル削除コマンド「srm」
第95回 あのデバイスのIPアドレスを調べるには
第94回 pkgutilでインストーラパッケージを削除する
第93回 いまや必須の「SDカード」と付き合う方法(後編)
第92回 いまや必須の「SDカード」と付き合う方法(前編)
第91回 OS X標準の機能でも、PDFはここまでできる
第90回 S Xを快適に使う「5つの心がけ」~ プロセス管理編
第89回 OS Xを快適に使う「5つの心がけ」~ 無線LAN編
第88回 OS Xを快適に使う「5つの心がけ」~ Safari編
第87回 OS Xを快適に使う「5つの心がけ」~ メモリ領域の管理編
第86回 OS Xを快適に使う「5つの心がけ」~ Launchpad編
第85回 ふと気がつけば4GB目前! 肥大化するログファイルに備えよう
第84回 話題の「File:///」とURLスキーム
第83回 Mountain Lionで消えた「enviroment.plist」
第82回 「QuickTime」に見るOS Xとの関係の変化
第81回 OS Xの「マルウェア」対策を知る
第80回 CS2騒動で思い出した「Rosetta」、そして「X11」
第79回 【新春特別企画】どうなる? 2013年のMacを考える
第78回 印刷をもっと楽しく! オリジナルの「表紙」をつくる
第77回 「Python」でGUIスクリプトを記述する
第76回 Web共有を復活させ「Wii U」の動画再生能力をチェック
第75回 毎年恒例の宛名印刷に「連絡先」のデータを生かす
第74回 いまも現役「WebObjects」との付き合い方
第73回 OS XでAndroid生活(MOVERIO BT-100編)
第72回 日本語ロケールと「Kyokoさん」の関係
第71回 Terminalから「共有」機能にアクセスすれば、画像添付ツイートもOK!
第70回 iPhone 5の「テザリング」とOS Xが共存共栄するには
第69回 意外? TerminalとTwitterは相性良好!
第68回 iPhone 5テザリング日記 ~au編~
第67回 DRMフリーで320kbps! 「Mora」の曲をiPhoneで聴こう
第66回 Terminalの制御コードに親しもう
第65回 特別編:iPod touch化したiPhone 4、自分はこう使う
第64回 ネイティブ化された「GIMP」を再びリスペクト
第63回 Bluetoothスピーカーの音質改善策、その意外な結末
第62回 知らなかった? ちょっと便利なMountain Lionの新機能(2)
第61回 知らなかった? ちょっと便利なMountain Lionの新機能(1)
第60回 「通知センター」の舞台裏を知る
第59回 iOSを超えた? Mountain LionのAirPlayサポート
第58回 続:iCloudは汎用ストレージとして使えるか?
第57回 iCloudは汎用ストレージとして使えるか?
第56回 新世代のOS Xユーザへ(4):情報の宝庫「/var」
第55回 SDHCカードをLionの起動ディスクとして使う
第54回 新世代のOS Xユーザへ(3):Terminalの暗黒面
第53回 新世代のOS Xユーザへ(2):知っておきたいコマンドたち
第52回 新世代のOS Xユーザへ(1):CUIのススメ
第51回 OS XがAirPlayの受け手になる「AirServer」を試す
第50回 iTunesで「ミドルレゾ音源」を楽しもう
第49回 軽い! 「フォトストリーム」を無手勝流検索
第48回 画像だけじゃない? OS Xに「高精細時代」が到来する
第47回 いま話題のリモートシェル「Mosh」を試す
第46回 外付けHDDをCore Storage形式に変換する
第45回 書類フォルダとして使える? 話題の「Google Drive」をテスト
第44回 知らなきゃ損する「tmutil」の便利機能
第43回 Emacsの「Dired」で拡張子を積極活用
第42回 フォトストリームに新iPad、RAW画像はどうする?
第41回 OS Xでも便利に使える「URLスキーム」
第40回 iPhoneの写真をOS Xで楽しむもうひとつの方法
第39回 実は大きく変わった「Safari 5.1.4」
第38回 Siriがなんだ! いまこそKyokoさんの魅力を再認識
第37回 これから必須のセキュリティモデル「サンドボックス」
第36回 DRMフリーになった「M4Aファイル」を解析する
第35回 番外編:夏登場の「Mountain Lion」、ココに注目
第34回 オープンソースの「Apple Lossless」を念入りに検証する
第33回 意外に知らない「画面共有」
第32回 OS Xで「Blu-ray」を読み書き(2)
第31回 OS Xで「Blu-ray」を読み書き(1)
第30回 「__MACOSX」の意味は? いま敢えて「zip」を見直す
第29回 enscriptでソースコードをカラー印刷
第28回 年末特別企画:ホームフォルダを大掃除
第27回 アスキーアートで描く「賀正」
第26回 手軽にOS Xを「AirPlayサーバ」として使う
第25回 高圧縮率画像フォーマット「WebP」をLionで使う
第24回 OS XのSafariから直接「AirPlay」する
第23回 Mailの「アドレス自動補完機能」をあれこれイジる
第22回 launchctlで読み解くLionとiCloudの関係
第21回 OS XでAndroid生活(スクリーンショット対策編)
第20回 あなたの知らない「Dock」の横顔
第19回 いま敢えて「Quick Look」をリスペクト
第18回 Safariの「リーディングリスト」を勝手に編集
第17回 Lionに見つけたSteveの面影
第16回 Kyokoさんに「OS X」を「オーエステン」と発音させる
第15回 Lion備忘録(8) ~タイムマシンにおねがい~
第14回 Lion備忘録(7) ~これ知ってる? なTIPS~
第13回 Lion備忘録(7) ~フルスクリーンと賢く付き合う~
第12回 Lion備忘録(5) ~キーボード愛好者へ捧ぐ~
第11回 Lion備忘録(4) ~Lionの「おせっかい」対策~
第10回 Lion備忘録(3) ~LaunchPadの謎を解く~
第9回 Lion備忘録(2) ~「Mission Control」に慣れる~
第8回 話題のクラウド「Nドライブエクスプローラー」を試す
第7回 Lion備忘録(1) ~「avconvert」で知るCoreMedia~
第6回 Lionへアップグレードするその前に~インストールDVDをつくろう~
第5回 強力無比のターミナルエミュレータ「iTerm2」
第4回 MacBook Proのスーパードライブにさようなら
第3回 万能ナイフ的メディアプレイヤー「VLC」の知られざる機能
第2回 Lion直前だからこそ、スマートにHDDを健康診断する
第1回 ひと足お先に「iTunes in the Cloud」で音楽の同期を試す

もっと見る

人気記事

一覧

新着記事