こんにちは。長年 Drupal を使ってウェブサイトの開発をしているのに、未だに新たな発見があって Drupal はまだまだ深いなと考える大野です。

今回は Drupal 7 の各種ディレクトリの構造とその役割、それに加え慣例的に作られるようになったディレクトリについても合わせて解説します。

ディレクトリツリー

解凍したての Drupal 7 のディレクトリは以下のツリーになっています。

/Drupal-7.x
├── includes
├── misc
├── modules
├── profiles
├── scripts
├── sites
│   ├── all
│   │   ├── libraries (インストール時には存在しない)
│   │   ├── modules
│   │   └── themes
│   └── default
│       ├── files
│       └── private (インストール時には存在しない)
└── themes

sites ディレクトリ以外は触ってはダメ

Drupal ではファイル構造が明確に設計されており、基本的に .htaccess ファイルなどの一部の例外を除き、 sites ディレクトリ以下のものしか触ってはいけないことになっています。自分でインストール・開発するものは全て sites ディレクトリに入れると念頭に入れておきましょう。

各ディレクトリの解説

include

Drupal API の関数やクラスが書かれたPHPのインクルードファイル群が入ったディレクトリです。

misc

システムで基本的に使われる Java Script や画像などの雑多なものが入ったディレクトリです。

modules

Drupal のコアモジュール群です。モジュールの管理画面にあるモジュールは全てここに含まれています。

カスタムモジュールをここにインストールすることもできますが、本来はここに入れるべきではありません。

profiles

インストール用のプロフィールファイルが含まれています。 Drupal をインストールされたことがある方ならご存知かと思いますが、インストール時に選択する Minimum や Standard のプロフィール(インストールに関する設定)はこのディレクトリに格納されています。

ローカライズバージョンの Drupal や各種ディストリビューションはこのプロフィールの仕組みを利用しています。

scripts

管理者と開発者向けのシェルスクリプトが含まれています。これらのスクリプトは Drupal のルートディレクトリから実行する必要があります。Drush がインストールされた環境であれば必要ないかもしれません。

sites

標準では all と default ディレクトリが用意されています。

Drupal には同じコードベースでいくつもサイトを設置することができる「マルチサイト」と言う機能があります。このディレクトリ内にマルチサイトのURLルールに則ったディレクトリを作ることで、モジュールやテーマを切り分けることができます。

マルチサイトの詳しい説明については説明が長くなってしまいますので今回は割愛します。

Drupal.org Multi-site

sites/all

共有のリソースを置くディレクトリです。このディレクトリ以下にインストールしたモジュールやテーマ、ライブラリは全てのこの Drupal が管理する全てのサイトから使用することができます。

単独のサイトであってもここにモジュールやテーマをインストールしても問題ありません。

sites/all/libraries

このディレクトリは Drupal インストール時には存在しませんが、サードパーティー製のライブラリを使用する場合はこのディレクトリを作り、その配下に更にライブラリ名のディレクトリを作って格納する方法が一般的です。

sites/all/modules

コントリビュートモジュールやカスタムモジュールはこのディレクトリにインストールします。

最近ではこのディレクトリ以下に、カスタムモジュール用の custom ディレクトリとコントリビュートモジュール用の contrib ディレクトリを作成しその中に各種モジュールを分けてインストールする方法が通例となっています。

コントリビュートモジュールとカスタムモジュールを使って構築するサイトでしたら、この様に切り分けておくことをお勧めします。

ちなみに Drush もこの構造に対応しており、モジュールをダウンロードする際、既に contrib ディレクトリが作られている場合はそこにインストールされるようになっています。

sites/all/themes

コントリビュートテーマやカスタムテーマはこのディレクトリにインストール・作成します。

sites/default

前述のマルチサイト機能で該当するサイトがなかった際に使用されるデフォルトのサイトディレクトリです。

Drupal を単独のサイトとして構築する場合は、とりあえずここが使われると思ってください。

sites/default/files

一般公開するファイルが格納されるディレクトリです。通常は Drupal のファイルシステムがファイルをここにアップロードしていきますので、サイト管理者が手を加えることはありません。

ユーザーはこのディレクトリ内にあるファイルはURLさえ知っていればダウンロードすることができます。

sites/default/private

このディレクトリは Drupal インストール時には存在しません。Drupal でプライベートファイルを使用する場合、一般的にこのディレクトリを作成して設定します。

Drupal はプライベートファイルの置き場として設定されたディレクトリに、URLを直で打ってダウンロードできないように記述した .htaccess ファイルを自動的に生成します。

themes

Drupal に標準で含まれているテーマ群が格納されています。

moduels ディレクトリと同様にカスタムテーマをこのディレクトリにインストールすることもできますが、ここにインストールすべきではありません。

いかがでしたでしょうか。

Drupal は特定のディレクトリを再起検索してモジュールやテーマを認識するので、わりと自由にディレクトリ構造を作ることができる反面、乱雑になりがちになってしまいますので、きっちりディレクトリを切り分けメンテナンス性を高めましょう。

余談ですがモジュールやテーマをインストールする際に3階層も下のディレクトリに入れなければいけないことが問題視されていたようで、 Drupal 8 ではディレクトリルートの modules と themes ディレクトリにインストールできるようになりました。Drupal 8 の新しいディレクトリ構造についてはまた今度解説したいと思います。


共に働く新しい仲間を
募集しています

スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。