WordPressのプラグイン管理にRenovateを採用した話

ソフトウェアエンジニアの荻島です。

IJでは受託案件としていくつかWordPress(以下WP)で構築されたサイトの保守を行っているのですが、保守をする上でプラグインのバージョンをどうアップデートしていくかというのは割と悩ましい問題の一つです。

戦略はいくつかあると思いますが

  1. アップデートをサボる:まとめてバージョンを上げようとした時に辛いし、脆弱性対応などが後手に回りがち

  2. 自動アップデート:更新通知は事後なので、「気づいたらサイトの機能が壊れていた」ということが起こりうる

  3. 手動アップデート:能動的に調べて更新しなければならず、更新作業が煩雑

と、なかなか痒いところに手が届かず...「何かいい方法ないかなー...」と思っていた時にRenovate*1を使用する方法がこちらの個人ブログで言及されていたのを発見しました。 inokara.hateblo.jp

ちょうど別件でLaravelのプロジェクトにRenovateを入れたことはあったのですが、まさかWordPressも管理できるとは...!

ということで早速composer.jsonを作成し、使用しているプラグインを記載

{
    "name": "sample/test-site",
    "description": "テストサイト",
    "repositories":[
        {
            "type":"composer",
            "url":"https://wpackagist.org",
            "only": [
                "wpackagist-plugin/*",
                "wpackagist-theme/*"
            ]
        }
    ],
    "require": {
        "wpackagist-plugin/amazon-s3-and-cloudfront":"3.2.4",
    },
    "extra": {
        "installer-paths": {
            "wp-content/plugins/{$name}/": ["type:wordpress-plugin"]
        }
    },
    "config": {
        "allow-plugins": {
            "composer/installers": true,
            "wpackagist-plugin/*": true
        }
    }
}

repositoryにGitHub Appsのrenovate botを設定し、下記のような設定ファイルをマージ

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base"
  ],
  "enabledManagers": [
    "composer"
  ]
}

すると...

renovateによるPRが生成された!

というわけで、今まで自動更新をしないようにしていたとあるWPサイトでは

  1. プラグインをGit管理外にしていたのでいつ誰が更新したかわからない

  2. 問題があった時の切り戻しには前のバージョンのプラグインを保持しておく必要がある

  3. 管理画面から定期的にプラグインの更新がないか確認する必要がある

  4. プラグイン更新後、開発環境との差分が出ないようにGitに後から手動で追加する必要がある

等々の問題があったのですが、RenovateとComposerを利用することにより

  1. 更新をレビューできるようになり、いつ、誰が更新したのか分かるようになった

  2. プラグインアップデートで問題が起きた際はGitをrevertして再デプロイすればOKになった(副産物としてComposer管理になったのでバージョンの指定、ダウングレードが容易になった)

  3. プラグインの新しいバージョンが公開されたらRenovateが検知してPRを作成してくれるので、能動的に更新を確認する行く必要がなくなった

  4. プラグイン更新後にGitを更新する手間がなくなり、環境間のプラグインバージョンが揃うようになった

という形になりました。やったね!

まだ運用し始めたばかりなので、PRの作成頻度を調整したりは必要になるかと思いますが一先ず一歩前進です。 知識を公開してくれていた先人に感謝!

今後もユニットテストやE2Eの整備をして信頼性を担保しつつ、運用負荷を減らせるようにしていきたいですね。

おわり