SlideShare a Scribd company logo
OSSの敵に
なっちゃうのもいいじゃない
y8spring: May 27, 2017
Daisuke Maki (@lestrrat)
• @lestrrat
• Perl/Go hacker, author, father
• Author of github.com/peco/peco
• Organizer for builderscon
応募してくれ!
https://builderscon.io/tokyo/2017/cfp
ピンチヒッターなのでお手柔らかに…
(最近まわりの若手プログラマを
見てて思った、ふわっとした話です)
最近のGithubでの活動
(全部Goです)
github.com/lestrrat/go-slack
fork of github.com/nlopes/slack
github.com/lestrrat/go-fluent-client
rewrite of github.com/fluent/fluent-logger-golang
github.com/lestrrat/go-msgpack
fork of gopkg.in/vmihailenco/msgpack.v2
github.com/lestrrat/go-gettext
fork of github.com/leonelquinteros/gotext
github.com/lestrrat/go-packasset
rewrite of github.com/jteeuwen/go-bindata
Q: PR送らないの?
A: 送らない
A: 送らない
もちつけ
共通する理由
APIが気に入らねぇ
Q: だから〜、PR送らないの?
A: 送らない
OSSに変更提案を送る際の
最初のルール
「APIを変えたい」は
ほぼ100%却下される
APIを変える=影響範囲が
デカい
APIさえ変えないで
すぐ済むならPRする
→ 既存のAPIの中身を変える
→ 新規APIを追加する
エンドユーザー全員に影響:
かなりの強い理由が必要
理由を説明する努力が必要
説明するには現在の
実装への理解が必要
「あれ、一旦自分で書いたほうが
(説明するためにも)早くね?」
そうだ、forkしよう
fluent.Shutdown(context.Context)
が欲しかった
最近の具体例(1)
(アプリがexitした時点でバッファが空かどうかの保証されてないのが気持ち悪かった)
→ 「あれ、バッファのフラッシュを明示的に待てないぞ」
→ 「PR書こう」
→ 「あれ、これいれると他のAPIも変わるな…」
→ 「あれ、これ、もう違うライブラリだよね…」
→ 「forkしよ」
最近の具体例(1)
OSSの敵になるのもいいじゃない
エラーを握りつぶしてるのを
どうにかしたかった
最近の具体例(2)
(“func hoge()”を”func hoge() error”にしたかった)
→ 「あれ、このライブラリ、エラーがあっても全部無視してる…」
→ 「あとで泣くの、おれだぞ。エラー返すPR書こう」
→ 「あれ、そもそも戻り値に一切”error”が定義されてないからAPIが変
わっちゃう…」
→ 「書き直ししよ」
最近の具体例(2)
最近の具体例(2)
なんかもっと調整したいんだけど、
そもそもmsgpackの仕様がわからん…
最近の具体例(3)
→ 「なんか、これもっとencoding/jsonみたいにしたほうがいいのでは…」
→ 「PR書こう」
→ 「む、すぱげt… 難しいコードだな」
→ 「ひょっとして実装した人じゃないとわからない深淵なる理由あるのか
な?」
→ 「プロトコルを知らないのにAPIについていちゃもんつけられない」
→ 「forkしてプロトコルから実装しなおしてみよ」
最近の具体例(3)
微妙
気に入らない事はたくさんあるけど、
相当作り込まれてるので
もっと強烈な理由がないと変更提案は
難しそうなのはわかった
やってみて感想
自分で書いた事により
実装の仕組みやプロトコルを
理解した
一度書いたコード
が存在している
元のプロダクトにコメント・PRを送る
にも、机上の空論ではない、触れるモ
ノが存在する
→ 議論もそれをベースに行える
変更提案が拒否されても、
手元にはそれを実装した
実績・経験・自信が残る
注意事項
* 戦略を考えてからforkしよう
* 最終的にfork元に還元したいのか?
* 自分が最後まで看取るつもりで別の道を歩むのか?
* 勉強のためにやっていて、終わったら消すつもりなのか?
* それforkする必要ある?
* API 変わらないならPRを作る苦労をしたほうがいいよ!
それでも、
forkを恐れるべきではない!
自分で書いてみるのを
恐れて欲しくない
(特に経験の浅い人達)
ソースコード読むのもいいけど、APIデザインは
実装しないとわからない事の方が多い
※ 個人の感想です
自分で入れた変更がたいした効果を生めなかったら
そこから何かを学ぼう
この職業は(天才以外)は
1行でも多く書いた人の勝ち
※ 個人の感想です
OSSの敵に
なっちゃうのもいいじゃない
そんなことより
たくさん
コード書け!
END
応募してくれ!
https://builderscon.io/tokyo/2017/cfp

More Related Content

PDF
いまさら聞けないselectあれこれ
PPTX
Git svnではじめる忍者のごとく潜むgit
ODP
LKFT作ってみた
PDF
scheme処理系の実装
PDF
Gitを使ったRoute53の管理
PDF
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
PDF
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
PDF
mrubyのfiberを試してみた
いまさら聞けないselectあれこれ
Git svnではじめる忍者のごとく潜むgit
LKFT作ってみた
scheme処理系の実装
Gitを使ったRoute53の管理
Rubyの御先祖CLU(くるう)のお話(OSC2013 Hamamatsu 発表資料)
オープンソースカンファレンス大分参加報告 & 勉強会向けサーバを作ってみる
mrubyのfiberを試してみた

What's hot (20)

PPTX
DateTimeX::Moment
PDF
Rx入門
PDF
マニアックなRuby 2.7新機能紹介
PDF
Githubを使ったタスク管理
PPTX
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
PPTX
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
PPTX
TIme::Moment+Time::Strptime=
PDF
Nbug201503
PPTX
RubyでGitHubをもうちょっと便利にする
PDF
Rustのタスクモデルについて
PPTX
RubyでGitHubをちょっと便利にする
PDF
最近のRust関連の活動
PDF
Ruby 3.0.0 コネタ集
PDF
Omochi-Renderer2@レイトレ合宿3!!! - お餅
PDF
Rubyで実はwritev(2) が使われているはなし
PDF
#readghc なう
PDF
Shib: WebUI tool provides crossover of Hive and MPP
PDF
Ebisu.rb#15LT「turnipいいよturnip」
PPTX
100311 Dev Fest2010
PDF
Rx Showcase
DateTimeX::Moment
Rx入門
マニアックなRuby 2.7新機能紹介
Githubを使ったタスク管理
当番をランダムに割り当ててみる ~ on-dutyTable.py ~
Webブラウザで使える文献Web API取得結果のスプレッドシート化 ~ Google Colab始めました ~
TIme::Moment+Time::Strptime=
Nbug201503
RubyでGitHubをもうちょっと便利にする
Rustのタスクモデルについて
RubyでGitHubをちょっと便利にする
最近のRust関連の活動
Ruby 3.0.0 コネタ集
Omochi-Renderer2@レイトレ合宿3!!! - お餅
Rubyで実はwritev(2) が使われているはなし
#readghc なう
Shib: WebUI tool provides crossover of Hive and MPP
Ebisu.rb#15LT「turnipいいよturnip」
100311 Dev Fest2010
Rx Showcase
Ad

More from lestrrat (20)

PDF
Future of Tech "Conferences"
PDF
ONIの世界 - ONIcon 2019 Winter
PDF
Slicing, Dicing, And Linting OpenAPI
PDF
Oxygen Not Includedをやるべき4つの理由
PDF
Rejectcon 2018
PDF
Builderscon tokyo 2018 speaker dinner
PDF
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
PDF
Google container builderと友だちになるまで
PDF
筋肉によるGoコードジェネレーション
PDF
iosdc 2017
PDF
シュラスコの食べ方 超入門
PDF
Coding in the context era
PDF
Kubernetes in 30 minutes (2017/03/10)
PDF
Opening: builderscon tokyo 2016
PDF
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
PDF
小規模でもGKE - DevFest Tokyo 2016
PDF
Don't Use Reflect - Go 1.7 release party 2016
PDF
How To Think In Go
PDF
On internationalcommunityrelations
PDF
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Future of Tech "Conferences"
ONIの世界 - ONIcon 2019 Winter
Slicing, Dicing, And Linting OpenAPI
Oxygen Not Includedをやるべき4つの理由
Rejectcon 2018
Builderscon tokyo 2018 speaker dinner
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
Google container builderと友だちになるまで
筋肉によるGoコードジェネレーション
iosdc 2017
シュラスコの食べ方 超入門
Coding in the context era
Kubernetes in 30 minutes (2017/03/10)
Opening: builderscon tokyo 2016
Kubernetes in 20 minutes - HDE Monthly Technical Session 24
小規模でもGKE - DevFest Tokyo 2016
Don't Use Reflect - Go 1.7 release party 2016
How To Think In Go
On internationalcommunityrelations
Yapceu 2015 yapc asia tokyo behind the scenes (w/o notes)
Ad

OSSの敵になるのもいいじゃない