スポンサーサイト

一定期間更新がないため広告を表示しています

composerでPEAR依存の自作パッケージを読み込ませてみた

JUGEMテーマ:PHP
 

composerでPEAR依存の自作パッケージを読み込ませてみた


自分のGitHubに上げた自作パッケージをcomposerで読み込ませるという話。
たぶん世の中にたくさんある内容なんだけど、
今回の場合はPEARに依存した自作パッケージ、
あるいは他のPEARから読み込まれる自作パッケージ(!?)を作るお話。
composerの勉強不足感はある・・・。


何故PEAR依存の自作パッケージなのか?

そもそもcomposerの自作パッケージを作ろうとしたきっかけが、
会社で改造されまくっているPEARパッケージ(本当にひどい話・・・)を
自社パッケージという扱いでcomposer管理へ移動させたいから。

で、そのパッケージは
  1. 他のPEARパッケージに依存(require)していたり、
  2. 逆に他のPEARパッケージに依存されていたり、
しているので相互に参照できるようにしなくてはならない。

1.の問題は自作パッケージ内のcomposer.jsonにて依存先PEARパッケージを読み込ませる。
2.の問題は前回の記事で分かったinclude-pathで読み込ませることによって他のPEARパッケージからもrequireできるようにする。


GitHubのリポジトリに自作パッケージをプッシュする

以下のような形でプッシュする。

my_composer_package
├─src
│  └─my_file.php
└─composer.json

プロジェクトルートはsrcディレクトリとする。
composerパッケージはプロジェクトルートをsrc、テストコードをtestとするのが
慣習?としてあるらしくそれに従う。(勉強不足感)


自作パッケージのcomposer.jsonを記述する

composer上でやりたいのは、
  1. 依存先PEARパッケージを読み込む。
  2. 他PEARパッケージからrequireできるようにinclude-pathに追加する。
{
  "name": "github_account/my_composer_package",
  "repositories": [
    {
      "type": "pear",
      "url": "http://pear.php.net/"
    }
  ],
  "require": {
    "pear-pear.php.net/DB" : "1.7.4"
  },
  "autoload": {
    "classmap": [
      "src/"
    ]
  },
  "include-path": [
    "src/"
  ]
}
1.はrequireにて"pear-pear.php.net/DB"を読み込んでいる部分。
2.はinclude-pathの部分。こっちはinclude_pathに追加したいディレクトリ位置を指定している。(複数指定も出来るらしい)
autoloadにはこのパッケージをどうオートローディングしてもらいたいかを指定する箇所で、
自作パッケージは元々はPEARパッケージだったものなので、
他のPEARパッケージと同様、classmapによってオートローディングさせる。


自作パッケージを使う側のアプリケーションのcomposer.jsonを記述する

読み込ませたい側のcomposer.jsonを記述して、自作パッケージを読み込ませるようにする。
{
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/github_account/my_composer_package"
        }
    ],
    "require": {
        "github_account/my_composer_package": "dev-master"
    }
}
repositoriesに先ほどのGitHubのリポジトリを指定し、
requireで対象パッケージを指定する。
パッケージのバージョン指定はGitHubのタグでバージョン番号をつけていれば、
そのバージョン番号で指定できるようになる。
ブランチ名で指定する場合は"dev-{$branch_name}"で指定できるらしい。(勉強不足感)
 

これで他のPEARパッケージに依存している自作パッケージはちゃんと動く。
また他のPEARパッケージもinclude_pathが通っているので、自作パッケージ内のファイルをrequireすることもできる。

スポンサーサイト

コメント