[追記:2023/06] この記事の執筆当時から現在にかけて、ローカル開発環境の構築方法には大きな変化がありました。Drupal 9/10 向け開発環境の構築については次の記事を参照してください:手軽に本格的な Drupal のローカル開発環境を構築してみよう
この記事は 「Drupal Advent Calendar 2016」 の12月18日分の記事です。
(関連記事:「CMS機能比較 DrupalかWordPressか?- 最適なWebプラットフォームを選択する方法」)
ローカルPC上でDrupalを動作させる方法
大きく以下の3種類になります。
- ホストOS上でサービスを起動する
- MAMP (XAMP)
- Drupal Console
- 仮想マシンを使う
- コンテナを使う
ホストOS上でサービスを起動する
MAMP
MAMP はMAC/Windows OS上で直接動作する Apache(nginx)、MySQL、PHPの環境を構築するためのツールです。GUIのランチャーが用意され、PHPのバージョン切り替えや各種設定の変更などの大部分はGUI上から管理することができるので、あまりターミナルを使いなくない人にとっては非常に良いソリューションになっています。
しかしその反面、「HHVMを使いたい」、「Apache Solrが必要」、「DBにはPostgreSQLを使いたい」など、少し特殊な環境が必要になる場合は、MAMPの機能のみでは実現できない場合があります。
MAMPを使ってDrupal環境を構築する方法については、Studio UMIさんのブログ で詳しく紹介されています。
Drupal Console
ippey_s さんが書かれた Drupal Advent Calendar 2016 8日目の記事: Drupal Consoleを使った開発環境構築 に詳しくまとまっています。
デフォルトではPHPのビルドインサーバーとsqliteが使われるので、apacheやmysqlがなくても動作するのが特徴です。
仮想マシンを使う
仮想マシンを構築する代表的なソフトウェアとしては VirtualBox と Vmware があります。
VmwareはMACだと有償版の Vmware Fusion しかなかったり、Windowsで無償で使えるVmware Workstation Playerは商用利用は禁止されていたりしますので、Virtualboxを使っている方が多いのではないでしょうか。
さて、Virtualboxを使うと無料でLinuxの仮想マシンを立ち上げることはできますが、
そこからDrupalのサイトを構築するにはApache,Mysql,PHPなどの各種サービスをインストールして設定する必要があります。Linuxが苦手な方はこのあたりで挫折することが多いようです。
最近は ansibleや chef、puppet などの構成管理ツールを使うことで構築作業を自動化することができます。
DruaplVM
DrupalVM は Vagrantとansibleで実装されたDrupalの仮想マシン環境を構築するためのツールです。
コンフィグを変更することで、Varnish、Apache Solr、Elastic Search、Memcached、Redis などの周辺ツールもインストールすることができます。使い方については Quick Start Guide を参照してください。
DrupalVMは非常に強力なツールであり、私もしばらく使っていました。
しかし、使い込んでいくと
- サポートする機能が多いぶん構築(プロビジョニング)に時間がかかる
- ほとんどのコンポーネントが geerlingguy がgithubの別のレポジトリで公開しているansible roleに依存しているため、バージョンロックが難しい
- OSのベースイメージ自体がUbuntuやCentOSなどのディストリビューションベンダーの公式イメージではない
- パッケージを使わずにソースコードからビルドされる場合が結構ある (xdebugなど)
- 冪等性の考慮があまりされておらず、構築中にエラーが発生すると vagrant provision しても先に進まない場合がある
など色々と気になる点が出てきました。
Yet Another DrupalBox
ということで、自分で使う用に Yet Another DrupalBox を作ってみました。DrupalVMと比べると以下のような特徴があります。
- VarnishなどのDrupalを動かす上で必須ではないコンポーネントは除外してシンプルに
- そのうちオプションとして追加できるようにする予定
- サポートする機能をシンプルにした分、構築時間が短縮され安定してビルドできる
- 今のところ CentOS 7/Amazon Linux限定
- Ubuntu LTSのそのうち対応予定
- Windowsは未サポート
- HTTPサーバーはnginxのみサポート
- Vagrantのプロバイダーとして Virtualbox, DigitalOcean, AWS に対応してるので、ローカルだけでなく、クラウド上にもデプロイ可能
- Azure もそのうち対応予定
- 冪等性を可能な限り考慮
- ソースコードからビルドとかはしません、遅いし
ただし、ドキュメントはまだデフォルトの設定で立ち上げる際のREADMEレベルしかありません。。興味がある方は使ってみてください。
コンテナを使う
Docker for MAC/Windows
2016/7/28 に Docker for MAC/Windows がリリースされ、Docker環境は非常に簡単に構築できるようになっています。
昨年リリースされたDocker Toolboxと違い、Docker Engine用のLinux仮想マシンはHyper-VもしくはHypervisor.Framework上で動作するため、Virtualboxが不要になりました。
ただし、Docker for MACについては2016/12月の時点では複数のパフォーマンスの問題があるため、Docker Sync などと併用することをオススメします。
Docker4Drupal
Docker4Drupal は Wodby が公開しているDrupal用のDocker環境です。
DrupalVMと同様にコンフィグを変更することで、Varnish、Apache Solr、Memcached、Redis などの周辺ツールもインストールすることができます。
PHP、Nginx、Mysqlなどのサービス毎にコンテナが分離されており、非常にメンテナンスや拡張しやすい構成になっています。ドキュメントも充実していますのでぜひ使ってみてください。
Drop Fabrik
Docker4Drupalは非常に便利なのですが、nginxやmariadbがDockerのオフィシャルイメージではなく、wodbyで独自にビルドされたイメージになっています。
また、イメージにタグも打たれていないため、nginxやmariadbのバージョンを簡単に変更することができません(これは、Wodbyのホスティングサービスで使われることを想定しての事だと思います)。
ちなみに、phpのオフィシャルイメージにはDrupalで必要になるgdなどのextensionが含まれていないため、phpのコンテナイメージだけはどうしても独自にビルドが必要になります。
Dockerのオフィシャルイメージは新しいバージョンがほぼリリース当日に公開されますし、バージョンごとにタグも打たれるため非常に便利です。
そのため、phpのコンテナイメージ以外はオフィシャルイメージを使うようにしたDrupal環境を作り、Githubに公開しました。
https://github.com/blauerberg/dropfabrik
以下の様にDrupalのサイトを簡単に立ち上げることができます。こちらは 日本語のドキュメント もありますので、興味がある方は使ってみてください。
$ git clone https://github.com/blauerberg/dropfabrik.git
$ cd dropfabrik/small
$ mkdir -p volumes/drupal
$ curl https://ftp.drupal.org/files/projects/drupal-8.2.4.tar.gz | tar zx --strip=1 -C volumes/drupal
$ docker-compose up -d
$ open http://localhost
まとめ
色々な方法を紹介しましたが、大抵の場合はMAMP Proの有償版を買うのが一番のオススメです。
特殊な環境を作ったり、サーバー周りのチューニングも含めて行う必要がある場合は、仮想マシンかDockerで環境を作るのがいいでしょう。
ただし、VagrantやAnsible、Dockerなどのツールは使う側にもそれなりのリテラシーが要求されますので、
手動でLAMP環境を構築できるレベルのスキルは最低限持っておいた方がいいと思います。
手動でできないことを自動化してもうまくいきませんし、問題が起こっても対応できずに逆に時間を浪費する事にもなりかねません。
ちなみに、私は全ての開発環境をArch Linux + Dockerで構築しています。
MAMPを使う場合のPros and Cons
- Pros
- 導入が簡単
- 有料版だとバーチャルホストが複数使える
- GUIのランチャーがある
- 仮想マシンやコンテナーのオーバーヘッドがない
- Cons
- 特殊な環境を再現するときはMAMPで完結しない場合がある。HHVM使いたいとか、Solrが必要とか
仮想マシンを使う場合のPros and Cons
- Pros
- Virtualboxベースであれば無料で使える
- プロビジョニングのツールが充実している。Chef, Ansible, Puppet, 人力
- Cons
- ゲストOSの起動に時間がかかる
- 仮想マシンのオーバーヘッドが大きい
- プロビジョニングに時間がかかる
- たくさん環境を作ると結構大きなストレージが必要になる
Dockerを使う場合のPros and Cons
- Pros
- 複数のサイトでコンテナーのイメージが共有できるため、構築(プロビジョニング)が非常に早い (10秒程度)
- 起動と終了が非常に早い (5秒程度)
- コンポーネント単位の差し替えが容易 (phpだけバージョンを変える、nginxをapacheに変えるなど)
- 仮想マシンよりディスクスペースがかなり節約できる
- ホストOSがLinuxの場合、オーバーヘッドが非常に少ない
- Cons
- 2016/12月の時点ではDocker for MACにパフォーマンスの問題があり、Docker syncなどのツールを併用しないと速度が出ない
関連コンテンツ
- 第 16 回 Drupal をもっと知りたい方に向けた各種情報
- 第 15 回 Drupal の拡張モジュールの選定と使い方
- 第 14 回 Drupal のテーマシステムについて
- 第 13 回 Drupal の権限設定と WordPress や Movable Type との比較
- 第 11 回 Drupal と他の CMS のクエリビルダー機能を比較
- 第 10 回 Drupal の標準クエリビルダー Views の使い方
- 第 9 回 Drupal のブロックシステム
- 第 8 回 コンテンツ管理における Drupal と他の CMS との比較
- 第 7 回 Drupal のボキャブラリとタクソノミーの使い方
- 第 6 回 Drupal にコンテンツを投稿してみる
Drupal 初心者講座バックナンバー
- Drupal 9/10 初心者講座
- 第 1 回 歴史に見る Drupal の DNA
- 第 2 回 Drupal はフレームワークか?CMS か?他の CMS との比較
- 第 3 回 Drupal の特徴
- 第 4 回 Drupal 9 / 10 のインストール (1)
- 第 5 回 Drupal 9 / 10 のインストール (2)
- 第 6 回 Drupal にコンテンツを投稿してみる
- 第 7 回 Drupal のボキャブラリとタクソノミーの使い方
- 第 8 回 コンテンツ管理における Drupal と他の CMS との比較
- 第 9 回 Drupal のブロックシステム
- 第 10 回 Drupal の標準クエリビルダー Views の使い方
- 第 11 回 Drupal と他の CMS のクエリビルダー機能を比較
- 第 12 回 Drupal の多言語機能と他の CMS やサービスとの比較
- 第 13 回 Drupal の権限設定と WordPress や Movable Type との比較
- 第 14 回 Drupal のテーマシステムについて
- 第 15 回 Drupal の拡張モジュールの選定と使い方
- 第 16 回 Drupal をもっと知りたい方に向けた各種情報