複数プロジェクトに跨る様な、コアライブラリを作りたくなりました。
パッケージ化すれば良いらしいので、備忘録として纏めて行こうと思います。
マシンスペック
Mac mini 2018
macOS Catalina(10.15.x)
Intel Core-i7 3.2GHz 6コア
メモリ 32GB
SSD 512GB
開発環境
PHP(PHP-FPM) 8.x
Composer 2.x
Laravel 8.x
やりたい事
複数プロジェクトで共通のコアライブラリを作りたい
composer require 〜で導入可能にしたい
社内で使うので外部公開しない
環境構築
まずはLaravel環境を構築する。
Docker ComposeでLaravel開発環境を構築その陸#使い方
パッケージ作成
パッケージ構成は、こんな感じ。
[laravel] ← Laravelプロジェクト
|-app
|-packages ← 作成
|-bobtabo ← パッケージルート
|-library ← ここで composer init する
|-src
|-...
まずは、Laravelプロジェクト内にpackagesディレクトリを作成し、必要なものは配下に作成する
packages/bobtabo/libraryで、composer init を実行して、質問に回答して行く。
Package name (<vendor>/<name>) [root/core]: bobtabo/library
Description []: Bobtabo Core Library
Author [, n to skip]: n
Minimum Stability []:
Package Type (e.g. library, project, metapackage, composer-plugin) []: library
License []: MIT
Define your dependencies.
Would you like to define your dependencies (require) interactively [yes]?
Search for a package: php
Enter the version constraint to require (or leave blank to use the latest version): ^8.0
Search for a package: laravel/framework
Enter the version constraint to require (or leave blank to use the latest version): ^8.12
Search for a package:
Would you like to define your dev dependencies (require-dev) interactively [yes]?
Search for a package: barryvdh/laravel-ide-helper
Enter the version constraint to require (or leave blank to use the latest version): ^2.9
Search for a package: squizlabs/php_codesniffer
Enter the version constraint to require (or leave blank to use the latest version): ^3.5
Search for a package:
〜 中略 〜
Do you confirm generation [yes]?
Would you like to install dependencies now [yes]?
packages/bobtabo/library に、composer.json が作成されます。
composer.json
{
"name": "bobtabo/library",
"description": "Bobtabo Core Library",
"type": "library",
"require": {
"php": "^8.0",
"laravel/framework": "^8.12"
},
"require-dev": {
"barryvdh/laravel-ide-helper": "^2.9",
"squizlabs/php_codesniffer": "^3.5"
},
"license": "MIT"
}
他、必要なのあれば、編集します。
※参考
Laravel でいつも最初から仕込むようなファイルたちはパッケージにしてしまおう
【Laravel】パッケージ開発の第一歩 〜helloページを出力する〜
Laravel Package Development#Package Skeleton
社内で横断的に使えるPHPライブラリを書こう!
自作Composerのパッケージの基本的な構成
Gitリポジトリにプッシュする
空のリポジトリを用意します。
作成したリポジトリに紐付けます。
$ cd ~/laravel/packages/bobtabo/library
$ git init
$ git remote add origin https://github.com/bobtabo/laravel-package.git
あとは、コマンドまたはIDEでプッシュすれば良いです。
※参考
【git】既存のフォルダをgit管理にしてリモートリポジトリと紐づける
パッケージを導入する
リポジトリを追加します。
$ cd ~/laravel
$ composer config repositories.bobtabo/library vcs https://github.com/bobtabo/laravel-package
composer.json に追加されます。
~/laravel/composer.json
{
"name": "laravel/laravel",
"type": "project",
"description": "The Laravel Framework.",
・・・
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
・・・
},
"repositories": {
"bobtabo/library": {
"type": "vcs",
"url": "https://github.com/bobtabo/laravel-package"
}
}
}
パッケージをインストールします。
$ composer require bobtabo/library
Using version dev-master for bobtabo/library
./composer.json has been updated
Running composer update bobtabo/library
・・・
Package manifest generated successfully.
vendorに追加されてる!!
※参考
composerでGitHubのリポジトリからパッケージ追加する方法
↧