amplesscms

article

ampless とは何か

AWS Amplify Gen 2 の上で動かすオープンソース CMS。管理サーバーを持たず、投稿・タグ・テーマ・MCP を組み合わせて、ブログやドキュメントを小さく始められます。

ampless は、AWS Amplify Gen 2 の上で動かすことを前提にしたオープンソース CMS です。管理サーバーを常時立てておくのではなく、AppSync、DynamoDB、S3、Cognito、Lambda など、Amplify が用意するマネージドサービスを組み合わせてサイトを公開します。

このサイト自体も ampless で動いています。下のスクリーンショットは、my-docs テーマで作った紹介ホームです。プロダクト紹介のページとして見せつつ、記事ページはそのままドキュメントとして読めるようにしています。

ampless.heavymoons.net の紹介ホーム

別ドメインで動かしている ishinao.net も、同じコードベースからテーマを分けて作りました。投稿モデルやサーバレス構成は共通のまま、色、余白、トップページの構成だけをテーマ側で変えています。

ishinao.net のホーム

何ができるか

ブログ、プロダクト紹介、ドキュメント、社内ナレッジ、採用、イベント告知。ampless では、投稿(Post)、タグ、テーマの組み合わせを変えて、こうした用途を作り分けます。

投稿本文は format で扱い方を選びます。tiptap、markdown、html、static の四つに、metadata.no_layout を組み合わせると、公開のしかたは大きく五通りです。同じ slug の名前空間に、普通の記事も、デザイナーが作った HTML も、zip で渡された LP も並べられます。

format レイアウトモード 用途
tiptap テーマレイアウト リッチエディタで書く読み物
markdown テーマレイアウト git 派の開発者向け、GFM 対応
html テーマレイアウト デザイナー納品の HTML 素片
html metadata.no_layout: true <head> まで自前で組む単独ページ
static バンドル配信 LP やキャンペーン用の zip バンドル

詳しくは post-formats にまとめています。

何ではないか

  • 常時稼働の管理サーバーを抱える CMS ではありません。 公開ページは Next.js の SSR と CloudFront キャッシュ、管理 API は AppSync GraphQL、メディアは S3 に分けています。アクセスがない時間帯に余計なサーバーを動かし続けないので、固定費も小さくできます。
  • WordPress 互換を狙う CMS ではありません。 WXR データインポートはロードマップに残していますが、プラグインや Gutenberg ブロックの互換は最初から対象にしていません。
  • 複数サイトを 1 つの管理画面で束ねる CMS ではありません。 1 Amplify デプロイ = 1 サイトです。複数サイトを持ちたいときは、Amplify プロジェクトごと分ける運用にしています。CDN のキャッシュキーを考えると、このほうが素直です。

設計上の特徴

マルチフォーマット投稿モデル

本文は、format ごとの素の形で DynamoDB に保存します。tiptap なら JSON、markdown ならソース文字列、html なら HTML 文字列、static なら manifest です。

HTML への変換は、公開リクエストが来たときにテーマ側で行います。変換済みの派生ファイルを先に S3 へ置いておく方式ではありません。投稿モデルが一種類だけなので、リッチエディタで書く人、Markdown で書く人、HTML を持ち込む人の記事が、同じ slug 体系に自然に並びます。

テーマがレイアウトを担う

テーマは themes/<name>/ に入ります。公式テーマをコピーして themes/my-*/ に置けば、公式側のアップデートは取り込みつつ、自分のサイトの見た目だけを別に育てられます。

出荷時には blog / corporate / dads / docs / landing / minimal の 6 種類のテーマがあります。切り替えは管理画面から行い、再デプロイは不要です。

MCP 経由の編集アクセス

管理 UI が使っている AppSync スキーマを、MCP HTTP ハンドラも IAM(SigV4)で叩きます。アクセストークン(amk_...)はハッシュ化して保存し、実際の認可境界は Lambda の IAM ロールに置いています。

言い換えると、トークンを持っていること = admin 相当の CMS アクセスを持っていることに近いです。発行できるのは admin だけですが、AI エージェントを編集者として入れるなら、この点を理解したうえで渡す相手や範囲を決める必要があります。この記事も MCP 経由で投入しました。

IAM をプラグインのサンドボックスに使う

プラグインは trust_level(untrusted / trusted)ごとに別々の Lambda 関数として動かし、IAM ポリシーで権限を絞ります。独自の VM サンドボックスを中に抱えるのではなく、AWS 標準の権限境界をそのまま使う方針です。

想定するユーザー

  • すでに AWS を使っている開発者や技術者
  • WordPress のセキュリティ運用に疲れているチーム
  • 個人で複数サイトを軽く回したい運用者

非開発者だけで最初から最後まで運用する動線は、v1 のスコープに入れていません。git push と Amplify Hosting の操作がある程度わかる人に向けています。

関連記事

ampless とは何か