taro-nishinoの日記: Mooseを使うか使わないか 2
私は、以下のような人には理屈もへったくれもなく、無条件にMoose(Mouseでも構いません)を使えと言います。PerlのOOに悩みたくない人、いわゆるモダーンPerlが何であるか理解出来ない人(すなわち、Perlのベストプラクティスやピットフォールを知らない人、もっと端的に言えば、Perlに精通していない、赤ちゃん言葉でしか喋れない人です)、Mooseを知らない人(皮肉で反対なことを言っているのではありません。Mooseを食わず嫌いな人です。そういう人は、どうせMooseやClass::MOPのソースも読みはしないのだから、Mooseの何たるかを理解させる時間が無駄です)。
しかし、Perlに精通している人には無理強いしません。いろいろな考えがあるでしょうし、オーバーヘッドが無視し得ない環境もあるのです。また顧客が望まない場合もあります。一般的に顧客というのはすごく保守的です。コードも納品物である以上は、保守契約がない限りメンテナンスは顧客になりますので、Mooseで書かれていては手も足も出ないことが多いのです(そんなPerlerが企業にいる事自体が不思議なんですが、少なくとも日本ではいることは確かです)。
前の″何故、企業はPerlを嫌うのか″で紹介したDave Cross氏でも、″Moose Or No Moose″で意見を求めています。氏は自身でコンサルティング会社を経営していて、いろいろな企業と付き合いが広い方です。
以下、その私訳を載せておきます。
Mooseを使うか使わないか
2009年9月1日 Dave Cross
私は結構な期間Mooseについて知識がある。私が始めてトレーニングコースでMooseについて言及したのは、2007年夏に遡って、Teach-Inにおいてだった。それ以来、Mooseはトレーニングコースの一部となっている。
しかし、トレーニングコースで人にMooseについて話していても、私は実際に自身のコードの中には使っていなかった。フリーランサーとして明らかに、日常の仕事において、私の顧客が使っているテクノロジーが何であれ、それを使うことに余儀なくされる。私はまだ、Mooseを既に使っているプロジェクトの仕事を受けていない(私は数人の顧客にMooseに切替えてはいかがと勧めているけれども)。
私自身のコードは別だ。そのコードは主に私のCPANモジュールである。最近まで、それらのどれにもMooseを使わなかった。Mooseを使った私の最初のリリースは、Guardian::OpenPlatform::APIだった。始めからMooseを直ちに使った新しいモジュールだ。しかし、結局のところ、Mooseが適切である場所ならどこでもMooseを使うように、遡って既存のモジュールをリファクタリングしたくなる、ことが分かった。
今年のYAPC::Europeへ行き、Mooseがいかに素晴らしいかを面と向かって私に語る人々の一週間に付き合わされた。そして、歯を食いしばってリファクタリングを始める時だと決心した。
私が試みた次のモジュールがParse::RPM::Specだった。2つの理由のため、これを選んだ。第一に、それが正にアトリビュート主導型のモジュールであるから。スペックファイルの初期読込みを別にして、このクラスのオブジェクトはただアトリビュートの値を返すために存在する。これは非常にMooseと相性がよい。事実、Mooseを使うようにコンバートすることは、コード削減の主なケースだった。第二に、もっと実際的なことだった。つまり、私が知っている限り、このモジュールを使っている人はいないので、私が何かを壊しても、私を罵る群衆がいないであろう。
そのコンバージョンのいとも簡単さに感心したので、私はArray::Compareに移った。このモジュールは、私の最初のCPANモジュールだったので、特別な思い入れがあった。それが特別便利なモジュールとは思っていない。そのアルゴリズムは非常に基本的で、私が元々これを書いたプロジェクト以外には、どの製品コードにも使っていない。私は屡々新しいテクニックを試すために、それを使用している。8月9日にバージョン2.00をリリースした(その実装の変更は、メジャーバージョンナンバーを上げることに相応しいと思った)。
昨日、私はMoose使用を止める要望のRTチケットを受取った。そのチケットは、いろいろな使用(そのチケットでは、コマンドラインでの使用に言及しているが)に対して、Mooseによって加わった更なるオーバーヘッドが受け入れ難いパフォーマンスの打撃になっていることを明らかにしている。
私はこれをどのように克服するか分からない。一デベロッパーとして、私はMooseの使用が好きである。Mooseは、Perlでオブジェクト指向のコードを書くことを容易にする。私は、翌年以降年々、CPANデベロッパーはMooseを使っていくだろうと考えている。もし、あなたが既に充分に複雑なことをPerlで書いているなら、Mooseを使っているモジュールを使用するチャンスである。時が経つにつれて、Mooseに依存するPerlコードの割合は増加するだろう。しかし、小さなアプリケーションに対して受け入れ難いパフォーマンスの打撃があるならば、デベロッパーが使っていないMooseを強制することはいいことだろうか?
これをもう少し熟考するまで、私の作物をMooseに移動させる計画を保留したいと思う。しかし、私は他の人の意見を聞きたい。あなたがCPAN作者なら、あなたのモジュールをMooseへ移すことを考えているのか。あなたがアプリケーションデベロッパーなら、Mooseを無理強いするモジュールを避け始めているのか。
あなたの考えを教えてほしい。
訳文 (スコア:1)
ちょっと違和感があったところ、こんなのでどうでしょうか。
> Mooseに切替えることは私自身のコードを置き去りにする。
That leave my own code. ですので「私自身のコードについては話は別だ(=Mooseを使ったことがない、ということではない)」
> しかし、結局のところ、私は元に戻したくなり、Mooseが適切である場所ならどこでも
I'd eventually go back and refactor my ... は、既存のモジュールすべてについて全部 Moose をつかってリファクタリングしたくなる、という意味だとおもいます
> デベロッパーが望めばすぐにでも、私がMooseを強制したいと思うだろうか?
sooner than they want to? なので「デベロッパーがまだ使っていない Moose を、強制するのはいいことなのだろうか?」
Re:訳文 (スコア:2)
これは宮川さん、ご指摘有難うございます。
ちょっと違和感があったところ、こんなのでどうでしょうか。
> Mooseに切替えることは私自身のコードを置き去りにする。
That leave my own code. ですので「私自身のコードについては話は別だ(=Mooseを使ったことがない、ということではない)」
完全に同意です。修正しました。
> しかし、結局のところ、私は元に戻したくなり、Mooseが適切である場所ならどこでも
I'd eventually go back and refactor my ... は、既存のモジュールすべてについて全部 Moose をつかってリファクタリングしたくなる、という意味だとおもいます
同意です。「遡って既存のモジュールをリファクタリングしたくなる」と修正しました。
> デベロッパーが望めばすぐにでも、私がMooseを強制したいと思うだろうか?
sooner than they want to? なので「デベロッパーがまだ使っていない Moose を、強制するのはいいことなのだろうか?」
ここは完全に誤読してました。ご指摘のまま修正しました。
こんな場末のところまで、有難うございました。
さすがに、宮川さんが見ているとは思いもしませんでした。