How it works
正本は、あなたの
Git リポジトリ。
Cocoro CMS は、中身を独自のデータベースにしまい込みません。Astro のリポジトリを読み、画面で直したものをコミットにし、プルリクエストとして渡します。CMS をやめても、手元に残るのはいつもの Astro のプロジェクトです。
-
編集する
プレビューを押して直す・記事を書く
WYSIWYG
-
確認を頼む
変更は枝とプルリクエストに
cocoro/change-01m6…
-
承認する
見た中身のままマージ
merge @ head SHA
-
ビルド
Astro が静的な HTML に
astro build → dist/
-
公開
お使いのサーバー・CDN へ
FTPS · SFTP · Actions
01
ソースを、
実行せずに読む。
Cocoro CMS は、リポジトリの Astro のソースを構文として読みます。ビルドもしないし、お客様のコードを動かすこともありません。読み取った結果から、「ここは担当の方が直してよい」「ここは開発者だけ」という線を引きます。
1 ページで扱えるのは、編集できる箇所 400・ブロック 600 まで。同じ形の子が並ぶ所(カードの一覧など)は「表」として、行の追加・並べ替え・削除ができます。
ページ(.astro)
@astrojs/compiler で構文を読み、見出しや段落の文字、href・src・alt などの属性、コンポーネントの props を「編集できる箇所」にします。位置はバイト単位で覚えます。
コンポーネントの props
interface Props / type Props から型を読みます。文字列リテラルの union は選択肢、boolean・number・string[] はそれぞれの入力に。JSDoc のコメントは説明として出ます。
コンテンツコレクション
src/content.config.ts(旧来の src/content/config.ts も)の glob・file ローダーと zod のスキーマを読み、記事の入力画面を作ります。
ロックするもの
{items.map(...)} のような式、set:html・set:text、script・style・svg・pre の中は編集させません。式なら、データの出どころ(コレクション・src/data・ページ内の const)を示します。
名前の付け方
Hero は「メインビジュアル」、buttonHref は「ボタンのリンク先」のように、画面に出す名前を日本語で付けます。決まりごとの辞書か AI が付け、人が画面で付け直した名前がいちばん優先されます。
02
直したものは、
プルリクエストに。
「確認を頼む」を押すと、cocoro/change-<ULID> の枝にコミットし、プルリクエストを開きます。承認する人が見るのは、その差分です。承認すると、確認したときの head の SHA に固定してマージします。確認のあとに誰かが枝を書き換えていたら、マージしません。
- ✓作った本人は、自分の変更を承認できない
- ✓package.json・ロックファイル・astro.config などに触れる変更は、開発者か管理者だけが承認できる
- ✓日時を決めた予約のマージと、その取り下げ
- ✓既定のブランチに直接 push しない。「GitHub の最新を取り込む」で、外での変更も読み直せる
- ✓マージの方式は merge か squash
1$ git log --oneline --graph -42* a41f2c9 Merge pull request #11 from acme/cocoro/change-01m6jedeyggm6mz06e2tsx61e63|\4| * 7d0e183 「11 月の撮影会のお知らせ」を更新5|/6* c92b4a1 feat: add NewsList component 1Cocoro CMS で作った変更です。2 3Cocoro-Change: 01M6JEDEYGGM6MZ06E2TSX61E6 GitHub App が求める権限
ワークフローを書き換える権限は求めません。書き込めるのは cocoro/ の枝の早送りだけで、.github/ の下には書けません。GitHub の鍵は、専用の小さなサービス(keeper)だけが持ちます。
03
ビルドと公開は、
2 つの形から。
マージのあとのビルドと公開は、いまは GitHub Actions の形で行います(お使いのレンタルサーバーへも、ひな型で FTPS・SFTP で送れます)。Cocoro CMS が自分でビルドして送る FTP の形は準備中です。どちらでも、編集・確認・承認の画面は同じです。
GitHub Actions
お客様の GitHub Actions で
既定のブランチへの push で、お客様の Actions が astro build して送ります。ワークフローのひな型は Cocoro CMS が作り、ファイルをお渡しします(置くのはお客様です)。Action はすべて SHA で固定しています。
FTPS
COCORO_FTP_SERVER・PORT・USERNAME・PASSWORD
SFTP・rsync
COCORO_SSH_HOST・PORT・USER・PRIVATE_KEY・KNOWN_HOSTS
Cloudflare Pages
CLOUDFLARE_API_TOKEN・CLOUDFLARE_ACCOUNT_ID
S3 互換
COCORO_S3_ACCESS_KEY_ID・SECRET_ACCESS_KEY・REGION・BUCKET・ENDPOINT
FTP(スターター以上・準備中)
Cocoro CMS がビルドして、FTPS・SFTP で
隔離した環境で npm ci --ignore-scripts(npm のレジストリだけに出られる)のあと、ネットワークなしで、お客様の依存に入っている Astro で build します。送るのは、前回と sha256 が変わったファイルだけ。画像などを先に、HTML を最後に送るので、送っている途中でも、新しいページがまだ届いていない画像を指すことはありません。
- package-lock.json が必要
- Node 22
- ビルドは 10 分・2GiB まで
- 暗号化しない FTP は既定で使えない
- ホスト鍵は人が確かめて固定
- 送り先の鍵は封をして保存
1# Cocoro CMS が作るひな型の例(Cloudflare Pages)2on:3 push:4 branches: [main]5 workflow_dispatch:6permissions:7 contents: read8jobs:9 deploy:10 runs-on: ubuntu-24.0411 timeout-minutes: 3012 steps:13 - uses: actions/checkout@<SHA> # v7.0.114 - uses: actions/setup-node@<SHA> # v7.1.015 with:16 node-version: '22'17 - run: npm ci --ignore-scripts18 - run: npx astro build19 - name: Deploy (Cloudflare Pages)20 uses: cloudflare/wrangler-action@953926a2e2182532811c01a25e53647d93bf07c0 # v4.1.321 with:22 apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}23 accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}24 command: 'pages deploy dist --project-name=kokoro-photo --branch=main' 04
プレビューは、
本物の astro dev。
編集の画面に出るプレビューは、お客様の Astro のサイトそのものを、隔離した環境の astro dev で動かしたものです。似せた見た目ではないので、デザイナーが作ったとおりに見えます。保存するたびに作業コピーへ書き込み、Astro の自動の描き直しで反映します。スクロールの位置はそのままです。
ネットワークなし
プレビューのサーバーは外へ出られない
別のドメイン
推測できない名前のサブドメイン・Cookie は捨てる・noindex
押して選ぶ
要素を押すと、そのソースの位置のブロックが選ばれる
30 分で休む
使っていないプレビューは止めて、資源を返す
Cocoro CMS
伝えたいことを、
伝えたいときに。
Astro のサイトを、だれでも安全に更新できるように。フリープランは 1 サイト・2 人まで、ずっと無料です。