Ciscoのコマンドを理解するためにマニュアルを読もう

# はじめに
今週は記事を書く時間が取れないため軽めです。
仕事をしていて、「あれを調べるコマンドは何だったかな」「このコマンドの意味って何だったっけ」と立ち止まることは良くあります。ちょっと検索すればQiitaをはじめ様々な情報が出てくるため、ついつい人の書いた二次情報に頼ってしまいそうになりますが、マニュアルを読んで一次情報を参照するというのもとても大事です。二次情報に間違いがあってトラブルを起こしてしまうと、お客様への説明がとても難しくなります。

# お題
Ciscoのマニュアルからip routeコマンドを探してみましょう。

# マニュアルを見つける
メーカによってはドキュメントを読むのにもアカウント作成を要求してくるところもありますが、Ciscoはアカウント無しで閲覧が可能です。

[Cisco公式ホームページ](https://www.cisco.com/)に行き、メニューから「Support」＞「Networking Software (IOS & NX-OS)」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126284/6fe61973-4607-e9f6-9ebe-15545149b959.png)

OSのバージョンを選択します。現在使っているOSのバージョンを選択しましょう。一般的なコマンドを調べたい時や特にバージョンの拘りがない時は、最新のバージョン（今回は15.6）のM&Tを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126284/fdc9e50c-3a39-b917-145e-3fdc4f979b10.png)

Release and General Informationの下にある「Master Index」を選択します。ここはちょっと分かりにくいと思います。（Ciscoさん何とかなりませんか・・・）
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126284/f9b3cac1-5747-6deb-865c-acb594d4c376.png)

「Cisco IOS Master Command List, All Releases」を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126284/3df33894-eb77-8ca4-67e6-2701de86060e.png)

"Cisco IOS Master Command List, All "Releases"というページに辿り着きます。ここがマニュアルの目次になります。仕事でCiscoを使っている人はブックマークをしておきましょう！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126284/f66722cc-9221-504d-8291-24ea5a4222b6.png)

# コマンドリファレンスを見つける
Ciscoのコマンドマニュアルはabc順に記載されています。"Book Table of Contents"の下にある「1, a throug b」の先に、1およびa（で始まるコマンド）からb（で始まるコマンド）までが記載されています。
今回はスタティックルートの設定なので、`ip route`コマンドのドキュメントを探すのが目的です。初めてだと分かりづらいですが、「icmp idle-timeout through ipv6 nd autoconfig prefix」が正解です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126284/7e570b3b-d539-668e-7c2a-dbd5688e78a1.png)

リンク先でip routeを探します。ip routeの右側に「IAD」「IRI」「DIA」の3つのリンクがあります。実際のコマンドが載っているマニュアルは機能ごとに分かれており、IAD、IRI、DIAの3つのマニュアルそれぞれにip routeコマンドが載っていることになります。各機能の意味はページ先頭に表がありますので、それっぽいのを選びましょう。実はマニュアルが異なっていても載っているコマンド解説は全く同じということもあり、あまり神経質に正しいものを選ぶ必要はありません。リンク先を見てみて、違いそうだったら戻ってきて別のを選ぶ、が正解です。今回はIAD (IP Addressing Services Command Reference)を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126284/b40b9419-9400-b982-9c8f-8e659c89d2c3.png)

ようやくip routeコマンドのリファレンスに辿り着きました！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/126284/7d2f249a-18ef-f68f-6b66-dbe472574d5b.png)

# コマンドリファレンスを読む
始めにコマンドの概要説明と書式が書いてあります。書式は記載方法が独特ですが、慣れれば読みやすいので頑張って覚えましょう。

**ip** **route** [ **vrf** *vrf-name* ] *prefix* *mask* { *ip-address* | *interface-type* *interface-number* *[ip-address]* } **[dhcp]** *[distance]* [ **name** *next-hop-name* ] [ **permanent** | **track** *number* ] [ **tag** *tag* ]

慣れ親しんだip routeコマンドとは思えないですね。太字/斜体、角括弧[]、波括弧{}、パイプ|、それぞれに意味があります。

太字：この文字は「そのまま」コマンドとして投入します。
斜体：この文字は対応するパラメータに置き換えます。
波括弧＋パイプ：パイプの前後どちらか一つを使います。
角括弧：オプションです。この括弧の中に含まれる文字列は必須ではありません。
角括弧＋パイプ：パイプの前後どちらか一つを使います。必須ではありません。

と、文字で説明されても分からないですね。書式に慣れるまでは、「最初は必須ではない角括弧を無視して読む」のをお勧めします。先ほどの書式から角括弧でくくられた部分を全部消してみましょう。ここは覚えるために、ノートに書いて実際に手を動かしてみることをお勧めします。

**ip** **route** *prefix* *mask* { *ip-address* | *interface-type* *interface-number* }

こうなりました。これが、最低限必須な項目を含んだip routeコマンドの書式です。

パイプは前後どちらか一つを使います。このため、上の書式は下の2通りどちらか、の意味になります。
**ip** **route** *prefix* *mask* *ip-address*
**ip** **route** *prefix* *mask* *interface-type* *interface-number*

最後に、各斜体の意味を確認します。すぐ下にある"Syntax Description"を読みましょう。
*prefix* : IP route prefix for the destination.
*mask* : Prefix mask for the destination.
*ip-address* : IP address of the next hop that can be used to reach that network.
*interface-type* & *interface-number* : Network interface type and interface number.

読んだら具体例に置き換えて、実際にコマンドを作ってみます。prefixとmask、これはネットワークアドレスとサブネットマスクですね。192.168.0.0、255.255.255.0でやってみましょう。ip-addressは、対象ネットワークに到達するために使うネクストホップと書いてあります。172.16.1.254にしましょう。interface-type & interface-numberは、そのままインターフェースタイプと番号とあります。ethernet & 0/1にしましょうか。

具体例で置き換えたコマンドがこちらです。
ip route 192.168.0.0 255.255.255.0 172.16.1.254
ip route 192.168.0.0 255.255.255.0 ethernet 0/1
見慣れたstatic routeを設定するコマンドが出来ました！

# まとめ
リファレンスの読み方、かなり省略してしまいましたが最低限の役には立つのではないでしょうか。書式の読み方が慣れるまで難しいと思うので、最後におさらいです。以下の3ステップで読みましょう。

・角括弧[]はオプション項目なので、一旦全部無いものとする
・パイプは前後どちらか1つを選択
・太字はそのまま、斜体は自分でパラメータに置き換える

慣れるとリファレンスの中にある"Usage Guidelines"や"Examples"も読めるようになり、楽しいマニュアルライフを送ることができます。