hostsファイルを入社一年目に向けて説明してみる

# 初めに
先日、入社二年目の後輩にhostsファイルについて聞かれたのでサラッと説明したのですが、残念ながら「？？？」という反応をされてしまいました。


>![説明している絵.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2232744/3f8d4655-5063-5b9b-2c3a-dcf903e2a0c5.png)
>hostsファイルについて簡単に説明している私（左）と理解できていない後輩（右）


次に聞かれたときに理解してもらえるように、最低限の知識をできるだけ分かりやすく書いてみたいと思います。


# hostsファイルとは
## 何のファイル？
hostsファイルは**ホスト名とIPアドレスの組み合わせを管理**しているファイルです。
組み合わせをhostsファイルに設定すると、**ホスト名を自動的にIPアドレスに変換**してくれます。この変換処理を「**名前解決**」と言います。


## どこにあるの？
CentOSやUbuntuなどのLinuxなら
*/etc/hosts*

Windowsなら
*C:\Windows\System32\drivers\etc\hosts*

## 書き方は？
以下のように「IPアドレス」と「ホスト名」を半角スペースで並べて書きます。
\#を記載すると、その行はコメントとして扱われます。

```:hosts
# IPアドレス  ホスト名  別名
127.0.0.1        localhost   
192.168.0.10  station10  station10.example.net
192.168.0.11  station11   station11.example.net
# コメントは#で書けます
```
上記設定だと、「station10」「station10.example.net」にアクセスすると、「192.168.0.10」に変換・アクセスします。


# 実際に使ってみよう！
文字だけの説明だと分かりにくいので、実際にhostsファイルを使ってみましょう。
## 事前準備
実演のために、2台のWebサーバーを作りました。Webブラウザからアクセスすると、以下のようにそれぞれのIPアドレスを表示します。
IPアドレスは「192.168.10.31」「192.168.10.32」なので、それぞれ31サーバー、32サーバーと呼ぶことにします。

>31サーバーにアクセスした時の画面（ http://192.168.10.31/ ）
>![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2232744/eff8c13c-12e6-f596-460d-83261b0c7900.png)

>32サーバーにアクセスしたときの画面（ http://192.168.10.32/ ）
>![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2232744/9fbee436-4556-00e3-a30e-18ab7e15ca43.png)

この２台のサーバーを「test_name」というホスト名とhostsファイルを利用して紐づけてみたいと思います。

## hostsファイルの開き方
それでは、Windows10でhostsファイルを設定します。
>もし、Linux環境を利用している場合は、
>```
>sudo vim /etc/hosts
>```
>で開いてください。

まず、以下の手順でメモ帳を管理者権限で実行します。
1. 画面左下のWindowsマークをクリック
2. 「Windows アクセサリ」をクリック
3. 「メモ帳」を右クリック
4. 「その他」をクリック
5. 「管理者として実行」をクリック
6. ユーザアカウント制御の確認が行われるので、「はい」をクリック

次に、メモ帳でhostsファイルを開きます。
1. 「ファイル」タブにある「開く」をクリック
2. Cドライブ直下に移動し、「Windows」「System32」「drivers」「etc」と移動
3. 右下の「テキスト文書（*.txt）」を「すべてのファイル（*.*）」に変更
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2232744/e73c9264-a97f-2be0-ed6b-3629690344c9.png)



4. いくつかファイルが表示されるので、「hosts」ファイルを選択して「開く」をクリック
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2232744/b7b92276-3e7e-c5c5-b622-ab5de97e6f5b.png)

hostsファイルにはデフォルトで使い方が書かれていますが、気にしないでください。
私のhostsファイルには、次のような記載がありました。
```:hosts
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
#	127.0.0.1       localhost
#	::1             localhost
```

## hostsファイルの設定
hostsファイルの下部に、次の設定を追記して保存します。
（32サーバーの設定はコメントアウトしています）
```:hosts
192.168.10.31  test_name
#192.168.10.32  test_name
```
この設定によって、「test_name」サーバーにアクセスすると、PCは自動的に「192.168.10.31」に変換し31サーバーにアクセスします。
実際にブラウザで「test_name」サーバーの画面を開くと、31サーバーの画面が開かれます。


>「test_name」サーバーにアクセスしたときの画面（ http://test_name/ ）
>![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2232744/473068bd-f036-adad-57af-89235c0eeab6.png)



今度はhostsファイルを以下のように変更して保存します。
31サーバーの設定をコメントアウトし、32サーバーの設定を有効にしました。

```:hosts
#192.168.10.31  test_name
192.168.10.32  test_name
```

この状態で「test_name」サーバーにアクセスすると、今度は「192.168.10.32」に変換し32サーバーにアクセスします。

>「test_name」サーバーにアクセスしたときの画面（ http://test_name/ ）
>![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2232744/3bf79cbc-9bd1-da81-d0cb-4d07711eb0d8.png)



このようにhostsファイルを利用すると、同じホスト名を利用しながら異なるサーバーにアクセスできます。



# 終わりに
今回はhostsファイルの機能を利用して、ホスト名「test_name」を31サーバー、32サーバーに振り分けました。
実際の開発では、開発・試験環境がローカルだったり、31サーバーだったり、32サーバーだったりします。環境変更のたびにURLを変更するのは大変なので、代わりにhostsファイルを書き換えることが多いです。
また、商用環境と検証環境でIPアドレスが異なる、といった環境差分を無くすために利用されます。

hostsファイル以外の名前解決のやり方としては「DNS」がメジャーです。hostsファイルに記載されてないホスト名（例えば、www.yahoo.co.jpなど）はDNSサーバーを利用して名前解決が行われます。

できるだけ短くと思いつつ長くなってしまいましたが、最後までご覧いただきありがとうございました。
「IT業界に入ったけど、hostsってなんだよ！」と思っている方が、少しでもイメージを持てるようになってくれたら幸いです。

# 参考
[「/etc/hosts」ファイル - Linux技術者認定 LinuC | LPI-Japan](https://linuc.org/study/knowledge/506/)