【WordPress】シンプルな.gitignoreでGit管理をはじめよう

Wordpress備忘録

先日「WordPressをDockerで立ち上げて、Gitで管理する」という試みをしましたので、その記録をまとめておきます。

前提:Dockerの構成

今回使ったdocker-compose.ymlはこちら。
WordPress、MySQL、phpMyAdminの3コンテナ構成です。

services:
  db:
    image: mysql:8.0
    container_name: hibitsuiki_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    container_name: hibitsuiki_wp
    restart: always
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
      WORDPRESS_DB_USER: ${MYSQL_USER}
      WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - ./wordpress:/var/www/html
    depends_on:
      - db

  phpmyadmin:
    image: phpmyadmin:latest
    container_name: hibitsuiki_phpmyadmin
    restart: always
    ports:
      - "8081:80"
    environment:
      PMA_HOST: db
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    depends_on:
      - db

volumes:
  db_data:

以前はパスワードなどの機密情報も書いていたのですが、安全性の観点から.envファイルに切り出すことにしました。
場所はdocker-compose.ymlと同じ階層に置いてます。

MYSQL_ROOT_PASSWORD=your_root_password
MYSQL_DATABASE=your_db_name
MYSQL_USER=your_user
MYSQL_PASSWORD=your_password

パスワードに|#などの特殊文字が含まれる場合は、シングルクォートで囲まないと正しく読み込まれない場合もあるらしく注意。

Gitで管理するのはどこまで?

WordPressのファイル構成を見るとわかりますが、Git管理すべきなのは自分で書いたコードだけです。

wp-content/
├── themes/
│   ├── cocoon-master/        ← サードパーティ。Git管理しない
│   ├── cocoon-child-master/  ← 自作カスタム。ここだけGit管理する
│   └── twentytwenty*/        ← デフォルトテーマ。Git管理しない
├── plugins/                  ← Git管理しない(自作プラグインを作ったら追跡すればOK)
└── uploads/                  ← メディアファイル。Git管理しない

というのも、全てのファイルを追跡してしまうとリポジトリが肥大化しますし、テーマのアップデートなんかが入った場合には自分で手を加えた部分が埋もれますよね。
最悪、先祖返りしちゃったり…。

つまりcocoon-child-master/だけを追跡対象にすれば十分です。

Q
WordPressの記事・設定はどこに保存される?
A

記事はデータベース(MySQL)に保存されます。 ファイルシステム上には存在しないので、そもそもGitの対象外です。

Cocoonの設定(カラー・レイアウト等)も同様にDBに保存されます。
ただし、設定から生成されるCSSキャッシュはwp-content/uploads/cocoon-resources/css-cache/に出力されることがあります。
これは自動生成ファイルなのでGit管理には含めません。

.gitignoreの書き方

ここでちょっと手間取りました。

最初はwordpress/で丸ごと除外&子テーマだけ「!」で追跡し~ちゃお、と思っていたのですが…。

親ディレクトリが.gitignoreされていると、子ディレクトリの「!」が効かないらしい。Gitの仕様で。

解決策はwordpress/ではなくwordpress/*と書くことです。
ディレクトリ自体ではなく中身を除外することで、!の否定が正しく効くようになるんだと。なるほど。

# 機密情報
.env

# WordPress(自作テーマ以外)
wordpress/*
!wordpress/wp-content
wordpress/wp-content/*
!wordpress/wp-content/themes
wordpress/wp-content/themes/*
!wordpress/wp-content/themes/cocoon-child-master

Git初期化とコミット

あとは通常のGit操作で初期化しましょう。

$ cd ~/project/hibitsuiki
$ git init
$ git branch -m main
$ git add .
$ git commit -m "initial commit"

git statusでdocker-compose.yml、.gitignoreおよびcocoon-child-master/配下のファイルだけが表示されていれば成功です。

ファイルのパーミッション変更

./wordpress/はDockerコンテナがマウントして使うディレクトリのため、ファイルのオーナーがwww-data(Dockerの実行ユーザー)になっています。
場合によっては、事前にパーミッションを変更しておくとよいかもしれません。

$ ls -la ./wordpress/wp-content/themes/cocoon-child-master/
-rw-r--r-- 1 www-data www-data  845 May 10 11:25 style.css
...

この状態だとホストのuserがGitで読み取れず、git addしても追跡されません。
以下のコマンドでオーナーを変更すれば解決します。

$ sudo chown -R user:user ./wordpress/wp-content/themes/cocoon-child-master/

まとめ

  • 記事・設定はDBに保存される → Gitの対象外
  • Git管理するのはcocoon-child-master/(自作テーマ)だけ
  • .gitignorewordpress/ではなくwordpress/*で書く
  • ファイルオーナーがwww-dataになっている場合はchownで変更する

Gitには慣れたと思っていましたが、初歩的なところでまだまだつまづきますね~…。
今後、テーマのカスタマイズを行う際はdevelopブランチを切って作業しようと思います。

ではまた次回!

追記

WordPress子テーマのGit管理ですが、本番環境へのデプロイで盛大にこけてしまいました…。

この構成だと、VPSの子テーマディレクトリに直接git cloneできなかったんです。
.gitignoreを見れば一目瞭然ですが、余分な空っぽのディレクトリ(上位の階層)が邪魔をするんですね。

現在も正解を模索中ではありますが、下記の記事では暫定的に解決しているのでご覧ください。

ConoHa VPSでWordPress+ツール系アプリを公開するまでの奮闘記6【WordPressセットアップ~GitHubデプロイ編】最終回
ConoHa VPS構築記録最終回。WordPressの初期セットアップ・Cocoonテーマ導入から、子テーマのGit管理構成の見直し、バインドマウント先の権限設定、GitHub PATを使ったデプロイ手順まで、つまずいたポイントを含めて解説します。
タイトルとURLをコピーしました