ターミナルからDrupalを操作する「Drush」コマンドのインストール方法や基本的な使い方
モチヤスタッフDrupalは管理画面から様々な操作を行えますが、開発時はターミナル上からコマンドを打って操作することもできます。
そのときに使用するのが「Drush(ドラッシュ)」です。
今回はDrushのインストール方法や、基本的な操作方法について紹介します。
なお、本記事で使用しているDrushのバージョンは「11.1」になります。
Drushはバージョンによってコマンドが変わったり、過去使えていたコマンドが使えなくなる場合もあるので注意しましょう。
DrushはDrupal + Shell
DrushはDrupalの操作をターミナルからコマンドで行えるツールです。
具体的には下記のようなDrupalの状態を確認したり、環境設定の操作や、設定のエクスポート・インポートができます。
- サイトの状態の確認
- キャッシュのクリア
- 設定の変更
- 設定ファイルのエクスポート・インポート
- モジュールのダウンロード・有効化
- データベースCLIの立ち上げ
- cronの実行
ちなみに、名前の由来は「Drupal Shell」の略からきています。
なぜターミナルから操作する必要があるのか?
Drushを使う理由は人それぞれですが、主に使う理由は下記の通りです。
- 開発効率が上がる
- Drupal自体が動作しなくなったときにも利用できる
- Drushコマンドからしか操作できないことがある
開発効率が上がる
開発を行っているときは、少しコードを変更してキャッシュをクリアしてということを繰り返しながら開発していきます。
このような場合、わざわざDrupalの管理画面を開き、キャッシュをクリアするよりも、Drushコマンド1つでキャッシュをクリアした方が、遥かに早く操作ができます。
また開発をしている時に、CMSに変更を加えた内容を、configファイルに書き出しを行い、そのファイルをgitで管理しますが、このconfigファイルの書き出しも、コマンド1つで操作ができるので便利です。
このようにいちいち管理画面にアクセスせずに、コマンド1つで実行できるので、Drushコマンドを使ったほうが開発効率を上げることができます。
Drupal自体が動作しなくなったときにも利用できる
開発を行っていると、ふとした時にDrupalが動作しなくなるときがあります。このような場合、直前で導入したモジュールのアンインストールや、キャッシュクリアを試して、復旧するか確認する必要があります。
Drupalが動作していないので、当然管理画面にもアクセスすることができませんが、Drushコマンドを使うことで、モジュールのアンインストールや、キャッシュのクリアを行うことができます。
Drushコマンドからしか操作できないことがある
使う理由の最後は、Drushコマンドからのみ実行できることもあります。これはモジュールを設計した方が、管理画面への実装は行っておらず、Drushコマンドからのみ実行できるように実装しているケースがあるためです。また逆にDrushコマンドからは実行できないが、管理画面からのみ実行できるケースもあります。
モチヤでは、管理者のみが実行できれば良い場合など、工数が膨らんでしまう観点からDrushコマンドのみ実行できるように設計することも多々あります。
Drushのインストール
Drushのインストール方法は、2022年8月現在だとComposerを使ったインストール方法が一般的です。
古いバージョンのDrushであればComposer以外にもインストールする方法はありますが、Drush 9以降はComposerを使った方法しかサポートされておらず、Drupal 8や9を使う場合にはComposerを使うしかありません。
ただし、Landoの場合はインストールしたDrushの使用時に注意が必要だったり、逆にLando以外の場合はDrushを初めて使う場合にコマンドをラクに使えるようにする設定が必要です。
Landoの場合
Landoを使って開発環境の構築をしている場合は、Landoの構築時にすでにComposerを使って構築しているはずなので、下記Composerコマンドを実行してDrushをインストールします。
composer require drush/drush
インストールしたらすぐに使えるようになりますが、1点注意が必要です。
Drushをインストールすると、通常drushコマンドが使えますが、Landoの場合はlando drushのように先頭にlandoを付ける必要があります。
lando drush ○○
先頭にlandoが付いていないとコマンドが見つからず、エラーになってしまいます。
drush ○○
最初にlandoをつける必要がある以外は、通常のDrushと同じように使えます。
Landoを使ったローカル開発環境の構築方法は過去に記事にしているので、気になる方はそちらもご覧ください。
関連記事:Landoを利用してDrupalのローカル開発環境を構築!初期設定方法を詳しく解説します(Mac版)
Lando以外の場合
Lando以外の場合も、PHPのライブラリ管理ツールの「Composer」を使ってインストールします。
ちなみに、今回はMAMPを使って構築したDrupal環境にDrushをインストールして使ってみます。
MAMPを使ったローカル開発環境の構築方法も、過去に記事にしているのでそちらもぜひご覧ください。
関連記事:MAMPを使ったDrupalのローカル開発環境の構築方法
事前準備
Composerがインストールされていない場合は、先にインストールする必要があります。
ComposerはPHPの依存関係を管理するためのツールです。
利用するPHPのライブラリやモジュールそれぞれが、どのバージョンが必要かという依存関係を指定して、その指定されたライブラリのダウンロード・インストールを管理します。
下記コマンドを実行してバージョンが返ってくる場合はインストールされています。
その場合はこの項目はスキップしてください。
composer
Composer自体のインストール
Composerのインストールは、公式サイトで各環境に合わせたインストール方法が表示されるので、それに従ってインストールしましょう。
ちなみに、Macの場合はHomebrewをインストールしている人ならbrewコマンドで簡単にインストールできます。
brew install composer
もしHomebrewをインストールしていない場合は、次の項目で紹介する手順でインストールしましょう。
Homebrewのインストール
HomebrewはMacのコマンドラインツールを管理するためのツールです。
開発をする人はComposer以外にも様々なツールが必要になり、Homebrewを使えば簡単にインストールできる場合が多いので、こちらもインストールしておくのをオススメします。
Homebrew公式サイトのトップに表示されているインストールコマンドを実行すればインストールできます。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Drushのインストール
Drupalを管理しているプロジェクトフォルダ内で、下記のコマンドを実行します。
composer require drush/drush
これでDrushがインストールされます。
ただし、Drush の実行ファイルは「vendor/bin/drush」にインストールされるので、drushコマンドを実行するためには「./vendor/bin/drush」のようにコマンドを打つ必要が出てきます。
毎回これを入力して実行するのは正直面倒です。
理想は「drush ○○」のように「drush」と入力すれば、自動で「vendor/bin/drush」内の実行ファイルを実行してくれるようにすることです。
## 現状だと実行時に下記のように入力して実行する必要がある
./vendor/bin/drush ○○
## 理想はdrushと入力するだけでコマンドを実行したい
drush ○○
そこで使えるのが「Drush Launcher」です。
Drush Launcherのインストール
「Drush Launcher」は「drush」コマンドを実行したときに、そのコマンドを実行したパスを確認して、Drushを呼び出してくれるDrushのラッパーコマンドです。
これを設定しておくことで、「composer.json」ファイルがあるディレクトリ配下ならどこでも、「drush」コマンドでプロジェクトにインストールしたDrushを実行してくれます。
インストールは「Drush LauncherのGitHubのページ」にアクセスして、書かれている手順に従います。
2022年現在では、まず下記のコマンドを実行して、Drush Launcherのファイルをダウンロードします。
curl -OL https://github.com/drush-ops/drush-launcher/releases/latest/download/drush.phar
ホームディレクトリに「drush.phar」ファイルがダウンロードされるので、そのファイルに実行権限を付与します。
chmod +x drush.phar
「drush.phar」を「$PATH」の環境変数に書かれたディレクトリへ移動し、名前を「drush」にリネームします。
特になにも設定していない場合は「/usr/local/bin」ディレクトリがデフォルトでパスが通っているので、そこへ移動させればOKです。
mv drush.phar /usr/local/bin/drush
これでDrush Launcherのインストールは完了です。
MySQLの接続エラーが出る場合の対処法
MAMPを使っている場合は、drushコマンドを使おうとすると「In Connection.php line 189: SQLSTATE[HY000] [2002] No such file or directory」エラーが表示される場合があります。
これはMySQLへの接続に失敗してしまっている状態です。
「sites/defaualt/settings.php」にある「$databases['default']['default']」を修正することで解決します。
$databases['default']['default'] = array (
'database' => 'drupal_9',
'username' => 'root',
'password' => 'root',
'prefix' => '',
'host' => 'localhost',
'port' => '3306',
'namespace' => 'Drupal\\mysql\\Driver\\Database\\mysql',
'driver' => 'mysql',
'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/',
);
上記のようになっているコードを、下記のように修正します。
- 「host」の「localhost」を「127.0.0.1」にする
- 最後に「'unix_socket'」を追加する
$databases['default']['default'] = array (
'database' => 'drupal_9',
'username' => 'root',
'password' => 'root',
'prefix' => '',
'host' => '127.0.0.1',
'port' => '3306',
'namespace' => 'Drupal\\mysql\\Driver\\Database\\mysql',
'driver' => 'mysql',
'autoload' => 'core/modules/mysql/src/Driver/Database/mysql/',
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
);
これでMAMPでもdrushコマンドが使えるようになります。
Drushコマンドの確認
Drushをインストールしたら、「drush」コマンドで実行してみます。
無事インストールされていればDrushで使えるコマンド一覧が表示されます。
drush
ちなみに、このコマンドもLandoを使っている場合は先頭にlandoをつける必要があります。
lando drush
以降紹介するコマンドもすべて先頭にlandoが必要です。
landoが抜けている場合は下記のようなエラーが表示されます。
忘れないように注意しましょう。
基本的なコマンド
Drushのコマンドは非常に多いのですが、その中からいくつか便利でよく使いそうなコマンドをピックアップしておきます。
サイトの状態を確認する
サイトの状態を確認したいときには、「status」コマンドを実行すると、Drupalサイトの概要が表示されます。
drush status
下記のような内容が確認できます。
- Drupalバージョン
- URL
- データベースの場所
- ファイルパス
- デフォルトのテーマ
キャッシュのクリア
開発をしていると、確認のためにキャッシュをクリアしたいときがあります。
そんなときは「cc(Cache Clearの略)」コマンドを実行すると、キャッシュのクリアができます。
drush cc
コマンドを実行すると、どのキャッシュをクリアするか聞かれるので、数字を入力してenterで該当のキャッシュをクリアできます。
また、すべてのキャッシュを削除したい場合は「cr(Cache Rebuildの略)」コマンドを実行します。
drush cr
設定ファイルエクスポート・インポート
サイトの設定をエクスポートしたりインポートしたいときは「cex(Config Exportの略)」コマンドでエクスポートします。
drush cex
デフォルトだと「sited/default/files」内にエクスポートされますが、このフォルダは通常は「git ignore」されてファイルの変更を無視する場所です。
「settings.php」の「$settings['config_sync_directory']」で出力する場所を指定できるので、指定して管理するようにしましょう。
指定する場所は、ドキュメントルートの外を指定するのが一般的です。
逆にインポートしたい場合は「cim(Config Importの略)」コマンドでインポートできます。
drush cim
エクスポートしたファイルもGitに上げておけば一緒に管理できますし、他の人と共有してインポートすれば同じ設定が使えるようになります。
モジュールの有効化
モジュールを有効化したい場合は「en(Enableの略)」コマンドを使います。
drush en モジュール名
ちなみに、存在しないモジュールファイルを有効化しようとした場合はエラーになるので、Composerを使うなどしてモジュールをダウンロードする必要があります。
データベースCLIの立ち上げ
データベースを操作したい場合は「sqlc」コマンドを使うと、Drupalで使っているデータベースに接続します。
drush sqlc
本来は「setting.php」を確認してデータベースの接続情報を確認して、それを使ってmysqlコマンドを実行するなど、面倒な作業が発生します。
しかし、このコマンドを使えば接続情報をわざわざ確認する必要がなくなります。
Drushコマンドの一覧
「list」コマンドを実行するとDrushで使えるコマンドが一覧で表示されます。
drush list
「list」コマンドで表示される一覧と、説明文を翻訳して内容を整理した表を下記にまとめておくので、ぜひ全体の把握に活用してください。
Drushで用意されているコマンドの数はかなり多く、一気にすべて把握することはできませんが、なんとなく全体を流し見しておくと「こんなことができるんだな」という参考になります。
そして、実際に使うタイミングになって調べて使って、頻度が高いコマンドは自然と覚えると思います。
ちなみに、「list」で表示された一覧の中で括弧内に表示されているコマンドは、ショートカットのようなコマンドです。
例えば、「drupal:directory」は括弧内で書かれている「dd」でも実行できます。
# drupal:directoryで実行
drush drupal:directory
# 括弧内のddでも同じように実行可能
drush dd
グループ | コマンド | 説明 |
---|---|---|
_global | browse | Drupalへのパスへのリンクを表示するか、ブラウザでリンクを開く |
drupal:directory dd gen |
モジュール・テーマなどの主要フォルダへのファイルシステムパスを表示する | |
generate gen |
モジュール・プラグイン・サービスなどのテンプレートコードを生成する | |
help | コマンドの使用方法の詳細を表示する | |
jn:get | JSONAPIリクエストを実行する | |
list | 利用可能なコマンド一覧を表示する | |
mk:docs | 利用可能なDrushコマンド・ジェネレーターごとにMarkdownドキュメントを生成する | |
runserver rs serve |
開発用にPHPの組み込みのhttpサーバーを起動する | |
version | Drushのバージョンを表示する | |
archive | archive:dump ard |
コード・ファイル・データベースを1つのファイルにしてバックアップする |
archive:restore arr |
コード・ファイル・データベースを、バックアップしたファイルを使って復元(インポート)する | |
cache | cache:clear cc |
Drupalのキャッシュをクリアする |
cache:get cg |
キャッシュされたオブジェクトを表示する | |
cache:rebuild cr rebuild |
Drupalのサイトをリビルド(再構築)する | |
cache:set cs |
JSONか「varexport()」形式のオブジェクトをキャッシュする | |
cache:tags ct |
キャッシュタグの無効化 | |
config | config:delete cdel |
設定の構成キーかオブジェクト全体を削除する |
config:edit cedit |
テキストエディタで設定ファイルを開く エディタを閉じたあとに編集内容はインポートされる |
|
config:export cex |
Drupalの設定をエクスポートする | |
config:get cget |
設定値や設定オブジェクト全体を表示する | |
config:import cim |
Drupalの設定を「config」ディレクトリからインポートする | |
config:pull cpull |
別の環境に設定をエクスポートして転送する | |
config:set cset |
設定を直接保存する(インポートの実行はできないので注意) | |
config:status cst |
設定のステータスを表示する (ファイルシステム構成とデータベースの違い) |
|
core | core:cron cron |
サイト上のすべてのアクティブなモジュールで、cronを実行する |
core:edit conf config |
drush.yml(Drushの設定ファイル)・サイトエイリアス・settings.php(Drupalの設定ファイル)を編集する | |
core:requirements status-report rq |
Drupalのインストールで問題が発生する可能性のある情報を表示する | |
core:route route |
ルートに関する情報を表示する | |
core:rsync rsync |
SSHを使用して、Drupalのコードやファイルを別のサーバーとの間で同期する | |
core:status status st |
DrushとDrupalの環境に関する概要を表示する | |
core:topic topic |
トピックに関する詳細なドキュメントを表示する | |
deploy | deploy | コードのデプロイを実行する |
deploy:hook | 保留中のデプロイ更新フックを実行する | |
deploy:hook-status | 保留中のデプロイ更新フックに関する情報を出力する | |
deploy:mark-complete | すべてのデプロイフックを実行済みとしてマークする | |
entity | entity:delete edel |
コンテンツエンティティを削除する |
entity:save esav |
コンテンツエンティティを読み込んで保存する | |
field | field:base-info fbi |
エンティティタイプのすべての基本フィールドを一覧表示する |
field:base-override-create bfoc |
新しい基本フィールドを作成する | |
field:create fc |
新しいフィールドを作成する | |
field:delete fd |
フィールドを削除する | |
field:info fi |
構成可能なすべてのフィールドを一覧表示する | |
image | image:derive id |
派生画像を生成する |
image:flush if |
特定のスタイルのすべての派生をフラッシュする | |
locale | locale:check | 利用可能な翻訳の更新を確認する |
locale:export | 翻訳ファイルをエクスポートする | |
locale:import | 翻訳ファイルをインポートする | |
locale:update | 利用可能な翻訳の更新をインポートする | |
migrate | migrate:fields-source mfs |
ソースでマッピングに使用できるフィールドを一覧表示する |
migrate:import mim |
マイグレーションプロセスを実行する | |
migrate:messages mmsg |
マイグレーションに関するメッセージを表示する | |
migrate:reset-status mrs |
アクティブなマイグレーションをアイドル状態にして、リセットする | |
migrate:rollback mr |
マイグレーションをロールバックする | |
migrate:status ms |
すべてのマイグレーションを、現在のステータスと一緒に一覧表示する | |
migrate:stop mst |
アクティブなマイグレーションを停止する | |
php | php:cli php core:cli core-cli |
Drupalサイトでインタラクティブシェルを開く |
php:eval eval ev |
Drupalのブートストラップ後に任意のPHPコードを評価する(利用可能な場合のみ) | |
php:script scr |
Drupalのブートストラップ後にPHPスクリプトを実行する | |
pm | pm:install is install en pm-enable pm:enable |
モジュールを有効にする |
pm:list pml |
利用可能なモジュールやテーマの一覧を表示する | |
pm:security sec |
保留中のセキュリティアップデートがないか、Drupal Composerパッケージを確認する | |
pm:security-php sec-php |
Drupal以外のPHPパッケージをチェックして、保留中のセキュリティアップデートを確認する | |
pm:uninstall un pmu |
モジュールと関連する依存モジュールをアンインストールする | |
queue | queue:delete | 特定のキューを削除する |
queue:list | すべてのキューのリストを返す | |
queue:run | 特定のキューを実行する | |
role | role:create rcrt |
新しいロールを作成する |
role:delete rdel |
ロールを削除する | |
role:list rls |
すべてのロールを一覧表示する | |
role:perm:add rap role-add-perm |
指定した権限をロールに付与する | |
role:perm:remove rmp role-remove-perm |
指定した権限をロールから削除する | |
site | site:alias sa |
サイトエイリアスの詳細か一覧を表示する |
site:alias-convert sa-convert sac |
従来のサイトエイリアスを新しいYML形式に変換する | |
site:install si sin |
「modules/themes/configuration/profile」をもとにしてDrupalをインストールする | |
site:set use |
現在のセッションで使用するサイトエイリアスを設定する | |
site:ssh ssh |
SSH経由でDrupalサイトのサーバーに接続して、オプションでシェルコマンドを実行する | |
sql | sql:cli sqlc |
Drupalの情報を使用してSQLコマンドラインインターフェイスを開く |
sql:connect | SQLに接続する | |
sql:create | データベースを作成する | |
sql:drop | 特定のデータベース内のすべてのテーブルを削除する | |
sql:dump | データベースをsqlファイルとしてエクスポートする | |
sql:query sqlq |
データベースに対してクエリを実行する | |
sql:sanitize sqlsan |
ユーザーデータを削除したり難読化して、データベースをサニタイズする | |
sql:sync | 他のサイトにrsync経由でデータを転送してデータベースをコピーする | |
state | state:delete sdel |
ステートエントリーを削除する |
state:get sget |
ステートの値を表示する | |
state:set sset |
ステートの値をセットする | |
theme | theme:enable then |
テーマを有効にする |
theme:uninstall thun |
テーマをアンインストールする | |
twig | twig:compile twigc |
すべてのTwigテンプレートをコンパイルする |
twig:unused | 使用されていない可能性のあるTwigテンプレートを探す | |
updatedb | updatedb updb |
必要なデータベースの更新を適用する(update.phpの実行と同様) |
updatedb:status updbst |
保留中のデータベース更新を一覧に表示する | |
user | user:block ublk |
指定したユーザーをブロックする |
user:cancel ucan |
指定したユーザーをキャンセルする | |
user:create ucrt |
新しいユーザーを作成する | |
user:information uinf |
指定したユーザーに関する情報を出力する | |
user:login uli |
ユーザーのワンタイムログインリンクを表示する | |
user:password upwd |
指定したユーザーのパスワードを設定する | |
user:role:add urol user-add-role |
指定したユーザーにロールを追加する | |
user:role:remove urrol user-remove-role |
指定したユーザーのロールを削除する | |
user:unblock uublk |
指定したユーザーのブロックを解除する | |
views | views:analyze va |
すべてのビューリストを取得して、Warning(エラー警告)がないか分析する |
views:dev vd |
いくつかのビュー設定を、開発者向けの値にする | |
views:disable vdis |
指定したビューを無効にする | |
views:enable ven |
指定したビューを有効にする | |
views:execute vex |
ビューの数や、レンダリングされるHTMLの数を表示する | |
views:list vl |
すべてのビューのリストを取得する | |
watchdog | watchdog:delete wd-del wd-delete wd |
ウォッチドッグ(メッセージ通知機能)のログを削除する |
watchdog:list wd-list |
ウォッチドッグのメッセージ一覧をフィルタリングする | |
watchdog:show wd-show ws |
ウォッチドッグのメッセージを表示する | |
watchdog:show-one wd-one |
IDごとに1つのログを表示する | |
watchdog:tail wd-tail wt |
ウォッチドッグのメッセージを継続的に表示する |
使いたいコマンドはhelpコマンドで確認する
使いたいコマンドや気になるコマンドがあれば、「help」のあとに調べたいコマンド名を入力すると、詳細な情報が表示されます。
drush help browse
実際の使用例や、コマンドに関する引数・オプションに関しての説明が出てくるので、気になるコマンドがあればこの方法で調べましょう。
まとめ
もちろん管理画面から行える設定は、管理画面から行っても問題ありません。
ただ、例えばデータベースのエクスポート・インポートなどは管理画面を使わずに、Drushを使って行うのが開発現場では一般的です。
エクスポートされたデータベースファイルはそのままGit管理下に置いてプッシュすれば、他の人もGitからデータベースファイルを取得し、インポートできます。
できることもかなり多く、Drupalで開発する上では使えるようになっていて損はないので、ぜひ積極的に使っていて慣れていくようにしましょう。
モチヤスタッフ
Drupalなど技術に関する投稿をモチヤのスタッフが行っています。
最新の関連記事
-
Drupal Drupalで本番環境とステージング環境の管理や切り替えが簡単にできる「Workspaces」の使い方
モチヤスタッフ- Drupal11
- 拡張機能
- 新機能
-
Drupal Drupalのレシピ機能(Recipes)でサイトの設定や機能を追加する方法
モチヤスタッフ- Composer
- Drupal11
- ワークフロー
- Lando
-
Drupal Drupal 11で追加された新機能まとめ
モチヤスタッフ- Drupal11
- 拡張機能
- 新機能
- Drupal Tips
-
Drupal Drupalのフォームをリッチに!select2を使ってみた
苅田 ハユセ- CMS
- web制作
- サイトビルディング