PHPで時間旅行をする方法                               塙 与志夫 (hnw)              Symfony勉強会#6 2012/06/30 発表資料12年6月30日土曜日
自己紹介              • hnw               • bugs.php.netでバグ報告18件12年6月30日土曜日
自己紹介              • hnw               • bugs.php.netでバグ報告18件               • 好きな物:バグ, カレー               • 好きな境界値:2の53乗+112...
PHPで時間旅行…?              • ついにPHPでネコ型ロボットが…12年6月30日土曜日
PHPで時間旅行…?              • ついにPHPでネコ型ロボットが…               • 作れません12年6月30日土曜日
問題意識              • 時刻に関わるテストをどう実現する?               • 例:年またぎテスト              • dateなど標準関数を使われると痛い               • 「時間旅行」がし...
それRubyならできるよ!              • Rubygem Timecop               • https://github.com/jtrupiano/timecop              • Ruby組み込み実...
いわゆる動的言語の特徴              • 組み込み関数やクラスも上書き可能               • Ruby、Python、JavaScriptなど12年6月30日土曜日
PHPだとできない…12年6月30日土曜日
それPHP拡張でできるよ!              • 拡張ならPHP関数を上書きできる               • 関数テーブルを書き換える               • 例: mbstringの関数オーバーロード          ...
作りました              • php-timecop               • https://github.com/hnw/php-timecop              • Cで書かれたPHP拡張            ...
実装の詳細(1)              • 時間を止めるPHP関数               • 現在時刻が指定された時刻になる              • 時間移動するPHP関数               • 現在時刻が過去や未来に...
実装の詳細(2)              • 自前実装で差し替え               • time関数              • 引数のデフォルト値を差し替え               • date関数の第二引数など      ...
サンプルコード12年6月30日土曜日
現状              • アルファ版              • CLI版でテストコードは動いてる              • SAPI版は動くけど怪しい              • コンパイルも1環境しか試してない      ...
利用シーン              • 時刻に依存するような自動テスト              • 時刻に依存するようなテンプレートの               表示確認12年6月30日土曜日
メリット              • 既存コードや外部ライブラリなどに               一律に適用できる              • 機能が少ないのでrunkit拡張より               安心感がある(ような気がする...
まとめ         • 他の言語がうらやましい            • それPHP拡張でできるよ!         • php-timecop作りました!            • 安定したらテストで活躍するはず            •...
ご清聴               ありがとう              ございました12年6月30日土曜日
Upcoming SlideShare
Loading in …5
×

PHPで時間旅行をする方法

3,751 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,751
On SlideShare
0
From Embeds
0
Number of Embeds
65
Actions
Shares
0
Downloads
5
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

PHPで時間旅行をする方法

  1. 1. PHPで時間旅行をする方法 塙 与志夫 (hnw) Symfony勉強会#6 2012/06/30 発表資料12年6月30日土曜日
  2. 2. 自己紹介 • hnw • bugs.php.netでバグ報告18件12年6月30日土曜日
  3. 3. 自己紹介 • hnw • bugs.php.netでバグ報告18件 • 好きな物:バグ, カレー • 好きな境界値:2の53乗+112年6月30日土曜日
  4. 4. PHPで時間旅行…? • ついにPHPでネコ型ロボットが…12年6月30日土曜日
  5. 5. PHPで時間旅行…? • ついにPHPでネコ型ロボットが… • 作れません12年6月30日土曜日
  6. 6. 問題意識 • 時刻に関わるテストをどう実現する? • 例:年またぎテスト • dateなど標準関数を使われると痛い • 「時間旅行」がしたいなあ…12年6月30日土曜日
  7. 7. それRubyならできるよ! • Rubygem Timecop • https://github.com/jtrupiano/timecop • Ruby組み込み実装をRubyで上書き! • Time, Date, DateTimeの3クラスを 自前実装でラップしている12年6月30日土曜日
  8. 8. いわゆる動的言語の特徴 • 組み込み関数やクラスも上書き可能 • Ruby、Python、JavaScriptなど12年6月30日土曜日
  9. 9. PHPだとできない…12年6月30日土曜日
  10. 10. それPHP拡張でできるよ! • 拡張ならPHP関数を上書きできる • 関数テーブルを書き換える • 例: mbstringの関数オーバーロード • 組み込みクラスも書き換え可能12年6月30日土曜日
  11. 11. 作りました • php-timecop • https://github.com/hnw/php-timecop • Cで書かれたPHP拡張 • 日付関数とDateTimeクラスを置き換え12年6月30日土曜日
  12. 12. 実装の詳細(1) • 時間を止めるPHP関数 • 現在時刻が指定された時刻になる • 時間移動するPHP関数 • 現在時刻が過去や未来になり、 そこから時間が進みだす12年6月30日土曜日
  13. 13. 実装の詳細(2) • 自前実装で差し替え • time関数 • 引数のデフォルト値を差し替え • date関数の第二引数など • DateTimeのコンストラクタ12年6月30日土曜日
  14. 14. サンプルコード12年6月30日土曜日
  15. 15. 現状 • アルファ版 • CLI版でテストコードは動いてる • SAPI版は動くけど怪しい • コンパイルも1環境しか試してない →Pull Requestかレビュアー募集中12年6月30日土曜日
  16. 16. 利用シーン • 時刻に依存するような自動テスト • 時刻に依存するようなテンプレートの 表示確認12年6月30日土曜日
  17. 17. メリット • 既存コードや外部ライブラリなどに 一律に適用できる • 機能が少ないのでrunkit拡張より 安心感がある(ような気がする)12年6月30日土曜日
  18. 18. まとめ • 他の言語がうらやましい • それPHP拡張でできるよ! • php-timecop作りました! • 安定したらテストで活躍するはず • 要望・アイデアなどお待ちしてます12年6月30日土曜日
  19. 19. ご清聴 ありがとう ございました12年6月30日土曜日

×