エンジニア経験ゼロでネットワークスペシャリストに合格するまでにやったこと


ネットワークスペシャリストはいいですよ。受けましょう。

## ネットワークスペシャリストを受験した話

私は広告配信プラットフォームの開発ディレクターをしています。
業務の中で手を動かして開発することはないですが、エンジニアと開発のスケジュールや仕様について話す機会が多い仕事です。

そんな私が、もっとエンジニアのことを理解したいと思い立ち、
ネットワークスペシャリスト試験を受けることにして、2回目で合格するまでの話を書いていきたいと思います。

### この記事のターゲット

この記事は主に、

- エンジニアではないけれどネットワークの仕組みを体系的に学ぶことに関心がある人
- エンジニアとしてネットワークスペシャリスト試験を受けたい/受けなければならない人

を想定して書きました。

前者の方は、受験した理由や勉強してよかったことを中心に読んでいただけたらと思います。
後者の方に関しては、「実務知識がほぼゼロの状態から何をやったのか」を書くことで、
苦手分野の勉強に役立ててもらえたらいいなと思っています。

### ネットワークスペシャリストを目指した理由

#### 開発のことをもっと理解したかった

業務の中でエンジニアとコミュニケーションを取る機会が多いのですが、用語が理解できないが故に

- 細かい仕様が理解できない
- 選択肢を提示されたけれどよく分からないのでおまかせ
- （特に運用系のタスクについて）必要性をきちんと理解できない

ということがよく起きていて、自分でももどかしく感じていました。
（勉強する前はエンジニアが説明でカバーしてくれていたんだなと今改めて思います。。。）

非エンジニアだと業務として勉強するような機会はあまりないので、自力で勉強するのに良い教材はないかと考えて選んだのがネットワークスペシャリストでした。
資格試験は、合格させるために丁寧に書いた参考書が販売されているので、勉強しやすいのが魅力です。

#### 体系的に勉強したかった

技術的なことは検索して手に入る情報が比較的多いので、ピンポイントで分からないことがあればWeb上の情報で足ります。

ただ、私はそもそもベースとなる知識がなく、Web記事から断片的な情報を得ても理解しきれないことが多かったため、
一度腰を据えて、体系的に整理された知識を学びたいと考えていました。

その点、ネットワークスペシャリスト試験は出題範囲が決まっていて内容のバランスが良く、体系的に学ぶには最適だと思いました。

### 試験概要
ネットワークスペシャリスト試験の概要は下記の通りです（2019年12月現在）。

- 運営：IPA（情報処理推進機構）
- 日程：年1回、10月第3日曜日
- 試験科目
    - 午前I：四択マークシート30問（50分）
    - 午前II：四択マークシート25問（40分）
    - 午後I：記述式、3問中2問選択（90分）
    - 午後II：記述式、2問中1問選択（120分）
- 受験料：5,700円（税込）
- 合格基準：各科目60点以上（100点満点中）
- 合格率：15.4%（2018年）
- 科目免除：下記のいずれかに該当する場合は午前I試験が免除
    - 2年以内に応用情報技術者試験に合格
    - 2年以内にいずれかの高度試験・支援士試験に合格
    - 2年以内にいずれかの高度試験・支援士試験で午前I試験に合格

参考： https://www.jitec.ipa.go.jp/1_11seido/nw.html

### 勉強を始めたときの状態
- エンジニアとして勤務した経験はゼロ
- 学生時代にプログラミングの授業を少し取っていたが、できるのはソートアルゴリズム程度
    - なんなら今はもうできないと思う
    - ちなみに文学部でした
- SQLは少し書ける。SELECT文でWHEREやGROUP BYはできるがサブクエリやWITHはできない程度
- 基本情報技術者試験・応用情報技術者試験に合格。ただしネットワーク分野は分からなすぎて常に捨て問題
- 「プロトコル」「フレームワーク」という言葉の意味が分からない
- HadoopとSQLの違いが分からないみたいな状態
    - 固有名詞と一般名詞、商品・フレームワークと言語・プロトコルの区別すらつかない、という意味です

開発に関心はあるものの、経験に乏しく、素人に毛が生えたくらいの状態でした。
応用情報技術者試験に合格していたので午前Iが免除になるのは多少楽でしたが、
ネットワーク分野はまるでダメだった（ストラテジーとデータベースで点を稼いでいた）ので、
何でネットワークスペシャリストやることにしたんだ。。。と思ったり思わなかったりしていました。

この状態から勉強を始めて、1回目の受験では午後Iまで合格したものの午後IIが50点台で不合格。
その1年後、2回目の受験では午後IIが60点ぴったりでぎりぎり合格でした。
正直2回目も自信はありませんでした。問題の運もあったと思います。

#### 補足
お読みの方の中に、本当にプログラミング未経験で技術的なこと1mmも分かりません、という方がもしいらっしゃったら、先に基本情報技術者試験合格を目指すことをおすすめします。
基礎的な内容がバランスよくまとまっている試験で、丁寧な参考書が安価で多数出版されています。

## 合格するまでにやったこと
ということでここからが本題です。
実務経験がない状態から合格レベルに持っていくために、何をしたかを挙げていきます。

合格するまでにやったのは、

1. 参考書を読む
2. 過去問を解く
3. 重要な概念を整理
4. 直前対策（暗記）

の4点です。
これだけ書くと何も特別なことはやっていない感じですね。。。
実際そう特殊なことはしていないのですが、気をつけたポイントを書いていきたいと思います。

### 0. 準備したもの

#### 参考書
タイトルに「教科書」と付いているようなものです。
試験範囲に沿って、用語や概念の解説がまとまっています。

内容はどの出版社も大きな差はないので、実際に見てみて「読む気が起きるか」を基準に選びました。
フォントや図のテイストで好みが分かれると思うので、書店で手に取って選ぶのがおすすめです。

#### 過去問題集
過去問はIPA公式でもPDF配布されていますが、勉強するのに解説は必須でした。
こちらも書店で実際に見てみて、解説が分かりやすいと感じるものを選びました。直感でいいと思います。

#### 文具
何せ本番がペーパーテストなので、できればシャープペンシル・消しゴム・ノートを手に勉強した方がいいと思います。
心理学的に、紙に書いて覚えたことは紙に書くときに思い出しやすいらしいです。

### 1. 参考書を読む

過去色々な資格試験を受けてきた感覚からすると、参考書をざっと読んで3割くらい理解できそうな感じだったら、とりあえず先に過去問をやった方が早いかなと思います。
今回はざっと読んで1割も理解できなかったので、おとなしく参考書を読むことにしました。

ただ、はじめから詳細に読み込むと気が遠くなりそうだったので、下記の手順で進めました。

#### OSI基本参照モデルの7階層を覚える
ネットワークスペシャリスト試験では、OSI基本参照モデルを覚えるのが超重要です。
基本情報技術者試験のときはこれが本当に覚えられなくて捨て問題にしていたのですが（笑）、
面倒がらずにここだけは最初に覚えてしまった方が、この後が楽です。

- アプリケーション層（第7層）
- プレゼンテーション層（第6層）
- セション層（第5層）
- トランスポート層（第4層）
- ネットワーク層（第3層）
- データリンク層（第2層）
- 物理層（第1層）

開発の現場ではOSI基本参照モデルなんて使わないという考えも聞きますが、
私はこの7階層にこのあと覚えるプロトコルなどを逐一当てはめていくことで、
実務経験がないなりにそれぞれの役割の違いをイメージしながら学習を進めることができました。

例えば、

- スパニングツリープロトコル（データリンク層）
- RIP（ネットワーク層）
- TCP（トランスポート層）

の3つを言葉だけ丸暗記しようとすると、どう違うのかよく分からず混ざってしまうのですが（私だけかもしれません）、
階層が違うということを意識すると、自然に役割の違いをイメージすることができます。

スイッチングハブやルータなどの機器も、並列に覚えるとわけがわからなくなりますが、
どの機器がどの層を担当しているのか整理することで、問題に出てくるネットワークの構成図が読めるようになりました。

実務に携わっている方でもすべての階層にかかわることはなかなかないと思うので、
少なくとも試験対策としてはきちんと覚えて整理するのがおすすめです。

#### 目次に出てくることを覚える

例えば私が使っていた参考書の目次では、

- 「ネットワーク層」の章の下に「IP」と「ルーティング」
- 「トランスポート層」の章の下に「TCP」と「UDP」

といったように、概ね階層ごとに重要な概念やプロトコルが挙げてあります。

この時点では細かい用語よりも頻出する概念を覚えるのが大事だと思っていたので、目次になるようなプロトコルについては名前を覚えて、その内容を丁寧に読むことを心がけました。
ただ、実際はこのあと過去問をやったときに初めて使い方がイメージできたり、重要ポイントが分かったりしたものがほとんどです。
この段階で完璧に理解する必要はないかなと思います。

### 2. 過去問を解く
参考書を完璧に理解していなくても、大まかに覚えたら過去問に進んでしまいました。
出題形式に合わせて勉強方法を工夫したかったのと、頻出分野を知りたかったためです。

ちなみに予想問題集などは使っていません。
一回解いた問題でもそう簡単に解答を覚えられたりはしないので、反復して知識を定着させることを大切にしました。
（問題覚えれば本番で「〇〇ゼミで見たやつだ！」ってなるじゃないですか）

#### 問題をざっと読む

初回は解かずに問題をざっと読んで、問題文の分量や設問形式（単語を答える、図をかくなど）を把握しました。
本番も同じですが、設問→問題文の順で読みます。

#### 解説を読む

過去問はこちらがメインです。
私が使っていた過去問題集では、解説の部分に問題に出てきたプロトコルの説明が丁寧に載っていたので、
そこを読みながら答えの確認と知識の復習をしていました。
問題集の解説で不十分だと思ったら、Webで検索したり参考書に戻ったりしてもいいと思います。

実際の問題を踏まえて学習していくことで、より実践を意識した「使える知識」になってきました。

例えばTCPの3ウェイハンドシェイクは参考書で概要を理解したつもりだったのですが、
ACKのタイムアウトが長すぎても短すぎてもダメとか、実際にどのあたりを気をつけて実装しなければならないかは問題を見てようやく飲み込めました。

実際の開発をイメージすることができるので、過去問の読み込みは理解が進むほど楽しくなってきました。
試験対策としてはこのあと、少し間を置いて問題の解き直しを繰り返します。

### 3. 重要な概念を整理

過去問をやったことで、

- よく出るプロトコル・概念
- ありがちな出題

が分かるようになりました。
これらの重要な概念をきちんと押さえると、安定して午後問題の点数が稼げるようになります（と思います）。

#### よく出るプロトコル・概念

まず午後II試験では大抵、

- データリンク層メインの問題
- ネットワーク層メインの問題

の2問が出るので、どちらを選択するか決めておいて、そこを中心に対策するのがよいです。
私はネットワーク層の方が理解しやすかったので、IP周りやルーティングプロトコルを重点的に勉強しました。

その他、午後試験全体を通してよく出ると思うプロトコル等は下記です。

- スパニングツリープロトコル（STP）
- VLAN（特にタグVLAN）
- ARP/RARP/GARP
- VRRP
- TCP（特に3ウェイハンドシェイク）
- HTTP（主なメソッドとステータスコード、Cookie）
- SMTP（OP25BとSPFも合わせて覚える）
- DNS（レコードの種類、冗長化、セキュリティ）
- DHCP
- SSL（特にハンドシェイクプロトコルの流れ）

これらは図で説明できるくらいまで理解するのがベストです。
※データリンク層中心に勉強する場合は少し異なります

また、セキュリティ分野の知識も重要です。
ネットワークスペシャリストの出題範囲では、ネットワーク分野だけでなく、
セキュリティ分野でもレベル4（最高レベル）の知識が要求されています。（[試験要綱](https://www.jitec.ipa.go.jp/1_04hanni_sukiru/_index_hanni_skill.html)より）。

出題の中心は「IPsecを使ってネットワーク構築する場合の注意点」などあくまでネットワーク構築の話なのですが、
参考書に載っている攻撃手法は一通り理解しておいた方がいいです。

出題範囲だから勉強するというのはもちろんなのですが、攻撃手法を理解することでプロトコル自体の理解が深まります。
例えば、ARPスプーフィング（ARPの仕組みを悪用して通信機器のなりすましを行う）の仕組みを理解することで、
ARP自体がどんなプロトコルなのかをより理解できるようになりました。

個人的にはセキュリティ分野の勉強が一番楽しかったです。
DNSキャッシュポイズニングとかかっこいいじゃないですか。名前が。

#### ありがちな出題
この段階で今更ですが、ネットワークスペシャリストが何をしないといけないかというと、
**ネットワークがちゃんとつながるようにしないといけない** です。

そのため出題としては、
「ネットワーク構成がこのままだとまずいので直してください」
という趣旨のものが結構あります。

ここで意識するのは下記の3点にまとまると思っています。
大体下記3点のどれかがまずいので、それをあるべき状態にする方法を考えて解答します。

- 必要な通信が最後まで届くか
    - 例：AからBへメールを送る必要があるのに、途中のファイアウォールで該当の通信が許可されていない
    - 例：DHCPの設定に問題があり、モバイル端末を移動するとLANにつながらなくなる
- 余計な通信をしていないか
    - 例：機密情報は社内NWだけで扱うと書いてあるのに、通信の途中でインターネット接続している機器を使う必要がある
    - 例：SMTPにしか使わないと書いてあるのに、余計なポート番号の通信を許可している
- ネットワークが落ちないか
    - 例：支社から本社サーバにアクセスできないと業務に支障が出るのに、途中のルータが冗長化されていない
    - 例：送りたいデータサイズにばらつきが大きいのに、LBの設定がラウンドロビンで一部の機器に負荷が集中することがある

「余計な通信をしていないか」はどちらかといえばセキュリティ的な考え方ですね。

試験では、「あるべき状態」=正解があって、その状態にする能力があるかを試されているので、
このポイントを意識して差分を探すことで、答えが導けるようになりました。

### 4. 直前対策（暗記）
ネットワークスペシャリストはとにかく覚える単語がものすごく多いです。
午前IIにしか出ない細かい用語問題の対策のために、試験直前は用語の詰め込みも必要です（地味に大変。。。）

私は使っていた参考書に単語帳アプリのDL特典がついていたので、それを使って会社の行き帰りにひたすら暗記していました。
紙に書くのでも参考書を読むのでもいいですが、自分なりに回数をこなしやすい方法を選ぶのがよいと思います。

コツとしては、

- アルファベットの略語：なるべく何の略かを覚える
- 長いカタカナ：声に出して噛まずに言えるようにする

ということを意識していました（後者は傍から見ると怪しい）。

直前対策と言いつつ、まっさらな状態から数日で詰め込むのは厳しいので、
試験2ヶ月前くらいから単語を眺める習慣をつけておいて、直前1週間で最後の追い込みをしました。

## 合格までにかかった費用と時間

### 費用

- 受験料：5,700円×2回
- 参考書
 - 徹底攻略ネットワークスペシャリスト教科書（株式会社インプレス）：3,002円
 - かんたん合格ネットワークスペシャリスト過去問題集（株式会社インプレス）：3,218円

合計17,620円でした。
（細かいことを言えば会場までの交通費とか勉強するときのカフェ代とかもありますが割愛で。。。）

ネットワークスペシャリスト含め、IPAの試験は受験料が安いのが魅力です。
技術系の資格だと10万円くらいかかるものもざらなので。。。
自主的に受けたので受験料も自費で出したのですが、2回受けてもこの金額で済むのはありがたいなと。
受験者が多いので、参考書も良質なものが安価で揃います。

### 時間

1回目・2回目ともに勉強時間はあまり変わりませんでした。

- 単語暗記：毎日20分程度×2ヶ月（60日）
- 参考書を読む・過去問を解く：毎週末3-5時間程度×3ヶ月（15週）

実際には日によって勉強時間にムラがありましたが、平均するとこんな感じだと思います。
計算すると80時間×2回（2年）くらいでしょうか。

毎日参考書読まなきゃ……と考えていたら結構しんどかったと思いますが、
仕事もあるので無理のない範囲で、と考えてこれくらいに落ち着いたと思います。

勉強量がネックで受験に尻込みしている方も多いと思いますが、
必ずしも平日帰って3時間勉強したりする必要はない、ということはお伝えしたいです。
（休日でも平日でも、自分がやりやすいときにやればいいと思います）

## 非エンジニアだから苦労したポイント

苦労したポイントは、覚えたことを実務に当てはめて考える機会が少なかったことです。
学習範囲の中で一部でも業務で使っているところがあればイメージがつきやすいかもしれませんが、
聞いたことがある単語も少ない状態だったので、自分ごととして考えづらく大変でした。

この点は関心を持てるように、時々息抜きがてら下記のようなことをしていました。

- ジョークRFCを読む（有名な[鳥類キャリアによるIPデータグラムの伝送規格](https://qiita.com/yoshi389111/items/a7ba3d66bb775bafeb6e)とか）
- 電器店に出向いてスイッチングハブの実物を見る
- 社内システムにDNS amp攻撃をする妄想

また、そうやって読んだり考えたりしたことを仲の良いエンジニアに話したりもしていました（引かれました）。
必ずしも直接試験に活きるわけではないですが、モチベーション維持になったかなと思います。

## 非エンジニアでも勉強してよかったこと

それで結局、エンジニアじゃないのにネットワークスペシャリストを取って意味があったのか？
という話を最後に書いていきたいと思います。

### エンジニアとの打ち合わせで分かる言葉が増えた
暗記して語彙が増えたので当然ではあるのですが、会話の中で分かる言葉が圧倒的に増えました。
勉強する前は、よくある「分からないことが分からない」状態で、意味が分からない単語は知らずしらずのうちに聞き飛ばしていたと思うのですが、
理解できる内容が増えたので開発要件について突っ込んだ話ができるようになりました。

ちょうど試験を終えた直後くらいに社内のエンジニアがポートフォワードの話をしていて、話に混ざっていくことができたのが嬉しかったです。

### 試験後も知識が増えた
これが体系的に学ぶ目的でもあったのですが、ベースとなる知識が固まったことで、新しい概念も理解しやすくなりました。
流行のフレームワークをその都度「点」で学ぶのではなく、既存の知識とつなげて「線」で考えられるようになったと思います。

また、話せる知識が増えたことで、エンジニア側から色々教えてもらえる機会も増えたので、実践的な知識が補われていったのもよかったです。
試験の知識がそのまま業務に活かせるわけではなくても、基礎があることで業務知識も勉強しやすくなります。

ネットワークスペシャリスト試験を経験の集大成と捉える方もいらっしゃると思いますが、
逆にはじめの一歩として活用するのもありなんじゃないかと思っています。

### 誰が何をやっているのか分かった
社内の「インフラエンジニア」が何をやっているのかがよく分からないでいたのですが、勉強を通してイメージがつくようになりました。
（漠然とエンジニアはみんなサーバに線つなぐものだと思ってました）

それ以外にも、同じチームのエンジニアで微妙に得意分野が違うということがあると思います。
そういった場合に、目の前にある開発を誰に担当してもらうか？というのを考えられるようになったのはよかったです。

非エンジニアがプロジェクトマネジメントをするのには限界がある、という話をよく聞きますが、
担当している分野の違いが分からないことに起因する問題が結構多いのではないかと思います。

私もエンジニア出身のPMと比べてしまうと理解は相当浅いと思いますが、
担当分野の違いを少しは理解できることで、コミュニケーションが円滑になる場面は増えたかなと感じています。

### エンジニア向けの名刺代わり
私は資格を取ったあとで部署が異動になって、初対面のエンジニアメンバーと仕事をすることになったのですが、
「ネットワークスペシャリスト持ってます」という一言でどんな知識があるのかすぐ伝わったなと思いました。

非エンジニアと話す機会が多いエンジニアは、「この用語分かるかな」と気を遣ってくれたりするのですが、
私がある程度の基礎知識は持っているということが伝わったことで、開発の具体的な話がしやすくなって早く打ち解けられたような気がしています。
まぁでも、分からない言葉があって質問することは今でも頻繁にあります（笑）

## おわりに
資格試験というものに対して興味がある方もない方もいると思いますが、
私はある範囲のことを独学で体系的に学べる方法として、一定の意義があると思っています。

この機会にネットワークスペシャリストをはじめ、資格試験という勉強法に興味を持ってくださったら個人的には仲間が増えて嬉しいです。

また、上記の内容は私の知識の範囲内で書いているため、誤っている点や補足が必要な点などがあれば遠慮なくご指摘いただけますと幸いです。

最後までお読みいただきありがとうございました。

明日は、Y.A.さんによる「メディアと広告のフロント周りを見ている自分がよく使う不具合調査のときのChrome DevToolsの機能(実践編)」です。
引き続き、[GMOアドマーケティング Advent Calendar 2019](https://qiita.com/advent-calendar/2019/gmo-am) をお楽しみください！