サイトを一から組み立てる
新しいサイトの構築では、手順よりも設計が結果を左右します。 どの入れ物に 何を入れるかを間違えると、あとから作り直しになります。
Claude Code では、/mt-cms-design スキルがこの設計の手順をまとめています。
頼み方
会社のコーポレートサイトを MT に作りたい。会社概要・料金・お問い合わせの 固定ページと、お知らせのブログ。あとで製品カタログも足したい。 ステージング(stg)に作って。先に設計を書いて、合意してから作って。
まず入れ物を決める
| 要件の形 | 入れ物 |
|---|---|
| 時系列に増える。日付順に並べたい | 記事 |
| 増えない。URL を固定したい(会社概要・料金など) | ウェブページ |
| 項目が決まっていて、入力の形を統一したい(製品・事例・スタッフ) | コンテンツタイプ |
| 既存のものに1〜2項目足すだけ | カスタムフィールド |
迷ったら「項目が3つ以上あって、毎回同じ形で入れたいか」で決めます。
構築の順番
権限の関門 → サイトとテーマ → 器の型 → 分類と項目 → ユーザー
→ コンテンツ → アーカイブ設計とテンプレート → 公開と確認テーマは最後ではなく最初に適用する
テーマを適用すると、そのサイトのテンプレートは全件 backup 型にリネームされ、 アーカイブマッピングは削除、出力ファイル名も消えます。作り込んだ後に 適用すると、URL 設計からやり直しになります(テーマ)。
分類より先にコンテンツを作らない
あとから付け替えると URL が変わります。
ウェブサイトとブログの2階層
MT のサイトは ウェブサイト(website)とその下のブログ(blog) の2階層です。 コーポレートサイトの下にブログを置く構成がこれにあたります。
mtb sites create-blog --site-id 1 --blog @blog.json # 1 の下にブログを作るここには間違えやすい点が2つあります。
子サイトの url と sitePath は親からの相対で書きます
絶対URLを渡すと親のURLに連結され、 http://example.com/http://example.com/blog/ になります。 エラーにならず、あとで気づくので注意してください。正しくは "url": "blog/"。
更新で送る本文のキーはサイトの種別で変わります。 website を更新するなら --website、blog なら --blog。取り違えると 400 A resource "blog" is required. が返ります。
mtb sites get 2 --fields id,name,class # 種別を確かめる
mtb sites update 1 --website @corp.json
mtb sites update 2 --blog @blog.jsonカスタムフィールドを足す
mtb sites fields create 4 --field '{"name":"想定読者","basename":"target_reader","systemObject":"entry","type":"select","options":"開発者,運用者"}'MT は不正な値に「invalid」としか返しませんので、使える値を先に確かめて おいてください。
| type | 備考 |
|---|---|
text textarea checkbox url embed post_type | そのまま作れます |
select radio | options にカンマ区切りの選択肢が必須 |
datetime | options が必須(date_and_time / date_only / time_only) |
systemObject に指定できる値はサイトの種別で変わります。ウェブサイトに blog は無く、 ブログに website はありません。author asset contentdata はどちらにも ありません。
コンテンツタイプ
mtb sites content-types list --site-id 1 # まず content_type_id を調べる
mtb sites content-types fields list 1 3 # フィールドの構成を見る
mtb sites content-types data create 1 3 --data '[{"id":10,"data":"値"}]'data はフィールドID付きの配列です
記事のような名前付きオブジェクトではありません。フィールドIDは fields list で調べます。ここが最も間違えやすいところです。label はフィールドではなく、データ自体の名前です。
ユーザーと権限
mtb roles list --fields id,name # 組み込みロールは9種類
mtb users create --user @editor.json --fields id,name,displayName
mtb sites permissions grant --site-id 2 --user-id 2 --role-id 2 # role 2 = Editor権限は最後に設定するものではなく、前提です。 編集者にコンテンツを入力させるなら、 コンテンツより先に権限が必要です(後から付けると、それまでに作ったものがすべてあなたの所有になります)。
作ったユーザーが Data API にサインインするには3つの条件を満たす必要があります (認証)。そのうち2つは管理画面での作業になることを、 依頼した人に必ず伝えてください。
公開して確かめる
mtb sites templates publish 4 76 # index テンプレート(同期)
mtb publish entries --ids 42,43 --wait # 記事に関係するアーカイブ
curl -s -o /dev/null -w '%{http_code}\n' https://example.com/API が success を返すことと、ページが正しいことは別です (公開と再構築)。