IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

Pythonでネットワーク自動化をしよう

CTC 教育サービス

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes 

第40回 Pythonとネットワーク自動化基礎検定 模擬問題解説(2) (小澤昌樹) 2025年11月

みなさん、こんにちは。

この連載では、「Pythonとネットワーク自動化基礎検定」の合格を視野に、ネットワーク自動化をこれから学ぶ方に向けて、Pythonによる基本的なスクリプトとその考え方を模擬問題形式で解説しています。出題範囲に沿って、実際の現場でも役立つ知識を体系的に身につけられる内容を目指しています。

前回は、自動化の中核となるライブラリ「NAPALM」と「Netmiko」を取り上げ、それぞれの特徴と用途の違いをの模擬問題2問を解説しました。

今回は、スクリプトの柔軟性や保守性を高める「周辺技術」に注目します。YAMLでの設定管理や、subprocessを用いた外部コマンド実行など、実践的な自動化を支える技術を模擬問題形式で、解説していきましょう。

【問題3】YAMLファイルを使って設定対象を管理する

以下のようなネットワーク自動化スクリプトがある。devices.yml に記述された各ネットワーク機器に対してSSH接続し、OSのバージョン情報を取得して表示するコードを作成したい。最も適切なYAMLの書き方はどれか。


import yaml

with open("devices.yaml", "r", encoding="utf-8") as f: data = yaml.safe_load(f)
for device in data["devices"]: print(f"{device[’name’]} ({device[’ip’]})")

選択肢:
A.


devices:
- name: router1
  ip: 192.168.1.1
- name: router2
ip: 192.168.1.2

B.


router1:
  name: router1
  ip: 192.168.1.1
router2:
  name: router2
  ip: 192.168.1.2

C.


devices:
  - host: 192.168.1.1
    username: admin
    password: cisco
  - host: 192.168.1.2
    username: admin
    password: cisco

D.


devices: [
  {name: router1, ip: 192.168.1.1},
  {name: router2, ip: 192.168.1.2}
]

正解:
C

解説:
YAMLは、Pythonの辞書(dict)やリスト(list)に変換しやすい形式で記述できるため、ネットワーク自動化における構成管理ファイルとしてよく利用されます。選択肢Aは、devicesというキーの下にリスト形式で複数の機器を記述しています。この構造は、次のようにPython側で処理しやすいため、実務でも多く使われます。

Cは、devicesキーの下にリスト形式で辞書を並べる、YAMLの基本構文として正しい形式です。Pythonでは data["devices"] にアクセスし、各辞書を device[’name’]、device[’ip’] で取り出せます。 Aは、router2 の ip がインデントされておらず、構造上のエラーとなります。 Bは、devices: という親キーが存在せず、スクリプトの data["devices"] に対応しません。 DはYAMLとして一応解釈可能ですが、Pythonの辞書・リスト構造に似せた省略形式であり、可読性・保守性の面から避けるべき書き方です。

【問題4】Pingで複数ホストの死活確認を自動化

以下のコードは、複数のIPアドレスに対してPingを実行して、到達可能かどうかを判定するPythonスクリプトである。空欄 [ ] に入る適切な関数はどれか。


import subprocess

hosts = [’192.168.1.1’, ’192.168.1.2’]
for ip in hosts: result = subprocess.run([’ping’, ’-c’, ’1’, ip], stdout=subprocess.PIPE) if result.returncode == [ ]: print(f"{ip} は到達可能") else: print(f"{ip} は到達不可")

選択肢:
A. 1
B. 0
C. True
D. None

正解:
B. 0

解説:
subprocess.run() は、コマンドを実行した結果の戻り値を returncode というプロパティで提供します。UNIX/Linux環境では、returncode == 0 が正常終了、つまりPingが成功したことを意味します。

したがって、このスクリプトでは returncode == 0 のときに「到達可能」と判定するのが正しい実装です。


if result.returncode == 0:
    print(f"{ip} は到達可能")

このようなpingを使った簡易的な死活監視は、状態確認やログ収集の前段として有用です。さらに発展させると、ログファイルへの書き出し、アラート通知、NotionやGoogle Sheetsへの記録などにも展開できます。

まとめ

今回の2問は、ネットワーク自動化を支える「周辺技術」に注目しました。

  • YAML:設定情報をスクリプト本体から分離することで、再利用性や可読性、保守性が大幅に向上します。複数の機器を扱う場面や、異なる環境間での設定切り替えにおいて特に有効です。
  • subprocessとPing:外部コマンドをPythonから呼び出すことで、OSの機能を活用した簡易的な監視やチェックが可能になります。高度なライブラリを使わなくても、ネットワークの疎通確認や状態把握といった実用的なスクリプトを素早く構築できます。

こうした周辺技術は、NAPALMやNetmikoといった専用ライブラリと連携させることで、より柔軟で現場に即したネットワーク自動化の土台となります。現場でよくある小さな面倒ごとを自動化できるスクリプトを使うかどうかが、日々の運用の質を左右するかもしれません。

次回も、実務で役立つスクリプト例とともに、ネットワーク自動化に必要な知識と考え方を「模擬問題形式」で解説していきます。読むだけで終わらず、手を動かして身につけることを大切に、ぜひ一緒に学んでいきましょう。

 

 [IT研修]注目キーワード   Python  Power Platform  最新技術動向  生成AI  Docker  Kubernetes