ItinerisLtd.trellis_install_wp_cli_via_composer
trellis_install_wp_cli_via_composer
TrellisサーバーにComposerを使ってWP-CLIをインストールします。
目標
問題
[WP-CLI v2.0.0以降、] 依存関係の中で問題があるセットである古いSymfonyのバージョンのハード要件はなくなりました。依然として唯一あるSymfonyコンポーネントは
symfony/finder
で、上限バージョン制限は設定されていません。-- https://make.wordpress.org/cli/2018/08/08/wp-cli-v2-0-0-release-notes/
しかし、WP-CLIの依存関係を含むpharパッケージがあります。これらの依存関係は常にpharからロードされます。その結果、バージョンはロックされています。
たとえば、WP-CLI v2.4.0のpharバンドルには、symfony/process
v2.8.5が含まれています(symfony/finder
の依存関係として)。my-awesome-command
がsymfony/process:5.0.0
を要求するとします。$ wp package install my-awesome-command
を実行すると、期待どおりにsymfony/process
v5.0.0がインストールされます。しかし、常にsymfony/process
v2.8.5(WP-CLIのpharから)が使用され、my-awesome-command
が要求する新しいバージョンは無視されます。したがって、my-awesome-command
はsymfony/process
を使用しようとすると失敗します。
$ wp shell
wp> $reflector = new \ReflectionClass('Symfony\Component\Process\Process');
=> object(ReflectionClass)#2801 (1) {
["name"]=>
string(33) "Symfony\Component\Process\Process"
}
wp> echo $reflector->getFileName(); // WP-CLIのpharから読み込まれたことを確認してください。
phar:///usr/bin/wp/vendor/symfony/process/Process.php
この問題はsymfony/finder
およびその依存関係に影響します。
解決策
Composerを使ってWP-CLIをインストールすることでこの問題が解決されます。
$ wp shell
wp> $reflector = new \ReflectionClass('Symfony\Component\Process\Process');
=> object(ReflectionClass)#2801 (1) {
["name"]=>
string(33) "Symfony\Component\Process\Process"
}
wp> echo $reflector->getFileName(); // Composerのベンダーフォルダから読み込まれたことを確認してください。
/home/web/.composer/vendor/symfony/process/Process.php
ロール変数
# WP-CLIをインストールする前に削除するComposerパッケージ
# デフォルト: []
wp_cli_composer_global_remove_packages:
- wp-cli/wp-cli-bundle
- psy/psysh
# インストールするComposerパッケージ
# デフォルト: "wp-cli/wp-cli-bundle:{{ wp_cli_version }}"
wp_cli_composer_global_require_packages:
- "wp-cli/wp-cli:2.4.0"
- "wp-cli/package-command:^2"
- "psy/psysh:^0.9.12"
- "xxx/yyy:'^1.2.3 || ^2.2.3'"
# インストールするWP-CLIパッケージ
# デフォルト: []
# https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L10から取得
wp_cli_packages:
- "typisttech/image-optimize-command:@stable"
- "[email protected]:Yoast/wp-cli-faker.git"
# WP-CLIのパス
# デフォルト: /usr/bin/wp
# https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L3から取得
wp_cli_bin_path: /usr/bin/wp
# WP-CLIのbash補完パス
# デフォルト: /etc/bash_completion.d/wp-completion.bash
# https://github.com/roots/trellis/blob/4425669bab0665f0c9aed92c80eb9b8c54f63e85/roles/wp-cli/defaults/main.yml#L9から取得
wp_cli_completion_path: /etc/bash_completion.d/wp-completion.bash
要件
- Trellis v1.3.0以降
- Ansible v2.7.0以降
- Python v3.7.6以降
インストール
galaxy.yml
にitinerisltd.trellis_install_wp_cli_via_composer
を追加します。# galaxy.yml + - src: itinerisltd.trellis_install_wp_cli_via_composer + version: XXX.YYY.ZZZ # 最新のバージョンを確認してください!
wp-cli
ロールをitinerisltd.trellis_install_wp_cli_via_composer
に置き換えます。# server.yml - - { role: wp-cli, tags: [wp-cli] } + - { role: itinerisltd.trellis_install_wp_cli_via_composer, tags: [wp-cli] }
galaxyロールをインストールします。
trellis galaxy install # または ansible-galaxy install -r galaxy.yml --force
再プロビジョニングします。
trellis provision production # または ansible-playbook server.yml -e env=production
よくある質問
WP-CLIバンドル全体ではなく、特定のコマンドのみをインストールするには?
デフォルトでは、全体のWP-CLIバンドル(wp-cli/wp-cli-bundle
)がインストールされます。サーバーをスリムに保ちたい場合は、コマンドパッケージを選択的にインストールします。
wp_cli_composer_global_remove_packages:
- wp-cli/wp-cli-bundle
wp_cli_composer_global_require_packages:
# 必要なWP-CLIフレームワーク
- "wp-cli/wp-cli:^2.4"
# 必要なコマンドのみをインストール:
- "wp-cli/core-command:^2"
- "wp-cli/cron-command:^2"
- "wp-cli/db-command:^2"
- "wp-cli/package-command:^2"
Composerがパッケージをインストールできない場合はどうするか?
既存のComposerパッケージを再確認してください。次に、バージョン制約をロール変数を使って変更します。一部のパッケージをアンインストールする必要があるかもしれません。
これらのコマンドが役立ちます:
composer global show
cat $(composer config --global --absolute home)/composer.json
wp package list
cat $(wp package path)/composer.json
WP-CLIがComposer経由でインストールされているか確認するには?
# 悪い: Trellis経由でインストール、つまりphar
$ wp cli info
WP-CLI root dir: phar://wp-cli.phar/vendor/wp-cli/wp-cli
# 良い: このロール経由でインストール、つまりComposer
$ wp cli info
WP-CLI root dir: /home/web/.composer/vendor/wp-cli/wp-cli
冪等性または決定性はありますか?
いいえ。
特定の正確なパッケージバージョンが役立つかもしれませんが、手動で管理する必要があります。
もっと素晴らしいものはどこで見つけられますか?
- Itinerisのブログの記事
- ItinerisのGitHubプロファイルのプロジェクト
- ItinerisとTangRufusのwp.orgプロファイルにあるプラグイン
- Twitterで@itineris_ltdと@TangRufusをフォロー
- Itinerisに依頼して素晴らしいサイトを作成
:star::star::star::star::star:レビューはどこで書けますか?
ありがとうございます!気に入っていただけて嬉しいです。誰かがこのプロジェクトを使っていることを上司に知らせることが大切です。WordPress.orgにはホストされていないので、以下のことを検討してください:
- @itineris_ltdや@TangRufusをメンションして良いことをつぶやく
- このGitHubレポに⭐️をつける
- このGitHubレポを👀 watchする
- ブログ記事を書く
- プルリクエストを送信する
- Itinerisを雇う
テスト
ansible-playbook -i 'localhost,' --syntax-check tests/test.yml
フィードバック
フィードバックをお願いします! このライブラリをできるだけ多くのプロジェクトで有用にしたいと考えています。何が好きか、何が嫌いかを指摘してissueを送信してください。プロジェクトをフォークして提案をすることもできます。小さな問題も大歓迎です。
セキュリティ
セキュリティに関連する問題を発見した場合は、issueトラッカーを使用するのではなく、[email protected]にメールしてください。
クレジット
trellis_install_wp_cli_via_composerは、Itineris Limitedのプロジェクトで、Tang Rufusによって作成されました。
貢献者の完全なリストはこちらで見ることができます。
ライセンス
trellis_install_wp_cli_via_composerはMITライセンスの下でリリースされています。
ansible-galaxy install ItinerisLtd.trellis_install_wp_cli_via_composer