LoginSignup
1
1

More than 1 year has passed since last update.

Laravelパッケージを作ろう!その壱

Posted at

複数プロジェクトに跨る様な、コアライブラリを作りたくなりました。
パッケージ化すれば良いらしいので、備忘録として纏めて行こうと思います。

マシンスペック

  • 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リポジトリにプッシュする

  1. 空のリポジトリを用意します。

  2. 作成したリポジトリに紐付けます。

$ 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に追加されてる!!
スクリーンショット 2021-11-05 2.24.38.png

※参考
composerでGitHubのリポジトリからパッケージ追加する方法

1
1
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
1