本記事には広告(アフィリエイトリンク)が含まれます。

構成管理ドキュメントをAIで自動生成する

📚 シリーズ:インフラ運用 × 生成AI 実践レシピ集
障害対応の初動をAIで加速する
構成管理ドキュメントをAIで自動生成する(本記事)
監視アラートをAIでトリアージする
IaCテンプレートをAIと共同作成する

🔗 前シリーズ:生成AIを武器にするインフラエンジニアへの道(全3記事)

この記事について

この記事は生成AI(Claude)を活用して執筆し、運営者が内容を確認・編集しています。


はじめに

インフラエンジニアの業務時間のうち、ドキュメント作成・更新は無視できない割合を占めています。サーバーを構築したら構成表を作り、作業が終われば手順書を残し、担当者が変わるたびに引き継ぎ資料を整備する。これらは運用品質を維持するために不可欠ですが、コマンド出力を転記して表に整形する作業は単調で、時間がかかります。

この記事では、AIを「ゼロから文書を書かせるツール」としてではなく、「コマンド出力という事実情報を整形・構造化するツール」として活用します。AIへの入力はすべてコマンドの実行結果です。AIが担うのは、その出力を表形式に変換し、項目ごとに分類する作業です。判断や責任は人間が担います。

この記事で作成する3種類のドキュメントは以下の通りです。

ドキュメント種別入力ソースAIの役割
サーバー構成表コマンド出力(hostname, ip addr, free -h 等)表形式に整形・分類
作業手順書historyコマンドの実行履歴手順書形式に構造化
引き継ぎドキュメント構成表 + 手順書 + 運用ルール統合・フォーマット適用

手動作成とAI活用の所要時間の目安を比較すると、次のようになります。

ドキュメント手動作成AI活用
サーバー構成表1〜2時間15〜30分
作業手順書1〜2時間20〜30分

※サーバー1台あたりの目安です。構成の複雑度により変動します。

手動の場合、コマンド出力を目視で確認しながらExcelやMarkdownに転記し、体裁を整える工程が大半を占めます。AI活用では、コマンド出力をそのまま渡して整形させ、人間は「生成結果の検証」に集中します。

この記事を読むと、以下の3つができるようになります。

  1. サーバー構成情報を一括収集するスクリプトを作成し、AIに渡せる形で出力できる
  2. コマンド出力やhistory履歴からAIで構成表・手順書を生成するプロンプトを設計できる
  3. AI生成ドキュメントの検証ポイントを理解し、正確性を担保できる

前提条件

この記事は、以下の前提知識を持つ方を対象としています。

  • 記事①のプロンプト設計の基礎知識(6構成要素の理解)
  • Linuxのコマンドライン操作ができる(hostname、ip addr、systemctl等の基本操作)
  • SSHでサーバーに接続できる

検証環境

項目内容
OSAlmaLinux 10 minimal
接続方法SSH(192.168.1.90)
AIモデルClaude Sonnet 4.6(Anthropic公式Web UI)
出力形式Markdown表形式
必要な権限root または sudo(ss -tlnp、firewall-cmd等で必要)

記事中のプロンプト例はすべてClaude Sonnet 4.6で動作確認しています。ChatGPTなど他のモデルでも基本的な考え方は共通ですが、出力形式の細かな差異が生じる場合があります。

機密情報のマスキング

コマンド出力をAIに送信する際の機密情報のマスキング方法は、記事① 障害対応の初動をAIで加速するで解説しています。この記事でも同様の注意が必要です。追加のマスキングパターン(MACアドレス・UUID・Machine ID)はH2-3で紹介します。


サーバー情報を一括収集する

構成表を作成するために、サーバーの情報を8カテゴリに分けて収集します。以下のコマンドはAlmaLinux 10 minimalで実行できます。ただし、firewall-cmd は firewalld パッケージがインストールされている環境が前提です(minimalインストールでは含まれない場合があります。dnf install -y firewalld でインストールしてください)。

カテゴリコマンド取得できる情報
ホスト情報hostnamectlホスト名・OS・カーネル・仮想化種別・Machine ID
OS情報cat /etc/os-release / uname -rOS名・バージョン・カーネルバージョン
CPUlscpuアーキテクチャ・コア数・モデル名
メモリfree -hメモリ合計・使用量・スワップ
ストレージdf -hT / lsblkマウントポイント・ファイルシステム・サイズ・使用率
ネットワークip addr / ip route / ss -tlnpIPアドレス・ゲートウェイ・リスニングポート
サービスsystemctl list-units --type=service --state=running実行中のサービス一覧
セキュリティgetenforce / firewall-cmd --list-allSELinux状態・firewalldルール

各コマンドの実行例を示します。

# ホスト情報
$ hostnamectl

# 実行結果
 Static hostname: alma-web01
       Icon name: computer-vm
         Chassis: vm
      Machine ID: a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4
         Boot ID: 12345678-1234-1234-1234-123456789abc
  Virtualization: microsoft
Operating System: AlmaLinux 10 (Purple Lion)
     CPE OS Name: cpe:/o:almalinux:almalinux:10
          Kernel: Linux 6.12.8-1.el10.x86_64
    Architecture: x86-64
# メモリ情報
$ free -h

# 実行結果
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       512Mi       2.9Gi       8.0Mi       428Mi       3.3Gi
Swap:          2.0Gi          0B       2.0Gi
# リスニングポート(sudo必須)
$ sudo ss -tlnp

# 実行結果
State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port  Process
LISTEN  0       128      0.0.0.0:22            0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
LISTEN  0       511      0.0.0.0:80            0.0.0.0:*          users:(("nginx",pid=5678,fd=6))
LISTEN  0       128      [::]:22               [::]:*             users:(("sshd",pid=1234,fd=4))

バイナリ配置型ミドルウェアの情報収集

rpm/dnf(パッケージ管理ツール)で管理されないソフトウェア(Payara、Tomcat、Elasticsearch等)は、パッケージ管理コマンドでは検出できません。これらのミドルウェアは /opt/usr/local に直接配置されていることが多く、情報収集時に見落としやすい項目です。

確認手法①:プロセスから特定する

実行中のプロセスから、バイナリ配置型ミドルウェアを検出します。

# Javaベースのミドルウェアを検索
$ ps aux | grep -E '(java|payara|tomcat|elasticsearch|glassfish)' | grep -v grep

# 実行結果
payara    2345  0.5 12.3 3456789 456789 ?  Sl  10:00   1:23 /opt/payara6/glassfish/bin/../modules/glassfish.jar
tomcat    3456  0.3  8.7 2345678 345678 ?  Sl  10:00   0:45 /opt/tomcat/bin/bootstrap.jar

# 全プロセスを確認する場合
$ ps aux --sort=-%mem | head -20

確認手法②:バージョン確認コマンド

検出したミドルウェアのバージョンを確認します。

# Payara
$ /opt/payara6/bin/asadmin version

# 実行結果
Version = Payara Server 6.2024.6 #badassfish

# Tomcat
$ /opt/tomcat/bin/catalina.sh version

# 実行結果
Server version: Apache Tomcat/10.1.18
Server number:  10.1.18.0

# Elasticsearch(APIで確認)
$ curl -s localhost:9200

# 実行結果
{
  "name" : "node-1",
  "cluster_name" : "my-cluster",
  "version" : {
    "number" : "8.12.0"
  }
}

# Java
$ java -version

# 実行結果
openjdk version "21.0.2" 2024-01-16

AIにプロセス情報を渡してミドルウェアを特定する

ps aux の出力全体をAIに渡し、動作しているミドルウェアの特定を依頼できます。

あなたはLinuxサーバーの構成調査を支援するアシスタントです。

以下はサーバーで実行中のプロセス一覧(ps aux の出力)です。
このサーバーで動作しているミドルウェア・アプリケーションを一覧にしてください。

## 条件
- プロセス名、実行ユーザー、コマンドパスからミドルウェアを特定する
- rpm/dnf で管理されていないバイナリ配置型のソフトウェアも含める
- 判断に迷う場合は「要確認」と記載する
- 各ミドルウェアについて、バージョン確認コマンドがあれば併記する

## 出力形式
Markdown表形式

| ミドルウェア名 | 実行ユーザー | コマンドパス | 推定バージョン | バージョン確認コマンド |

## プロセス一覧
<ps-output>
(ここにps auxの出力を貼り付け)
</ps-output>

一括収集スクリプトへの組み込み

既知のミドルウェアリストを定義し、プロセスの存在をチェックする方式で組み込みます。

# server-info-collector.sh 内の該当部分
echo -e "\n=== バイナリ配置型ミドルウェア ===" >> "$OUTPUT_FILE"

# 既知のミドルウェアリスト
MIDDLEWARE_LIST=("java" "payara" "tomcat" "elasticsearch" "nginx" "httpd" "postgres" "mysql" "redis")

for mw in "${MIDDLEWARE_LIST[@]}"; do
    if pgrep -f "$mw" > /dev/null 2>&1; then
        echo "--- $mw: 検出 ---" >> "$OUTPUT_FILE"
        ps aux | grep "$mw" | grep -v grep >> "$OUTPUT_FILE"
    fi
done

# Javaベースのミドルウェア詳細
if command -v java &> /dev/null; then
    echo "--- Java Version ---" >> "$OUTPUT_FILE"
    java -version 2>> "$OUTPUT_FILE"
fi

一括収集スクリプト

上記のコマンドをまとめて実行し、1つのテキストファイルに出力するスクリプトです。

server-info-collector.sh(一括収集スクリプト)

#!/bin/bash
# server-info-collector.sh
# サーバー構成情報を一括収集するスクリプト

OUTPUT_FILE="server-info-$(hostname)-$(date +%Y%m%d).txt"

echo "=== ホスト情報 ===" > "$OUTPUT_FILE"
hostnamectl >> "$OUTPUT_FILE"

echo -e "\n=== OS情報 ===" >> "$OUTPUT_FILE"
cat /etc/os-release >> "$OUTPUT_FILE"
echo "Kernel: $(uname -r)" >> "$OUTPUT_FILE"

echo -e "\n=== CPU情報 ===" >> "$OUTPUT_FILE"
lscpu >> "$OUTPUT_FILE"

echo -e "\n=== メモリ情報 ===" >> "$OUTPUT_FILE"
free -h >> "$OUTPUT_FILE"

echo -e "\n=== ディスク情報 ===" >> "$OUTPUT_FILE"
df -hT >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
lsblk >> "$OUTPUT_FILE"

echo -e "\n=== ネットワーク情報 ===" >> "$OUTPUT_FILE"
ip addr >> "$OUTPUT_FILE"
echo "" >> "$OUTPUT_FILE"
ip route >> "$OUTPUT_FILE"

echo -e "\n=== リスニングポート ===" >> "$OUTPUT_FILE"
ss -tlnp >> "$OUTPUT_FILE"

echo -e "\n=== 稼働サービス ===" >> "$OUTPUT_FILE"
systemctl list-units --type=service --state=running >> "$OUTPUT_FILE"

echo -e "\n=== セキュリティ ===" >> "$OUTPUT_FILE"
echo "SELinux: $(getenforce)" >> "$OUTPUT_FILE"
firewall-cmd --list-all >> "$OUTPUT_FILE" 2>&1

echo -e "\n=== タイムゾーン ===" >> "$OUTPUT_FILE"
timedatectl >> "$OUTPUT_FILE"

echo -e "\n=== バイナリ配置型ミドルウェア ===" >> "$OUTPUT_FILE"
MIDDLEWARE_LIST=("java" "payara" "tomcat" "elasticsearch" "nginx" "httpd" "postgres" "mysql" "redis")
for mw in "${MIDDLEWARE_LIST[@]}"; do
    if pgrep -f "$mw" > /dev/null 2>&1; then
        echo "--- $mw: 検出 ---" >> "$OUTPUT_FILE"
        ps aux | grep "$mw" | grep -v grep >> "$OUTPUT_FILE"
    fi
done
if command -v java &> /dev/null; then
    echo "--- Java Version ---" >> "$OUTPUT_FILE"
    java -version 2>> "$OUTPUT_FILE"
fi

echo "収集完了: $OUTPUT_FILE"

スクリプトの実行方法は以下の通りです。

# スクリプトに実行権限を付与
$ chmod +x server-info-collector.sh

# sudo で実行(ss -tlnp や firewall-cmd で必要)
$ sudo ./server-info-collector.sh

# 実行結果
収集完了: server-info-alma-web01-20260313.txt

機密情報のマスキング

機密情報の取り扱い

コマンド出力には内部IPアドレス・ホスト名・MACアドレス・UUID等の機密情報が含まれます。外部AIサービスに送信する前に、必ずマスキング処理を行うか、社内ポリシーに従ってください。マスキングの基本的な考え方は記事① 障害対応の初動をAIで加速するで解説しています。

記事①で紹介したIPアドレス・ホスト名・ユーザー名のマスキングに加え、サーバー構成情報では以下の項目もマスキングが必要です。

マスキング対象理由マスキング例
MACアドレスネットワーク機器の特定に使われるXX:XX:XX:XX:XX:XX
Machine IDsystemdが生成するホスト固有IDxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Boot ID起動ごとに生成されるIDxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
UUID(ディスク)パーティション固有のIDXXXX-XXXX-XXXX-XXXX-XXXX

以下のスクリプトで一括マスキングできます。

#!/bin/bash
# mask-server-info.sh
# サーバー構成情報のマスキングスクリプト

INPUT_FILE="$1"
OUTPUT_FILE="${INPUT_FILE%.txt}_masked.txt"
cp "$INPUT_FILE" "$OUTPUT_FILE"

# IPアドレス(ネットワーク部を残してホスト部をマスキング)
sed -i -E 's/([0-9]{1,3}\.[0-9]{1,3})\.[0-9]{1,3}\.[0-9]{1,3}/\1.xxx.xxx/g' "$OUTPUT_FILE"
# MACアドレス
sed -i -E 's/([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}/XX:XX:XX:XX:XX:XX/g' "$OUTPUT_FILE"
# ホスト名
REAL_HOSTNAME=$(hostname)
sed -i "s/$REAL_HOSTNAME/MASKED-HOST/g" "$OUTPUT_FILE"
# Machine ID
sed -i -E 's/Machine ID: [0-9a-f]{32}/Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/g' "$OUTPUT_FILE"
# Boot ID
sed -i -E 's/Boot ID: [0-9a-f-]{36}/Boot ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/g' "$OUTPUT_FILE"
# UUID
sed -i -E 's/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/XXXX-XXXX-XXXX-XXXX-XXXX/g' "$OUTPUT_FILE"

echo "マスキング完了: $OUTPUT_FILE"

実行方法は以下の通りです。

$ chmod +x mask-server-info.sh
$ ./mask-server-info.sh server-info-alma-web01-20260313.txt

# 実行結果
マスキング完了: server-info-alma-web01-20260313_masked.txt

マスキング後のファイルを開き、機密情報が残っていないか目視で確認してからAIに送信します。


サーバー構成表をAIで生成する

比較: 手動でサーバー構成表を作成する場合

Before(手作業の場合)

以下の作業を1台ごとに繰り返します。

  1. SSHでサーバーに接続
  2. hostname、ip addr、free -h、df -h 等を1つずつ実行
  3. 各コマンドの出力を目視で確認
  4. ExcelやMarkdownに手入力で転記
  5. 表の体裁を整える
  6. 別の担当者にレビューを依頼

所要時間の目安: 1台あたり 1〜2時間

改善ポイント: コマンド出力をそのままAIに渡し、表形式への変換・項目の分類・体裁の整形をAIに任せます。人間は「正確性の検証」に集中します。

After(AI活用の場合)

  1. 情報収集スクリプトを実行(全コマンド出力を1ファイルに集約)
  2. マスキング処理を実行
  3. スクリプト出力をAIに送信し、構成表を生成するプロンプトを実行
  4. 生成された構成表をコマンド出力と突き合わせて検証

所要時間の目安: 1台あたり 15〜30分

構成表生成プロンプト

以下のプロンプトをClaude(Web UI)に送信し、コマンド出力を貼り付けます。このプロンプトは、前シリーズ記事①で解説した6構成要素(役割・タスク・制約・コンテキスト・出力形式・例)に基づいて設計しています。

あなたはインフラエンジニアのドキュメント作成を支援するアシスタントです。

以下のコマンド出力から、サーバー構成表をMarkdown表形式で作成してください。

## 制約
- コマンド出力に含まれる情報のみを使用し、推測で補完しない
- 情報が不足する場合は「要確認」と記載する
- バージョン番号は出力から正確に転記する
- IPアドレス、ホスト名等はマスキングされた値をそのまま使用する
- rpm/dnf管理外のミドルウェア(バイナリ配置型)が検出されている場合は、別セクションとして記載する

## 出力形式
以下のテンプレートに従ってMarkdown表を作成してください。

### 基本情報
| 項目 | 内容 |
|------|------|
| ホスト名 | |
| OS | |
| カーネル | |
| アーキテクチャ | |
| 仮想化 | |

### ハードウェアリソース
| 項目 | 内容 |
|------|------|
| CPU | |
| コア数 | |
| メモリ合計 | |
| スワップ | |

### ディスク構成
| マウントポイント | デバイス | ファイルシステム | サイズ | 使用率 |
|----------------|---------|----------------|--------|--------|

### ネットワーク構成
| インターフェース | IPアドレス | サブネット | 備考 |
|----------------|----------|----------|------|

### リスニングポート
| ポート | プロトコル | プロセス | 用途 |
|--------|----------|---------|------|

### 稼働サービス
| サービス名 | 状態 | 自動起動 | 備考 |
|-----------|------|---------|------|

### セキュリティ設定
| 項目 | 設定値 | 備考 |
|------|--------|------|
| SELinux | | |
| firewalld | | |

### バイナリ配置型ミドルウェア
| ミドルウェア名 | バージョン | インストールパス | 実行ユーザー |
|-------------|----------|---------------|------------|

## コマンド出力
<server-info>
(ここに server-info-XXXX_masked.txt の内容を貼り付け)
</server-info>

実演:コマンド出力からの構成表生成

以下は、一括収集スクリプトの出力(マスキング済み)をAIに渡した場合の生成結果の例です。

入力(コマンド出力の一部):

=== ホスト情報 ===
 Static hostname: MASKED-HOST
       Icon name: computer-vm
         Chassis: vm
      Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
         Boot ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  Virtualization: microsoft
Operating System: AlmaLinux 10 (Purple Lion)
     CPE OS Name: cpe:/o:almalinux:almalinux:10
          Kernel: Linux 6.12.8-1.el10.x86_64
    Architecture: x86-64

=== メモリ情報 ===
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       512Mi       2.9Gi       8.0Mi       428Mi       3.3Gi
Swap:          2.0Gi          0B       2.0Gi

=== リスニングポート ===
State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port  Process
LISTEN  0       128      0.0.0.0:22            0.0.0.0:*          users:(("sshd",pid=1234,fd=3))
LISTEN  0       511      0.0.0.0:80            0.0.0.0:*          users:(("nginx",pid=5678,fd=6))

AI生成結果:

### 基本情報
| 項目 | 内容 |
|------|------|
| ホスト名 | MASKED-HOST |
| OS | AlmaLinux 10 (Purple Lion) |
| カーネル | Linux 6.12.8-1.el10.x86_64 |
| アーキテクチャ | x86-64 |
| 仮想化 | microsoft (Hyper-V) |

### ハードウェアリソース
| 項目 | 内容 |
|------|------|
| CPU | 要確認(lscpuの出力なし) |
| コア数 | 要確認 |
| メモリ合計 | 3.8 GiB |
| スワップ | 2.0 GiB |

### リスニングポート
| ポート | プロトコル | プロセス | 用途 |
|--------|----------|---------|------|
| 22 | TCP | sshd | SSH |
| 80 | TCP | nginx | HTTP |

コマンド出力に含まれない情報(この例ではCPU情報)に対して「要確認」と記載されている点が、プロンプトの制約が正しく機能していることを示しています。

生成結果の検証

バージョン番号・IPアドレスの正確性を必ず確認

AI生成の構成表は、バージョン番号やIPアドレスの転記ミスが発生することがあります。生成後は必ずコマンド出力と突き合わせて正確性を確認してください。

以下の6項目を必ず検証してください。

検証項目リスク検証方法
IPアドレス転記ミス・別サーバーの情報と混同コマンド出力と目視照合
バージョン番号古い情報で補完される可能性rpm -q <パッケージ名> で確認
パス(ファイルパス)存在しないパスを生成する場合があるls -la <パス> で確認
ポート番号標準ポートを推測で記載する場合があるss -tlnp の出力と照合
サービス名CentOS時代の名称で記載する場合があるsystemctl status <サービス名> で確認
設定値デフォルト値を推測で記載する場合がある設定ファイルの実物と照合

Markdown形式の利点

構成表をMarkdown形式で出力すると、Gitでのバージョン管理やWikiへの掲載に適しています。Excel形式と比較して差分管理が容易で、構成変更の履歴を追跡しやすくなります。


作業手順書をAIで生成する

比較: 手動で作業手順書を作成する場合

Before(手作業の場合)

  1. 作業中にメモを取りながら作業する(取り忘れが発生しがち)
  2. 作業後に記憶とメモを頼りに手順書を書く
  3. 各コマンドの説明・理由を自分の言葉で補足する
  4. 手順の前後関係を整理し直す
  5. レビューで「なぜこのコマンドを実行したのか」を追記するよう指摘される

所要時間の目安: 30分〜1時間の作業に対して、手順書作成に1〜2時間

改善ポイント: historyコマンドで実行履歴を正確に取得し、AIに「各コマンドの実行理由・期待結果」を補完させることで、抜け漏れのない手順書を効率的に生成します。

After(AI活用の場合)

  1. 作業完了後にhistoryコマンドで実行履歴を取得
  2. 不要な行(タイプミスの修正等)を簡易的に除去
  3. AIに送信し、手順書を生成するプロンプトを実行
  4. 生成された手順書の正確性と手順の前後関係を検証

所要時間の目安: 30分〜1時間の作業に対して、手順書作成に20〜30分

historyコマンドの活用

作業履歴をタイムスタンプ付きで取得するには、事前に以下の設定が必要です。.bashrc に追加しておくことを推奨します。

export HISTTIMEFORMAT='%Y-%m-%d %H:%M:%S '
export HISTSIZE=10000
export HISTFILESIZE=10000

設定を反映したあと、作業完了後に履歴をファイルに保存します。

# 履歴をファイルに出力
$ history > work-history.txt

出力には lscdpwd など手順書に不要なコマンドも含まれるため、フィルタリングします。

# 不要なコマンドを除外
$ grep -v -E '^\s*[0-9]+\s+([0-9-]+\s+[0-9:]+\s+)?(ls|cd|pwd|clear|history|exit)' work-history.txt > filtered-history.txt

historyコマンドの注意点

history出力にはタイプミスの修正コマンドや試行錯誤の過程も含まれます。AIに渡す前に、明らかに不要な行(typoの修正、cdの繰り返し等)を削除しておくと、生成される手順書の精度が向上します。また、HISTTIMEFORMAT は事前に設定していないとタイムスタンプが記録されません。

手順書生成プロンプト

以下のプロンプトでhistory出力から手順書を生成します。

あなたはインフラエンジニアの作業手順書を作成するアシスタントです。

以下はLinuxサーバーで実行したコマンド履歴です。
この履歴から、他のエンジニアが同じ作業を再現できる手順書を作成してください。

## 条件
- 各手順に「目的」「コマンド」「期待結果」を含める
- コマンドの意味(なぜそのコマンドを実行するのか)を補足する
- 試行錯誤で繰り返したコマンドは整理し、正しい手順のみを残す
- エラーが出たコマンドがあれば、その原因と対処も記載する
- 不明な場合は「確認必要」と注記する
- 推測で情報を補完しない

## 出力形式
Markdown形式の手順書。以下の構成に従うこと。

### 作業概要
- 作業名:
- 作業日時:
- 対象サーバー:

### 前提条件
- 必要な権限:
- 事前準備:

### 手順
#### 手順1: (目的)
**コマンド:**
```
(コマンド)
```
**期待結果:**
(期待される出力)
**補足:**
(なぜこのコマンドを実行するかの説明)

## コマンド履歴
<history>
(ここにfiltered-history.txtの内容を貼り付け)
</history>

実演:history出力からの手順書生成

入力(history出力の例):

  101  2026-03-13 10:00:01 sudo dnf update -y
  102  2026-03-13 10:05:23 sudo dnf install -y nginx
  103  2026-03-13 10:05:45 sudo systemctl enable --now nginx
  104  2026-03-13 10:05:50 sudo systemctl status nginx
  105  2026-03-13 10:06:10 sudo firewall-cmd --permanent --add-service=http
  106  2026-03-13 10:06:15 sudo firewall-cmd --reload
  107  2026-03-13 10:06:30 curl -I http://localhost

AI生成結果の例:

### 作業概要
- 作業名: nginxのインストールと初期設定
- 作業日時: 2026-03-13 10:00〜10:07
- 対象サーバー: 確認必要(履歴にホスト名の記載なし)

### 前提条件
- 必要な権限: root または sudo
- 事前準備: インターネット接続(dnfリポジトリへのアクセス)

### 手順

#### 手順1: システムパッケージの更新
**コマンド:**
```
sudo dnf update -y
```
**期待結果:** インストール済みパッケージが最新版に更新される
**補足:** 新規ソフトウェアのインストール前に、既存パッケージの依存関係を最新状態にしておくことで、バージョン不整合を防止する

#### 手順2: nginxのインストール
**コマンド:**
```
sudo dnf install -y nginx
```
**期待結果:** nginxパッケージがインストールされる
**補足:** `-y` オプションで確認プロンプトを自動承認する

#### 手順3: nginxの起動と自動起動の有効化
**コマンド:**
```
sudo systemctl enable --now nginx
```
**期待結果:** nginxが起動し、OS起動時の自動起動が有効になる
**補足:** `--now` オプションで `enable` と `start` を同時に実行する

#### 手順4: nginxの動作確認
**コマンド:**
```
sudo systemctl status nginx
```
**期待結果:** Active: active (running) と表示される

#### 手順5: ファイアウォールでHTTPを許可
**コマンド:**
```
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
```
**期待結果:** 1行目で success、2行目で success と表示される
**補足:** `--permanent` で永続設定に追加し、`--reload` で設定を反映する

#### 手順6: HTTP接続の疎通確認
**コマンド:**
```
curl -I http://localhost
```
**期待結果:** HTTP/1.1 200 OK が返される

AI生成の手順書をそのまま使わない

historyコマンドの履歴からAIが生成した手順書には、不要なコマンドの混入・手順の前後関係の誤り・前提条件の欠落が起こり得ます。本番環境に適用する前に、必ずテスト環境で手順を再実行して検証してください。


引き継ぎドキュメントに統合する

構成表と手順書は、それぞれ独立した目的を持つドキュメントです。引き継ぎドキュメントは、これらを統合し、運用に必要な情報を加えた包括的な資料です。

3種類のドキュメントの関係

ドキュメント種別入力ソースAI変換の内容主な用途
サーバー構成表hostname / ip addr / free -h 等のコマンド出力コマンド出力を表形式に整形・項目ごとに分類資産管理・構成管理台帳
作業手順書historyコマンドの実行履歴コマンド履歴に理由・期待結果を補完し手順書化作業記録・再現手順の文書化
引き継ぎドキュメント構成表 + 手順書 + 運用ルール3つの情報を統合し、引き継ぎ用フォーマットに整理担当者変更時の引き継ぎ資料

構成表と手順書を「部品」として先に作成し、引き継ぎドキュメントに組み込む設計にすると効率的です。

引き継ぎドキュメントのフォーマット

# サーバー引き継ぎドキュメント

## 1. サーバー基本情報
(構成表から転記)

## 2. 構築・変更履歴
| 日付 | 作業内容 | 担当者 | 備考 |
|------|---------|--------|------|

## 3. 定常運用手順
### 3-1. 日次作業
### 3-2. 週次作業
### 3-3. 月次作業

## 4. 監視項目
| 監視対象 | 閾値 | アラート先 | 対処手順 |
|---------|------|----------|---------|

## 5. バックアップ
| 対象 | 方式 | スケジュール | 保持期間 |
|------|------|------------|---------|

## 6. 障害時の連絡先・エスカレーション
| 分類 | 連絡先 | 備考 |
|------|--------|------|

## 7. 既知の問題・注意事項

AIで自動化できる範囲と人間が書くべき範囲

すべての項目をAIで埋めることはできません。AIが担える範囲と、人間の知識が必要な範囲を明確にしておきます。

セクションAIで自動化できるか理由
1. サーバー基本情報○(AI可)コマンド出力から構成表を生成済み
2. 構築・変更履歴○(AI可)historyから手順書を生成済み
3. 定常運用手順×(人間が記載)運用ルールは組織固有の知識が必要
4. 監視項目×(人間が記載)閾値やアラート先は運用設計に依存
5. バックアップ×(人間が記載)バックアップ方針は組織のポリシーに依存
6. 障害時の連絡先×(人間が記載)連絡先は人間しか知らない
7. 既知の問題×(人間が記載)過去の障害経験に基づく暗黙知

統合用プロンプト

構成表と手順書が生成済みの状態で、以下のプロンプトを使います。

あなたはインフラエンジニアの引き継ぎドキュメント作成を支援するアシスタントです。

以下の「サーバー構成表」と「作業手順書」を統合し、引き継ぎドキュメントのフォーマットに整理してください。

## 条件
- セクション1(サーバー基本情報)は構成表の内容をそのまま使用する
- セクション2(構築・変更履歴)は手順書の内容を日付・作業内容の表形式に変換する
- セクション3〜7は「【人間が記載】」とプレースホルダーを入れる
- 情報を推測で補完しない

## 出力形式
Markdown形式。上記のフォーマットに従うこと。

## サーバー構成表
<config>
(ここに構成表を貼り付け)
</config>

## 作業手順書
<procedure>
(ここに手順書を貼り付け)
</procedure>

生成ドキュメントの最終責任

AIが生成したドキュメントの内容に誤りがあった場合、その責任はドキュメントの作成者にあります。AIはツールであり、成果物の正確性を保証しません。必ず人間がレビューしてから共有・提出してください。


注意点とベストプラクティス

正確性検証チェックリスト

AI生成ドキュメントを確定する前に、以下の6項目を確認します。

#検証項目確認方法見つかりやすい誤り
1IPアドレスコマンド出力と目視照合転記ミス、別サーバーの情報と混同
2バージョン番号rpm -q <パッケージ名> で確認古い情報で補完、マイナーバージョンの誤り
3ファイルパスls -la <パス> で確認存在しないパスの生成
4ポート番号ss -tlnp の出力と照合標準ポートを推測で記載
5サービス名systemctl status <サービス名> で確認CentOS時代の名称で記載
6設定値設定ファイルの実物と照合デフォルト値を推測で記載

定期更新の設計

構成表は作成時点のスナップショットです。パッケージの更新やサービスの追加により、構成は変化します。定期的に情報を再収集し、構成表を更新する仕組みを構築することで、ドキュメントと実態の乖離を防止できます。

# cron設定例: 毎月1日の深夜3時に情報を収集
$ sudo crontab -e

# 以下のエントリを追加
0 3 1 * * /home/admin/server-info-collector.sh

定期更新の仕組み化

情報収集スクリプトをcronで定期実行し、差分があった場合にAIで構成表を再生成する運用を構築できます。スクリプトの出力を前回分と diff で比較し、変更があった場合のみ更新作業を行う方式が現実的です。

社内規定との整合性確認ポイント

AI生成ドキュメントを正式な構成管理資料として扱う場合、以下の点を確認してください。

確認項目確認先備考
ドキュメントの承認フロー社内ルール・規程AI生成であることの明示が必要か
保管場所とバージョン管理情報セキュリティ部門Git管理か社内Wikiか
更新頻度と更新責任者チーム運用ルール定期更新のサイクルを定める
AI利用に関するガイドライン情報セキュリティ部門外部AIサービスへの送信可否

まとめ

この記事で扱った3種類のドキュメントと、それぞれの適用場面を整理します。

ドキュメント入力適用場面
サーバー構成表コマンド出力(hostnamectl, ip addr, free -h 等)新規構築時の台帳作成、構成監査
作業手順書historyコマンドの実行履歴作業後の記録、再現手順の文書化
引き継ぎドキュメント構成表 + 手順書 + 運用ルール担当者変更時の引き継ぎ

AI活用の2つの原則を確認します。

  1. AIは「整形・構造化」が得意で、「判断・責任」は人間が担います。 コマンド出力を表形式に変換する作業はAIに任せ、内容の正確性や運用判断は人間が検証します。
  2. 入力の品質が出力の品質を決めます。 AIに渡すコマンド出力が正確で網羅的であるほど、生成される構成表の品質も上がります。情報収集スクリプトを整備し、必要な情報を漏れなく取得することが重要です。

前の記事・次の記事

前の記事: ① 障害対応の初動をAIで加速する
次の記事: ③ 監視アラートをAIでトリアージする