How it works

正本は、あなたの
Git リポジトリ。

Cocoro CMS は、中身を独自のデータベースにしまい込みません。Astro のリポジトリを読み、画面で直したものをコミットにし、プルリクエストとして渡します。CMS をやめても、手元に残るのはいつもの Astro のプロジェクトです。

  1. 編集する

    プレビューを押して直す・記事を書く

    WYSIWYG

  2. 確認を頼む

    変更は枝とプルリクエストに

    cocoro/change-01m6…

  3. 承認する

    見た中身のままマージ

    merge @ head SHA

  4. ビルド

    Astro が静的な HTML に

    astro build → dist/

  5. 公開

    お使いのサーバー・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
terminal
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
Pull request の本文
1Cocoro CMS で作った変更です。2 3Cocoro-Change: 01M6JEDEYGGM6MZ06E2TSX61E6

GitHub App が求める権限

contents: read / writepull_requests: writemetadata: readworkflows

ワークフローを書き換える権限は求めません。書き込めるのは 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 は既定で使えない
  • ホスト鍵は人が確かめて固定
  • 送り先の鍵は封をして保存
.github/workflows/cocoro-deploy.yml(Cloudflare Pages の例・一部)
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 人まで、ずっと無料です。