いつか書こうと思っているうちに1年以上経過したが、Yosemiteで"あのファイル"が姿を消した。もうすぐ消えるぞ、サポートされなくなるぞ、とメッセージが記述されていたファイル……といえばピンとくる向きもあるだろう。そう、「/etc/hostconfig」だ。数年にわたり予告されていただけに、消えてからも困ることはなく、OS Xユーザの間で話題になることも少なかったように思う。

そして時代はEl Capitan、もちろん/etc/hostconfigが復活するわけはなし、事態はむしろ進行した。「rootlessモード」ことSystem Integrity Protectionの導入だ。これにて万事休す、試みに作成することすら困難となった(そもそもやる気はないけれど)。

在りし日の「/etc/hostconfig」。/etcディレクトリ全体にroot権限を行使できなくなったEl Capitanの時代、試みに作成することすら困難となった

そのような経緯で思い出したが、OS Xのコンピュータ名/ホスト名設定。ゼロコンフィグレーション機構「Bonjour」を使うOS Xのこと、コンピュータ名はシステム環境設定の「共有」パネルで定義することが常道だ。しかし、その初期値は「○○○のコンピュータ」。シェル(bash)のプロンプトに表示されるホスト名も、それをローマ字読みした「○○○-no-computer」となる始末。一方では、hostnameコマンドでホスト名を表示するなどのUNIXとしての機能も残されており、そちらは別途対応しなければならない。正直、スマートとは思えない。

だから、OSを新規インストールしたときにはすぐにコンピュータ名/ホスト名を変えることになるのだが、要設定箇所が分散しているためどうにも管理しにくい。/etc/hostconfigの消滅とは関係ないが、決して実りの多い作業ではないため、これを機会にパパッと終わらせる方法を考えてみたい。

システム環境設定の「共有」パネル

「scutil」を使う

まず、前提条件を整理しよう。コンピュータ名/ホスト名は、Macをサーバとして使うとき他のコンピュータ/OSで参照されることを考慮すると、英数字で構成されるべき。Apple製品だけで閉じた世界であれば、漢字などのマルチバイト文字を利用しても支障ないだろうが、ASCIIで表現できる範囲で命名したほうが無難だ。それに、コンピュータ名/ホスト名に漢字やひらがなを使うと不思議なルールでローマ字に置換されてしまうため、不格好なことこのうえない。

コンピュータ名に「海上忍」と登録したところ、どのようなルールで読まれたものだろうか、「umijounin」というホスト名が設定されてしまった

コンピュータ名/ホスト名は英数字でOK、できればシステム環境設定を使わずシェルスクリプト一発で完了したい、ということならばお勧めは「scutil」だ。このコマンド、ネットワーク管理を司るSystemConfigurationフレームワークのCUIフロントエンドであり、早い話がシステム環境設定の「ネットワーク」や「共有」ペインにTerminalからアクセスできる。このコマンドでシェルスクリプトを作成しておけば、新規インストールのとき手間をかけずにコンピュータ名/ホスト名を設定できる。

まず行うべきは、現在のコンピュータ名/ホスト名の確認だ。オプション「--get」に引数「ComputerName」を与えて実行すれば、現在のコンピュータ名が表示される。引数を「LocalHostName」とすればBonjour名が表示される。「HostName」とすればホスト名だ。

ComputerNameとLocalHostName、HostNameの違いだが、Bonjourで参照されるのは「LocalHostName」。システム環境設定の「共有」ペインで設定されるのは「ComputerName」だが、そこで入力作業を行うと「LocalHostName」にも同じ文字列が強制適用されてしまう。だから、通常「ComputerName」と「LocalHostName」は同じ値だが、scutilを使えばそれぞれ異なる値を設定できる。

コンピュータ名を確認する

$ scutil --get ComputerName ○○○

コンピュータ名を設定する(Bonjour名は変えない)

$ sudo scutil --set ComputerName ○○○

ホスト名は若干ややこしい。システム環境設定の「共有」で入力した値は適用されず、デフォルトでは「scutil --get HostName」とすると「not set」と表示されるが、なぜか「hostname」コマンドを実行するとBonjour名が表示されるなど、統一性に欠ける部分があるのだ。scutilを使えばhostnameに反映される形で独自の名前を設定できるので、ComputerNameやLocalHostNameと分けて管理したい場合に利用するといいだろう。

ComputerNameとLocalHostName、HostNameをそれぞれ変えて設定することも可能だ