1. 導入
DevOpsやインフラの現場で働く皆さんにとって、情報共有は日々の業務の生命線です。インフラ構成、デプロイ手順、トラブルシューティングのノウハウ、各種設定情報など、私たちの扱う情報は多岐にわたります。これらが適切に共有されていないとどうなるでしょうか?
「あの設定、Aさんしか知らないから聞かないと…」
「このシステム、障害対応手順書がどこにあるか分からない…」
「新しく入ったメンバーがキャッチアップするのに時間がかかりすぎる…」
このような「情報の属人化」「情報散逸」「古い情報の放置」は、デプロイの遅延、インシデント対応の長期化、新人オンボーディングの困難、そして何よりもチーム全体の生産性低下に直結します。DevOpsの原則では、「全員が同じ情報を持ち、迅速に意思決定できる」ことが極めて重要です。
既存のWikiツールも有効ですが、DevOpsエンジニアであれば、もっと強力で馴染み深いツールを活用できるはずです。それが、皆さんが日常的に使っているGitと、その相棒であるMarkdownです。本記事では、これらを活用した「Docs as Code」というアプローチで、生きた情報共有基盤を構築する方法を解説します。
2. 基礎知識
まずは、情報共有における一般的な課題と、それを解決するための基本的な考え方について理解を深めましょう。
情報共有における課題
参考本文にもあったように、情報共有には様々な課題が存在します。DevOps・インフラの文脈で具体的な例を挙げます。
- 必要な情報が共有されていない:
- 「この本番サーバーのメンテナンス手順、Aさんしか完璧に知らない。」
- 「Kubernetesクラスタのログ収集設定、詳細を理解しているのは自分だけ。」
- 必要な情報を見つけるのが難しい:
- 「障害対応フローがファイルサーバーの奥深くのWordファイルに埋もれていて見つけられない。」
- 「クラウド環境のネットワーク構成図が、誰かのローカルPCにしかない。」
- 共有されている情報が古い:
- 「新しい機能を追加したのに、関連するデプロイ手順書が更新されていない。」
- 「セキュリティポリシーが変わったのに、社内Wikiに古い情報が残っている。」
これらの課題は、チーム内のコミュニケーションコストを増大させ、結果として業務の非効率化を招きます。
Wikiの概念
Wikiは、Webブラウザ上で誰でも簡単にページの作成・編集ができる情報共有ツールの総称です。Backlog、Confluence、Notionなどが有名で、手軽に情報をまとめるのに役立ちます。しかし、バージョン管理やレビューフローの面で、コード管理に慣れたエンジニアにとっては物足りなさを感じることもあります。
GitとMarkdownの基礎
ここで、私たちエンジニアが日常的に利用するツールに目を向けます。
- Git: 分散型バージョン管理システム。ファイルの変更履歴を追跡し、複数人での共同作業を効率的に行えます。ブランチ、コミット、プルリクエストといった機能は、コードだけでなくドキュメントの管理にも非常に有効です。
- Markdown: 軽量マークアップ言語。シンプルな記法で、見出し、リスト、コードブロックなどを記述でき、プレーンテキストでありながら読みやすいドキュメントを作成できます。Gitリポジトリとの相性が良く、README.mdなどで頻繁に利用されています。
「Docs as Code」の考え方
Docs as Codeとは、ドキュメントをコードと同様に扱い、Gitでバージョン管理し、自動化されたプロセス(CI/CD)で生成・デプロイするプラクティスのことです。これにより、ドキュメントの品質向上、鮮度維持、共同作業の効率化を実現します。
3. 実装/解決策
GitとMarkdown、そして静的サイトジェネレータを組み合わせることで、強力な情報共有基盤を構築できます。
Gitリポジトリでのドキュメント管理
すべてのドキュメントを専用のGitリポジトリで管理します。
- 各ドキュメントはMarkdownファイル(例:
.md)として保存します。 - ディレクトリ構造を使って、ドキュメントをカテゴリ分けし、整理します。
例:docs/operations/server_maintenance.md、docs/kubernetes/log_collection.md - コードと同じように、変更があった場合はコミットし、プッシュします。
Pull Request(マージリクエスト)を活用したドキュメントレビュー
コードの変更をレビューするのと同じように、ドキュメントの変更もPull Request(PR)を通してレビューします。
- ドキュメントの誤字脱字、情報の正確性、最新性などをチームメンバーが確認します。
- これにより、品質の高いドキュメントを維持し、誤った情報が公開されることを防ぎます。
- 議論の履歴がPRに残るため、なぜそのように変更されたのか後から追跡可能です。
MarkdownをHTMLに変換して公開
Markdownファイルはプレーンテキストですが、静的サイトジェネレータを使用することで、美しく検索性の高いWebサイトとして公開できます。
- MkDocsやSphinx(Python)、Docusaurus(JavaScript)などが有名です。
- これらのツールは、GitリポジトリのMarkdownファイルを読み込み、設定ファイルに基づいてナビゲーションやテーマを適用し、HTML、CSS、JavaScriptの静的サイトを生成します。
- 生成された静的サイトは、NginxやApacheのようなシンプルなWebサーバー、またはS3/CloudFrontのようなクラウドストレージサービスで簡単に公開できます。
ドキュメントの鮮度維持
「Docs as Code」は、ドキュメントが「生き物」であるという前提に立っています。
- 変更が発生したら、コードの変更と同時にドキュメントも更新する習慣をつけます。
- ドキュメントの更新もPRの対象とし、レビューを必須とすることで、自然と鮮度が保たれます。
- 定期的にドキュメントの見直し期間を設けることも有効です。
4. サンプルプログラム
ここでは、Gitリポジトリに置かれたMarkdownファイルを、MkDocsを使って静的サイトとしてビルドし、公開する基本的な流れを示します。Dockerを利用して環境構築を簡素化します。
まず、以下のファイルとディレクトリ構成を作成してください。
.
├── Dockerfile
├── Makefile
├── mkdocs.yml
└── docs/
├── index.md
└── operations/
└── server_maintenance.md
mkdocs.yml
MkDocsの設定ファイルです。サイト名、ナビゲーション、テーマなどを定義します。
site_name: DevOpsチームの知識ベース
nav:
- Home: index.md
- 運用手順:
- サーバーメンテナンス: operations/server_maintenance.md
- Kubernetesログ収集: operations/k8s_log_collection.md # 今回はファイルを作成しませんが、ナビゲーションに追加する例
theme:
name: material # 見た目の良いテーマとして'material'を使用
Dockerfile
MkDocsの環境をDockerコンテナとして構築し、ドキュメントをビルドするためのDockerfileです。
mkdocsの環境を構築し、ドキュメントをビルドするDockerfile
FROM python:3

コメント