生活、学び、遊び、仕事など、複数ジャンルの個人開発アプリを掲載する静的ポータルです。
- ルート: アプリ一覧
/apps/{app-slug}/: アプリ専用LP/apps/{app-slug}/privacy: プライバシーポリシー/apps/{app-slug}/terms: 利用規約/apps/{app-slug}/contact: お問い合わせ
Important
「あしたもつもの」の正式名称、問い合わせ先、Production originはdocs/public-identity.mdで管理します。公開表示は「あしたもつもの」、問い合わせ先はkaenozu@gmail.com、Production originはhttps://lp-5t7.pages.devです。
- Production URL:
https://lp-5t7.pages.dev - Cloudflare Pagesプロジェクト:
lp - 配信方式: Direct Upload
- Productionブランチ:
master - 自動デプロイ: GitHub Actionsの
Deploy to Cloudflare Pages
HTML、CSS、JavaScriptだけで構成し、フロントエンドフレームワークは使用していません。
tool/prepare_site.shが公開専用ディレクトリ_site/を生成します。
index.html
robots.txt
sitemap.xml
_headers
assets/
apps/
.github/、docs/、tool/、README.mdは配信しません。
_headersではCSP、Permissions Policy、Referrer Policy、MIME sniffing防止、frame制限、Cross-Origin Policyを設定します。
tool/site_manifest.jsonを公開アプリの単一の定義元として使用します。
管理項目:
- URLスラッグ
- 表示名
- 公開状態
- Google Play URL
- App Store URL
- アプリごとのOGP画像
- 実画面スクリーンショット
- JavaScript実行後に期待する実画面画像数
公開状態:
preparing: 準備中。ストアリンクを表示しないpublished: 公開中。Google PlayまたはApp Storeの正式URLが必須suspended: 公開停止中。主要ストア導線を表示しない
ルートのアプリカードはdata-app-slug、data-release-status、data-release-status-labelでmanifestと対応させます。
tool/validate_site.pyは、manifest、ポータルカード、アプリLP、ストアURLの整合を検証します。publishedなのに正式ストアURLがない場合や、準備中のLPがストアリンクを公開している場合はCIを失敗させます。
詳細はdocs/store-release.mdを参照してください。
Search ConsoleのHTMLタグ確認値は、Repository variable SEARCH_CONSOLE_VERIFICATIONからデプロイ成果物へ注入します。
<meta name="google-site-verification" content="Repository variableの値">
値が未設定の場合、検証タグは出力しません。Googleアカウント上でURLプレフィックスプロパティを作成し、確認値を発行してから設定します。
手順はdocs/search-console.mdを参照してください。
masterへのpushで次を実行します。
_site/を生成- Search Console確認値が設定済みならルートへ注入
- 全JavaScriptの構文を確認
- HTML、公開状態、ストアURL、画像、canonical、OGP、sitemap、内部リンクを検証
- Cloudflare Pagesへデプロイ
- デプロイ固有URLの全公開ページ、資産、セキュリティヘッダーを検証
- Productionの全公開ページ、資産、セキュリティヘッダーを検証
- commit statusを記録
記録するStatus:
cloudflare-pages-productioncloudflare-pages-brand-verificationproduction-browser-verificationlighthouse-productionproduction-accessibility-semantics
Production検証はsitemap.xmlに掲載された全ページを対象とします。LPだけでなくprivacy、terms、contactも検査します。
PRではProduction URLではなく、PR headから生成した_site/を127.0.0.1で配信して検査します。
.github/workflows/validate.yml
- 公開物の許可リスト
- manifestとHTML集合の一致
- 公開状態、ストアURL、ポータルカード、LP導線の一致
- 全ページのcanonical、
og:url、OGP、Twitter Card .html付き内部リンクの禁止- PNG/WebPの形式と寸法
- sitemapの完全一致
- 全JavaScriptの構文
- Search Console注入処理の単体テスト
- Production監査コードの契約テスト
.github/workflows/validate-production-browser.yml
「あしたもつもの」:
- 実画面4点の表示
- eager/lazy/fetchpriority
- 390px、820px、1440pxの配置
- 横overflow
- キーボードフォーカス
- reduced motion
- JavaScript無効時のHTMLモック
- スクリーンショットCSS失敗時のHTMLモック
- WebP画像失敗時のHTMLモック
「へぇの種」:
- 4択クイズの回答処理
- 正解/不正解表示
- 回答後のフォーカス移動
- 全選択肢の無効化
- noscript表示
- 390px、820px、1440pxの横overflow
.github/workflows/audit-production-accessibility.yml
両アプリについて次を確認します。
/index.html直接アクセスhtml[lang]- 見出し階層
- header、main、footer、nav
- リンクのアクセシブルネーム
- Chrome Accessibility Tree
- 画像代替テキスト
- 200%文字拡大
- テキスト欠落と横overflow
PRジョブはcontents: readのみです。Status書き込みはデプロイ後または手動Production監査の別ジョブに限定します。
.github/workflows/audit-production.ymlはデプロイ成功後、手動実行、毎週月曜日に実行します。
- 両アプリのブラウザ操作
- フォールバック
- Lighthouse mobile/desktop
- 各モード3回測定
- Accessibility 0.95以上
- Best Practices 0.90以上
- SEO 0.90以上
- Performance 0.80未満は警告
レポートとスクリーンショットはGitHub Actions artifactに30日保存し、外部の一時公開ストレージへアップロードしません。
.github/workflows/daily-production-health.ymlは毎日06:17 JST相当と手動実行で、次を確認します。
- 全sitemap URL
- OGP、favicon、CSS、JavaScript、スクリーンショット
- Productionセキュリティヘッダー
失敗時は[monitor] Production LP health check failed Issueを作成または更新します。回復時は回復runを記録してIssueを閉じます。失敗ログは14日保存します。
詳細はdocs/production-audit.mdを参照してください。
ストア提出前に、提出ビルドの実装、LPのプライバシーポリシー/利用規約、ストア申告を照合します。
確認対象:
- 分析、クラッシュ、広告、課金
- 外部AI/APIへの送信
- 端末内・クラウド保存
- 画像、通知、各権限
- データ削除方法
- 対象年齢
- Google Playデータセーフティ
- App Store App Privacyを使用する場合の回答
チェックシートはdocs/release-legal-checklist.mdです。
bash tool/prepare_site.sh
python3 tool/validate_site.py _site
python3 -m unittest tool/test_production_audit.py
python3 -m unittest tool/test_production_accessibility_audit.py
python3 -m unittest tool/test_release_operations.py
python3 -m http.server 8123 --directory _siteブラウザでhttp://127.0.0.1:8123へアクセスします。HTMLファイルを直接開くとルート絶対パスのCSSやJavaScriptを正しく確認できません。
Search Console確認タグを含めてローカル生成する場合:
SEARCH_CONSOLE_VERIFICATION=verification_token bash tool/prepare_site.sh
SEARCH_CONSOLE_VERIFICATION=verification_token python3 tool/validate_site.py _site全JavaScriptの構文確認:
while IFS= read -r -d '' file; do
node --check "$file"
done < <(find _site tool -type f \( -name '*.js' -o -name '*.cjs' \) -print0 | sort -z)Productionのヘッダー確認:
python3 tool/check_production_headers.py https://lp-5t7.pages.dev//
├── .github/workflows/
│ ├── deploy.yml
│ ├── validate.yml
│ ├── validate-production-audit.yml
│ ├── validate-production-browser.yml
│ ├── audit-production.yml
│ ├── audit-production-accessibility.yml
│ └── daily-production-health.yml
├── _headers
├── index.html
├── robots.txt
├── sitemap.xml
├── lighthouserc.mobile.cjs
├── lighthouserc.desktop.cjs
├── assets/
├── apps/
│ ├── ashita-motsumono/
│ └── ehenotane/
├── tool/
│ ├── site_manifest.json
│ ├── prepare_site.sh
│ ├── inject_search_console_verification.py
│ ├── validate_site.py
│ ├── verify_remote_site.py
│ ├── check_production_headers.py
│ └── test_*.py
└── docs/
├── app-lp-template.md
├── new-app-checklist.md
├── production-audit.md
├── public-identity.md
├── release-legal-checklist.md
├── search-console.md
└── store-release.md
公開URLはextensionless形式へ統一します。
/apps/{slug}/privacy
/apps/{slug}/terms
/apps/{slug}/contact
実ファイル名はprivacy.html、terms.html、contact.htmlです。内部リンク、canonical、og:url、sitemapに.htmlを含めません。
docs/app-lp-template.mdとdocs/new-app-checklist.mdを使用してください。
最低限更新する項目:
apps/{slug}/の4ページtool/site_manifest.json- ルートカードと公開状態data属性
sitemap.xmlassets/brand/og-{slug}.png- 操作可能なUIがある場合はPuppeteer監査
- Search ConsoleでURLプレフィックスプロパティを作成し、発行された確認値をRepository variableへ登録する
- Search Consoleへ
sitemap.xmlを送信し、主要URLのインデックス状況を確認する - 各アプリの公開直前に
docs/release-legal-checklist.mdを完了する - Google Play/App Store公開後に
docs/store-release.mdに従って正式ストアURLを反映する - 実機スマートフォン、タブレット、キーボード操作をリリースごとに確認する