2395


Composerを利用しているPHPプロジェクトがあります。

このプロジェクトではリソースの前処理などいくつかの固有の処理があり、開発環境・CI環境・プロダクション環境を問わず、`composer
install`や`composer update`が実行された時に必ず実行されるようにしたいです。

`composer.json`での設定や何らかのフックポイントでの拡張によって実現する方法があれば教えてください。


CC BY-SA 3.0
2014-12-22T16:22:17.780
2393
2014-12-22T16:39:24.120
2014-12-22T16:36:43.103
728
5444
question
php composer
Composerを利用しているアプリケーションのinstall/update時に自動的に特定の処理を実行したい


install、update前であれば、`pre-install-cmd`, `pre-update-cmd`を  
install、update後であれば、`post-install-cmd`, `post-update-cmd`を  
利用することで可能なようです。

<https://getcomposer.org/doc/articles/scripts.md>

以下ドキュメントからそのまま抜粋しています。

composer.jsonを以下のようにして

[code]

    {
        "scripts": {
            "post-update-cmd": "MyVendor\\MyClass::postUpdate",
            "post-package-install": [
                "MyVendor\\MyClass::postPackageInstall"
            ],
            "post-install-cmd": [
                "MyVendor\\MyClass::warmCache",
                "phpunit -c app/"
            ],
            "post-create-project-cmd" : [
                "php -r \"copy('config/local-example.php', 'config/local.php');\""
            ]
        }
    }
    
[/code]

各コマンドとして指定している名前空間などに併せて各クラスを用意しておけばいいようです。

[code]

    <?php
    
    namespace MyVendor;
    
    use Composer\Script\Event;
    
        class MyClass
        {
            public static function postUpdate(Event $event)
            {
                $composer = $event->getComposer();
                // do stuff
            }
    
            public static function postPackageInstall(Event $event)
            {
                $installedPackage = $event->getOperation()->getPackage();
                // do stuff
            }
    
            public static function warmCache(Event $event)
            {
                // make cache toasty
            }
        }
    
[/code]


CC BY-SA 3.0
2014-12-22T16:39:24.120
2395
2014-12-22T16:39:24.120
728
2393
answer