Docusaurus を Docs-only mode で利用して GitHub Pages でデプロイする

社内で Markdown で管理してた簡単なドキュメントを GitHub Pages でデプロイするというのを今回は Docusaurus を利用したのでそのメモを残す。

Docs-only mode とは

Docusaurus は、https://docusaurus.io/docs/installation#project-structure にもあるようにデフォルトでは以下のように、 ドキュメント ( docs ) の機能とブログ ( blog ) の機能が利用できる。

my-website
├── blog
│   ├── 2019-05-28-hola.md
│   ├── 2019-05-29-hello-world.md
│   └── 2020-05-30-welcome.md
├── docs
│   ├── doc1.md
│   ├── doc2.md
│   ├── doc3.md
│   └── mdx.md
├── src
│   ├── css
│   │   └── custom.css
│   └── pages
│       ├── styles.module.css
│       └── index.js
├── static
│   └── img
├── docusaurus.config.js
├── package.json
├── README.md
├── sidebars.js
└── yarn.lock

しかし今回自分は、ブログの機能が必要ではなかったので https://docusaurus.io/docs/docs-introduction#docs-only-mode に紹介されているようにドキュメントのみの機能の設定をした。

設定内容

docusaurus.config.js に様々な設定が書かれていて、以下のような設定をした上で

module.exports = {
  // ...
  presets: [
    '@docusaurus/preset-classic',
    {
      docs: {
        routeBasePath: '/', // Serve the docs at the site's root
        path: 'pages', // /docs は、 GitHub Pages で利用するので変える
        /* 他の doc にまつわる設定 */
      },
      blog: false, // ブログ機能を完全にオフにする
      // ...
    },
  ],
};

以下のようなコマンドで docs に静的資材を出力するようにする

rm -rf docs && \
docusaurus build --out-dir docs && \
docusaurus serve --dir docs

※ パスの設定を変えている場合には docusaurus clear でそのディレクトリを消してくれないので注意する。

以下では細かい設定の話を補足していく

docs.routeBasePath

これを設定することでデフォルトでは、 https://example.com/docs/some-doc になってしまうところ、 https://example.com/some-doc のように docs を省略したパスにできる。

docs.path

GitHub Pages で今回は GitHub Actions を利用できない状況だったので、ブランチをデプロイする方式を選択している。
そうなると、 ルートディレクトリか /docs を GitHub Pages として指定する必要があり Docusaurusdocs とかぶってしまうため pages (ここはなんでもいい) としている。

また、 docusaurus build --out-dir docs とすることで /docs 以下に静的資材を出力している。

余談

Docusaurus 以外でよく知られているツールとしては、以下がある

ちなみに自分の理想は、 brew install などでバイナリが手に入って

some-awesome-cli build -o doc/ XXX.md XXX.md 

上記のようなコマンドでいい感じのテーマが設定された静的サイトを作って欲しいと思っているが、未だに理想のツールには出会えていない。

jekyll でいうと Ruby を入れるのがちょっと面倒だし、Hugo は、テーマを git の サブモジュールで追加して管理するのが面倒だし、 Docusaurus も Node.js であれこれしないといけないので一長一短はあれど、この中では Docusaurus が一番デフォルトのテーマが良かった。