Shifter Github Plugin/Theme Installerを使ってGitHubで管理しているWordPressテーマファイルをインストール＆アップデートしよう

本記事は [Shifter Advent Calendar 2021](https://qiita.com/advent-calendar/2021/getshifter) 12日目の記事です。
今年初めてShifterを使ったときに躓きまして、そのときの内容を書こう！とカレンダーに登録したら周りがShifter関連の方々ばかりで震えています。
皆様に比べると大変初歩的な記事ですが、どうぞお手柔らかにお願いします（？）

## Shifter Github Plugin/Theme Installer とは？
元々はShifterで自作のテーマやプラグインの更新時の煩雑さを解決するために作られたWordPressプラグインです。
これを使うことで、FTPやWordPressのお引越しプラグインを使うことなく自作テーマやプラグインを更新することが可能になります。

基本的な導入方法や使い方は、公式の記事を読めばわかると思います。

https://www.digitalcube.jp/shifter/10479/

あと、こちらの記事も併せて読めばほぼ完ぺきではないでしょうか。

https://gatespace.jp/2019/12/02/shifter-github-plugin-theme-installer-use-sample/


この記事は、上記の記事を読んだものの「記事の通りやったけど、なぜかうまくいかない」「もうちょっと詳しく手順が知りたい」という人（つまり過去の私）向けになります。

## 用意するもの
### Shifter Github Plugin/Theme Installer
Shifterを利用している場合は、デフォルトでインストールされています。
Shifterではない通常のWordPressでも、GitHubから落としてインストール・使用することができます。

https://github.com/getshifter/shifter-github

### GitHub管理下のWordPressテーマファイル
テーマ用にリポジトリを作成して、ファイルを入れておきましょう。
公開・プライベート、および個人・組織は問いませんが、プライベートリポジトリの場合は権限周りをクリアするためにひと手間かかります。

どの階層のファイルから入れればいいのか分からない場合は、Shifter Github Plugin/Theme Installer のサンプルテーマを参考にしましょう。

https://github.com/getshifter/shifter-github-hosting-theme-sample

### パーソナルアクセストークン（プライベートリポジトリの場合）
プライベートリポジトリの場合、そのままだと権限周りの問題でテーマインストールができません。多分。少なくとも、組織かつプライベートリポジトリの場合は上手くいかないと思います。
私はここで躓いて3時間ぐらい溶かしました……
（サポート窓口の方、あのときは色々と相談や確認をしていただいてありがとうございました）

パーソナルアクセストークンは、GitHubで自分のアイコンをクリックし、Settings から Developer settings へ進んで Personal access tokens を選択すれば発行できます。

Generate new token をクリックし、Note を適当に書き、「repo」にのみ☑を入れれば発行完了です。
表示されたトークンは画面を閉じると二度と表示されないので、コピーして大事に取っておきましょう。
仮に忘れてしまっても再発行が可能なので、安心してください。

## 導入手順
### GitHub Actionsの準備をする
リリースパッケージを自動的に生成するための準備をします。
手動でリリースパッケージを用意できるならばこの作業は不要ですが、「リリースパッケージって何？」「修正のたびに毎回パッケージを作るのは面倒だ」という人は大人しく設定しましょう。

サンプルテーマのリポジトリにある .github/workflows/release.yml を、自分のテーマのリポジトリにコピーします。

https://github.com/getshifter/shifter-github-hosting-theme-sample

コピーしたら、release.yml の内容を書き換えます。
変更するべき箇所は、「PACKAGE_NAME」と「FILES_TO_ARCIVE」です。

PACKAGE_NAME は、該当のリポジトリ名に変更します。複数個所に記述があるので、漏れが無いようにしましょう。
FILES_TO_ARCIVE は、リリースパッケージに含めたいファイルやディレクトリを設定します。
ディレクトリは設定すれば配下のファイルが全部対象になりますが、ルートに置いてあるファイル（特にstyle.cssやindex.phpなど）はきちんとファイル拡張子の指定をしなければならないので注意しましょう。

[こちらの記事](https://gatespace.jp/2019/12/02/shifter-github-plugin-theme-installer-use-sample/) には、「リリースパッケージのビルドに composer と npm を使う場合は、コメントアウトを外しましょう」と記載されています。使う人はやっておきましょう。

ちなみに私は誤ってサンプルプラグインのrelease.ymlをコピーして利用したので、使いもしないcomposerの箇所のコメントアウトが外れた状態でアクションを実行するというやらかしをしました。
が、GitHub Actions側で処理が止まり、「composerなんてないやで」的なエラーログが出たので無事修正・事なきを得ました。

また、テーマファイルの style.css（ルートに置いてある、テーマ名などを記載しているやつ）の「Version」欄を以下のように書き換えます。

```css:style.css
Version: {release version}
```

### とりあえずリリースしてみる
release.yml と style.css を編集し終えたら、きちんとリリースパッケージが生成されるか確認しましょう。

`0.0.1` とか、`1.0.0` のような表記でタグを発行して、プッシュします。
タグはそのままテーマのバージョン番号になります。テーマを更新するときは、ちゃんと前回の番号より大きい番号を指定しましょう。私は2度ほどやらかしました。

プッシュすると、GitHub Actionsが動いてくれます。実行状況はリポジトリの「Actions」タブから確認することができます。
緑色のチェックマークが表示されたら、リリースパッケージの生成成功です。
失敗した場合はエラーログが出るので、内容を読んで対処し、めげずに再度タグ発行・プッシュ・GitHub Actions実行を行いましょう。

### リリースファイルを点検する
テーマのリポジトリのトップページから、「Releases」の欄を確認します。
タグで設定したバージョン番号で履歴が載っていると思います。これだけで嬉しくなっちゃいますね。
ですが、はしゃぐのはまだ早いです。「Assets」を開いて、きちんとパッケージが生成されているかを確認しましょう。
正常に動作していれば、以下の3ファイルがAssets欄にあるはずです。

```html:Assets
 リポジトリ名.zip
 Source code (zip)
 Source code (tar.gz)
```

もしリポジトリ名のzipが存在しなければ、release.yml の PACKAGE_NAME 部分を見直してみましょう。

ファイルの存在を確認したら、試しにリポジトリ名.zipをダウンロードして展開します。
必要なファイルが欠けていないかをチェックしてください。特にルートに置いてあるファイル（style.cssやindex.phpなど）が足りているかを見直しましょう。
問題があった場合は、release.yml の FILES_TO_ARCIVE で指定が漏れているので、確認と修正を行います。

修正したら、前回より大きいバージョン番号を指定したタグを発行し、再度プッシュしてリリース・点検作業を行います。

### いざ、テーマインストール
リリースファイルに問題がなくなったら、いよいよ Shifter Github Plugin/Theme Installer を使ってテーマインストールを行います。

WordPress の管理画面から、Shifter Github Plugin/Theme Installerを起動します。
外観 > Add New from GitHub をクリックし、上の入力欄にリポジトリのURLを入力します。
下の入力欄には、パーソナルアクセストークンを入力してください（必要な環境の場合のみ）。

「今すぐインストール」をクリックします。問題なければテーマがインストールされます。やったね！

### テーマを更新するには？
ファイル更新→タグ発行→プッシュを行って、リリースパッケージを生成すれば、プラグインや公式テーマのように「更新」欄に更新通知が来て、そのまま更新できるようになります。
なお、実際にリリースパッケージが上がってから更新通知がくるまで少し時間がかかるので、気長に待ちましょう。

また、どうにも更新通知が来ない場合は、前回よりバージョン番号が小さい状態でタグを発行・リリースしている可能性があります。
一度 Releases 欄を確認してみましょう。

## （初心者向けハマりポイント）まとめ

- リポジトリ周りの権限を確認しよう<br>少なくとも組織のプライベートリポジトリはパーソナルアクセストークンが必要です。
- サンプルファイルは目的に合ったものを使おう<br>プラグイン用とテーマ用では release.yml の内容が異なります。
- タグのバージョン番号は必ず前回より大きいものを指定しよう<br>特に小数点第二位以下には注意しましょう。冷静に考えれば0.1.61は0.1.7より大きいぞ。
- FILES_TO_ARCIVE でのファイルおよびディレクトリの指定漏れに気を付けよう<br>特にルートファイルに置くファイル類の指定には注意しましょう。
- エラーが出たらログを読もう<br>必要なことはだいたいログに書かれています。分からなかったらググりましょう。<br>Shifter を利用している場合は、状況を整理した上でサポート窓口に頼るのも手です。