diff --git a/src/content/docs/ja/guides/migrate-to-astro/from-gatsby.mdx b/src/content/docs/ja/guides/migrate-to-astro/from-gatsby.mdx new file mode 100644 index 0000000000000..76f0822afe2d9 --- /dev/null +++ b/src/content/docs/ja/guides/migrate-to-astro/from-gatsby.mdx @@ -0,0 +1,608 @@ +--- +title: Gatsbyからの移行 +description: GatsbyプロジェクトをAstroに移行するためのガイド +sidebar: + label: Gatsby +type: migration +stub: false +framework: Gatsby +i18nReady: true +--- +import { Steps, LinkCard, CardGrid } from '@astrojs/starlight/components'; +import AstroJSXTabs from '~/components/tabs/AstroJSXTabs.astro'; +import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro'; + +ここでは、移行を始める際に役立つ主要な概念と移行戦略を紹介します。詳しくはドキュメント全体や[Discordコミュニティ](https://astro.build/chat)をご活用ください。 + +## GatsbyとAstroの類似点 + +GatsbyとAstroには、プロジェクト移行を容易にするいくつかの共通点があります: + +- [`.astro`ファイルの構文はJSXとよく似ています](/ja/reference/astro-syntax/)。Astroの記法は馴染みがあるはずです。 + +- Astroには[Markdown](/ja/guides/markdown-content/)のネイティブサポートがあり、MDXを利用するインテグレーションも用意されています。既存のMarkdownプラグインの多くをそのまま利用できます。 + +- Astroには[Reactコンポーネントを利用する公式インテグレーション](/ja/guides/integrations-guide/react/)があります。AstroではReactファイルの拡張子を`.jsx`または`.tsx`にする**必要があります**。 + +- Astroは[インストールNPMパッケージ](/ja/guides/imports/)をサポートしており、Reactライブラリも含まれます。多くの既存の依存関係はAstroでも正常に動作します。 + +- Gatsbyと同様に、AstroプロジェクトもSSGを選択できるほか、[ページ単位の事前レンダリングを伴うSSR](/ja/guides/on-demand-rendering/)に対応しています。 + +## GatsbyとAstroの主な相違点 + +GatsbyサイトをAstroで再構築する際には、次のような重要な違いに気付くでしょう。 + +- GatsbyプロジェクトはReactの単一ページアプリケーションで、`index.js`をプロジェクトのルートとして使用します。Astroプロジェクトはマルチページサイトで、`index.astro`はホームページです。 + +- [Astroコンポーネント](/ja/basics/astro-components/)は、ページテンプレートを返すようにexportされた関数で書かれていません。代わりに、コードフェンス(`---`)でJavaScriptコードを区切って、生成するHTMLのためのコードを分けます。 + +- [ローカルファイルデータ](/ja/guides/imports/)の取得: GatsbyはGraphQLを使用してプロジェクトファイルからデータを取得します。AstroではESMインポートとトップレベル`await`関数(例: [`import.meta.glob()`](/ja/guides/imports/)、[`getCollection()`](/ja/guides/content-collections/))でファイルからデータをインポートします。必要ならAstroプロジェクトにGraphQLを手動で追加できますが、デフォルトでは含まれていません。 + +## GatsbyプロジェクトをAstroに変換する + +各プロジェクトの移行手順は様々ですが、GatsbyからAstroへ変換する際に共通して行う作業があります。 + +### 新しいAstroプロジェクトの作成する +パッケージマネージャで`create astro`コマンドを実行してAstroのCLIウィザードを起動するか、[Astro Theme Showcase](https://astro.build/themes)からコミュニティテーマを選択します。 + +`create astro`コマンドに`--template`引数を渡すと、公式スターター(例:`docs`、`blog`、`portfolio`)のいずれかで新しいAstroプロジェクトを作成できます。また、[GitHub上の既存Astroリポジトリから新規プロジェクトを開始](/ja/install-and-setup/)することも可能です。 + + + + ```shell + # Astro CLIウィザードを実行 + npm create astro@latest + + # 公式スターターを指定して作成 + npm create astro@latest -- --template + ``` + + + ```shell + # Astro CLIウィザードを実行 + pnpm create astro@latest + + # 公式スターターを指定して作成 + pnpm create astro@latest -- --template + ``` + + + ```shell + # Astro CLIウィザードを起動 + yarn create astro@latest + + # 実際のスターターテンプレートを使用して新しいプロジェクトを開始 + yarn create astro@latest -- --template + ``` + + + +次に、既存のGatsbyプロジェクトのファイルを**srcの外側**にある別フォルダーへコピーし、新しいAstroプロジェクトへ移行します。 + +:::tip +公式スターターテンプレートの一覧は[公式スターターテンプレート](https://astro.new)を参照してください。IDX、StackBlitz、CodeSandbox、またはGitpodで新規プロジェクトを開くためのリンクもあります。 +::: + +### インテグレーションのインストールする(任意) + +GatsbyプロジェクトをAstroへ変換する際、以下のような[Astroのオプションインテグレーション](/ja/guides/integrations-guide/)が役立つことがあります。 + +- **@astrojs/react**: 新規Astroサイトで既存のReact UIコンポーネントを再利用するか、Reactコンポーネントで書き続けることができます。 + +- **@astrojs/mdx**: Gatsbyプロジェクトの既存のMDXファイルを持ち込むか、新規AstroサイトでMDXを使用することができます。 + +### ソースコードを`src`に配置する + +[Astroのプロジェクト構造](/ja/basics/project-structure/)に従って、次の手順でファイルを整理します。 + + +1. **削除** Gatsbyの`public/`フォルダ。 + + Gatsbyはビルド出力を`public/`ディレクトリに生成しますが、Astroはデフォルトで`dist/`を使用します。そのため`public/`は安全に削除できます。 + +2. **リネーム** Gatsbyの`static/`フォルダを`public/`、そしてAstroの`public/`フォルダとして使用してください。 + + Astroは静的アセット用に`public/`フォルダーを使用します。既存のAstro`public/`へ`static/`の内容をコピーしても構いません。 + +3. **コピーまたは移動** Gatsbyの`components`、`pages`などの他のファイルとフォルダを、必要に応じてAstroの`src/`フォルダへ配置してください。[Astroのプロジェクト構造](/ja/basics/project-structure/)を遵守して、ソースコードを`src`に配置してください。 + + Astroの`src/pages/`フォルダは、`.astro`、`.md`、`.mdx`ファイルからサイトのページと記事を生成するための特殊なフォルダです。Astro、Markdown、MDXファイルのルーティングを設定する必要はありません。 + + その他のフォルダは任意のため、`src/`フォルダの内容をどのように配置するかは任意です。Astroプロジェクトで一般的なフォルダには`src/layouts/`、`src/components`、`src/styles`、`src/scripts`があります。 + + +### ヒント:JSXファイルから`.astro`ファイルへの変換する + +ここでは、Gatsbyの`.js`コンポーネントを`.astro`コンポーネントに変換するためのいくつかの手順を説明します。 + +1. 既存Gatsbyコンポーネントの`return()`部分のみをHTMLテンプレートとして使用してください。 + +2. ``・`{children}`・`className`など[Gatsby/JSX構文をAstro構文](#参考-astro構文への変換する)またはHTML標準に変換してください。 + +3. `import`文を含んだ必要なJavaScriptは["コードフェンス" (`---`)](/ja/basics/astro-components/)内へ移動してください。注意: [条件付きレンダリング用のJavaScript](/ja/reference/astro-syntax/)は、AstroではHTMLテンプレート内に直接書くことが多いです。 + +4. [`Astro.props`](/ja/reference/api-reference/)を使用して、以前にGatsby関数に渡された追加のpropsを参照してください。 + +5. インポート済みコンポーネントをAstroに変換するか検討してください。公式Reactインテグレーションを使えば[Astroファイル内](/ja/guides/framework-components/)で既存Reactコンポーネントを利用できますが、インタラクティブ性が不要なら`.astro`へ変換して軽量化できます。 + +6. GraphQLクエリは削除し、`import`や[import.meta.glob()](/ja/guides/imports/)でローカルファイルを読み込ます。 + +[Gatsby Blogスターターを段階的に変換した例](#ガイド付き例gatsbyレイアウトをastroへ変換する)も参照してください。 + +#### `.jsx`と`.astro`の比較する + +以下のGatsbyコンポーネントと対応するAstroコンポーネントを比較してください: + + + + ```jsx title="component.jsx" + import * as React from "react" + import { useStaticQuery, graphql } from "gatsby" + import Header from "./header" + import Footer from "./footer" + import "./layout.css" + + const Component = ({ message, children }) => { + const data = useStaticQuery(graphql` + query SiteTitleQuery { + site { + siteMetadata { + title + } + } + } + `) + return ( + <> +
+
{message}
+
{children}
+