August 6, 2006
  • Posted by shin in PHP

いまいちPackageFileManager2が使いこなせない件について(修正:ちょっとわかってきた)

非常に初歩的なことであれば、確かにPackageFileManager2を使えたのだけども、ちょいと複雑なことをしようとすると、まだまだよくわからない。

まず、依存関係について。なんとなくできたような気もするが、本当にこれでいいかはよくわからない。PackageFileManagerでは、addDependencyというメソッドがあって、それによろしくパラメータを渡すと依存の情報を含むpackage.xmlを作ってくれるらしい(試してないが)。
しかし、PackageFileManager2には、addDependencyというメソッドはない。で、いろいろソースを追いかけていたら、addPackageDepWithChannelってのが、親クラスのPEAR_PackageFile_v2_rwにあったので、それを使ってみた。ちゃんとpackage.xmlやpackage2.xmlに書かれたっぽいのだが、これでいいのかな。
で、エクステンションの依存では、addExtentionDepってのが名前的に怪しいのでそれを使ってみることにする。引数の指定はソースを読んで適当に当てはめてみた。

snip...
$packagexml->addExtensionDep('required', 'simplexml');
$packagexml->addExtensionDep('required', 'curl');
$packagexml->addPackageDepWithChannel('optional', 'Cache_Lite', 'pear.php.net');
$packagexml->addPackageDepWithChannel('optional', 'XML_RPC2', 'pear.php.net');
snip...


こんな感じか。しかし、ググっても大して情報がなかったので、間違っていたらスマン。

で、次。changelogを追記していく方法がよくわからない。(2006-08-07解決。追記参照のこと)なんとなく、すでにあるpackage.xmlを上書きしていくのかなー、なんて想像してみたりするわけだが、一度、作ったpackage.xmlがあるときにさらに作ろうとすると怒られちゃうの。こんな感じで。

PEAR_PackageFileManager2 Error: Package validation failed:
Error: Invalid tag order in <package>, found <summary> expected one of "channel, uri"
Error: package.xml <package> tag has no version attribute, or version is not 2.0

「packageタグの中の順序がおかしくて、summaryがなんちゃらで、channelもしくはuriが来るはずなんだけど。んで、packageタグにversionの属性がないよ」って読めるのだが、package.xmlを一度消したら、そんなエラーはでなくなった。そして、package2.xmlには上書きされるみたい。でも、changelogにreleaseが上書きされるので、本来そうなってほしいと思うreleaseが順々に追記されていくなんてことはないのだ。やっぱり、書き方おかしいのかなー。しかし、ソースを読んでがんばっていかなければいけないことは不毛だ。

というわけで、Services_YouTubeにCache_Liteを付けてみた。Cache_Liteは使ったことがなかったけど、思ったより簡単に使えたっぽい。。。たぶん。そして、オプションの指定でキャッシュ使用とレスポンスがSimpleXMLElementかArrayで選べるようにした。

Services_YouTube-0.1.0.tgz

– 2006-08-08訂正(さっき、E_STRICTで引っかかった。なので、よくわからん。)
つか、知らなかったんだけど、Cache_Liteを使ったらE_STRICTで怒られるかなーなんて思っていたけど、example.phpの中でE_STRICTを指定していても怒られなかった。たぶん、example.phpでCache_Liteをrequireしたら怒られるのかな。Cache_Liteを呼び出しているのは、Services_YouTubeの中で、そこでは、E_STRICT指定していないし。でも、将来的にはライブラリの中でもE_STRICTしたいなー。

むー。更新作業めんどくさ。早いことPEARに聞こうかなー。と言いつつ、pear-devに登録されていないのだった。で、何度やってもpear-dev-helpやsystemにメールを投げても放置なわけなので、Pierreに直接聞いてみた。なんでだろ。返事待ちか。

*もうすぐ現在のサーバが落ちます。レンタルサーバの移行をしようとしているんだけど、レジストラから今のレンタルサーバにDNSの移動に関してのメールを投げても反応がなかったって言われてるんだけど、なんなん?移行するって前もって連絡しておいて、返信までもらったのに。


2006-08-07
ちゅーか、リンク切れだった。

バージョンを0.1.1にしようか、0.2.0にしようか迷っていたのだ。機能追加だから0.2.0だよなーなんて思ってリンクを貼りかえて見る。

PEAR CommunityのPierreにPEARで始めるなら、0.1.0がinitial releaseだと指摘を受けましたので、バージョンを戻しておきます。

changelogのreleaseを加えていく方法がわかったよー!

PEAR_PackageFileManager2 Error: Package validation failed:
Error: Invalid tag order in <package>, found <summary> expected one of "channel, uri"
Error: package.xml <package> tag has no version attribute, or version is not 2.0


のエラーととても関係のあることだった。

エラーを読めばわかるけおd,versionが2.0じゃないんじゃない?って言われているわけだが、これを、2.0にすればよかったのだ。つまり、


$packagexml->setOptions(array('packagefile' => 'pacakge2.xml',
snip
));

なんてしてあげれば、現在のpackage2.xmlを読み込んで、そのchangelogのreleaseの中身を使用し、どんどん書き足していってくれるのだ。
なので、今回のServices_YouTubeのmakepackage.phpはこうなる。


<?php
require_once 'PEAR/PackageFileManager2.php';
PEAR::setErrorHandling(PEAR_ERROR_DIE);
$releaseVersion = '0.2.0';
$apiVersion = '0.2.0';
$changelog = '
  - Add ChangeLog
  - Add Tutorial
  - Set Option for Cache_Lite
  - Set Option for Response to be SimpleXMLElement or Array
  ';
$notes = 'Add Changelog, Tutorial, Option for Cache_Lite';
$packagexml = new PEAR_PackageFileManager2();
$packagexml->setOptions(array('filelistgenerator' => 'file',
      'packagefile' => 'package2.xml',
      'packagedirectory' => dirname(__FILE__),
      'baseinstalldir' => 'Services',
      'ignore' => array('makepackage.php', 'Documentation/'),
      'simpleoutput' => true,
      'changelogoldtonew' => true,
      'changelognotes' => $changelog,
      'exceptions' => array('ChangeLog' => 'doc'),
      'dir_roles' => array('examples' => 'doc', 'docs' => 'doc')));
$packagexml->setPackageType('php');
$packagexml->addRelease();
$packagexml->setChannel('pear.php.net');
$packagexml->setPackage('Services_YouTube');
$packagexml->setReleaseVersion($releaseVersion);
$packagexml->setAPIVersion($apiVersion);
$packagexml->setReleaseStability('alpha');
$packagexml->setAPIStability('alpha');
$packagexml->setSummary('PHP Client for YouTube API');
$packagexml->setDescription('PHP Client for YouTube API');
$packagexml->setNotes($notes);
$packagexml->setPhpDep('5.1.0');
$packagexml->setPearinstallerDep('1.4.0a12');
$packagexml->addExtensionDep('required', 'simplexml');
$packagexml->addExtensionDep('required', 'curl');
$packagexml->addPackageDepWithChannel('optional', 'Cache_Lite', 'pear.php.net');
$packagexml->addPackageDepWithChannel('optional', 'XML_RPC2', 'pear.php.net');
$packagexml->addMaintainer('lead', 'shin', 'Shin Ohno', 'ganchiku at gmail.com');
$packagexml->setLicense('PHP License', 'http://www.php.net/license');
$packagexml->addGlobalReplacement('package-info', '@PEAR-VER@', 'version');
$packagexml->generateContents();
$pkg = &$packagexml->exportCompatiblePackageFile1();
if (isset($_GET['make']) || (isset($_SERVER['argv']) && @$_SERVER['argv'][1] == 'make')) {
    $pkg->writePackageFile();
    $packagexml->writePackageFile();
} else {
    $pkg->debugPackageFile();
    $packagexml->debugPackageFile();
}
?>

2006-08-08:
さきほども書きましたが、Pierreに0.1.0から始めるように指摘を受けましたので、ここでは、0.2.0って書いてありますが、本番用は、0.1.0に戻してあります。

すでに、package2.xmlには、0.1.0でInitial releaseってchagelogに書かれている(正確には、notesに書いてあるので、特に指定が無ければそれを使っている)ので、それを読み込んだ後、今回のmakepackage.phpに書いてあるchangelogを追記してくれるのだ!

ヤター。つーか、はまったなー。optionのpackagefileの項目にpackage2.xmlって書かないといけないなんて簡単なようで、わからんかった。しかし、やっぱりあきらめんこったな。

> 何度やってもpear-dev-helpやsystemにメールを投げても放置なわけ
そう、なんかGMailから送ったメールが届いていないような気がする。うーん。

Comment by shoma — August 18, 2006

shomaさんもそうですか。うーん。Pierreに聞いたのですが、その際は、確認するからもう少し待ってくれと言われてその後どうなったかわかりません。なんか忙しそうなので、せかすのも気が退けるのですが、今日もう一度聞いてみます。

つか、WPのコメント書くのに、Mailが必須ってなんか嫌だな−。

Comment by shin — August 18, 2006

Pierre曰く

> Try again to subscribe, be sure to use gmail to send your mail(s). It
> should work now.

なんて言っているわけだが、もう一度試したところ、相変わらず登録されなかった。また、Pierreに連絡したけども、返事待ち。

Comment by shin — August 24, 2006

PEAR_PackageFileManager_Frontend_Web使えば、設定楽になりますよ
PEAR_PackageFileManager_Frontend_Webを使ったツール作りました。
感想聞けると幸いです |・_)

>なんて言っているわけだが、もう一度試したところ、相変わらず登録されなかった。また、Pierreに連絡したけども、返事待ち。

はやく登録できるようになりたいものですね。

Comment by sakamoto — August 28, 2006

> sakamoto さん
PEARのアカウントもらったのですね。ということは何かを出すと言う感じですね。ちょいと楽しみですー。
もしかして、このPEARPackかな。
ところで、PEARのコード基準に関してもセキュリティ的な面からしても、ショートタグは激しくお薦めでないです。
理由はこの辺とか。http://itpro.nikkeibp.co.jp/article/NEWS/20060821/245977/

まぁ、ローカルでしか動かさないアプリであればいいかな、とも思うのですが、例えば私の環境ではショートタグは使えないような設定になっていますので、その辺、依存しないような書き方をした方がいいと思います。というか、PEARだったら絶対に直せ!と言われること請け合いです。

普段からLinuxデスクトップですので、Winな環境がないのですが、後ほどLinuxで試してみます。できれば、今日中に。

Comment by shin — August 28, 2006

と思ったら、今日出てたね。PHP_Annotation。まだ動かしてないけど、確かに一からこれを作るのは大変そうだ。
というか、PEARPackと書き方がだいぶ違うと思ったのは私の気のせいかな。。

ところで、Pearpackでは、directoryを掘ってpackage2.xmlのテンプレート?を作ることはできました。しかし、_common.phpの89行目当たりでエラーが出ていました。なんかsingletonの返り値が配列っぽいのが原因かな。ええと、使いかたがまだよくわからいのだけども、これって、生成されたpackage2.xmlを修正していったらいいの?

ちなみに環境は、phpのバージョンは、5.1.4で、OSは、Linuxね。

Comment by shin — August 29, 2006

>というか、PEARPackと書き方がだいぶ違うと思ったのは私の気のせいかな。。
PEARPackの開発が3日間&仕事の合間に作っただけなので、かなりきたないです(汗

>ところで、Pearpackでは、directoryを掘ってpackage2.xmlのテンプレート?を作ることはできました。しかし、 _common.phpの89行目当たりでエラーが出ていました。なんかsingletonの返り値が配列っぽいのが原因かな。ええと、使いかたがまだよくわからいのだけども、これって、生成されたpackage2.xmlを修正していったらいいの?

たぶん、package2.xmlへのパスが間違っているか、XMLパースエラーだと思います。
(PEAR_Errorで返してくれるんだけど奇怪過ぎてエラーが読めないでいます・・・汗)

>ちなみに環境は、phpのバージョンは、5.1.4で、OSは、Linuxね。
Linux環境でテストしてみます。(たぶん、週末ぐらいになるかも・・・)
やっぱ、サンプルはつくったほうがいいですね

Comment by sakamoto — August 29, 2006

とりあえず、Services_YouTube、承諾おめでとうございます。

>ところで、PEARのコード基準に関してもセキュリティ的な面からしても、ショートタグは激しくお薦めでないです。
修正したものへバージョンアップしました。

>>ちなみに環境は、phpのバージョンは、5.1.4で、OSは、Linuxね。
>Linux環境でテストしてみます。(たぶん、週末ぐらいになるかも・・・)
してみました。
結論からいいますと、エラーなくできました。
もしかしたら、PEAR_PackageFileManagerとPEAR_PackageFileManager_Frontend_Webのバージョンの問題かもしれません。
もし、よろしければ、以下のことを教えていただけるとありがたいです。
1._config.phpの設定
2.作成したプロジェクト名
3.作成したファイル名
4.PEAR_PackageFileManagerとPEAR_PackageFileManager_Frontend_Webのバージョン

わかりにくくてすみません。

Comment by sakamoto — September 4, 2006

どうもありがとうございます。

PEARPackですが、ごめんなさい。放置していました。で、さっそく今日やってみたらできました。お騒がせしましたー。

原因は、PEAR_PackageFileMangaer_Frontend_Webのバージョンでした、なかなか快適なインタフェースですね。ぜひ使わせていただきます。ソースを読んだ感じでは、依存関係とかってどうするのかなー。なんて思っていたのですが、その辺はPEARのパッケージがよろしくやってくれているようですね。

pear-dev, pear-groupへのMLの登録は、相変わらずと言う感じです。まったく登録される気配がありません。

PHP_Annotationの方はまだ使ってみていないのですが、なかなかコメント来ませんね。私が提案したときもなかなかコメントはなかったです。。代わりにダイレクトメールで、3通くらいいただきました。って、私がコメントすればいいのか。。Reflection_Annotationの存在自体も知りませんでしたので、どんなんか見てみます。そして、何かコメントできそうでしたらしてみます。あ、でも、本当にコメントできるかどうかはわかりませんので期待はしないでくださいね。日本の消費税くらいの期待でお願いします。

あと、私の場合はアカウントを作成してくれた人に、「私の提案したパッケージどうかな。。」って聞いてみました。sakamotoさんもよろしければ聞いてみたら。。あと、looks likeとgreat painじゃ、正直なところ結局何がどうよくなったのかが、わからないのですが、下の違いのリストを見ると、なんかしらReflection_Annotaionよりもいいところがあるんですよね。うーん。さきほども書いたのですが、Reflection_Annotaiton自体使ったことがなかったので、両方使ってみて、機能的な違いが激しくわかって、PHP_Annotaionサイコーって思えたらコメントしてみます。

ソースコードはパッとしか見ていないのですが、大丈夫だと思うのですが、やっぱりReflection_Annotationとの機能的な違いを激しくアピールするってことがポイントのような感じがします。。もしかしたら、Reflection_Annotationの著者と連絡して、拡張を手伝った方がいいって言われることもあると思います。

Comment by shin — September 4, 2006

Leave a comment

Bloglines feedburner