Laravel_オープンソースカンファレンスhokkaido_JP_2014

3,407 views
3,225 views

Published on

オープンソースカンファレンス2014 Hokkaido
最新鋭phpフレームワークLaravelで始めるこれからのモダンphp で使用したスライドです

Published in: Technology

Laravel_オープンソースカンファレンスhokkaido_JP_2014

  1. 1. Yuuki Takezawa / 竹澤 有貴 Laravel JP user group オープンソースカンファレンス北海道2014
  2. 2. Profile / 自己紹介 yuuki takezawa 竹澤 有貴 GitHub : ytake (https://github.com/ytake) facebook (https://www.facebook.com/yuuki.takezawa) qiita : ytake (http://qiita.com/ytake) twitter : ytake (https://twitter.com/ex_takezawa) ! ベンチャー、フリーランスを経て、 現エキサイト株式会社 / Excite Japan Co., Ltd. engineer! ! 小 市出身!
  3. 3. 個人で使用している開発ツール
  4. 4. フレームワーク経験
  5. 5. 次々と現れる新しい技術と、 新しいツール
  6. 6. PHPも進化(みなさんPHP5.4以上ですよね?) namespace array short syntax closure trait Built-in web server etc…
  7. 7. < パッケージ管理ツールも
  8. 8. すばらしいライブラリ群 guzzle symfony components zf components doctrine Aura monolog swift mailer
  9. 9. PHPの標準コーディング規約
  10. 10. サーバ環境も大きく進化しました
  11. 11. AWS Heroku cloudControl Windows Azure Google App Engine PaaS
  12. 12. webserver webserverも選択する時代
  13. 13. 様々な環境で動かすときに、 悩ませる過去のフレームワーク達 server error 500 PHP Fatal error: require_once() Fatal error: Class 'Hoge' not found 真っ白だと・・・ etc…
  14. 14. 色んな環境で楽に動いてくれる モダンなPHP環境
  15. 15. そんなモダン環境で動かす フレームワーク
  16. 16. creator FuelPHPやKohanaのような、 CodeIgniterの開発者がフォークして 産み出されたフレームワークではなく、 マイクロソフトの.NETの開発に関わっていたTaylor Otwell氏によって 開発されています ! GitHubで公開されていますので、 バグや、機能拡張等何かアイディアがあれば、 気軽にpull requestを送る事もできます
  17. 17. 動作環境 php5.4以上 mcrypt必須 OSは問いません composer利用の為、composerは別途導入する必要があります。 cache, sessionはファイルキャッシュ、database memcached, redisがデフォルトで選択可能です databaseはmaster, slave構成でも簡単です 導入方法や簡単なチュートリアルはインターネット上で公開されている記事や、 「オープンソース」を使ってみよう (第35回 phpフレームワーク Laravel) でも触れています。あわせてご覧ください http://www.ospn.jp/press/20140605no40-useit-oss.html
  18. 18. Laravelが気に入れば、 フレームワークを構成している コンポーネントを、 Laravel外でも使えます。 illuminate/database, container オススメです
  19. 19. PEARのライブラリは使用しません。 あれをダウンロードしたけど、 これが無い!非推奨関数が・・ もうありません require,include地獄もありません
  20. 20. google trend等で検索すると、 最近急激に注目度が高くなりました 注目度故に色々話題も付きません Facade誤用?(proxy pattern) static function? bootstrap very slow?
  21. 21. 信憑性はあまりありません
  22. 22. ソースコード、マニュアルなどを 読む事で解決される問題ばかりが 取り上げられていますので、 必ず中身を見る事が大事です (Laravel以外でも同じです) 分からなければ聞きましょう!!
  23. 23. Laravelとは
  24. 24. MVC採用ですが、
 厳密なMVCではありません アーキテクチャ modelview controller
  25. 25. フルスタック security ORM router request SSH migration view container etc… cache
  26. 26. 世界のLaravel GitHubでは現在スターが10,000を超え PHPフレームワークの中で最も注目されているかもしれません。 *人気だけがすべてではないので実際に使ってみて下さい Laravel composerを用いたフレームワーク 依存パッケージの管理や、 構成しているコンポーネントの差異によるエラーや問題が少ない *ただし、バージョンアップ時にクラス名が変更される場合もありますが、 アップグレード方法が正確にアナウンスされます ライブラリの追加や、 フレームワークに組み込むのも、癖が無くスムーズ ストレスがたまりません Symfonyコンポーネントを利用し、複雑さを巧くラップ
  27. 27. Laravelのpackage紹介サイト Laravel Packages Registry http://registry.autopergamene.eu/ Packalyst :: Packages for Laravel http://packalyst.com/ comnect/smarty(smarty利用パッケージ 作った人) https://github.com/ytake/laravel-smarty Laravel Laravelのパッケージ開発は誰でも可能で、 様々なパッケージが世界中のユーザーから提供されています。 海外で利用している開発者が多いため、 日本とは違う技術や、新しいものを吸収したり、 刺激を受ける事もある、大きなコミュニティがあります Vagrantで利用できるboxも公式で提供されています Ubuntu 14.04, PHP 5.5, Nginx, MySQL Postgres, Node (With Bower, Grunt, and Gulp) Redis, Memcached, Beanstalkd
  28. 28. Laravel MySQL, postgreSQL, sqlite, SQL Severに対応 コマンドラインツール(Artisan)を使ってmigrate! unitTestしやすい構造 ほとんどの機能を入れ替えて独自のクラスに変更したり、 コアクラスを拡張したりといった事が簡単にできる様になっています ! デフォルトで用意されている認証クラスで簡単にログインを実装 Laravel unittest Mockeryを使用すると便利です https://github.com/padraic/mockery Laravel Testing Decoded 日本語版 https://leanpub.com/laravel-testing-decoded-japanese Laravelに限らず、テスト本としてオススメです
  29. 29. Laravel HHVMでも動作します Vagrant HHVM Hack Nginx Laravelの組み合わせでもOK https://github.com/kernelcurry/vhhnl AngularJS, backbone.js, ember.js, Knockout.js, react.jsなどの javascriptフレームワークとも簡単に連携可能 cache/sessionはmemcached, Redisがデフォルトで利用可能 大規模なトラフィックにも対応できたり、 websocketを組み合わせたリアルタイムコンテンツ開発も簡単 簡単に実装できるwebsocketパッケージもあります https://github.com/sidneywidmer/Latchet
  30. 30. 主な機能紹介
  31. 31. ご紹介する各機能や サンプルコードは https://github.com/ytake/Tutorial.Application で公開しています
  32. 32. Router Laravelのルーターは多くのMVCフレームワークの様な、 domain/コントローラー/メソッド/ の様な形式ではありません。 HTTPメソッドとコントローラー、メソッドを組み合わせ、 自由に定義する事ができ、 routerだけで小さなアプリケーションを作る事も可能です Route::get(‘uri’,‘controller@method’) Route::post(‘uri’,‘controller@method’) Route::put(‘uri’,‘controller@method’) Route::delete(‘uri’,‘controller@method’)
  33. 33. Router Sinatra の様なルーター Closure利用で簡単な記述方法
  34. 34. Controller 特に特筆する様なものはありませんが、至ってシンプルです 1.RESTに対応したコントローラー 2.簡単なAPI設計 3.function名はhoge_index など 制約はありません
  35. 35. View bladeテンプレート / Smartyやtwigも使用できます Smarty/Twig等と同様に レイアウト対応等も簡単
  36. 36. Model LaravelではModelに Eloquent(エロクアント), query builder, ベーシックなPDO 3種が用意されています ! ルーターと同様にトランザクションもClosureを用いて実装したり、 Eloquentを使って簡単に実装したり、 複雑なクエリはベーシックなものを利用したり、 実装内容などで選択が可能です。 ! パッケージには、mongoDBやOracleに対応させたもの等があります
  37. 37. Model(Query builder) cacheと組み合わせたり、 簡単なpagerが利用できます
  38. 38. Model(Eloquent)
  39. 39. Model(ベーシック) PDOを利用しているので、 同様にSQL文を記述します (プリペアドステートメント) ただし、pagerやcacheは
 組み合わせて実装します(簡単)
  40. 40. Facades LaravelのFacade(ファサード)は、 本来の複雑な処理を隠して、シンプルなI/Fを提供するものではなく、 プロキシパターン(GoF)と思って下さい ! 他のフレームワークとは若干アプローチ方法が異なる記述方法を適用 Route::get() Input::get() View::make() App::make() Redirect::to() Session::get()
  41. 41. 英語の文章を書く様な記述方法 それまでに無いシンタックス 簡単な、わかりやすい記述方法
  42. 42. あれ static function? 静的なメソッドではありません 
  43. 43. class_aliasと__callStaticを 組み合わせてコンテナからインスタンスを 取得 $thisを用いた記述が好みでしたら、その様に記述する事も可能です
  44. 44. ただしフレームワーク自体の 実行速度は少し遅いです
  45. 45. シンプルで簡単な記述方法で、 初めての方にも優しく
  46. 46. Closureと組み合わせて、 独特な記述方法を提供
  47. 47. コ、コンテナ?
  48. 48. でたな、コンテナ
  49. 49. クラスで実装すべきメソッドたちを 定義して(interface)、 使用するクラスで 直接インスタンスを生成せずに ほかで関連性を定義付けて実行
  50. 50. よくあります ! このクラスは、 あれのインスタンスがないと 動かないんだよねぇ・・
  51. 51. interface
  52. 52. controller クラスは何でもいいけど getUser()があればイイヨ!
  53. 53. getUserがあればDBでも
  54. 54. getUserがあればRedisでも
  55. 55. 生成するインスタンスを 決定するために どこかで設定しよう
  56. 56. Laravelならそんなことも 簡単解決 学んで習得
  57. 57. Laravelはシンプル且つ、 手軽で簡単、 強力なDIを備えています
  58. 58. Ioc Container Laravelでは、 コンストラクタ・インジェクションによる依存性の解決方法を提供 依存をクラス外で定義し、実行時に定義したクラスが呼ばれます ! クラスそのものを入れ替える事はもちろん、 interfaceを用いて拡張性のある開発が可能です テストしやすい環境を提供 !
  59. 59. Ioc Container 関係性を定義するだけ シンプル簡単
  60. 60. Ioc Container 依存の解決は、コンストラクタで指定されたものだけではなく、 さらにその先の依存も解決してくれます ! コントローラーからモデルを利用する場合等に利用してみましょう ! その他に、シンプルにインスタンスを生成したり、シングルトンなども 提供されています ! LaravelはほとんどがIocContainerを使って、 それぞれの機能をコンテナに格納して、 必要なときに必要なインスタンスを生成する様に活用されています フレームワーク内のソースを読む事で色々な発見がありますので、 是非目を通してみて下さい
  61. 61. 他にも色んな機能がありますが、 どれも簡単でシンプルな機能、 APIです
  62. 62. デモ1 シンプルなアプリケーション https://github.com/ytake/Tutorial.Application をダウンロードして実際に覗いてみて下さい ログイン、管理画面、投稿や簡単なフィルターを実装している 簡易ブログ投稿アプリケーションです
  63. 63. その他 Laravelに対応したcapistrano/laravelが公開されています https://github.com/capistrano/laravel ! ホスティングがセットになったforgeというサービスが 公式で開始されました https://forge.laravel.com/
  64. 64. Laravelで構築されたサービス等が載っています 日本国内のものは無いと思いますが、作ったら登録してみましょう! http://builtwithlaravel.com/ ! Laravelをベースにした、協力なCMSがリリースされています GitHubでも公開されていますので、是非ご覧下さい http://octobercms.com/ その他
  65. 65. 開発時のヒント
  66. 66. ポイント1 キャッシュや、テンプレートのキャッシュ、 セッション等がapp/storage内に書き込まれます。 インストール後に実行権限を与えてください 「インストールしたけど真っ白!」という場合のほとんどがコレです このクラスはどこに? モデル = データベース専用ではありません 専用だと思っていると、こういう疑問が必ず起こると思います。 コントローラーを太らせる? いえ、modelsディレクトリを削除して、 自由にディレクトリを構成し直してみてください ドメインモデルパターンを採用して開発すると良いかもしれません
  67. 67. ポイント2 現在、インストール後はcomposerのオートローダーで classmapになっていますので、 PSR-0 or PSR-4 に変更するのをおすすめします コントローラーやモデル等クラスを追加する度にcomposer dump- autoloadを叩く必要が有るため、面倒臭いです またパフォーマンスも向上します。 Laravel4のエイリアスローダーはグローバル名前空間で有効になる為、 コントローラーやモデル等、名前空間を利用する場合は Facadeの先頭にを付けなければなりません ! 公式通りの記述方法がお好みであれば、useを記述するか、 パッケージを利用するなどで簡単に対応出来ます
  68. 68. ポイント3 高品質なLaravelパッケージもあわせて使ってみましょう
 ジェネレーター : Laravel-4-Generators セキュリティ周り : cartalyst/sentry IDE コード補完 : barryvdh/laravel-ide-helper *Laravelはその記述方法から、IDEを使用しても補完されません。 ide_helperは実装の大きなヒントになりますので、導入をお勧めします Ioc container, 依存をまとめて定義するproviderを使ってみる お気に入りのライブラリがあれば、ごっそり入れ替えてみる、 フォルダ構成も好みに変更する事で、 リファレンスに記載されているだけが全てではないLaravelの利用方法を 見つける事ができます。 ! Twitterで困ったアピールすると誰かが答えてくれます?
  69. 69. ポイント4 Laravelはphp artisan optimize でフレームワークのソースをcompileして動きます ユーザーが実装したクラスは対象になりませんので、 app/config/compile.php に compileしたいクラスを追記してみましょう
  70. 70. 新しい技術を利用する場合も モダンなPHP+Laravelで簡単実装
  71. 71. デモ2 websocketアプリケーション https://github.com/ytake/laravel-websocket
  72. 72. 日本語ドキュメント Laravel 4 ドキュメント+ (https://leanpub.com/laravel4plus) Laravel: Code Bright (https://leanpub.com/codebright-jp) Laravel 4 Cookbook (https://leanpub.com/laravel4cookbook-jp) Laravel: From Apprentice To Artisan (https://leanpub.com/laravel-jp) Laravel Testing Decoded (https://leanpub.com/laravel-testing-decoded-japanese) Implementing Laravel (https://leanpub.com/implementinglaravel-jpn) Laravel4でこなすプログラム術 (https://leanpub.com/gsd-laravel-jp) ! ! Laravel 4 Cookbook, Implementing Laravel, Laravel Testing Decodedの3つは、 これさえあれば何でも作れる!できる!
 というくらいの良い内容です。 内容の良い電子書籍が多数あります
  73. 73. わからない事を日本語で聞きたい・・
  74. 74. 日本語訳したサイト Laravel フォーラム : 日本語で質問が!ミートアップや勉強会の募集にもお使いください http://io.laravel.jp/forum ! Laravel トリックス : Tipsサイト http://tricks.laravel.jp ! 海外フォーラムは活発ですが、日本ではあまり活用されていないので是非お願い致します。 ! 近々レシピサイトの翻訳します!
  75. 75. Laravel ユーザーによる国内勉強会 Laravel Meetup Tokyo http://laravel.doorkeeper.jp/ fukuoka http://fukuokaphp.doorkeeper.jp/events/10120 Laravel in action http://connpass.com/series/750/ ! 他にも各地でのカンファレンスや、PHPカンファレンス等でもLaravel話題が出てきます ! 気軽に使ってみて困ったことや疑問は、勉強会やフォーラム、twitter等で聞いてみて下さい。
  76. 76. ご清聴ありがとうございました Yuuki Takezawa

×