Gitによる設定管理とは?ネットワーク機器のコンフィグを安全に履歴管理する方法

当ページのリンクには広告が含まれています。
ネットワーク上級編 58/全70記事

この記事は、 「ネットワーク上級編|要件定義・設計・クラウド・自動化へ進む」 の第58回です。

第6章では、Python・SSH・Ansible・REST APIなどを使った ネットワーク自動化と、運用を効率化するための管理手法を学びます。

NETWORK ADVANCED|CHAPTER 6 AUTOMATION & VISUALIZATION

Gitによる設定管理|ネットワーク機器のコンフィグを履歴・差分管理する方法

ネットワーク機器の設定変更では、 「いつ、誰が、どの設定を、なぜ変更したのか」を追跡できることが重要です。 Gitを利用すると、設定ファイルの変更履歴や差分を記録し、 過去の状態と比較しながら安全に変更管理できるようになります。

対象レベル Level 3〜4・上級
想定読了時間 約30分
身につく成果 設定ファイルをGitで履歴管理できる
前提知識 SSH・Ansible・JSON/YAMLの基礎
演習環境 Git・テキストエディタ

ネットワーク機器のコンフィグを、 「router01_最新.txt」「router01_最新2.txt」「router01_作業前.txt」 のようなファイル名だけで管理していないでしょうか。

ファイルをコピーするだけでもバックアップはできますが、 変更箇所や変更理由が増えてくると管理が難しくなります。

Gitを使うと、 設定ファイルの変更を履歴として積み重ね、必要なときに差分や過去の状態を確認できます。

この記事を読み終えるとできること

  • Gitを設定管理に使う理由を説明できる
  • repository・commit・branchの役割を説明できる
  • git status・diff・add・commitを使える
  • ネットワーク設定の変更差分を確認できる
  • 過去の設定ファイルを確認・復元できる
  • Gitを使った変更管理の流れを設計できる

Gitによる設定管理とは

最初に覚える定義

Gitによる設定管理とは、 ネットワーク機器の設定ファイルをバージョン管理し、 変更履歴・差分・変更理由・過去の状態を追跡できるようにすることです。

Gitはソフトウェア開発で広く使われるバージョン管理システムですが、 管理対象はプログラムだけではありません。

テキストとして保存できるネットワーク機器のコンフィグや、 AnsibleのPlaybook、インベントリ、Jinja2テンプレート、 YAMLやJSON形式の定義ファイルなどもGitで管理できます。

従来のファイル管理

router01.txt router01_before.txt router01_after.txt router01_latest.txt router01_latest2.txt router01_20260816.txt

ファイルが増えるほど、 「どれが正しいのか」「何が変わったのか」が分かりにくくなります。

Gitによる管理

commit A : 初期設定 ↓ commit B : VLAN 200追加 ↓ commit C : OSPF設定変更 ↓ commit D : NTPサーバー変更

変更を履歴として積み重ねるため、 過去と現在を比較できます。

Gitの価値は「ファイルを保存すること」だけではありません。

「どの変更によって、設定がどのように変わったのか」を 追跡しやすくすることが重要です。

なぜネットワーク設定をGitで管理するのか

1.変更箇所を確認できる

数千行あるコンフィグを2つ並べて、 人の目だけで違いを探すのは大変です。

Gitでは変更前と変更後の差分を表示できるため、 追加・削除された設定を確認しやすくなります。

2.変更履歴を残せる

コミットごとにメッセージを付けることで、 「何のための変更だったのか」を記録できます。

git commit -m “Add VLAN 200 for development network”

3.過去の設定と比較できる

障害発生時に、 「先週と現在で何が変わったのか」を確認できます。

変更直後に障害が発生した場合は、 Gitの履歴が原因調査の手掛かりになります。

4.レビューしやすくなる

実機へ投入する前に設定変更をGit上で管理すれば、 レビュアーは変更対象だけを確認できます。

5.自動化と組み合わせやすい

Python、Ansible、SSH、REST APIなどで取得した設定を Gitリポジトリへ保存することで、 設定収集と履歴管理を組み合わせられます。

Gitはネットワーク機器そのものをバックアップする仕組みではありません。

設定ファイルを履歴管理する仕組みとして利用し、 実際の機器バックアップ、リポジトリのバックアップ、 復旧手順などは別途設計する必要があります。

Gitで最初に理解する5つの概念

用語 意味 ネットワーク設定管理でのイメージ
Repository Gitで履歴を管理する場所 ネットワーク設定管理用フォルダー
Working Tree 現在編集しているファイル 編集中のrouter01.cfgなど
Staging Area 次のコミットへ含める変更を準備する場所 今回記録したい設定変更
Commit ある時点の状態を履歴として記録する単位 「VLAN 200追加」などの変更履歴
Branch 変更履歴を分岐させる仕組み 本番とは分けて変更案を作る

Gitで変更を記録する基本的な流れ

Working Tree 設定を編集
git add 変更を選択
Staging Area コミット準備
git commit 履歴へ記録
Repository 履歴を保存

ネットワーク設定管理の全体像

実務では、Gitだけを見るのではなく、 ネットワーク機器から設定を取得して履歴化するまで を一連の流れとして考えます。

ネットワーク設定をGitで管理する例

Network Device Router / Switch / FW
SSH / API 設定を取得
Config File テキスト保存
git diff 変更確認
Commit 変更履歴化

さらにチームで管理する場合は、 GitHub、GitLab、社内Gitサーバーなどの リモートリポジトリを利用する構成も考えられます。

Gitリポジトリを作成する

ここからは、ネットワーク設定を保存する簡単なリポジトリを作ります。

フォルダーを作成する

mkdir network-configs cd network-configs

Git管理を開始する

git init

これで現在のフォルダーがGitリポジトリになります。

設定ファイルを配置する

network-configs/ ├── configs/ │ ├── router01.cfg │ ├── router02.cfg │ ├── switch01.cfg │ └── switch02.cfg ├── inventories/ ├── playbooks/ └── README.md

ネットワーク機器が増える場合は、 拠点や役割ごとにディレクトリを分ける方法もあります。

configs/ ├── tokyo/ │ ├── core-sw01.cfg │ ├── core-sw02.cfg │ └── router01.cfg ├── osaka/ │ ├── switch01.cfg │ └── router01.cfg └── firewall/ ├── fw01.cfg └── fw02.cfg

Gitの基本コマンドを使う

git status:現在の状態を確認する

git status

変更されたファイルや、 まだGitで追跡していないファイルなどを確認します。

Git操作で迷ったら、まず git status を確認する習慣を付けるとよいでしょう。

git add:コミット対象へ追加する

git add configs/router01.cfg

すべての変更をまとめて追加することもできます。

git add .

実務では、内容を確認せずに git add . を実行すると、不要なファイルや機密情報まで含める可能性があります。

git status と git diff を確認してから追加する 習慣を付けましょう。

git commit:履歴へ記録する

git commit -m “Add initial configuration for router01”

コミットメッセージには、 「何を変更したのか」が分かる内容を記載します。

git log:履歴を確認する

git log –oneline

例えば、次のような履歴を確認できます。

a82f614 Change NTP server 52e3cc1 Add VLAN 200 74ab529 Add initial configuration for router01

git show:特定のコミットを見る

git show 52e3cc1

コミット時の変更内容を詳しく確認できます。

設定変更の差分を確認する

Gitをネットワーク設定管理で利用するとき、 特に重要なコマンドが git diff です。

変更前の設定

interface GigabitEthernet0/1 description To-Core-SW ip address 10.0.0.1 255.255.255.252 no shutdown router ospf 10 network 10.0.0.0 0.0.0.3 area 0

VLAN 200のネットワークを追加

interface GigabitEthernet0/1 description To-Core-SW ip address 10.0.0.1 255.255.255.252 no shutdown router ospf 10 network 10.0.0.0 0.0.0.3 area 0 network 192.168.200.0 0.0.0.255 area 0

変更後に次を実行します。

git diff

イメージとして、次のような差分を確認できます。

router ospf 10 network 10.0.0.0 0.0.0.3 area 0 +network 192.168.200.0 0.0.0.255 area 0

作業前レビューでは「完成後のコンフィグ全体」だけでなく、 差分を見ることが重要です。

変更対象以外の行まで意図せず変わっていないかを確認できます。

ステージング後の差分を見る

git add configs/router01.cfg git diff –staged

これにより、 次のコミットへ実際に含まれる変更 を確認できます。

ブランチを使って変更を分離する

ブランチを使うと、 現在の正式な設定管理ラインとは別に、 変更作業用の履歴を作成できます。

変更用ブランチを作成する

git switch -c change/vlan200

このブランチ上で設定を変更します。

git diff git add configs/router01.cfg git commit -m “Add VLAN 200 routing configuration”

レビューが完了したら、正式なブランチへ統合します。

git switch main git merge change/vlan200

実際の運用では、GitHubやGitLabなどのPull Request / Merge Requestを利用し、 作成者と承認者を分離する 方法もあります。

ブランチを利用した変更管理

main 承認済み設定
change/vlan200 変更案作成
Review 差分確認
Merge 正式履歴へ統合

過去の設定を確認・復元する

Gitでは過去のコミットを指定して、 その時点のファイル内容を確認できます。

履歴を確認する

git log –oneline
a82f614 Change NTP server 52e3cc1 Add VLAN 200 74ab529 Initial configuration

過去のファイルを確認する

git show 74ab529:configs/router01.cfg

ファイルそのものを書き換えずに、 過去の内容を確認できます。

過去の内容を作業ツリーへ戻す

git restore –source=74ab529 — configs/router01.cfg

その後、差分を確認します。

git diff

Git上のファイルを戻しただけでは、 ネットワーク機器の設定は戻りません。

復元した設定を実機へ反映するには、 別途、変更手順・影響確認・承認・投入・試験が必要です。

公開済みの変更を取り消す場合

チームで共有している履歴では、 既存履歴を書き換えるのではなく、 変更を打ち消す新しいコミットを作る運用もあります。

git revert 52e3cc1

Gitの操作とネットワーク機器の切り戻しは分けて考え、 実機作業では必ず切り戻し手順を準備します。

自動取得したコンフィグをGitで管理する

Gitによる設定管理は、 第54回で学んだSSHによる情報取得や、 第55回のAnsibleと組み合わせるとさらに効果的です。

  1. ネットワーク機器へ接続する
    SSHやREST APIなどで機器へアクセスします。
  2. 現在の設定を取得する
    running configurationなどを取得します。
  3. 機器ごとのファイルへ保存する
    router01.cfg、switch01.cfgなどの名前で保存します。
  4. Gitで差分を確認する
    前回取得時から設定が変化しているか確認します。
  5. 変更がある場合のみ履歴化する
    変更内容を確認し、必要に応じてコミットします。

設定バックアップ自動化の考え方

Router / Switch 現在設定
Python / Ansible 自動取得
Config Files ファイル保存
Git 差分・履歴管理

自動取得した設定には、 時刻やセッション情報など、 取得するたびに変化する情報が含まれる場合があります。

そのまま保存すると毎回不要な差分が発生するため、 履歴管理する対象を整理することも重要です。

Gitで管理してはいけない情報

ネットワーク設定をGitへ保存するときに、 最も注意したいのが機密情報です。

次の情報を不用意にGitへ保存しないでください。

  • 平文パスワード
  • APIトークン
  • 秘密鍵
  • VPNのPre-Shared Key
  • SNMP Communityなどの認証情報
  • クラウドサービスのアクセスキー
  • 機器管理用の秘密情報

.gitignoreを利用する

Gitで管理したくないファイルは、 .gitignore に指定できます。

secrets/ *.key *.pem .env credentials.yml

ただし、すでにGitで追跡を開始したファイルは、 後から.gitignoreへ記載しただけでは履歴から消えません。

「Gitへコミットしてから消す」のではなく、 最初から秘密情報を分離する設計 が重要です。

実務で決めておきたいGit運用ルール

Gitを導入するだけで、 設定管理が自動的に安全になるわけではありません。

チーム内で「どのように使うのか」を決める必要があります。

項目 ルール例
管理対象 本番ネットワーク機器の設定ファイルを対象とする
ファイル名 hostname.cfgで統一する
ディレクトリ 拠点・用途・環境ごとに整理する
コミット単位 1つの目的につき1コミットを基本とする
コミットメッセージ 変更内容・作業番号・目的を記載する
レビュー 本番反映前に別担当者が差分を確認する
機密情報 認証情報はリポジトリへ保存しない
正式版 mainブランチには承認済み設定のみを保存する

コミットメッセージの例

Bad: update fix config change Good: Add VLAN 200 for development network Change NTP servers to new infrastructure Remove obsolete static route for old WAN CHG-0123: Add OSPF network for Osaka office

数か月後に履歴を読んだ人でも、 変更目的を理解できる書き方を意識します。

Git設定管理でよくある失敗

NG 機密情報をそのままコミットする

パスワードや秘密鍵をコミットすると、 ファイルを後から削除しても履歴に残っている可能性があります。

NG git diffを確認せずコミットする

意図していない設定変更まで履歴へ含める可能性があります。

NG 何でも1つの巨大なコミットにする

VLAN変更、NTP変更、ACL変更などを一度にまとめると、 後から変更理由を追跡しにくくなります。

NG Gitの状態と実機の状態が同じだと思い込む

Gitに保存されている設定と、 実際にネットワーク機器で動いている設定が一致しているとは限りません。

OK Gitと実機を定期的に比較する

自動収集などを利用して実機設定を取得し、 管理している設定との差分を検出できる仕組みを作ると、 設定ドリフトの発見につながります。

顧客・上司へGit導入を説明する方法

Gitの導入を説明するときに、 「Gitは便利なツールです」だけでは十分ではありません。

ネットワーク運用上の課題と結び付けて説明します。

技術者向けの説明

「設定ファイルをGit管理することで、 作業前後のdiffを確認でき、過去のコミットとの比較や 変更履歴の追跡が可能になります。」

管理者・顧客向けの説明

「設定変更の履歴と差分を記録することで、 障害発生時に直前の変更を確認しやすくし、 変更作業のレビューや原因調査を効率化します。」

技術 → 運用上のメリットへ翻訳する

Gitを説明するときは、 commitやbranchという機能そのものより、 「変更追跡」「レビュー」「原因調査」「復旧判断」に どう役立つかを伝えると理解されやすくなります。

Git・設定管理で使われる英語表現

英語 意味 実務でのイメージ
Version Control バージョン管理 ファイルの変更履歴を管理する
Repository リポジトリ Gitで管理するファイルと履歴
Commit 変更を履歴へ記録する VLAN追加などを記録
Diff 差分 変更前後の違い
Branch 履歴の分岐 変更作業を別ラインで管理
Merge 統合 変更ブランチを正式版へ取り込む
Restore 復元 過去のファイル内容を戻す
Revert 変更を打ち消す 過去の変更を取り消す新しい履歴を作る
Configuration Drift 設定ドリフト 管理上の設定と実機設定がずれること

英語のコミットメッセージ例

Add VLAN 200 for development users Update OSPF configuration for Osaka router Change primary NTP server Remove obsolete static route Update firewall object definitions

コミットメッセージでは、 Add / Update / Change / Remove / Fix などの動詞から始めると、 何を行ったのかを簡潔に表現できます。

理解度チェック

記事の内容を確認するため、次の5問に答えてください。

問題1.Gitをネットワーク設定管理に利用する主な目的として、 最も適切なものはどれですか。

  1. ネットワーク機器のCPU使用率を監視する
  2. 設定ファイルの変更履歴や差分を管理する
  3. ルーティングプロトコルを自動選択する
  4. LANケーブルの障害を検出する
解答を見る
正解:B

Gitでは設定ファイルの変更履歴や差分を管理できます。

問題2.現在変更されているファイルの状態を確認するコマンドはどれですか。

  1. git status
  2. git delete
  3. git start
  4. git network
解答を見る
正解:A.git status

問題3.変更前後の差分を確認する基本コマンドはどれですか。

  1. git log
  2. git diff
  3. git branch
  4. git init
解答を見る
正解:B.git diff

問題4.次のうちGitリポジトリへ不用意に保存すべきでないものを2つ挙げてください。

自分の回答を書いてみましょう。
解答例を見る

APIトークン、秘密鍵、平文パスワード、 VPNのPre-Shared Keyなどが該当します。

問題5.Git上で過去の設定へ戻せば、 ネットワーク機器の実機設定も自動的に戻りますか。

解答を見る
正解:戻りません。

Gitで復元されるのは管理しているファイルです。 実機へ反映するには、別途コンフィグ投入などの作業が必要です。

実践演習:ネットワーク設定をGitで履歴管理する

Router01の設定変更を想定して、 Gitによる変更管理を行ってみましょう。

演習1.初期設定をGitへ登録する

次のファイルを作成します。

configs/router01.cfg

内容は次のとおりです。

hostname Router01 interface GigabitEthernet0/1 description To-Core-SW ip address 10.0.0.1 255.255.255.252 no shutdown router ospf 10 network 10.0.0.0 0.0.0.3 area 0

次のコマンドで初期状態を登録してください。

実行するGitコマンドを書いてみましょう。
解答例を見る
git init git add configs/router01.cfg git commit -m “Add initial configuration for Router01”

演習2.OSPF設定を追加する

次の1行をrouter01.cfgへ追加してください。

network 192.168.200.0 0.0.0.255 area 0

追加後、コミットする前に どのコマンドを使って差分を確認すべきでしょうか。

コマンド:
解答を見る
git diff

演習3.変更をコミットする

差分が正しいことを確認したあと、 変更を履歴へ登録してください。

解答例を見る
git add configs/router01.cfg git diff –staged git commit -m “Add OSPF network for VLAN 200”

演習4.変更履歴を確認する

これまでのコミットを1行ずつ表示してください。

解答を見る
git log –oneline

演習5.運用ルールを考える

あなたが10人のネットワークチームでGitを導入するとします。 次の内容を決めてください。

  • どのファイルをGitで管理するか
  • 誰がmainブランチへ反映できるか
  • レビューを必須にするか
  • コミットメッセージの形式
  • 秘密情報をどのように分離するか
  • 実機設定とGitの差分をいつ確認するか
自分のチームで利用するGit設定管理ルールを書いてみましょう。

自分の言葉で説明する課題

上司から、 「コンフィグは共有フォルダーへバックアップしているのに、 なぜGitまで必要なのですか?」 と聞かれました。

技術用語を使いすぎず、1分程度で説明してください。

自分の説明を書いてみましょう。
説明例を見る

共有フォルダーへの保存でもバックアップはできますが、 Gitを利用すると、変更前後の差分や変更履歴を確認しやすくなります。 そのため、設定変更のレビューや、 障害発生時に「直前に何が変わったのか」を調べる作業を効率化できます。 バックアップを置き換えるというより、 設定変更を追跡しやすくするために利用します。

まとめ

  • Gitを使うとネットワーク設定ファイルの変更履歴を管理できる
  • git statusで現在の状態を確認できる
  • git diffで変更前後の差分を確認できる
  • git addで変更をステージングし、git commitで履歴へ記録する
  • git logやgit showを使うと過去の変更を確認できる
  • branchを使うと本番用の履歴と変更作業を分離できる
  • Git上でファイルを戻しても実機設定が自動的に戻るわけではない
  • パスワード、秘密鍵、トークンなどの機密情報はGitへ不用意に保存しない
  • SSH・Python・Ansible・APIと組み合わせることで、 コンフィグ取得から履歴管理まで自動化できる

Gitは「設定ファイルを保存する場所」ではなく、 ネットワーク変更の履歴と差分を追跡するための仕組みとして使うことが重要です。

次の記事:59. テレメトリーと可視化

今回は、Gitを使ってネットワーク設定の変更履歴を管理する方法を学びました。

自動化をさらに進めるためには、 設定だけでなく、 ネットワーク機器から継続的に状態データを取得し、 可視化する仕組み も重要です。

次回は、テレメトリーとは何か、 従来のSNMP監視との違い、 メトリクス収集からダッシュボード表示までの考え方を学びます。

ネットワーク上級編 58/全70記事

第6章では、Python・SSH・Ansible・REST API・Git・テレメトリーなどを使い、 ネットワーク運用を自動化・効率化するための技術を学びます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次