🔩

MovableType.net入門②テンプレートファイル名と関連性

2024/10/16に公開

記事の前提

前回の入門①では、最初のセットアップからGitHubとの連携までを扱いました。
https://zenn.dev/morit4ryo/articles/f4a29f97a04881
ここからは、実装を行なっていくために必要な知識として、テンプレートについて学びます。

GitベースでMovableType.netのテンプレート編集を行う際には、管理ページ上のテンプレートがGitとどのように連動するか理解する必要があります。
(以下の情報はMT.net公式のテーマをベースに書かれているため、サードパーティテーマではこの限りではありません)
Gitベースで管理する上で必須の情報と言えますが、MovableType.netの公式マニュアルには記載のない範囲もあり、まとめを作成しました。

本題

1. テンプレートの種類

MT.netのテンプレートには以下の4種類が存在します。

名称 概要
インデックス・テンプレート index.htmlstyles.cssなどのように、1テンプレート=1ファイルとなる
アーカイブ・テンプレート ブログ記事や下層ページ、記事一覧ページ(カテゴリ別・投稿者別・月別など)のように1テンプレートから複数ファイルが出力される
テンプレート・モジュール ヘッダーやフッター、メタ情報、configのように、パーツとして出力される
システムテンプレート エディタCSSや404ページなど、システムが使用するファイルが出力される

2. ファイル名の法則

また、MTタグが使用されるファイルの形式はすべて.mtml拡張子となります。

例:メインページ(index.html)の場合

概要 ファイル名
最終的にデプロイされるページ index.html
テンプレートのファイル名 index.html.mtml
テンプレートに紐づくかんたんデザイン編集設定パネル index_settings.mtml

3. 格納場所

テンプレートファイルの格納場所は基本./_theme/templatesとなり、./_theme/templatesの中でどのようにフォルダ分けするかで、実際のWebサイトでのpathが決まります。

MTが用意しているテーマで使用されている主要なフォルダ名は以下の通りです:

  • 記事一覧:archive
    • ./_theme/templates/archive/index.htmlhttps://ドメイン名/archive/となる
  • アセット:assets
    • cssはassets/cssに配置される

なお、アーカイブ・テンプレートもテンプレート・モジュールも、システムテンプレートに至るまで全て同じ./_theme/templatesに格納されているため、フォルダ内を一瞥するだけではどれがどのタイプか判別することは難しいです。
そのため、page.mtmlpage_item.mtmlという似たファイル名でも、片方はアーカイブ・テンプレート、片方はテンプレート・モジュール、といったことがあり得ます。

※インデックス・テンプレートは拡張子が二重に付いている(例:index.html.mtml)ため唯一ファイル名で見分けがつきます。


4. 新たなテンプレートを作成する場合のワークフロー

GitHub連携をする上で、落とし穴になりそうな点として./_theme/theme.yamlの存在があります。
テンプレートのファイルは、単に.mtmlファイルを作成するだけではMT.netのサイト上に正しく反映されません。なぜなら、ファイル名称やそのテンプレートの種類などは、./_theme/theme.yamlにて管理されているためです。

例えば、管理画面上で「パンくずリスト」となっているモジュール・テンプレートの場合、

  • ./_theme/templates/breadcrumbs.mtmlが「パンくずリスト」に対応
  • しかしbreadcrumbs.mtml内にはそれが「パンくずリスト」であるという情報はない
  • これが「パンくずリスト」でありモジュール・テンプレートであることを保証しているのは、./_theme/theme.yamlのみ
    以上のようになります。

そのため、以下の点に留意しつつテンプレートを作成する必要があります。

① 編集画面からtheme.yamlをエクスポートする場合

  1. 「デザイン>テンプレート」でテンプレートを作成する
    • 「名前」はアルファベットで入力する ※日本語を含む名前をつけると、日本語を省いたファイル名となってしまう(テスト1 → 1.mtml
  2. かんたんデザイン編集の「設定パネル」も使用したい場合は、なんでも良いので「設定パネル」欄に適当に文字を入力しておく
    • 入力しておかないと名前_settings.mtmlが生成されない
  3. 「デザイン>テーマ」に移動し、右上の「書き出す」を選択してエクスポート画面に移動する
  4. 出力ファイル名・バージョンを入力して書き出す
    • 出力ファイル名は、theme.yaml内のid・label・descriptionに適用されてしまう・バージョンも同様のため注意
  5. 書き出されたファイルをローカルのフォルダに上書きしてcommit・pushすることでGitとMT.netの状態が揃う

② ローカル環境で直接theme.yamlなどを操作する場合

  1. _theme/templates内に***.mtmlファイルを作成する
    • かんたんデザイン編集の設定パネルも使用する場合***_settings.mtmlも作成する
  2. theme.yamlelements:template_set:data:templates:の中の以下の場所に、テンプレートの種類に応じて必要事項を記述する
テンプレートの種類 記述する場所
インデックス・テンプレート index:
アーカイブ・テンプレートかつアーカイブタイプ:カテゴリ archive:
アーカイブ・テンプレートかつアーカイブタイプ:記事 individual:
アーカイブ・テンプレートかつアーカイブタイプ:ウェブページ page:
テンプレート・モジュール module:
システム・テンプレート system:
インデックス・テンプレートの場合(例:index.mtml)
index:
    main_index: # サイトトップページならmain_index、下層なら`フォルダ名_index
        filename: index.html.mtml #.htmlを忘れずに
        label: "メインページ" # MT.net上の「名前」を日本語/英語表記にしたい場合はここを書き換える
        outfile: index.html #デプロイされるファイル
        rebuild_me: 1 # インデックス・テンプレートを再構築するとき、このテンプレートも再構築するオプション、基本1(オン)を指定
        settings: index_settings.mtml # 設定ファイルはここで指定
アーカイブ・テンプレートの場合(例:entry.mtml)
individual:
    entry:
        filename: entry.mtml
        label: "記事"
        mappings:
            individual:
                archive_type: Individual # アーカイブタイプによって変わり、カテゴリ→Category、記事→Individual、ウェブページ→Page
                file_template: "%y/%m/%-b/%i" # ファイルの出力先パスの指定
                preferred: 1 # 同じアーカイブタイプのテンプレートが複数存在する場合、優先するテンプレートに1(優先する)を指定

file_templateの書き方はアーカイブマッピングで利用するアーカイブファイル名の定義 を参照ください。

テンプレート・モジュールの場合(例:header.mtml)
module:
    header:
        filename: header.mtml
        label: "名前"
        settings: `header_settings.mtml
システム・テンプレートの場合(例:editor_css.mtml)
system:
    editor_css:
        filename: editor_css.mtml
        label: "エディタCSS"
  1. 完了したらcommit・pushすることでMT.netにファイルを反映する

yamlフォーマットのより詳細な情報は、MovableType.netではありませんが、Movable Type 4 マニュアルに載っています。

theme.yamlはテンプレート以外にもカスタムブロックやカスタムフィールドなど、様々な機能に関わるものが記載されているため、可読性が高くはなく、かつ編集を誤った時の影響範囲が大きいです。
そのため手間ではありますが、正しい形式でtheme.yamlなどを作成できているか自信を持てない場合は、①の手法で作成する方が良いと思います。


最後に

今回はMT.netのテンプレートファイル名と関連性について扱いました。
また次の記事として『かんたんデザイン編集を理解する』①〜④を書きました。
https://zenn.dev/morit4ryo/articles/8823e57895ef58

まだまだ学習しながらのまとめのため、誤読などもあるかもしれません。
ぜひコメント頂けると嬉しいです!

Discussion