
WordPress の投稿タイプ
世界の CMS のシェアは、WordPress、Joomla、Drupal で上位を占めており、これら3つを合わせて「世界3大CMS」などと呼ばれています。中でも、WordPress は約6割と突出したシェアを持ち、すべての Web サイトの29%が WordPress を使用しているとも言われています。
https://w3techs.com/technologies/overview/content_management/all
WordPress は元々ブログソフトウェアですが、動的なコンテンツ生成やプラグインによる拡張性を生かし、現在では、より用途の広いコンテンツ管理システム(CMS)として利用されるようになっています。この CMS としての WordPress が、Drupal で言うところのコンテンツタイプやタクソノミーをどのように扱っているのかは興味深いところです。
カスタムフィールド
Drupal では、コンテンツタイプを定義し、その属性を格納する項目としてフィールドを追加できるようになっていました。WordPress では、ユーザー定義の情報を投稿に付加できる、カスタムフィールドという仕組みを提供しています。Codex(WordPress の公式ドキュメント)の日本語版によれば、このカスタムフィールドで追加される情報は名前と値の組み合わせからなる「メタデータ」と呼ばれています。
一般にメタデータとは、データについてのデータ、つまりあるデータに付随する、そのデータ自身についての付加的な情報を指します。データとメタデータの関係は、HTML コンテンツと、meta タグで埋め込まれる情報(キーワード、文字コード、作者、…)の関係から類推するとわかりやすいでしょう。カスタムフィールドの情報がメタデータだということは、それがコンテンツそのものではなく、付随情報を意図したものであることがうかがえます。これは、投稿画面の表示オプションのカスタムフィールドが既定ではオフになっていることにも表れています。

既定でオフの WordPress のカスタムフィールドのオプション
このオプションを有効にすると、投稿画面にカスタムフィールドの入力フォームが表示され、名前と値のペアを自由に追加できます。一度追加したフィールド名は記録され、次回以降の別の投稿でも選択肢として指定できるようになります。また、カスタムフィールドは、投稿に追加しただけでは表示コンテンツに反映されず、表示させるにはテンプレートの編集が必要になります。こうした使い方を見ても、WordPress のカスタムフィールドは、個々のブログ投稿への付随情報として用意されたもので、Drupal のフィールドとは用途や目的が異なることがわかります。
また、標準のカスタムフィールドでは、保存できる情報は単純なテキストデータのみで、この点も Drupal がコアで提供しているフィールドとは大きく異なります。Advanced Custom Fieldというプラグインを利用することで、Drupal と同様に多様なデータをカスタムフィールドとして保持することが可能です。

多様な種類のフィールドデータに対応できる Advanced Custom Field プラグイン
カスタム投稿タイプ
Drupal と同様、WordPress も多数の異なるタイプのコンテンツを保存し、表示することができます。こうした投稿コンテンツの種類を WordPress では「投稿タイプ」と呼んでいます。デフォルトの投稿タイプとして、投稿、固定ページ、添付ファイル、リビジョン、ナビゲーションメニューがありますが、独自の投稿タイプを定義することもできます。
参考:https://wpdocs.osdn.jp/投稿タイプ
カスタム投稿タイプは、WordPress の API を使ってプログラムコードから登録することができますが、登録した投稿タイプをプラグイン化したり、Custom Post Type UI というプラグインを使って管理画面から登録することもできます。先に紹介した Advanced Custom Fields プラグインと組み合わせることで、Drupal と同様、管理画面の操作で投稿タイプを定義したり、カスタムフィールドを追加したりすることが可能です。

カスタム投稿タイプにカスタムフィールドを追加しているところ
別のコンテンツを参照する「関連」というフィールドタイプも用意されているので、投稿タイプ間の関連を実装することも可能です。機能上は、Drupal と同様に、独自の投稿タイプと固有のフィールド設計が可能になっています。Drupal との大きな違いは、こうした機能が拡張プラグインで実現されていることと、カスタムフィールドが元々投稿の付随情報として用意されたものだということです。
カスタム分類
WordPress にはタクソノミーもあります。カテゴリー、タグ、リンクカテゴリー、投稿フォーマットという4つのデフォルト分類のほか、カスタム分類と呼ばれるユーザー定義の分類を作成することができます。分類も API で登録しますが、Custom Post Type UI を使用すれば管理画面からタクソノミーを作成することもできます。
参考:https://wpdocs.osdn.jp/カスタム分類
MovableType のカスタムフィールド
国内で WordPress と肩を並べるメジャーな CMS として MovableType(以下、MT) があります。MT はバージョン5までオープンソース版の MTOS が提供されていましたが、バージョン 6以降 MTOS の配布は終了となり、現状、最新版は商用 CMS という位置づけになります。さて、この MT の場合はどうでしょう。
MT には標準でカスタムフィールドを追加する機能が用意されています。WordPress のように追加プラグインを導入する必要はありません。スクリーンショットに示すように、テキストのほか、URL、日付、ビデオ、画像など、多様な種類のデータをカスタムフィールドとして追加できるようになっています。

MT6 のカスタムフィールド追加画面
ただし、MT も WordPress 同様、記事やページが常にコンテンツの基本であり、カスタムフィールドはその拡張データです。Drupal のようなユーザー定義のコンテンツタイプという考え方はありません。
ただし、2018 年初頭にリリース予定の次期バージョン(MT7)では、新たにコンテンツタイプが導入され、従来のブログ記事やウェブページに代わる、自由に構造を定義できる仕組みが提供されます。コンテンツ間の参照関係も定義できるようになるようです。これが実現すると、Drupal と同じような使い方が可能になるかもしれません。
https://www.slideshare.net/swordbreaker/movable-type-7-80522292
Drupal の視点から
このように、今日では WordPress や MT でも独自のコンテンツタイプやフィールド構造を定義できること(なりつつあること)がわかります。ただ、ブログソフトウェアとしての成り立ちはまだ色濃く残っており、構造化コンテンツを管理するための汎用的な基盤システムとして見た場合、やはり Drupal に一日の長があることは否めないように思います。これは、過去紹介してきた Drupal の歴史を見てもそう感じるのではないでしょうか。以前も指摘したように、これは製品の優劣ではなく、それぞれの目指してきたものの違いによると言えるでしょう。
また、フィールドの扱いにも象徴的な違いがあります。Drupal のフィールドタイプは情報の種類(プログラム言語でいうデータ型)を表すものですが、他方 WordPress や MT におけるフィールドのタイプは、そのデータを入力するフォーム部品もイメージしたもののように見えます。たとえば、Drupal のフィールドタイプには「真偽値」や「リスト」はあっても、チェックボックスやセレクトボックス/ドロップダウンはありません。Drupal では、フィールドに格納するデータそのものとその入力部品とは別の情報として扱われます。Drupal でフィールドを追加するときには、フィールドタイプとは別に、入力フォームの部品(ウィジェット)や多重度を指定する手順をとります。

Drupalのフィールドを追加する時の選択肢
プログラミングやデータ設計をイメージすれば Drupal のアプローチは自然ですが、コンテンツの付随情報としてのフィールドには無用に複雑な仕組みと感じられるかもしれません。こういったところにも、常に Web コンテンツ前提で情報管理の仕組みを考えてきたシステムと、より一般化されたデータモデルへの適用を意識して変化を重ねてきたシステムとの違いが垣間見えるのではないかと思います。
Drupal ではバージョン 7 でエンティティの考え方が導入され、Web コンテンツに限定しない任意のビジネスデータを Drupal の API で統一的に扱うことが可能になりました。これは現在の Drupal 8 にも受け継がれ、新しいツールと相まって、より洗練された開発指向の環境へと進化しています。たとえば、Drupal Console というツールを使うと、エンティティを定義するモジュールを自動生成し、1行もコーディングすることなく独自のエンティティを組み込むことができます。自動生成されるコードはエンティティのモデル定義、表示や編集のためのテンプレート、ルーティング、テストコードなど多岐にわたります。仕様を与えて対応するプログラムコードを自動生成させるところは、Ruy on Rails の scaffold などと似ているかもしれません。

Drupal Console を利用して Company エンティティのモジュールを生成する例

自動生成されたソースファイル群
こうして登録したエンティティは、プログラムコードから操作することも、コンテンツタイプと同様 Drupal の管理 UI から操作することもできます。CMS の機能として発達してきた仕組みが開発プロセスの中でも活用できるわけです。

生成したエンティティの構造を管理画面で編集
Drupal は CMS であると同時に、API、開発ツール、コア実装と管理 UI を組み合わせた独特の開発スタイルに基づく開発環境と見ることもできます。この環境は、認証、デザインテーマ、多言語対応など、CMS が得意とする機能を基本要件とする大規模な Web システムの構築で大きな力を発揮するはずです。
まとめ
今回は、国内で広く使用されている WordPress や MT の投稿タイプと分類の取り扱いを Drupal と比較してみました。コンテンツの構造や分類を柔軟に設計できる手段を古くから提供してきた Drupal と、ブログやホームページ制作といった個別用途のソフトウェアとして発展してきた CMS との違いを感じていただけたでしょうか。次回はブロックシステムを紹介したいと思います。
関連コンテンツ
- アクイア vs サイトコア:オープンであることがもたらす根本的な違い
- 第 13 回 Drupal の権限設定と WordPress や Movable Type との比較
- 第 11 回 Drupal と他の CMS のクエリビルダー機能を比較
- 第 8 回 コンテンツ管理における Drupal と他の CMS との比較
- Contenta CMSによるDecoupled Drupalサイトの構築
- Drupalが最も安全なCMSである理由
- Drupal vs WordPress SEOとパフォーマンスの観点から比較
- 第13回 Drupalの権限設定とWordPressやMovable Typeとの比較
- 第11回 Drupalと他のCMSのクエリビルダー機能を比較
- WordPress vs Joomla vs Drupal
Drupal 8初心者講座バックナンバー
Drupal 8初心者講座について
第1回 歴史に見るDrupalのDNA
第2回 Drupalはフレームワークか?CMSか?他のCMSとの比較
第3回 Drupalの特徴
第4回 Drupal 8のインストール (1)
第5回 Drupal 8のインストール(2)
第6回 Drupalにコンテンツを投稿してみる
第7回 Drupalのボキャブラリとタクソノミーの使い方
第8回 コンテンツ管理におけるDrupalと他のCMSとの比較
第9回 Drupal 8のブロックシステム
第10回 Drupalの標準クエリービルダ Viewsの使い方
第11回 Drupalと他のCMSのクエリビルダー機能を比較
第12回 Drupal 8の多言語機能と他のCMSやサービスとの比較
第13回 Drupalの権限設定とWordPressやMovable Typeとの比較
第14回 Drupalのテーマシステムについて
第15回 Drupalの拡張モジュールの選定と使い方
第16回 Drupalをもっと知りたい方に向けた各種情報