今回は、「hostsファイル」について解説します。
初心者にも分かるよう丁寧に説明するので、参考にして頂けると幸いです。
※「hostsファイルの編集方法」だけ知りたい方は、以下の目次から「2」へ飛んで下さい。
hostsファイルとは何か?
hostsファイルとは一言でいうと、「IPアドレスとURL(ドメイン名)を対応させるためのファイル」です。
分かりやすさのため、URLとドメイン名の違いは曖昧にしています。しかし、厳密にはURLとドメイン名の定義は異なります。気になる方はこちらの記事を読んで下さい。
URLは分かりますよね?ブラウザの上部に表示されている、こんなやつです。
google.com
私のサイトの場合だと、engilaboo.comというURLを使っています。
実は、このURLには別名があります。それが「IPアドレス」です。
全てのURLには、一つの対応するIPアドレスが割り当てられています。
例えば、GoogleトップページのIPアドレスは「172.217.31.142」です。つまり、「google.com=172.217.31.142」ということです。
そのため、URLの代わりにIPアドレスを使って検索しても、URLで検索した場合と同様にGoogleのトップページを表示させることができます。
試しに「172.217.31.142」で検索してみて下さい。
Googleのトップページが表示されるはずです。
なぜ、IPアドレスにこのような別名(URL)が付けられているのでしょうか?
それは、単純にIPアドレスが人間にとって分かりにくいからです。
例えば、急に「GoogleのIPアドレス(172.217.31.142)を覚えろ!」と言われても難しいですよね?
当然です。私も覚えていませんし、覚えたくもありません。
しかし、URL(google.com)なら簡単に覚えることができます。
つまり、人間がインターネットを使ってリソースの管理をするときに、URLを使った方が格段に管理がしやすいのです。
では、このURLとIPアドレスの対応付けは、誰がどのように行っているのでしょうか?
実は、これを行っているのが、DNSサーバー、そして今回紹介するhostsファイルです。
この二つは、名前こそ違いますが、だいたい同じことをやっています。まずはDNSサーバーから説明しましょう。
DNSサーバーの動き
ブラウザにリソース(Webサイトの画面)を表示させるには、サーバーにリクエストを送って、リソースを返してもらう(レスポンスしてもらう)必要があります。
ここでのポイントは、サーバーにアクセスするには、IPアドレスを指定する必要があるということです。
なぜなら、サーバーに置かれてあるリソース自体は、URLではなくIPアドレスで指定されるからです。(URLでリクエストしても認識されない)
ここで疑問に思いますよね?「あれ、でも私たちって普段IPアドレスじゃなくてURLを打ち込んでるよね?なんでサーバーはリソースを返してくれるの??」と。
確かにそうです。私たちは普段IPアドレスの存在を意識していません。
しかし、実際にはIPアドレスでアクセスして、その結果Webページを表示することができています。
ということは、以下のことが言えると思います。
URLを打ち込んでからサーバーがレスポンスを返すまでに、URL(ドメイン名)をIPアドレスに変換する仕組みがある
では、何がURL(ドメイン)をIPアドレスに変換しているのでしょうか?
ここで登場するのが、DNSサーバーです。
つまり、DNSサーバーは、URLをIPアドレスに変換して、それをクライアントに返す役割をしているのです。
言葉で説明してもイメージが掴みにくいと思うので、図を描きました。
要はこういうことです。
まず、ユーザーがURLをブラウザに打ち込みます。すると、ブラウザからDNSサーバーに対してリクエストが送られます。そして、DNSサーバーは送られてきたURLに対応するIPアドレスを探してユーザーに返します。
以上の処理を、「ネーム・リゾリューション」もしくは「名前解決」と言います。これにより、クライアントはURLに対応するIPアドレスを知ることができます。
あとはサーバーに対してIPアドレスを使ってアクセスするだけです(ここは自動でやってくれる)。
サーバーが必要なレスポンスを返してくれるでしょう。
hostsファイルはローカルのDNSサーバー(的なイメージ)
hostsファイルも、DNSサーバーとやっていることはほとんど同じです。
単に、DNSサーバーは外部にあるけど、hostsファイルは自分のPCの中にあるというだけです。基本的には同じようなものと思っていいでしょう。
図解するとこんな感じです。DNSサーバーが自分のマシン内にあるイメージです。
まず、URLを検索窓に打ち込みます。すると、その情報がPC内のhostsファイルに渡ります。hostsファイルはファイルの中で同じURLを探して、そのURLに対応するIPアドレスをクライアントに返します。
ここまでの流れが、要は先ほどのDNSサーバによる名前解決の部分と同じです。単にDNSサーバーを使う代わりにhostsファイルを使っているというだけです。
あとは、手に入れたIPアドレスを使ってWebサーバにアクセスします。
Webサーバが必要なリソースをResponseとして返してくれるでしょう。
以上がhostsファイルを使った名前解決の流れです。
基本的な流れはDNSサーバーと同じですね。
hostsファイルの編集方法を解説【/etc/hosts】
「hostsファイルとは何か」が分かったところで、次に、「hostsファイルの編集方法」をご紹介します。
なんだか難しそうな感じがしますが、実際はとても簡単なので、図を交えつつサクッと解説していきます。
結論から言うと、hostsファイルは、Macの場合/private/etc/hostsにあります。
ここを書き換えるだけで、IPアドレスとURL(ドメイン名)の対応付けを行うことができるのです。
では、ターミナルを開いて下さい。どのディレクトリにいても構いません。
UNIXシステムフォルダ(/usr・/var・/etc)は MacOS上では非表示です。
そのため、ls(現在のディレクトリの下にあるファイルを表示するコマンド)等を打っても、hostsファイルの存在を確認することはできません。
しかし、ファイル自体は存在しているので、安心して次の作業に進んで下さい。
ターミナルを開いたら、さっそくhostsファイルを編集していきます。以下のコマンドを打って下さい。
sudo vim /private/etc/hosts
ここでのポイントは、sudoコマンドを先頭に付けて、管理者(スーパーユーザー・rootユーザー)権限を付与している点です。
なぜこのようなことをしているのか。
それは、hostsファイルを編集するには管理者権限が必要だからです。
そのため、単にvimコマンドだけでファイルを開いて編集しようとしても、以下のようなエラーが出て編集できません。注意しましょう。
sudoの後の「vim」は、Vim(ターミナルで使えるテキストエディタ)を開くコマンドです。このコマンドの後にファイル名を指定することで、そのファイルを編集する画面を開くことができます。
また、上記のコマンドを打つとパスワードの入力を求められる場合があるかと思います。Macにログインするときのパスワードを入力して下さい。
パスワードが通ると、hostsファイルが開かれます。
あとはこのファイルを編集するだけです。
IPアドレスに対応するURL(ドメイン)を定義して下さい。今回は、適当な値を設定しています。
IPアドレスの横に、対応するドメイン名を記述しましょう。(http://とかは入れないで下さい)
編集したらesc(もしくはcontrol+[)を押してvimのコマンドモードに切り替えた後に、:wqで編集した内容を保存(w)+vimから抜けましょう(q)。
以上で、hostsファイルを定義することによるIPアドレスとURLの対応付けは完了です。
このように、hostsファイルを開いてドメイン名とIPアドレスの対応関係を定義するだけで、簡単にURLの名前解決を行うことができます。
補足1:今回、hostsファイルを開くときにsudo vim /private/etc/hosts
を使いましたが、実は/private/etcには、/etcを参照するシンボリックリンク(別名的なものです)が貼られてあるため、上記のコマンドの代わりに、以下のコマンドでもhostsファイルにアクセスすることができます。どちらでも好きな方を使いましょう。
sudo vim /etc/hosts
補足2:windowsの場合
すみません。私がMacを使っているため、今回のコマンドはMac用となっております。とはいえ、hostsファイルの考え方やコマンド等はほとんど同じだと思うので、以下の記事等を参考に読み替えて頂けますと幸いです。
hostsファイル・DNSまとめ
長々と解説してきましたが、今回押さえて欲しいことは以下の3つだけです。
- DNSは、URL(ドメイン名)をIPアドレスに変換してクライアントに返すサーバー
- hostsファイルとは、IPアドレスとURL(ドメイン名)の対応付けを行うためのファイル
- (Macの場合)hostsファイルを編集するには、ターミナルで
sudo vim /etc/hosts
を打つ
今回は以上となります。
少しでもあなたがhostsファイルについて理解するための手助けができていたら幸いです。