株式会社HAMWORKS
🤯

【WordPress】WPMLをcomposerで管理する

2024/07/12に公開

案件でWPMLを使う機会があり、ローカル環境での使用を目的にComposerを使って色々と作業しました。その試行錯誤の結果を備忘録として残しておきます。

経緯

いつもローカル環境は以前zennの本にまとめたとおり、@wordpress/envの環境を使っています。

プラグインは.wp-env.json内のpluginsで管理でき、zipファイルの指定も可能ですが、WPMLはURLにuser_idsubscription_keyがあるので、安易にGitHubに置いておくのははばかられます。

https://ja.wordpress.org/team/handbook/block-editor/reference-guides/packages/packages-env/#wp-env-json

かと言って、ローカルにzipファイルを配置して各々ダウンロードしてね、も共同開発の面で好ましくありません。(ダウンロードしてくるのも面倒ですし)

そこで、Composerでプラグインを管理することにしました。

元々.wp-env.jsonで管理していたプラグインは?

こちらもComposerに移動します。
あっちこっちのファイルで管理するよりも、一元管理したほうがわかりやすいですしね。

ComposerでWordPressのプラグインを管理するには、WordPress Packagistを使います。

該当の箇所だけ挙げてみるなら、このように書きます。

composer.json
{
	"name": "hamworks/hamworks",
	"description": "",
	"license": "GPL-2.0-or-later",
	"repositories": [
		{
			"type": "composer",
			"url": "https://wpackagist.org"
		}
	],
	"require-dev": {
		"wpackagist-plugin/wordpress-importer": "dev-trunk",
		"wpackagist-plugin/safe-svg": "dev-trunk",
		"wpackagist-plugin/wordpress-seo": "dev-trunk"
	},
	"extra": {
		"installer-paths": {
			"./wp-content/mu-plugins/{$name}": [
				"type:wordpress-muplugin"
			],
			"./wp-content/plugins/{$name}": [
				"type:wordpress-plugin"
			],
			"./wp-content/themes/{$name}": [
				"type:wordpress-theme"
			]
		}
	},
	...
}

肝心のWPMLの管理

private-composer-installerを使う(採用した方法)

https://github.com/ffraenz/private-composer-installer

WPMLのようなプライベートパッケージのURLを参照できるライブラリです。
このライブラリは .envを他のライブラリを追加せずに使えるのが大きな利点です。(後述のダメだった方法でめちゃくちゃキレながらやってたので、特別なにかしなくても.envが使えるのは素晴らしい👏)
READMEでサンプルがあげられているように、WPMLだけではなくACF Proなどの有償プラグインもこれを使えばプラグイン管理できます。

まずはライブラリを追加します。

composer require composer/installers
composer require ffraenz/private-composer-installer

composer.jsonのrepositoriesに、WPMLのパッケージの情報を記述します。

composer.json
{
	"name": "hamworks/hamworks",
	"description": "",
	"license": "GPL-2.0-or-later",
	"repositories": [
		{
			"type": "package",
			"package": {
				"name": "wpml/wpml-multilingual-cms",
				"version": "3.1.3",
				"type": "wordpress-plugin",
				"dist": {
					"type": "zip",
					"url": "https://wpml.org/?download=10420399&user_id={%WPML_USER_ID}&subscription_key={%WPML_SUBSCRIPTION_KEY}&t=1720742383&version=3.1.3"
				},
				"require": {
					"ffraenz/private-composer-installer": "^5.0"
				}
			}
		}
	],
    ...
}

WPML_USER_IDWPML_SUBSCRIPTION_KEYを環境変数にしているので、.envファイルを用意して、環境変数をおきます。なお、このファイルはGit管理しないので、.gitignoreに追加しておきましょう。

代わりに、.env.sampleをGit管理して、このファイルから.envを作れるようにしておきます。

WPML_USER_ID=user_id
WPML_SUBSCRIPTION_KEY=subscription_key

ちなみに、distに書いているURLは以下のページのOTGS Installerのダウンロードマークのリンクが該当します。ログインしてダウンロードページから取得しましょう。

https://wpml.org/account/downloads/

これで秒でWPMLがインストールできました。

参考にしたURL

https://discourse.roots.io/t/wpml-composer/19177

ダメだった方法

半日かけてダメだった方法も残しておきます。書き方が悪かったとかそういうことではなく、単にライブラリが現行のWPMLのダウンロードリンクに合わないというオチでした。

https://github.com/lucguerraz/wpml-installer

また、こちらは環境変数を使うために、別途vlucas/phpdotenvなどの追加が必要です。(が、入れても.envが認識されないからバチ切れしながらやってた)

https://github.com/lucguerraz/wpml-installer/blob/main/src/wpmlinstaller.php#L114-L117

ここでsubscription_keyが32文字であると固定されていて、現行のダウンロードリンクの文字数と合いません。最初にここを見ればよかったんですが、ずーっと.envなり.zshrcなりと格闘してました。
なんかうまくいかないなと思ったら(読めるか自信なくても)ちゃんとコード読むのが大事だなと思いました…😭

株式会社HAMWORKS
株式会社HAMWORKS

Discussion