<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cloudflare Pages on ポンコツ地方エンジニアの技術ブログ</title><link>https://blog-0847c6.gitlab.io/tags/cloudflare-pages/</link><description>Recent content in Cloudflare Pages on ポンコツ地方エンジニアの技術ブログ</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><lastBuildDate>Sun, 17 May 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://blog-0847c6.gitlab.io/tags/cloudflare-pages/index.xml" rel="self" type="application/rss+xml"/><item><title>Cloudflare Pages で静的サイトを公開する（GitLab 連携）</title><link>https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/</link><pubDate>Sun, 17 May 2026 00:00:00 +0900</pubDate><guid>https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/</guid><description>&lt;h2 id="前提環境"&gt;&lt;a href="#%e5%89%8d%e6%8f%90%e7%92%b0%e5%a2%83" class="header-anchor"&gt;&lt;/a&gt;前提・環境
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;ソース管理: &lt;strong&gt;GitLab&lt;/strong&gt; (GitHub でもやり方は同じ)&lt;/li&gt;
&lt;li&gt;ホスティング: &lt;strong&gt;Cloudflare Pages&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;DNS: &lt;strong&gt;Cloudflare&lt;/strong&gt;（既存ドメインのサブドメインに展開する想定）&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="gitlab-側で必要なこと"&gt;&lt;a href="#gitlab-%e5%81%b4%e3%81%a7%e5%bf%85%e8%a6%81%e3%81%aa%e3%81%93%e3%81%a8" class="header-anchor"&gt;&lt;/a&gt;GitLab 側で必要なこと
&lt;/h2&gt;&lt;p&gt;ほぼ何もしなくて構いません。&lt;br&gt;
&lt;code&gt;.gitlab-ci.yml&lt;/code&gt; を書く必要はなく、Cloudflare Pages が直接 git clone してビルドします。&lt;/p&gt;
&lt;p&gt;最低限の準備は次のとおりです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;リポジトリが Cloudflare からアクセスできること（Public ならそのまま、Private なら次節の OAuth で許可します）&lt;/li&gt;
&lt;li&gt;プロダクションブランチ（&lt;code&gt;main&lt;/code&gt; など）を決めておくこと&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ブランチ運用は Cloudflare Pages 側で自動的に処理されます。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;プロダクションブランチへの push → 本番デプロイ&lt;/li&gt;
&lt;li&gt;それ以外のブランチへの push → &lt;strong&gt;自動でプレビュー URL が発行される&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cloudflare-pages-側のセットアップ"&gt;&lt;a href="#cloudflare-pages-%e5%81%b4%e3%81%ae%e3%82%bb%e3%83%83%e3%83%88%e3%82%a2%e3%83%83%e3%83%97" class="header-anchor"&gt;&lt;/a&gt;Cloudflare Pages 側のセットアップ
&lt;/h2&gt;&lt;p&gt;Cloudflare ダッシュボード → &lt;strong&gt;Workers &amp;amp; Pages&lt;/strong&gt; を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="519px" data-flex-grow="216" height="536" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/01.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/01_hu_9ea2c901c150fda5.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/01.webp 1160w" width="1160"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Create application&lt;/strong&gt; を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="529px" data-flex-grow="220" height="529" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/02.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/02_hu_a08f49e8f9b7bb41.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/02.webp 1167w" width="1167"&gt;&lt;/p&gt;
&lt;p&gt;下部にある &lt;strong&gt;Get started&lt;/strong&gt; をクリックします。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="518px" data-flex-grow="216" height="434" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/03.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/03_hu_6c3acff843249430.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/03.webp 938w" width="938"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Import an existing Git repository&lt;/strong&gt; の &lt;strong&gt;Get started&lt;/strong&gt; を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="443px" data-flex-grow="184" height="332" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/04.webp" width="614"&gt;&lt;/p&gt;
&lt;h3 id="git-プロバイダの接続"&gt;&lt;a href="#git-%e3%83%97%e3%83%ad%e3%83%90%e3%82%a4%e3%83%80%e3%81%ae%e6%8e%a5%e7%b6%9a" class="header-anchor"&gt;&lt;/a&gt;Git プロバイダの接続
&lt;/h3&gt;&lt;p&gt;GitHub だけでなく &lt;strong&gt;GitLab も公式サポート&lt;/strong&gt;されています。&lt;br&gt;
&lt;strong&gt;GitLab&lt;/strong&gt; のタブを選択し、&lt;strong&gt;Connect GitLab&lt;/strong&gt; から OAuth で認証を行います。&lt;br&gt;
認証後、対象リポジトリを選び、&lt;strong&gt;Begin setup&lt;/strong&gt; を選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="415px" data-flex-grow="173" height="549" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/05.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/05_hu_29852ce65aaaecb.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/05.webp 951w" width="951"&gt;&lt;/p&gt;
&lt;h3 id="ビルド設定で指定する項目"&gt;&lt;a href="#%e3%83%93%e3%83%ab%e3%83%89%e8%a8%ad%e5%ae%9a%e3%81%a7%e6%8c%87%e5%ae%9a%e3%81%99%e3%82%8b%e9%a0%85%e7%9b%ae" class="header-anchor"&gt;&lt;/a&gt;ビルド設定で指定する項目
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Framework preset&lt;/strong&gt;: 使っているフレームワークに該当があれば選びます。自前のシェルスクリプトでビルドするなら None で構いません&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build command&lt;/strong&gt;: リポジトリ直下から実行されるビルドコマンド&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Build output directory&lt;/strong&gt;: 成果物のディレクトリ（例: &lt;code&gt;dist&lt;/code&gt;、&lt;code&gt;public&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Root directory&lt;/strong&gt;: 通常は空欄でリポジトリ直下&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment variables&lt;/strong&gt;: 必要に応じて設定します&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="286px" data-flex-grow="119" height="785" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/06.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/06_hu_7c9afe961a914c17.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/06.webp 936w" width="936"&gt;&lt;/p&gt;
&lt;h3 id="初回デプロイの確認"&gt;&lt;a href="#%e5%88%9d%e5%9b%9e%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4%e3%81%ae%e7%a2%ba%e8%aa%8d" class="header-anchor"&gt;&lt;/a&gt;初回デプロイの確認
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Save and Deploy&lt;/strong&gt; を選択すると数分でビルドが走り、プレビュー URL（&lt;code&gt;&amp;lt;project&amp;gt;.pages.dev&lt;/code&gt;）が発行されます。&lt;br&gt;
ここでまず動作確認をしてから、カスタムドメインを当てに行きます。&lt;/p&gt;
&lt;h2 id="カスタムドメインの設定"&gt;&lt;a href="#%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%89%e3%83%a1%e3%82%a4%e3%83%b3%e3%81%ae%e8%a8%ad%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;カスタムドメインの設定
&lt;/h2&gt;&lt;p&gt;DNS も Cloudflare で管理しているなら、ほぼワンクリックで終わります。&lt;/p&gt;
&lt;p&gt;初回デプロイ完了後、&lt;strong&gt;Add custom domain&lt;/strong&gt; を選択するとカスタムドメインの設定画面に移行します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="336px" data-flex-grow="140" height="685" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/07.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/07_hu_5616fba272d14413.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/07.webp 959w" width="959"&gt;&lt;/p&gt;
&lt;p&gt;メニューからアクセスする場合は、&lt;strong&gt;Workers &amp;amp; Pages&lt;/strong&gt; の &lt;strong&gt;Custom domains&lt;/strong&gt; タブを選択します。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="558px" data-flex-grow="232" height="459" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/08.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/08_hu_fda31703fcc12606.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/08.webp 1069w" width="1069"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Set up a custom domain&lt;/strong&gt; を選択します。&lt;br&gt;
続いて、適用したいドメインを入力し、&lt;strong&gt;Continue&lt;/strong&gt; をクリックします。&lt;br&gt;
すると、&lt;strong&gt;CNAME レコードが自動で追加されます&lt;/strong&gt;（手動編集は不要です）。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="502px" data-flex-grow="209" height="438" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/09.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/09_hu_4303b6333e2844ea.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/09.webp 917w" width="917"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Activate domain&lt;/strong&gt; をクリックすると設定完了です。&lt;br&gt;
TLS 証明書も Cloudflare 側で自動発行されます（数分待ちます）&lt;/p&gt;
&lt;h3 id="ssltls-モードの変更"&gt;&lt;a href="#ssltls-%e3%83%a2%e3%83%bc%e3%83%89%e3%81%ae%e5%a4%89%e6%9b%b4" class="header-anchor"&gt;&lt;/a&gt;SSL/TLS モードの変更
&lt;/h3&gt;&lt;p&gt;SSL/TLS モードは &lt;strong&gt;Full (strict)&lt;/strong&gt; にしておきます。&lt;br&gt;
Cloudflare Pages の出口側は有効な証明書を持つので、Full (strict) でもエラーにはならず、Flexible のように HTTPS が中途半端な状態を避けられます。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SSL/TLS&lt;/strong&gt; の &lt;strong&gt;Overview&lt;/strong&gt; を選択し、SSL/TLS encryption の &lt;strong&gt;Configure&lt;/strong&gt; をクリックします。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="558px" data-flex-grow="232" height="555" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/10.webp" srcset="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/10_hu_7d12418840684b2a.webp 800w, https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/10.webp 1292w" width="1292"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Full (Strict)&lt;/strong&gt; を選択して、&lt;strong&gt;Save&lt;/strong&gt; をクリックして完了です。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="254px" data-flex-grow="105" height="638" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog-0847c6.gitlab.io/posts/2026/05/17/cloudflare-pages-gitlab/11.webp" width="676"&gt;&lt;/p&gt;
&lt;h2 id="気をつけること"&gt;&lt;a href="#%e6%b0%97%e3%82%92%e3%81%a4%e3%81%91%e3%82%8b%e3%81%93%e3%81%a8" class="header-anchor"&gt;&lt;/a&gt;気をつけること
&lt;/h2&gt;&lt;h3 id="node_version-の明示"&gt;&lt;a href="#node_version-%e3%81%ae%e6%98%8e%e7%a4%ba" class="header-anchor"&gt;&lt;/a&gt;&lt;code&gt;NODE_VERSION&lt;/code&gt; の明示
&lt;/h3&gt;&lt;p&gt;Cloudflare Pages のデフォルト Node は古いことがあります。&lt;br&gt;
&lt;code&gt;package.json&lt;/code&gt; の &lt;code&gt;engines&lt;/code&gt; だけでは効かないので、&lt;strong&gt;ビルド設定の環境変数で明示します&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id="ビルド時間と無料枠"&gt;&lt;a href="#%e3%83%93%e3%83%ab%e3%83%89%e6%99%82%e9%96%93%e3%81%a8%e7%84%a1%e6%96%99%e6%9e%a0" class="header-anchor"&gt;&lt;/a&gt;ビルド時間と無料枠
&lt;/h3&gt;&lt;p&gt;無料枠は &lt;strong&gt;同時ビルド 1 並列・月 500 回まで&lt;/strong&gt;です。&lt;br&gt;
push のたびにビルドが走るので、頻繁な push を続けると上限に近づきます。CI ライクに何度も push しまくる運用には向きません。&lt;/p&gt;
&lt;p&gt;初回ビルドは &lt;code&gt;npm install&lt;/code&gt; がフレッシュで 5〜10 分かかることもあります。2 回目以降はキャッシュが効きます。&lt;/p&gt;
&lt;h3 id="プレビュー-url-の検索エンジン除外"&gt;&lt;a href="#%e3%83%97%e3%83%ac%e3%83%93%e3%83%a5%e3%83%bc-url-%e3%81%ae%e6%a4%9c%e7%b4%a2%e3%82%a8%e3%83%b3%e3%82%b8%e3%83%b3%e9%99%a4%e5%a4%96" class="header-anchor"&gt;&lt;/a&gt;プレビュー URL の検索エンジン除外
&lt;/h3&gt;&lt;p&gt;Cloudflare Pages は本番ドメイン以外（&lt;code&gt;&amp;lt;project&amp;gt;.pages.dev&lt;/code&gt; や &lt;code&gt;&amp;lt;branch&amp;gt;.&amp;lt;project&amp;gt;.pages.dev&lt;/code&gt;）にも &lt;strong&gt;自動で &lt;code&gt;X-Robots-Tag: noindex&lt;/code&gt; を付けます&lt;/strong&gt;。Google にプレビュー版がインデックスされる事故は基本的に起きません。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;&lt;a href="#%e3%81%be%e3%81%a8%e3%82%81" class="header-anchor"&gt;&lt;/a&gt;まとめ
&lt;/h2&gt;&lt;p&gt;すべて &lt;strong&gt;無料枠&lt;/strong&gt;で完結し、自前のサーバー運用はゼロです。&lt;br&gt;
GitLab に push して数分で本番反映される、最小構成になっています。&lt;/p&gt;
&lt;p&gt;GitLab Pages + Cloudflare プロキシでも同じことはできますが、TXT 検証や SSL モード調整など「2 サービスを連携させるための作業」が発生します。&lt;br&gt;
Cloudflare 内で完結させると、覚えることが 1 箇所にまとまって精神的に楽です。&lt;/p&gt;</description></item></channel></rss>