Drupal はウェブ・アプリケーションの夢を見るか
今回のエントリーは、TransNetCreation のウェブサイトが新しくなって初めてのエントリーということになりますので、新サイトが Drupal日本語版)により構築・運用されているということにちなんで、Drupal についての情報発信を行うコラム「Power of Drupal」の第1回目(vol.1)をお届けしようと思います。当コラムでは、主に、サイトを運用する組織や個人の方々にとって、CMS として Drupal を採用することにより、どのような利点があるのか、どのようなことができるようになるのか、どのようなパワーを得ることができるのか、ということに焦点を当てて解説していきたいと考えています。そのような意味合いも込めて、当コラムは「Power of Drupal」というタイトルにしています。
Drupal は、日本での知名度はまだまだだと思われますが、世界的には、大きな注目を集める CMS となっています。具体的には、Drupal は、2009年秋に行われた ホワイトハウス のサイトのリニューアルで、新サイトの CMS として採用されました。また、Drupal は、アメリカの IT 系出版社である Packt Publishing 社が主催する CMS のアワォード(Open Source CMS Award) で、2007年、2008年と2年連続で総合部門(Overall Winner)の一位を獲得し、2009年も 殿堂入り部門(Hall of Fame Award) で一位を獲得しています。Drupal が2009年の総合部門でランクインしなかったのは、過去に総合部門で一位を獲得したことのある CMS は、総合部門にはノミネートされず、殿堂入り部門にノミネートされる、というルールが設けられたことによるものです。私見ですが、このルールは、総合部門の一位が固定化するのを回避するため、つまり、Drupal が総合部門で連続して一位を獲得し続けるのを回避するために設けられたものと思われます。 Drupal は、他にも PHP CMS 部門(Best Open Source PHP CMS Category) で、2009年に総合部門で一位を獲得した CMS を抑えて一位を獲得していますので、このルールがなかったとしたら、Drupal が3年連続で総合部門の一位を獲得していた可能性が高いと思われます。別の見方をすれば、このルールが継続的に適用されるとすると、このアワォードのメイン部門は、総合部門ではなく、殿堂入り部門である、と言えるでしょう。ということは、つまり、2009年も、Drupal が、このアワォードのメイン部門で一位を獲得した、ということになります。

ということで、コラム「Power of Drupal」の vol.1 となる今回は、「Drupal はウェブ・アプリケーションの夢を見るか」と題して、他の CMS とも比べつつ、 Drupal の特徴について書いてみたいと思います。このエントリーが、日本で Drupal の採用を検討されておられる組織・個人の方々の参考になりましたら幸いです。 ■2010年04月22日追記
当コラムの vol.2 「Drupal、6つの自由自在をもたらすCMS」では、より具体的に、CMS としての Drupal の特徴となるそのメリットについて解説を試みております。

■2011年01月06日追記
当サイトの日記「DIARY :: AROUND THE CORNER」の2011年01月06日のエントリーでは、「祝! Drupal 7 正式リリース」と題して、リリースされたばかりの Drupal 7 について、管理面・開発面から、非常に簡単ですがレビューしています。

Drupal はウェブ・アプリケーションの夢を見るか

Section.1

Drupal とは:CMS & ウェブ・アプリケーション・フレームワーク

Drupal の特徴を説明する際によく言われるのが、
Drupal は、CMS(コンテンツ・マネジメント・システム) であると同時に、優れたウェブ・アプリケーション・フレームワークである
という言葉である。このエントリーでは、この言葉を深堀することにより、Drupal の特徴を考えてみることにしたい。そこで、Wikipedia を参照すると、「CMS」 とは、 
ウェブ・コンテンツを構成するテキストや画像などのデジタルコンテンツを統合・体系的に管理し、配信など必要な処理を行うシステムの総称
と定義されている。一方、「ウェブ・アプリケーション・フレームワーク」とは、
動的なウェブサイト、ウェブ・アプリケーション、ウェブ・サービスの開発をサポートするために設計されたアプリケーション・フレームワークである
と定義されている。以下、まず前半で「CMS」という用語について検討し(Section.2 〜 Section.5)、後半で「ウェブ・アプリケーション・フレームワーク」という用語について検討し(Section.6 〜 Section.11)、最終のセクションで、まとめてみることにする(Section.12)。 
Section.2

CMS とは:CMS の本質的な3つの機能

CMS については、一般的に普及している用語・概念であり、また、Wikipedia による定義も一般的な用語により構成されているため、それほど説明の必要はないかもしれない。ただ、より具体的に定義すると、ウェブの各ページは大きな分類としては「レイアウト情報」と「コンテンツ情報」から構成されていると言えるが、CMS は、本質的には、
機能その1:ウェブページのレイアウト情報とコンテンツ情報を別々に管理する
機能その2:レイアウト情報やコンテンツ情報の作成・修正を、ウェブ上(=ブラウザ上)で行えるようにする
機能その3:ウェブページを表示するために、レイアウト情報とコンテンツ情報を適切に組み合わせる
という3つの機能を提供するアプリケーション・ソフトウエアである、と言えるだろう。そして、それにより、
ブラウザ上で、かつ、HTML を触ることなく、コンテンツの追加・修正を可能にし、ウェブページの制作・ウェブサイトの運営を可能にするソフトウエアである
ということになる。
Section.3

CMS の機能その1

レイアウト情報とは、読んで字のごとく、ウェブページのレイアウト・デザインに関する情報である。ウェブページのレイアウト・デザインに関する情報は、基本的には、HTML、CSS、JavaScript という3種類の情報から構成されることになるが、ここでは、分かりやすさを優先し、HTML のみを考えることにする。すると、その場合、レイアウト情報とは、形式的には、「HTML のタグの部分」ということになる。一方、コンテンツ情報とは、具体的には、テキスト情報や画像情報などのことである。ここでは、分かりやすさを優先し、テキスト情報についてのみ考えることにすると、コンテンツ情報とは、形式的には、「HTML タグで囲まれた部分」ということになる。例えば、このページのタイトルの部分は、HTML としては
<h1>Drupal はウェブ・アプリケーションの夢を見るか</h1>
となっているが、その中で、
<h1></h1>
の部分がレイアウト情報であり、
Drupal はウェブ・アプリケーションの夢を見るか
の部分がコンテンツ情報ということになる。その上で、CMS の機能その1について考えると、元来、ウェブページは「index.html」のような1つのファイルとして物理的に存在し、そのファイルの中にレイアウト情報(HTML タグ)とコンテンツ情報(HTML タグの中身)が複雑に混在する形になっているのであるが、それに対して、CMS は、
ウェブページのレイアウト情報とコンテンツ情報を明確に分離して管理する
ということである。それにより、
「レイアウト情報」=「HTML タグ」の部分に手を触れずに、「コンテンツ情報」=「HTML タグの中身」=「文章等」を作成・修正することが可能になる
というわけである。この機能は、CMS に分類される全てのアプリケーション・ソフトウエアに共通する機能と言ってよいであろう。
Section.4

CMS の機能その2

ウェブページが「index.html」のような1つのファイルとして物理的に存在しているとすると、このウェブページを変更する場合には、
1:HTML ファイルをローカルの PC 上で変更する2:変更した HTML ファイルを、FTP 等により、サーバーのしかるべきディレクトリにアップロードする
という手順を踏むことになる。それに対して、CMS は、ご存知のように、この手順を簡略化し、これらをウェブ上で、つまりブラウザ上で完結できるようにしてくれる。つまり、
レイアウト情報やコンテンツ情報の作成・修正を、ウェブ上(=ブラウザ上)で行えるようにする
のである。この機能については、CMS に2つのタイプが存在する。1つは、コンテンツ情報とレイアウト情報の両方についてこの機能を提供するタイプであり、もう1つは、コンテンツ情報についてのみこの機能を提供するタイプである。具体的には、Movable Type は前者のタイプになり、WordPress や Drupal は後者のタイプになる。(Drupal については、レイアウト情報の一部についてもこの機能を利用できるようにする追加モジュールが存在している。 WordPress についても、私は把握していないが、同様の追加モジュールが存在しているかもしれない。)しかし、一般的にサイトの運用管理者とっては、頻繁に編集したい情報は、レイアウト情報ではなくコンテンツ情報であるため、このタイプの違いは、CMS を選択する際には、あまり考慮する必要がないと考えられる。
Section.5

CMS の機能その3

ウェブページが「index.html」のような1つのファイルとして物理的に存在しているとすると、このページにアクセスがあった時には、サーバーは、概略的には、
1:アクセスがあった URL に該当するファイル(この例の場合は「index.html」)を読み込む2:読み込んだファイルの内容を、アクセスしてきたブラウザに対して送信する
という手順を踏むことになる。CMS は、この手順に介入にするわけであるが、その時の方法には、2つのタイプがある。1つは「静的 CMS」と呼ばれるタイプで、もう1つは「動的 CMS」と呼ばれるタイプである。静的 CMS は、レイアウト情報やコンテンツ情報が修正された際に、その都度、レイアウト情報とコンテンツ情報を適切に組み合わせてあらかじめ1つのファイル(この例の場合は「index.html」)を出力しておく、という処理を行う。そして、このページにアクセスがあった際には、ただ単に、上記のような通常の手順が行われることになる。つまり、次のような手順になる。
1:レイアウト情報とコンテンツ情報を適切に組み合わせて、あらかじめ1つのファイルを出力しておく2:アクセスがあった際には、アクセスがあった URL に該当するファイルを読み込む3:読み込んだファイルの内容を、アクセスしてきたブラウザに対して送信する
一方、動的 CMS は、レイアウト情報やコンテンツ情報が修正された際には、それぞれを適切に保存するのみで何も行わない。しかし、このページにアクセスがあった際には、その都度、レイアウト情報とコンテンツ情報を適切に組み合わせて1つのファイル情報を生成し、それを送信する、という処理を行う。つまり、次のような手順になる。
1:アクセスがあった際には、その都度、レイアウト情報とコンテンツ情報を適切に組み合わせて、アクセスがあった URL に該当するファイル情報を生成する2:生成したファイル情報を、アクセスしてきたブラウザに対して送信する
具体的には、Movable Type は前者のタイプ(静的 CMS)になり、WordPress や Drupal は後者のタイプ(動的 CMS)になる。(ただし、Movable Type は、設定を変更することにより、後者の方法を選択することもできる。)静的 CMS は、
(1)アクセスに対するサーバー負荷が小さい
という利点がある。一方、動的 CMS は、アクセスがあった都度、それに応じたページ情報を生成するため、
(1)ユーザーに応じて異なったレイアウトやコンテンツのページを表示することができる(2)アクセスがあった際にプログラムによる複雑な処理を行うことができるため、ページに様々な付加的な機能を追加することができる
などの利点がある。つまり、一般的に、一律に表示するだけのページの場合には静的 CMS の方が向いているが、ページに何らかの付加的な機能が必要な場合には動的 CMS の方が向いている、ということになる。この点において、Drupal は(WordPress などと同様に)、日本で最も普及している CMS と言われる Movable Type とは、大きく性格の異なる CMS である、ということになる。
Section.6

ウェブ・アプリケーション・フレームワークとしての Drupal

前セクションまでで、Drupal の一つの側面である CMS について、その定義を詳細に検討することにより、Drupal は、WordPress などと同様に動的 CMS に分類され、静的 CMS に分類される Movable Type とは大きく異なる、ということを見てきた。そこで、このセクション以降では、 Drupal のもう一つの側面であるウェブ・アプリケーション・フレームワークについて、その定義を詳細に検討することにより、Drupal の特徴を把握していくことにする。そこで、もう一度、Wikipedia による定義に戻ると、ウェブ・アプリケーション・フレームワークとは、
動的なウェブサイト、ウェブ・アプリケーション、ウェブ・サービスの開発をサポートするために設計されたアプリケーション・フレームワークである
となっている。この中には、開発目的として「動的なウェブサイト」「ウェブ・アプリケーション」「ウェブ・サービス」という3つの用語が登場し、提供価値・提供機能として「アプリケーション・フレームワーク」という用語が登場している。つまり、
Drupal は(優れた)ウェブ・アプリケーション・フレームワークである
とは、まず第1点目として、
Drupal は、「動的なウェブサイト」「ウェブ・アプリケーション」「ウェブ・サービス」を開発することを目的としている
ということを意味している。そして、第2点目として、
Drupal は、「アプリケーション・フレームワーク」としての価値を提供する
もしくは、
Drupal は、「アプリケーション・フレームワーク」としての機能を提供する
ということを意味している。ということで、これらの用語を1つ1つ見ていくことにしたい。
Section.7

Drupal の開発目的:動的なウェブサイト

「動的なウェブサイト」における「動的」の意味は、CMS の機能その3で検討した際に登場した「動的 CMS」における「動的」と、全く同じ意味である。つまり、「動的なウェブサイト」とは、
ある URL がリクエストされた際には、それに対応する HTML ファイルをあらかじめ用意しておくのではなく、それに対応するプログラムを稼働させて、そのプログラムにより生成されるページ情報をブラウザに返す
というタイプのウェブサイトである。このように対応することにより、ページに様々な付加的機能を追加することが可能になる。Drupal や WordPress など、動的 CMS により構築・運用されているサイトは、必然的に、動的なウェブサイトということになる
Section.8

Drupal の開発目的:ウェブ・アプリケーション

ウェブ・アプリケーション」とは、Wikipedia によれば、
ウェブの機能や特徴を利用したアプリケーション・ソフトウェアのことである
となっており、その例として、 ・ウィキ ・ブログ ・電子掲示板 ・銀行のオンラインバンキング ・証券会社のオンライントレード ・電子商店街などネット販売のショッピングカートなどが挙げられている。それに加えて、 ・Google などの検索サイト ・mixi などの SNS サイト ・Twitter などのマイクロ・ブログ・サービスも、ウェブ・アプリケーションの代表例と言えるだろう。「動的なウェブサイト」という用語が、プログラムを稼働させてページ情報を生成するという技術面に焦点が当てられているのに対して、「ウェブ・アプリケーション」という用語は、動的なウェブサイトにより提供される機能面・サービス面に焦点が当てられている。ウェブ・アプリケーションであるためには、その前提として動的なウェブサイトである必要があるため、
動的なウェブサイトがより進化し、総体的に何らかのサービスを提供すると認識されるようになったものが、ウェブ・アプリケーションと呼ばれる
と捉えてもよいであろう。ただ、ちょっとややこしいのは、静的 CMS である Movable Type は、それ自体は、正真正銘のウェブ・アプリケーションであるが、(具体的には、ブログ機能を提供するウェブ・アプリケーションということになる)Movable Type により構築されたサイトは、一般的には静的なウェブサイトということになり、ここで言うウェブ・アプリケーションには、その前提条件からして当てはまらないということである。また、誤解を招くといけないのであらかじめ断っておくが、Drupal がウェブ・アプリケーションを作るために適していると言っても、Drupal で検索サービスを開発する、という開発者は希有であろう。一方、Drupal で、ウィキ、電子掲示板、ショッピングカート、SNS、マイクロ・ブログ・サービスなどを開発する、という開発者は多いかもしれない。
Section.9

Drupal の開発目的:ウェブ・サービス

ウェブ・サービス」とは、Wikipedia によれば、
HTTP などのインターネット関連技術を応用して、SOAP と呼ばれる XML 形式のプロトコルを用いメッセージの送受信を行う技術、またはそれを適用したサービス
REST と呼ばれるスタイルでインターネット越しのソフトウェアを利用する形態
さまざまなプラットフォーム上で動作する異なるソフトウェア同士が相互運用するための標準的な手段を提供するもの
などと定義されている。やや分かりにくいので、別の定義を紹介すると、
ウェブ・サーバー間でウェブ・アプリケーションを連携したもの
とされる。Wikipedia の定義の中に登場する「SOAP」「REST」というのは、ウェブ・サーバーが連携する際に用いる技術・手続きのことである。つまり、通常のウェブ・アプリケーションが、
「人間」に対して、何らかのサービスを提供する動的なウェブサイトである
のに対して、ウェブ・サービスとは、
「サーバー」もしくは「サーバー上で稼働するプログラム」に対して、何らかのサービスを提供する動的なウェブサイトである
と言える。さらに概念的に整理すると、ウェブ・サービスとは、
広義のウェブ・アプリケーションの一種で、狭義のウェブ・アプリケーションが、「人間に対するウェブ・アプリケーション」という意味であるのに対して、ウェブ・サービスは、「サーバーに対するウェブ・アプリケーション」という意味である
ということになる。したがって、ここでは、結論として、
ウェブ・サービスも(広義の)ウェブ・アプリケーションの一種である
ということを抑えておきたい。
Section.10

Drupal の提供価値・提供機能:アプリケーション・フレームワーク

前の3つのセクションでは、Drupal の開発目的について詳細に検討してきたので、このセクションでは、Drupal の提供価値・提供機能である「アプリケーション・フレームワーク」について詳細に検討することにする。「アプリケーション・フレームワーク」とは、Wikipedia によれば、
プログラミングにおいて、特定のオペレーティングシステムのためのアプリケーションの標準構造を実装するのに使われるクラスやライブラリの集まりである
多くの再利用可能なコードをフレームワーク(アプリケーション・フレームワーク)にまとめることによって、開発者の手間を省き、新たなアプリケーションのために標準的なコードを改めて書かなくて済むようにする
とある。プログラミングを行わない方にはやや分かりにくいかもしれないが、要するに、アプリケーション・フレームワークとは、
プログラミングを容易にするためのプログラムのパーツ(部品)やツール(道具)のセット
のことである、と理解できる。これでも分かりにくいかもしれないので、ワープロソフトの例を用いて説明すると、ワープロソフトには、様々な例文がテンプレートセットとして付属している場合があり、その場合、ワープロソフトのユーザーは、その例文をコピー&ペーストして、それを元に文書を作成することで、ミスを少なくし、かつ、クオリティの高いオリジナルの文書を素早く作成することが可能になる。それと似たような感じで、アプリケーション・フレームワークがプログラミングを行う上でよく用いられるプログラムのパーツやツールをあらかじめ用意してくれているため、プログラマーは、それらのパーツやツールを使うことにより、
ミスが少なく、かつ、クオリティの高いオリジナルのプログラムを素早く作成することが可能になる
というわけである。
Section.11

Drupal は優れたウェブ・アプリケーション・フレームワークである

ここまで、「ウェブ・アプリケーション・フレームワーク」について、その内容を開発目的と提供価値・提供機能に分けて検討してきたので、ここで総合してみることにする。まず、開発目的となる「動的なウェブサイト」「ウェブ・アプリケーション」「ウェブ・サービス」という用語については、
大なり小なり何らかのサービスを提供する、プログラムにより生成されるウェブサイト
という言い方でまとめることができるだろう。そして、提供価値・提供機能である「アプリケーション・フレームワーク」という用語については、
プログラミングを容易にするためのプログラムのパーツ(部品)やツール(道具)のセット
ということであった。とすれば、ウェブ・アプリケーション・フレームワークとは、
『大なり小なり何らかのサービスを提供する、プログラムにより生成されるウェブサイト』の開発をサポートするために設計された、『プログラミングを容易にするためのプログラムのパーツやツールのセット』
ということになる。ということは、Drupal とは、
(1)『大なり小なり何らかのサービスを提供する、プログラムにより生成されるウェブサイト』の開発を促進・支援する
そして、具体的には、
(2)そのための『プログラミングを容易にするプログラムのパーツやツールのセット』を提供する
ということになる。ただ、この説明は、拡大解釈すれば、Drupal に限らず、他の動的 CMS にも援用することができるかもしれない。また、それぞれの CMS には、それぞれのエキスパートがいるため、結果としてでき上がるサイト間の差は小さくなり、そのようなエキスパートの手にかかれば、CMS 間の差は小さいということになるのかもしれない。また、CMS 全体から見れば、私がカバーしている範囲はあまりにも狭いため、この観点で私が主観的に適切な評価を下すことはできない。(ただ、個人的には、私が開発経験のある CMS の中では、 プログラミングの視点においては、Drupal が最も優れている、と感じている。)ということで、ここでは、できる限り、比較可能な計量的な指標をもって、Drupal の相対的な位置付けを確認することに留めたい。『プログラムのパーツやツール』とは、例としては、プログラミングの専門用語になって恐縮であるが、「定数・変数・タグ」「関数」などを挙げることができる。そこで、Drupal とあるメジャーな動的 CMS を比較すると、あるメジャーな動的 CMS では、デフォルトで提供されるタグが約140個、関数が約430個となっているのに対して、Drupal では、デフォルトで提供される変数・定数が約270個、関数が約2260個となっている。「定数・変数・タグ」で2倍弱、「関数」で5倍強である。少なくとも、この点に関しては、Drupal は、より充実した『プログラミングを容易にするプログラムのパーツやツールのセット』を提供していると、言えるだろう。
Section.12

そして、Drupal とは:開発者支援と所有者・運用管理者満足

やや遠回りしたかもしれないが、Drupal の姿がおぼろげながらも見えてきたのではないだろうか。つまり、Drupal とは、
動的なウェブサイト(=プログラムにより生成されるウェブサイト)を作るための動的 CMS
である。CMS であるということは、
ブラウザ上で、かつ、HTML を触ることなく、コンテンツの追加・修正を可能にし、ウェブページの制作・ウェブサイトの運営を可能にする、ソフトウエアである
ということであるが、単なる CMS に留まらず、
『何らかのサービスを提供するウェブサイト』を開発するという目的においては、その目的の達成を支援するための優れた『プログラムのパーツやツール』を提供するソフトウエアである
ということである。もう少し分かりやすく言えば、
何らかのサービスを提供するウェブサイトを作りたいと考えた時に、実際にその開発作業を行うのはプログラマーであるが、Drupal は、そのプログラマーにとって、開発のための非常に良い土台となる
ということである。そして、プログラマーにとって開発のための良い土台となるということは、
Drupal の上に構築されるサイトが、結果として、サイトの所有者や運用管理者にとって、意図した通りの満足度の高いものになる可能性が高い
ということである。さらに、基本的には CMS であることから、でき上がった高機能なサイトにおいても、
サイトの所有者や運用管理者は、ブラウザ上で、かつ、HTML を触ることなく、コンテンツの追加・修正が可能であり、ウェブページの制作・ウェブサイトの運営を行うことができる
ということである。したがって、
Drupal とは、高機能なサイトを構築するという目的において、そのための土台となり、開発者による開発を強力に支援することにより、サイトの所有者・運用管理者に満足をもたらす CMS である
と言える。
CMS でありつつ、様々なサービスを提供するサイト(=ウェブ・アプリケーション)を自由に構築することができる
ウェブ・アプリケーションとして高機能を実現しつつ、 CMS として簡便さを提供する
それが、Drupal の優れた特徴であると言えよう。IT の世界でトップを走るアメリカにおいて Drupal への評価が高いのは、やはり、この点にあるのではないだろうか。このエントリーのタイトルは「Drupal はウェブ・アプリケーションの夢を見るか」であったが、それに対しては、Drupal とは、静的にページを表示したり、サイトの更新を容易にしたりするためのみではなく、
様々なサービス・様々な機能を提供するサイト(=ウェブ・アプリケーション)を構築するための CMS である
との結論をもって答えることにしたい。
最後までお読みいただき、ありがとうございました。 読者の皆様にとりまして、当エントリーが何らかの意味で価値あるものとなりましたら幸いです。 また、当サイトの Drupal セクション におきましても、 TransNetCreation における Drupal への取り組みと共に、Drupal の具体的な特徴について解説しております。 Drupal に関して、より幅広くお知りになりたいという方は、そちらも参考にしていただけましたらと思います。
■2010年04月22日追記 当コラム vol.2「Drupal、6つの自由自在をもたらすCMS」では、 より具体的に、Drupal の特徴について解説を試みております。
■2011年01月06日追記 当サイトの日記「DIARY :: AROUND THE CORNER」の2011年01月06日のエントリーでは、 「祝! Drupal 7 正式リリース」と題して、 リリースされたばかりの Drupal 7 について、管理面・開発面から、非常に簡単ですがレビューしています。