継続的インテグレーションでmdbookを実行する
GitHub ActionsやGitLab CI/CDなど、さまざまなサービスを使って、本を自動でテスト・デプロイできます。
以下では、mdBookを実行するためのサービス設定について、一般的な指針を示します。具体的な手順は、WikiのAutomated Deploymentページを参照してください。
mdBookをインストールする
mdBookのインストールには、いくつかの方法があります。必要なことや好みに応じて選んでください。
ビルド済みバイナリー
おそらく最も簡単なのは、GitHub Releasesページのビルド済みバイナリーを使う方法です。広く使われているCLIツールcurlで実行ファイルをダウンロードする、次のような方法があります。
mkdir bin
curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.5.4/mdbook-v0.5.4-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
bin/mdbook build
この方法について、考慮する点を示します。
- 比較的速く、必ずしもキャッシュへの対応は必要ありません。
- Rustをインストールする必要がありません。
- 特定のURLを指定するため、新しい版を取得するには、スクリプトを手で更新する必要があります。特定の版へ固定したい場合は、利点にもなります。一方、新しい版が公開されたら、自動で取得したいユーザーもいます。
- GitHub CDNが利用できることに依存します。
ソースからビルドする
ソースからビルドするには、Rustをインストールする必要があります。Rustが事前にインストールされているサービスもありますが、そうでなければ、インストールする工程を追加してください。
Rustをインストールすると、cargo installでmdBookをビルド・インストールできます。mdBookの互換性を壊さない最新バージョンを取得するには、SemVerのバージョン指定を推奨します。例を示します。
cargo install mdbook --no-default-features --features search --vers "^0.5.4" --locked
推奨するいくつかのオプションを含んでいます。
--no-default-features— CIでは通常不要な、mdbook serve用のHTTPサーバーなどの機能を無効にします。ビルド時間を大幅に短くできます。--features search— 既定の機能を無効にした場合、組み込みの検索など、必要な機能を手で有効にしてください。--vers "^0.5.4"—0.5系列の最新版をインストールします。ただし、0.6.0以降のような、SemVer上の互換性がない版は、ビルドを壊す可能性があるためインストールしません。古いmdBookがすでにインストールされていれば、Cargoが自動で更新します。特定の版へ固定したい場合は、^を=へ置き換えてください。--locked— mdBookのリリース時に使われた依存関係を使います。--lockedを指定しなければ、すべての依存関係の最新版を使います。リリース後の修正が含まれる場合もありますが、まれにビルドの問題が起きることもあります。
mdBookのビルドには少し時間がかかる場合があるため、キャッシュの方法を調べるとよいでしょう。
テストを実行する
変更をpushしたりプルリクエストを作成したりするたびに、mdbook testでテストを実行するとよいでしょう。本に含まれるRustのコード例を検証できます。
Rustをインストールする必要があります。Rustが事前にインストールされているサービスもありますが、そうでなければ、インストールする工程を追加してください。
適切なバージョンのRustがインストールされていることを確認した後は、本のディレクトリでmdbook testを実行するだけです。
リンク切れを調べるmdbook-linkcheck2など、ほかの種類のテストも検討するとよいでしょう。独自のスタイル検査、スペル検査、そのほかのテストも、CIで実行すると便利です。
デプロイする
本を自動でデプロイしたい場合もあるでしょう。変更をpushするたびに行う方法もあれば、特定のリリースにタグを付けたときだけ行う方法もあります。
利用するウェブサービスへ変更を送る、具体的な方法も理解する必要があります。たとえば、GitHub Pagesでは、特定のGitブランチへ出力をコミットするだけです。ほかのサービスでは、SSHなどでリモートサーバーへ接続する必要がある場合もあります。
基本的には、mdbook buildを実行して出力を生成し、bookディレクトリにあるファイルを適切な場所へ転送します。
その後、ウェブサービスのキャッシュを無効にする必要があるか、検討するとよいでしょう。
さまざまなサービスの例は、WikiのAutomated Deploymentページを参照してください。
404への対応
mdBookは、リンク切れに使う404ページを自動で生成します。既定では、本のルートに404.htmlというファイルを出力します。GitHub Pagesなどのサービスでは、リンク切れにこのページを自動で使います。ほかのサービスでも、ウェブサーバーがこのページを使うよう設定するとよいでしょう。読者が本へ戻るためのナビゲーションを提供できます。
本をドメインのルート以外へデプロイする場合、404ページが正しく動くようにoutput.html.site-urlを設定してください。CSSなどの静的ファイルを正しく読み込むには、本の公開場所を知る必要があります。たとえば、このガイドはhttps://rust-lang.github.io/mdBook/へ公開され、site-urlを次のように設定しています。
# book.toml
[output.html]
site-url = "/mdBook/"
本にsrc/404.mdというファイルを作ると、404ページの見た目を変更できます。別のファイル名を使う場合は、output.html.input-404へ指定できます。