ParagraphsはDrupalでサイトを構築する際に利用される人気モジュールです。しかし、私たちのチームはこのモジュールを完全に受け入れる事ができません。ここではその理由を説明します。私たちはDrupal 8でのサイト構築にParagraphsではなく、ECK(Entity Construction Kit)モジュールを使用しています。
この記事では、なぜ私たちがParagraphsモジュールではなく、ECKモジュールを利用するのかを説明します。
普段、私達はECKとIEF(Inline Entity Form)の組み合わせによるアプローチで作成されたParagraphsのようなエンティティを「スライス」と呼んでいます。ここでも、便宜上この「スライス」という呼び名を使用させていただきます。
Paragraphsと、ECKとIEFの組み合わせによる手法の類似点
どちらの手法でも、作成するのに技術的な知識を必要とせず、柔軟な表示が可能な、構造化されたコンテンツの集合を作成できます。どちらもDrupalの多言語システム上で動作します。また、DrupalのEntity APIシステムを使用しているため、フィールドとして利用可能です。 テーマ開発を行う上でもECKとParagraphsは似ています。どちらもレンダリング要素を返し、バンドルとビューモードのテンプレート提案を提供します。
サイトビルダーの観点からみた場合
Paragraphs
Paragraphsはインストール後、すぐにノードに追加できます。Paragraphsタイプを追加しなかった場合にも、追加するための便利なリンクが表示されます。
ECKとIEF
初めてECK とIEFを使うと、「バンドル」と「エンティティ」の違いが分かりにくく、混乱を招くかもしれません。
まず、ECKエンティティタイプを作成し、その後バンドルタイプを設定します。次に、バンドルタイプへの参照を各コンテンツタイプのフィールドとして追加します。最後に、IEFを使用する各コンテンツタイプでフォームの表示を設定します。新しいバンドルタイプを追加した際には、そのバンドルタイプを利用するフィールドに対してそれぞれ設定を行う必要があります。これらを学ぶのはさほど難しくないですが、多少の慣れ必要です。
この勝負 Paragraphsの勝ち
コンテンツ編集の観点から見た場合
Paragraphs
フォームの設定ページでは、プレビューをアコーディオンメニュー内に表示する設定や、公開表示されている状態と同様の見え方をプレビューとして表示する設定などを各種のオプションから選択できます。また、Paragraphタイプのセレクタの表示を選択することもできます。
ECKとIEF
プレビュー表示が必要な場合は、Inline Entity Form Preview(IEFP)モジュールを使用する必要がありますが、ECK と IEFを使用すると、Paragraphsなどで提供される他のフォームオプションもすべて利用できます。
また、IEFPは表示設定を変更可能な「プレビュー」ビューモードを選択する機能も提供します。これらの設定には多少の手間はかかりますが、これらを適切に設定する事により、コンテンツをより編集しやすくなります。
量の多いコンテンツ部分に関しては、「編集モード」を適切に設定する事で、その部分を縮小表示することができます。
例えば、画像をより小さなサイズで表示するように設定することができます。また、エンティティを参照している部分については、直接インラインで表示する代わりに、ラベルとして表示することができます。これは、状況に応じて使い分けることができます。
どちらにも言える事
どちらも多くのエンティティを扱う作業の場合には、動作が遅く、使い辛いことがあります。 DrupalのTableDrag機能により編集者はコンテンツパーツを並べ替えることができますが、多くのコンテンツではうまく機能しません。今後、TableDragの機能のが改善されると、これらのモジュールやDrupal全体が恩恵を受ける事ができるでしょう。
この勝負 引き分け
「スライス」とParagraphsのコンテンツ編集フォームの比較
Paragraphsとインラインエンティティフォームの「プレビューモード」の比較です。両者のコンテンツ編集画面はとても似ています。
リビジョン機能の観点から見た場合
Paragraphs
Entity Reference RevisionsはParagraphsの必須モジュールです。そのため、特に設定をしなくてもリビジョンとの相性は良いです。
ECKとIEF
残念ながら、現時点でDrupa 8ではECKと IEFはリビジョン機能に対応していません。この問題の解決に向けて、取り組んでいるコントリビューターの多くはChapterthree社のメンバーです。
この勝負 Paragraphsの勝ち
検索機能の観点から見た場合
Paragraphs
Drupalのデフォルトの検索機能を利用した場合、特に追加の設定をせずに、親ノードの一部としてParagraphsエンティティのインデックスが作成されます。
ECKとIEF
ECKエンティティは、コアのDrupal検索でインデックスされます。フィールドが表示されていて、カスタムエンティティを表示する権限があることを確認してください。
この勝負 引き分け
エンティティの再利用の観点から見た場合
Paragraphs
Paragraphsが抱える問題点に関してはコチラをご覧ください。残念ながら、同じParagraphsを複数のページで再利用するのはなかなか困難です。ただし、Paragraphs内の他の種類のエンティティを参照することは可能です。
ECKとIEF
スライスをECKとIEF設定で簡単に再利用できます。また、ユーザーの機能の利用を簡単に制限することもできます。ユーザーがエンティティを再利用できる場合は、厳密な命名規則を持つことが重要です。 Entityシステムの潜在的な欠点は、タイトルを表示するかコンテンツを再利用するかに関わらず、各エンティティスライスに必須のタイトルフィールドがあることです。
この勝負 ECKとIEFの勝ち
柔軟性の観点から見た場合
Paragraphs
設定項目は、モジュールで設定可能な項目に限定されます。さらなるユーザーレベルの制御を行うには、Paragraphsに含まれているParagraphs Type Permissionモジュールを利用してください。
ECKとIEF
ECKとIEFには多くのオプションがあります。フィールドで使用可能なスライスタイプを制限することができます。 UIでの命名規則の変更、タイプごとのアクセス権の設定、ユーザーが既存のスライスを使用できるかどうかの設定、などこれ以外にも多岐にわたる設定が可能です。
さらに、ECKとIEFは、ノードに結び付けられていない構造化コンテンツや、Paragraphsタイプとして分類されるべき構造化コンテンツに役立ちます。最近、私たちの手掛けたプロジェクトでは、アコーディオンセット、ニュースレターリンク、行動を促すフレーズ、おすすめコンテンツなどを保持するために、「チャンク」と呼ばれるエンティティを作成しました。
この勝負 ECKとIEFの勝ち
ユニークURLの観点から見た場合
Paragraphs
Paragraphsは、(ノードのような)参照されたコンテナにアクセスすることによってのみアクセスできます。
ECKとIEF
各エンティティはそれぞれ、独自のURLを持ちます。しかし、ほとんどの場合、これら種類のエンティティは独自のURLを持つ必要はなく、それを隠すためにRabbit Holeのようなモジュールを使用するのが最善です。
この勝負 Paragraphsの勝ち
サポートの観点から見た場合
Paragraphs
サイトビルダーとしてParagraphsを使用方を学ぶ際の情報ソースとしては、多くのブログやチュートリアル、Drupal Campのセッションがあります。
ECKとIEF
ECKとIEFに関する初心者の向けのチュートリアルは、あまり存在しません。もし、あなたがカスタム機能の実装に苦戦しているようでしたら、解決策を見出すのには時間がかかるかもしれません。
この勝負 Paragraphsの勝ち
Paragraphsは設計されたものに最適です。構造化されたコンテンツでリビジョンを扱うには、Paragraphの利用が唯一のモジュールによる解決策です。開発チームを持たない、サイト制作者や、Paragraphsの標準機能を超えたカスタマイズする時間や必要がないケースにはParagraphsは非常に魅力的です。
しかし、Entity Construction KitとInline Entity Formを使用することで、ほぼ同じ機能を実現できます。初期設定は直感的ではなく、時間がかかりますが、拡張性とカスタマイズ性に関してはこちらに軍配が上がります。
小規模でシンプルな仕様のサイトにはParagraphsで十分かもしれません。しかし、将来的な拡張性を重視するのであれば、Entity Construction KitとInline Entity Formの組み合わせが必要です。
Chapterthree社では、しばしばクライアントと長期的な関係を構築しています。その間に、多くのケースにおいてクライアントの求める要求が変わり、それに伴い仕様が変更されることも多くあります。通常、私たちは長期的な仕様変更に柔軟に対応するためParagraphsではなく、ECKとIEFを選択します。ECKとIEFを選択する事により、最先端のコンテンツ編集機能を提供し、常に変化するお客様のニーズにお応えします。
終わりに
ブログ用のようなサイトや、十分な開発リソースがない場合はParagraphsを選択するのがいいでしょう。
逆にコンテンツをViewsやAPIで積極的に再利用するような場合は、将来的な変更や拡張を考慮してECKを使うほうがメンテナンスしやすいサービスを構築できます。
関連コンテンツ
- Dries Buytaert氏の基調講演が明らかにしたDrupalの未来
- Drupalが提供する高度なコンテンツ構造と管理方法
- 柔軟で堅牢なオープンソースCMS: Drupalの特長と利点
- Drupal 導入前に必ず考えたい「保守」のこと
- 手軽に本格的な Drupal のローカル開発環境を構築してみよう
- 9 つのシンプルなステップで Drupal 9 のテーマを作成してみよう
- Drupal 9: 一般的なエクスプロイトの経路をブロックする方法
- エンジニア新人研修のご紹介
- Headless CMS というトレンドに Drupal は適応している!?
- Drupal 9.1 が登場!アップグレードの準備はできていますか?
Drupal 初心者講座バックナンバー
- Drupal 9/10 初心者講座
- 第 1 回 歴史に見る Drupal の DNA
- 第 2 回 Drupal はフレームワークか?CMS か?他の CMS との比較
- 第 3 回 Drupal の特徴
- 第 4 回 Drupal 9 / 10 のインストール (1)
- 第 5 回 Drupal 9 / 10 のインストール (2)
- 第 6 回 Drupal にコンテンツを投稿してみる
- 第 7 回 Drupal のボキャブラリとタクソノミーの使い方
- 第 8 回 コンテンツ管理における Drupal と他の CMS との比較
- 第 9 回 Drupal のブロックシステム
- 第 10 回 Drupal の標準クエリビルダー Views の使い方
- 第 11 回 Drupal と他の CMS のクエリビルダー機能を比較
- 第 12 回 Drupal の多言語機能と他の CMS やサービスとの比較
- 第 13 回 Drupal の権限設定と WordPress や Movable Type との比較
- 第 14 回 Drupal のテーマシステムについて
- 第 15 回 Drupal の拡張モジュールの選定と使い方
- 第 16 回 Drupal をもっと知りたい方に向けた各種情報