WordPress自作テーマやプラグインを管理画面から更新できる「plugin-update-checker」でGitHubのprivateリポジトリから配信する
自作のWordPressテーマやプラグインに更新通知機能を追加するライブラリ「plugin-update-checker」を使って、GitHubのprivateリポジトリ経由で配信するやつをやりました。
plugin-update-checker
plugin-update-checker というライブラリを使うと、WordPress の公式ディレクトリに登録していなくても、自作のテーマやプラグインに更新通知を送り、管理画面から更新することができます。
以下のステップで比較的簡単に配信できます。サーバーの代わりに GitHub / BitBucket / GitLab を利用することもできます。
- サーバー上に最新版のzipファイルをアップロード
- 更新情報を記述したJSONファイルを同サーバーにアップロード
- テーマ or プラグインに更新情報取得のためのコードを追加
サーバーに置くとダウンロードURLは公開状態になるのでURLさえ把握すれば誰でもできる状態になります。あんまり自由にダウンロードされたくない場合用にGitHubのプライベートリポジトリを通して配信する方法をやったのでまとめます。
なお、他の方法も検討しましたが、それぞれ以下の理由で却下しました。
- Bitbucket:アクセスコントロールの機能を使うには有料プランが必要
- Github デプロイキー:SSH接続になる
読み取り専用権限のマシンユーザーを組織に追加してトークンを発行
というわけでGitHub上でいろいろ設定してから実装して配信します。手順は以下の通り。
- GitHubにマシンユーザーを作成
- 組織を作成してプライベートリポジトリを作成
- マシンユーザーを読み取り専用権限で組織に追加
- マシンユーザーのアクセストークンを生成
- トークンで認証してテーマ/プラグインから更新通知を取得
マシンユーザーとは
自動化のためのユーザーを作成して、特定のプライベートリポジトリの読み取り権限のみを与える。
「マシンユーザー」という特殊な設定のユーザーロールが存在する訳ではなく、ふつうのgithubアカウントで自動化を目的として利用されたものをそう呼ぶということらしい(最初その点が理解できていなかったので「GitHub マシンユーザー 作り方」とか検索していた…)。
「組織」を作成してマシンユーザーに権限を追加
普通に作ったリポジトリにコラボレーターとして招待すると書き込み権限もついてしまい、読み取り専用に設定することができない。
「組織」の機能を使うと権限を細かく管理できるので、組織アカウントを作成してリポジトリを作り、そこにマシンユーザーを招待。
- +New organization から組織を作成
- 組織にリポジトリを作成
- マシンユーザーをInvite(または後からPeopleタブからinvite)
- 必要に応じてPeopleからアクセス権限を設定
アクセストークンの発行
マシンユーザーでログインして Settings > Developer settings > Personal Access Token へ。
- Generate new token
- Select scopes で repo をチェック
- Generate token
- 生成されたトークンをコピー
実装
上記に沿って以下のコードを追加。
require 'plugin-update-checker/plugin-update-checker.php';
$myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
'https://github.com/user-name/repo-name/',
__FILE__,
'unique-plugin-or-theme-slug'
);
//Optional: If you're using a private repository, specify the access token like this:
$myUpdateChecker->setAuthentication('your-token-here');
//Optional: Set the branch that contains the stable release.
$myUpdateChecker->setBranch('stable-branch-name');
リリース
GitHub のレポジトリのページから Releases よりリリースを作成。バージョン番号のTagを付ける。サイト側のバージョンよりも上であれば、更新通知が出るはず。
確認
通常 wp-cron で12時間おきにチェックされるが、実装時は動作をすぐチェックしたいので、Debug Bar プラグインを使用してアップデートを即時確認する。
有効化したらテーマのページで「デバッグ」 > 「PUC(テーマ名)」 > 「check now」
「An update is available: 」云々と出たらアップデートが取得できている。ページをリロードするとアップデートリンクが表示されるはず。
注意
- 開発環境でアップデートかけると git フォルダとか node_modules フォルダとかが消える
- 有効化してないとアップデート通知は表示されない