Upload
yuuki-takezawa
View
2.425
Download
1
Embed Size (px)
DESCRIPTION
オープンソースカンファレンス2014 Hokkaido 最新鋭phpフレームワークLaravelで始めるこれからのモダンphp で使用したスライドです
Citation preview
Yuuki Takezawa / 竹澤 有貴
Laravel JP user group
オープンソースカンファレンス北海道2014
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! !小樽市出身!
個人で使用している開発ツール
フレームワーク経験
次々と現れる新しい技術と、 新しいツール
PHPも進化(みなさんPHP5.4以上ですよね?)
namespace
array short syntax
closure
trait
Built-in web server
etc…
<
パッケージ管理ツールも
すばらしいライブラリ群guzzle
symfony components
zf components
doctrine Aura
monolog
swift mailer
PHPの標準コーディング規約
サーバ環境も大きく進化しました
AWS
Heroku
cloudControlWindows Azure
Google App Engine
PaaS
webserver
webserverも選択する時代
様々な環境で動かすときに、 悩ませる過去のフレームワーク達
server error 500
PHP Fatal error: require_once()
Fatal error: Class 'Hoge' not found
真っ白だと・・・
etc…
色んな環境で楽に動いてくれる モダンなPHP環境
そんなモダン環境で動かす フレームワーク
creatorFuelPHPやKohanaのような、 CodeIgniterの開発者がフォークして 産み出されたフレームワークではなく、 マイクロソフトの.NETの開発に関わっていたTaylor Otwell氏によって 開発されています !GitHubで公開されていますので、 バグや、機能拡張等何かアイディアがあれば、 気軽にpull requestを送る事もできます
動作環境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
Laravelが気に入れば、 フレームワークを構成している
コンポーネントを、 Laravel外でも使えます。
illuminate/database, container オススメです
PEARのライブラリは使用しません。 あれをダウンロードしたけど、 これが無い!非推奨関数が・・
もうありません require,include地獄もありません
google trend等で検索すると、 最近急激に注目度が高くなりました 注目度故に色々話題も付きません Facade誤用?(proxy pattern)
static function? bootstrap very slow?
信憑性はあまりありません
ソースコード、マニュアルなどを 読む事で解決される問題ばかりが 取り上げられていますので、 必ず中身を見る事が大事です (Laravel以外でも同じです)
分からなければ聞きましょう!!
Laravelとは
MVC採用ですが、厳密なMVCではありません
アーキテクチャ
modelview
controller
フルスタック
security
ORM
router
request
SSH
migration
view
container
etc…
cache
世界のLaravelGitHubでは現在スターが10,000を超え PHPフレームワークの中で最も注目されているかもしれません。 *人気だけがすべてではないので実際に使ってみて下さい
Laravelcomposerを用いたフレームワーク 依存パッケージの管理や、 構成しているコンポーネントの差異によるエラーや問題が少ない *ただし、バージョンアップ時にクラス名が変更される場合もありますが、 アップグレード方法が正確にアナウンスされます
ライブラリの追加や、 フレームワークに組み込むのも、癖が無くスムーズ ストレスがたまりません Symfonyコンポーネントを利用し、複雑さを巧くラップ
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
LaravelLaravelのパッケージ開発は誰でも可能で、 様々なパッケージが世界中のユーザーから提供されています。 海外で利用している開発者が多いため、 日本とは違う技術や、新しいものを吸収したり、 刺激を受ける事もある、大きなコミュニティがあります
Vagrantで利用できるboxも公式で提供されています Ubuntu 14.04, PHP 5.5, Nginx, MySQL Postgres, Node (With Bower, Grunt, and Gulp) Redis, Memcached, Beanstalkd
LaravelMySQL, postgreSQL, sqlite, SQL Severに対応 コマンドラインツール(Artisan)を使ってmigrate! unitTestしやすい構造 ほとんどの機能を入れ替えて独自のクラスに変更したり、 コアクラスを拡張したりといった事が簡単にできる様になっています !デフォルトで用意されている認証クラスで簡単にログインを実装
Laravel unittestMockeryを使用すると便利です https://github.com/padraic/mockery Laravel Testing Decoded 日本語版 https://leanpub.com/laravel-testing-decoded-japanese Laravelに限らず、テスト本としてオススメです
LaravelHHVMでも動作します 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
主な機能紹介
ご紹介する各機能や サンプルコードは
https://github.com/ytake/Tutorial.Application で公開しています
RouterLaravelのルーターは多くのMVCフレームワークの様な、 domain/コントローラー/メソッド/ の様な形式ではありません。 HTTPメソッドとコントローラー、メソッドを組み合わせ、 自由に定義する事ができ、 routerだけで小さなアプリケーションを作る事も可能です
Route::get(‘uri’,‘controller@method’)Route::post(‘uri’,‘controller@method’)Route::put(‘uri’,‘controller@method’)Route::delete(‘uri’,‘controller@method’)
Router
Sinatra の様なルーターClosure利用で簡単な記述方法
Controller特に特筆する様なものはありませんが、至ってシンプルです
1.RESTに対応したコントローラー 2.簡単なAPI設計 3.function名はhoge_index など 制約はありません
Viewbladeテンプレート / Smartyやtwigも使用できます
Smarty/Twig等と同様に
レイアウト対応等も簡単
ModelLaravelではModelに Eloquent(エロクアント), query builder, ベーシックなPDO 3種が用意されています !ルーターと同様にトランザクションもClosureを用いて実装したり、 Eloquentを使って簡単に実装したり、 複雑なクエリはベーシックなものを利用したり、 実装内容などで選択が可能です。 !パッケージには、mongoDBやOracleに対応させたもの等があります
Model(Query builder)
cacheと組み合わせたり、
簡単なpagerが利用できます
Model(Eloquent)
Model(ベーシック)PDOを利用しているので、 同様にSQL文を記述します
(プリペアドステートメント) ただし、pagerやcacheは組み合わせて実装します(簡単)
FacadesLaravelのFacade(ファサード)は、 本来の複雑な処理を隠して、シンプルなI/Fを提供するものではなく、 プロキシパターン(GoF)と思って下さい !他のフレームワークとは若干アプローチ方法が異なる記述方法を適用
Route::get() Input::get() View::make()
App::make()Redirect::to()
Session::get()
英語の文章を書く様な記述方法 それまでに無いシンタックス 簡単な、わかりやすい記述方法
あれstatic function?
静的なメソッドではありません
class_aliasと__callStaticを 組み合わせてコンテナからインスタンスを
取得
$thisを用いた記述が好みでしたら、その様に記述する事も可能です
ただしフレームワーク自体の 実行速度は少し遅いです
シンプルで簡単な記述方法で、 初めての方にも優しく
Closureと組み合わせて、 独特な記述方法を提供
コ、コンテナ?
でたな、コンテナ
クラスで実装すべきメソッドたちを定義して(interface)、 使用するクラスで
直接インスタンスを生成せずに ほかで関連性を定義付けて実行
よくあります !
このクラスは、 あれのインスタンスがないと 動かないんだよねぇ・・
interface
controller
クラスは何でもいいけど
getUser()があればイイヨ!
getUserがあればDBでも
getUserがあればRedisでも
生成するインスタンスを 決定するために どこかで設定しよう
Laravelならそんなことも 簡単解決 学んで習得
Laravelはシンプル且つ、 手軽で簡単、
強力なDIを備えています
Ioc ContainerLaravelでは、 コンストラクタ・インジェクションによる依存性の解決方法を提供 依存をクラス外で定義し、実行時に定義したクラスが呼ばれます !クラスそのものを入れ替える事はもちろん、 interfaceを用いて拡張性のある開発が可能です テストしやすい環境を提供 !
Ioc Container関係性を定義するだけ シンプル簡単
Ioc Container依存の解決は、コンストラクタで指定されたものだけではなく、 さらにその先の依存も解決してくれます !コントローラーからモデルを利用する場合等に利用してみましょう !その他に、シンプルにインスタンスを生成したり、シングルトンなども 提供されています !LaravelはほとんどがIocContainerを使って、 それぞれの機能をコンテナに格納して、 必要なときに必要なインスタンスを生成する様に活用されています フレームワーク内のソースを読む事で色々な発見がありますので、 是非目を通してみて下さい
他にも色んな機能がありますが、 どれも簡単でシンプルな機能、
APIです
デモ1 シンプルなアプリケーション https://github.com/ytake/Tutorial.Application
をダウンロードして実際に覗いてみて下さい ログイン、管理画面、投稿や簡単なフィルターを実装している
簡易ブログ投稿アプリケーションです
その他
Laravelに対応したcapistrano/laravelが公開されています https://github.com/capistrano/laravel !
ホスティングがセットになったforgeというサービスが 公式で開始されました https://forge.laravel.com/
Laravelで構築されたサービス等が載っています 日本国内のものは無いと思いますが、作ったら登録してみましょう! http://builtwithlaravel.com/ !
Laravelをベースにした、協力なCMSがリリースされています GitHubでも公開されていますので、是非ご覧下さい http://octobercms.com/
その他
開発時のヒント
ポイント1キャッシュや、テンプレートのキャッシュ、 セッション等がapp/storage内に書き込まれます。 インストール後に実行権限を与えてください 「インストールしたけど真っ白!」という場合のほとんどがコレです
このクラスはどこに?モデル = データベース専用ではありません 専用だと思っていると、こういう疑問が必ず起こると思います。 コントローラーを太らせる? いえ、modelsディレクトリを削除して、 自由にディレクトリを構成し直してみてください ドメインモデルパターンを採用して開発すると良いかもしれません
ポイント2現在、インストール後はcomposerのオートローダーで classmapになっていますので、 PSR-0 or PSR-4 に変更するのをおすすめします コントローラーやモデル等クラスを追加する度にcomposer dump-autoloadを叩く必要が有るため、面倒臭いです またパフォーマンスも向上します。
Laravel4のエイリアスローダーはグローバル名前空間で有効になる為、 コントローラーやモデル等、名前空間を利用する場合は Facadeの先頭に\を付けなければなりません !公式通りの記述方法がお好みであれば、useを記述するか、 パッケージを利用するなどで簡単に対応出来ます
ポイント3高品質なLaravelパッケージもあわせて使ってみましょうジェネレーター : Laravel-4-Generators セキュリティ周り : cartalyst/sentry IDE コード補完 : barryvdh/laravel-ide-helper *Laravelはその記述方法から、IDEを使用しても補完されません。 ide_helperは実装の大きなヒントになりますので、導入をお勧めします
Ioc container, 依存をまとめて定義するproviderを使ってみる お気に入りのライブラリがあれば、ごっそり入れ替えてみる、 フォルダ構成も好みに変更する事で、 リファレンスに記載されているだけが全てではないLaravelの利用方法を見つける事ができます。 !Twitterで困ったアピールすると誰かが答えてくれます?
ポイント4Laravelはphp artisan optimize でフレームワークのソースをcompileして動きます ユーザーが実装したクラスは対象になりませんので、 app/config/compile.php に compileしたいクラスを追記してみましょう
新しい技術を利用する場合も モダンなPHP+Laravelで簡単実装
デモ2 websocketアプリケーション
https://github.com/ytake/laravel-websocket
日本語ドキュメント
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つは、 これさえあれば何でも作れる!できる!というくらいの良い内容です。
内容の良い電子書籍が多数あります
わからない事を日本語で聞きたい・・
日本語訳したサイト
Laravel フォーラム : 日本語で質問が!ミートアップや勉強会の募集にもお使いください http://io.laravel.jp/forum !Laravel トリックス : Tipsサイト http://tricks.laravel.jp !海外フォーラムは活発ですが、日本ではあまり活用されていないので是非お願い致します。 !近々レシピサイトの翻訳します!
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等で聞いてみて下さい。
ご清聴ありがとうございました
Yuuki Takezawa