ご無沙汰しております。1年ぶりにブログを投稿する大野です。先日、日本語版アクイア認定のデベロッパー試験を受けて一番乗りで合格しました!今なら無料で受験できるキャンペーンをやっているので、Drupal に自信がある方はこの機会に受けてみてはいかがでしょうか。
さて今回は Drupal の開発環境のお話です。Drupal 7 までは開発環境のスピードはあまり気にならなかったのですが、Drupal のメジャーバージョンが8に上がり、使用するライブラリなどが増えた影響か、開発中の画面遷移にとても時間が掛かるようになってしまいました。これが私の場合、待っている時間に他のことを考えてしまって作業に集中ができないのです。
メジャーバージョンが上がってシステムが重くなるのは仕方がないこととは言え、今回はそんな重くなってしまった Drupal 8 の開発環境をいかに早く快適に利用できるようにしたか、その開発環境のスピードを比較できる動画を作ってまとめてみました。Drupal以外のCMSでもほぼ同じ結果になると思いますので、PHP の開発環境のスピードにイライラが募っている方の参考になれば幸いです。
これまでに作ってきた開発環境
2016年頃 Drupal 7 の時代までは Mac 環境に Apache + PHP 5.6 + MySQL などのソフトを直にインストールしていれば、それで万事OKだったのですが、Drupal 8 の登場によりそれは一変しました。Drupal 8 のサポートするPHPのバージョンが 7.x 系に上がったことで、開発環境の PHP のバージョンを切り替える必用が出てきたのです。
当時は既に Docker がかなり流行っていたので Docker で楽しく環境を構築してしばらく使っていたのですが、これがまた遅くて遅くて原因を調べて見るとどうやら Mac 版の Docker はディスクの読み書きが仕組み上どうしても遅くなってしまうそうです。Drupal で取り扱うデータは殆どデータベースから読み込まれるので、それを改善したらかなり早くなるのではと思い、試しにデータベースだけ macOS 上にインストールしたら早くはなりました。ただ、それでも到底許容できるような速さではなかったのですが、当時は PHP のバージョンや複数のサイトを切り替えるのに Docker 以外での開発環境が思いつかなかったので我慢して使い続けることにしました。
今年に入って知り合いのエンジニアの方から Docker 環境よりも Vagrant で作った環境の方が早いと言う情報をいただいたので、早速 Vagrant で環境を構築してみたところ、確かに早くなりました。計測してみたところ以前の環境から2倍程度スピードが向上しました。これはおそらく前述のディスクの読み書きが Docker よりも Vagrant の方が早いからだと推測しています。しかし、これでもまだ VPS サーバー上に構築されたサイトには全く及ばないスピード感です。
これ以上スピードを向上させるには、もう端末を買い換えるなどしてスペックを上げるしかないと思っていたのですが、よくよく考えてみると本番環境などと同様に開発時にも別のLinux端末に処理させればと良い事に気づきました。
しかしリモート上のファイルをリアルタイム・ノーストレスで編集するには、色々なソフトを入れなきゃできないし面倒だなと思っていたのですが、時代の進化はすごいですね。検索してみると2019年6月に私が普段使用している Visual Studio Code に Remote Development と言うリモート開発を行うための拡張がリリースされていて、それを使えばほぼ問題なくリモート上のファイルが管理できることがわかりました。SSH で接続するとほぼローカル環境のような感覚でファイルを編集することができます。しかもこの形態にするとエディタの処理をサーバーサイドで殆ど行うようになるため、ローカルのマシンパワーを殆ど使わなくなるそうです。体感的にも編集時のラグが軽減されたように感じます。常にネットに接続された環境で Visual Studio Code を使っている方なら是非使ってみてほしい機能ですね。リモート開発は SSH でサーバーへ接続できさえすれば完結するので、SSL は不要でウェブサーバーにはSSHのポートフォワーディングを使えば問題なく接続することができます。
これで結論が出たかなと思ったのですが、また一つ課題が発生しました。処理がサーバーへ移行した分、サーバーのメモリをかなり食うようになってしまったのです。具体的に言うと、そこそこの規模の Drupal サイトをVisual Studio Codeで開くとサーバー側のメモリを約2GB弱消費します。これに加えてデータベースとWebサーバーを動かさなきゃいけないので、環境全体で最低でも3GB程度のメモリを確保しないといけない感じです。
さくらインターネットのVPSで考えると、4GBのプランを選択するしかないので月に最低でも3,200円/月程度の費用がかかります。弊社の場合、利用するエンジニアが最大で6人位いますから年間で大体23万円位掛かる計算です。32GBのプランを借りて共有する考えも一瞬よぎりましたが、年間で28万円位掛かるのであまり変わりません。
「こんだけ年間で費用掛ける位だったら、もっと良いスペックのオンプレサーバー作って皆で使ったら良いんじゃね?」と言う思いが湧いてきてしまい、作っちゃいました。Drupal から逸脱してしまうので詳しい内容は省きますが、スペックとしては CPU 12コア 24スレッド、メモリ 64GB、秒間5GByte転送できる SSD のサーバーを組み立てました。通信費や電気代を含めて考えたら2年は使わないと減価償却できませんが、良いんです。だってそこにはロマンがあってメッチャ早いんだもの。失礼しました。時代を逆行してる感は否めないのですが、こうして弊社の一部のメンバーの開発環境はオンプレサーバーになったのです。
各環境の Drupal 8 インストール速度を計測してみた
さて、ここからは実際に私の各環境で Drupal 8 をインストールした時の画面を動画でキャプチャしたものを紹介します。
Docker と Vagrant は次のスクリーンショットのスペックの端末を利用しています。
各環境では私の知見の範囲でデータベースを少々チューニングしており、PHP のバージョンを動的に切り替えられるようにするためリバースプロキシが環境内に入っています。少々複雑な構成ですが動作速度的には素のイメージとほとんど変わらないはずです。また動画をキャプチャしながら仮想マシンを動かしている都合上、いつもの処理速度よりも低下している可能性があることにご留意ください。
Docker
結果: 6分23秒。うーん、遅い。この時間で私はコーヒーを作りに行ってしまい、しばらくは戻って来られないでしょう。
Vagrant
結果: 3分9秒。スピードが倍になりました!しかし3分も時間があるとメールのチェックをしたり、Slackを眺めたりしてしまいますね。
オンプレ リモートサーバー
結果: 24秒。メッチャ早いです。コレです。求めていたのは!これならウィンドウを切り替えて余計なことをする暇がほとんどありません。
まとめ
いかがでしたでしょうか。Docker 環境と比較すると実に約16倍もスピードが向上しました。インストール速度の計測なので、やや誇張したような比較になってしまったかもしれませんが、実際の開発時にもスピードの向上が確実に実感できるほどになりました。Drupal に限らず PHP の開発環境の速度不足でお困りの方は参考にしていただければ幸いです。
この記事は Docker や Vagrant(VirtualBox) の素晴らしい仮想化技術を否定するものではありませんので、悪しからずご了承ください。「いやいやDockerはこんなに遅くない」と言うご意見があれば、ご遠慮なくコメントを頂ければと思います!
募集しています
スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。