Drupalの概要

柔軟性とシンプルさ

コンテンツマネジメントソリューションにおいて、柔軟性とシンプルさのバランスを取るのは非常に困難です。シンプルすぎると用途が限られてしまいますが、柔軟すぎると習得が難しくなります。

一般的なコンテンツマネジメントシステム(CMS)は、おもちゃのトラックに例えることができます。CMS(おもちゃのトラック)をどのように使うかは、あらかじめ想定されていて、それを変えることは困難です。一方、コンテンツマネジメントフレームワークは、おもちゃの材料のようなもので、これらを使用するためには専門知識が必要になります。

Drupalは、柔軟性とシンプルさを必要としているがそれらの技術を持たないユーザに対し、完璧なコンテンツマネジメントソリューションが提供できるように設計されています。Drupalのモジュールという考え方がそれを実現しているのです。他のCMSと違って、Drupalは、組み立てて作られたおもちゃのトラックではなく、車輪、フロントガラス、車軸、フレームなどの部品(モジュール)の集まりであり、おもちゃメーカーが簡単に組み合わせておもちゃのトラックを作り上げることができるのです。また、それらの部品は、おもちゃの飛行機、潜水艦やロボットとしても利用することができます。それゆえに、Drupalは、コンテンツマネジメントシステムおよびコンテンツマネジメントフレームワークの両方の魅力を併せ持つ総合的なシステムであると評することができるでしょう。

最適なモジュールの組み合わせで、ニュース・サイトからオンライン・ストア、SNS、Blog、Wikiなどあらゆるサイトの構築が可能となります。あと必要なのは開発者の想像力だけです。

Drupal:事例

ニュースサイトを例として、Drupalと他のCMSとの違いを説明します。ニュース・サイトには以下の機能を実装します。

  • 新しいニュース記事の投稿
  • ホームページのトップページに5つの最新ニュースを表示
  • ブログ機能の追加
  • ホームページに5つの最新ブログ記事のリンクを表示

通常ののCMSの場合、まずニュース記事を管理するプラグインをインストールし、ホームページに記事へのリンクを配置します。次に、最新のブログの投稿を確認して、それらの一覧をホームページへ表示するプラグインをインストールします。これらの2つのプラグインは、それぞれ特定の種類のコンテンツにしか対応しておらず、あくまでも独立したプラグインとして動作します。

しかし、最新のニュースに関連したブログのリストを活発な投稿者順に表示したい時、どうなるでしょうか?通常のおもちゃのトラックのCMSを利用している場合は、そのままでは実現することができません。開発者を雇い、スクラッチでカスタムプラグインを作成してもらう必要があります。しかし、Drupalを利用している場合は、これらの機能を簡単にそして素早く実現することができます。Drupalのモジュールは、基準に則って開発されており、基本システムの上で共通のインタフェースを持つため、、容易に機能の拡張をすることができます。上記の要件は、「Viewsモジュール」を使うだけで実現できてしまいます。

もちろん、柔軟性であるが故にある程度のコストを見込まないとなりません。通常のCMSは、すぐに理解して使うことができますが、Drupalは、利用する前に学習して知識を身に付ける必要があります。数千種類ものモジュールの中から、ウェブサイトの要件を満たすモジュールを選別し、組み合わせる知識を身に付けなければなりません。

Drupal Coreおよびそれを構成するための数千ものモジュールは導入時に学習コストはかかりますが、開発手法をマスターしてしまえば、それに報いるだけの成果が得られるでしょう。活発なコミュニティが柔軟性とシンプルさのジレンマから開発者を解放するDrupalのパワーの証です。一度Drupalを使ってみたら、もう他のものは使えないでしょう。

Drupalの構成

Drupalの構成をより詳しく見てみましょう。

ウェブサイトは基本的なRSS配信機能を含む静的ページの組み合わせであり、これらのツリー構造に配置された静的ページの編集をしてサイトの運用が行われると思われがちですが、Drupalでは、ほとんどのコンテンツタイプがノード(詳細は後ほど説明します)という同一の概念で扱われます。Drupalでは、静的ページ、RSSフィードなどの異なるタイプのコンテンツが全て同じ方法で格納され、メニュー、ビュー(コンテンツの一覧)、ブロック(サイト中のセクションへリンクするサブ・コンテンツ)を用いて、それぞれ異なる方法で表示できるようになっています。

これは、標準準拠のWebページでは、XHTMLによって情報の構造を定義し、CSSによって表示方法を定義するのと同じようなものです。Drupalでは、ブログに関連する情報(タイトル、内容、作成者、作成日など)やニュースに関連する情報(タイトル、内容、公開日、公開終了日など)がノードによって一元管理され、メニューシステム、タクソノミー(タグ付け)やビューによって構成が定義されます。最終的には、パネルのような表示用のモジュールを利用して、テーマ・システムによって整形され表示されます。

これらの階層が独立して管理されているので、特定のニーズやロールを持つ異なるユーザに応じて、同じコンテンツを様々なアプローチと表現方法で提供することが可能になります。ページをいろいろな方法でグループ化したり、異なる順序でソートしたり、要件に応じて特定の機能やコンテンツを表示・非表示にすることなども容易に可能となります。

ノード:Drupalの柔軟性の鍵

ノードはDrupalデザインの核を成す重要なコンポーネントの一つです。本質的にはノードは、関連情報のまとまりです。新規ブログを作成する際には単に本文だけではなく、タイトル、内容、投稿者のリンク、作成日、タグなども定義します。ノードが表示される時に、この中のいくつかの要素はテーマ層により表示されます。残りの要素は、タクソノミーや公開状況などのようにノードの表示をコントロールするメタデータとなります。

先ほども述べたように、多種多様な方法でサイトのコンテンツを表示することができます。様々なナビゲーションやカスタムテーマやデザインを定義することができます。こちらのサイトで様々なカスタムテーマが提供されています。

コメントもDrupalにおいて特徴的です。通常、コメントはブログ・システムの一部として取り扱われていますが、Drupalには個別にブログシステムの機能はなく、単純にノードをブログとして扱えるような機能を提供しています。なお、ブログ、ニュース、Wikiの他に独自のコンテンツタイプでもコメントを有効にすることができます。Drupalのモジュール・システムは制作者の想像力次第で可能性が広がると言っても過言ではありません。

コアによるコラボレーション

「一対多」に情報を発信するウェブサイトを作成するのが多くのCMSの特徴ですが、サイト・ユーザに対し、コンテンツを作成し、相互に交流する権限を与えることにより、「一対多」から「多対多」へと情報の発信が可能となることがDrupalの秀でた特徴です。

あるCMSの場合、ブログを設定して、ユーザーのコミュニティを管理するプラグインをインストールすることができますが、各ユーザーにそれぞれ個別のブログを表示することや、コンテンツをソートしてそれぞれのデザインで表示することや、様々なユーザのブログのトピックのダイジェストや、トップ5のブログや、精査するためのリンクを表示したり、ユーザ・プロフィールをカスタマイズしたりするなどのような多機能に対応することは非常に困難です。通常のCMSの情報の扱い方では、ブログをフォーラムと統合する機能、Wiki、ユーザがタグ付けられた写真のギャラリーを作成する機能を実現することが難しくなります。その反面、Drupalでは、このような複雑な機能に対応することはもちろん、長期に渡って管理することも可能です。

Drupalは、サイト構築者がコンテンツ作成からサイト管理に至るまで、ユーザに権限の付与を行えるように設計されています。サイト構築者が適切に権限の定義を行いさえすれば、全てのユーザが同時に作業を行うことができます。

短時間でサイトを立ち上げられて、自由にカスタマイズできる

Drupalは柔軟性に優れていると同時にインストール方法も簡単です。単純なFTPアップロードとウェブベースで環境設定を行うだけで、1時間以内にデータベースに接続でき、Drupalサイトを立ち上げることができます。

既存のテーマから一つを選択し、すぐにコンテンツの登録が行えます。閲覧者にログインが必要な場合は、認証機能を有効にします。既存のツールを有効にするにはどうしたらよいでしょうか?例えば、「Forum」を有効にしたり、ノードタイプの設定でコメントを有効にしたり、Wikiのような機能が利用したい場合はBookモジュールを有効にしたり、forumやpollを作成したり、コンテンツを構造化・カテゴライズ・タグ付けするためのタクソノミーを設定したりすればよいです。

Drupalのテーマシステムは、PHPで記述されていて、テンプレートに定義された特定の置き換え文字部分を実際のコンテンツへ動的に変換する仕組みになっており、サイトを統一されたデザインにすることが可能となっています。Drupalの生成するHTMLは、整形され、標準にも準拠しています。

Drupalフロー

Drupalをより詳しく理解するには、Drupalのシステムレイヤーにおける情報のフローを理解する必要があります。
主に以下の5つの層があります。

  1. システムの基礎となるのは、ノードの集合体:データ(ノード)層です。ウェブサイトに表示する前にコンテンツがデータとして登録されなければなりません。
  2. その上に存在する層はモジュール層です。モジュールは、機能的プラグインで、Drupal Coreの一部となっています。また、Drupalコミュニティのメンバーが作成したもカスタムモジュールも存在します。Drupal Core機能を提供するモジュールは、ノードのデータ項目のカスタマイズ、E-commerceのセットアップ、コンテンツのプログラムによるソートおよび表示(ユーザが定義したフィルターによって制御されるカスタム出力)などを可能にします。Drupalの寄贈モジュールのリポジトリーでは何千種類ものオプションモジュールが提供されています。これは、個人・企業の全ての人のイノベーションと協力により成り立っています。
  3. 次の層はブロックおよびメニュー層です。ブロックは、モジュールで定義されますが、必要に応じて作成することも可能です。テーマのテンプレートで配置を決めることが可能ですが、特定のページや特定のユーザにだけ表示するなど様々な表示設定をすることができます。メニューはDrupalにおけるナビゲーターであり、メニューパス(相対URL)に紐付くコンテンツが定義されます。メニューはDrupalで作成される全てのページへのリンクを提供する基本要素となります。
  4. その次の層はユーザ権限層です。ユーザ種別ごとに利用可能な機能の設定・管理が行われます。権限の集合体がロールであり、ユーザに適切なロールを割り当てることで権限の付与が行われます。
  5. 最上位の層はテーマ層(ウェブサイトのスキン)です。テーマは基本的にPHP変数が組み込まれたXHTMLとCSSで構成されており、、Drupalが生成するコンテンツを適切な配置で表示することができます。各テーマは、標準的な機能に加えて、モジュールで表示制御が柔軟に行えるように機能拡張がで可能となっています。また、ユーザ権限によってランタイムにテンプレートを割り当てることも可能です。

上図での下の層から上の層までのフローが、Drupalの動作を制御しています。もし、追加した新機能が利用できない場合は、対象モジュールをアップロードしたのみで有効になっておらず、機能していないためでしょう(上記図の「A」を参照してください)。また、モジュールをインストールし、有効にしても、ウェブサイトが期待通りに表示されないことがあるかもしれません。その場合は、上記図の「B」に示すようにブロックの設定漏れがないか、あるいは、上記図の「C」に示すようにユーザ権限が正しく設定されているかを確認する必要があります。

さらに、モジュールが出力するXHTMLを詳細に制御するためには、上記のシステムフローを理解する必要があります。利用しているモジュールは要件を満たしているでしょうか?ただ、少しだけHTMLのタグを変えたいだけではないのでしょうか?あるいは、異なるタグを使いたいCSSクラスを適用したいなどの場合、モジュールから出力機能のみをコピーして、テーマのテンプレートとして利用できるようし、そのソースコードを修正することで、カスタマイズした表示機能を利用して出力することが可能となります。

さあ、はじめましょう!

Drupal入門編の学習が終わったので、早速Drupalをインストールしてみましょう(ダウンロードはこちら)。またはオンラインでお試し頂くこともできます(サイトはこちら)。詳細や不明点については、インストール設定ガイドを参照してください。

Drupalコミュニティへようこそ!Drupalでのサイト構築を楽しんでください。

翻訳元URL:https://www.drupal.org/getting-started/before/overview