<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>デプロイ on ITフリーランスの備忘的なにか</title>
    <link>https://zac-lab.com/tags/%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4/</link>
    <description>Recent content in デプロイ on ITフリーランスの備忘的なにか</description>
    <generator>Hugo -- 0.143.0</generator>
    <language>ja</language>
    <lastBuildDate>Fri, 20 Jun 2025 18:24:08 +0900</lastBuildDate>
    <atom:link href="https://zac-lab.com/tags/%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Cloudflare WorkersにNext.jsアプリ(Supabase使用)をデプロイする</title>
      <link>https://zac-lab.com/posts/20250620/</link>
      <pubDate>Fri, 20 Jun 2025 18:24:08 +0900</pubDate>
      <guid>https://zac-lab.com/posts/20250620/</guid>
      <description>Cloudflare WorkersにNext.jsアプリをデプロイする際の設定方法とハマったポイントを紹介。Supabaseとの組み合わせでの環境変数設定やCI/CDの構築について解説します。</description>
      <content:encoded><![CDATA[<h2 id="はじめに">はじめに</h2>
<p>先日、新しく作ったWebアプリをCloudflare Workers上にデプロイしました。今回はその際にハマったポイントや設定方法について記録しておきます。</p>
<p>Cloudflare Workersは従来、単純な関数実行基盤という印象でしたが、最近ではNext.jsアプリの本格的なデプロイも可能になっており、非常に魅力的な選択肢となっています。まだまだ日本語の情報が少ないため、今回の経験を共有したいと思います。</p>
<h2 id="cloudflare-pagesからcloudflare-workersへ">Cloudflare PagesからCloudflare Workersへ</h2>
<p>今回、新しいアプリを作成してCloudflareにデプロイしようとしました。今まではCloudflare Pagesを使用していたのですが、新しくプロジェクトを作成しようとしたところ、Cloudflare Workersを使用するように、とのメッセージが表示されました。</p>
<p><img alt="Pagesの開始画面" loading="lazy" src="/posts/20250620/screen1.png"></p>
<p>Cloudflare Workersは、従来の関数実行基盤の枠を超えて、最近ではNext.jsアプリの本格的なデプロイも可能になっており、Cloudflare Pagesとほぼ同等の基盤になってきています。Cloudflareとしても、今後はWorkersの開発に注力していくことを宣言しています。</p>
<p>そこで今回は、Cloudflare Workers上にデプロイを試みました。以下、ハマったポイントなどを詳しく紹介します。</p>
<h2 id="デプロイ手順">デプロイ手順</h2>
<h3 id="プロジェクトにworkers用の設定を追加">プロジェクトにWorkers用の設定を追加</h3>
<p>Cloudflareの公式マニュアルを参考に設定を行いました。</p>
<p><a href="https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/" target="_blank">https://developers.cloudflare.com/workers/framework-guides/web-apps/nextjs/</a>
</p>
<p>今回のアプリではSupabaseを組み込んでおり、実行時の環境変数を設定する必要があったため、<code>wrangler.toml</code>ファイルで<code>[vars]</code>セクションを使用して定義しました。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-toml" data-lang="toml"><span style="display:flex;"><span><span style="color:#a6e22e">main</span> = <span style="color:#e6db74">&#34;.open-next/worker.js&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">name</span> = <span style="color:#e6db74">&#34;my-app&#34;</span>     <span style="color:#75715e"># ここにアプリ名を入力</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">compatibility_date</span> = <span style="color:#e6db74">&#34;2025-03-25&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">compatibility_flags</span> = [<span style="color:#e6db74">&#34;nodejs_compat&#34;</span>]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>[<span style="color:#a6e22e">assets</span>]
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">directory</span> = <span style="color:#e6db74">&#34;.open-next/assets&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">binding</span> = <span style="color:#e6db74">&#34;ASSETS&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>[<span style="color:#a6e22e">vars</span>]  <span style="color:#75715e"># 実行時の環境変数を定義</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">NEXT_PUBLIC_SUPABASE_URL</span> = <span style="color:#e6db74">&#34;https://XXX.supabase.co&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#a6e22e">NEXT_PUBLIC_SUPABASE_ANON_KEY</span> = <span style="color:#e6db74">&#34;XXXXXXXXXX&#34;</span>
</span></span></code></pre></div><h3 id="cloudflare-workersの設定">Cloudflare Workersの設定</h3>
<p>GitHubとCloudflare Workersを連携し、ソースコードに変更があった際に自動でデプロイが実行されるようにCI/CDを設定します。</p>
<p>まず、Cloudflare Workersの開始ページから「リポジトリをインポートする」から開始します。</p>
<p><img alt="Workersの開始画面" loading="lazy" src="/posts/20250620/screen2.png"></p>
<p>リポジトリを選択すると、プロジェクトの構成画面に遷移します。</p>
<p><img alt="プロジェクト構成画面" loading="lazy" src="/posts/20250620/screen3.png"></p>
<p>どのブランチの変更を検知するかを選択し、「非本番ブランチのビルド」はチェックを外しました。</p>
<p>ここで重要なポイントが2つあります。</p>
<h4 id="1-ビルドおよびデプロイのコマンドを変更">1. ビルドおよびデプロイのコマンドを変更</h4>
<p><img alt="ビルドおよびデプロイのコマンド" loading="lazy" src="/posts/20250620/screen4.png"></p>
<p>ビルドコマンドには<code>npx opennextjs-cloudflare build</code>を、デプロイコマンドには<code>npx opennextjs-cloudflare deploy</code>を設定します。</p>
<p>デフォルトのコマンドのままでビルドを実行すると、以下のエラーが発生しました。</p>
<pre tabindex="0"><code>✘ [ERROR] The entry-point file at &#34;.open-next/worker.js&#34; was not found.
</code></pre><p>このエラーは、Next.jsアプリをWorkers用にビルドする際に、専用のビルドコマンドが必要なために発生します。<code>opennextjs-cloudflare</code>パッケージが、Next.jsアプリをWorkers環境で動作するように変換してくれます。</p>
<h4 id="2-ビルド変数を設定">2. ビルド変数を設定</h4>
<p><img alt="ビルド変数" loading="lazy" src="/posts/20250620/screen5.png"></p>
<p><code>wrangler.toml</code>の中で<code>[vars]</code>で定義したのは、実行時の環境変数です。今回はクライアント側でもSupabaseを使用する構成にしていたため、ビルド時の環境変数も設定する必要がありました。同じ内容でCloudflare Workersの管理画面から設定しました。</p>
<p>この設定を行わないと、ビルド時に環境変数が存在しないというエラーが発生しました。</p>
<p>その他、細かい点では<code>esbuild</code>パッケージが存在しないというエラーが発生したため、追加でインストールするなどの対応を行い、ようやくデプロイが完了しました。</p>
<h2 id="まとめ">まとめ</h2>
<p>今後よく使用していくであろうCloudflare Workersのデプロイ手順について紹介しました。まだ日本語のドキュメントが少ない印象ですので、この記事が参考になれば幸いです。</p>
<p>特にSupabaseと組み合わせた場合の設定は、環境変数の設定が重要になります。ビルド時と実行時の両方で環境変数を適切に設定することで、スムーズにデプロイできるようになります。</p>
<p>Cloudflare Workersは今後も機能拡張が予定されており、Next.jsアプリのデプロイ先として非常に魅力的な選択肢となっています。ぜひ試してみてください。</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
