Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

(OSS向け)ドキュメントツールDocusaurus

More than 3 years have passed since last update.

No OSS, No Life.
これはOSS紹介 Advent Calendar 2017 の24日目の記事です。

2017/12月中旬にFacebookがリリースしたドキュメント管理ツールDocusaurusを試してみて、なかなかよかったので紹介記事を書きます。
DocusaurusはGitBookと同種のツールですが、(素の状態では)GitBookよりちょっと高機能という印象です。

こんな感じのドキュメントが手軽に作られます。
ss-1.png

公式ドキュメント: https://docusaurus.io/ (これ自体もDocusaurusで作られています)
リポジトリ: https://github.com/facebook/docusaurus

特徴とか機能とか

  • マークダウンで書ける
  • レイアウトをReactで書ける
  • 検索機能
  • i18nにも対応
  • バージョニング対応
  • GitHub Pagesに簡単にデプロイできる

導入

セットアップ手順

1. 何はともあれ docusaurus-init をインストール

[~] $ yarn global add docusaurus-init
# or `npm install --global docusaurus-init`

2. プロジェクトディレクトリのルートで初期化コマンドを実行

[~] $ cd project
[project] $ docusaurus-init

この段階でルートに docs-examples-from-docusauruswebsite というディレクトリ(スケルトン)が作成されますが、そのままでは設定とディレクトリ名が合っていなくて動かない状態です。

3. 作成されたディレクトリが適切になるようにリネーム

[project] $ mv docs-examples-from-docusaurus docs & mv website/blog-examples-from-docusaurus website/blog

ここまでで以下のような状態になっているはずです。(もちろん既存のsrc等も)

project
  ├─ docs (from docs-examples-from-docusaurus)
  └─ website
     └─ blog (from blog-examples-from-docusaurus)
     └─ core
     └─ node_modules
     └─ pages
     └─ static
     └─ package.json
     └─ sidebars.json
     └─ siteConfig.js

4. さっそくローカルwebサーバを起動

[project] $ cd website
[project/website] $ yarn start

5. http://localhost:3000 を開く

自分の場合は初回アクセス時にエラーとなりましたが、リロードすると正常に表示されました。(初回にエラー返しつつ、ビルドしている?)

注意点

既存のmdファイルの変更は大丈夫ですが、それ以外の以下のような操作はホットに反映してくれないようです。

  • 新しいmdファイルの追加
  • siteConfig.jsの変更

概要

表示されるページのイメージとソースファイル等の関連は下図の感じです。

ss-2-note.png

検索機能の有効化

検索機能は外部API(Algolia DocSearch)を利用しているため、まずはそちらの登録&APIキーの取得が必要です。
取得APIキーをsiteConfig.jsで指定して、headerLinksに { search: true }を指定すればいいようですが、今回は試していません。

i18nの有効化

1. 下記コマンドを実行して言語ファイル等を作成

[project/website] $ yarn examples translations

website/pages/en/help-with-translations.js というファイルが作成されるので、リネームして既存の website/pages/en/help.js を置換します。

ちなみに違いは、以下のようにtranslateをrequireして翻訳部分を囲んでいるだけなので、その他のファイルも同様にできます。

const translate = require("../../server/translate.js").translate;

<translate>This is english</translate>

2. 選択可能な言語を選択

1で website/languages.js が作成されているはずなので、ファイルを開きサポート言語を enable: true にします。

3. 翻訳する

おそらく今までにサーバを起動していたら、 website/i18n/en.json が出来ているはずで、そこに原文が記載されているので翻訳します。
一応Docusaurusは website/i18n/en.jsonCrowdin にアップロードして一括翻訳し結果をダウンロードすることを想定しているようですが、必須ではありません。
今回は website/i18n/en.json をコピーし website/i18n/ja.json を作成し自前で翻訳しました。
ちなみに任意のページをロードした際に、対応するキーが辞書ファイルに存在しない場合はwebsite/i18n/en.json に動的に追加されていきます。

4. ヘッダーで言語切替リンクを有効にする。

siteConfig.jsのheaderLinksに以下のように追加するだけです。

const siteConfig = {
  headerLinks: [
    ...
    { languages: true },
    ...
  ],

バージョニング

1. 下記コマンドを実行し、バージョンファイルを作成

[project/website] $ yarn examples versions

pages/en/versions.js が作成されます。

2. 下記コマンドを実行し、当該バージョンのドキュメントを作成

[project/website] $ yarn run version 1.0.0

1.0.0の部分は自由です。
website/versioned_docs/version-1.0.0website/versioned_sidebars が作成されます。
それらの中身は現在のdocsやsidebars.jsonがコピーされています。(単純コピーではなくドキュメントID等がよしなに書き換えられている)

3. ヘッダーに表示する

const siteConfig = {
  headerLinks: [
    ...
    { page: "versions", label: "Version" },
    ...
  ],

GitHub Pagesへのデプロイ

1. まずはビルド

[project/website] $ yarn build

webite/build にビルドされたファイル類が作成されるので .gitignore に指定していない場合は追加しておくといいと思います。

2. おもむろにデプロイ

[project/website] $ GIT_USER=xxx yarn publish-gh-pages

環境変数GIT_USERにはGitHubのユーザ名を指定します。

注意

  • siteConfig.jsに organizationNameprojectName が必要です。(もしくは環境変数 ORGANIZATION_NAME, PROJECT_NAMEで指定する)特にorganizationNameは初期状態だとコメントアウトされているのでコメントを解除する。

--

以上です。i18nとバージョニングを組み合わせたときにハマりましたが、それ以外は思ったよりも簡単に試すことが出来ました。
今回はやっていませんが、CIとの統合もできるようです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away