CCNAの試験範囲には、clone、push、pull、branch、merge といったGitのコマンドが並んでいる。上位資格になれば、プルリクエストをトリガーにテスト環境を展開する話まで出てくる。
一方で、筆者はこれまで一度も、Gitで機器の設定を管理している現場を見たことがない。10年以上、複数の会社の案件に入ってきたが、一度もない。
先に断っておくと、これはあくまで自分が関わってきた案件での話だ。Gitで管理している現場も当然あるだろうし、そちらのほうが進んでいるのだと思う。ここで書くのは、そうならなかった側の理由になる。
実際には、どう管理されているか
oldフォルダと日付で管理する
ネットワークエンジニア(以下、NE)の現場でconfigがどこにあるかというと、SharePointかBoxか、あるいは顧客のファイルサーバの案件フォルダの中だ。

やり方はだいたい決まっている。ファイル名に日付を付け、更新したら古いものを old フォルダへ移す。フォルダ直下に残っているもののうち、日付が一番新しいファイル。それが現行の設定だとみなされる。
ルールとしては明快で、実際これで回っている。誰かが決めたわけでもないのに、複数の会社でほぼ同じ形になっているのが面白いところだ。
ただし、この「みなされる」という部分がすべてでもある。ファイルが現行であることを保証しているのは、置き場所と日付だけだ。実機と一致していることは、誰も担保していない。
「正」は顧客側にある
もう一つ重要なのは、この共有フォルダが単なる作業用の置き場ではないという点だ。
受託の案件では、設定情報は納品物である。作業報告書やパラメータシートと一緒に、指定されたフォルダ構成で顧客に納める。つまり、そのフォルダの中身が契約上の「正」になる。
この構造がある限り、手元で別の仕組みを使って管理していても、最終的にはフォルダへ書き出す作業が発生する。二重管理になるので、結局フォルダ側だけが残る。
なぜGitが入らないのか
単に現場が保守的だから、という説明では足りないと思っている。入らない理由のほうに構造がある。
持ち込み制限と閉域網
顧客先で作業する場合、持ち込めるPCが指定されていたり、貸与端末しか使えなかったりする。外部サービスへの接続も当然制限される。GitHubやGitLabが見える環境のほうが少ない。
ローカルだけで完結させる方法はあるが、そうすると「その人のPCの中にだけ履歴がある」状態になり、チームで共有できない。共有できないなら、共有フォルダに置くのと変わらない。
configが「コード」として扱われていない
Gitはソースコードのために作られた仕組みで、前提として「同じファイルを複数人が並行して編集し、それを統合する」状況を想定している。
ところが受託の案件で扱うconfigは、そういう扱いを受けていない。ドキュメントであり、成果物であり、承認を経て確定するものだ。編集するのは基本的に一人で、確定したら変わらない。マージという概念が発生しない。
この点は、自動化の議論全体にも言えることかもしれない。Cisco認定資格の改定について書いた記事でも触れたが、試験が想定している働き方と、実際の案件の進み方には距離がある。
学習コストを誰も持たない
そして、これが一番大きいのではないかと思う。
Gitを導入するには、チーム全員がひととおり使えるようになる必要がある。この学習時間は、どの案件の工数にも計上できない。受託の構造では、請求できない時間を誰が負担するのかという問題が必ず出てくる。
個人で勉強するのは自由だが、自分だけ使えても意味がない仕組みなので、個人の努力では埋まらない。
それで、実際に困っているのか
ここは正直に両方書いておきたい。
困っていること
一番困るのは、いつ誰が何を変えたのかが分からないことだ。日付は分かるが、変更した人も変更理由も読み取れない。作業報告書を遡れば分かることもあるが、報告書とconfigが別のフォルダにあるので、突き合わせに時間がかかる。
差分を見たいときも手間がかかる。oldフォルダから1つ引っ張り出してテキスト比較ツールに並べれば見られるが、どの世代と比べるべきかを判断するところから始まる。
そして時々、実機の設定と最新ファイルが食い違う。障害対応中に応急処置を入れて、そのままファイルへの反映を忘れるパターンだ。フォルダ上は整っているので、次の作業で実機を見るまで気づかない。
意外と回っていること
一方で、これで大きな事故が起きているかというと、そうでもない。
理由は、仕事が案件単位で完結するからだ。数か月のプロジェクトで、関わる人数も限られている。長期にわたって多人数が同じファイルを触り続ける状況が、そもそも発生しにくい。
Gitが解決する問題は、規模が大きくなるほど価値が出る。逆に言えば、規模が小さければフォルダで足りてしまう。困っていないから入らない、という面は確実にある。
入口があるとすれば、どこか
ここからは、使ったことがない人間の推測として読んでほしい。
もしGitがNEの現場に入ってくるとしたら、その入口はCI/CDでもIaCでもないと思う。もっと手前の、変更前後のconfigを取って差分を見るという一点ではないか。
これなら外部サービスへの接続は要らない。手元のPCの中だけで完結する。チーム全員が使える必要もなく、一人が自分の作業のために使えばいい。共有フォルダへの納品は今までどおり続けて、その裏で自分用の履歴を持っておくという形になる。
実際にやってみたわけではないので、これが本当に楽になるのかは分からない。ただ、資格試験に出てくるプルリクエストやパイプラインの話より、こちらのほうが現場との距離は近いはずだ。
いずれ自分の案件で試してみて、その結果は別記事にする。
まとめ
資格試験はGitを前提に組まれているが、自分が見てきた現場では共有フォルダのoldフォルダと日付による世代管理が続いていた。これは怠慢ではなく、持ち込み制限、納品物としての扱い、学習コストの負担先という3つの構造の結果だ。
困っている部分は確実にある。ただ、案件単位で完結する働き方の中では、フォルダでも回ってしまう。
この距離が縮まるとしたら、まず来るのは差分管理だろうと考えている。夜間作業について書いた記事と同じで、変わるとしても、変わるのは一番地味な部分からだと思う。