Successfully reported this slideshow.

Laravel4 Happy Hacking

23

Share

Loading in …3
×
1 of 105
1 of 105

More Related Content

Related Books

Free with a 14 day trial from Scribd

See all

Laravel4 Happy Hacking

  1. 1. 2013.05.24 Takashi Ohida LARAVEL4 HAPPY HACKING 13年5月29日水曜日
  2. 2. 目次 自己紹介 PHP / フレームワーク歴 Laravel4でつくってみた Laravel4のすごいところ紹介 13年5月29日水曜日
  3. 3. 自己紹介 13年5月29日水曜日
  4. 4. 自己紹介 名前:大日田 貴司(オオヒダ タカシ) 所属:都内ウェブ系企業 職業:開発、企画 コード書いてません(^_^;) サービス設計とかUI/UXとか 13年5月29日水曜日
  5. 5. PHP歴 PHP歴 8年くらい Python / Rubyとかなんとなくわかる GAE / Railsとか少し触ったことある 色々あるけどPHPはかわいい 13年5月29日水曜日
  6. 6. フレームワーク歴 僕がPHPをはじめた頃 外の会社からできるプログラマが手伝いに来て 言った 「まずフレームワークをつくりましょう」 13年5月29日水曜日
  7. 7. フレームワーク歴 「フレームワーク?なにそれ?おいしいの?」 13年5月29日水曜日
  8. 8. フレームワーク歴 当時はまだRailsなど存在せず PHP界隈には、JavaのStrutsに影響をうけたフレー ムワークが出てきた頃かもという時代 13年5月29日水曜日
  9. 9. フレームワーク歴 フレームワークとは何かがんばって調べた MVC、アーキテクチャ設計、デザインパターン、 etc ... 13年5月29日水曜日
  10. 10. フレームワーク歴 概念のすべてを理解しきれなかったけど 「フレームワークってなんだかかっこいい!」 13年5月29日水曜日
  11. 11. フレームワーク歴 二人でフレームワークをつくった 今思えばとても原始的なものだったけど フレームワークをつくるのはすごく楽しかった し、勉強になった 13年5月29日水曜日
  12. 12. フレームワーク歴 そんなこんなでフレームワークに関心を持つよう になった 13年5月29日水曜日
  13. 13. フレームワーク歴 Railsが出た頃さわってみて、超すごい!と興奮した PHPでいいのないのか なかった つくった Railsのソースを読んでPHPでそれっぽく実装 13年5月29日水曜日
  14. 14. フレームワーク歴 自作フレームワーカーだったので CakePHPとか CodeIgniter / FuelPHPとか Symfonyとか ちゃんと使ったことない 自作も大変なのでイイのに乗り換えたい願望 13年5月29日水曜日
  15. 15. フレームワーク歴 PHP歴 ≒ フレームワーク歴 自作フレームワーク() メジャーどころはなんとなく知ってる けどちゃんと使ったことは無い まとめ 13年5月29日水曜日
  16. 16. LARAVEL3 13年5月29日水曜日
  17. 17. LARAVEL3 去年のちょうど今頃、HackerNewsでみかけた https://news.ycombinator.com/item?id=4029427 13年5月29日水曜日
  18. 18. LARAVEL3 シンプルでクリーンな設計思想 軽量だがひと通りの機能は っている 拡張性(bundles)もある が、 13年5月29日水曜日
  19. 19. LARAVEL3 Staticメソッド多用 新しいフレームワークって色々不安 命名規則が好みではない function action_index()とか 13年5月29日水曜日
  20. 20. LARAVEL3 なんか惜しいというか そんなにビビビッとこなかった 名前はかわいいのだけれど・・・ 13年5月29日水曜日
  21. 21. LARAVEL3 (́・ω・`) 13年5月29日水曜日
  22. 22. LARAVEL3 そして、ときは流れ… 13年5月29日水曜日
  23. 23. LARAVEL4 13年5月29日水曜日
  24. 24. LARAVEL4 最近、ふと思った ブログでも書こう どうせなら自分でつくろう 全然プログラミングしてないし リハビリもかねて 13年5月29日水曜日
  25. 25. LARAVEL4 フレームワーク何にしよう? 13年5月29日水曜日
  26. 26. LARAVEL4 軽量系のフレームワークをいくつか試した Slim Silex Phalcon(micro) FuelPHP ... 13年5月29日水曜日
  27. 27. LARAVEL4 Laravel4のベータが出ていた ので試した 13年5月29日水曜日
  28. 28. LARAVEL4 3の思い出 (使ってないけど) 13年5月29日水曜日
  29. 29. LARAVEL4 4をみてみたらびっくり 3でイケてなかった点が 悉く「解消」していた 13年5月29日水曜日
  30. 30. LARAVEL4 もちろん良かった点はそのままに 13年5月29日水曜日
  31. 31. LARAVEL4 「ららべる子?」 「顔はかわいいんだけど」 「ちょっとおてんばな性格がなぁ…」 13年5月29日水曜日
  32. 32. LARAVEL4 そんなららべる子と1年ぶりに偶然再開したら 13年5月29日水曜日
  33. 33. LARAVEL4 かわいらしさはそのままに とても品のよい子に成長していた ...! 13年5月29日水曜日
  34. 34. HAPPY HACKING with Laravel4 13年5月29日水曜日
  35. 35. HAPPY HACKING 楽しいって何か 書いてて楽しい、嬉しい ラクに書ける、シンプルで書きやすい わかりやすい、悩まない 思い通りに操れる 13年5月29日水曜日
  36. 36. HAPPY HACKING 楽しいって何か プログラマーズハイ・高揚感 スーパーハカーな気分 マジカルな感じ・支配感 ゆけおれのコードよ 13年5月29日水曜日
  37. 37. HAPPY HACKING Laravelにあるもの しっかりした枠組み プログラミングを楽しくしてくれる仕組み プログラミングのレベルを 底上げしてくれるような思想 13年5月29日水曜日
  38. 38. HAPPY HACKING IoC Containerによるパワフルで賢い依存性解決 シンプルでクリーンな設計思想・記述 軽量で追いやすいコアコード 実績のある基盤(symfony component) 柔軟性、拡張性 13年5月29日水曜日
  39. 39. HAPPY HACKING Staticメソッド多用 IoC Container x Facadeにより解決しました 新しいフレームワークって色々不安 信頼と実績のSymfony Componentが基盤になりました 命名規則が好みではない 好みな感じ(PSR-1準拠)になりました Laravel3のとき気になってたあれらはどうなったのか 13年5月29日水曜日
  40. 40. HAPPY HACKING もはやハッピーな感じしかしない 13年5月29日水曜日
  41. 41. HAPPY HACKING ということで Laravel4でブログをつくってみました 13年5月29日水曜日
  42. 42. POCHIKA ポーチカ 13年5月29日水曜日
  43. 43. POCHIKA Laravel4でつくった軽量ブログエンジン データベースは使わず、markdownファイルを変換 jekyll風味(けどstatic file generatorではない) php的に動的に動作する キャッシュとかプラグインとか 13年5月29日水曜日
  44. 44. POCHIKA 使ってる機能 Routing Config Controller Error & Logging Cache Events IoC Container View / Templates / Blade Unit Testing Artisan CLI まだ使ってない機能 Forms & HTML Database Eloquent ORM Localization Queues Mail Security Session Validation 13年5月29日水曜日
  45. 45. http://github.com/ohida/pochika POCHIKA 13年5月29日水曜日
  46. 46. LARAVEL4 13年5月29日水曜日
  47. 47. LARAVEL4 IoC Container / Facade Illuminate / composer / symfony components psr-0(autoload) / psr-1(coding standard) その他色々パワーアップ 3からの変更点 13年5月29日水曜日
  48. 48. LARAVEL4 IoC Container ... どのように依存性を解決するか Facade ... シンプルで強力なインターフェイス おまけ:UnitTest ... IoC ContainerとFacadeが必要な理由 13年5月29日水曜日
  49. 49. IOC CONTAINER 13年5月29日水曜日
  50. 50. IOC CONTAINER IoC ... Inversion of Control 制御の逆転 13年5月29日水曜日
  51. 51. IOC CONTAINER “The IoC container is at the heart of the entire application and all dependencies are resolved through that.” Taylor Otwellさん IoC Containerはアプリケーション全 体における心臓部で、すべての依存 性を解決します。 13年5月29日水曜日
  52. 52. IOC CONTAINER The Laravel inversion of control container is a powerful tool for managing class dependencies. Dependency injection is a method of removing hard-coded class dependencies. Instead, the dependencies are injected at run-time, allowing for greater flexibility as dependency implementations may be swapped easily. http://four.laravel.com/docs/ioc LaravelのIoCコンテナはクラス依存性解決のためのパワフルなツールです。 DI(依存性の注入)はコードによるクラス解決を取り除き、代わりにアプリ ケーションの実行時に依存性を注入します。このことにより依存の実装を容 易に入れ替えられるという柔軟性を得ることができます。 13年5月29日水曜日
  53. 53. IOC CONTAINER Basic Usage 13年5月29日水曜日
  54. 54. IOC CONTAINER $foo = new Foo; 13年5月29日水曜日
  55. 55. IOC CONTAINER $foo = App::make('Foo'); 13年5月29日水曜日
  56. 56. IOC CONTAINER App::bind('foo', function() { return new Foo; }); $foo = App::make('foo'); 13年5月29日水曜日
  57. 57. IOC CONTAINER $view = new SmartyView; " App::bind('view', function() { $smarty = new SmartyView; $smarty->.. return $smarty; }); $view = App::make('view'); 13年5月29日水曜日
  58. 58. IOC CONTAINER $view = new TwigView; " App::bind('view', function() { return new TwigView([ .. ]); }); $view = App::make('view'); 13年5月29日水曜日
  59. 59. IOC CONTAINER クラスを「直接」呼ぶのではなく IoC Containerを通して「間接的」に呼び出す 13年5月29日水曜日
  60. 60. IOC CONTAINER クラスが必要になった時 IoC Containerさんがよしなにつくってくれる 13年5月29日水曜日
  61. 61. IOC CONTAINER 僕:IoCさん、僕がfeedくれっていったらAtomFeedのこと ですからよろしくですよ IoCさん:(o e o)アイヨ ∼そしてその時がきた∼ 僕:「feedくれ!」 IoCさん:(o e o)つ アイヨ ∼【AtomFeed】 13年5月29日水曜日
  62. 62. IOC CONTAINER 登録 App::bind('feed', function() { return new AtomFeed; }); 使う $feed = App::make('feed'); echo $feed->generate(); //render xml/atom 13年5月29日水曜日
  63. 63. IOC CONTAINER 登録 App::bind('feed', function() { return new RssFeed; }); 使う $feed = App::make('feed'); echo $feed->generate(); //render xml/rss 13年5月29日水曜日
  64. 64. IOC CONTAINER singletonもIoCが解決 App::singleton('foo', function() { return new FooBar; }); 13年5月29日水曜日
  65. 65. IOC CONTAINER 既にあるインスタンスを登録することも $foo = new Foo; App::instance('foo', $foo); 13年5月29日水曜日
  66. 66. IOC CONTAINER Automatic Resolution The IoC container is powerful enough to resolve classes without any configuration at all in many scenarios. IoCコンテナは強力なので、多くの場合においてクラス解 決のために何かをする必要はありません。 13年5月29日水曜日
  67. 67. IOC CONTAINER class FooBar { public function __construct(Baz $baz) { $this->baz = $baz; } } $foobar = new FooBar(new Baz); 13年5月29日水曜日
  68. 68. IOC CONTAINER class FooBar { public function __construct(Baz $baz) { $this->baz = $baz; } } $foobar = App::make(‘FooBar’); 13年5月29日水曜日
  69. 69. IOC CONTAINER class FooBar { public function __construct(PiyoInterface $baz) { $this->baz = $baz; } } IoCさん (o e o)Interfaceかー 解決できねー...orz なんていうことはなく 13年5月29日水曜日
  70. 70. IOC CONTAINER App::bind(‘PiyoInterface’, Poyo); # PiyoInterfaceが呼ばれたらPoyoのことなんだからね 13年5月29日水曜日
  71. 71. IOC CONTAINER class FooBar { public function __construct(PiyoInterface $baz) { $this->baz = $baz; } } App::bind(‘PiyoInterface’, Poyo); App::make(‘FooBar’); (o e o)/ 13年5月29日水曜日
  72. 72. IOC CONTAINER class Eva { public function __construct(PilotInterface $pilot) { $this->pilot = $pilot; } } App::bind(‘PilotInterface’, ‘Ayanami’) $eva = App::make(‘Eva’); # get_class($eva->pilot) == ‘Ayanami’ 13年5月29日水曜日
  73. 73. Practical Usage 実用例 IOC CONTAINER 13年5月29日水曜日
  74. 74. IOC CONTAINER class OrderController extends BaseController { public function __construct(OrderRepository $orders) { $this->orders = $orders; } public function getIndex() { $all = $this->orders->all(); return View::make('orders', compact('all')); } } 13年5月29日水曜日
  75. 75. IOC CONTAINER $orders = new OrderRepository(); new OrderController($orders); App::bind(‘OrderRepository’, ‘MockOrders’) App::make(‘OrderControler’) 普通に書くとデータベースへの接続が発生 IoCを使うとスタブで置き換えられる 13年5月29日水曜日
  76. 76. IOC CONTAINER In this example, the OrderRepository class will automatically be injected into the controller. This means that when unit testing a "mock" OrderRepository may be bound into the container and injected into the controller, allowing for painless stubbing of database layer interaction. この例では、OrderRepositoryクラスは自動的にコントローラーに注入され ます。このことは、ユニットテストの際にモックのOrderRepositoryクラスを コントローラに注入することができ、データベース操作部分のスタブ化が容 易になることを意味しています。 13年5月29日水曜日
  77. 77. IOC CONTAINER まとめ IoCとは、Inversion Of Control(制御の逆転) よしなにクラスをつくってくれる よしなに依存関係を解決してくれる テストもしやすくなる 13年5月29日水曜日
  78. 78. FACADE 13年5月29日水曜日
  79. 79. Facade(ファサード)とは 「建物の正面」を意味する。 (wikipediaより) FACADE 13年5月29日水曜日
  80. 80. FACADE なんの正面か = クラス 13年5月29日水曜日
  81. 81. FACADE Page::find('about'); 13年5月29日水曜日
  82. 82. FACADE Behind the scene 13年5月29日水曜日
  83. 83. FACADE class Page { private static $pages; public static function find($name) { return self::$pages[$name]; } } # なるほどstaticね。Pageクラスの中身はこんな感じかな Page::find('about'); 13年5月29日水曜日
  84. 84. FACADE Page::find('about'); class Page { private $pages; public function find($name) { return $this->pages[$name]; } } # ちがうよ。Pageクラスはstaticメソッド持ってないよ 13年5月29日水曜日
  85. 85. FACADE Page::find('about'); Pageクラスではなく、実は Facadeが呼ばれている 13年5月29日水曜日
  86. 86. FACADE Page::method()って書いたら、 普通はPageクラスがよばれる そして ”そのメソッドはstaticに呼べません” というエラーが出る Facadeを介すには? 13年5月29日水曜日
  87. 87. FACADE Page::method()って書いたら、 Facadeの方よんでねとLaravelに教える app/config/app.phpに書く aliases = [ ‘Page’ => ‘FacadesPage’, ]; 13年5月29日水曜日
  88. 88. FACADE <?php namespace PochikaFacades; use IlluminateSupportFacadesFacade; class Page extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'page'; // IoC Containerが解決できる名前 } } 13年5月29日水曜日
  89. 89. FACADE Page::find(‘about’); " Pageファサード " App::resolve(‘page’)->find(‘about’); 13年5月29日水曜日
  90. 90. FACADE $this->input->get(‘hoge’); " Input::get(‘hoge‘); 13年5月29日水曜日
  91. 91. FACADE $view = new View; $view->render(‘index.html’); " View::make(‘index.html’); 13年5月29日水曜日
  92. 92. FACADE どこからでも単独で呼び出せる $thisって誰?を意識しない 誰でもいいしいなくてもいい 疎結合 依存性、コンテキストの排除 統一されたクリーンなインターフェイス $this->hogeだったりnew Fuga()だったりしない 13年5月29日水曜日
  93. 93. FACADE まとめ Facadeを利用することで、シンプルで強力な インターフェイスでクラスを扱うことができる 13年5月29日水曜日
  94. 94. FACADE Laravel4はIoC ContainerとFacadeがキモ Laravel4使うなら最初に理解するべきポイント 13年5月29日水曜日
  95. 95. FACADE Router Router::get(‘/’,‘IndexController@index’); Event Event::fire(‘post.converted’); View View::make(‘index.html’, $payload); 13年5月29日水曜日
  96. 96. UNITTEST 13年5月29日水曜日
  97. 97. UNITTEST テストしやすい/しにくいってなにか Staticメソッドでテストが難しいのはなぜか 13年5月29日水曜日
  98. 98. UNITTEST UnitTestではテスト毎に初期化されることが前提 前のテストの影響をうけるとまともなテストにな らない 13年5月29日水曜日
  99. 99. UNITTEST staticオブジェクトにはconstructorとdestructorが ない 初期化処理と終了処理が行われない 始まりと終わりがない ひとつのテストによって生じた状態をクリアで きない 13年5月29日水曜日
  100. 100. UNITTEST function testEach() { PostRepository::each(function($post) { $post->title .= ‘:hoge’; }); $this->assertHoge(..); } function testHoge() { $posts = PostRepository::load(); ↑ testEachの処理を経た状態になっている .. } class PostRepository { private static $posts = []; public static function load() { return self::$posts; } public static function each ($func) { array_walk( self::$posts, $func ); } } テストクラス 13年5月29日水曜日
  101. 101. まとめ 13年5月29日水曜日
  102. 102. まとめ Laravel4は3のときのよさ(クリーンさとか)はその ままに IoC Containerとかcomposerで中身がおとなになった テストもしやすい(規模に関わらずテストは必要) PHPもここまで来たかくらいイケてる感じで書ける 13年5月29日水曜日
  103. 103. LARAVEL4たのしい☆彡 のでみんなつかおう (自分に合うかは見極めよう) 13年5月29日水曜日
  104. 104. 13年5月29日水曜日
  105. 105. http://solvalou.net/ http://twitter.com/ohida http://www.facebook.com/takashi.ohida http://github.com/ohida Takashi Ohida 13年5月29日水曜日

×