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

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

研修コース検索

コラム

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

CTC 教育サービス

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

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

みなさん、こんにちは。

今回は、より現場に近い「実用的な基礎スキル」に焦点を当てた模擬問題を3問取り上げます。ネットワーク自動化と聞くと、NAPALMやNetmikoといったライブラリを用いた機器制御や構成変更といった高度な操作に意識が向きがちですが、実際の現場では、それらを支える基本的なスクリプト処理能力こそが、自動化を成功させる鍵となります。

今回扱うテーマは、以下の3つです。

  • YAMLファイルの読み取り
    複数機器の設定や接続情報をコードから分離し、柔軟かつ再利用可能な形で管理するために不可欠です。
  • ファイル操作によるログ抽出
    監視ログやsyslogファイルから、特定のキーワードやパターンを自動抽出する処理は、障害対応や定期レポートの自動化に直結します。
  • JSONログの構造化データ処理
    モダンなネットワーク管理では、REST APIや各種ツールからJSON形式で情報を取得する場面が増えています。そのため、ネストされた構造を理解し、的確にデータを抽出する力が求められます。

こうした処理は一見すると「プログラミングの基礎」ですが、ネットワークエンジニアにとっては、自動化を行ううえで重要な部分です。CLIをPythonに置き換えただけのスクリプトでは限界があり、設定やログ、APIレスポンスといった外部とのデータ連携を自在に扱えることが、安定的かつ効率的な自動化を可能にします。

【問題1】YAMLファイルから設定を取得する

以下の config.yaml にはネットワーク機器の設定が記述されています。このYAMLファイルからホスト名を取得するコードとして正しいものはどれか。


device:
  hostname: router01
  ip: 192.168.1.1
  username: admin
  password: pass123

選択肢:
A.


import yaml
with open(’config.yaml’) as f:
    config = yaml.load(f)
print(config[’hostname’])

B.


import yaml
with open(’config.yaml’) as f:
    config = yaml.safe_load(f)
print(config[’device’][’hostname’])

C.


import json
with open(’config.yaml’) as f:
    config = json.load(f)
print(config[’device’][’hostname’])

D.


import yaml
config = yaml.load_file(’config.yaml’)
print(config.device.hostname)

正解:
B

解説:
YAMLはPythonで設定情報を管理する際に頻繁に使われるフォーマットです。この問題のポイントは以下の3点です。

  • yaml.safe_load() を使って安全に読み込む
  • YAMLの階層構造に合わせた辞書アクセス
  • yaml.load() はPyYAML v6以降で非推奨(セキュリティの観点)

Aは非推奨な yaml.load() を使い、さらに階層構造へのアクセスが不適切。

CはYAMLをJSONで読み込もうとしているためエラーになります。

Dは存在しない yaml.load_file() を使っており無効です。

【問題2】ログファイルから「ERROR」を含む行を抽出

syslog.txt に記録されたログから、「ERROR」という文字列を含む行だけを errors.txt に保存したい。適切なコードはどれか。

選択肢:
A.


with open(’syslog.txt’, ’r’) as infile, open(’errors.txt’, ’w’) as outfile:
    for line in infile:
        if line.find(’ERROR’):
            outfile.write(line)

B.


with open(’syslog.txt’, ’r’) as infile, open(’errors.txt’, ’w’) as outfile:
    for line in infile:
        if ’ERROR’ in line:
            outfile.write(line)

C.


with open(’syslog.txt’) as infile:
    lines = infile.readlines()
    if ’ERROR’ in lines:
        with open(’errors.txt’, ’w’) as outfile:
            outfile.write(lines)

D.


infile = open(’syslog.txt’)
outfile = open(’errors.txt’, ’w’)
for line in infile:
    if ’ERROR’ in line:
        print(line, file=’errors.txt’)
infile.close()
outfile.close()

正解:
B

解説:
ファイル操作は自動化において不可欠な技術です。特にログからの抽出処理は、アラート通知や監視の前段階として重要です。

Aは line.find(’ERROR’) が "ERROR" を含まないとき -1 を返すため、意図に反して全ての行を出力してしまう。

Cはリストに対して ’ERROR’ in lines を評価しているため不適切です。

Dは print(..., file=’errors.txt’) の書き方が間違いです。file=outfile が正しい構文です。

なお、Pythonでは、with open(...) を使うことで自動的にファイルをクローズできるので、安全で推奨されます。

【問題3】JSONログから特定のフィールドを抽出する

APIやログファイルから以下のようなJSONデータを受け取ったとします。このデータからCPU使用率(12.3)を取り出すコードとして正しいものはどれか。


{
  "device": {
    "hostname": "sw-core01",
    "status": "up",
    "metrics": {
      "cpu": 12.3,
      "memory": 47.8
    }
  }
}

選択肢:
A.


import json
with open(’device.json’) as f:
    data = json.load(f)
print(data[’metrics’][’cpu’])

B.


import json
with open(’device.json’) as f:
    data = json.load(f)
print(data[’device’][’metrics’][’cpu’])

C.


import json
with open(’device.json’) as f:
    cpu = json.load(f)[’cpu’]
print(cpu)

D.


import yaml
with open(’device.json’) as f:
    data = yaml.safe_load(f)
print(data.device.metrics.cpu)

正解:
B

解説:
構造化されたログやAPIレスポンスを扱う上で、JSON形式の読み取りと辞書操作は非常に重要です。

Aは "metrics" が "device" の下にあることを見落としており、KeyError になります。

Cは cpu をトップレベルキーと誤認しており誤り。

DはJSONファイルをYAMLで読み込もうとしていますが、通常の運用では推奨されませんし、ピリオド(.)で連結するアクセスもPythonでは不可です。

Pythonの json.load() は、JSONデータを辞書として読み込むため、構造を正しく把握してキーをたどる必要があります。

まとめ

今回取り上げた3問は、ネットワーク自動化の基礎を支える「土台」となるスキルをテーマにしました。

  • YAML:スクリプトから設定情報を切り離して管理でき、再利用性や保守性を大幅に高める
  • ファイル操作:ログ抽出や監視エビデンス作成など、日常運用の自動化に欠かせない
  • JSON処理:API連携やログ解析など、モダンなネットワーク管理で必須となるデータ形式に対応できる

これらは一見すると地味な基礎に見えますが、NAPALMやNetmikoといったライブラリを現場で使うための重要なスキルです。ぜひ、今回の問題をきっかけに、手を動かしながら理解を深めてみてください。次回は、複数機器への並列処理といった、より実践的で応用的なテーマに踏み込んでいきます。どうぞお楽しみに。

 

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