SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Remixを通じてWebを学ぶ

RemixのWebサイトをCloudflare Pagesにデプロイする方法を解説

Remixを通じてWebを学ぶ 第9回

  • X ポスト
  • このエントリーをはてなブックマークに追加

Cloudflare Pagesとは

 Cloudflare Pagesは、Cloudflareが提供する静的ホスティングサービスです。CloudflareのCDNの恩恵を受けながら、静的なWebサイトを高速かつ安価に公開することができます(図1)。

図1:Cloudflare Pages
図1:Cloudflare Pages

 CDN(Content Delivery Network)は、世界中に分散されたサーバーを使って、ユーザーに物理的に近い場所からコンテンツを配信する技術です。CDNを活用することで、大元のサーバーがユーザーから遠くにある場合でも、コンテンツの大半を占める静的ファイルをユーザーの近くから配信することで、高速にWebサイトを表示できます。

 当初のCloudflare Pagesは、ただ単に静的ファイルをホスティングして、CDNを活用して配信するだけのサービスでしたが、最近ではサーバーレスなエッジコンピューティングもサポートされるようになりました。CDNのサーバー上で動作するランタイムであるCloudflare Workersをベースとした、Pages Functionsという機能が加わり、動的にコンテンツを生成しながらも、CDNの恩恵を受けられる、強力なプラットフォームになりました。

 図2は、それぞれの概要を図示したものです。

図2:Cloudflare PagesとCloudflare WorkersとPages Functionsの関係
図2:Cloudflare PagesとCloudflare WorkersとPages Functionsの関係

 Remixは、ページを表示する際、デフォルトでは常にサーバーサイドレンダリングを行う挙動になっており、事前に静的なHTMLを生成してホスティングしておくスタイルのフレームワークではありません。

 つまり、デフォルトのままでは大量のリクエストを受け付けたときに、毎回ページを生成することになり、サーバーに負荷がかかります。そのため、Pages Functionsで実施したサーバーサイドレンダリングの結果をCDNにキャッシュできるCloudflare Pagesは、Remixと相性が良いと言えるでしょう。

Cloudflareのアカウントを作る

 それでは、実際にCloudflare Pagesを使うための準備をしていきましょう。まずは、Cloudflareのアカウントを作成します。こちらのURLにアクセスして、アカウントを作成してください(図3)。図3:Cloudflareのアカウント作成

図3:Cloudflareのアカウント作成

 メールアドレスとパスワードを入力するだけの、簡単な手続きでアカウントを作成できます。サインアップに成功すると、確認メールが届くので、メール内のリンクをクリックしてアカウントを有効化してください。

 初めてCloudflareのダッシュボードにアクセスすると、図4のようなようこそ画面が表示されます。英語だと読みづらい方は、このタイミングで右上の言語メニューを日本語に変更しておくことをお勧めします。

図4:CloudflareのWelcome画面
図4:CloudflareのWelcome画面

 このようこそ画面では「Add a website or application(Web サイトまたはアプリケーションを追加する)」と「Explore all products(すべての製品を見る)」のどちらを選んでもダッシュボードに進むことができるので、好きな方を選んでください。

 ダッシュボードに移動したら、左のメニューから「Workers & Pages」をクリックします(図5)。

図5:Cloudflareのダッシュボード
図5:Cloudflareのダッシュボード

 すると、図6のようにCloudflare WorkersとCloudflare Pagesの管理画面が表示されます。

図6:Cloudflare WorkersとPagesの管理画面
図6:Cloudflare WorkersとPagesの管理画面

 次にこの画面を訪れるときには、デプロイ済みのサイトが見られるので、楽しみにしていてください。では、次の手順に行きましょう。

Cloudflare Pages対応のRemixプロジェクトを作る

 次は、Pages Functionsをサーバーとして利用する形で、Remixをセットアップします。通常のセットアップと比べていくつかの設定が必要になりますが、Cloudflareから提供されているCLIを使うことで、簡単にセットアップできます。

 以下のコマンドを実行して、プロジェクトを作成します。通称、C3(Create Cloudflare CLI)と呼ばれるコマンドです。

[リスト1]Create Cloudflare CLIを実行する
 $ npm create cloudflare@latest -- remix-on-cloudflare-sample --framework remix --deploy false

 > npx
 > create-cloudflare remix-on-cloudflare-sample --framework remix --deploy false


 using create-cloudflare version 2.21.7

 // 中略

 ╭ Deploy with Cloudflare Step 3 of 3
 │
 ├ Do you want to deploy your application?
 │ no deploy via `npm run deploy`
 │
 ├  APPLICATION CREATED  Deploy your application with npm run deploy
 │
 │ Navigate to the new directory cd remix-on-cloudflare-sample
 │ Run the development server npm run dev
 │ Preview your application npm run preview
 │ Deploy your application npm run deploy
 │ Read the documentation https://developers.cloudflare.com/pages
 │ Stuck? Join us at https://discord.cloudflare.com
 │
 ╰ See you again soon!

 コマンドの読み方としては、 npm create cloudflare@latest までが事実上のコマンドで、 -- を挟んだ後ろがオプションです。-- を挟むことで、それ以降が npm コマンドの引数ではないことをシェルに対して明示しています。

 このコマンドを実行すると、 --framework remix の指定によってRemixのプロジェクトを作成すると同時に、Cloudflare Pagesにデプロイするための設定が追加されます。デフォルトでは、このタイミングで一度デプロイを行うかどうかも訊かれるのですが、後ほど別途解説したいので、 --deploy false のオプションでデプロイをスキップしました。途中、Gitの初期化とNPMのインストールを行うか訊かれますが、NPMのインストールは行っておいたほうがよいでしょう。Gitは都合のいい方を選んでください。もし、TypeScriptが不要な場合は、 --ts false のオプションをつけておくとよいでしょう。

作成したプロジェクトをローカルで動かしてみる

 プロジェクトが作成できたら、次は一度、ローカルで動かしてみましょう。 cd remix-on-cloudflare-sample を実行してプロジェクトのディレクトリに移動した後、いつものように npm run dev を実行します(リスト2)。

[リスト2]ローカルでプロジェクトを動かす
 $ cd remix-on-cloudflare-sample
 $ npm run dev

 > dev
 > remix vite:dev

   ➜  Local:   http://localhost:5173/
   ➜  Network: use --host to expose
   ➜  press h + enter to show help

 慣れ親しんだ表示が出てきました。ブラウザで http://localhost:5173/ にアクセスして、Remixのデフォルトページが表示されることを確認します(図7)。

図7:ローカルで動かしたプロジェクト
図7:ローカルで動かしたプロジェクト

 少しタイトルやリンク先がアレンジされていますが、いつものRemixのデフォルトページです。ローカル環境でも、つつがなく開発を開始できそうですね。

 めでたしめでたし、と言いたいところですが、ここでひとつ、思い出さなければいけない情報があります。それは、Cloudflare Pages FunctionsやCloudflare Workersという環境は、Node.jsではないということです。

 もちろん、今動かしたローカルの環境は npm run で開始したものですから、Node.js上で、Node.jsの標準ライブラリを使って動いています。その一方、デプロイ先となるPages Functionsは、Web標準のサービスワーカーをサーバーで動かしているような環境で、標準ライブラリもブラウザに準拠したものになっています。

 もちろん、Cloudflare環境でしか使えないAPIもあります。実環境とローカル環境で、前提となる標準ライブラリが大きく異なってしまうと、開発が難しくなってしまいますね。

 実は、Create Cloudflare CLIで作成したプロジェクトには、このギャップを埋めるための工夫が含まれています。 vite.config.ts を開いてみてください(リスト3)。

[リスト3]vite.config.ts
 import {
   vitePlugin as remix,
   cloudflareDevProxyVitePlugin as remixCloudflareDevProxy,
 } from "@remix-run/dev";
 import { defineConfig } from "vite";
 import tsconfigPaths from "vite-tsconfig-paths";

 export default defineConfig({
   plugins: [
     remixCloudflareDevProxy(), // (1)
     remix({
       future: {
         v3_fetcherPersist: true,
         v3_relativeSplatPath: true,
         v3_throwAbortReason: true,
       },
     }),
     tsconfigPaths(),
   ],
 });

 (1)では @remix-run/dev に含まれる cloudflareDevProxyVitePlugin というプラグインが設定されています。これは、開発時にローカル環境を立ち上げるタイミングで、Miniflare(ミニフレア)という、Cloudflare Workersをエミュレートするためのツールと連携するためのものです。このプラグインを使うことで、ある程度実際の環境に近い状態で開発を進めることができます。

次のページ
Cloudflare Pagesにデプロイする

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Remixを通じてWebを学ぶ連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 中川幸哉(ナカガワユキヤ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/19855 2024/07/18 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング