今日は比較的つらい思いをした。
PHPにはpearやpeclといういろいろ便利なライブラリを管理しているリポジトリがあって、リポジトリからのインストールはお手軽だからよくお世話になっている。 ソースから入れるよりはるかに簡単だ。
ただ、多くの人はそのドキュメントを参照するのにどこのサイトをまず見てしまうかというとphpの本家マニュアルページだと思う。pecl / pearのほとんどのライブラリはググったらだいたい本家にたどり着く。pearやpeclのページを見に行くわけではない。見に行かないと言ってるのではなくて、だいたいphpの本家マニュアルがあるのなら、そっちを見るよねということ。
だが、peclのAMQPライブラリのマニュアルがphpの本家マニュアルからごっそり消された。
- http://us1.php.net/manual/en/book.amqp.php
- http://jp1.php.net/manual/en/book.amqp.php
- http://jp1.php.net/manual/ja/book.amqp.php
- http://www.php.net/manual/pl/book.amqp.php
英語、日本語のミラーサイトのものは軒並み404 Not Found。ようやく見つかったものはポルトガル語で読めない。これはつらかった。
で、このことはずいぶん前に分かっていた。
というか、ずいぶん前に消えているのを知り、消える前に自分で別途メモ書きをしておいたから参考にしていたドキュメントが消え去っても当面の運用上大丈夫だった。
それだけならまだよかったんだ。
今日、これまで問題なく使っていたプログラムがこけて「んん?なんでだ?」と調べていたら、AMQPライブラリで使っていたメソッドがdeprecatedになっていた。peclのライブラリと組み合わせて別のライブラリを使ったら、そのライブラリではdeprecatedメソッドを使うとエラーで死ぬようになっていたために発覚した。
死んでくれたからdeprecatedだと気づいた。その通りだ。でもドキュメントがないと何が推奨なのかが分からない。
peclのAMQPライブラリのマニュアルがphpの本家マニュアルから消え去った直後、このままでは困ると思って慌ててpeclのページを見に行き、これまでのマニュアルに変わるものを探した。今思うとあの時点ですぐに探しておいて本当によかった。*1
このライブラリではAMQPExchange::declare()
というメソッドも使えるのだが、今はそれが非推奨でAMQPExchange::declareExchange()
が推奨されている。AMQPQueue::declare()
というメソッドもあって、名前がかぶってややこしいのでメソッド名が変更されたものと思われる。AMQPQueue
に関してもAMQPQueue::declareQueue()
が今は推奨。
Function AMQPExchange::declare is deprecated
っていう出力された通りのエラーなんだけど、初めは「メソッドがdeprecatedだから死ぬ」っていうのが意味不明で対応が分からなくて、「えええ?サーバのライブラリを無断でアップデートしちゃったの?なんで一言も言ってくれないの?」ってパニックだった。修正箇所が非常に限定されていたので、一行のコードを推奨メソッドに差し替えてやるだけで正常に動くようになったけども、本当に困った。最近何かアップデートしましたか?って聞きにいったし。こちらの都合でムダに相手を振り回してしまって本当に申し訳なかった。
deprecatedだと分かったのは、そういうエラーをはいてくれたからだ。そういうエラーをはくこと自体は推奨のメソッドに置き換えていく必要性に気づけるので、ある程度大事だと思う。でも推奨の使い方ドキュメントがごっそりなくなってたら、本当にどうしたらよかったんだろう *2。
というかエラーはくまでdeprecatedになっていることにすら気づかなかった。githubにあがってるstubsを見ると、コミットログにdeclare()
というメソッドがない。だからこのリポジトリが作成される時点で既に非推奨になっていたんだろう。それにどうやってエラーがない状態で気づけるというんだろう。
今回は何とか対応できた。でも次同じことが起こって即座に対応できるのか、正直自信がない。
追記(2014-04-15)
この記事を先輩が読んだのかどうかは分からないが、今日peclのAMQPライブラリのアップデートがあったことを教えてくれた。(PECL :: amqp Changelog)
そこをよく見たらメソッドがdeprecatedになっていることがちゃんと書かれてた。
1.2.0 Release:
* New methods AMQPChannel::getPrefetchCount() and AMQPChannel::getPrefetchSize()
* Deprecate AMQPQueue::declare() in favor of AMQPQueue::declareQueue()
* Deprecate AMQPExchange::declare() in favor of AMQPExchange::declareExchange()
* Smaller fixes to our stubs
1.2.0のリリース時点でdeprecatedだったのか。全然見れてなかったんだな。
察してくれたのかfeedもあるよ!と教えてもらった。
キャッチアップしていくことに慣れていこうと思う。
先輩、ありがとうございます。