Shopify Hydrogen入門:ヘッドレスコマースの始め方

Shopify Hydrogenとは?

Shopify Hydrogenは、Shopifyが提供するヘッドレスコマース用のReactフレームワークです。従来のShopifyテーマとは異なり、完全なカスタマイズ性と高速なパフォーマンスを実現します。

なぜHydrogenなのか?

従来のShopifyテーマでは実現できなかった、以下のような要求に応えることができます:

  • 高速なページ表示: Server-Side Rendering (SSR)により、初回表示が劇的に高速化
  • 完全なデザイン自由度: Reactコンポーネントで自由にUIを構築
  • 最新のWeb技術: Remix、Vite、Tailwind CSSなど、モダンなツールスタックを活用
  • 優れた開発体験: TypeScript、Hot Module Replacement、強力な型補完

セットアップ手順

1. プロジェクトの作成

npm create @shopify/hydrogen@latest

インタラクティブなプロンプトで、プロジェクト名、言語(TypeScript推奨)、スタイリング方法を選択します。

2. 開発サーバーの起動

cd your-hydrogen-store
npm install
npm run dev

http://localhost:3000でローカル開発サーバーが起動します。

3. Shopifyストアとの接続

.envファイルに、Shopify AdminからStorefront API認証情報を設定:

PUBLIC_STOREFRONT_API_TOKEN=your_token_here
PUBLIC_STORE_DOMAIN=your-store.myshopify.com

基本的なコンポーネント構造

商品一覧ページの実装例

// app/routes/products._index.tsx
import { json, type LoaderFunctionArgs } from '@shopify/remix-oxygen';
import { useLoaderData } from '@remix-run/react';
import { getPaginationVariables } from '@shopify/hydrogen';

export async function loader({ context, request }: LoaderFunctionArgs) {
  const paginationVariables = getPaginationVariables(request, {
    pageBy: 12,
  });

  const { products } = await context.storefront.query(PRODUCTS_QUERY, {
    variables: {
      ...paginationVariables,
    },
  });

  return json({ products });
}

export default function Products() {
  const { products } = useLoaderData<typeof loader>();

  return (
    <div className="products-grid">
      {products.nodes.map((product) => (
        <ProductCard key={product.id} product={product} />
      ))}
    </div>
  );
}

const PRODUCTS_QUERY = `#graphql
  query Products($first: Int) {
    products(first: $first) {
      nodes {
        id
        title
        handle
        priceRange {
          minVariantPrice {
            amount
            currencyCode
          }
        }
        featuredImage {
          url
          altText
        }
      }
    }
  }
`;

日本市場向けの最適化

1. 日本語フォントの最適化

// app/root.tsx
import { links } from './styles/fonts';

export const links: LinksFunction = () => [
  ...fonts,
  { rel: 'stylesheet', href: styles },
];

2. 日本の決済方法への対応

Hydrogen Checkoutでは、以下の日本向け決済を簡単に統合できます:

  • Shopify Payments: JCB、American Express対応
  • コンビニ決済: Komoju、PAY.JP連携
  • 代金引換: カスタムCheckout拡張で実装

3. 配送オプションのカスタマイズ

// 配送日時指定UIの実装例
export function DeliveryDatePicker() {
  const [selectedDate, setSelectedDate] = useState<Date | null>(null);
  const [selectedTime, setSelectedTime] = useState<string>('');

  const timeSlots = [
    '午前中(8:00-12:00)',
    '14:00-16:00',
    '16:00-18:00',
    '18:00-20:00',
    '19:00-21:00',
  ];

  return (
    <div className="delivery-picker">
      <DatePicker
        selected={selectedDate}
        onChange={setSelectedDate}
        minDate={new Date()}
        locale="ja"
      />
      <select value={selectedTime} onChange={(e) => setSelectedTime(e.target.value)}>
        {timeSlots.map((slot) => (
          <option key={slot} value={slot}>{slot}</option>
        ))}
      </select>
    </div>
  );
}

パフォーマンス最適化

1. 画像の最適化

Hydrogenの<Image>コンポーネントは、自動的に:

  • WebP/AVIF変換
  • レスポンシブ画像生成
  • Lazy loading
  • Shopify CDNの活用
import { Image } from '@shopify/hydrogen';

<Image
  data={product.featuredImage}
  sizes="(min-width: 45em) 50vw, 100vw"
  aspectRatio="1/1"
/>

2. キャッシング戦略

export async function loader({ context }: LoaderFunctionArgs) {
  const { products } = await context.storefront.query(PRODUCTS_QUERY, {
    cache: context.storefront.CacheLong(), // 1時間キャッシュ
  });

  return json({ products });
}

デプロイ

Oxygen(Shopify推奨)へのデプロイ

npm run build
npx shopify hydrogen deploy

Oxygenは、グローバルエッジネットワークで高速配信を実現。日本のユーザーにも最適なパフォーマンスを提供します。

Vercel/Netlifyへのデプロイも可能

Hydrogenは標準的なRemixアプリなので、他のプラットフォームでも動作します。

まとめ

Shopify Hydrogenは、以下のような場合に最適です:

高度なカスタマイズが必要:ブランド独自のUXを実現したい ✅ パフォーマンス重視:Core Web Vitalsを最適化したい ✅ モダンな開発環境:ReactやTypeScriptを活用したい

一方、標準的なECサイトであれば、Shopify Theme(Dawn等)で十分な場合もあります。

プロジェクトの要件に応じて、最適な選択をすることが重要です。


DEMETIOでは、Shopify Hydrogenを使った高速ECサイト構築をサポートしています。

ヘッドレスコマースの導入をご検討の方は、お気軽にご相談ください