WordPressオリジナルテーマをGitHub Actionsで自動デプロイする方法

目次
はじめに
WordPressサイトの運用において、テーマファイルの更新を毎回FTPで手動アップロードするのは時間がかかり、ミスも起きやすい作業です。本記事では、GitHubへのプッシュと同時に自動的にレンタルサーバーへデプロイする仕組みの構築方法を、実際の設定例を交えながら詳しく解説します。
想定環境
本記事では以下の環境を想定しています:
- ローカル開発環境: Local (Local by Flywheel)
- OS: Windows + VSCode
- バージョン管理: Git + GitHub
- レンタルサーバー: お名前ドットコム(SSH接続可能プラン)
- デプロイ対象: WordPressオリジナルテーマ
自動デプロイの仕組み
今回構築する自動デプロイは、以下の流れで動作します:
- ローカル環境でテーマを開発
- GitHubにプッシュ
- GitHub Actionsが自動起動
- SSH経由でrsyncを実行し、サーバーにファイルを同期
この仕組みにより、FTPクライアントを起動することなく、Gitプッシュだけでデプロイが完了します。
事前準備
サーバー情報の確認
まず、お名前ドットコムのサーバーにSSH接続して、必要な情報を確認します。
# SSH接続
ssh -i {SSH鍵のパス} -p 8022 username@your-server.onamae.ne.jp
# WordPressのインストールパスを確認
find ~/ -name "wp-config.php" -type f 2>/dev/null
# テーマディレクトリのパスを確認
find ~/ -name "themes" -type d -path "*/wp-content/*" 2>/dev/null
SSHバージョンの確認
ssh -V
# 出力例: OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
SSH鍵の生成と設定
デプロイ用SSH鍵の生成
GitHub Actionsからサーバーに接続するための専用SSH鍵をローカル上で生成します。
# RSA 4096ビットで生成(互換性重視)
ssh-keygen -t rsa -b 4096 -C "github-actions-deploy" -f ~/.ssh/deploy_key -N ""
Note: Ed25519形式の方がセキュアですが、私が契約しているレンタルサーバーでは対応していなかったため、今回はRSA形式で作成します。
公開鍵をサーバーに登録
生成された公開鍵(deploy_key.pub)の内容をサーバーに登録します。
- レンタルサーバーコントロールパネルにログイン
- 左側のメニュー「サーバー」をクリック
- 画面中央上部の「SSH」をクリック
- Key 一覧の「SSH Key を追加」ボタンをクリック
- 「インポート」を選択し、「情報入力する」をクリック
- Key名とパブリックキー情報を入力し、「確認する」をクリック
接続テスト
# ローカルから秘密鍵を使って接続テスト
ssh -i ~/.ssh/deploy_key -p 8022 username@your-server.onamae.ne.jp
Gitリポジトリの設定
ディレクトリ構造
Local環境では、通常app/public
配下がドキュメントルートになります。
your-local-site/
└── app/
└── public/ ← Gitリポジトリのルート
├── .gitignore
├── wp-content/
│ └── themes/
│ └── your-theme/ ← オリジナルテーマ
└── README.md
.gitignoreの設定
効率的なバージョン管理のため、必要なファイルのみを管理対象にします。
# ==================================================
# ルートディレクトリの設定
# ==================================================
/*
!/.gitignore
!README.md
!wp-content/
# ==================================================
# wp-content ディレクトリの設定
# ==================================================
wp-content/*
!wp-content/themes/
!wp-content/plugins/
# ==================================================
# テーマの設定
# ==================================================
# デフォルトテーマを除外
wp-content/themes/twenty*/
# ==================================================
# プラグインの設定
# ==================================================
wp-content/plugins/*
# カスタムプラグインがある場合はコメントアウトを解除
#!wp-content/plugins/your-custom-plugin/
# ==================================================
# 開発環境・エディタ関連
# ==================================================
# VSCode
.vscode/
*.code-workspace
# Windows
Thumbs.db
Desktop.ini
# ==================================================
# その他
# ==================================================
node_modules/
*.log
*.sql
*.sqlite
.env
.DS_Store
GitHubリポジトリとの連携(未連携の場合のみ)
# Localのテーマディレクトリに移動
cd ~/Local\ Sites/your-site/app/public
# Gitリポジトリの初期化
git init
# リモートリポジトリの追加
git remote add origin https://github.com/yourusername/your-repo.git
# 初回コミット
git add .
git commit -m "Initial commit"
# mainブランチにプッシュ
git branch -M main
git push -u origin main
GitHub Secretsの設定
GitHub Actionsから使用する機密情報を安全に管理します。
設定手順
- GitHubリポジトリのSettingsタブを開く
- 左メニューから「Secrets and variables」→「Actions」を選択
- 「Repository secrets」タブで「New repository secret」をクリック
- 以下の情報を一つずつ登録
登録する情報
Name | Secret | 説明 |
---|---|---|
SSH_PRIVATE_KEY | deploy_keyファイルの内容全体 | BEGIN/END行も含めてコピー |
SSH_HOST | your-server.onamae.ne.jp | サーバーのホスト名 |
SSH_USER | r999999など | SSHユーザー名 |
SSH_PORT | 8022 | SSHポート番号 |
DEPLOY_PATH | /home/username/public_html/domain/wp-content/themes | テーマディレクトリのパス |
GitHub Actions ワークフローの作成
ワークフローファイルの配置
.github/workflows/deploy.yml
を作成します。
app/public/
├── .github/
│ └── workflows/
│ └── deploy.yml
├── wp-content/
└── .gitignore
deploy.ymlの内容
name: Deploy Theme to Production
on:
push:
branches:
- main
paths: # テーマファイルが変更された時のみ実行
- 'wp-content/themes/**'
- '.github/workflows/deploy.yml'
workflow_dispatch: # 手動実行も可能
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup SSH
run: |
# SSH設定
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
# known_hostsの設定(初回接続時の確認を回避)
ssh-keyscan -p ${{ secrets.SSH_PORT }} -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
- name: Test SSH connection
run: |
echo "Testing SSH connection..."
ssh -p ${{ secrets.SSH_PORT }} -i ~/.ssh/deploy_key \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} \
"echo 'SSH connection successful'"
- name: Deploy theme files
run: |
echo "Starting deployment to ${{ secrets.DEPLOY_PATH }}..."
# rsyncでテーマファイルを同期
rsync -avz --delete \
--exclude='.git/' \
--exclude='.github/' \
--exclude='.gitignore' \
--exclude='node_modules/' \
--exclude='.DS_Store' \
--exclude='Thumbs.db' \
--exclude='*.log' \
--exclude='*.map' \
--exclude='.sass-cache/' \
--exclude='README.md' \
-e "ssh -p ${{ secrets.SSH_PORT }} -i ~/.ssh/deploy_key" \
./wp-content/themes/ \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.DEPLOY_PATH }}/
echo "Deployment completed"
- name: Set correct permissions
run: |
echo "Setting file permissions..."
ssh -p ${{ secrets.SSH_PORT }} -i ~/.ssh/deploy_key \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} \
"find ${{ secrets.DEPLOY_PATH }} -type f -exec chmod 644 {} \; && \
find ${{ secrets.DEPLOY_PATH }} -type d -exec chmod 755 {} \;"
rsyncオプションの説明
-a
: アーカイブモード(権限やタイムスタンプを保持)-v
: 詳細な出力-z
: 転送時に圧縮--delete
: 送信元にないファイルを削除先から削除
動作確認とトラブルシューティング
手動実行でのテスト
- GitHubリポジトリの「Actions」タブを開く
- 「Deploy Theme to Production」を選択
- 「Run workflow」ボタンをクリック
- 実行ログを確認
よくあるエラーと対処法
Permission denied
# サーバー上で権限を確認
ls -la ~/.ssh/
# drwx------ (700) であることを確認
ls -la ~/.ssh/authorized_keys
# -rw------- (600) であることを確認
No such file or directory
デプロイパスが正しいか確認:
find ~/ -name "themes" -type d -path "*/wp-content/*" 2>/dev/null
Host key verification failed
known_hostsにホストが登録されていない場合に発生。ワークフロー内でssh-keyscan
を実行しているか確認。
運用のベストプラクティス
ブランチ戦略
main
ブランチ: 本番環境へ自動デプロイdevelop
ブランチ: 開発用(将来的にステージング環境へ)
コミットメッセージの規則
明確なコミットメッセージで変更履歴を管理:
git commit -m "feat: カスタム投稿タイプを追加"
git commit -m "fix: モバイル表示の崩れを修正"
git commit -m "style: ヘッダーのデザインを更新"
デプロイ前のバックアップ
初回デプロイ前や大きな変更前には必ずバックアップ:
# サーバー上でバックアップ
tar -czf themes-backup-$(date +%Y%m%d).tar.gz themes/
監視と通知
GitHub Actionsの実行結果を通知する設定を追加することも可能:
- name: Slack Notification
if: always()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
セキュリティの考慮事項
1. SSH鍵の管理
- デプロイ専用の鍵を使用
- 定期的な鍵の更新(3-6ヶ月ごと)
- 秘密鍵は絶対に公開リポジトリにコミットしない
2. 最小権限の原則
可能であれば、デプロイ専用のユーザーアカウントを作成し、テーマディレクトリのみへのアクセス権限に制限。
3. GitHub Secretsの安全性
- Repository secretsは暗号化されて保存
- 一度設定すると値は表示されない
- ログにも出力されない
まとめ
この自動デプロイシステムを導入することで、以下のメリットが得られます:
- 効率化: FTP作業が不要になり、開発に集中できる
- ミスの削減: 手動アップロードのミスがなくなる
- 履歴管理: すべての変更がGitで管理される
- ロールバック: 問題があればGitで簡単に前のバージョンに戻せる
初期設定には少し時間がかかりますが、一度構築すれば開発効率が大幅に向上します。特に頻繁に更新するサイトでは、その効果は絶大です。
継続的インテグレーション/継続的デプロイ(CI/CD)の導入により、より品質の高いWebサイト運用を実現できます。