「WordPressは重いし、でも静的HTMLは面倒…」 「Reactは好きだけど、SEO対策が大変そう」 「ブログもポートフォリオも、とにかく表示速度を速くしたい!」
こんな悩みを一気に解決してくれるのがGatsby(ギャツビー)です。
GatsbyはReactベースの静的サイトジェネレーター。ビルド時にHTMLを生成するので爆速表示が可能で、しかもSEO対策もバッチリ。企業サイトから個人ブログまで、世界中で使われています。
この記事では、Gatsbyの基本から実践的な使い方、デプロイまで、初心者でも今日から始められるように分かりやすく解説していきます!
Gatsbyとは:静的サイトジェネレーターの革命児

そもそもGatsbyって何?
Gatsbyは、Reactをベースにした静的サイトジェネレーター(SSG)です。
静的サイトジェネレーターとは:
- ビルド時にHTMLファイルを事前生成
- データベースへのアクセスが不要
- CDNから配信できて超高速
Gatsbyの仕組み
従来のWebサイト(WordPress等):
ユーザーアクセス → サーバー → DB検索 → HTML生成 → 表示
(毎回この処理が発生 = 遅い)
Gatsby:
ビルド時にHTML生成済み → ユーザーアクセス → 即表示
(事前に準備済み = 爆速)
Gatsbyの5つの特徴
1. 爆速表示
- Lighthouse スコア100点も夢じゃない
- 画像の最適化も自動
- プリフェッチで体感速度もアップ
2. React の恩恵をフル活用
- コンポーネントベース開発
- 豊富なエコシステム
- モダンなJavaScript
3. GraphQL でデータ管理
- あらゆるデータソースから取得可能
- Markdown、JSON、CMS、APIなど
- 統一的なクエリ言語
4. プラグインが豊富
- 2500以上のプラグイン
- SEO、画像最適化、PWAなど
- 簡単に機能追加
5. 優れた開発体験
- ホットリロード
- エラーメッセージが分かりやすい
- 充実したドキュメント
他のツールとの比較:Next.js、Hugo、Jekyllとの違い
Next.js との比較
Next.js:
- SSR(サーバーサイドレンダリング)も可能
- 動的なサイト向き
- APIルートも作れる
- より柔軟だが設定が複雑
Gatsby:
- SSG(静的サイト生成)に特化
- ビルド時にデータ取得
- プラグインで機能追加
- ブログやポートフォリオに最適
どっちを選ぶ?
- リアルタイムデータが必要 → Next.js
- 高速な静的サイト → Gatsby
Hugo との比較
Hugo:
- Go言語製で超高速ビルド
- シンプルで軽量
- 学習コストが低い
- テンプレート言語を使用
Gatsby:
- Reactの知識を活かせる
- プラグインエコシステムが充実
- GraphQLでデータ管理
- より高機能
Jekyll との比較
Jekyll:
- Ruby製の老舗SSG
- GitHub Pagesと相性良好
- シンプルなブログに最適
- プラグインは少なめ
Gatsby:
- JavaScript/React製
- より高速で機能的
- モダンな開発環境
- 大規模サイトにも対応
環境構築:5分で始めるGatsby開発
必要な環境
前提条件:
- Node.js 18.0.0以上
- npm または yarn
- Git(推奨)
Gatsby CLIのインストール
# npmの場合
npm install -g gatsby-cli
# yarnの場合
yarn global add gatsby-cli
# 確認
gatsby --version
新規プロジェクトの作成
スターターを使って作成:
# デフォルトスターター
gatsby new my-gatsby-site
# ブログスターター
gatsby new my-blog https://github.com/gatsbyjs/gatsby-starter-blog
# ポートフォリオスターター
gatsby new my-portfolio https://github.com/LekoArts/gatsby-starter-portfolio-cara
開発サーバーの起動
cd my-gatsby-site
gatsby develop
ブラウザで http://localhost:8000
を開くと、サイトが表示されます!
GraphiQL(グラフィカル): http://localhost:8000/___graphql
でGraphQLエクスプローラーが使えます。
基本構造:Gatsbyプロジェクトの中身を理解する
フォルダ構成
my-gatsby-site/
├── src/
│ ├── pages/ # ページコンポーネント
│ ├── components/ # 再利用可能コンポーネント
│ ├── templates/ # ページテンプレート
│ ├── images/ # 画像ファイル
│ └── styles/ # CSSファイル
├── static/ # 静的ファイル
├── gatsby-config.js # サイト設定とプラグイン
├── gatsby-node.js # ビルド時の処理
├── gatsby-browser.js # ブラウザAPI
└── package.json
ページの作成
src/pages/about.js:
import React from "react"
import { Link } from "gatsby"
const AboutPage = () => {
return (
<div>
<h1>About Us</h1>
<p>私たちについてのページです。</p>
<Link to="/">ホームに戻る</Link>
</div>
)
}
export default AboutPage
ファイルを作成するだけで、自動的に /about
ページが生成されます!
コンポーネントの作成
src/components/Header.js:
import React from "react"
import { Link } from "gatsby"
const Header = () => {
return (
<header>
<nav>
<Link to="/">Home</Link>
<Link to="/about">About</Link>
<Link to="/blog">Blog</Link>
</nav>
</header>
)
}
export default Header
GraphQLでデータを取得:Gatsbyの心臓部
GraphQLの基本
Gatsbyでは、すべてのデータをGraphQLで管理します。
ページクエリの例:
import React from "react"
import { graphql } from "gatsby"
const HomePage = ({ data }) => {
return (
<div>
<h1>{data.site.siteMetadata.title}</h1>
<p>{data.site.siteMetadata.description}</p>
</div>
)
}
export const query = graphql`
query {
site {
siteMetadata {
title
description
}
}
}
`
export default HomePage
StaticQuery と useStaticQuery
コンポーネント内でデータ取得:
import React from "react"
import { useStaticQuery, graphql } from "gatsby"
const Header = () => {
const data = useStaticQuery(graphql`
query {
site {
siteMetadata {
title
}
}
}
`)
return <h1>{data.site.siteMetadata.title}</h1>
}
プラグインシステム:機能を簡単追加
必須プラグイン5選
1. gatsby-plugin-image
npm install gatsby-plugin-image gatsby-plugin-sharp gatsby-transformer-sharp
画像の最適化、遅延読み込み、プレースホルダー表示。
2. gatsby-plugin-react-helmet
npm install gatsby-plugin-react-helmet react-helmet
SEO対策のためのメタタグ管理。
3. gatsby-source-filesystem
npm install gatsby-source-filesystem
ローカルファイルをGraphQLで扱えるように。
4. gatsby-transformer-remark
npm install gatsby-transformer-remark
MarkdownファイルをHTMLに変換。
5. gatsby-plugin-sitemap
npm install gatsby-plugin-sitemap
サイトマップの自動生成。
プラグインの設定
gatsby-config.js:
module.exports = {
siteMetadata: {
title: `My Gatsby Site`,
description: `素晴らしいGatsbyサイト`,
author: `@yourname`,
},
plugins: [
`gatsby-plugin-react-helmet`,
{
resolve: `gatsby-source-filesystem`,
options: {
name: `images`,
path: `${__dirname}/src/images`,
},
},
`gatsby-transformer-sharp`,
`gatsby-plugin-sharp`,
{
resolve: `gatsby-plugin-manifest`,
options: {
name: `gatsby-starter-default`,
short_name: `starter`,
start_url: `/`,
background_color: `#663399`,
theme_color: `#663399`,
display: `minimal-ui`,
icon: `src/images/gatsby-icon.png`,
},
},
],
}
Markdownでブログを作る:実践編
ブログ記事の作成
content/blog/my-first-post.md:
---
title: "初めてのGatsbyブログ"
date: "2025-01-20"
description: "Gatsbyでブログを始めました"
---
## はじめに
Gatsbyでブログを作るのは簡単です!
### 特徴
- Markdownで記事を書ける
- 自動的にHTMLに変換
- SEO対策もバッチリ
ブログ一覧ページ
src/pages/blog.js:
import React from "react"
import { Link, graphql } from "gatsby"
const BlogPage = ({ data }) => {
return (
<div>
<h1>ブログ記事一覧</h1>
{data.allMarkdownRemark.edges.map(({ node }) => (
<div key={node.id}>
<Link to={node.fields.slug}>
<h2>{node.frontmatter.title}</h2>
</Link>
<p>{node.frontmatter.date}</p>
<p>{node.excerpt}</p>
</div>
))}
</div>
)
}
export const query = graphql`
query {
allMarkdownRemark(sort: { frontmatter: { date: DESC } }) {
edges {
node {
id
excerpt
frontmatter {
title
date(formatString: "YYYY年MM月DD日")
}
fields {
slug
}
}
}
}
}
`
export default BlogPage
画像最適化:gatsby-plugin-imageの威力
最適化された画像の使い方
import React from "react"
import { GatsbyImage, getImage } from "gatsby-plugin-image"
import { graphql } from "gatsby"
const ImagePage = ({ data }) => {
const image = getImage(data.file)
return (
<div>
<h1>最適化された画像</h1>
<GatsbyImage image={image} alt="説明文" />
</div>
)
}
export const query = graphql`
query {
file(relativePath: { eq: "hero.jpg" }) {
childImageSharp {
gatsbyImageData(
width: 1200
placeholder: BLURRED
formats: [AUTO, WEBP, AVIF]
)
}
}
}
`
自動的に実行される最適化:
- 適切なサイズにリサイズ
- WebP、AVIF形式に変換
- 遅延読み込み
- ぼかしプレースホルダー
デプロイ:世界に公開する
Netlifyでデプロイ
最も簡単な方法:
- GitHubにプッシュ
- Netlifyでリポジトリを連携
- ビルド設定:
- Build command:
gatsby build
- Publish directory:
public
- Build command:
- 自動デプロイ完了!
Vercelでデプロイ
# Vercel CLIをインストール
npm i -g vercel
# デプロイ
vercel
GitHub Pagesでデプロイ
gh-pagesパッケージを使用:
npm install --save-dev gh-pages
package.jsonに追加:
{
"scripts": {
"deploy": "gatsby build && gh-pages -d public"
}
}
npm run deploy
パフォーマンス最適化:さらなる高速化
Lighthouse対策
100点を目指すための設定:
- 画像の最適化
- gatsby-plugin-imageを適切に使用
- 適切なサイズ指定
- フォントの最適化
// gatsby-browser.js
import "@fontsource/noto-sans-jp/400.css"
import "@fontsource/noto-sans-jp/700.css"
- 不要なJavaScriptの削除
- Tree Shakingを活用
- 動的インポートで分割
PWA化
npm install gatsby-plugin-manifest gatsby-plugin-offline
gatsby-config.js:
plugins: [
{
resolve: `gatsby-plugin-manifest`,
options: {
name: `My PWA Site`,
short_name: `PWA`,
start_url: `/`,
background_color: `#ffffff`,
theme_color: `#663399`,
display: `standalone`,
icon: `src/images/icon.png`,
},
},
`gatsby-plugin-offline`,
]
よくあるトラブルと解決法
ビルドエラー
「Cannot query field…」エラー:
- GraphQLクエリのタイポをチェック
- GraphiQLで正しいクエリを確認
- gatsby cleanでキャッシュクリア
画像が表示されない
解決方法:
gatsby clean
rm -rf node_modules
npm install
gatsby develop
ホットリロードが効かない
対処法:
- .cache フォルダを削除
- 開発サーバーを再起動
- ブラウザのキャッシュをクリア
実践プロジェクト例
企業サイト
特徴:
- 高速表示でSEO対策
- CMSと連携(Contentful、Strapi)
- 多言語対応
個人ブログ
特徴:
- Markdownで簡単執筆
- タグ・カテゴリー機能
- RSSフィード生成
ポートフォリオ
特徴:
- 作品ギャラリー
- スムーズなアニメーション
- お問い合わせフォーム
まとめ:Gatsbyで最高のWebサイトを作ろう!
Gatsbyマスターへの道:
初心者がまずやること:
- gatsby-cli をインストール
- スターターでプロジェクト作成
- ページを1つ追加してみる
- Netlifyでデプロイ
覚えておくべきポイント:
- 静的サイト生成で爆速表示
- Reactベースでモダンな開発
- GraphQLでデータ管理
- プラグインで機能追加
- 自動最適化でSEO対策
学習のコツ:
- 公式チュートリアルを完走
- スターターを改造して学ぶ
- 小さなプロジェクトから始める
- コミュニティで質問
最後に:
Gatsbyは最初は難しく感じるかもしれませんが、一度理解すれば最高の開発体験が待っています。
特にReactを知っている人なら、すぐに慣れるはずです。まずは公式スターターを使って、簡単なサイトを作ってみてください。
爆速サイトを作る快感を、ぜひ体験してくださいね!
コメント