SlideShare a Scribd company logo
1 of 37
Download to read offline
モジュール開発における
ぼくの試行錯誤
id:karupanerura
Hello!! Kichijoji.pm!!
about me
id:karupanerura
Kenta Sato
Perl/Java/JS/elisp/etc..
Mobile Factory, Inc.
Web/Native
Gotanda.pm Author
My CPAN Modules
TOML::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

More Related Content

What's hot

Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかWord pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのか
Hisateru Tanaka
 
Fuel php をもっと composer で使う
Fuel php をもっと composer で使うFuel php をもっと composer で使う
Fuel php をもっと composer で使う
Taichi Inaba
 
ある戦いの記憶から探るPHPの闇と戦うコツ
ある戦いの記憶から探るPHPの闇と戦うコツある戦いの記憶から探るPHPの闇と戦うコツ
ある戦いの記憶から探るPHPの闇と戦うコツ
FAL_A
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Masahiro Wakame
 

What's hot (20)

Phpのレガシーコードをrubyで焼き変えてみた
Phpのレガシーコードをrubyで焼き変えてみたPhpのレガシーコードをrubyで焼き変えてみた
Phpのレガシーコードをrubyで焼き変えてみた
 
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかWord pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのか
 
Fuel php をもっと composer で使う
Fuel php をもっと composer で使うFuel php をもっと composer で使う
Fuel php をもっと composer で使う
 
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
プロト〜サービスアウトまでの開発支援ツールの作り方〜CrystalFantasia〜
 
最近流行りのビルドツールとは
最近流行りのビルドツールとは最近流行りのビルドツールとは
最近流行りのビルドツールとは
 
第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会第2回関西ソーシャルゲーム勉強会
第2回関西ソーシャルゲーム勉強会
 
「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)「プログラミングGroovy」入門(公開用)
「プログラミングGroovy」入門(公開用)
 
簡単!Groovy入門
簡単!Groovy入門簡単!Groovy入門
簡単!Groovy入門
 
JavaScriptで味わう! 関数型プログラミングのメリット!!
JavaScriptで味わう! 関数型プログラミングのメリット!!JavaScriptで味わう! 関数型プログラミングのメリット!!
JavaScriptで味わう! 関数型プログラミングのメリット!!
 
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
「もうなにもこわくない」関数型言語 〜ふつうのプログラマが関数型言語を知るべき理由・reload〜
 
PHP-MLを使用して気軽に機械学習にトライしてみる
PHP-MLを使用して気軽に機械学習にトライしてみるPHP-MLを使用して気軽に機械学習にトライしてみる
PHP-MLを使用して気軽に機械学習にトライしてみる
 
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
Selenium再入門-W3C勧告とページオブジェクトパターンと私-201707webエンジニア勉強会#2神田
 
ある戦いの記憶から探るPHPの闇と戦うコツ
ある戦いの記憶から探るPHPの闇と戦うコツある戦いの記憶から探るPHPの闇と戦うコツ
ある戦いの記憶から探るPHPの闇と戦うコツ
 
Java使いがphp使いにクラスチェンジした話
Java使いがphp使いにクラスチェンジした話Java使いがphp使いにクラスチェンジした話
Java使いがphp使いにクラスチェンジした話
 
Chrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるにはChrome-eject がこの先生きのこるには
Chrome-eject がこの先生きのこるには
 
JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話JavaのテストGroovyでいいのではないかという話
JavaのテストGroovyでいいのではないかという話
 
Introducing hhvm hack-async
Introducing hhvm hack-asyncIntroducing hhvm hack-async
Introducing hhvm hack-async
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
Jpmobileを使ってみる
Jpmobileを使ってみるJpmobileを使ってみる
Jpmobileを使ってみる
 
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]laravel websocket(use redis pubsub) [Laravel meetup tokyo]
laravel websocket(use redis pubsub) [Laravel meetup tokyo]
 

Viewers also liked

Coimbra rb | microservic'ing and sinatra
Coimbra rb | microservic'ing and sinatraCoimbra rb | microservic'ing and sinatra
Coimbra rb | microservic'ing and sinatra
linkedcare
 
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT
karupanerura
 

Viewers also liked (12)

JS4Girls
JS4GirlsJS4Girls
JS4Girls
 
Front-End UnitTesting
Front-End UnitTestingFront-End UnitTesting
Front-End UnitTesting
 
サイコロを100万回振ってみた
サイコロを100万回振ってみたサイコロを100万回振ってみた
サイコロを100万回振ってみた
 
Coimbra rb | microservic'ing and sinatra
Coimbra rb | microservic'ing and sinatraCoimbra rb | microservic'ing and sinatra
Coimbra rb | microservic'ing and sinatra
 
電流臨界モード方式PFC制御回路の解説書
電流臨界モード方式PFC制御回路の解説書電流臨界モード方式PFC制御回路の解説書
電流臨界モード方式PFC制御回路の解説書
 
Perlにおけるclass実装パターン
Perlにおけるclass実装パターンPerlにおけるclass実装パターン
Perlにおけるclass実装パターン
 
若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT若手Itエンジニア飲み会-LT
若手Itエンジニア飲み会-LT
 
engineer-life
engineer-lifeengineer-life
engineer-life
 
Gotanda.pmの紹介
Gotanda.pmの紹介Gotanda.pmの紹介
Gotanda.pmの紹介
 
The Crystal language *recently* update
The Crystal language *recently* updateThe Crystal language *recently* update
The Crystal language *recently* update
 
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
【システムテスト自動化カンファレンス2015】 楽天の品質改善を加速する継続的システムテストパターン #stac2015
 
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性自動構築と自動テスト〜インフラのコード化とクラウドの優位性
自動構築と自動テスト〜インフラのコード化とクラウドの優位性
 

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

YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXYAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaX
Kazuyuki Todo
 
春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03
春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03
春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03
Takeshi Komiya
 
今さら始めるJavaScript
今さら始めるJavaScript今さら始めるJavaScript
今さら始めるJavaScript
Ashitaba YOSHIOKA
 
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
Atsushi Tadokoro
 

Similar to モジュール開発におけるぼくの試行錯誤 (9)

YAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししようYAPC::Asia 2012 CPANに恩返ししよう
YAPC::Asia 2012 CPANに恩返ししよう
 
採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」採用LT「まだお祈りデプロイで消耗してるの?」
採用LT「まだお祈りデプロイで消耗してるの?」
 
俺と otoya
俺と otoya俺と otoya
俺と otoya
 
130329 perl casual_ruik
130329 perl casual_ruik130329 perl casual_ruik
130329 perl casual_ruik
 
YAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaXYAPC::ASIA 2012 LT GaiaX
YAPC::ASIA 2012 LT GaiaX
 
春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03
春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03
春を先取り!OpsWorksとChef ではじめる恋色コーデ術! #pyfes 2013.03
 
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
ネタプログラミング言語クリエイターYouma (Gunma.web #8 2012/03/03)
 
今さら始めるJavaScript
今さら始めるJavaScript今さら始めるJavaScript
今さら始めるJavaScript
 
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
 

More from karupanerura

mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
karupanerura
 

More from karupanerura (20)

Perl5 VS JSON
Perl5 VS JSONPerl5 VS JSON
Perl5 VS JSON
 
コンテキストと仲良く
コンテキストと仲良くコンテキストと仲良く
コンテキストと仲良く
 
The plan of Aniki 2.0
The plan of Aniki 2.0The plan of Aniki 2.0
The plan of Aniki 2.0
 
Aniki::Internal
Aniki::InternalAniki::Internal
Aniki::Internal
 
KOWAZA for mackerel
KOWAZA for mackerelKOWAZA for mackerel
KOWAZA for mackerel
 
TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=TIme::Moment+Time::Strptime=
TIme::Moment+Time::Strptime=
 
DateTimeX::Moment
DateTimeX::MomentDateTimeX::Moment
DateTimeX::Moment
 
Aniki has come
Aniki has comeAniki has come
Aniki has come
 
Optimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaksOptimize perl5 code for perfomance freaks
Optimize perl5 code for perfomance freaks
 
Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術Technology for reduce of mistakes - うっかりをなくす技術
Technology for reduce of mistakes - うっかりをなくす技術
 
router-simple.cr
router-simple.crrouter-simple.cr
router-simple.cr
 
Why we use mruby with Perl5?
Why we use mruby with Perl5?Why we use mruby with Perl5?
Why we use mruby with Perl5?
 
はかたの塩
はかたの塩はかたの塩
はかたの塩
 
すいすいSwift
すいすいSwiftすいすいSwift
すいすいSwift
 
Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.Aniki - The ORM as our great brother.
Aniki - The ORM as our great brother.
 
Perl5 meta programming
Perl5 meta programmingPerl5 meta programming
Perl5 meta programming
 
mysqlcasual6-next-key-lock
mysqlcasual6-next-key-lockmysqlcasual6-next-key-lock
mysqlcasual6-next-key-lock
 
dwangocpp1-lt
dwangocpp1-ltdwangocpp1-lt
dwangocpp1-lt
 
Hachioji.pm #40
Hachioji.pm #40Hachioji.pm #40
Hachioji.pm #40
 
Hachioji.pm #39
Hachioji.pm #39Hachioji.pm #39
Hachioji.pm #39
 

Recently uploaded

Recently uploaded (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

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