手動移行
この手動移行プロセスは、自動移行プロセスの後、不足している部分を補完したり、移行CLI出力の問題をデバッグしたりするために実行する必要があります。
プロジェクトのセットアップ
package.json
スコープ付きパッケージ名
Docusaurus 2では、スコープ付きパッケージ名を使用します
docusaurus
→@docusaurus/core
これにより、Docusaurusの公式パッケージとコミュニティが管理するパッケージを明確に区別できます。つまり、Docusaurusの公式パッケージはすべて@docusaurus/
のネームスペースに属します。
一方、Docusaurus 1で提供されていたデフォルトのドキュメントサイト機能は、現在は@docusaurus/preset-classic
によって提供されています。そのため、この依存関係も追加する必要があります
{
dependencies: {
- "docusaurus": "^1.x.x",
+ "@docusaurus/core": "^2.0.0-beta.0",
+ "@docusaurus/preset-classic": "^2.0.0-beta.0",
}
}
こちら(latest
タグを使用)で確認できる最新のDocusaurus 2バージョンを使用してください。
CLIコマンド
一方、CLIコマンドはdocusaurus <command>
(docusaurus-command
の代わりに)という名前に変更されました。
package.json
の"scripts"
セクションは、次のように更新する必要があります
{
"scripts": {
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy"
// ...
}
}
典型的なDocusaurus 2のpackage.json
は次のようになります
{
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"serve": "docusaurus serve",
"clear": "docusaurus clear"
},
"dependencies": {
"@docusaurus/core": "^2.0.0-beta.0",
"@docusaurus/preset-classic": "^2.0.0-beta.0",
"clsx": "^1.1.1",
"react": "^17.0.2",
"react-dom": "^17.0.2"
},
"browserslist": {
"production": [">0.5%", "not dead", "not op_mini all"],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
build
ディレクトリへの参照の更新
Docusaurus 1では、すべてのビルドアーティファクトはwebsite/build/<PROJECT_NAME>
内にあります。
Docusaurus 2では、これがwebsite/build
に移動されました。デプロイ設定を更新して、正しいbuild
ディレクトリから生成されたファイルを読み取るようにしてください。
GitHub Pagesにデプロイする場合は、yarn publish-gh-pages
スクリプトの代わりにyarn deploy
を実行してください。
.gitignore
website
内の.gitignore
には、次のものが含まれている必要があります
# dependencies
/node_modules
# production
/build
# generated files
.docusaurus
.cache-loader
# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*
README
D1ウェブサイトには既存のREADMEファイルがある場合があります。D2の変更を反映するように変更するか、デフォルトのDocusaurus v2 READMEをコピーしてください。
サイト設定
docusaurus.config.js
siteConfig.js
の名前をdocusaurus.config.js
に変更します。
Docusaurus 2では、モジュール化のために各機能(ブログ、ドキュメント、ページ)をプラグインに分割しました。プリセットはプラグインのバンドルであり、下位互換性のために、Docusaurus 1に存在する重要なプラグインのほとんどをバンドルした@docusaurus/preset-classic
プリセットを作成しました。
次のプリセット設定をdocusaurus.config.js
に追加します。
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
// Docs folder path relative to website dir.
path: '../docs',
// Sidebars file relative to website dir.
sidebarPath: require.resolve('./sidebars.json'),
},
// ...
},
],
],
};
docs
フォルダをwebsite
フォルダに移動することをお勧めします。これはv2のデフォルトのディレクトリ構造でもあります。Vercelは、docs
ディレクトリがwebsite
内にある場合、Docusaurusプロジェクトのデプロイをすぐにサポートします。また、ドキュメントとウェブサイトの残りのコードが1つのwebsite
ディレクトリ内に配置されるため、ドキュメントがウェブサイト内にある方が一般的に優れています。
Docusaurus v1 Webサイトを移行していて、保留中のドキュメントプルリクエストがある場合は、競合が発生しないように、一時的に/docs
フォルダを元の場所に保持できます。
siteConfig.js
の各フィールドの移行ガイドについては、以下を参照してください。
更新されたフィールド
baseUrl
、tagline
、title
、url
、favicon
、organizationName
、projectName
、githubHost
、scripts
、stylesheets
アクションは不要です。これらの設定フィールドは変更されていません。
colors
非推奨。Docusaurus 2用にInfimaというカスタムCSSフレームワークを作成しました。これは、テーマにCSS変数を使用します。ドキュメントはまだ準備できていません。準備ができたら、ここで更新します。InfimaのCSS変数を上書きするには、独自のCSSファイル(例:./src/css/custom.css
)を作成し、@docusaurus/preset-classic
にオプションとして渡すことでグローバルにインポートします
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
theme: {
customCss: [require.resolve('./src/css/custom.css')],
},
},
],
],
};
Infimaは各色の7つのシェードを使用します。
/**
* You can override the default Infima variables here.
* Note: this is not a complete list of --ifm- variables.
*/
:root {
--ifm-color-primary: #25c2a0;
--ifm-color-primary-dark: rgb(33, 175, 144);
--ifm-color-primary-darker: rgb(31, 165, 136);
--ifm-color-primary-darkest: rgb(26, 136, 112);
--ifm-color-primary-light: rgb(70, 203, 174);
--ifm-color-primary-lighter: rgb(102, 212, 189);
--ifm-color-primary-lightest: rgb(146, 224, 208);
}
選択したプライマリカラーのさまざまなシェードを見つけるには、ColorBoxを使用することをお勧めします。
または、次のツールを使用して、Webサイトのさまざまなシェードを生成し、変数をsrc/css/custom.css
にコピーします。
読みやすさを確保するために、プライマリカラーのWCAG-AAコントラスト比を少なくとも目指してください。Docusaurus Webサイト自体を使用して、カラーパレットがどのように見えるかプレビューします。1つの色は通常、ライトモードとダークモードの両方では機能しないため、ダークモードでは代替パレットを使用できます。
CSS変数名 | 16進数 | 調整 | コントラスト評価 |
---|---|---|---|
--ifm-color-primary-lightest | #3cad6e | 失敗 🔴 | |
--ifm-color-primary-lighter | #359962 | 失敗 🔴 | |
--ifm-color-primary-light | #33925d | 失敗 🔴 | |
--ifm-color-primary | #2e8555 | 0 | AA 👍 |
--ifm-color-primary-dark | #29784c | AA 👍 | |
--ifm-color-primary-darker | #277148 | AA 👍 | |
--ifm-color-primary-darkest | #205d3b | AAA 🏅 |
src/css/custom.css
の変数をこれらの新しい変数に置き換えます。
:root {
--ifm-color-primary: #2e8555;
--ifm-color-primary-dark: #29784c;
--ifm-color-primary-darker: #277148;
--ifm-color-primary-darkest: #205d3b;
--ifm-color-primary-light: #33925d;
--ifm-color-primary-lighter: #359962;
--ifm-color-primary-lightest: #3cad6e;
}
footerIcon
、copyright
、ogImage
、twitterImage
、docsSideNavCollapsible
アセット、SEO、著作権情報などのサイトメタ情報は、テーマによって処理されるようになりました。カスタマイズするには、docusaurus.config.js
のthemeConfig
フィールドを使用します
module.exports = {
// ...
themeConfig: {
footer: {
logo: {
alt: 'Meta Open Source Logo',
src: '/img/meta_oss_logo.png',
href: 'https://opensource.facebook.com/',
},
copyright: `Copyright © ${new Date().getFullYear()} Facebook, Inc.`, // You can also put own HTML here.
},
image: 'img/docusaurus.png',
// ...
},
};
headerIcon
、headerLinks
Docusaurus 1では、ヘッダーアイコンとヘッダーリンクはsiteConfig
のルートフィールドでした
headerIcon: 'img/docusaurus.svg',
headerLinks: [
{ doc: "doc1", label: "Getting Started" },
{ page: "help", label: "Help" },
{ href: "https://github.com/", label: "GitHub" },
{ blog: true, label: "Blog" },
],
現在、これら2つのフィールドは両方ともテーマによって処理されています
module.exports = {
// ...
themeConfig: {
navbar: {
title: 'Docusaurus',
logo: {
alt: 'Docusaurus Logo',
src: 'img/docusaurus.svg',
},
items: [
{to: 'docs/doc1', label: 'Getting Started', position: 'left'},
{to: 'help', label: 'Help', position: 'left'},
{
href: 'https://github.com/',
label: 'GitHub',
position: 'right',
},
{to: 'blog', label: 'Blog', position: 'left'},
],
},
// ...
},
};
algolia
module.exports = {
// ...
themeConfig: {
algolia: {
apiKey: '47ecd3b21be71c5822571b9f59e52544',
indexName: 'docusaurus-2',
algoliaOptions: { //... },
},
// ...
},
};
blogSidebarCount
非推奨。代わりにブログオプションとして@docusaurus/preset-classic
に渡してください。
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
blog: {
postsPerPage: 10,
},
// ...
},
],
],
};
cname
非推奨。代わりに、カスタムドメインを使用してstatic
フォルダにCNAME
ファイルを作成してください。 static
フォルダ内のファイルは、ビルドコマンドの実行中にbuild
フォルダのルートにコピーされます。
customDocsPath
、docsUrl
、editUrl
、enableUpdateBy
、enableUpdateTime
**破壊的変更**: editUrl
は、docs
ディレクトリではなく、(ウェブサイトの)Docusaurusプロジェクトを指す必要があります。
非推奨。代わりに@docusaurus/preset-classic
docsのオプションとして渡してください。
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
// Equivalent to `customDocsPath`.
path: 'docs',
// Equivalent to `editUrl` but should point to `website` dir instead of `website/docs`.
editUrl: 'https://github.com/facebook/docusaurus/edit/main/website',
// Equivalent to `docsUrl`.
routeBasePath: 'docs',
// Remark and Rehype plugins passed to MDX. Replaces `markdownOptions` and `markdownPlugins`.
remarkPlugins: [],
rehypePlugins: [],
// Equivalent to `enableUpdateBy`.
showLastUpdateAuthor: true,
// Equivalent to `enableUpdateTime`.
showLastUpdateTime: true,
},
// ...
},
],
],
};
gaTrackingId
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
// ...
googleAnalytics: {
trackingID: 'UA-141789564-1',
},
},
],
],
};
gaGtag
module.exports = {
// ...
presets: [
[
'@docusaurus/preset-classic',
{
// ...
gtag: {
trackingID: 'UA-141789564-1',
},
},
],
],
};
削除されたフィールド
以下のフィールドはすべて非推奨です。設定ファイルから削除できます。
blogSidebarTitle
cleanUrl
- Clean URLは現在デフォルトで使用されています。defaultVersionShown
- バージョニングはまだ移植されていません。バージョン管理を使用している場合、Docusaurus 2に移行することはできません。乞うご期待。disableHeaderTitle
disableTitleTagline
docsSideNavCollapsible
はdocsPluginOptions.sidebarCollapsible
で使用でき、現在はデフォルトで有効になっています。facebookAppId
facebookComments
facebookPixelId
fonts
highlight
- 現在、highlight.jsの代わりにPrismを使用しています。markdownOptions
- v2ではRemarkableの代わりにMDXを使用しています。MarkdownオプションはRemark/Rehypeプラグインに変換する必要があります。markdownPlugins
- v2ではRemarkableの代わりにMDXを使用しています。MarkdownプラグインはRemark/Rehypeプラグインに変換する必要があります。manifest
onPageNav
- これは現在デフォルトで有効になっています。separateCss
- 上記のcustom.css
と同じ方法でインポートできます。scrollToTop
scrollToTopOptions
translationRecruitingLink
twitter
twitterUsername
useEnglishUrl
users
usePrism
- 現在、highlight.jsの代わりにPrismを使用しています。wrapPagesHTML
将来的には、非推奨の多くの設定フィールドをプラグインとして実装する予定です。ご協力をお願いします!
URL
v1では、すべてのページは.html
拡張子の有無にかかわらず利用可能でした。
たとえば、次の2つのページが存在します。
true
の場合:リンクは/installation
をターゲットにしますfalse
の場合:リンクは/installation.html
をターゲットにします
v2では、デフォルトで、正規ページは/installation.html
ではなく、/installation
です。
v1でcleanUrl: false
を設定していた場合、/installation.html
へのリンクが公開されている可能性があります。
SEO上の理由から、またリンク切れを避けるために、ホスティングプロバイダでサーバー側のリダイレクトルールを設定する必要があります。
緊急回避策として、@docusaurus/plugin-client-redirectsを使用して、/installation.html
から/installation
へのクライアント側リダイレクトを作成できます。
module.exports = {
plugins: [
[
'@docusaurus/plugin-client-redirects',
{
fromExtensions: ['html'],
},
],
],
};
.html
拡張子をページの正規URLとして保持する場合、ドキュメントはslug: installation.html
フロントマターを宣言できます。
コンポーネント
サイドバー
以前のバージョンでは、ネストされたサイドバーカテゴリは許可されておらず、サイドバーカテゴリにはドキュメントIDのみを含めることができました。ただし、v2では無限のネストされたサイドバーが許可されており、ドキュメント以外のサイドバーアイテムの種類が多数あります。
カテゴリタイプが含まれている場合は、サイドバーを移行する必要があります。 subcategory
をcategory
に、ids
をitems
に名前変更します。
{
- type: 'subcategory',
+ type: 'category',
label: 'My Example Subcategory',
+ items: ['doc1'],
- ids: ['doc1']
},
フッター
website/core/Footer.js
は不要になりました。Docusaurusが提供するデフォルトのフッターを変更する場合は、swizzleしてください。
- npm
- Yarn
- pnpm
npm run swizzle @docusaurus/theme-classic Footer
yarn swizzle @docusaurus/theme-classic Footer
pnpm run swizzle @docusaurus/theme-classic Footer
これにより、テーマで使用されている現在の<Footer />
コンポーネントが、サイトのルートにあるsrc/theme/Footer
ディレクトリにコピーされます。その後、このコンポーネントを編集してカスタマイズできます。
左側にロゴを追加するためだけにフッターをswizzleしないでください。ロゴはv2で意図的に削除され、下部に移動されました。 docusaurus.config.js
でthemeConfig.footer
を使用してフッターを設定するだけです。
module.exports = {
themeConfig: {
footer: {
logo: {
alt: 'Meta Open Source Logo',
src: '/img/meta_oss_logo.png',
href: 'https://opensource.facebook.com',
},
},
},
};
ページ
Docusaurus 2ページの仕組みについては、ページの作成を参照してください。これを読んだ後、v1のpages/en
ファイルをsrc/pages
に移動する必要があることに注意してください。
Docusaurus v1では、ページは小道具としてsiteConfig
オブジェクトを受け取りました。
Docusaurus v2では、代わりにuseDocusaurusContext
からsiteConfig
オブジェクトを取得します。
v2では、各ページにテーマレイアウトを適用する必要があります。レイアウトコンポーネントはメタデータの小道具を取ります。
CompLibrary
はv2では非推奨です。独自のReactコンポーネントを作成するか、Infimaスタイルを使用する必要があります(ドキュメントはまもなく公開されます。申し訳ありません!その間、V2 Webサイトを調べてみるか、https://infima.dev/で利用可能なスタイルを確認してください)。
CommonJSをES6のインポート/エクスポートに移行できます。
典型的なDocusaurus v2ページは次のとおりです。
import React from 'react';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import Layout from '@theme/Layout';
const MyPage = () => {
const {siteConfig} = useDocusaurusContext();
return (
<Layout title={siteConfig.title} description={siteConfig.tagline}>
<div className="hero text--center">
<div className="container ">
<div className="padding-vert--md">
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
</div>
<div>
<Link
to="/docs/get-started"
className="button button--lg button--outline button--primary">
Get started
</Link>
</div>
</div>
</div>
</Layout>
);
};
export default MyPage;
次のコードは、さまざまなページの移行に役立つ場合があります。
- インデックスページ - Flux(推奨)、Docusaurus 2、Hermes
- ヘルプ/サポートページ - Docusaurus 2、Flux
コンテンツ
AUTOGENERATED_TABLE_OF_CONTENTSの置換
この機能は、インライン目次に置き換えられました。
Markdown構文をMDX互換に更新する
Docusaurus 2では、Markdown構文がMDXに変更されました。そのため、既存のドキュメントに壊れた構文がある可能性があり、更新する必要があります。一般的な例としては、HTMLでは有効な<img>
や<br>
などの自己終了タグは、明示的に閉じる必要があります(<img/>
および<br/>
)。MDXドキュメントのすべてのタグは、有効なJSXである必要があります。
フロントマターはgray-matterによって解析されます。フロントマターで:
などの特殊文字を使用する場合は、引用符で囲む必要があります。title: Part 1: my part1 title
→ title: "Part 1: my part1 title"
。
**ヒント**: HTML to JSXなどのオンラインツールを使用すると、移行が容易になる場合があります。
言語固有のコードタブ
複数言語対応コードブロックセクションを参照してください。
フロントマター
ブログのDocusaurusフロントマターフィールドは、ドキュメントとの整合性をとるために、camelCaseからsnake_caseに変更されました。
authorFBID
およびauthorTwitter
フィールドは非推奨になりました。これらは、authors
フィールドを介して実行できる作成者のプロファイル画像の生成にのみ使用されます。
デプロイメント
GitHub Pagesで使用されるCNAME
ファイルは生成されなくなったため、カスタムドメインを使用する場合は、/static/CNAME
に作成されていることを確認してください。
ブログのRSSフィードは、/blog/feed.xml
ではなく、/blog/rss.xml
でホストされるようになりました。ユーザーのサブスクリプションが引き続き機能するように、サーバー側のリダイレクトを設定することをお勧めします。
サイトのテスト
移行後、フォルダ構造は次のようになります。
my-project
├── docs
└── website
├── blog
├── src
│ ├── css
│ │ └── custom.css
│ └── pages
│ └── index.js
├── package.json
├── sidebars.json
├── .gitignore
├── docusaurus.config.js
└── static
開発サーバーを起動し、エラーを修正します。
- npm
- Yarn
- pnpm
cd website
npm start
cd website
yarn start
cd website
pnpm start
本番環境用にサイトをビルドすることもできます。
- npm
- Yarn
- pnpm
npm run build
yarn build
pnpm run build