WordPress の自作テーマを本番環境にアップデートするのに、普通のやり方だと、サイトにログイン -> テーマを一旦別のものに切り替え -> 既存のテーマを削除 -> 新バージョンをアップロード -> 新バージョンのテーマに切り替え、といった流れになるが、面倒この上ない。ということで、さくらレンタルサーバーでは git
コマンドが使えるので、git のリポジトリからコマンド打ってアップデートさせる。
準備
リポジトリ作成
Bitbucket でリポジトリを作成し、そこにテーマファイルを上げておく。Git のリポジトリが使えればいいので、GitHub でも構わない。作成方法はこちらにまとめた。個人的な非公開のプロジェクトをするなら、Bitbucket は無料で使えるのでお勧め。GitHub の場合、プライベートリポジトリは有料になる。(最近、GitHub でもプライベートリポジトリを無料で使えるようになったみたい。)
今回は twenty-seventeen-technotes
というリポジトリを作成している。
SSH 鍵の作成
何も設定していない状態だと、さくらサーバーに Bitbucket のプライベートリポジトリをクローンしようとするとパーミションエラーがでる。
1 2 3 4 |
% git clone git@bitbucket.org:{ユーザー名}/twenty-seventeen-technotes.git Cloning into 'twenty-seventeen-technotes'... Permission denied (publickey). fatal: Could not read from remote repository. |
なので、SSH の鍵が必要になる。
まず、 さくらサーバーに SSH でログイン。 すでに鍵があるかどうか確認しておこう。
1 |
$ ls ~/.ssh |
と打って、id_rsa
、id_rsa.pub
のファイルがないか確認。ある場合、はこのセクションは飛ばして、id_rsa.pub の内容をコピーするところまでスキップ。
ない場合、ssh-keygen
と打って、キーを生成する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
% ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/{さくらサーバーユーザー名}/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/{さくらサーバーユーザー名}/.ssh/id_rsa. Your public key has been saved in /home/{さくらサーバーユーザー名}/.ssh/id_rsa.pub. The key fingerprint is: 11:4e:c3:1d:1a:ff:af:ee:e0:45:60:ff:de:3b:57:94 {さくらサーバーユーザー名}@www****8.sakura.ne.jp The key's randomart image is: +--[ RSA 2048]----+ | .=... | | o.*. | | + + .| | o + E.| | S + . | | . o .| | . . o .| | . o o o.| | .o+ ..=| +-----------------+ |
生成した公開鍵を Bitbucket に登録
次に、 id_rsa.pub
を Bitbucket 側に登録する必要がある。
id_rsa.pub の内容をクリップボードにコピー
id_rsa.pub の内容をクリップボードにコピーするために、cat ~/.ssh/id_rsa.pub
と打つ。
1 2 |
% cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE72XIs5pCjNI/zF4Tc691VOB9fDj+7nOh22KhMrUE2sG5Psn0mscIn6DcLHrHLuoZnzv9QFFq9nyZxqCYAtxHZxswVkxEOYVIci01xHeBhsEqdKUFcGQLGxGCoSKEmqdC09yIA06GhzclYgsl0UxoNHO188nlbTBZKZQfrd5YmyABa+vRszTCsPcXxMV0/nOeY+BsbJcGL+g347aBtu7oBz6Fzquug8+/oNNQfWUkMWltiJ4gPnHGf4OzCEuDv8rHYnRUj5GioYsIjUvdJR1CRQ+JU/QCYvmdQcqrCHlRVMgIFKdHtUOyLDg2TeMcUavzYGwN1MEmJD/kojO0UmjD {ユーザー名}@www****.sakura.ne.jp |
テキストをハイライトし、クリックするとクリップボードにコピーしてくれる。
Bitbucket 側に公開鍵を登録
次に、Bitbucket にログインし、 左下のアカウントアイコン -> View profile -> Settings -> SSH -> Add key へ移動。
そこから出てくる Add SSH key のスクリーンで先程コピーした公開鍵の文字列を追加。Label に入力する名称はわかりやすいものならなんでも良い。
git clone を試す
では git clone
コマンドを試してみよう。テスト用のディレクトリを作りそこへ移動。
1 2 3 4 5 6 7 8 9 10 |
% mkdir test_git_repo % cd test_git_repo % git clone git@bitbucket.org:{bitbucketアカウント名}/twenty-seventeen-technotes.git Cloning into 'twenty-seventeen-technotes'... remote: Counting objects: 98, done. remote: Compressing objects: 100% (90/90), done. remote: Total 98 (delta 26), reused 0 (delta 0) Receiving objects: 100% (98/98), 1.51 MiB | 735.00 KiB/s, done. Resolving deltas: 100% (26/26), done. Checking connectivity... done. |
きちんとファイルが来ているか確認しておこう。
1 2 3 4 5 6 7 |
% ls twenty-seventeen-technotes % ls twenty-seventeen-technotes archive-note.php screenshot.png test comments-note.php single-note.php tool functions.php style.css readme.txt template-parts |
テストが済んだので、このテスト用のディレクトリは消しておく。
1 2 |
% cd .. % rm -Rf test_git_repo |
本番サイトの既存のテーマのディレクトリに適用する
この方法で、目的のテーマのディレクトリ …wp-content/themes/twenty-seventeen-technotes まで降りていき、git pull
と打ってあげれば、随時アップデートがコマンド一つで可能になる。
1 2 3 4 |
% git init % git remote add origin {git レポジトリのアドレス} % git fetch % git checkout origin/master -ft |
実際、コマンドを打つとこんな感じ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
% git init Initialized empty Git repository in /home/{さくらサーバーユーザー名}/www/technotes/wp-content/themes/twenty-seventeen-technotes/.git/ % git remote add origin git@bitbucket.org:{さくらサーバーユーザー名}/twenty-seventeen-technotes.git % git fetch remote: Counting objects: 153, done. remote: Compressing objects: 100% (144/144), done. remote: Total 153 (delta 61), reused 0 (delta 0) Receiving objects: 100% (153/153), 1.52 MiB | 774.00 KiB/s, done. Resolving deltas: 100% (61/61), done. From bitbucket.org:{さくらサーバーユーザー名}/twenty-seventeen-technotes * [new branch] 1.2.1b -> origin/1.2.1b * [new branch] master -> origin/master * [new tag] 1.2.1 -> 1.2.1 * [new tag] 1.1.0 -> 1.1.0 * [new tag] 1.2.0 -> 1.2.0 % git checkout origin/master -ft Branch master set up to track remote branch master from origin. Already on 'master' |
今後、テーマをアップデートする時は、そのテーマのディレクトリまで降りていって git pull
と打てば良い。なんなら、スクリプトを Cron で組んで自動的にアップデートさせるのも良いだろう。
1 2 3 |
% cd twenty-seventeen-technotes % git pull Already up-to-date. |
フォールバック
ちなみに、途中でエラーが出た時は、
1 |
% git reset --hard HEAD |
と打って、直前の操作に戻ればよい。
万一、操作を誤って、ファイルがめちゃくちゃになってどうようもない時は、テーマディレクトリに作成された .git
ディレクトリを削除して、FTP などで、ファイルを手動で戻してあげればよい。.git
を削除した場合は git ini
から始める。
応用
この方法はプラグインでも同様に使える。これを応用すれば、サイト全体を git で管理することも可能。その場合データベースは管轄外になる。プラグインや画像ファイルは git でバックアップというようなことができる。