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
cloudControl
Windows Azure
Google App Engine
PaaS
webserver
webserverも選択する時代
様々な環境で動かすときに、
悩ませる過去のフレームワーク達
server error 500
PHP Fatal error: require_once()
Fatal error: Class 'Hoge' not found
真っ白だと・・・
etc…
色んな環境で楽に動いてくれる
モダンなPHP環境
そんなモダン環境で動かす
フレームワーク
creator
FuelPHPや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
世界のLaravel
GitHubでは現在スターが10,000を超え PHPフレームワークの中で最も注目されているかもしれません。
*人気だけがすべてではないので実際に使ってみて下さい
Laravel
composerを用いたフレームワーク
依存パッケージの管理や、
構成しているコンポーネントの差異によるエラーや問題が少ない
*ただし、バージョンアップ時にクラス名が変更される場合もありますが、
アップグレード方法が正確にアナウンスされます
ライブラリの追加や、
フレームワークに組み込むのも、癖が無くスムーズ
ストレスがたまりません
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
Laravel
Laravelのパッケージ開発は誰でも可能で、
様々なパッケージが世界中のユーザーから提供されています。
海外で利用している開発者が多いため、
日本とは違う技術や、新しいものを吸収したり、
刺激を受ける事もある、大きなコミュニティがあります
Vagrantで利用できるboxも公式で提供されています
Ubuntu 14.04, PHP 5.5, Nginx, MySQL
Postgres, Node (With Bower, Grunt, and Gulp)
Redis, Memcached, Beanstalkd
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に限らず、テスト本としてオススメです
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
主な機能紹介
ご紹介する各機能や
サンプルコードは
https://github.com/ytake/Tutorial.Application
で公開しています
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’)
Router
Sinatra の様なルーター
Closure利用で簡単な記述方法
Controller
特に特筆する様なものはありませんが、至ってシンプルです
1.RESTに対応したコントローラー
2.簡単なAPI設計
3.function名はhoge_index など
制約はありません
View
bladeテンプレート / Smartyやtwigも使用できます
Smarty/Twig等と同様に
レイアウト対応等も簡単
Model
LaravelではModelに
Eloquent(エロクアント), query builder, ベーシックなPDO
3種が用意されています
!
ルーターと同様にトランザクションもClosureを用いて実装したり、
Eloquentを使って簡単に実装したり、
複雑なクエリはベーシックなものを利用したり、
実装内容などで選択が可能です。
!
パッケージには、mongoDBやOracleに対応させたもの等があります
Model(Query builder)
cacheと組み合わせたり、
簡単なpagerが利用できます
Model(Eloquent)
Model(ベーシック)
PDOを利用しているので、
同様にSQL文を記述します
(プリペアドステートメント)
ただし、pagerやcacheは

組み合わせて実装します(簡単)
Facades
Laravelの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 Container
Laravelでは、
コンストラクタ・インジェクションによる依存性の解決方法を提供
依存をクラス外で定義し、実行時に定義したクラスが呼ばれます
!
クラスそのものを入れ替える事はもちろん、
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で困ったアピールすると誰かが答えてくれます?
ポイント4
Laravelは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

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