はじめに
こんにちは。みなさんはドキュメントを作成する際、どんなツールを使っていますか?今回、紹介するのは VitePress という静的サイトジェネレーターです。 VitePress は Vue ベースで SSG ができるためドキュメントの生成などに便利です。 公式では、次のように紹介しています。
VitePress is VuePress' little brother, built on top of Vite.
VuePress は Vue と WebPack を用いて SSG をしていますが、VitePress は Vue と Vite を使っている点が異なります。ビルドに Vite を使っている点が新しく、開発サーバーの立ち上げが爆速です🚀。 また、カスタムコンポーネントととして、Vue のコンポーネントをマークダウンに埋め込むこともできますが、Vue についての知識は一切必要なく、ドキュメントを作成することができます。
今回は、そんな VitePress の基本的な使い方から、ドキュメントにはまだ記載のない多言語対応、ホームページレイアウト、メタタグのインジェクション、カスタムコンポーネント、カスタム CSS の適応方法などについても紹介したいと思います。
なお、検証として、以下のバージョンを用いました。
開発環境
まずは開発環境を作ります。Node.js やパッケージマネージャーはインストール済みとして進めます。 また、パッケージマネージャーに Yarn を前提するので適宜読み替えてください。
さて、適当なディレクトリに VitePress をインストールします。
ドキュメントのルートディレクトリを決めます。
今回はdocs
とします。さらに、ドキュメントルートにindex.md
を追加します。
package.json
には次のスクリプトを追加すると便利です。
docs
をドキュメントルートにしたので、スクリプトもそれに合わせます。
docs:dev
コマンドを実行すると、開発サーバーが立ち上がります。
これで準備完了です。
ファイル構造
まずは VitePress のファイル構造を理解しましょう。VitePress ではドキュメントルートから次のようなファイル構造にする必要があります。
.vitepress
以下では、Vitepress のメタ情報やテーマ、レイアウトなどをカスタマイズできます。
当然、カスタマイズは一切なくてもちゃんと動作するので、必要に応じて設定しましょう。
マークダウンファイルと URL パス
ファイル構造を一つづつ見ていくと、まずルート以下の*.md
ファイルは、ファイルパスがそのまま URL パスとなります。
ここではindex.md
、en.md
、ja/index.md
3つのファイルがありますが、これによって次の URL でアクセスできるページを生成します。
index.md
の場合は、スラッシュで終わるパスを、それ以外は、.html
を追加したパスであれば、正しいページをロードできます。
レイアウト
VitePress には2つの組み込みレイアウトがあります。これらは.md
のフロントマッターから制御できます。
ホームレイアウト
ホームレイアウトは次のようなレイアウトです。
他にも、以下の項目を設定可能です。
heroImage
やheroAlt
はメインのimg
タグに対する、src
とalt
属性を指定します。
ちなみにheroImage
のようにスラッシュから始めるパスを指定すると、public ディレクトリにあるファイルを参照します。
actionText
とactionLink
でリンクボタンを追加できます。
また、features
にtitle
とdetails
の配列を追加すると、プロジェクトの特徴をいい感じに出力できます。
footer
には footer タグを追加できます。
これらを設定することで、次のようなレイアウトを作れます。
ドキュメントレイアウト
続いてドキュメントレイアウトですが、こちらは基本的にはマークダウンを書いていくだけで、次のようなレイアウトになります。
ここでtitle
タグについて見てみます。デフォルトでは、title
タグは次のようになっています。
ここでマークダウンとしてh2
タグを追加すると、自動的に h2 のコンテンツがタイトルに追加されます。
また、この自動挿入はフロントマッターに設定することで制御できます。
ちなみにホームレイアウトのタイトルは Home 固定なので、変更できないようです。
タイトルのプロジェクト名の変更については、後述するグローバル設定から変更できます。
head タグ設定
どちらのレイアウトにも共通する設定として、head
タグを設定できます。後述しますが、head
タグをグローバルに設定する方法もありますが、
ページに設定したものが優先されます。
このようにhead
に meta
要素や link
要素を設定できます。これによって、OGP 関連のタグなども問題なく書くことができます。
さてここまでで、マークダウンのフロントマッターでのカスタマイズ方法について見てきました。
続いては、config.js
ファイルを使って、グローバルなカスタム設定について見ていきましょう。
グローバル設定
まずは設定ファイルの型定義を見てみましょう。
今回はこの中から、 alias
、markdown
、customData
を除いた各項目について説明します。
また、この設定ファイルは.js
でしか認識されません。残念ながら Typescript で型補完しながらというのはできませんが、
次のように JSDoc で型補完をするといいでしょう。
lang
lang
プロパティではhtml
タグのlang
属性を変更できます。
$siteByRoute
や$site
といった VitePress 用の組み込み属性に追加されるので、
.vue
コンポーネントを作って組み込む際にも使えます。
title
title
プロパティではhead
タグのtitle
のプロジェクト名を設定ができます。
base
base
プロパティは、 GitHub ページなどのサブパスの下にサイトをデプロイする場合に設定する必要があります。
例えばhttps://foo.github.io/bar/
という URL にデプロイする場合、/bar/
を設定します。
description
description
プロパティではhead
タグのdescription
を設定ができます。
ただし、マークダウンのフロントマッターにdescription
にある場合は、そちらが優先されます。
head
head
プロパティはhead
タグを挿入できます。
ページごとに設定するのではなくプロジェクト全体に設定したいときに便利です。
2 重配列で若干わかりにくいので、例示しておきます。
ページにも設定されている場合は、ページが優先されます。
themeConfig
themeConfig
プロパティでは、GitHub の編集リンクの制御や、ナビゲーションの設定を行えます。少し要素が多いので一気に見ていきます。
GitHub 編集リンク
GitHub のレポジトリやブランチを設定することで、GitHub の編集リンクを自動生成できます。ページ上部のナビゲーションにもリンクが追加されます。
docsDir
は GiHub 上のドキュメントルートを指定します。基本的には、最初に設定したドキュメントルートと同じで問題ありません。
lastUpdated
lastUpdated
プロパティで記事の最終更新日を自動生成できます。
logo
logo
プロパティで上部にロゴを設定できます。
このロゴは画像サイズによって位置がずれたりしますが、後述のカスタム CSS によって修正します。
nav
nav
プロパティで上部にナビゲーションを設定できます。
ここまでで、いい感じにドキュメントが作成されるようになっています。 このままでももちろんいいですが、Vitepress ではまだまだカスタマイズできる要素があります。
ここからは、+アルファとして多言語対応や、カスタムコンポーネント、カスタム CSS について説明します。
多言語対応
マークダウンファイルと URL パスにあるように、Vitepress はファイルベースでパスを生成します。 そのため、多言語の設定には、違う言語のマークダウンファイルを用意することと、 言語の切替えができればいいです。
言語の切替えについては、組み込みのメニューコンポーネントがあります。その設定について見てみましょう。
また、locales
プロパティで、上で説明したthemeConfig
のプロパティを設定できます。例えば、editLinkText
を言語によって変える場合は以下のようにします。
locales
に指定した key が URL パスにマッピングされます。
さらにlocales
にない場合はthemeConfig
のプロパティにフォールバックします。editLinks
は言語間で共通なので、上の例のように設定できます。
themeConfig
だけではなく、head
タグも多言語化可能です。例えば、description
プロパティを多言語対応するには次のようにします。
まとめるとconfig.js
は次のようになります。長くなってしまいましたが、例として活用してください。
ポイントはlocales
プロパティはhead
タグを変更する部分と、themeConfig
プロパティの両方に設定できるということです。
OGP タグなどは省略してるものもあるので、適宜追加してください。
カスタムコンポーネント
マークダウンに Vue コンポーネントを使いたいこともあるでしょう。
VitePress ではもちろんそのケースもほとんど設定せずにできます。
まずは、.vitepress
ディレクトリ以下にcomponents
ディレクトリを作り、
そこに適当なコンポーネントを作ります。components
という名称は何でも大丈夫です。
次にこのコンポーネントをグローバルに登録します。ここは Vue3 と同じ流れですね。
.vitepress
ディレクトリ以下にtheme
ディレクトリを作り、index.js
ファイルを作成します。
index.js
のenhanceApp
というプロパティに Vue インスタンスが渡されるので、グローバルコンポーネントとして設定します。
また、Theme
は VitePress デフォルトのレイアウト等を使う場合は必須です。
あとはマークダウンファイルに直接コンポーネントを配置します。
カスタム CSS
スタイルを上書きしてテーマカラーやロゴサイズを変更できます。 まずは CSS Variables を見てみます。
これらは簡単に変更できるので、ブランドカラーを変更してみます。また、ロゴの大きさも変更します。
変更には CSS ファイルに上書きしたいプロパティを定義して、theme/index.js
でインポートします。
まとめ
VitePress でドキュメントの作成を見てきました。
現在、Vitepress はミニマムということにかなりこだわっており、その役割をドキュメントの生成に専念させるのか、ブログ用などのために機能の追加を行うのか議論されています。 まだまだ、発展の余地があり細かいところにバグはありますが、今後の動向にも期待したいです。
Edit this page on GitHub