mdBook&GitHubPagesでマークダウンで書けるドキュメントを簡単に公開する

5 min読了の目安(約3000字TECH技術記事

さんぷる

mdBookとは

Rust製のGitBookライクなツールです。
マークダウンで記述することができ、簡単にオンラインブックを作ることができます。
Rustはいいぞ

Rustのインストール

mdBookを使うためにRustのパッケージ管理ツールであるCargoをインストールします。

Ubuntu

curl https://sh.rustup.rs -sSf | sh

上記コマンドを実行するだけでインストールすることができます。

Windows

https://visualstudio.microsoft.com/ja/downloads から、
BuildTools for VisualStudio 2019をダウンロードし、Visual C++ Build Toolをインストールします。
その後、https://www.rust-lang.org/tools/install からRustup-init.exeをダウンロードし、実行します。

以下のコマンドを実行するなどして、正常にインストールできているか確認しておきましょう。

cargo --version

mdBookのインストール

Cargoのインストールが終わったら、以下のコマンドでmdBookをインストールします。

cargo install mdbook

こちらも、以下のコマンドを実行するなどしてインストールできているか確認しましょう。

mdbook --version

GitHub側の準備

GitHubで、GitHubPages用のリポジトリ([ユーザー名].github.io、もしくは設定からGitHubPagesの設定をしたリポジトリ)、mdBookのプロジェクトをアップロードするためのリポジトリの2つを用意します。
次に、リポジトリに登録するためのSSH鍵を用意します。

ssh-keygen -t rsa -b 4096 -f gh-pages

gh-pagesとgh-pages.pubという2つのファイルが生成されるので、公開鍵(gh-pages.pub)をGitHubPages用のリポジトリのSettings > Deploy keysACTIONS_DEPLOY_KEYという名前で登録します。
この時、Allow write accessのチェックボックスにチェックを付けておきましょう。

秘密鍵(gh-pages)はもう片方のリポジトリのSettings > SecretsにこちらもACTIONS_DEPLOY_KEYという名前で登録します。

これで、GitHub側の準備は終了です。

ローカルでの準備

まず、適当なフォルダを用意し、そのフォルダ内で以下のコマンドを実行します。

mdbook init

すると以下のようにファイルが生成されます。

mdBook
├── book
├── src
│  ├── chapter_1.md
│  └── SUMMARY.md
└── .gitignore(生成時に作成すると答えた場合)

bookディレクトリにはビルドしたファイルが格納されます。
srcディレクトリにはMarkdownファイル群を入れます。
SUMMARY.mdに書いた中身がサイドメニューになります。
mdbook buildを実行するとファイルのビルドをし、mdbook serveを実行するとsrc以下のファイルを監視、変更があると自動で再ビルドをします。
次に、GitHubActionsでの自動ビルドのセットアップをします。
.github以下にファイルを追加します。
追加後は以下のようなディレクトリ構成になります。

mdBook
├── .github
│  ├── actions
│  │  └── build
│  │     └── Dockerfile
│  └── workflows
│     └── main.yml
├── book
├── src
│  ├── chapter_1.md
│  └── SUMMARY.md
└── .gitignore(生成時に作成すると答えた場合)

作成後、main.ymlDockerfileに以下のように記載してください。

main.yml

name: CI/CD
on:
  push:
    branches:
    - master
    paths:
    - "src/**"
    - "book.toml"

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Build
      uses: ./.github/actions/build
    - name: Deploy
      uses: peaceiris/actions-gh-pages@v3
      with:
        deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
        external_repository: [自分のユーザー名]/[GitHubPagesのリポジトリ名]
        PUBLISH_BRANCH: master
        PUBLISH_DIR: ./book

Dockerfile

FROM rust:latest

RUN cargo install mdbook --no-default-features --features output --vers "^0.3.5"

CMD ["mdbook", "build"]

入力後、プロジェクトにGitを追加し、アップロード用のフォルダにpushすることで、srcフォルダ内、もしくはbook.tomlに変更があった時にGitHub Actionsが実行され自動でGitHubPages用のリポジトリにHTML等のファイルがアップロードされます。

おわりに

mdBookとGitHubPagesを使うことで無料で簡単にオンラインブックを公開することができます。
ドキュメントやブログなど、幅広く使うことができると思うので是非活用して見てください。

蛇足

ちなみにmdBookではRustのコードを実行することができます。
mdBookの利用準備でRustをインストールしていると思うのでこの機会にRustを始めてみませんか?