読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

最近お気に入りのPHPライブラリ開発手法

PHP

PEAR2/Pyrus ってどうなったんだっけ?
という話はとりあえず一旦置いておいて、最近わりかしカジュアルにPHPライブラリを開発して配布する方法がなんとなく自分の中で定着してきたので超ざっくりまとめておく。

ソースコードはGitHub、開発にはgitflow、配布はOpenpear

Openpear で世界征服の話はどうなったんだ、というのは置いておいて、ざっくり、上記の通り、

というのが一番楽だと思っている。

ソースコードはGitHub

Openpear はとっても便利なサービスで、SVNでのホスティングもサポートしているのだけど、今更SVNを使いたくもないし、Openpear で今後Gitをサポートする予定もない。
GitHubではGitによるfork/pull request のエコシステムが出来上がりつつあると思っていて、開発者もそこにいるし、GitHubでなんか作っておけば人にコード見てもらったり修正してもらったり、それを取り込んだりが非常にやりやすい環境が揃っている。

もうGitHubを使わない手はない。

配布はOpenpear

で、GitHubで開発したものを直接PEARパッケージ化して、PEARコマンドでインストールできるようにしたいわけだ。
だけど、GitHub登場以来何度かForumに登場しているPEARの公式サポートの件はまとまらないまま話が立ち消えたりして、なんともなっていない。

と、ここで登場するのがOpenpearだ。

Openpear は、上記の通りSVNリポジトリホスティングはしているが、パッケージの設定で、外部のリポジトリSVN、Git、Mercurialが指定できる。

つまり、ここに、ホスティング先のGitHubのリポジトリを指定すれば、それだけでPEARパッケージ化することができるし、以下のコマンドでインストール可能な形式で配布できる。

$ sudo pear install openpera/Git_Daily


ところで、OpenpaerでGitHubからリリースするにはちょっとした設定のコツ?がいるというか、注意すべき点があるので、一応それはここで説明しておく。


参考画像:


以下参考:

開発ツールとしてgitflow を使う

gitflow は、上記Openpearの制約にぴったりなツールだ。
develop ブランチを開発用ブランチとして普段のやりとりにつかい、releaseブランチを経て、最終的にタグと共に master ブランチに merge される。master ブランチは、常に、安定してきた開発用のブランチからのマージコミットしか存在せず、つまり、master ブランチが、「配布して良いブランチ」となる。

参考:

あ、ちなみに、さっきから例に用いている git-daily というのは、gitflow に似たツールなんだけど、ライブラリ開発用というより、もっと頻繁に修正リリースとかが発生するようなウェブアプリ開発用のgit補助ツールであったりする。最近はいつも自分もコレを使ってウェブアプリの開発をしているわけだけど、これはこれで相当便利なのでまた今度話題にします。

一応参考:

具体的な手順

  1. 手元で、Gitでライブラリ開発を開始する
  2. git flow init して、develop で開発
  3. 適当なタイミングでGitHubにリポジトリを作ってpush
  4. developブランチでなんやかんやしてよしリリースやー、となったら git flow release start, -> … -> git flow release finish
  5. master にマージされるので、これをGitHubにpush
  6. Openpear にそのライブラリ用のパッケージを新規作成
  7. リポジトリ設定で、GitHubのURIを指定する
  8. リリース処理
  9. pear コマンドでインストール可能な形で配布完了

という感じです。あとはGitHubで開発継続、gitflowでmasterへマージ、Openpearで配布(リリース)を繰り返せばなんとなくうまくいく感じがしませんか。

まとめ

で、まぁ現状こんな感じ。
まとめると、繰り返しになるけど、

まぁ、PHPライブラリ開発の話ですが、そして個人的な話ではありますが参考になれば幸いです。


余談:

Openpear もっと海外でも使われれば色々良くなるよね、と思いつつ全然海外で広報活動をしていないんですけど。
あと、PEAR2を全然追ってないし、Openpear でそれをサポートするほど僕らの活力が残っていないので、いやむしろOpenpearってGitHubにあるから誰か(r