ANNAIマガジン
既存のDrupalフィールドを再利用すべきか?
この記事は「 Should I Re-use Existing Drupal Fields? 」の翻訳です。
この記事の目次

 

我々は時に端的なアドバイスをすることがあります:
「こうしましょう!」 あるいは 「やめておきましょう!」

しかし、これが今回のテーマではありません。

Drupalにはフィールドを再利用する機能があります。 「Image」フィールドがある場合、サイト内のすべてのコンテンツタイプで同じフィールドを使用する事もできます。 しかし、フィールドを再利用する事が必ずしも良いアイデアなのかどうか明確ではなく、それは時と場合によって異なるでしょう。

次に、Drupalフィールドを再利用する前に考慮すべき長所と短所の概要を示します。

フィールドの再利用に関する一般的なアドバイス

管理メニューの[サイト構築] [コンテンツタイプ]の順に選択し、コンテンツタイプの[フィールドの管理]をクリックすると、[既存のフィールドを再利用]機能を選択できます。

managefields

Drupal.orgのドキュメントでは、フィールドを再利用しないことを正式に推奨しています。

明確な理由がない限り、既存のフィールドを再利用するのではなく、新規にフィールドを作成することを推奨します。

しかしながら、そのアドバイスは近年微妙なニュアンスになってきており、Drupalは公式に、それが利点と欠点の両方を持ち合わせていると述べています。

Drupal Field UIのドキュメントには、 "Reusing Fields(フィールドの再利用) "という詳細セクションがあります。

フィールドを再利用する主な理由は2つあります。 まず第一に、フィールドを再利用することにより、新しいフィールドを定義する手間が省けます。 第二には、フィールドを再利用することでコンテンツタイプをまたいでコンテンツを表示、フィルタリング、グループ化することができます。 例えば、Viewsモジュールは、コンテンツをテーブルおよびリスト形式などで表示することも可能にします。 そのため、複数のコンテンツタイプで同じフィールドを使用する場合は、そのフィールド、ソート、フィルタリング等して、それらのコンテンツタイプをすべて含むビューを作成できます。

メリット:フィールドの再利用により、作業を簡略化する事ができる。

スピードの向上を図る事はできますが、あまり時間の短縮にはなりません。 より説得力のある長所は、フィールドを再利用することによって、サイト管理が容易になるということです。 Web Initiativeではこれについてうまくまとめています:

フィールドを再利用することにより、システムの複雑さを軽減できます。 10の異なるフィールドを作成して管理する代わりに、Drupal管理者は2つのフィールドとそれらのドキュメンテーションのみを管理します。 よってデータベース管理者は、2つの追加テーブルのパフォーマンスを向上させるだけで済みます。 KISSは常に素晴らしい原則です。

パーミッション、設定やデザイン要素を、個々の10のフィールドに対してではなく、1つの再利用されたフィールドに適用する方が容易なのは確実です。

メリット:一部のコンテンツは再利用されたフィールドでうまく機能する

話をDrupal Field UIのドキュメントに戻します:

フィールドを再利用することにより、コンテンツタイプを跨いでのフィルタリング、グループ化、さらにコンテンツをソートすることが可能になります。 たとえば、Viewsモジュールはコンテンツのリストおよびテーブルの作成を可能にします。 そのため、複数のコンテンツタイプで同じフィールドを使用する場合、そのフィールドを表示したり、ソートしたり、フィルタリングしたりして、それらのコンテンツタイプすべてを含むビューを作成できます。

Drupal.org documentationのあるコメントライターは、Viewsについて同じような意見を述べています。 彼らはViewsがより機能的な方法でコンテンツを組み合わせることができると指摘しています。 したがって、日付フィールドに異なる複数のコンテンツタイプがある場合、Viewsはそれらを単一のビューにまとめることができます。 しかし、彼らはViewsがソートに関してはそれほど長けていないことも指摘しています。 そのため、異なる日付フィールドを持つ複数の異なるコンテンツタイプがある場合、Viewsはそれらすべての異なる日付フィールドでコンテンツを並べ替えるのに苦労します。

デメリット:再利用されたフィールドは柔軟性に欠ける

Brandon WilliamsのTwitterでこの事についてよくまとめられています:

初めのうちは良いアイデアのように思えますが、数週間後には変更が必要になったり、とにかく別のものを作成することになります。

総じて再利用されたフィールドを選択した場合、後にデータを容易に作成するための変更を制限していることになります。 また、各フィールドを個別に編集する必要があるため、更新に時間がかかります。

field_data

このアドバイスは、マルチサイトの使用に関する私たちの考えに似ています。データベーステーブルあるいはコード間の依存関係が増すたびに、サイトが複雑になってしまいます。

パフォーマンスについての長所と短所は?

Drupalのドキュメントでは、フィールドを再利用することで得られる利点の1つについて概説しています。

フィールドを再利用すると、Drupalの実行が速くなるだけでなく、プロジェクトの保守が容易になります。

このStack Overflowスレッドには、パフォーマンスに関する非常に関連性のある議論があり、 その中には次のようなコメントがあります:

実際に問題なのがフィールドの数です。現在Drupal 7において、全てのフィールドのあらゆる設定は、ロードされているかどうかに関係なく、すべての単一のリクエストでキャッシュから取得されます。250以上のフィールドを持つサイトを見てきましたが、フィールド構成の読み込みと非シリアル化には13 MB以上のメモリが必要です。

したがって、フィールドを再利用することでフィールドの総数を減らすことができるため、パフォーマンスがわずかに向上する可能性があります。

ただし、これらの小さな改良は他の部分で無駄になる可能性があります。
再びWeb Initiativeからの引用:

フィールドはDrupalシステムをより複雑にします。新しいフィールドを作成すると、フィールドの定義がフィールドクラステーブルに追加され、フィールドの構成がフィールドインスタンステーブルに追加されます。フィールドデータを格納するため、新しいテーブルがDrupalデータベースに追加されます。データベーステーブルはシステムを複雑にします。さらに、ノードのクエリでは、フィールドデータにテーブルのJOINが発生します。複数のJOINは、適切に設定されていない場合、MySQLがテーブルの複数のJOINを含むクエリに適切に応答しないため、データベースのパフォーマンスに影響を与えます。

まとめ

残念なことに、この質問に対する簡単な答えはありません。 これは、この問題に関して良く調べ、その長所と短所を理解することで初めてメリットが得られる類の質問です。 もしもあなたが実際にサイト構築を行っているのであれば、これらの長所と短所がサイトのニーズにどう影響するかについて知るために、テスト環境でサイトを検証する価値が事だと思います。

この記事を書いた人 : Kentaro Inoue

ANNAI株式会社
マーケティングマネージャー
サービスの設計・企画、マーケティング、採用戦略の立案などを担当。普段は新潟で猫と一緒に、時々海外からリモートで働いています。好きなモジュールはRulesとFlagです。

関連コンテンツ