DevelopersIO 2023 大阪 – 勉強会「S3 + MkDocs でナレッジサイトをお手軽に構築・運用する話」 #devio2023

2023.07.19

本ブログは 2023/07/19の DevelopersIO 2023 大阪 にて開催される プチ勉強会(at AWS質問ブース)用の資料となります。

S3 + MkDocs でナレッジサイトをお手軽に構築・運用する話 」というタイトルで 勉強会をします! (しました!)

この勉強会の目的

  • ナレッジサイト(CCG)のアーキテクチャを紹介する
  • アーキテクチャ選定までの話をする
  • ナレッジ運用周りの話をする

Classmethod Cloud Guidebook(CCG)について

Classmethod Cloud Guidebook は CMメンバーズ(請求代行サービス)向けに 公開している ナレッジサイト です。

img

お客様のクラウド推進を支援すべく、 AWSのセキュリティや統制、ガイドライン周りで 役立つナレッジを公開しています。

詳しくは以下紹介ブログやデモサイトを参照ください。

CCGのアーキテクチャ

AWS周り

シンプルに書いてしまうと以下のようなアーキテクチャとなります。

img

S3バケットに静的サイトジェネレーターのビルド(site)を投入します。 ユーザーは CloudFront 経由で site にアクセスします。

ただし、本サイトは Classmethod Members 限定で公開しているため、 ここに認証などの仕組みが加わります。

そこにセキュリティ周り、もろもろ考慮した結果、 最終的には以下のような構成となっています。 (詳細は画像先の Speaker Deck を参照してください)

img

– 画像: CDKを使って爆速でナレッジサイトを公開した話 - Speaker Deck

MkDocs周り + デモ

静的サイトジェネレーターとして MkDocs を使っています。 MkDocs のコンテンツをS3に上げる流れは以下のとおりです。

img

見たほうが分かりやすいと思うので、 簡単なデモを行います。

MkDocs サイト構築に必要なのは サイト構成ファイル( mkdocs.yml ) と 実際のページ ( 各Markdownファイル ) です。

以下のような mkdocs.yml を用意します。

mkdocs.yml

site_name: MkLorum
site_url: https://example.com/
nav:
    - Home: index.md
    - About: about.md
theme: readthedocs

そして実際のページとして 2つほど用意します。

$ cat ./docs/index.md
# MkDocsデモ
xxx

$ cat ./docs/about.md
# このサイトについて
xxx

mkdocs serve コマンドでローカルでサイト表示を確かめられます。

img

mkdocs build コマンドでサイトに必要なコンポーネントを出力できます。 デフォルトでは site ディレクトリに作成されます。

$ mkdocs build
INFO     -  Cleaning site directory
INFO     -  Building documentation to directory:
            /Users/kawahara.masahiro/Documents/devio-osaka-2023/mkdocs-demo/site
INFO     -  Documentation built in 0.03 seconds

$ ls site/
404.html       css            img            js             sitemap.xml
about          fonts          index.html     search         sitemap.xml.gz

これを S3(静的ウェブサイトホスティング有効化) へ展開します。

$ aws s3 sync ./site s3://${S3BucketName}/site

ウェブサイト ( ${バケット名}.s3-website-ap-northeast-1.amazonaws.com/site ) へアクセスできることを確認できました!

img

これまでの流れを、GitHub Actions を使って効率化しています。

ツール選定のお話

CCG作成の背景を紹介します。

もともと既存の似たようなプロダクト、サービスがありましたが、 それは Google Docs で管理されていました (70ページ超!)。

さらにメンテナンス不足でナレッジが陳腐化する課題もありました。

そういった背景があり、以下の要件を満たすべくツール選定から始めました。

  • テキスト管理であること
  • バージョン管理ができること
  • 文章レビューのプロセスを作れること
  • 楽にナレッジを提供できること

テキスト管理であること

Markdown ファイルを作成、管理していく方針としました。

  • プレーンテキストのデファクトスタンダード
  • 社内メンバーがブログ執筆などで慣れ親しんでいる
  • コンテンツの内容ごとにファイルを分割して、メンテしやすく

ほか候補 … Word/Google Docs, PowerPoint/Google Slides

バージョン管理ができること

Git でバージョン管理を行う方針としました。

  • テキストがいつ・どう更新されたか、把握できるように
  • コンテンツ改善の遷移を把握できるように

ほか候補 … Google Docs のバージョン管理機能

文章レビューのプロセスを作れること

GitHub で実現しています。

img

  • mainブランチは直接更新できないように設定
  • 更新の際にはプルリクエストを作成する
  • レビュアーによる承認が一定数に達しないと、マージできないように設定

ほか候補 … Google Docs のコメント機能、提案モード

楽にナレッジを提供できること

作り込みはしたくないので、 静的サイトジェネレーター を各種調べました。

社内のナレッジとして MkDocs と Sphinx が 比較的多かったので、両者で検討していました。

最終的には MkDocs の以下メリットが大きかったので、 MkDocs採用に至りました。

Sphinx も良く、「よりカスタマイズできる」印象はありました。 ただ、ドキュメントの書き方のデフォルトが Markdown ではなく reStructuredText だったのが、ちょっと辛みに感じました。

運用のお話

textlint による文章校正

img

GitHub - textlint/textlint: The pluggable natural language linter for text and markdown.

ドキュメントの品質を一定以上に保つために、 textlint による自動校正を取り入れています。

▼ 校正イメージ

img

ナレッジの活発な更新に向けて

▼ レビュープロセスのフロー化

改善のサイクルを回していく仕組みを作成・周知しています。

img

▼ 社内からの Contrubute(貢献)を募集

貢献ガイド(CONTRIBUTING.md) を作成して、社内周知しています。 気軽にIssue, Pull Requestを投げられる環境作りを意識しています。

img

今後について

以下継続的な改善を進めていきたいです。

  • UI/UXの改善: ユーザーが情報を探しやすく、アクセスしやすく
  • コンテンツ改善・追加の継続: AWSのアップデートやベストプラクティスをキャッチアップ、都度更新できる体制・仕組み作り
  • ナレッジの陳腐化対策: 更新されないコンテンツの棚卸しの体制・仕組み作り
  • フィードバック ⇔ 改善 サイクルを加速させる: 社内メンバー全員でコンテンツを更新できる文化醸成

おわりに

以上、Classmethod Cloud Guidebook のアーキテクチャやツール選定、運用のお話でした。

今後もどんどんアップデートして、改善を進めていきたいと思っております。