アイキャッチ画像: デスクの上でパソコンを使用している

今回は Drupal 開発を行ううえで避けては通れない「モジュールの作り方」の入門編をお届けしたいと思います。

対象とする Drupal のバージョンは 2014 年 5 月現在の最新安定版 Drupal 7 です。

今回作成するのはいわゆる「 Hello World 」モジュールです。 固定の文字列( Hello World )をページに表示する最もシンプルな形のモジュールを作っていきます。

モジュールの機能が複雑になっていってもモジュール開発の基本的な流れは変わらないので、今回の投稿を読むことで Drupal モジュール開発に共通するおおまかな流れはつかんでいただけるのではないかと思います。

以下、 Drupal のモジュールとはそもそも何なのかというお話を最初にはさんでから、具体的なモジュール開発の手順を見ていきます。

Drupal のモジュールとは

Drupal では、特定の機能を実現するパーツの集まりのことを「モジュール」と呼んでいます。 モジュールには PHP ファイルはもちろんのこと、 CSS 、 JavaScript 、ときには画像なんかも含まれます。

他のフレームワークや CMS では「パッケージ」「バンドル」「プラグイン」「エクステンション」などなどモジュールと同様の概念にさまざまな呼び名がついていますが、 Drupal の場合はコア本体も含めて「モジュール」という呼び方で統一されています。

ちなみに、 Drupal のモジュールは大きく 3 タイプに分類することができます。

  1. コアモジュール
  2. コントリビュートモジュール
  3. カスタムモジュール

ひとつは「コアモジュール」と呼ばれるもので、 Drupal 本体に標準添付されるモジュールのことを指します。 ふたつめは「コントリビュートモジュール」で、いわゆる「 Drupal コミュニティ」のメンバーが開発・公開した汎用モジュールのことです。

みっつめがいわゆる「カスタムモジュール」と呼ばれるもので、開発会社や Drupal ユーザが個別に開発して作るオリジナルモジュールのことです。 スタジオ・ウミがお客様のご要望にお応えしてそのサイトのオリジナル機能を作るときにはこの「カスタムモジュール」を開発する形となります。

既存のモジュールを利用する場合も、値のちょっとした変更なんかは管理画面からできたりもしますが、モジュールとモジュールを組み合わせたり機能を追加したりとプラスアルファの使い方をしたい場合には、やはりオリジナルのカスタムモジュールを開発することになります。

ですので、 Drupal を本格的に使いたいなら、カスタムモジュールの作成方法の習得はどうしても避けては通れないポイントです。

今回作るモジュール helloworld について

今回はページに「 Hello World 」と表示するその名も「 helloworld 」モジュールを作ります。

できあがりのイメージはこんな感じです。

Drupal 7 モジュール開発入門 1

では以降、モジュール開発の流れを見ていきます。

モジュール開発の流れ

Drupal モジュール開発の一般的な流れは次のようになります。

  1. モジュールディレクトリを作成
  2. モジュールのメタ情報ファイル( .info )を作成
  3. モジュール本体ファイル( .module )を作成
  4. モジュールをインストール

(今回はシンプルなモジュールなので実装前後のステップについては割愛しています)

では、上記の流れに沿って実際にモジュールを作っていきましょう。 これ以降は実際に手を動かしながら読み進めていただくとよりリアルにモジュール開発の感じがつかんでいただけると思います。

モジュールを作ってみよう

以下の前提として Drupal 本体のセットアップはすでに済んでいるものとします。 Drupal 本体のセットアップが済んでいない場合は Drupal をなるべくお手軽に試す方法 などを参考に先にセットアップを済ませてしまってください。

最初のステップはモジュールディレクトリの作成です。

1. モジュールディレクトリを作成

モジュールディレクトリを作成します。

Drupal プロジェクトディレクトリ以下の sites/all/modules というところに「 helloworld 」というディレクトリを作成します。

$ mkdir helloworld
$ cd helloworld

プロジェクト名は小文字英数字にしましょう。

一般には、モジュールのソースコード内で何度も何度もこのモジュール名を使っていくことになりますので、繰り返し使うことを前提にした名前にするとよいでしょう。 一般的なモジュール名の原則は、「わかりやすく、できるだけ短い、だけど他のモジュールと重複しない名前をつける」というものです。

2. モジュールのメタ情報ファイル( .info )を作成

ディレクトリが作成できたら、次はモジュールのメタ情報を記入する .info ファイルを作成します。

.info ファイルは「モジュール名 .info 」という名前にするという決まりになっています。 今回はモジュール名が「 helloworld 」なので、 .info ファイルは「 helloworld.info 」になります。

$ touch helloworld.info

ファイルが作成できたらそのファイルをエディタで開き次の内容を入力して保存します。

name = Hello World
description = Says hello world in a page.
core = 7.x
package = "Demo"

これらはこのモジュールを Drupal に管理してもらうために必要な情報です。 今回はとりあえずこの 4 行を記入するということで先へと進み、 .info ファイルについての詳細は割愛します。

ちなみに、この .info ファイルの作成は Drupal で「テーマ」を作成するときにも必須となってきます。 テーマにおける .info ファイルについては Drupalでテーマ作成に必須な.infoファイルについて という記事もありますので、よろしければ参考にしてみてください。

3. モジュール本体ファイル( .module )を作成

.info ファイルでモジュールのメタ情報を設定したら、次は、モジュールの本体となるソースファイル .module を作成します。

.module ファイルも .info ファイルと同じく「モジュール名 .module 」という名前にするルールとなっています。 今回の場合は「 helloworld.module 」になります。

$ touch helloworld.module

.module ファイルが作成できたら、エディタで開き次の内容を入力して保存します。

<?php

/**
 * Implements hook_menu().
 */
function helloworld_menu() {
  // for path http://domain/hello, use helloworld_say_hello
  $items['hello'] = array(
    'title' => 'Hello world',
    'page callback' => 'helloworld_say_hello',
    'access callback' => TRUE,
  );

  return $items;
}

/**
 * callback function for /hello
 *
 * @see helloworld_menu()
 */
function helloworld_say_hello() {
  return 'hello hello hello';
}

拡張子は .module ですが、この中には通常の PHP コードを記述します。

今回は 2 つの関数を定義しました。 ひとつめの helloworld_menu() というのは URL を関数にディスパッチする「ルーティング設定」と画面上の「メニューの設定」をあわせて行う関数です。 Drupal 7 ではルーティングとメニューの設定がいっしょくたになっているところが特徴的です。

ふたつめの helloworld_say_hello() というのは、特定の URL へのリクエストがあった際に実際にレスポンスを返すための処理を行う関数です。 MVC モデルでいうなら C (コントローラ) に相当する関数です。

ここで作った 2 つのファイルーー .info ファイルと .module ファイルが Drupal モジュールの最小構成要素となります。 一般に、モジュールに含まれるその他のファイルは場合によっては削除することもできますが、 .info ファイルと .module ファイル、この 2 のファイルについてはモジュールに必要不可欠となっており絶対に欠かすことができません。

以上のステップで Hello World モジュールの開発は完了!です。 ややあっけない気もしますが、これで実際に動作します。

4. モジュールをインストール

モジュール作成が完了したので、あとはモジュールを実際に Drupal システムにインストールすれば OK です。

まずは Drupal を起動し、サイトをブラウザから見れる状態にします。 データベースの立ち上げも忘れずに。

次に、ブラウザでアクセスして管理者ユーザとしてログインし、パス /admin/module にアクセスします。 Drupal の管理下にあるモジュールの一覧ページが表示されますので、その中から Hello World というモジュールを探してその隣のチェックボックスにチェックを入れます。

Drupal 7 モジュール開発入門 2

チェックを入れたら、 Save configuration (設定を保存)ボタンを押してモジュールの有効化処理を走らせます。

Drupal 7 モジュール開発入門 3

ボタンクリック後モジュールが有効化された旨のメッセージが画面に出てこれば、モジュールのインストールも無事完了です。 あとはブラウザからパス /hellohttp://ドメイン/hello )にアクセスします。

すると最初に見た Hello World の画面が表示されるはず!です。

Drupal 7 モジュール開発入門 1

・・・以上で Drupal モジュールの開発は終了です。

いかがだったでしょうか?

本格的に使えるモジュールを作るとなるとまたいくつもの押さえていくべきポイントがありますが、モジュール開発のひととおりの流れは以上で押さえられたかと思います。 「意外にかんたん」「意外に面倒かも・・・」ーー読む方によって感じ方はさまざまかと思いますが、この記事を通して Drupal 開発の雰囲気を少しでも感じていただけたなら幸いです。