この記事は古くなっています。最新の Drush のインストール方法は 2020年版 Drush と Drush Launcher のインストール方法 をご覧ください。
Drupal の頼れるコマンドラインツールである「 Drush 」のメジャーアップデートバージョン Drush 7 が先日ついにリリースされました。 本記事ではその Drush 7 のインストール方法と新たに統合された Boris という REPL ライブラリについてご説明してみたいと思います。
このページをご覧になっている方の中には「 Drush って何?」という方もいらっしゃるでしょうか。 Drush が何なのか知らないという方のために手短のご説明してみたいと思います。
「 Drush 」とは Drupal の開発用のコマンドラインツールで Drupal の開発/運用周りの各種作業を効率化してくれるツールです。
Drupal + Shell で Drush で、読み方は「ドラッシュ」と読みます。
他の CMS や Web アプリケーションフレームワークでの開発に馴染みのある方であれば「あぁ、ああいうツールのことか」とパッとおわかりいただけるのではないでしょうか。
Ruby on Rails でいう rails
コマンド、 Laravel の laravel
や Symfony の symfony
、 WordPress の wp-cli
の Drupal 版と捉えていただくとよろしいかと思います。
Drupal は CMS と Web アプリケーションフレームワークの両方の性質を持っていることもあり、 Drush は Drupal 開発に必須ではありません。
Drush を使わなくても Drupal 開発は問題なく行えます。
ただ Drush を入れると Drupal の開発効率がぐんと上がってきますので、これから本格的に Drupal 開発をやっていきたいという方はぜひ Drush を早い段階で入れてみることをご検討してみてください。
そんな Drush ですが、別記事でもご紹介していますとおりこれまでは数多くのインストール方法が用意されていました。
これが Drush 7 あたりからは Composer 一本になっていくようです。 Composer に慣れ親しんだ方であればこのあたりはとてもかんたんなのかなと思うのですが、今回は Composer にあまり馴染みのない方も対象にインストール方法をご紹介していきたいと思います。
Drush 7 のインストール方法
Drush 7 を入れるためのステップは以下の 3 ステップです。
- 古い Drush をアンインストール
- Composer をインストール
- Drush 7 をインストール
以下順番に見ていきたいと思います。
1. 古い Drush をアンインストール
バージョン 6.x などの古い Drush がインストールされている場合はまずはそれをアンインストール(無効化だけでも OK )します。 お使いの Drush のバージョンを確認するには次のコマンドを実行しましょう。
$ drush --version
どういう方法で入れた Drush かパッとわかる場合はそのインストール方法に応じたアンインストールを行います。 適切な方法で入れた Drush であればそれなりのアンインストール方法が用意されているはずです。 たとえば Mac の Homebrew で入れた Drush の場合ですと次のワンコマンドで OK です。
drush は残して無効化だけしたい場合:
$ brew unlink drush
drush を完全にアンインストールしたい場合:
$ brew uninstall drush
このとき「 drush 」というファイルだけを削除してしまうようなことは絶対に避けましょう(笑)
どうやって入れた Drush かわからない場合は Drush がファイルシステムのどこにいるのかというのがヒントになるかもしれません。 Drush の居場所を調べるには以下のコマンドのいずれかを実行します。
$ which drush
$ type drush
無事 Drush がアンインストールされたら次のステップに進みます。
2. Composer をインストール
Drush 7 を入れるには Composer が必要です。 Composer というのは近年デファクトスタンダードとなっている PHP のパッケージ管理ツール(依存管理ツール)です。 プロジェクト単位でのライブラリのインストールやオートローダーなどの機能を提供しており、現在主流となっている多くの PHP フレームワークが Composer を利用しています。
このステップについては、別記事の中ですでにご説明しているのでそちらをご参考にしていただければと思います。
Composer が無事インストールできたらいよいよ Drush 7 をインストールします。 Composer がうまく入ったかどうかわからない場合は以下のコマンドなどで確認してみてください。
$ composer --version
3. Drush 7 をインストール
Drush 7 をインストールしましょう。 といっても主要な処理はすべて Composer がやってくれるので、やるべきことはちょろっとコマンドを打つだけです。
Drush はシステムグローバルにインストールしておいた方がよいのでその形でインストールするため以下のコマンドを実行します。
$ composer global require drush/drush:7.x
こうすると Composer が自動でパッケージ管理用のファイルを作成し(既存のものがある場合は編集し)、依存するパッケージも含めて自動でインストールしてきてくれます。 本当にすばらしい時代です。
おそらく次のようなメッセージが流れて処理が進むかと思います。
Changed current directory to /Users/hgoto/.composer
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
...
Writing lock file
Generating autoload files
ちなみに Drush 7 は PHP の 5.3 以上と以下のパッケージ( : 以降はバージョン)に依存しています。
- d11wtq/boris: ~1.0
- symfony/yaml: ~2.2
- symfony/var-dumper: ^2.6.3
- pear/console_table: ~1.2.0
PHP や Composer のバージョンが古かったりするとうまくインストールできないかと思いますのでご注意ください。 Composer を更新するには次のコマンドを実行します。
$ composer self-update
無事 Drush 7 がインストールできたら以下のコマンドで無事インストールされていることを確認しましょう。 7 以降のバージョンが表示されれば OK です。
$ drush --version
REPL ライブラリ Boris
Drush 7 は Drush 6 からいくつかの改善が加えられているようですが、最大の目玉は何といっても Boris ライブラリの統合でしょう。
Boris とは
Boris というのは PHP の REPL ライブラリです。
Ruby でいう pry
、 Python でいうところの ipython
や bpython
に近い機能を PHP で提供してくれます。
基本的な使い方は php -a
コマンドと同じですが、式の結果を自動でシンタックスハイライトして出力してくれるところがポイントです。
Boris を単体で使う
Drush 7 を入れたら Boris も自動的にインストールされているはずです。 コマンド名もそのまま boris なので試してみましょう。
$ boris
適当に PHP の式を書くと、最後の式の値がよきように色付けされて自動で出力されます。
[1] boris> new DateTime();
// object(DateTime)(
// 'date' => '2015-06-11 10:59:59.000000',
// 'timezone_type' => 3,
// 'timezone' => 'Asia/Tokyo'
// )
boris から脱出するには Mac の場合は Ctrl + c を押します。 長いループの途中に Ctrl + c を押すと「 Boris からは脱出せずにループのみ break する」なんてこともできるようになっています。
$ boris
[1] boris> for ($i = 0; $i < 100; $i++) {
[1] *> echo $i . PHP_EOL;
[1] *> sleep($i);
[1] *> }
0
1
2
^CCancelling...
[2] boris>
起動時に読み込むスクリプトやインスペクタを入れ替えたりといったことも可能で、そのあたりは以下の記事にわかりやすく解説されています。 興味のある方は参照してみてください。
Drupal プロジェクトで Boris を使う
Drush 7 には Boris が統合されており、サブコマンド core-cli
で Boris を起動することができます。
$ drush core-cli
[1] self> variable_get('site_name', '');
"(現在の Drupal サイトのサイト名)"
drush eval
などと同じく Drupal のブートストラップ処理が終わった後の状態から始まるので、 Drupal の API を利用して通常ページ内で行う処理を走らせることが可能です。
drush eval "var_dump(...)"
を繰り返す必要がなくなったので API の使い方などをサクサク確認することができますね。
作るものの完成形が固まっている状態ではなく、方法を探りながら探索的に開発するときにはものすごく効果を発揮してくれることと思います。
ちなみに core-cli
にはエイリアスとして php
というものも用意されているため drush php
と打っても drush core-cli
と同じ処理を走らせることが可能です。
PHP/Drupal の開発で個人的にいちばんやりづらいと感じていたところがこの「よい REPL がないこと」(正確には「私がないと思っていた」だけですね)だったので、この Boris 統合は個人的にとても大きな改善ポイントです。 今後使い込んでいってプラスアルファでいいところを見つけたらまたこちらで共有させていただきます。
以上です。
募集しています
スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。