Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
CarbonとChronos から見るOSS 運営
CakePHP がCarbonを捨てるに至った経緯
@serimaPHP BLT #6
日付/時刻操作ライブラリといえばCarbon?
Carbonとの出会いはLaravel
Laravel4.2 を使い始めた時、Carbonを知りました
めっちゃ便利!日付操作簡単!
 DateTime クラスを継承している
使用例
// 現在時刻
$now = Carbon::now();
// $now : 2017-02-20 03:32:09
// 明日
$now->addDay();
// $now : 2017-02-21 03:32:09
// 月末
...
とても便利だけど、ちょっと違和感
違和感の正体はミュータブル
リリース後最初に作られたissueがミュータブルについて
しかし、今は対応しないということでクローズされる
Ref: Stillmutable· Issue#2 · briannesbitt/Carbon
ミュータブルの何が良くないのか
オブジェクトが変更可能= 複数の状態をとりうる
複数の状態を扱う必要
想定外のデータが飛んでくる可能性
バグの温床
バグを生みそうな例
Carbonを使っているとこんな場面はよくあるはず
$now = Carbon::now();
$two_hours_later = $now->modify('+2 hours');
このとき、 $now も $two_h...
では、どのように回避するか
 copy() を使って新たなインスタンスをコピーし、その上で時間操作
$now = Carbon::now();
$two_hours_later = $now->copy()->modify('+2 hours'...
Chronos
PHP 5.5.0 から実装されている DateTimeImmutable クラスを継
承している
CakePHP にv3.2.0 から導入
CakePHP はこのタイミングでCarbonを捨てた
使用例
// 現在時刻
$now = Chronos::now();
// $now : 2017-02-20 07:09:06
// 明日
$tomorrow = $now->addDay();
// $now : 2017-02-20 07...
CarbonとChronos の比較表
nesbot/carbon cakephp/chronos
Requirements
"php": “>=5.3.0"
"symfony/translation": "~2.6
|| ~3.0"
"php...
時系列
 2012年09月11日 Carbonv1.0.0 公開(この時点での、PHPのメジャー
バージョンは  5.4 )
 2012年09月12日 Carbonのリポジトリでイミュータブルに出来ないか
というissueが作られる
 2013...
分岐点となったissue
https://github.com/cakephp/cakephp/issues/6509
何が決め手だったのか
Carbonコミュニティの不活発性
バグ修正の遅さ(クリティカルなバグ修正も遅かった)
より良い実装の実現例がイメージできていた
時系列
 2015年10月12日 Chronos v0.1.0 公開
 2016年01月02日 CarbonがすべてChronos に置き換えられた
CakePHP 3.2.0‑RC1 (php >= 5.5.10) が公開
 2017年01月...
いちデベロッパーとしての教訓
スター数が多くても、その時点で適切なライブラリとは限らない
Laravelのような巨大なフレームワークが使用しているライブラリ
だからといって鵜呑みにするのは良くない
違和感を大切にしたい
OSS 運営側としての教訓
コントリビュータは大切
いずれメンバーに昇格できるように設計思想や指針などをオープン
にしていく必要がある
適切な権限委譲ができないと、いかにデファクトスタンダードを取
っていても、廃れていく可能性がある
先日、em...
Carbon と Chronos から見る OSS 運営
Upcoming SlideShare
Loading in …5
×

Carbon と Chronos から見る OSS 運営

3,965 views

Published on

Carbon、Chronos の実装面からの紹介をしつつ、CakePHP が Carbon を捨てた理由からより良い OSS 運営の方法を探る。

Published in: Internet
  • Hey guys! Who wants to chat with me? More photos with me here 👉 http://www.bit.ly/katekoxx
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Carbon と Chronos から見る OSS 運営

  1. 1. CarbonとChronos から見るOSS 運営 CakePHP がCarbonを捨てるに至った経緯 @serimaPHP BLT #6
  2. 2. 日付/時刻操作ライブラリといえばCarbon?
  3. 3. Carbonとの出会いはLaravel Laravel4.2 を使い始めた時、Carbonを知りました めっちゃ便利!日付操作簡単!  DateTime クラスを継承している
  4. 4. 使用例 // 現在時刻 $now = Carbon::now(); // $now : 2017-02-20 03:32:09 // 明日 $now->addDay(); // $now : 2017-02-21 03:32:09 // 月末 $now->endOfMonth(); // $now : 2017-02-28 23:59:59
  5. 5. とても便利だけど、ちょっと違和感
  6. 6. 違和感の正体はミュータブル リリース後最初に作られたissueがミュータブルについて しかし、今は対応しないということでクローズされる Ref: Stillmutable· Issue#2 · briannesbitt/Carbon
  7. 7. ミュータブルの何が良くないのか オブジェクトが変更可能= 複数の状態をとりうる 複数の状態を扱う必要 想定外のデータが飛んでくる可能性 バグの温床
  8. 8. バグを生みそうな例 Carbonを使っているとこんな場面はよくあるはず $now = Carbon::now(); $two_hours_later = $now->modify('+2 hours'); このとき、 $now も $two_hours_later も2時間後をさしている あとで、 $now を使うとき、もはやそれはnow じゃない
  9. 9. では、どのように回避するか  copy() を使って新たなインスタンスをコピーし、その上で時間操作 $now = Carbon::now(); $two_hours_later = $now->copy()->modify('+2 hours'); もしくは $now = Carbon::now(); $two_hours_later = clone $now; $two_hours_later->modify('+2 hours'); どちらもバグが入り込みやすそうな記述
  10. 10. Chronos PHP 5.5.0 から実装されている DateTimeImmutable クラスを継 承している CakePHP にv3.2.0 から導入 CakePHP はこのタイミングでCarbonを捨てた
  11. 11. 使用例 // 現在時刻 $now = Chronos::now(); // $now : 2017-02-20 07:09:06 // 明日 $tomorrow = $now->addDay(); // $now : 2017-02-20 07:09:06 // $tomorrow : 2017-02-21 07:09:06 // 月末 $end_of_month = $now->endOfMonth(); // $now : 2017-02-20 07:09:06 // $end_of_month : 2017-02-28 23:59:59 Chronos において、 $now はイミュータブル(不変)
  12. 12. CarbonとChronos の比較表 nesbot/carbon cakephp/chronos Requirements "php": “>=5.3.0" "symfony/translation": "~2.6 || ~3.0" "php": ">=5.5.9" Owner briannesbitt cakephp Stars 5209 295 Downloads 21.59M 513K Dependents 980 7
  13. 13. 時系列  2012年09月11日 Carbonv1.0.0 公開(この時点での、PHPのメジャー バージョンは  5.4 )  2012年09月12日 Carbonのリポジトリでイミュータブルに出来ないか というissueが作られる  2013年04月19日 LaravelのリポジトリでEloquent 内でDateTimeの代 わりにCarbonを使っては?という提案issueが作られる  2013年04月20日 LaravelにCarbonが取り込まれる  2013年05月28日 Carbonが取り込まれたLaravelv4.0.0 (php >= 5.3.0) が公開  2013年06月20日  DateTimeImmutable クラスが実装されたPHP 5.5.0 が公開  2014年04月17日 CakePHP にCarbonが取り込まれる  2015年05月08日 CakePHP コミュニティでCarbonを使うのを止めよ うという提案がされる
  14. 14. 分岐点となったissue https://github.com/cakephp/cakephp/issues/6509
  15. 15. 何が決め手だったのか Carbonコミュニティの不活発性 バグ修正の遅さ(クリティカルなバグ修正も遅かった) より良い実装の実現例がイメージできていた
  16. 16. 時系列  2015年10月12日 Chronos v0.1.0 公開  2016年01月02日 CarbonがすべてChronos に置き換えられた CakePHP 3.2.0‑RC1 (php >= 5.5.10) が公開  2017年01月08日 Carbonneeds tobemoreACTIVE. というissueが Carbonリポジトリ内で作成される(2016年、1度もリリースがなかった)  2017年01月11日 @lucammichot がCarbonのメンバーに追加される  2017年01月15日 1 年3 ヶ月ぶりにCarbonのマイナーバージョンアッ プされ1.22.0 が公開 結果的にCarbonは危機を乗り越えた。今後もメンテナンスは続きそう だが、イミュータブルな実装を取っていくことはなさそうな気がする。 PHP 5.5 未満をサポートしなくてはならないプロジェクトでもない限 り、Chronos を使ったほうが良いのでは
  17. 17. いちデベロッパーとしての教訓 スター数が多くても、その時点で適切なライブラリとは限らない Laravelのような巨大なフレームワークが使用しているライブラリ だからといって鵜呑みにするのは良くない 違和感を大切にしたい
  18. 18. OSS 運営側としての教訓 コントリビュータは大切 いずれメンバーに昇格できるように設計思想や指針などをオープン にしていく必要がある 適切な権限委譲ができないと、いかにデファクトスタンダードを取 っていても、廃れていく可能性がある 先日、emacs も同じような問題に直面してるという記事も 結局、OSS も人間の集まりということを認識する

×