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

本日は Drupal 開発には欠かせない定番モジュール、「 Devel 」モジュールのご紹介をしたいと思います。

Devel モジュールとは

Devel モジュールとは、 Drupal のモジュール / テーマ開発に役立つ便利機能をまとめたモジュールです。

代表的な機能は、データベースクエリ、システムの状態、 PHP の変数の中身などをページ上に表示する機能です。 データベースクエリやシステムの状態などは管理画面から、 PHP 変数についてはコードを通して表示することが可能です。 他には、任意の PHP コードを実行できるテキストエリアのブロックユーザを手軽に切り替えられるブロックなども提供してくれます。

開発用、分析用のモジュールですので、通常の本番サイト運用時には原則無効にしておくタイプのモジュールです。

Devel モジュールの使い方

ここからは Devel モジュールの実際の使い方をかんたんに見ていきましょう。 まずはインストールから。

インストール

Drush コマンドが入っていれば、 Drupal プロジェクトディレクトリの中で次のコマンドを実行するとかんたんにインストール / 有効化することができます。

$ drush dl devel
$ drush en devel

途中に出てくる確認プロンプトに対してはいずれも y (yes) を選択しましょう。

ちなみに、 drush dl devel でダウンロードできる Devel プロジェクトのディレクトリには次の 3 つのモジュールが入っています。今回はこのうちの 1 番目「 Devel 」のみを取り上げます。

  1. Devel
  2. Devel generate
  3. Devel node access

Drush コマンドが入っていない場合は以下のページを参考に別の方法でインストールしてみてください。

使い方

Devel モジュールの代表的な使い方をいくつかご紹介します。

  1. データベースクエリを表示する
  2. 関数内の PHP 変数を表示する
  3. 現在のユーザを切り替える

他にもさまざまな使い方ができますが、これら代表的な使い方を見ておけば他のところでもスムーズに使えるのではないかと思います。

1. データベースクエリを表示する

まずは Devel モジュールを使ってデータベースクエリを表示する方法を見てみましょう。 手順は次のとおりです。

  1. サイト管理者としてログインし Devel settings のページ /admin/config/development/devel にアクセス
  2. ページの中から「 Display query log 」(クエリログを表示)というチェックボックスを見つけてチェックを入れる
  3. ページ最下部の「 Save configuration 」(設定を保存)をクリックして設定を保存

上記のステップを踏んで無事設定が保存されると、ページの最下部に発行されたクエリのサマリがテーブル表示されるようになります(デフォルトでは管理者ユーザでのログインが必要です)。 これは、ひとつのページリクエストからレスポンスまでの一連の処理の間に行われたクエリの統計情報です。

テーブルの列の「 ms 」は所要時間(単位: ms )を、「 # 」は発行回数を、「 where 」はそのクエリが発行された場所を表します。

所要時間が 5ms を越えるものについては赤色にハイライトされて表示されるので、データベース周りでボトルネックとなっている箇所をパッとひと目で確認することができます。

Views モジュールで複雑な条件を設定したりブロックをたくさん設置したりしているとレスポンスが遅くなってくることがありますが、このデータベースクエリではそのあたりのところを統計的にチェックすることができます。

2. 関数内の PHP 変数を表示する

次に Devel モジュールで PHP 変数を表示する方法を見てみましょう。 いくつか同種の関数が用意されていますが、ここでは dpm() という関数を使ってみます。 こちらは JavaScript でいう console.log に近いイメージの関数です。 ちなみに、関数名の「 dpm 」はおそらく「 dpm = Drupal Print a variable to the Message area 」の略で dpm です。

手順は次のとおりです。

  1. dpm() を呼び出すモジュール devel_test を作成
  2. devel_test を有効化

まずは dpm() を試してみるために、以下の内容のシンプルなモジュール「 devel_test 」を用意します。 構成ファイルは devel_test.infodevel_test.module の 2 つです。

devel_test.info:

name = Devel Test
description = tests devel module function dpm().
dependencies[] = devel
core = 7.x
package = Development

devel_test.module:

<?php

/**
 * @file
 * Devel モジュールの dpm() を hook_page_alter() 内で試します。
 */

/**
 * Implements hook_page_alter().
 */
function devel_test_page_alter(&$page) {
  dpm($page);
}

Drupal のモジュール作成にあまり馴染みのない方はこのあたりのファイルの位置づけや配置場所がわからないのではないかと思います。 カスタムモジュール作成には次のページなどが参考になるかと思いますのでよろければ参考にしてみてください。

モジュールが無事作成できたらモジュールを有効化します。 Drush なら次のコマンドで一発です。

$ drush en devel_test

管理画面から有効化する場合はパス /admin/modules にアクセスし、「 Devel Test 」という文字列を検索してモジュールを見つけ、チェックを入れて有効化しましょう。

モジュールのインストール / 有効化が無事行われたら、その後ページのメッセージ部分に変数の中身を表示するボックスが表示されるようになります。 こちらが、上記のコードの dpm($page); の行で出力された結果です。

デフォルトの設定では管理者ユーザしか見れないようになっているので、ページをリロードしても表示されない場合は管理者ユーザとしてログインできているか、 Devel モジュールまわりのパーミッション(権限)が適切に設定されているかをいま一度確認してみてください。

その他 dpm() で出力されるべき結果が表示されない原因としては以下のようなものがあります。 どうしても表示されない場合にはいま一度チェックしてみてください。

  • dpm() を呼び出すモジュールが有効化されていない
  • Drupal __メッセージエリアが表示されないカスタムテーマを使っている
  • 現在のユーザが dpm() の出力結果を確認できるパーミッション(権限)を持っていない
  • そもそも見ているサイトがちがう(ローカルサーバのサイトとテストサーバのサイトなど ありえなさそうでよくあります...)

3. 現在のユーザを切り替える

最後にもうひとつ、 Devel モジュールで現在のユーザを切り替える方法を見てみましょう。 こちらは開発過程で管理者 / スタッフ / 一般ユーザを頻繁に切り替えてチェックしたりするときに便利です。 手順は次のとおりです。

  1. Switch User ブロックを有効化
  2. 管理者ユーザとしてログインし Switch User ブロックのユーザ名をクリック

まずは Switch User ブロックを有効化します。 管理者としてログインし、管理画面のブロック管理ページ /admin/structure/block に移動します。 ページ内に表示されるブロックリストの中から「 Switch User 」(ユーザの切り替え)を見つけて、ページに表示される適当なブロックに移動します(たとえば Sdiebar first )。 設定を保存したら、ホームなどの一般のユーザ向けページに移動します。

設定が無事保存されていれば、上の手順で指定したブロックの中に「 Switch User 」と題されたブロックがあるのが確認できるかと思います。 このリストの中のユーザ名をクリックすれば、現在ログイン中のユーザがそのユーザに切り替わります。

こちらもデフォルトでは管理者向けのみの機能となっていますので(もちろんのことですが)、設定したのにブロックがどうも表示されないなぁという場合にはログイン中のユーザが管理者ユーザかどうかいま一度確認してみてください。

終わりに

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

今回は Drupal 開発に欠かせない Devel モジュールについて手短にご紹介いたしました。 その主な機能はデータベースクエリやその他システムの状況、 PHP 変数をページに表示する機能です。 他にも、ユーザ切り替え機能を提供するブロックなどがありました。

Devel モジュールにはこの他にも Drush サブコマンドや XHProf 出力機能、任意の PHP コードをページ上から実行する機能など Drupal 開発を強力にサポートする機能がいろいろ用意されていますので、これから本格的に Drupal 開発をやってみようという方はぜひそのあたりもチェックしてみてください。