付録B 設計書
3-1 設計書を作るで Claude Code が書き、3-2 構築するで確かめた結果を Claude Code 自身が書き足した設計書です。人の手を入れずに、そのまま載せています。 原本の Markdown は design-doc.md。
| 対象 | ファイブユナイテッド株式会社(架空)のコーポレートサイト |
| 入力 | requirements.md(要件)/ mockup/(見た目と URL)/ content/(中身) |
| 構築 | mtb(Movable Type Builder CLI)。mtb でできないことは §13 に「人が管理画面でする作業」として分けた |
| 状態 | 設計のみ。MT にはまだ何も作っていない(読み取りだけ行った。§1) |
| 改訂(第4版) | 運用マニュアル(manual/)の作成で、管理画面を実際に操作して確かめたことを反映(2026-11-06)。【運用で確認】 と付けた |
| 改訂(第3版) | 構築して分かったことを反映(2026-11-06)。変えたところは本文中に「【構築で変更】」または「【構築で確認】」と付けた。経過は build-log.md |
| 改訂(第2版) | §17 の質問への回答を反映(手元の MT で構築、アカウントの確定、カテゴリ管理を許可、フィード・サイトマップの URL は提案どおり、設定はモジュール)。マガジンのカスタムブロックは作らないことにし、§10・§13 を標準ブロックと HTML ブロックの形に書き直した |
1. 前提と、MT の現状
読み取りで確かめたこと(書き込みはしていない)。
| 項目 | 現状 |
|---|---|
| 接続先 | プロファイル five-united → http://localhost:8090/mt/mt-data-api.cgi(v7)、ユーザー admin |
| サイト | 0 件(mtb sites list の結果が空) |
| mtb 拡張 | なし(mtb extensions list)。→ mtb-pro の api-password issue / sites data-api update は使えない |
| テーマ | Data API にはテーマの install/upload が無い。サーバのファイルシステムに置く手段もこちらには無い → テーマ方式(mtb-theme)は採らない(§9.1) |
前提として決めたこと
- 公開はスタティックパブリッシング(要件どおり)。動的な機能(検索・コメント・トラックバック)は使わない。
- 追加プラグインなし。使うのは標準のブロックエディタ・リッチテキストエディタ・Commercial.pack のカスタムフィールドだけ。
- 言語は日本語、
serverOffsetは 9(日本時間)。 - 構築先は手元の MT。 サイトの URL は
http://localhost:8090/、公開パスは MT の既定の置き場/data/file/static(§17)。公開用のドメインへは、あとで URL を変えて再構築する(§14.1)。以降の設計は「ウェブサイトの URL がサイトのルート/になる」前提で書く。 - 手元で
http://localhost:8090/が/data/file/staticを配信しているか、MT がそこへ書き込めるかは構築の最初に確かめる(§14 の 0、§13 の H6)。【構築で確認】 MT と Web サーバ(nginx)は、作業をしている環境とは別のホストにあり、/data/file/staticは作業環境のファイルシステムには存在しない。ファイルの有無は HTTP で確かめる。構築前はルートが 403 だったが、書き出した後は/ほか全ページが 200 で配信されたので、配信と書き込みは通っている(H6 は済み)。
2. 設計の要点(先に結論)
サイトは「ウェブサイト 1 つ + ブログ 3 つ」。 ウェブサイト(
/)に固定的なもの、ブログに更新の多いもの(/news//press//magazine/)を置く。 担当ごとにブログ単位で権限を渡せるので、「広報はお知らせとプレスだけ、編集部はマガジンだけ」が組み込みのロールだけで実現できる。入れ物の割り当て
要件 入れ物 根拠(「項目が 3 つ以上あり、毎回同じ形で入れたいか」) お知らせ 記事(news ブログ) 時系列に増える。項目はタイトル・日付・種類・本文だけで、カスタムフィールドは要らない プレスリリース 記事 + カスタムフィールド(press ブログ) 時系列。足す項目はサブタイトル・要点・写真の 3 系統で、記事の標準欄に足すだけで済む マガジン 記事 + カスタムフィールド + ブロックエディタ(magazine ブログ) 時系列。本文に引用・数字・Q&A などの見せ場があるが、カスタムブロックは作らず、標準のブロックと HTML ブロックに mockup と同じ HTML を入れる(§10) サービス(4) コンテンツタイプ「サービス」 項目が 15 近くあり、4 件とも同じ形。一覧の並びも項目(順序)で決めたい 物件(5) コンテンツタイプ「物件」 項目が 14 あり同じ形。個別ページは持たず、トップとサービスに部品として出す メンバー(5) コンテンツタイプ「メンバー」 項目 6 で同じ形。個別ページは持たない 会社概要・お問い合わせ・プライバシー ウェブページ 増えない。URL を固定したい サイトの設定(社名・統計・注意書き・プレスの会社概要…) テンプレートモジュール 値は少なく、情報システムしか触らない。§7 見た目は mockup の HTML をそのままテンプレートにする。
mockup/css/site.css(Tailwind 製)はそのまま使い、クラス名は変えない。URL は mockup のとおり。 最後の段は原稿の
slug。ディレクトリ形(末尾/)。プレスリリースの会社概要と問い合わせ先は、テンプレートが毎回自動で付ける。 広報は入力しない(付け忘れない/書き換えられない)。
デモの注意書きは、テンプレートの共通部品から出す。 場所は mockup と同じ。
3. サイト構成
システム
└── ウェブサイト「Five United」 http://localhost:8090/ ← 情報システム(admin)が管理
├── ブログ「お知らせ」 /news/ ← 広報
├── ブログ「プレスリリース」 /press/ ← 広報
└── ブログ「FIVE マガジン」 /magazine/ ← 編集部| サイト | 種別 | URL | 公開パス | 作り方の注意 |
|---|---|---|---|---|
| Five United | ウェブサイト | http://localhost:8090/ | /data/file/static | mtb sites create。language=ja、serverOffset=9 |
| お知らせ | ブログ | /news/ | /data/file/static/news | 子サイトの url と sitePath は親からの相対(news/)で渡す。絶対 URL を渡すと連結されて壊れる |
| プレスリリース | ブログ | /press/ | /data/file/static/press | 同上 |
| FIVE マガジン | ブログ | /magazine/ | /data/file/static/magazine | 同上 |
ブログを分ける理由と、その代償
- 理由: 権限が自然に切れる(§11)。カテゴリ(種類)がブログごとに独立し、
/news/category/info//press/category/funding/の形がそのまま作れる。フィードもブログ単位。 - 代償: トップページ・サイトマップ・「ほかの○○」のようにブログをまたぐ部分は、
include_blogsを指定したテンプレートで組む(§9)。サイトを足すたびにトップが自動で拾うわけではない。 - 「記事 1 ブログ + カテゴリで news/press/magazine を分ける」案は採らない。URL の接頭辞がカテゴリに依存し、権限もカテゴリ単位では切れないため。
4. URL 設計(mockup のとおり)
| URL | 中身 | 出力元 | 種別 |
|---|---|---|---|
/ | トップ | ウェブサイトのインデックス | index |
/services/ | サービス一覧 | ウェブサイトのインデックス | index |
/services/{own,stay,atlas,ledger}/ | サービスの詳細 | コンテンツタイプ「サービス」 | ct |
/company/ /contact/ /privacy/ | 固定ページ | ウェブページ | page |
/news/ | お知らせ一覧(全件) | news ブログのインデックス | index |
/news/category/{info,service,media,recruit}/ | 種類別の一覧 | news のカテゴリ | archive |
/news/{slug}/ | お知らせ詳細 | news の記事 | individual |
/press/ /press/category/{funding,partnership,research,event,product,award}/ /press/{slug}/ | プレス | press ブログ | 同上 |
/magazine/ /magazine/category/{feature,interview,life,tech,data}/ /magazine/{slug}/ | マガジン | magazine ブログ | 同上 |
/press/feed.xml /magazine/feed.xml | フィード(Atom) | 各ブログのインデックス | index(mockup に無いので新設。URL は提案) |
/sitemap.xml | サイトマップ(XML) | ウェブサイトのインデックス | index(同上) |
/css/site.css /images/… /brand/… | 静的ファイル | §8 | — |
アーカイブマッピングのパス(優先指定を付ける。同じ種類にマッピングを増やさない)
| テンプレート | アーカイブ種別 | パス |
|---|---|---|
| 各ブログの記事 | Individual | <$mt:EntryBasename$>/index.html |
| 各ブログのカテゴリ | Category | category/<$mt:CategoryBasename$>/index.html |
| ウェブページ | Page | <$mt:PageBasename$>/index.html(フォルダは使わない) |
| サービス詳細 | ContentType | services/<$mt:ContentIdentifier$>/index.html |
- 記事のベースネーム(
basename)に原稿のslugを入れる。日本語タイトルからは自動生成されないので、必ず明示する。 - コンテンツデータのベースネームに原稿の
slugを入れる。【構築で確認】API の項目名はidentifierではなくbasename(identifierを送ると無視されて、40桁の英数字が自動で付く)。マッピングのパスはテンプレートタグ<$mt:ContentIdentifier$>で読める。スラッグ用のフィールドは要らなかった(R1 は解決)。 - 【構築で確認】 テンプレートタグの
EntryPermalinkContentPermalinkPagePermalinkは、末尾のindex.htmlを取って/news/office-move/の形で返す(Data API が返すpermalinkは…/index.htmlのまま)。テンプレートの中ではこの差を気にしなくてよい。 - 月別・日別・著者別アーカイブは作らない(mockup に無い)。
5. 分類
5.1 カテゴリ(記事用・ブログごと)
basename が URL。label が表示名。原稿の値と mockup の表示から決めた。
お知らせ(news) — 原稿の category は日本語の表示名で、URL 用の basename は mockup から補う。
| label | basename | 原稿の件数 |
|---|---|---|
| お知らせ | info | 3 |
| サービス | service | 2 |
| メディア掲載 | media | 2 |
| 採用 | recruit | 1 |
プレスリリース(press) — 原稿の category が basename そのもの。
| label | basename | 件数 |
|---|---|---|
| 資金調達 | funding | 1 |
| 提携 | partnership | 1 |
| 研究・学会 | research | 1 |
| イベント・展示会 | event | 2 |
| プロダクト | product | 1 |
| 受賞 | award | 1 |
mockup/css/site.css に fu-cat-<basename> のバッジ色が入っているので、basename を変えない。
マガジン(magazine) — 原稿の category が basename そのもの。表示は英語名と日本語名の 2 段。
| label(日本語) | basename | 英語名(カスタムフィールド) | 件数 |
|---|---|---|---|
| 特集 | feature | Feature | 1 |
| インタビュー | interview | Interview | 1 |
| 暮らし | life | Life | 1 |
| テクノロジー | tech | Technology | 1 |
| データ | data | Data | 1 |
- 並びは上の順(mockup のカテゴリナビの順)。作成後に
categories permutateで整える(listの出力を並べ替えて渡す)。 - 1 記事 = 1 カテゴリ(主カテゴリのみ)。
5.2 フォルダ・カテゴリセット
使わない。 ウェブページは 3 枚で、URL は /company/ のように 1 段。コンテンツタイプにもカテゴリ分類は無い。
5.3 タグ
マガジンだけ使う(原稿の tags)。記事の「#建築」表示用。タグ別のページは作らない(mockup に無い)。
6. 入れ物の定義
6.1 記事:お知らせ(news ブログ)
| 項目 | 入れ方 | 原稿との対応 |
|---|---|---|
| タイトル | 標準 | title |
| 日付 | 標準(公開日。2026-06-01T12:00:00+09:00 のように時刻と時差を付けて送る) | date |
| 種類 | カテゴリ(1 つ) | category(§5.1 で basename に変換) |
| 本文 | 標準・リッチテキスト | 本文(Markdown → HTML に変換して入れる) |
| URL の最後の段 | ベースネーム | slug |
カスタムフィールドは無し。 画像・サブタイトルも無い(mockup のお知らせ詳細に出ていない)。
6.2 記事:プレスリリース(press ブログ)
| 項目 | 入れ方 | 必須 | 原稿との対応 |
|---|---|---|---|
| タイトル | 標準 | ○ | title |
| 日付 | 標準 | ○ | date |
| 種類 | カテゴリ(1 つ) | ○ | category |
| 本文 | 標準・リッチテキスト(本文中の見出しは h2) | ○ | 本文 |
| URL の最後の段 | ベースネーム | ○ | slug |
| サブタイトル | CF subtitle・テキスト | ○ | subtitle |
| 要点 1〜3 | CF highlight1 highlight2 highlight3・テキスト(1 は必須、2・3 は任意) | ○ | highlights |
| 写真 | CF image・画像 | ○ | image(§8) |
- 要点を「1 行 1 項目のテキストエリア」にしないのは、MT の標準モディファイアに行を分割するもの(split)が無いため。現在の原稿は全件が 3 項目で、mockup のレイアウトも 3 項目前提。
- 会社概要・問い合わせ先は記事の項目にしない。 §7 のモジュールから、記事テンプレートが毎回出す。
- メタの description はサブタイトル(mockup どおり)。
6.3 記事:マガジン(magazine ブログ)
| 項目 | 入れ方 | 必須 | 原稿との対応 |
|---|---|---|---|
| タイトル | 標準 | ○ | title |
| 日付 | 標準 | ○ | date |
| カテゴリ | カテゴリ(1 つ) | ○ | category |
| 本文 | 標準・ブロックエディタ(標準のブロックと HTML ブロック。§10) | ○ | 本文 |
| URL の最後の段 | ベースネーム | ○ | slug |
| タグ | 標準のタグ | — | tags |
| サブタイトル | CF subtitle・テキスト | ○ | subtitle |
| 写真(見出し) | CF image・画像 | ○ | image |
| クレジット | CF credit・テキスト | ○ | credit(「文・… 写真・…」) |
- 「読了 約 N 分」は入力させず、テンプレートで本文の文字数から出す。
max(3, ceil(文字数 / 500))。現在の原稿 5 本(593〜1,216 字)は全部 3 分になり、mockup の「約3分」と一致する。 - メタの description はサブタイトル。
6.4 カテゴリのカスタムフィールド(magazine のみ)
| 項目 | 種類 | 内容 |
|---|---|---|
name_en | テキスト | 英語名(§5.1) |
6.5 コンテンツタイプ「サービス」(ウェブサイトに作る)
| フィールド | 種類 | 必須 | 原稿 | 備考 |
|---|---|---|---|---|
(データ名 label) | — | ○ | name | 「FIVE OWN」 |
| 順序 | 数値 | ○ | order | 一覧の並び(1〜4) |
| よみ | テキスト | ○ | kana | 「ファイブ・オウン」 |
| 英語のひとこと | テキスト | ○ | tagline | |
| キャッチ | テキスト | ○ | catch | |
| 概要 | テキスト(複数行) | ○ | summary | |
| 写真 | 画像 | ○ | image | |
| 対象 | テキスト | ○ | audience | |
| 特長 1〜3 の見出し | テキスト ×3 | ○ | features[].title | |
| 特長 1〜3 の説明 | テキスト(複数行)×3 | ○ | features[].text | |
| ボタンの文言 | テキスト | ○ | cta | |
| 本文 | テキスト(複数行)・リッチテキスト | ○ | body | |
| 物件を見せる | チェックボックス(1 個) | — | show_properties | FIVE OWN と FIVE STAY がオン |
| ベースネーム(identifier) | — | ○ | slug | URL |
- 「特長」を繰り返し構造にせず 3 組のフィールドにしたのは、原稿が全件 3 つ固定で mockup も 3 列固定のため。MT のコンテンツタイプには「小さな繰り返し」の部品が無く、別のコンテンツタイプにすると過剰になる。
- ボタンの文言(
cta)は原稿にあるが、【構築で確認】mockup のどのページにも出ていない。フィールドは作り、値も入れたが、テンプレートでは出さない(R5 は解決)。 - 【構築で確認】 コンテンツフィールドの
optionsに JSON の真偽値("multiple": falseなど)を入れると、サーバが壊れた形で保存し、そのコンテンツタイプの取得・一覧・削除がすべて 500 になる。optionsには数値と文字列だけを入れる(requiredはフィールド直下なので真偽値でよい)。 - 【構築で確認】 画像フィールドは
asset_image(optionsはminmax)、「物件を見せる」はcheckboxes、状態はradio_button、数値はnumber。画像のデータはアセット ID の配列。 - 【構築で変更】 「ほかのサービス」「物件の見出し」: FIVE STAY だけ物件の節の見出しが「泊まれる家」(ほかは「持てる家」)。フィールドを足さず、テンプレートでスラッグが
stayのときだけ出し分けている。
6.6 コンテンツタイプ「物件」
| フィールド | 種類 | 原稿 |
|---|---|---|
| (データ名) | — | name |
| 順序 | 数値 | order |
| 種類 | テキスト | type(「戸建て(別荘)」) |
| 所在地 | テキスト | location |
| 建築家 | テキスト | architect |
| 竣工年 | 数値 | completed |
| 戸数 | テキスト | units |
| 状態 | ラジオ(運用中/募集中) | status |
| 単位 | テキスト | unit_price(「1口 10万円」) |
| 想定分配率 | テキスト | yield(「想定分配率 年3.8%」) |
| 写真 | 画像 | image |
| 紹介文 | テキスト(複数行) | text |
| ベースネーム | — | slug(個別ページが無いので URL には出ない。識別用) |
- 個別ページは作らない(原稿の注記どおり)。ct アーカイブテンプレートもマッピングも作らない。
- カードは「単位」「分配」の 2 つだけを出す(mockup)。分配は
想定分配率 年3.8%から接頭辞を除いて年3.8%(想定)と出す。→ 原稿を割らず、テンプレートでreplaceする。うまくいかなければ、分配率を数値フィールドにして年{n}%(想定)をテンプレートで組む(構築時に決める)。 - 建築家・竣工年・戸数は現行 mockup のどこにも出ていない。フィールドは原稿どおり作る(将来の個別ページ用)。
6.7 コンテンツタイプ「メンバー」
| フィールド | 種類 | 原稿 |
|---|---|---|
| (データ名) | — | name(「早瀬 湊」) |
| 順序 | 数値 | order |
| 英語名 | テキスト | name_en |
| 役職 | テキスト | role |
| 写真 | 画像 | image(team-ceo など) |
| 経歴 | テキスト(複数行) | bio |
| ベースネーム | — | slug |
6.8 ウェブページ(3 枚)
| 項目 | 入れ方 | 原稿 |
|---|---|---|
| タイトル | 標準 | title |
| ベースネーム | 標準 | slug(company contact privacy) |
| 本文 | 標準・リッチテキスト(表を含む) | 本文(Markdown の表は HTML の表に変換して入れる) |
| 導入文 | CF lead・テキスト(複数行) | lead |
| 英語見出し | CF eyebrow・テキスト | eyebrow(Company / Contact / Privacy Policy) |
| 写真 | CF image・画像(会社概要だけ) | image(office) |
- 本文の表は、MT 標準の Markdown 変換では表にならない。書式は「リッチテキスト」にして HTML の表を入れる。
- 【構築で確認】 ページの本文の API 項目名は
body(記事と同じ。textを送ると無視されて本文が空になる)。ページは 1 枚のテンプレート「ウェブページ」で出し、スラッグがcompanyのときだけ会社概要の構成(写真・ミッション・メンバー・表・CTA)にする。お問い合わせでは注意書きの囲みを出す。 - 会社概要のページ内の「経営陣」はメンバー(§6.7)、ミッションとステートメントはサイトの設定(§7)から出す。ページ本文に重複して入れない。
6.9 カスタムフィールドを作るための権限
カスタムフィールドの管理には「テンプレートの管理」権限が要る。構築は admin(システム管理者)で行うので問題ない。
7. サイトの設定値(content/site.yaml)の持ち方
テンプレートモジュールで持つ。 ウェブサイトに「設定」で始まる名前のモジュールを作り、各ブログのテンプレートから mt:Include(blog_id 指定)で読む。
| モジュール | 入るもの(site.yaml のキー) | 出す場所 |
|---|---|---|
| 設定:サイト | name name_ja description tagline copyright social | <title> meta フッタ |
| 設定:トップ | mission statement stats(4 つ) | トップ・会社概要 |
| 設定:プレス | boilerplate press_contact | プレスリリース詳細の末尾(毎回) |
| 設定:注意書き | demo_notice.band company contact press homes | 帯(全ページ最上部)、会社概要・お問い合わせ・プレス詳細・物件の囲み |
この形にした理由
- 設定は「情報システムがときどき触る」もの。広報・編集部の権限にテンプレートの管理は含めないので、触れない。
- 「整形済みテキスト」も検討したが、MT 9.3 の標準タグ一覧に取り出すタグが見当たらず、ブログをまたいで読めるかも不確かなので避けた。
- 構造のある値(統計の 4 つ・SNS)はモジュールの中の MTML で素直に書ける。
注意書きの出す場所(mockup から)
| 種類 | 出すページ |
|---|---|
帯 band | 全ページの最上部(<p class="fu-demo-band" role="note">) |
company | 会社概要 |
contact | お問い合わせ |
press | プレスリリース詳細 |
homes | 物件のカードを出す 3 か所(トップ、FIVE OWN、FIVE STAY) |
プレス詳細の「このリリースについてのお問い合わせ」は press_contact、「ファイブユナイテッド株式会社について」は boilerplate。
8. 画像と静的ファイル
| 置くもの | 元 | 置き場所(URL) | 方法 |
|---|---|---|---|
| CSS | mockup/css/site.css | /css/site.css | インデックステンプレート「スタイルシート」(出力ファイル css/site.css)にそのまま入れる |
| ロゴ・アイコン(SVG) | mockup/brand/* | /brand/… | mtb assets upload --path /brand(画像扱いにならず、バイトのまま入る) |
| 写真 | mockup/images/* | /images/… | mtb assets upload --path /images(800・1600・2400 幅をすべて) |
| OGP 画像 | mockup/images/ogp-default.jpg | /images/ogp-default.jpg | 同上 |
画像の持ち方
- 画像フィールド(
image)には 1600 幅のアセットを紐づける(content/images/*-1600.webp、原稿のimage: press-funding→press-funding-1600.webp)。 - 一覧のカードで使う 800 幅、トップのヒーローで使う 2400 幅は、
mockup/images/に既にあるものを同じフォルダに上げ、テンプレートで URL の-1600を-800に置換して出す(replaceモディファイア)。 - MT のサムネイル生成(
AssetThumbnailURL)は使わない。WebP を生成できるかがサーバの画像ライブラリ次第で、確かめようがないため。 content/images/*.webpとmockup/images/*-1600.webpが同一かは、構築時に確認する。違えばcontent/を正とする(中身が正)。- MT は画像を再保存する。 WebP が劣化しないか(サイズ・見た目)を最初の 1 枚で確かめる。劣化するなら、画像だけ人が FTP などで
/images/に置き、アセットは登録のみにする(§13)。【構築で確認】WebP は再保存されず、バイト単位で元と同一だった(cmpで確認。R3 は問題なし)。content/images/*-1600.webpとmockup/images/*-1600.webpも全 45 枚が同一。JPEG(ogp-default.jpg)は MT の仕様で再保存される。 - 【構築で確認】 アセットの URL・画像のカスタムフィールドの値は、ドメイン込みの絶対 URL(
http://localhost:8090/images/…)で保存・出力される。テンプレートではregex_replace="/^https?:\/\/[^\/]+/",""を付けて、ルートからの形(/images/…)にして出す。ドメインを変えたときに画像の参照が壊れない。 - 【構築で確認】 画像のカスタムフィールドは
<$mt:PressImage$>のようにタグをそのまま使うと URL が出る(…ImageAssetブロックは空になった)。コンテンツデータの画像フィールドは<mt:ContentField content_field="写真"><$mt:AssetURL$></mt:ContentField>。 altはアセットの説明に入れる(原稿の画像にはaltが無いため、人物は氏名・物件は物件名、マガジンの図は本文中の説明文を使う。装飾の写真は空)。
9. テンプレート
9.1 作り方:テーマではなく、テンプレートを直接作る
- 理由:テーマの配布にはサーバへのファイル配置が要る(Data API からは入れられない)。今は配置手段が無い。
- テンプレートは
mtb sites templates create/updateで作り、mtb sites templates pull/pushで手元のファイルと往復させる。ファイルはtemplates/に置いて Git で持つ。 - テーマの適用はしない。適用するとテンプレートが全部 backup 型になり、マッピングも出力ファイル名も消えるため。
- 後から別環境に移したくなったら、
mtb-migrateかexport-themeで吸い出す。 - 【構築で変更】 新しいサイト(ウェブサイト・ブログ)には、
eigerwandテーマの既定テンプレート(各 33 個)・サンプルのページ(「ウェブページの例」「このページについて」)・フォルダaboutが自動で入り、styles.cssatom.xmlarchives.htmlmt.jsなどを書き出す。テンプレートを作る前に、システム用のものを残して全部削除した(出力済みのファイルは MT が消さないので、先に本文を空にして公開してから削除。ファイルそのものの削除は人の作業。§13 H10)。 - 【構築で変更】 テンプレートは
templates/(日本語名の.mtml)に置き、build/のスクリプト(gen_*.pyが mockup の HTML から生成、deploy.pyが MT に作成・更新)で入れる。mockup と公開側をbuild/compare.pyで突き合わせると、47 ページとも一致する(§15)。生成スクリプトを正とするので、テンプレートを直すときはgen_*.pyを直してdeploy.pyを流す。
9.2 テンプレートモジュール(ウェブサイトに作り、ブログから読む)
| モジュール | 内容 |
|---|---|
| 共通:ヘッド | <head>、<title>、OGP、フォント、CSS |
| 共通:ヘッダー | デモの帯、ロゴ、グローバルナビ(サービス・会社概要・お知らせ・プレスリリース・マガジン)、モバイルメニュー |
| 共通:フッター | ロゴ、サービス/About/Contact の列、SNS、コピーライト、注意書き |
| 共通:パンくず | ホーム › … |
| 部品:記事カード(press/magazine/news 行) | 一覧とトップで使い回す |
| 部品:物件カード | トップ・FIVE OWN・FIVE STAY で使い回す |
| 設定:サイト/トップ/プレス/注意書き | §7 |
- ブログから読むときは、ウェブサイトのモジュールを
blog_id付きで読む(子サイトからは親のモジュールが自動では見えない)。 - ナビの「現在地」(
aria-currentと下線)は、各テンプレートが変数(nav_current)を立ててからヘッダーを読んで切り替える。
9.3 ウェブサイト(/)
| テンプレート | 種別 | 出力 | 補足 |
|---|---|---|---|
| メインページ(トップ) | index | index.html | ヒーロー/統計 4/ビジョン/サービス 4/物件 3/マガジン(最新 3:大 1 + 小 2)/プレス(最新 2)/お知らせ(最新 4)。物件は順序の先頭 3 件 |
| サービス一覧 | index | services/index.html | サービス 4 件を順序順に、写真を左右交互に |
| サービス詳細 | ct | §4 のパス | 特長 3 つ、本文、show_properties がオンなら物件 5 件(順序順・全件)、ほかのサービス 3 つ |
| ウェブページ | page | §4 のパス | 3 枚共通。会社概要だけ追加でメンバー 5 人・ミッション。写真は image があるときだけ |
| スタイルシート | index | css/site.css | |
| サイトマップ | index | sitemap.xml | §9.6 |
- ブログをまたいで最新を拾う部分(トップのプレス・お知らせ・マガジン)は、各ブログの ID を
include_blogsに並べる。 - すべての一覧は件数を明示して全件にする(
lastnを既定に頼らない。ブログの既定は 10 件で、すぐ欠ける)。ページ送りは作らない。
9.4 ブログ共通(news/press/magazine)
| テンプレート | 種別 | 出力・マッピング |
|---|---|---|
| メインページ(一覧) | index | index.html。全件を日付の新しい順。上に種類の絞り込みボタン(すべて/各カテゴリ)、現在地のボタンは反転 |
| 記事 | individual | <$mt:EntryBasename$>/index.html(優先) |
| カテゴリ一覧 | archive | category/<$mt:CategoryBasename$>/index.html(優先)。件数は全件 |
見た目の違い(mockup どおり):
| ブログ | 一覧の形 | 詳細の形 |
|---|---|---|
| news | 日付・種類(枠だけのバッジ)・タイトルの行。画像なし | 本文のみ。写真なし |
| press | 写真つきカード(種類バッジ・日付・タイトル)。種類ごとの色 | ヒーロー写真、要点(Highlights)、本文、会社概要、問い合わせ先、デモの注意書き、「ほかのプレスリリース」(同じカテゴリ以外から新しい 3 件を目安) |
| magazine | 先頭 1 件を大きく、続く 2 件を縦に並べる雑誌風。カテゴリナビは英語名 | 全幅の見出し写真、種類・タイトル・サブタイトル、日付・クレジット・読了時間、本文(専用の見せ場)、タグ、「次に読む」3 件 |
- 「ほかの○○」「次に読む」の選び方(同じ記事を除く新しい 3 件にするか、関連を見るか)は、mockup の並びから現在の記事を除いた新しい順の 3 件を既定にする。【構築で確認】 mockup の 5 ページ(プレス 2・マガジン 3)で確かめて、この規則で一致した。
- 【構築で確認】記事アーカイブの中で
mt:Entriesを使うと、既定では「その記事より古いもの」に絞られる。 関連一覧にはignore_archive_context="1"を付ける。 - 【構築で変更】 種類の絞り込みは、各ブログのテンプレートモジュール「部品:種類の絞り込み」に、カテゴリを並べた順で固定の HTML として書いた。
<mt:Categories>のsort_by="user_custom"(管理画面の並び順)が効かず、ラベル順になってしまうため。カテゴリを足した・並べ替えたときは、build/gen_tpl4.pyのCATSを直してdeploy.pyを流す(情報システムの作業。広報・編集部がカテゴリを足してもボタンには出ない。記事は種類のページに載る)。 - 【構築で変更】 マガジンの記事のタグ(
#建築など)は、MT が名前順に並べて出す(mt:EntryTagsに並び順の指定が無い)。mockup は原稿の順なので、タグの並びだけが mockup と異なる(意図した差分。比較ツールは並びを無視する)。 - 【構築で確認】 ブログのテンプレートからウェブサイトのモジュールを
<mt:Include module="…" blog_id="1">で読め、モジュールの中でmt:SetVarBlockした変数は読み込み側で使える(設定のモジュールが成り立つ)。インクルードしたモジュール名が MT に存在しないと、公開が「403 Do not have permission to publish a template」で失敗する(権限の問題ではない)。
9.5 フィード
| テンプレート | 出力 | 内容 |
|---|---|---|
| プレスのフィード | press/feed.xml(Atom) | 新しい 20 件。title・サブタイトル(summary)・本文・日付・URL |
| マガジンのフィード | magazine/feed.xml(Atom) | 同上 |
- フィードの記事は全件ではなく新しい 20 件とする(購読の用途のため。要件の「全件」は一覧ページの話)。
- 各一覧/詳細のヘッドに
<link rel="alternate" type="application/atom+xml">を付ける。
9.6 サイトマップ
/sitemap.xml(ウェブサイトの index)に、次のすべてを <url> で並べる。
- トップ、サービス一覧、サービス詳細 4、固定ページ 3
- お知らせ一覧・カテゴリ 4・記事 8
- プレス一覧・カテゴリ 6・記事 7
- マガジン一覧・カテゴリ 5・記事 5
ブログ側は include_blogs で束ねる。lastmod は記事の更新日。
9.7 <head> の中身
| 値 | |
|---|---|
<title> | トップ:Five United — 住まいをひらかれた資産に固定ページ・一覧: <ページ名> | Five Unitedお知らせ詳細: <題> | Five United/お知らせのカテゴリ:<種類> | お知らせ | Five Unitedプレスのカテゴリ: <種類> | プレスリリース | Five United/マガジンのカテゴリ:<種類> | FIVE マガジン | Five Unitedマガジン詳細: <題> | FIVE マガジン | Five United |
description | プレス・マガジンの詳細:サブタイトル/サービス詳細・固定ページ:概要・導入文/それ以外:サイトの description |
og:image | 詳細は記事の写真(1600 幅)、それ以外は /images/ogp-default.jpg |
mockup の各ページと 1 件ずつ突き合わせて確定する。
9.8 日付
2026.10.14 の形:format="%Y.%m.%d"。<time datetime="2026-10-14"> の属性は %Y-%m-%d。
10. マガジンの本文(ブロックエディタ)
カスタムブロックは作らない。 見せ場は、ブロックエディタの標準のブロックと HTML ブロックに、mockup の本文と同じ HTML を入れて出す。 (理由:カスタムブロックは Data API で作れず、管理画面で 6 つ作る手間が大きい。HTML ブロックなら管理画面の作業が増えない。)
10.1 原稿の記法と、使うブロック
| 原稿の記法 | 使うブロック | 本文に入る HTML(mockup と同じ) |
|---|---|---|
| 地の文 | 標準の段落 | <p>…</p> |
## 見出し | 標準の見出し(レベル 2) | <h2>…</h2> |
(普通の写真) | 標準の画像 | <figure><img src="…" alt="説明"><figcaption>説明</figcaption></figure> |
::: qa | HTML | <div class="fu-mag-qa"><p>質問</p></div> |
::: pullquote | HTML | <blockquote class="fu-mag-pullquote"><p>本文</p><p>発言者</p></blockquote> |
::: wide <画像> | HTML | <figure class="fu-mag-wide"><img src="…-1600.webp" alt="説明"><figcaption>説明</figcaption></figure> |
::: number | HTML | <div class="fu-mag-number"><p>数字</p><p>説明</p></div> |
::: note | HTML | <div class="fu-mag-note"><p>本文</p></div> |
::: profile <画像> | HTML | <div class="fu-mag-profile"><img src="…-800.webp" alt="氏名"><div><p>氏名</p><p>紹介</p></div></div> |
- 本文全体は
<div class="fu-mag">の中に出す(テンプレート側。編集部は書かない)。 - 画像の
altは説明と同じ文を入れる(mockup どおり)。人物紹介の写真はaltを氏名にし、800 幅を使う。 - 普通の写真の
<figure>は、標準の画像ブロックが出す HTML が上と同じかを構築時に確かめる(違えば HTML ブロックで入れる。R2)。
10.2 取り込み(私が行う)
- 原稿の本文を、上の表の HTML に変換した文字列を記事の本文として入れる。
::: …の囲みは HTML ブロックの 1 つに対応させ、ブロックエディタが読み戻せる形(ブロックを区切るコメントなど、MT の保存形式)で入れる。保存形式は、構築時に管理画面で 1 本作って書き出された本文を見て合わせる(R2)。 - 本文中の画像の URL は、サイトのルートからの形(
/images/mag-materials-1600.webp)で書く。ドメインを変えても壊れない(§14.1)。 - 取り込んだあと、管理画面で開いてブロックが崩れていないことを確かめる(§15)。
- 【構築で確認】 5 本とも、書式
block_editorのまま、本文はブロックの区切りコメントなしの素の HTMLで保存した(API で保存・取得できる)。公開側は mockup と同じ HTML になった。管理画面のブロックエディタがこの本文をどう開くかは、こちらからは確かめられなかった(ブラウザが無い)。→ §13 H11 で人が確認する。崩れる場合は §16 R2 の代案(書式をリッチテキストにする)に切り替える。
10.3 編集部が新しく書くとき(手順)
道具は 3 つ。①標準のブロック(段落・見出し・画像)、②HTML ブロック、③下の見せ場の雛形(コピーして貼る)。クラス名(fu-mag-…)は変えない。変えると見た目が崩れる。
手順
- 管理画面で FIVE マガジンを開き、[記事を作成] を押す。書式が ブロックエディタになっていることを確かめる。
- タイトル・カテゴリ・タグ・サブタイトル・見出し写真・クレジットを埋める。URL の最後の段(ベースネーム)は、英小文字とハイフンで決める(例:
new-house)。 - 本文を書く。
- 地の文は段落ブロック、小見出しは見出しブロック(レベル 2)。
- 普通の写真は画像ブロックで、画像を選び、キャプションを入れる。
- 見せ場はHTMLブロックを足し、雛形を貼って、かぎ括弧の中の文字だけ書き換える。
- [プレビュー] で見た目を確かめる。
- 状態を [公開] にして保存する。
見せ場の雛形(太字の部分だけ書き換える)
<!-- 質問(インタビューの聞き手) -->
<div class="fu-mag-qa"><p>【質問の文】</p></div>
<!-- 引用(大きく見せる一言) -->
<blockquote class="fu-mag-pullquote"><p>【引用の文】</p><p>【発言した人】</p></blockquote>
<!-- 数字(大きな数字と、その説明) -->
<div class="fu-mag-number"><p>【23,000人】</p><p>【数字の説明】</p></div>
<!-- 注記(記事の最後などの断り書き) -->
<div class="fu-mag-note"><p>【注記の文】</p></div>
<!-- ワイド画像(横いっぱいの写真) -->
<figure class="fu-mag-wide"><img src="【画像の URL】" alt="【説明】"><figcaption>【説明】</figcaption></figure>
<!-- 人物紹介(記事の最後) -->
<div class="fu-mag-profile"><img src="【顔写真の URL】" alt="【氏名】"><div><p>【氏名(よみ)】</p><p>【肩書きと経歴】</p></div></div>画像の URL の取り方(ワイド画像・人物紹介)
- 画像ブロックの画像選択と同じ操作で、画像をアップロードする(アセットとして登録される)。
- アセットの一覧で画像を選び、[URL] をコピーする。
- 雛形の【画像の URL】に貼る。
http://から/までのドメインの部分を消し、/から始まる形にする(例:http://localhost:8090/magazine/assets/a.webp→/magazine/assets/a.webp)。ドメインを変えたときに壊れないため。
気をつけること
- HTML ブロックの中の文字は、
<>&をそのまま書かない(<>&にする)。 - 見せ場の雛形は 1 ブロックに 1 つ。複数を 1 つの HTML ブロックにまとめない(並べ替えが難しくなる)。
- HTML ブロックを使うと、ブロックエディタ上では見た目ではなく HTML の文字が見える。見た目は [プレビュー] で確かめる。
- 雛形は、構築後に
design-doc.mdと別の「編集部向けの手順書」(§13 の H8)にも載せる。
10.4 【運用で確認】管理画面で確かめた結果(R2 の答え)
佐伯のアカウントで、実際の画面(Playwright)で確かめた。
| 確かめたこと | 結果 |
|---|---|
| (a) HTML ブロックが選べる | ○。[+ ブロックを追加]の一覧に「HTML」がある(ほかに oEmbed・罫線・テーブル・マルチカラム)。[T](テキスト)・[画像]・[ファイル]は一覧の左に出ている |
| 取り込んだ記事が崩れずに開く | ○。本文全体が1つの HTML ブロックとして開く(ブロックごとには分かれない)。画像・引用も表示される |
| 取り込んだ記事を保存し直す | ○。複製の記事で、サブタイトルだけ変えて[更新]。公開本文が元の記事と完全に同じ。保存後の本文は <!-- mt-beb t="core-html" -->…<!-- /mt-beb --> で包まれる(公開側では出ない) |
(b) HTML ブロックの class が保たれる | ○。新しく入れた雛形(質問・数字)が、class のまま保存・公開された |
| (c) 標準の「画像」ブロックの出力 | mockup の <figure> とは違う。<p><img src="http://…/magazine/….webp" alt="" width height class="asset asset-image" style="max-width:100%;height:auto;display:block"/></p>(キャプションなし・ドメイン込みの URL・alt 空)。見た目は本文の幅いっぱい・角丸で崩れない。キャプションつきの写真は HTML ブロックの雛形(manual/04-magazine.md)で入れる |
| 見出し | ○。テキストブロックの「段落」プルダウンから「見出し 2」(Windows は Ctrl+Alt+2)。<h2> で保存され、公開側のスタイルで表示される |
| プレビュー | ○。[プレビュー]で別の画面に、公開と同じ見た目が開く(一時ファイルは公開パスに書かれる。H10) |
| 担当以外が見えない | ○。佐伯・相沢とも、ダッシュボードには自分の担当のサイトだけ。他のブログの記事一覧は「権限がありません」。ウェブサイトのページ・テンプレート・ユーザー・システムは「アクセス権がありません」 |
【運用で確認】見つけて直した不具合:画像のカスタムフィールド(写真・見出し写真)の保存形式は2通りある。 API で入れた値(原稿の取り込み)は URL の文字列だが、管理画面で[画像を選択]から入れた値は <form mt:asset-id="…" class="mt-enclosure mt-enclosure-image">…</form> の HTML。構築時のテンプレートは前者だけを想定していて、管理画面から写真を入れた記事で、画像が壊れて HTML が漏れた。直し方:テンプレートモジュール「部品:画像URL(マガジン)/(プレス)/(ページ)」を作り、アセットのブロック(…ImageAsset)で取れればその URL、取れなければ生の値を、ドメインを除いて出す。マガジン・プレス・固定ページのテンプレートはこのモジュールを mt:Include で使う(replace でサイズも変えられる)。
11. ユーザーと権限
11.1 ユーザー
| ユーザー | 担当 | 管理画面 | 備考 |
|---|---|---|---|
admin(既存) | 情報システム(1人)。それ以外すべて | ○ | システム管理者。構築もこのアカウントで行う。情報システム用の別アカウントは作らない |
aizawa(相沢・広報) | news・press | ○ | メール aizawa@five-united.example |
saeki(佐伯・編集部) | magazine | ○ | メール saeki@five-united.example |
- 表示名は「相沢」「佐伯」。
- 初期パスワードは構築のときに私が決め、最後にあなたにだけ伝える(会話で渡す)。ファイル(設計書・スクリプト・メモ・Git)には残さない。コマンドには環境変数経由で渡し、シェルの履歴に残らない形にする。
- 初回ログイン後にパスワードを変えてもらう(H1)。
11.2 ロール(組み込みの範囲で足りる)
| ユーザー | サイト | ロール | できること |
|---|---|---|---|
admin | すべて | システム管理者 | ロールの付与は要らない(システム管理者はすべてのサイトを扱える) |
aizawa | お知らせ、プレスリリース | Editor | 全記事の編集・カテゴリ・アップロード・公開 |
saeki | FIVE マガジン | Editor | 同上(マガジンのみ) |
- 広報と編集部は、担当以外のブログには何も与えない(ウェブサイト・他のブログにはロールを付けない)。サービス・物件・メンバー・固定ページ・テンプレート・サイト設定は触れない。
- Editor は「カテゴリの管理」を含み、カテゴリの追加・並び替え・削除ができる。これは許す(決定)。ただし URL に出るカテゴリの basename(
infofundingtechなど)は、変えると URL とバッジの色が変わるので、変えないことを手順書に書く(H8)。独自ロールは作らない。 - 2 人にシステム権限
sign_in_cmsを付ける(付けないと管理画面に入れない)。adminは不要。
11.3 Data API の関門について
Data API を使うのは構築する側(admin)だけ。広報・編集部は管理画面だけで使うので、Webサービスパスワードや Data API の許可は編集者のために用意しなくてよい。 ただし一般ユーザーの Data API を後で使う予定があれば、sign_in_data_api・Web サービスパスワード・サイトの Data API 許可が要る(新しいサイトは Data API が無効で始まる)。mtb-pro 拡張が無いのでこの 2 つは管理画面の作業(§13)。
12. 原稿の取り込み
12.1 件数と対応
| 原稿 | 件数 | 入れ先 | 変換 |
|---|---|---|---|
content/news/*.md | 8 | news の記事 | 本文 Markdown → HTML。category(日本語)→ カテゴリ |
content/press/*.md | 7 | press の記事 | 本文 → HTML、highlights → CF 3 つ、image → CF の画像 |
content/magazine/*.md | 5 | magazine の記事 | 本文 → §10.1 の HTML(標準ブロック+HTML ブロック)、tags、image/credit/subtitle → CF |
content/pages/*.md | 3 | ウェブページ | 本文 → HTML(表あり) |
content/services.yaml | 4 | コンテンツタイプ「サービス」 | §6.5 |
content/properties.yaml | 5 | コンテンツタイプ「物件」 | §6.6 |
content/members.yaml | 5 | コンテンツタイプ「メンバー」 | §6.7 |
content/site.yaml | 1 | モジュール | §7 |
content/images/ | 45 | アセット | §8 |
12.2 注意
- ファイル名の日付(
2026-10-14-series-b.md)は URL に使わない。URL は front matter のslug(series-b)。ファイル名のslug部分と食い違う原稿があるので(例:2026-04-08-atlas-2.mdの slug はatlas-2、2026-08-05-academic.mdはisbc-2026)、必ず front matter を読む。 - 記事の
statusはPublishを明示する(省くと下書きになる)。 - 日付は時刻と時差(
+09:00)まで付けて送る。日付だけだと日がずれることがある。 FIVE マガジンの本文の画像参照(mag-materialsなど)は、アセット(mag-materials-1600.webp)のルートからの URL(/images/mag-materials-1600.webp)に置き換える。ドメインを入れない(§14.1)。- 本文中のメールアドレス(
.example)はそのまま出す。
13. 人が管理画面でする作業(mtb でできないこと)
| # | 作業 | いつ | 理由 |
|---|---|---|---|
| (第2版で「ブロックエディタのカスタムブロック 6 種を作る」作業をなくした。§10。) |
| # | 作業 | いつ | 理由 |
|---|---|---|---|
| H1 | 相沢・佐伯の初回ログインとパスワード変更(本人が行う。sign_in_cms の付与とアカウントの作成は mtb でできる) | 引き渡し | 本人にしかできない |
| H2 | MT の再起動(担当のコンテンツタイプや新しいメニューが出ない場合のみ) | 権限を渡した後 | メニューは起動時に作られる |
| H3 | 編集画面の表示オプション:相沢の画面でサブタイトル・要点・写真のカスタムフィールドを表示する/佐伯の画面でサブタイトル・写真・クレジットを表示する。【運用で確認】済み:マニュアル撮影のときに、相沢(プレス:要点1〜3・写真)・佐伯(マガジン:クレジット・見出し写真)の画面で表示した。設定は2人の画面に残っている(再ログイン後も確認) | 済み | 利用者ごとの設定で、API からは変えられない |
| H4 | 記事の書式の既定(news・press はリッチテキスト、magazine はブロックエディタ)が、サイト設定の convertParas どおりになっているかの確認。違えば設定する | 記事を入れる前 | API の応答からは見えない |
| H5 | 画像が MT の再保存で劣化する場合のみ:/images/ にファイルを直接置く(/data/file/static/images/ へコピー) | §8 の検証後 | MT が画像を再保存するため |
| H6 | http://localhost:8090/ が /data/file/static を配信していること、MT のプロセスがそこへ書き込めることの確認(権限・所有者の調整が要れば Web サーバ側で行う) | 構築の最初 | MT の外の作業。mtb からは見えない |
| H7 | (将来、Data API を一般ユーザーに使わせるなら)Web サービスパスワードの発行、サイトごとの Data API 許可 | 必要になったとき | mtb-pro 拡張が無い |
| H8 | 引き渡しの操作説明(広報・編集部向けの入力手順)。【運用で確認】作成済み:manual/(画面写真つき。操作は実際の管理画面で確かめて書いた) | 済み | 設計の範囲外。構築後に別途 |
| H9 | 公開用ドメインへの切り替え時の Web サーバ側の設定(ドメイン・配信先・証明書) | 公開のとき | MT の外の作業。MT 側の手順は §14.1 |
| H10 | 不要な出力ファイルの削除(/data/file/static の中)。既定テーマや構築の途中で書き出された、中身が空のファイル:styles.css atom.xml archives.html mt.js mt-theme-eigerwand.js company.html contact.html privacy.html、および news/ press/ magazine/ の下の styles.css atom.xml archives.html mt.js mt-theme-eigerwand.js。【構築で変更】追加 | 公開前 | mtb(Data API)ではファイルを消せない。MT はテンプレートを消しても出力済みのファイルを消さない。今は中身を空にしてあり、害は無いが、URL としては 200 で応答する。【運用で確認】追加:確認用の記事を公開して削除した跡の空のフォルダが残っている(news/post/ news/manual-check-news/ press/manual-check-press/ press/manual-check-feed/ magazine/manual-check-mag/ magazine/manual-check-edit/ magazine/manual-check-img/。URL は 403)。プレビューの一時ファイル(mt-preview-….html)が残っていないかも見てもらう |
| H11 | 佐伯のアカウントで、取り込んだマガジンの記事 5 本を管理画面で開く。ブロックが崩れず、HTML ブロックが選べるか確かめる。続けて §10.3 の手順で新しい記事を 1 本作って公開する。【運用で確認】済み(結果は §10.4 と build-log.md)。残り:2 人の実際の初回ログインとパスワード変更(H1) | 済み | ブロックエディタの読み込みは画面でしか確かめられない(R2) |
| H12 | カテゴリを足した・並べ替えたときの絞り込みボタンの作り直し(情報システム。gen_tpl4.py の CATS + deploy.py) | カテゴリを変えたとき | <mt:Categories> の管理画面の並び順が効かない(§9.4) |
| H13 | トップページとサイトマップの再構築。【運用で確認】ブログの記事を公開・取り下げても、ウェブサイト側のトップ(index.html)とサイトマップ(sitemap.xml)は自動では再構築されない(記事ページ・一覧・種類別の一覧・フィードは自動)。情報システムが sh build/rebuild-index.sh を実行する(cron で数分おきに回すのが現実的)。MT の「再構築トリガー」で連動できるかは未確認(Data API には無く、システム管理者の管理画面の作業) | 公開のたび/定期 | MT の仕様。トップのお知らせ・プレス・マガジンは include_blogs で他のブログを読むため、親側の再構築が別に要る |
| H14 | 取り下げ・カテゴリの付け替えのあとの[再構築](広報・編集部が自分の画面でする)。【運用で確認】記事を「未公開(原稿)」にしても、種類ごとの一覧(…/category/…/)には記事が残る。ブログの左上の[再構築]→「すべてのファイル」で消える(広報のアカウントで確認)。記事の削除でも同じ(種類ごとの一覧と「ほかの○○」欄に残る) | 取り下げのたび | MT の再構築の範囲の仕様。手順は manual/01-start.md の 1-6 |
14. 構築の順序(mtb)
テーマを使わないので順序は次のとおり。接続先を毎回口に出して確かめる(mtb profile show → mtb sites list)。
0. 確認 プロファイル、MT の状態、`http://localhost:8090/` の配信と
`/data/file/static` への書き込み(H6)、画像の同一性、WebP の再保存
1. サイト ウェブサイト(url=http://localhost:8090/、sitePath=/data/file/static)
→ 3 ブログ(url/sitePath は親からの相対)
2. 分類 カテゴリ(news 4・press 6・magazine 5)と並び替え
3. 構造 カスタムフィールド(プレス・マガジン・カテゴリ・ページ)、
コンテンツタイプ 3 つとそのフィールド
4. 人 ユーザー作成(aizawa・saeki。パスワードは §11.1)→ sign_in_cms
→ ロールの付与(コンテンツより先に)
5. 素材 アセット(画像・SVG)のアップロード
6. コンテンツ サービス・物件・メンバー → ページ 3 → 記事(news 8 → press 7 → magazine 5)
7. 見た目 モジュール → テンプレート(ブログ共通・ウェブサイト)→ マッピング
8. 公開 index を publish、記事は変更を伴う更新で再構築、--verify-publish
9. 確認 §15
10. 引き渡し 初期パスワードを会話で伝える(ファイルに残さない)- 分類より先にコンテンツを作らない(URL が変わる)。ユーザー・権限もコンテンツより先(所有者がずれるため)。
- ウェブページは作成時にフォルダを指定できないが、今回はフォルダを使わないので影響なし。
- 再公開に
--entry '{}'は使わない(関連が外れて URL が変わることがある)。
14.1 公開用ドメインへの切り替え(あとで行う)
手元(http://localhost:8090/)で組んで確かめたあと、公開用のドメインに変える。変える前提で、次のように作っておく。
| 作っておくこと | 理由 |
|---|---|
テンプレートのリンク・CSS・画像はルートからの形(/css/site.css /news/)で書く(mockup のとおり) | ドメインに依存しない |
記事・ページの本文に入れる画像も /images/… の形(§10.2、§12.2) | 同上 |
絶対 URL が要る所(フィード、サイトマップ、og:image、canonical)は、mt:BlogURL などの MT のタグで出し、固定の文字列を書かない | サイトの URL を変えれば追随する |
切り替えの手順
- 4 つのサイト(ウェブサイトと 3 ブログ)の
urlを新しいドメインに更新する。ブログのurlとsitePathは親からの相対なので、親だけ変えれば済むかを確かめる。公開パスを変えるなら、ウェブサイトのsitePathも更新する。 - 本文に旧ドメイン(
http://localhost:8090)が入っている記事・ページを探して置き換える。管理画面の画像ブロックで入れた画像は絶対 URL で保存されることがあるので、必ず探す。mtb sites entries listで本文を取り、置換してupdateする(本文が変わるので、その記事は再構築される)。 - 全サイトを再構築する(
mtb publish entries --wait+ index テンプレートの publish)。 - 公開側に旧ドメインが残っていないか確かめる(
curlした HTML にlocalhost:8090が無いこと)。 - Web サーバ側の設定(H9)は MT の外で行う。
15. 確認の項目(構築後)
| 確認 | 方法 |
|---|---|
| すべての URL が mockup と一致 | mockup/ の html の一覧(47 ページ。design-system/ は部品の見本なので除く)と、公開側の出力ファイルを突き合わせる。404・余計な URL が無いこと |
| 内容 | ページごとに curl して、</mt: が本文に残っていないこと、タイトル・description・日付形式を mockup と比べる |
| 見た目 | 公開側と mockup/ を並べて見る(ヘッダ、一覧、詳細、スマホ幅) |
| 一覧が全件 | news 8/press 7/magazine 5/各カテゴリの件数が §5.1 と一致 |
| 注意書き | 帯が全ページに、囲みが §7 の 5 か所に出ている |
| プレス末尾 | 全 7 件に会社概要と問い合わせ先が付く |
| 画像 | カードは 800 幅、ヒーローは 2400 幅の URL が 404 にならない。WebP が劣化していない |
| フィード・サイトマップ | feed.xml が正しい XML、sitemap.xml の件数が §9.6 と一致 |
| 権限 | 広報/編集部のアカウントで管理画面に入り、担当以外が見えない・触れない。記事を 1 本作って公開し、サイトに出る(確認後に削除) |
| 編集画面 | 必要な欄が出ているか(H3)、書式が想定どおりか(H4) |
| マガジンの本文 | 取り込んだ 5 本を管理画面で開き、ブロックが崩れていない(HTML ブロックが HTML のまま残っている)。公開側の見せ場(質問・引用・数字・注記・ワイド画像・人物紹介)が mockup と同じ HTML で出ている |
| 編集部の手順 | 佐伯のアカウントで §10.3 の手順どおりに 1 本作り(雛形の貼り付け、画像の URL の取り方を含む)、プレビューと公開を確かめる(確認後に削除) |
| ドメインの残り | 公開側の HTML に絶対 URL の localhost:8090 が、サイトの URL として出る所(フィード・サイトマップ・og:image)以外に無い(§14.1) |
16. 未確認・リスク
【構築で確認】結果(2026-11-06) — 下の表は設計時の内容。構築での結果は次のとおり。
| # | 結果 |
|---|---|
| R1 | 解決。コンテンツデータの URL の最後の段は API の basename で指定できる(identifier ではない)。スラッグ用フィールドは不要(§4) |
| R2 | 解決(§10.4)。HTML ブロックは選べ、class も保たれ、取り込んだ記事も崩れずに開いて保存し直せる。代案(リッチテキストへの切り替え)は不要 |
| R3 | 問題なし。WebP は再保存されず元と同一(§8) |
| R4 | 解決。変換スクリプト(build/lib.py)の出力が、20 本の本文(お知らせ 8・プレス 7・マガジン 5)とも mockup の HTML と一致した。固定ページ 3 枚も公開側で一致 |
| R5 | 解決。cta は mockup のどこにも出ていない(§6.5) |
| R6 | 解決。replace="想定分配率 ","" で 年3.8% と出せる。数値フィールドへの分割は不要(§6.6) |
| R7 | 確認済み。管理画面で入れた画像の URL はドメイン込み(画像ブロックの本文・画像カスタムフィールドとも)。雛形の写真は / から始まる形にする手順にした(マニュアル)。切り替え時の置換は §14.1 の 2 のとおり |
| # | 内容 | 確かめ方と、だめだったときの代案 |
|---|---|---|
| R1 | コンテンツデータの identifier(URL の最後の段)を API で指定できるか | 構築時に 1 件作って確かめる。だめなら「スラッグ」のテキストフィールドを足し、マッピングのパスで読む |
| R2 | ブロックエディタで、(a) HTML ブロックが使えること、(b) HTML ブロックの中身がそのまま保存・公開されること(class が落ちない)、(c) 標準の画像ブロックが §10.1 の <figure> と同じ HTML を出すこと、(d) API で本文を入れるときの保存形式(ブロックの区切り方) | 管理画面で記事を 1 本作り、HTML ブロックと画像ブロックを置いて保存し、書き出された本文を mtb sites entries get で見て確かめる。(a) が使えなければ、書式を「リッチテキスト」に変えて HTML を直接入れる形に切り替える(見せ場は HTML タブから貼る)。この場合は手順が変わるので、先に相談する。(c) が違えば、画像も HTML ブロックで入れる |
| R3 | WebP が MT の再保存で劣化しないか | 最初の 1 枚でサイズと見た目を比べる。だめなら H5 |
| R4 | Markdown → HTML の変換(特に表・ブロック記法)を、mtb の取り込み前に私が別に行う。変換後の HTML を mockup/ の同じ箇所と比べる | 差があれば変換側を直す |
| R5 | 「サービス詳細」の cta(ボタン文言)が mockup のどこに出るか | 未確認。mockup を詳しく読んで、出ないならフィールドだけ作る |
| R6 | 物件の「分配」表示(想定分配率 年3.8% → 年3.8%(想定))をテンプレートの置換で出せるか | 構築時に試す。だめなら数値フィールドに分ける(§6.6) |
| R7 | 管理画面の画像選択が入れる画像の URL は、ドメイン込みの絶対 URLになりうる(編集部が書く記事、§10.3) | 手順書で「ドメインを消す」と書く。残ったものは切り替え時に置換する(§14.1 の 2) |
17. 決まったこと(第1版の質問への回答)
| # | 質問 | 決定 | 反映先 |
|---|---|---|---|
| 1 | 公開先 | 手元の MT(http://localhost:8090/)で組んで確かめる。サイトの URL は http://localhost:8090/、公開パスは /data/file/static。公開用ドメインへは、あとで URL を変えて再構築 | §1、§3、§14.1 |
| 2 | アカウント | 情報システム=admin の 1 人。広報=aizawa(aizawa@five-united.example)、編集部=saeki(saeki@five-united.example)。初期パスワードは構築のときに決め、最後に会話で伝える(ファイルには残さない) | §11.1 |
| 3 | カテゴリの管理 | 許す(組み込みの Editor ロールのまま) | §11.2 |
| 4 | フィード・サイトマップの URL | 提案どおり(/press/feed.xml /magazine/feed.xml /sitemap.xml) | §4、§9.5、§9.6 |
| 5 | サイトの設定 | テンプレートモジュールで持つ | §7 |
| 6 | マガジンのカスタムブロック | 作らない。標準のブロックと HTML ブロックに mockup と同じ HTML を入れる。編集部の手順は設計書に書く | §10、§13 |
まだ残っていること
- 「サービス詳細」のボタン文言(
cta)が mockup のどこに出るか(R5)。構築前に mockup を読んで確かめるだけで、決めてもらうことはない。 - R2 の確認(HTML ブロックが使えるか)の結果次第で、§10 の方式を変える可能性がある。その場合は先に相談する。