開発者であればhostsファイルを編集して接続先を変更してみるといった操作を行うことがよくあるかと思います。hostsファイルは単なるテキストファイルなので管理が煩雑になりがちで、後で見返した時に分かりづらいものになってしまいやすいです。 そこで使ってみたいのがhostctlです。hostsの設定をグルーピングして分かりやすく管理できます。

hostctlの使い方

hostctl list で現状の設定を確認できます。

$ hostctl list
Using hosts file: /etc/hosts
+---------+--------+-----------------+----------------------------+
| PROFILE | STATUS |       IP        |           DOMAIN           |
+---------+--------+-----------------+----------------------------+
| default | on     | 127.0.0.1       | localhost                  |
| default | on     | 255.255.255.255 | broadcasthost              |
| default | on     | ::1             | localhost                  |
| default | on     | 127.0.0.1       | kubernetes.docker.internal |
+---------+--------+-----------------+----------------------------+

ドメインを追加します。プロファイルを追加できます。

$ sudo hostctl -p test add domains test.com --ip 123.123.123.123
Password:
Using hosts file: /etc/hosts
+---------+--------+-----------------+----------+
| PROFILE | STATUS |       IP        |  DOMAIN  |
+---------+--------+-----------------+----------+
| test    | on     | 123.123.123.123 | test.com |
+---------+--------+-----------------+----------+

追加されました。プロファイルが分かれているのが分かります。

$ hostctl list
Using hosts file: /etc/hosts
+---------+--------+-----------------+----------------------------+
| PROFILE | STATUS |       IP        |           DOMAIN           |
+---------+--------+-----------------+----------------------------+
| default | on     | 127.0.0.1       | localhost                  |
| default | on     | 255.255.255.255 | broadcasthost              |
| default | on     | ::1             | localhost                  |
| default | on     | 127.0.0.1       | kubernetes.docker.internal |
+---------+--------+-----------------+----------------------------+
| test    | on     | 123.123.123.123 | test.com                   |
+---------+--------+-----------------+----------------------------+

プロファイル単位で有効/無効を切り替えられます。

$ sudo hostctl disable -p test

リストで確認します。

$ hostctl list
Using hosts file: /etc/hosts
+---------+--------+-----------------+----------------------------+
| PROFILE | STATUS |       IP        |           DOMAIN           |
+---------+--------+-----------------+----------------------------+
| default | on     | 127.0.0.1       | localhost                  |
| default | on     | 255.255.255.255 | broadcasthost              |
| default | on     | ::1             | localhost                  |
| default | on     | 127.0.0.1       | kubernetes.docker.internal |
+---------+--------+-----------------+----------------------------+
| test    | off    | 123.123.123.123 | test.com                   |
+---------+--------+-----------------+----------------------------+

hostctlを使えばプロジェクトごとに登録したhostsの設定をまとめて有効にしたり、逆に無効にできます。これで管理がしやすくなるでしょう。直接hostsを編集するのを止めて、hostctl経由で行うのは、運用を手軽にするためにもよさそうです。例えばシェルスクリプトを用意して、プロジェクト内の設定をまとめてできるようにしてもいいでしょう。

hostctlはGo製のオープンソース・ソフトウェア(MIT License)です。

guumaster/hostctl: Manage your hosts file like a pro!