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 へ。

    Personal Access Tokens

    • Generate new token
    • Select scopes で repo をチェック
    • Generate token
    • 生成されたトークンをコピー

    実装

    上記に沿って以下のコードを追加。

    PHP
    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 フォルダとかが消える
    • 有効化してないとアップデート通知は表示されない
    シェア
    野良人 代表
    新免祥太
    1988年岡山生まれ。外食企業のWEB・EC担当を経験したのち、2013年12月より「野良人(のらんど)」の屋号で独立しWEBデザイン・プログラミングなどWEBサイト制作の工程全般を請け負っています。お気軽にご相談ください。
    広告
    <次の記事(2021/01/19)
    PHPのOpenSSLで暗号化して復号する
    前の記事>(2020/12/31)
    さくらサーバーで「指定されたドメイン名は登録されています」のエラーでドメインが登録できない
    記事一覧