モジュール開発におけるぼくの試行錯誤

37
モジュール開発における ぼくの試行錯誤 id:karupanerura

Transcript of モジュール開発におけるぼくの試行錯誤

モジュール開発における ぼくの試行錯誤

id:karupanerura

Hello!! Kichijoji.pm!!

about meid:karupanerura

Kenta Sato

Perl/Java/JS/elisp/etc..

Mobile Factory, Inc.

Web/Native

Gotanda.pm Author

My CPAN ModulesTOML::Parser

Plack::App::Vhost

Parallel::Async

Plack::Middleware::HTMLLint

etc…

試行錯誤

Plack::Middleware::Gzip

Plack::Middleware::Gzip

Plack::Middlewareでgzip圧縮したかった

CPANでgzipって入れたけど出てこなかった

なさそうだし、作ってみるか! → できた

初めてCPANに上げる

TRY!!!

ERROR!!

WHY?

P::M::Deflater があった!

id:miyagawa さんに教えてもらった

(当時)ぼくが知らなかった非同期レスポンスなどのPSGI仕様にも対応していた

2つある意味はない

CPANから消しました

学び

検索結果をよく読み、よく探す

検索ワードを変えてみる

よく見落とすので数日考えるようにした

意味ないなって思ったら上げない

CPANは砂場じゃない

Sledge::Template::Xslate

Sledge::Template::Xslate

内定先(MF)はSledge Sledgeつかうかー

SledgeでXslateつかいたい

CPANにないなー

やっぱりないな。つくるかー → できた

TRY!!!

ERROR!!

WHY?

インターフェースがクソ

TT2Likeとかを継承で実装していた

自由度めっちゃ低い

学び

インターフェース重要

みんなが使うもの

簡単に変更しにくい

(Wrapperの場合)機能がなるべく制限されないほうが良い

Memoize::Class::Constructor

Memoize::Class::Constructor

(S::T::Xslateで)Xslateのインスタンスをキャッシュしたいなー

Memoizeだとできなさそう…。

CPANにないなー

やっぱりないな。つくるかー → できた

TRY!!!

ERROR!!

WHY?

Memoizeでできる

用途が限定的すぎる

そもそも(S::T::Xslateに)そんな仕様必要ないのでは?

学び

CPANに上げずともブログに書いてTwitterに流せばある程度のフィードバックがもらえることがある

既存モジュールでできることをよく調べよう

劣化コピー版を作る意味は無い

わかりやすい名前をよく考える

Cache::KyotoTycoon::Serialize

Cache::KyotoTycoon::Serialize

Cache::KyotoTycoonでSerializeしたい

pull-reqこわい……

継承して機能追加したモジュール作ればいいのでは?

TRY!!!

ERROR!!

WHY?

あまりにもクソすぎてリリースできない

既存の実装の一部をコピペしている

学び

本体に入れたほうが良さそうなものは積極的にpull-reqしよう

serializeくらいなら本体に入って良いはず

無理して別モジュールにしても良いことない

恐れずにpull-req!!

日本人authorならまずは日本語で

Class::Accessor::List

Class::Accessor::List

IO::KQueueがArrayRefにblessしてたな

そういえばArrayRefにblessしたほうが速いんだっけ?

アクセサ自動で作ればよいのでは?

C::A::Liteと似た名前でおもしろくね?

TRY!!!

ERROR!!

WHY?

配列にblessしたところで速度は大して変わらない

C::A::Liteと似ててややこしい

学び

ややこしいもん作らない

ネタやるならネタで、実用なら実用で

ネタならAcme名前空間に

Filesys::Notify::KQueue

Filesys::Notify::KQueue

(当時)F::N::SimpleがKQueueサポートしてない

FreeBSDなどでめっちゃ遅い

つくるかー => できた

TRY!!!

SUCCESS!!

WHY?

既存に無い、新しい価値を提供できた

学び

pull-reqを恐れずにする

F::N::Simpleにpull-req

取り込まれた!

便利なもの作れば使ってもらえる

まとめ

CPANにほいほいモジュール上げる前によく既存モジュールを確認

CPANは砂場じゃない

本体に入れてほしい機能は作者に相談してみよう

issue/pull-reqも恐れずに!!

YAPC::Asia 2015やります

Yet Another Perl Conference

アンケートやってます!

http://bit.ly/yapc_i_want

http://bit.ly/yapc_enquete