create-ampless 0.2.0-alpha.8 → 1.0.0-alpha.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.ja.md +77 -0
  2. package/README.md +6 -3
  3. package/dist/index.js +1282 -93
  4. package/dist/templates/_shared/AGENTS.ja.md +94 -0
  5. package/dist/templates/_shared/AGENTS.md +94 -0
  6. package/dist/templates/_shared/README.ja.md +239 -0
  7. package/dist/templates/_shared/README.md +239 -0
  8. package/dist/templates/_shared/RUNBOOK.ja.md +120 -0
  9. package/dist/templates/_shared/RUNBOOK.md +32 -58
  10. package/dist/templates/_shared/THEMES.ja.md +495 -0
  11. package/dist/templates/_shared/THEMES.md +523 -0
  12. package/dist/templates/_shared/amplify/auth/post-confirmation/resource.ts +7 -0
  13. package/dist/templates/_shared/amplify/backend.custom.ts +41 -0
  14. package/dist/templates/_shared/amplify/backend.ts +20 -2
  15. package/dist/templates/_shared/amplify/data/get-media-by-src.js +45 -0
  16. package/dist/templates/_shared/amplify/data/get-published-post.js +9 -12
  17. package/dist/templates/_shared/amplify/data/list-posts-by-tag.js +6 -9
  18. package/dist/templates/_shared/amplify/data/list-published-posts.js +10 -11
  19. package/dist/templates/_shared/amplify/data/resource.custom.ts +32 -0
  20. package/dist/templates/_shared/amplify/data/resource.ts +32 -15
  21. package/dist/templates/_shared/amplify/events/dispatcher/resource.ts +1 -0
  22. package/dist/templates/_shared/amplify/events/processor-trusted/resource.ts +1 -0
  23. package/dist/templates/_shared/amplify/events/processor-untrusted/resource.ts +5 -0
  24. package/dist/templates/_shared/amplify/functions/api-key-renewer/resource.ts +1 -0
  25. package/dist/templates/_shared/amplify/functions/mcp-handler/handler.ts +1 -0
  26. package/dist/templates/_shared/amplify/functions/mcp-handler/resource.ts +12 -0
  27. package/dist/templates/_shared/amplify/functions/plugin-secret-handler/handler.ts +11 -0
  28. package/dist/templates/_shared/amplify/functions/plugin-secret-handler/resource.ts +12 -0
  29. package/dist/templates/_shared/amplify/functions/user-admin/handler.ts +4 -0
  30. package/dist/templates/_shared/amplify/functions/user-admin/resource.ts +13 -0
  31. package/dist/templates/_shared/amplify/secrets/.gitkeep +0 -0
  32. package/dist/templates/_shared/amplify/secrets/encryption-key.ts +9 -0
  33. package/dist/templates/_shared/app/(admin)/admin/mcp-tokens/page.tsx +5 -0
  34. package/dist/templates/_shared/app/(admin)/admin/plugins/page.tsx +5 -0
  35. package/dist/templates/_shared/app/(admin)/admin/users/page.tsx +5 -0
  36. package/dist/templates/_shared/app/globals.css +55 -39
  37. package/dist/templates/_shared/app/layout.tsx +51 -16
  38. package/dist/templates/_shared/app/providers.tsx +0 -2
  39. package/dist/templates/_shared/app/raw/[slug]/route.ts +10 -0
  40. package/dist/templates/_shared/app/static/[slug]/[[...path]]/route.ts +14 -0
  41. package/dist/templates/_shared/cms.config.ts +64 -23
  42. package/dist/templates/_shared/components/site-chrome/site-sidebar.tsx +3 -4
  43. package/dist/templates/_shared/components/tag-list.tsx +9 -2
  44. package/dist/templates/_shared/components.json +1 -1
  45. package/dist/templates/_shared/docs/plugin-author-guide.ja.md +934 -0
  46. package/dist/templates/_shared/docs/plugin-author-guide.md +1336 -0
  47. package/dist/templates/_shared/lib/admin.ts +12 -12
  48. package/dist/templates/_shared/lib/ampless.ts +2 -8
  49. package/dist/templates/_shared/lib/amplify.ts +0 -5
  50. package/dist/templates/_shared/package.json +51 -40
  51. package/dist/templates/_shared/plugins/README.ja.md +139 -0
  52. package/dist/templates/_shared/plugins/README.md +143 -0
  53. package/dist/templates/_shared/proxy.ts +23 -8
  54. package/dist/templates/blog/README.ja.md +22 -0
  55. package/dist/templates/blog/README.md +17 -47
  56. package/dist/templates/blog/manifest.ts +1 -1
  57. package/dist/templates/blog/pages/feed.ts +4 -5
  58. package/dist/templates/blog/pages/home.tsx +10 -15
  59. package/dist/templates/blog/pages/post.tsx +42 -14
  60. package/dist/templates/blog/pages/sitemap.ts +4 -5
  61. package/dist/templates/blog/pages/tag.tsx +8 -10
  62. package/dist/templates/blog/tokens.css +26 -40
  63. package/dist/templates/corporate/README.ja.md +18 -0
  64. package/dist/templates/corporate/README.md +12 -14
  65. package/dist/templates/corporate/pages/feed.ts +3 -4
  66. package/dist/templates/corporate/pages/home.tsx +7 -12
  67. package/dist/templates/corporate/pages/post.tsx +20 -14
  68. package/dist/templates/corporate/pages/sitemap.ts +3 -4
  69. package/dist/templates/corporate/pages/tag.tsx +8 -10
  70. package/dist/templates/corporate/tokens.css +17 -39
  71. package/dist/templates/dads/README.ja.md +31 -0
  72. package/dist/templates/dads/README.md +13 -17
  73. package/dist/templates/dads/pages/feed.ts +3 -4
  74. package/dist/templates/dads/pages/home.tsx +7 -12
  75. package/dist/templates/dads/pages/post.tsx +20 -14
  76. package/dist/templates/dads/pages/sitemap.ts +3 -4
  77. package/dist/templates/dads/pages/tag.tsx +8 -10
  78. package/dist/templates/dads/tokens.css +22 -42
  79. package/dist/templates/docs/README.ja.md +24 -0
  80. package/dist/templates/docs/README.md +10 -13
  81. package/dist/templates/docs/pages/feed.ts +3 -4
  82. package/dist/templates/docs/pages/home.tsx +6 -9
  83. package/dist/templates/docs/pages/post.tsx +19 -13
  84. package/dist/templates/docs/pages/sitemap.ts +3 -4
  85. package/dist/templates/docs/pages/tag.tsx +8 -10
  86. package/dist/templates/docs/tokens.css +17 -39
  87. package/dist/templates/landing/README.ja.md +20 -0
  88. package/dist/templates/landing/README.md +14 -19
  89. package/dist/templates/landing/pages/feed.ts +4 -5
  90. package/dist/templates/landing/pages/home.tsx +7 -12
  91. package/dist/templates/landing/pages/post.tsx +20 -14
  92. package/dist/templates/landing/pages/sitemap.ts +3 -4
  93. package/dist/templates/landing/pages/tag.tsx +8 -10
  94. package/dist/templates/landing/tokens.css +17 -39
  95. package/dist/templates/minimal/README.ja.md +14 -0
  96. package/dist/templates/minimal/README.md +9 -47
  97. package/dist/templates/minimal/pages/feed.ts +4 -5
  98. package/dist/templates/minimal/pages/home.tsx +6 -8
  99. package/dist/templates/minimal/pages/post.tsx +19 -12
  100. package/dist/templates/minimal/pages/sitemap.ts +4 -5
  101. package/dist/templates/minimal/pages/tag.tsx +7 -8
  102. package/dist/templates/minimal/tokens.css +17 -39
  103. package/dist/templates/plugin-local/README.md +34 -0
  104. package/dist/templates/plugin-local/index.ts +39 -0
  105. package/dist/templates/plugin-standalone/CHANGELOG.md +1 -0
  106. package/dist/templates/plugin-standalone/README.ja.md +43 -0
  107. package/dist/templates/plugin-standalone/README.md +43 -0
  108. package/dist/templates/plugin-standalone/package.json +47 -0
  109. package/dist/templates/plugin-standalone/src/index.test.ts +16 -0
  110. package/dist/templates/plugin-standalone/src/index.ts +29 -0
  111. package/dist/templates/plugin-standalone/tsconfig.json +16 -0
  112. package/dist/templates/plugin-standalone/tsup.config.ts +8 -0
  113. package/package.json +1 -1
  114. package/dist/templates/_shared/app/(admin)/admin/sites/page.tsx +0 -5
  115. package/dist/templates/_shared/app/site/[siteId]/raw/[slug]/route.ts +0 -5
  116. package/dist/templates/_shared/components/i18n-provider.tsx +0 -15
  117. package/dist/templates/_shared/lib/admin-site-client.ts +0 -10
  118. package/dist/templates/_shared/lib/admin-site.ts +0 -12
  119. package/dist/templates/_shared/lib/amplify-server.ts +0 -7
  120. package/dist/templates/_shared/lib/auth-server.ts +0 -15
  121. package/dist/templates/_shared/lib/cn.ts +0 -5
  122. package/dist/templates/_shared/lib/i18n.ts +0 -35
  123. package/dist/templates/_shared/lib/kv-provider.ts +0 -7
  124. package/dist/templates/_shared/lib/media.ts +0 -6
  125. package/dist/templates/_shared/lib/posts-provider.ts +0 -7
  126. package/dist/templates/_shared/lib/posts-public.ts +0 -27
  127. package/dist/templates/_shared/lib/posts.ts +0 -12
  128. package/dist/templates/_shared/lib/seo.ts +0 -11
  129. package/dist/templates/_shared/lib/site-settings.ts +0 -11
  130. package/dist/templates/_shared/lib/storage.ts +0 -10
  131. package/dist/templates/_shared/lib/theme-actions.ts +0 -5
  132. package/dist/templates/_shared/lib/theme-active.ts +0 -10
  133. package/dist/templates/_shared/lib/theme-config.ts +0 -12
  134. package/dist/templates/_shared/lib/upload.ts +0 -6
  135. /package/dist/templates/_shared/app/{site/[siteId]/[slug] → [slug]}/page.tsx +0 -0
  136. /package/dist/templates/_shared/app/{site/[siteId]/feed.xml → feed.xml}/route.ts +0 -0
  137. /package/dist/templates/_shared/app/{site/[siteId]/og → og}/[slug]/route.ts +0 -0
  138. /package/dist/templates/_shared/app/{site/[siteId]/page.tsx → page.tsx} +0 -0
  139. /package/dist/templates/_shared/app/{site/[siteId]/sitemap.xml → sitemap.xml}/route.ts +0 -0
  140. /package/dist/templates/_shared/app/{site/[siteId]/tag → tag}/[tag]/page.tsx +0 -0
@@ -0,0 +1,94 @@
1
+ > English: [AGENTS.md](./AGENTS.md)
2
+ >
3
+ # AGENTS.md
4
+
5
+ このファイルは AI コーディングエージェント(Claude Code, Cursor, Codex など)が読む前提で書かれています。人間向けの日常利用ガイドは `README.ja.md` と `RUNBOOK.ja.md` を参照してください。
6
+
7
+ ## プロジェクトのレイアウト
8
+
9
+ - `themes/<name>/` — インストール済みのテーマ(tokens、pages、manifest)。アクティブテーマの切り替えは `/admin/sites/<id>/theme` で行う。
10
+ - `themes/my-<name>/` — ユーザーが所有するカスタマイズ済みのテーマコピー(`npm run copy-theme` で作成)。`my-` プレフィックスがついているコピーは `update-ampless` で上書きされない。
11
+ - `themes-registry.ts` — 自動生成ファイル。手動で編集しない。
12
+ - `amplify/` — TypeScript で定義された Amplify Gen 2 バックエンド(Cognito / DynamoDB / S3 / AppSync / Lambda)。
13
+ - `amplify_outputs.json` — `npm run sandbox` / Amplify Hosting が生成するファイル。編集しない。
14
+ - `app/` — Next.js 16 App Router(公開サイト + `/admin` UI)。
15
+ - `components/` — 共有 UI コンポーネント。
16
+ - `lib/` — 共有ユーティリティ(データアクセス、認証など)。
17
+ - `cms.config.ts` — サイト、プラグイン、デフォルト設定。
18
+ - `proxy.ts` — リクエストプロキシの設定。
19
+
20
+ ## 触っていい場所・ダメな場所
21
+
22
+ **自由に編集可能:**
23
+ - `themes/my-*/` — ユーザー自身のテーマコピー。
24
+ - `cms.config.ts` — サイト / プラグインの設定。
25
+ - 投稿コンテンツは管理 UI(推奨)または MCP サーバー経由で操作する。
26
+
27
+ **注意して触る(編集前に理由を説明すること):**
28
+ - `app/`、`components/`、`lib/` — 共有シェルの一部。`update-ampless` 後も編集は残るが、上流が同じファイルを変更した場合のマージはユーザー側の責任になる。テーマ関連の変更であれば、カスタムテーマ経由での拡張を優先する。
29
+ - `themes/<official-name>/`(`my-` プレフィックスなし)— 公式テーマは `update-ampless` で上書きされる。カスタマイズしたい場合は先に `npm run copy-theme <official-name> my-<your-name>` を実行し、コピーを編集する。
30
+ - `package.json` — `ampless` / `@ampless/*` のバージョンは一貫して管理する。バージョンアップには `update-ampless` を使う。
31
+
32
+ **編集禁止:**
33
+ - `themes-registry.ts` — scaffold / copy-theme / update コマンドが再生成する。
34
+ - `amplify/` — バックエンドのスキーマ変更はテーブルの再構築とサンドボックスデータの消失を招く可能性がある。触る前にユーザーの明示的な確認を得ること。
35
+ - `amplify_outputs.json` — `npm run sandbox` のたびに再生成される。
36
+ - `.amplify/` — Amplify CLI の作業ディレクトリ。
37
+ - `pnpm-lock.yaml` / `package-lock.json` — パッケージマネージャーに任せる。
38
+
39
+ ## テーマのカスタマイズ
40
+
41
+ テーマのカスタマイズ手順 — ベーステーマの選び方、`themes/my-*/`
42
+ へのコピーフロー、Claude Design からの反映、AI 支援の実装、
43
+ レスポンシブの目視確認、Markdown 要素のデザイン方針、よくある失敗
44
+ — は [THEMES.ja.md](./THEMES.ja.md) を参照する。
45
+
46
+ ## MCP サーバー(HTTP トランスポート)
47
+
48
+ エージェントが `mcp-handler` Lambda 経由で投稿コンテンツを直接クエリ・編集できる。公開ツール: `list_posts`、`get_post`、`create_post`、`update_post`、`delete_post`、`upload_media`、`get_schema`、`upload_static_bundle`、`list_static_files`、`delete_static_file`、`get_site_context`。
49
+
50
+ 登録方法:
51
+
52
+ 1. 管理画面の `/admin/mcp-tokens` で Bearer トークンを発行する。
53
+ 2. Amplify コンソールまたは `amplify_outputs.json` で `mcp-handler` の Function URL を確認する。
54
+ 3. プロジェクトルートの `.mcp.json` に追加する:
55
+
56
+ ```json
57
+ {
58
+ "mcpServers": {
59
+ "ampless": {
60
+ "url": "https://<function-url-id>.lambda-url.<region>.on.aws/",
61
+ "transport": "http",
62
+ "headers": {
63
+ "Authorization": "Bearer amk_..."
64
+ }
65
+ }
66
+ }
67
+ }
68
+ ```
69
+
70
+ 投稿本文は `markdown`、`html`、`tiptap`(JSON ドキュメント)の 3 フォーマットに対応している。
71
+
72
+ ## 動作確認の基準
73
+
74
+ 変更後は最低限以下を実行すること:
75
+
76
+ - `npm run dev` でブラウザから該当ページを開く。UI / テーマの変更は特に目視確認が必要(Playwright MCP が使える場合はスクリーンショットを活用する)。
77
+ - `npm run build` — 本番ビルドが成功することを確認する。
78
+ - `npm run lint`。
79
+
80
+ UI / テーマを変更した場合、型チェックだけを根拠にタスク完了を報告しない — ブラウザで実際に確認すること。
81
+
82
+ ## 既知の制約
83
+
84
+ - **サンドボックスのデータは揮発性。** スキーマに影響する変更は API とテーブルの再構築を引き起こす可能性がある。サンドボックスのコンテンツは使い捨てとして扱うこと。本番データは永続する。
85
+ - **1 Amplify デプロイ = 1 サイト。** 複数サイトを別ドメインで配信したい場合は、サイトごとに Amplify 環境を分けてデプロイする。
86
+ - **AppSync 公開 API キーは `amplify_outputs.json` に含まれ、サイト訪問者から見える。** 低信頼の認証情報として扱うこと — このキーの権限は公開済み投稿の読み取りのみ。`api-key-renewer` Lambda が毎月自動ローテーションするため、手動ローテーションは不要。
87
+ - **最初に登録したユーザーが管理者になる。** 以降のロール変更は Cognito コンソールで行う(RUNBOOK 参照)。
88
+
89
+ ## 参照先
90
+
91
+ - `THEMES.ja.md` — テーマカスタマイズの実務ガイド(ベーステーマの選び方、Claude Design からの反映、AI への依頼、ブラウザ確認、Markdown 要素のスタイリング、よくある失敗)。
92
+ - `README.ja.md` — サイト運営者向けの日常利用ガイド。
93
+ - `RUNBOOK.ja.md` — 定期的な運用手順(キーローテーション、バックアップ復元など)。
94
+ - `themes/<name>/README.ja.md` — テーマごとのカスタマイズ詳細。
@@ -0,0 +1,94 @@
1
+ > 日本語版: [AGENTS.ja.md](./AGENTS.ja.md)
2
+ >
3
+ # AGENTS.md
4
+
5
+ This file is written for AI coding agents (Claude Code, Cursor, Codex, etc.). For human-readable day-to-day guidance, see `README.md` and `RUNBOOK.md`.
6
+
7
+ ## Project layout
8
+
9
+ - `themes/<name>/` — installed themes (tokens, pages, manifest). Switch active theme at `/admin/sites/<id>/theme`.
10
+ - `themes/my-<name>/` — user-owned customised theme copies (created via `npm run copy-theme`). The `my-` prefix is what marks the copy as user-owned; `update-ampless` leaves anything under `themes/my-*/` alone.
11
+ - `themes-registry.ts` — auto-generated, do not hand-edit.
12
+ - `amplify/` — Amplify Gen 2 backend (Cognito / DynamoDB / S3 / AppSync / Lambda) defined in TypeScript.
13
+ - `amplify_outputs.json` — generated by `npm run sandbox` / Amplify Hosting. Do not edit.
14
+ - `app/` — Next.js 16 App Router (public site + `/admin` UI).
15
+ - `components/` — shared UI components.
16
+ - `lib/` — shared utilities (data access, auth, etc.).
17
+ - `cms.config.ts` — site, plugins, defaults.
18
+ - `proxy.ts` — request proxy config.
19
+
20
+ ## What you can and can't touch
21
+
22
+ **Free to edit:**
23
+ - `themes/my-*/` — your own theme copies.
24
+ - `cms.config.ts` — site/plugin config.
25
+ - Post content via the admin UI (recommended) or via the MCP server.
26
+
27
+ **Touch with caution (explain why before editing):**
28
+ - `app/`, `components/`, `lib/` — these are part of the shared shell. Edits survive `update-ampless` but you own the merge if upstream changes the same file. Prefer extending via a custom theme if the change is theme-related.
29
+ - `themes/<official-name>/` (no `my-` prefix) — official themes get overwritten by `update-ampless`. If you want to customise, run `npm run copy-theme <official-name> my-<your-name>` first and edit the copy.
30
+ - `package.json` — keep `ampless` / `@ampless/*` versions consistent. Use `update-ampless` to bump them.
31
+
32
+ **Do not edit:**
33
+ - `themes-registry.ts` — regenerated by the scaffold/copy-theme/update commands.
34
+ - `amplify/` — backend schema changes can rebuild tables and wipe sandbox data. Get explicit confirmation from the user before touching.
35
+ - `amplify_outputs.json` — regenerated each `npm run sandbox`.
36
+ - `.amplify/` — Amplify CLI working directory.
37
+ - `pnpm-lock.yaml` / `package-lock.json` — let the package manager update these.
38
+
39
+ ## Theme customization
40
+
41
+ For theme customization workflows — choosing a base theme, the
42
+ standard copy-and-edit flow, Claude Design handoff, AI-assisted
43
+ implementation, responsive visual QA, Markdown styling expectations,
44
+ and the common failure modes — see [THEMES.md](./THEMES.md).
45
+
46
+ ## MCP server (HTTP transport)
47
+
48
+ Lets agents query and modify post content directly via the `mcp-handler` Lambda. Tools exposed: `list_posts`, `get_post`, `create_post`, `update_post`, `delete_post`, `upload_media`, `get_schema`, `upload_static_bundle`, `list_static_files`, `delete_static_file`, `get_site_context`.
49
+
50
+ Registration:
51
+
52
+ 1. Issue a Bearer token from `/admin/mcp-tokens` in the admin UI.
53
+ 2. Find the `mcp-handler` Function URL in the Amplify console or `amplify_outputs.json`.
54
+ 3. Add to `.mcp.json` at the project root:
55
+
56
+ ```json
57
+ {
58
+ "mcpServers": {
59
+ "ampless": {
60
+ "url": "https://<function-url-id>.lambda-url.<region>.on.aws/",
61
+ "transport": "http",
62
+ "headers": {
63
+ "Authorization": "Bearer amk_..."
64
+ }
65
+ }
66
+ }
67
+ }
68
+ ```
69
+
70
+ Post bodies accept three formats: `markdown`, `html`, or `tiptap` (JSON document).
71
+
72
+ ## Verification expectations
73
+
74
+ After any change, run at minimum:
75
+
76
+ - `npm run dev` and load the affected page in a browser. UI changes especially require visual confirmation (use Playwright MCP for screenshots when available).
77
+ - `npm run build` — confirms the production build succeeds.
78
+ - `npm run lint`.
79
+
80
+ Do not report a task complete based solely on type checks if a UI/theme was modified — load it in a browser.
81
+
82
+ ## Known constraints
83
+
84
+ - **Sandbox data is ephemeral.** Schema-affecting changes can rebuild the API and tables; treat sandbox content as throw-away. Production data is durable.
85
+ - **One Amplify deployment = one site.** To serve multiple sites on different domains, deploy separate Amplify environments.
86
+ - **The AppSync public API key is shipped in `amplify_outputs.json` and visible to any site visitor.** Treat it as a low-trust credential — its only privilege is reading published posts. Auto-rotated monthly by the `api-key-renewer` Lambda; no manual rotation needed.
87
+ - **The first registered user becomes admin.** Subsequent role changes go through the Cognito console (see RUNBOOK).
88
+
89
+ ## See also
90
+
91
+ - `THEMES.md` — theme customization workflows (base-theme selection, Claude Design handoff, AI prompts, browser QA, Markdown styling, common pitfalls).
92
+ - `README.md` — day-to-day usage for site owners.
93
+ - `RUNBOOK.md` — occasional ops procedures (key rotation, backup restore, etc.).
94
+ - `themes/<name>/README.md` — per-theme customization details.
@@ -0,0 +1,239 @@
1
+ > English: [README.md](./README.md)
2
+ >
3
+ # {{siteName}}
4
+
5
+ このサイトは [ampless](https://github.com/heavymoons/ampless) で構築されています — AWS Amplify Gen 2(Cognito + DynamoDB + S3 + AppSync + Lambda)上で動くサーバーレス CMS、フロントエンドは Next.js 16。
6
+
7
+ この README は、サイト運営者として日常的に知っておくべき内容をまとめたものです。たまにやる運用手順(API キーのローテーション、バックアップ復元など)は [RUNBOOK.ja.md](./RUNBOOK.ja.md) に置いています。テーマごとのカスタマイズ詳細は `themes/<name>/README.ja.md` を参照してください。
8
+
9
+ このプロジェクトで AI コーディングエージェント(Claude Code, Cursor, Codex など)を使うなら [AGENTS.ja.md](./AGENTS.ja.md) を読ませてください。エージェントが触っていい場所・ダメな場所がそこに書いてあります。
10
+
11
+ ## 必要なもの
12
+
13
+ - **Node.js 22+** と **npm**。
14
+ - **AWS アカウント.** [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) をインストールしてから `aws configure` で認証情報とデフォルトリージョンを設定します。sandbox / 本番ともに実 AWS リソースをデプロイします。
15
+ - **GitHub アカウント** — AWS Amplify Hosting 経由の本番デプロイで必要。下記の [CLI デプロイフロー](#方法-1-cli-ワンショット推奨) を使う場合は [`gh` CLI](https://cli.github.com/) を `gh auth login` で認証する(または `repo` スコープ付きの `GITHUB_TOKEN` 環境変数を設定する)必要があります。コンソール経由の手動フローには `gh` は不要です。
16
+
17
+ ## コマンド
18
+
19
+ | コマンド | 内容 |
20
+ | --- | --- |
21
+ | `npm install` | 依存関係をインストール |
22
+ | `npm run sandbox` | 個人用 AWS サンドボックス(Cognito / DynamoDB / S3 など)をプロビジョニング、`amplify_outputs.json` を再生成し、`next dev` を `http://localhost:3000` で起動 |
23
+ | `npm run dev` | Next.js だけを起動(サンドボックスのプロビジョニングはスキップ — 一度 `sandbox` を実行済みなら使える) |
24
+ | `npm run build` | Next.js アプリの本番ビルド(Amplify Hosting のデプロイでも自動実行される) |
25
+ | `npm run start` | ビルド済みアプリをローカルで配信 |
26
+ | `npm run lint` | `next lint` で lint |
27
+ | `npm run update-ampless` | ampless テンプレートの最新ファイルを取り込む(設定やテーマは保持。下記「ampless の更新」参照) |
28
+ | `npm run copy-theme` | 公式テーマを後から追加する |
29
+
30
+ ## 初回セットアップ
31
+
32
+ ```bash
33
+ npm install
34
+ npm run sandbox
35
+ ```
36
+
37
+ 初回 sandbox は 5〜10 分かかります(AWS リソースのプロビジョニング)。`next dev` 起動前に毎回 `amplify_outputs.json` が再生成されます。
38
+
39
+ [http://localhost:3000/login](http://localhost:3000/login) を開き、**Create admin account** をクリック。最初に登録したユーザーが自動的に `ampless-admin` Cognito グループに追加されます。
40
+
41
+ ## 管理画面
42
+
43
+ サインイン後、管理画面は `/admin`:
44
+
45
+ | パス | 役割 |
46
+ | --- | --- |
47
+ | `/admin` | ダッシュボード |
48
+ | `/admin/posts` | 投稿の一覧 / 作成 / 編集(Tiptap、Markdown、生 HTML、または zip アップロードの静的バンドル) |
49
+ | `/admin/media` | 画像 / 動画 / ファイルを S3 にアップロード |
50
+ | `/admin/sites/<siteId>` | サイトレベル設定(名前、URL) |
51
+ | `/admin/sites/<siteId>/theme` | テーマの切り替え + フィールド調整(カラー、フォント、ナビ、ロゴなど) |
52
+ | `/admin/users` | ユーザー一覧と Cognito グループ所属の確認 |
53
+ | `/admin/mcp-tokens` | HTTP MCP エンドポイント用の Bearer トークンを発行 |
54
+
55
+ ユーザーロール(Cognito グループ):
56
+
57
+ - `ampless-admin` — フルアクセス(コンテンツ + 運用 + 破壊的操作)
58
+ - `ampless-editor` — コンテンツの CRUD(破壊的操作はなし)
59
+ - `ampless-reader` — 将来の REST/MCP API クライアント用に予約
60
+
61
+ ロールの付与 / 取り消しは AWS Cognito コンソールで行います — [RUNBOOK.ja.md → ユーザーの昇格 / 降格](./RUNBOOK.ja.md#promote--demote-a-user) を参照。
62
+
63
+ ## コンテンツの執筆
64
+
65
+ 投稿(Post)が唯一のコンテンツタイプです。各投稿には以下があります:
66
+
67
+ - **Format** — `tiptap`(リッチテキスト)/ `markdown` / `html`(生 HTML、サニタイズなし)/ `static`(HTML/CSS/JS の zip アップロード)
68
+ - **No layout** フラグ(`format: 'html'` のときのみ)— 本文をそのまま出力し、Next.js のレイアウトもテーマのクロームも適用しない。URL は `/<slug>` のままで、middleware がリクエストを内部のベア HTML ハンドラーに書き換える
69
+ - **キャッシュ戦略**(`metadata.cache`)— 投稿ごとに `Cache-Control` を上書き: `'auto'`(デフォルト、編集時刻ベースのクールダウン)、`'deep'`(常に長期キャッシュ)、`'hot'`(常に no-store)。詳細は `docs/CONTENT.ja.md`
70
+ - **Slug** — 公開 URL
71
+ - **Status** — `draft`(管理者のみ)または `published`
72
+
73
+ 詳細リファレンス: [docs/CONTENT.ja.md(GitHub)](https://github.com/heavymoons/ampless/blob/main/docs/CONTENT.ja.md) ([English](https://github.com/heavymoons/ampless/blob/main/docs/CONTENT.md))
74
+
75
+ ## テーマ
76
+
77
+ インストール済みのテーマはすべて `themes/<name>/` にバンドルされています。**アクティブな**テーマはサイトごとのランタイム設定 — テーマの切り替えに**再デプロイは不要**です。
78
+
79
+ アクティブテーマの切り替え: `/admin/sites/<siteId>/theme` → インストール済みリストから選択 → 保存。
80
+
81
+ アクティブテーマのカスタマイズ(カラー、フォント、ヘッダー / フッターナビなど): 同じ画面 — 各テーマが固有のカスタマイズフィールドを公開しています。各テーマで何が変えられるかは `themes/<name>/README.ja.md` を参照。
82
+
83
+ このプロジェクトに別の公式テーマを追加する:
84
+
85
+ ```bash
86
+ npm run copy-theme
87
+ ```
88
+
89
+ インストール済みテーマを `npm run update-ampless` で上書きされない形でカスタマイズしたい場合は、`my-` プレフィックス付きにコピーする:
90
+
91
+ ```bash
92
+ npm run copy-theme blog my-blog
93
+ ```
94
+
95
+ テーマカスタマイズの実務ガイド — ベーステーマの選び方、コピー / 編集 / 切り替えの標準フロー、Claude Design からの反映、AI を使った実装、レスポンシブ確認、Markdown 要素のスタイリング、よくある失敗 — はこのプロジェクト内の [THEMES.ja.md](./THEMES.ja.md)([English](./THEMES.md))に集約しています。
96
+
97
+ ## プラグイン
98
+
99
+ プラグインは CMS にイベント駆動の副作用(SEO メタデータ、RSS フィード、外部 URL への webhook、OG 画像生成など)を追加する仕組みです。[`cms.config.ts`](./cms.config.ts) で宣言し、投稿の publish / update / delete 時に Lambda 上で実行されます。
100
+
101
+ `cms.config.ts` に書けば有効になる、同梱の公式プラグイン:
102
+
103
+ | パッケージ | 役割 |
104
+ | --- | --- |
105
+ | `@ampless/plugin-seo` | 投稿ごとの OGP / Twitter / canonical メタデータ + `sitemap.xml` |
106
+ | `@ampless/plugin-rss` | `/feed.xml` の RSS 2.0 フィード |
107
+ | `@ampless/plugin-webhook` | 外部 URL へのイベント POST(HMAC 署名付き) |
108
+ | `@ampless/plugin-og-image` | `/og/<slug>` での動的 OG 画像生成 |
109
+
110
+ プラグインを追加するには: install(`npm i @ampless/plugin-...`)→ `cms.config.ts` で import → `plugins` 配列に追加:
111
+
112
+ ```ts
113
+ import seoPlugin from '@ampless/plugin-seo'
114
+ import rssPlugin from '@ampless/plugin-rss'
115
+
116
+ export default defineConfig({
117
+ // ...
118
+ plugins: [
119
+ seoPlugin({ twitterSite: '@example' }),
120
+ rssPlugin({ language: 'ja', limit: 20 }),
121
+ ],
122
+ })
123
+ ```
124
+
125
+ プラグイン変更には再デプロイが必要です(プラグインコードは Lambda バンドルに含まれます)。
126
+
127
+ ## 本番デプロイ
128
+
129
+ 同梱の [`amplify.yml`](./amplify.yml) が、connect したブランチへの push のたびに `npx ampx pipeline-deploy`(Amplify バックエンド) + `npm run build`(Next.js)を実行します。
130
+
131
+ ### 方法 1: CLI ワンショット(推奨)
132
+
133
+ このプロジェクトディレクトリ内で:
134
+
135
+ ```bash
136
+ npx create-ampless@latest --mount \
137
+ --github-owner <your-user-or-org> \
138
+ --aws-region <region> \
139
+ --create-iam-role # 初回のみ。次回以降は `--iam-service-role <arn>` で使い回し
140
+ ```
141
+
142
+ CLI が以下を一気に実行します:
143
+
144
+ 1. GitHub repo を作成(認証済みの `gh` CLI、`GITHUB_TOKEN` 環境変数、または `--github-token` フラグを利用)
145
+ 2. プロジェクトを repo に push
146
+ 3. Amplify Hosting アプリ + ブランチ作成、GitHub 連携登録、`amplify.yml` ビルド spec 配置
147
+ 4. 初回デプロイ起動
148
+
149
+ 便利な追加フラグ:
150
+
151
+ - `--github-private` — private repo を作成(デフォルト: public)
152
+ - `--domain <name>` `--subdomain <prefix>` — 同じ流れの中でカスタムドメインをバインド
153
+ - `--skip-confirm` — 非対話モード(CI / 再実行向け)
154
+ - `--aws-profile <name>` — 複数 AWS profile がある場合に明示
155
+
156
+ 全フラグは `npx create-ampless@latest --help` を参照。
157
+
158
+ **このフロー固有の事前準備([トップの必要なもの](#必要なもの) に加えて):**
159
+
160
+ | | 用途 | 準備方法 |
161
+ |---|---|---|
162
+ | `aws` CLI 認証済み | Amplify Hosting アプリ + サービスロールの provision | [インストール](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) して `aws configure` を実行(または `aws sso login`)。`aws sts get-caller-identity` で確認。 |
163
+ | `gh` CLI 認証済み **または** `GITHUB_TOKEN` env | GitHub repo を作成して初回コミットを push | [`gh` をインストール](https://cli.github.com/) して `gh auth login` を実行、**または** `repo` スコープ付きの [personal access token](https://github.com/settings/tokens) を `GITHUB_TOKEN` として export。`--github-token <token>` を直接渡す場合は不要。 |
164
+ | Amplify Hosting 用 IAM service role | Amplify が代理で backend リソースをデプロイするのに必要 | `--create-iam-role` を渡せば CLI が `AmplifyDeployBackend`(idempotent)を provision。または `--iam-service-role <arn>` で既存ロールを再利用。ロールは `amplify.amazonaws.com` を trust し、`AdministratorAccess-Amplify` を attach している必要があります。 |
165
+
166
+ ### 方法 2: コンソール(手動)
167
+
168
+ 1. **GitHub(または Amplify Hosting が対応する git ホスト)にこのプロジェクトを push**:
169
+ ```bash
170
+ git init && git add . && git commit -m "init"
171
+ git remote add origin <your-repo>
172
+ git push -u origin main
173
+ ```
174
+ 2. **AWS Amplify Hosting コンソール** → **Create new app** → **Host web app** → リポジトリを連携 → ブランチを選択 → 自動検出されたビルド設定(`amplify.yml` の内容になっているはず)を確認 → デプロイ
175
+ 3. 初回デプロイは 10〜20 分。以降は連携ブランチへの push で自動再デプロイ
176
+
177
+ ### 環境変数
178
+
179
+ 環境ごとの値は **Amplify Hosting コンソール → Hosting → Environment variables** で設定。よく使うもの:
180
+
181
+ | 変数 | 利用箇所 |
182
+ | --- | --- |
183
+ | `WEBHOOK_SECRET` | `@ampless/plugin-webhook` の HMAC 署名 |
184
+
185
+ env 変数追加 / 変更後は再デプロイをトリガーしてください。
186
+
187
+ ### カスタムドメイン
188
+
189
+ Amplify Hosting アプリの **Domain management** からドメインをバインドします — ACM 証明書と DNS レコードは Amplify が自動でプロビジョニングします。詳細手順: [RUNBOOK.ja.md → カスタムドメインを Amplify Hosting に追加](./RUNBOOK.ja.md#adding-a-custom-domain-to-amplify-hosting)
190
+
191
+ ## AI 連携(MCP)
192
+
193
+ ampless は HTTP トランスポート + Bearer トークン認証による MCP(Model Context Protocol)サーバーを同梱しているので、Claude Desktop / Cursor / Claude Code など MCP に対応した AI クライアントから投稿の読み書きができます。
194
+
195
+ **セットアップ手順:**
196
+
197
+ 1. 管理画面の `/admin/mcp-tokens` にアクセスし、Bearer トークン(`amk_...`)を発行する。
198
+ 2. Amplify コンソールまたは `amplify_outputs.json` で `mcp-handler` Lambda の Function URL を確認する。
199
+ 3. MCP クライアントの設定ファイル(プロジェクトルートの `.mcp.json`、`claude_desktop_config.json` など)にエントリを追加する:
200
+
201
+ ```json
202
+ {
203
+ "mcpServers": {
204
+ "ampless": {
205
+ "url": "https://<function-url-id>.lambda-url.<region>.on.aws/",
206
+ "transport": "http",
207
+ "headers": {
208
+ "Authorization": "Bearer amk_..."
209
+ }
210
+ }
211
+ }
212
+ }
213
+ ```
214
+
215
+ MCP のセットアップとトークン管理の詳細については [docs/architecture/04-access-layer-mcp.md](./docs/architecture/04-access-layer-mcp.md) を参照してください。
216
+
217
+ ## ampless の更新
218
+
219
+ ampless は `alpha` dist-tag でリリースしています。新機能を取り込むには:
220
+
221
+ ```bash
222
+ npm run update-ampless
223
+ ```
224
+
225
+ これは `npx create-ampless@latest upgrade` を実行し、以下を行います:
226
+
227
+ - `package.json` の `@ampless/*` / `ampless` 依存をバージョンアップ
228
+ - 共有テンプレートファイル(admin アプリの土台、amplify バックエンド、lib/、middleware、テーマ)を再同期 — `cms.config.ts`、`theme.*` 管理画面設定、投稿、テーマ manifest 値などのユーザーカスタマイズは保持されます
229
+ - `update-ampless` / `copy-theme` スクリプトのコマンドが変わっていれば更新
230
+
231
+ commit 前に diff を確認できます。
232
+
233
+ ## 運用
234
+
235
+ 日常以外の運用レシピ — ユーザー昇格、パスワードリセット、バックアップ復元、カスタムドメイン配線、AppSync API キーローテーション — は [RUNBOOK.ja.md](./RUNBOOK.ja.md) にあります。
236
+
237
+ ## ライセンス
238
+
239
+ このプロジェクト自身のコードはあなたのものです。ampless 本体は MIT ライセンスです。詳細は [ampless リポジトリ](https://github.com/heavymoons/ampless) を参照。