Movable Type 7 Developer Preview Alpha2 のコンテンツタイプを触ってみた話

これは Movable Type Advent Calendar 2017 1日目の記事です。
早いもので、今年もこの季節がやってきましたね。

さて、今回は2018年4月にリリース予定の Movable Type 7 (以下、MT 7)にまつわる話題。
現在 Movable Type 7 Developer Preview Alpha2 が公式サイトで公開されていますので、気になる方は是非ご自身で試してみてください。

Movable Type BETA | CMSプラットフォーム Movable Type ドキュメントサイト
https://movabletype.jp/beta/

コンテンツタイプとは?

コンテンツタイプとは | CMSプラットフォーム Movable Type ドキュメントサイト
https://www.movabletype.jp/documentation/mt7/designers-guide/designing-content-type/about-content-type.html

コンテンツタイプで利用可能なフィールドについて - Movable Type 7 マニュアル | CMSプラットフォーム Movable Type ドキュメントサイト
https://movabletype.jp/documentation/mt7/designers-guide/designing-content-type/available-field-types/

詳しくは公式リファレンスをご覧いただくとして、自分なりに気になったポイントを備忘録がてらメモしておきます。

カスタムフィールドとの違い

「記事」や「ページ」のようなオブジェクトに代わるものとして「コンテンツタイプ(Content Type)」を定義し、そのタイプごとに「コンテンツフィールド(Content Fields)」を追加してくため、柔軟なフィールド設計ができるようになります。そもそものデータ構造自体を考え直す、いい機会にもなりそうです。

面白いと感じたのはデータが保存される仕組みの違いで、カスタムフィールドであれば「フィールド単位で mt_entry_meta にレコードを追加」していたものが、コンテンツタイプでは「コンテンツデータ(Content Data)単位で mt_cd にレコードを追加」している点です。

各レコードには「コンテンツフィールド(Content Fields)」の内容を丸ごと JSON 形式で保存するようなので、これまでに比べて DB からデータを取得する回数が減り、結果として Data API のレスポンスや再構築にかかる速度の向上などが期待できるのではないか?と考えています。(※あくまで、個人の感想です。)

今から準備できそうなこと

カスタムフィールドからコンテンツデータに移行できる仕組みが提供されるだろうと期待をしていますが、保存される JSON の値がどのような形式かを知っておくことで、何かしらできることはありそうです。

そこで、各フィールドを分類してみました。

テキスト

単一行の文字列。

  • 一行テキストフィールド
  • URL フィールド
  • ラジオボタンフィールド

テキスト(HTML タグなど)

改行コードや HTML タグなどを含む文字列。

  • 複数行テキストフィールド
  • 埋め込みテキストフィールド

数値

  • 数値フィールド

日付と時刻

%Y%m%d%H%M%S 形式の文字列。

  • 日付と時間フィールド
  • 日付フィールド
  • 時間フィールド

配列(テキスト系)

入力値 にあたるテキストの配列。

  • セレクトボックスフィールド
  • チェックボックスフィールド
  • リストフィールド

配列(id 系)

関連づけられたオブジェクトの ID の配列。

  • コンテンツタイプフィールド
  • アセットフィールド
  • オーディオ(アセット)フィールド
  • ビデオ(アセット)フィールド
  • 画像(アセット)フィールド
  • カテゴリフィールド
  • タグフィールド

テキスト(HTML タグなど)

tbody の子要素を HTML タグごと保存。

  • テーブルフィールド

あとは、MTAppjQuery$.MTAppListing$.MTAppMultiCheckbox$.MTAppLineBreakField あたりで 配列 系にあたるカスタムフィールドを用意しておけば、MT 6 で作成したサイトでも移行が比較的スムーズにできるのでは?と思っているのですが、はてさて。。。