Skip to content

LPを刷新してCloudflare Pagesで配信する - #57

Merged
bannzai merged 2 commits into
mainfrom
issue-56
Sep 12, 2026
Merged

bannzai merged 2 commits into
mainfrom
issue-56

Conversation

@bannzai

@bannzai bannzai commented Sep 12, 2026

Copy link
Copy Markdown
Owner

概要

Refs #56

LP を Cloudflare Pages へ移して刷新し、購入した signalarm.app を接続しました。LP・API リファレンス・連携レシピ・法務文書は https://signalarm.app/ で配信中です。外部サービス向け API の公開ホストは api.signalarm.app とし、Cloudflare Worker で Functions の alarmsApi へ中継する方式を ADR 0006 に記録しました。Issue が挙げた Cloud Run のドメインマッピング・Firebase Hosting の rewrite ではなく第 3 の方式を選んでいます (理由は ADR)。

「main へのマージで Pages が自動配信される workflow が 1 回成功している」と旧 GitHub Pages の停止はマージ後にしか満たせないため、Closes ではなく Refs にしています。マージ後に agent が配信結果と GitHub Pages の停止を確認して #56 を閉じます。

変更点

  • LP を日本語で刷新し、API トークン発行 → curl → AlarmKit アラームの導線と、オンコール・Home Assistant・cron の用途を掲載しました。公開前なのでストア公開済みと誤認する CTA は置いていません。
  • 既存 Markdown を marked で HTML 化し、拡張子なし URL と相対リンクを維持します。原本と生成物の二重管理を避け、tmp/site だけを配信します。旧 GitHub Pages 用の Jekyll 設定 docs/_config.yml は削除しました。
  • PR ではサイトを生成・検査し、main へのマージでは environment cloudflare-pages の Secrets で Pages に配信する workflow を追加しました。
  • api.signalarm.app の Cloudflare Worker (scripts/api-proxy/) を追加しました。パス・メソッド・ヘッダー・ボディを変えずに alarmsApi の Cloud Run URL へ転送するだけで、認証・レート制限は Functions 側のままです。main への変更で wrangler deploy する workflow api-proxy-deploy.yml も追加しています。
  • api.alarmify.app のプレースホルダーと Functions の URL 直書き (docs/ の API リファレンス・6 レシピ・LP の curl) を api.signalarm.app に置き換え、アプリの AlarmifyBackend.alarmsAPIBaseURL の production も同じホストにしました (連携レシピ画面の表示が docs/ と揃います。emulator は従来どおり)。
  • アプリ内の法務リンク・レシピのドキュメント URL・API リファレンスのリンク、fastlane metadata の support_url / privacy_urlbannzai.github.io/Alarmify/ から https://signalarm.app/ (法務文書は拡張子なし URL) に差し替えました。
  • documents/PROJECT.md と AGENTS.md に公開ドメインと配信経路を記載しました。

Cloudflare 側の変更 (API で実施済み)

  • Pages プロジェクト signalarm に custom domain signalarm.app を追加し、zone に CNAME signalarm.app → signalarm.pages.dev (proxied) を作成。custom domain は active
  • Worker signalarm-apiapi.signalarm.app の custom domain に配信済み (agent の wrangler deploy は Claude Code の auto mode 判定で拒否されたため、bannzai がやる作業の一覧 (Secrets・Apple/ASC の Web UI 操作・実機検証・デザイン受領) #25 の依頼を受けて bannzai が実行)。POST https://api.signalarm.app/v1/alarmsDELETE /v1/alarms/{id} が未認証で 401 を返し、応答ボディは Cloud Run の直接 URL と一致

検証

  • npm run build --prefix scripts/sitenpm test --prefix scripts/site: 成功、リンク・アセット・アンカーと Markdown 変換の 2 テストが合格
  • npm test --prefix scripts/api-proxy: 成功、Worker の転送 (URL 差し替え・メソッド・ヘッダー・ボディ保持) の 2 テストが合格
  • bash ~/.agents/skills/landing-page-builder/scripts/verify-lp.sh --app-store-support --has-account docs/index.html: 成功
  • make build-ios: BUILD SUCCEEDED (コンパイラの warning / error なし)。make test: TEST SUCCEEDED、71 テスト・失敗 0・skip 3 (StoreKit Testing が iOS 26.5 simulator で動かないための既知の skip)
  • agent-browser で 1440 px / 390 px の表示を確認。モバイルの横はみ出しなし、コンソール・ページエラーなし (URL 差し替え前の撮影。以降の変更は文字列だけで見た目は変わらないため撮り直していません)
  • https://signalarm.app//api/PrivacyPolicy-ja/recipes/home-assistant が HTTP 200、存在しない URL は 404。配信中の LP に pages.dev・cloudfunctions.net の記述が残っていないことを確認
  • wrangler pages deploy tmp/site --project-name signalarm --branch main --commit-dirty=true で最新の生成物を配信済み (この PR の内容が https://signalarm.app/ に反映されています)
  • Pages workflow の build ジョブが GitHub Actions 上で成功しました (2 テスト合格)。deploy ジョブは PR なので意図どおり skip です。 https://github.com/bannzai/Alarmify/actions/runs/34688262022
  • grep -rn api.alarmify.app がリポジトリ内で 0 件
  • Functions の変更はないため、Functions のテストは実施していません。アプリの画面は URL の文字列以外変わらないため simulator での再確認はしていません

デスクトップ表示

デスクトップ表示

デスクトップ表示

モバイル表示

モバイル表示

モバイル表示

未達の完了条件

マージ後にしか確認できない項目です。マージ後に agent が確認して #56 を閉じます。

Codex ローカルレビュー

  • 対象: origin/main との全差分 (head 94973c7。LP 刷新に加えて signalarm.app / api.signalarm.app への切り替えと Worker を含む)。モデル gpt-6-astra、effort low、1 ラウンド
  • 結果: 指摘 0 件 (accept 0 / reject 0 / 修正済み 0)。Codex は「修正すべき具体的な不具合は見つからない。Worker とサイト生成物のテスト計 4 件は成功」と判定
  • Codex はサイトの再ビルド・iOS ビルド・配信経路を未検証としたが、実装側で npm run build / npm test (site・api-proxy)・make build-iosmake test・Pages への配信と https://signalarm.app/ の表示を確認済み。Worker の配信だけは未実施 (本文「Cloudflare 側の変更」)
  • 前回 (head 03ae753) のレビューも指摘 0 件。本文 tmp/codex-review/review-20260912-200717.md、全文ログ tmp/codex-review/review-20260912-200717.log

人間が確認

なし

セッション再開

cd /Users/bannzai/worktrees/bannzai/Alarmify/issue-56
claude --resume 1ae43067-7549-4c00-ae44-552f2467edca

概要

日本語のランディングページを刷新しました。WebhookからiPhoneのAlarmKitアラームを発火する手順と、オンコール、Home Assistant、cron向けの連携例を掲載しました。

主な変更

  • docs/index.htmlを日本語化
  • APIトークン発行からcurl実行までの導線を追加
  • APIリファレンスや法務ページなどのMarkdownをHTMLへ変換するサイト生成処理を追加
  • 拡張子なしURL、相対リンク、アンカーリンクを維持
  • tmp/siteのみを配信対象に設定
  • 生成済みサイトのリンク、アセット、アンカーを検査するテストを追加
  • OGP、canonical URL、JSON-LD、404ページを追加
  • Cloudflare Pagesへの検証・配信workflowを追加
  • Wranglerの生成ファイルを.gitignoreに追加
  • 公開ドメインとAPIドメインの方針をdocuments/PROJECT.mdに記載

配信

mainへのマージ時に、GitHub ActionsからCloudflare Pagesへサイトを配信します。プルリクエストではサイト生成と検査のみを実行します。

@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 60974644-7631-4144-9ac3-7e8ad55f38fb

📥 Commits

Reviewing files that changed from the base of the PR and between 41f8379 and 03ae753.

⛔ Files ignored due to path filters (1)
  • scripts/site/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (8)
  • .github/workflows/pages-deploy.yml
  • .gitignore
  • docs/document.css
  • docs/index.html
  • documents/PROJECT.md
  • scripts/site/build.mjs
  • scripts/site/build.test.mjs
  • scripts/site/package.json

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The PR adds Japanese SignalArm site content, a Markdown-to-HTML build package, output validation tests, and a GitHub Actions workflow that deploys validated builds to Cloudflare Pages.

Changes

SignalArm static site

Layer / File(s) Summary
Japanese site content and styling
docs/index.html, docs/document.css, documents/PROJECT.md
The landing page now uses Japanese content, SignalArm URLs, updated API examples, revised sections, and responsive dark-theme styling. Domain plans are documented.
Static site build and validation
scripts/site/package.json, scripts/site/build.mjs, scripts/site/build.test.mjs
The new package converts Markdown files to HTML, copies supported assets, writes 404.html, removes stale output, and checks links, anchors, rendered tables, and code blocks.
Build and Cloudflare Pages deployment
.github/workflows/pages-deploy.yml, .gitignore
GitHub Actions builds and tests the site for relevant changes. Successful pushes to main deploy tmp/site to Cloudflare Pages. Wrangler state is ignored.

Priority: ➖ Normal

Estimated code review effort: 3 (Moderate) | ~25 minutes

Change: Feature

Sequence Diagram(s)

sequenceDiagram
  participant GitHubActions
  participant BuildJob
  participant DeployJob
  participant CloudflarePages
  GitHubActions->>BuildJob: Install dependencies, build site, run tests
  BuildJob-->>DeployJob: Build and tests succeed
  DeployJob->>CloudflarePages: Deploy tmp/site with Wrangler
Loading

Merge Risk: ⚪ Minimal · up to 03ae7

The static site build, validation, and deployment path have no identified merge-blocking risks.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 2 files. (6 skipped: 6 …
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed タイトルは、LPの刷新とCloudflare Pagesでの配信という変更の主要内容を簡潔かつ具体的に示しています。
Description check ✅ Passed 説明にはテンプレート必須の「概要」「変更点」「人間が確認」が含まれています。実施内容、検証結果、未達条件も具体的に記載されています。
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-56

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

A rabbit checks each page at night
Links and anchors line up right
Markdown blooms in HTML light
Cloudflare carries the site in flight
SignalArm rests in pixels bright

Comment @coderabbitai help to get the list of available commands.

Cloudflare Registrar で購入した signalarm.app を Cloudflare Pages の
プロジェクト signalarm に接続し (API で custom domain と CNAME を作成)、
外部サービス向け API の公開ホスト api.signalarm.app を Cloudflare Worker
(scripts/api-proxy/) で Functions の alarmsApi へ中継する方式に決めた
(documents/adr/0006)。Cloud Run のドメインマッピングは Preview で Google
アカウントのドメイン所有確認 (ブラウザ操作) が要り、Firebase Hosting は
別の deploy と証明書待ちが増えるため採らなかった。

- docs/ と アプリ内の連携レシピの api.alarmify.app プレースホルダーと
  Functions の URL 直書きを api.signalarm.app に置き換える
- LP の canonical / OGP / JSON-LD、法務リンク、レシピのドキュメント URL、
  fastlane metadata の support_url / privacy_url を signalarm.app にする
- GitHub Pages を停止する前提で Jekyll 設定 docs/_config.yml を削除する
- api-proxy-deploy.yml を追加し、main への変更で Worker を配信する

Refs #56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant