1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Laravel] composer installで実行されること

Posted at

ほぼ脳死で実行していたcomposer installにおいて、どのような処理が実行されているかをまとめました。主に備忘用なので、結構雑です。

環境

  • PHP バージョン: 8.2
  • Laravel Framework: 10

composer.json

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The skeleton application for the Laravel framework.",
    "keywords": [
        "laravel",
        "framework"
    ],
    "license": "MIT",
    "require": {
        "php": "^8.1",
        "aws/aws-sdk-php": "^3.280",
        "guzzlehttp/guzzle": "^7.2",
        "laravel/framework": "^10.10",
        "laravel/tinker": "^2.8",
        "onelogin/php-saml": "^4.1",
        "owen-it/laravel-auditing": "^13.5",
        "league/flysystem-aws-s3-v3": "^3.0"
    },
    "require-dev": {
        "barryvdh/laravel-debugbar": "^3.9",
        "fakerphp/faker": "^1.9.1",
        "laravel/pint": "^1.0",
        "laravel/sail": "^1.18",
        "mockery/mockery": "^1.4.4",
        "nunomaduro/collision": "^7.0",
        "nunomaduro/larastan": "^2.6",
        "phpunit/phpunit": "^10.1",
        "spatie/laravel-ignition": "^2.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true,
        "allow-plugins": {
            "pestphp/pest-plugin": true,
            "php-http/discovery": true
        }
    },
    "minimum-stability": "stable",
    "prefer-stable": true
}

実行内容

composer installでは以下が実行される。

1. パッケージのインストール

  • requireセクションに記載されているパッケージのインストールが実行される
  • require-devセクションに記載されているパッケージのインストールが実行される
    • --no-devオプションを付けた場合、このrequire-devセクションのパッケージはインストールされない)

2. オートローダーの生成:

  • autoloadセクションの設定に基づいてオートローダー(PSR-4準拠)が生成されて、名前空間のマッピングが行われる
    • 例: App\名前空間をapp/ディレクトリにマッピング
  • autoload-devセクションの名前空間のマッピングは--no-devオプションをつけた場合は実行されない

オートローダーとは

PHPでクラスやインターフェースを使用する際に、それらのファイルを自動的に読み込む(require/include)仕組み。

参考

3. スクリプトの実行

※ --no-scripts`オプションを付けない場合は実行されない。

scriptsセクションには、composerコマンド実行時に特定のイベントが発生した際に実行されるコマンドを定義する。

composer install時に実行されるのはpost-autoload-dumpのみ。

post-autoload-dump:

composer install または composer update コマンド実行後、オートローダーが生成された後に実行される。

Illuminate\Foundation\ComposerScripts::postAutoloadDump

Illuminate\\Foundation\\ComposerScripts::postAutoloadDump は、Laravel アプリケーションを正しく動作させるために必要な処理を行う重要なスクリプトです。

  • キャッシュのクリア: Laravel アプリケーションの動作を高速化するために、設定、ルート、ビューなどのファイルをキャッシュしている。このスクリプトは、これらのキャッシュをクリアして、最新のコードが反映されるようにする。
  • 最適化ファイルの生成: アプリケーションの起動時間を短縮するために、いくつかのファイルを結合して最適化する。
  • その他の処理: イベントリスナーの登録や、サービスプロバイダの読み込みなど、Laravel アプリケーションの初期化に必要な処理を行う。

@php artisan package:discover --ansi

  • Laravelのパッケージ自動検出システムを実行し、インストールされているパッケージのサービスプロバイダーや他の設定を自動的に見つけて登録する(=インストールされたパッケージを Laravel に認識させる)
  • 具体的に行っていること
    • このサービスプロバイダーを自動的に検出
    • Laravelのサービスコンテナに登録
    • ファサードを利用可能にする

post-update-cmd:

composer update コマンド実行後に実行される。

@php artisan vendor:publish --tag=laravel-assets --ansi --force

laravel-assets タグが付いたパッケージのリソースをパブリッシュする。

post-root-package-install:

ルートパッケージ(ここではlaravel/laravel)がインストールされた後に実行される

@php -r "file_exists('.env') || copy('.env.example', '.env');"

.env ファイルが存在しない場合、.env.example ファイルを .env ファイルとしてコピーする。

post-create-project-cmd:

composer create-project コマンド実行後、新しい Laravel プロジェクトが作成された後に実行される

@php artisan key:generate --ansi

アプリケーションの暗号化キーを生成する。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?