WP環境をshで簡単デプロイしてみた

WordPress のテーマを更新するたびに、毎回 FTP でファイルをアップしていませんか?
以前の僕もそうでしたが、だんだんと「めんどくさいしミスりやすい…」と感じるようになりました。
一方で、実は Xserver でも GitHub Actions などを使って CI/CD を組むことは可能です。
僕も一度、GitHub Actions + rsync で Xserver に自動デプロイする環境を作ったことがあります。
ただ、それを運用していくうちに「この規模のサイトでそこまでやる必要あるかな?」と思うようになりました。
そんな経緯から、「FTP より楽で、CI/CD ほど重くない」ちょうどいい方法として、シェルスクリプトを使った簡易デプロイに落ち着きました。
結果、とても快適だったのでご紹介します。
目次
なぜ CI/CD じゃないのか?
GitHub Actions などを使った CI/CD は、もちろん便利です。
実際、Xserver でも SSH + rsync で自動化できることは確認済みですし、一度は動かしました。
でも、こんな課題もありました。
- ワークフローのメンテナンスが地味に面倒
- 「XserverのSSH鍵をGitHubに登録しておく」など、権限管理に気を遣う
- 小規模サイトだと「そこまでして自動化する必要ある?」と思う場面が多い
- トラブル時に結局手動介入するので、スクリプトでも十分
要するに、技術的にはできるが、運用コスト・心理的負担・規模感のバランスが悪かった というのが正直な感想です。
目指したのは「手軽で安心」
目標はこれです。
- FTP から卒業したい
- コマンド一発でデプロイできる
- 差分だけ送れるから速い
- Xserver でも動く
- CI/CD ほどの準備・保守はいらない
実際にやったこと
1. Xserver で SSH を有効化
Xserver のサーバーパネルから「SSH設定」を開き、SSH を有効化します。
公開鍵/秘密鍵は自分で生成しても、Xserver が発行したものを使ってもOKです。
秘密鍵はローカルの ~/.ssh
に置き、chmod 600
しておきます。
2. サーバー側の確認
デプロイ先のディレクトリを確認します。
だいたいこんな感じです。
/home/ユーザー名/example.com/public_html/wp-content/themes/my-theme/
3. スクリプトを作成
ローカルのテーマディレクトリを差分アップロードするシェルスクリプト「deploy.sh」を用意します。
Xserver は SSH ポートが 10022 なのでそれも指定します。
#!/bin/bash
LOCAL_DIR="./wp-content/themes/my-theme/"
REMOTE="ユーザー名@サーバーIP:/home/ユーザー名/example.com/public_html/wp-content/themes/my-theme/"
rsync -avz --delete -e "ssh -p 10022" $LOCAL_DIR $REMOTE
bashで実行します。
bash ./deploy.sh
これでサクッと反映されます。
SCPじゃなくてrsyncを実行するので、差分だけを転送するため速くて快適です。
さらに発展させるには
機密情報を.envに記載して読み込ませるなどがあります。
必要ないファイルを除外する
しかしこのままだとthemeファイルの中身を全部転送するので、
いらないファイルは除外します。こんな感じです。
#!/bin/bash
LOCAL_DIR="./wp-content/themes/my-theme/"
REMOTE="ユーザー名@サーバーIP:/home/ユーザー名/example.com/public_html/wp-content/themes/my-theme/"
rsync -avz --delete \
--exclude "node_modules" \
-e "ssh -p 10022" \
"$LOCAL_DIR" "$REMOTE"
–excludeで除外したいディレクトリを指定してあげます。
使ってみて感じたメリット
やってみた結果、これはいいなと率直に思いました。
フローを確立したあとは簡単すぎ、早すぎで超便利ですね。
具体的にはこんな感じ。
- 「やりすぎ感」がなく、自分の手に馴染む
- FTP より圧倒的に速い
- 差分だけアップするので無駄がない
- コード化されていて安心
- ワークフローを管理しなくていい
まとめ
WordPress × Xserver のような小規模サイトの場合、FTP は古くて面倒だし、CI/CD は便利だけどちょっとやりすぎで保守が重い。
そんなとき、シェルスクリプトで簡易デプロイするのは、ちょうどいい選択肢です。
手軽で、安心で、続けやすい。
同じように「もっと楽したいけどやりすぎたくない」人におすすめです!
今回は以上です!