Drupal創設者が行う、Drupalデプロイワークフローの紹介
この記事では、私の個人サイトであるdri.esで使用している開発とデプロイのワークフローの概要を説明したいと思います。
このサイトは(当然ですが)Drupalが使用されており、(もちろん)Acquia Cloud Platform上でホスティングされていますが、これはWebアプリケーションのベストプラクティスの多くを取り入れています。
Webサイトのコードベースと設定をGitで管理しています。 Gitリポジトリに変更をコミットする度に、必ず次のステップを踏みます。
- 本番環境にデプロイする前にコードをテストするために、ステージング環境を作成します。 PHP、MySQL、Nginxだけでなく、VarnishやMemcacheなどが入っており本番サイトに限りなく近い構成になっています。
- Gitリポジトリをチェックアウトします。 Gitリポジトリは、カスタムファイルのみを管理します。 DrupalコアやサードパーティのDrupalモジュールは、Gitリポジトリにコミットしないのがベストプラクティスです。
- PHP Code Snifferを実行して、カスタムコードがコーディングルールに準拠していることを確認します。
phpcs.xml
でコーディングスタイルのルールを指定して、phpcs
コマンドを走らせてチェックします。 ルールに準拠していないコードが見つかった場合、phpcbf
コマンドを使用して自動的に整形します。 これで、コーディングルールに準拠したコードが保たれます。 - PHPの静的コード解析ツールであるPHPStanを実行して、コードベースにバグがないか走査します。 デッドコード、型変換の問題、関数の引数の間違い、型ヒントの欠落、不明な関数呼び出しなど、多くの問題を発見することができます。 PHPStanは素晴らしいツールです。
- PHPのテストフレームワークであるPHP Unitを実行して、ユニットテストが合格することを確認します。
- カスタムコードに対して、PHPの静的コード解析ツールであるphpcs-security-auditを実行します。 これはPHPコードにセキュリティ上の脆弱性や弱点がないか走査するものです。
- カスタムコードに対して、JavaScriptの静的コード解析ツールであるESLintを実行します。 これはJavaScriptコードにセキュリティ上の脆弱性や弱点がないか走査するものです。
- nodejs-scanを実行します。これはNode.jsアプリケーションの危険なコードパターンを発見します。 今の所、Node.jsは使っていませんが。
- 様々なプログラミング言語に対応した静的コード解析ツールのSemgrepも実行します。
- Rectorを実行します。これは非推奨のDrupalコードを検知します。 非推奨コードが検出されると、自動修正を試行します。
- 私のGitリポジトリではカスタムコードのみを管理しているので、Composerを使って最新版のDrupalとサードパーティのモジュール、コンポーネントを全てダウンロードしてインストールするようにしています。
drush pm:security
を実行します。DrushはDrupalのコマンドラインツールです。pm:security
コマンドは、危険な依存関係がインストールされていないか検査するものです。
この全てを、コミットのたびに手動で実行するのは非現実的です。CI/CDツールを使えば自動で行われますが、これらのベストプラクティスが盛り込まれた定義ファイルが用意されていると良さそうだと思いませんか? アクイアは、アクイアの全ての顧客/パートナーのためにAcquia Code Studioをリリースしました。これは上記の全てのステップを追加の設定無しで自動化します。 Acquia Code Studioは、GitlabをベースとしたフルマネージドなGitリポジトリです。Drupalに最適化されたCI/CDパイプラインを備えています。 私は20年以上Drupalに取り組んでいますが、これは最高のWebOpsワークフローです。 これ以上ないほど簡単です。
Acquia Code Studio は、依存関係の更新を自動化することもできます。 Code Studioは、Drupalやその依存ファイルが新しいリリースを利用可能かどうかを定期的にチェックします。 新しいリリースがある場合は、上記のすべての手順が実行されます。 上記のステップがすべて合格すると、マージリクエストのボタンを1回クリックするだけで、Acquia Code Studioは新しいコードを本番環境にデプロイすることができます。
最高です!
—
この元記事は My Drupal deployment workflow で掲載されています。 Drupalとアクイアの詳細は、こちらのページをご覧ください。