狠狠撸

狠狠撸Share a Scribd company logo
2013.05.24
Takashi Ohida
LARAVEL4
HAPPY HACKING
13年5月29日水曜日
目次
自己紹介
PHP / フレームワーク歴
Laravel4でつくってみた
Laravel4のすごいところ紹介
13年5月29日水曜日
自己紹介
13年5月29日水曜日
自己紹介
名前:大日田 貴司(オオヒダ タカシ)
所属:都内ウェブ系企業
職業:開発、企画
コード書いてません(^_^;)
サービス設計とかUI/UXとか
13年5月29日水曜日
PHP歴
PHP歴 8年くらい
Python / Rubyとかなんとなくわかる
GAE / Railsとか少し触ったことある
色々あるけどPHPはかわいい
13年5月29日水曜日
フレームワーク歴
僕がPHPをはじめた頃
外の会社からできるプログラマが手伝いに来て
言った
「まずフレームワークをつくりましょう」
13年5月29日水曜日
フレームワーク歴
「フレームワーク?なにそれ?おいしいの?」
13年5月29日水曜日
フレームワーク歴
当時はまだRailsなど存在せず
PHP界隈には、JavaのStrutsに影響をうけたフレー
ムワークが出てきた頃かもという時代
13年5月29日水曜日
フレームワーク歴
フレームワークとは何かがんばって調べた
MVC、アーキテクチャ設計、デザインパターン、
etc ...
13年5月29日水曜日
フレームワーク歴
概念のすべてを理解しきれなかったけど
「フレームワークってなんだかかっこいい!」
13年5月29日水曜日
フレームワーク歴
二人でフレームワークをつくった
今思えばとても原始的なものだったけど
フレームワークをつくるのはすごく楽しかった
し、勉強になった
13年5月29日水曜日
フレームワーク歴
そんなこんなでフレームワークに関心を持つよう
になった
13年5月29日水曜日
フレームワーク歴
Railsが出た頃さわってみて、超すごい!と興奮した
PHPでいいのないのか
なかった
つくった
Railsのソースを読んでPHPでそれっぽく実装
13年5月29日水曜日
フレームワーク歴
自作フレームワーカーだったので
CakePHPとか
CodeIgniter / FuelPHPとか
Symfonyとか
ちゃんと使ったことない
自作も大変なのでイイのに乗り換えたい願望
13年5月29日水曜日
フレームワーク歴
PHP歴 ≒ フレームワーク歴
自作フレームワーク()
メジャーどころはなんとなく知ってる
けどちゃんと使ったことは無い
まとめ
13年5月29日水曜日
LARAVEL3
13年5月29日水曜日
LARAVEL3
去年のちょうど今頃、HackerNewsでみかけた
https://news.ycombinator.com/item?id=4029427
13年5月29日水曜日
LARAVEL3
シンプルでクリーンな設計思想
軽量だがひと通りの機能は っている
拡張性(bundles)もある
が、
13年5月29日水曜日
LARAVEL3
Staticメソッド多用
新しいフレームワークって色々不安
命名規則が好みではない
function action_index()とか
13年5月29日水曜日
LARAVEL3
なんか惜しいというか
そんなにビビビッとこなかった
名前はかわいいのだけれど???
13年5月29日水曜日
LARAVEL3
(??ω?`)
13年5月29日水曜日
LARAVEL3
そして、ときは流れ…
13年5月29日水曜日
LARAVEL4
13年5月29日水曜日
LARAVEL4
最近、ふと思った
ブログでも書こう
どうせなら自分でつくろう
全然プログラミングしてないし
リハビリもかねて
13年5月29日水曜日
LARAVEL4
フレームワーク何にしよう?
13年5月29日水曜日
LARAVEL4
軽量系のフレームワークをいくつか試した
Slim
Silex
Phalcon(micro)
FuelPHP
...
13年5月29日水曜日
LARAVEL4
Laravel4のベータが出ていた
ので試した
13年5月29日水曜日
LARAVEL4
3の思い出
(使ってないけど)
13年5月29日水曜日
LARAVEL4
4をみてみたらびっくり
3でイケてなかった点が
悉く「解消」していた
13年5月29日水曜日
LARAVEL4
もちろん良かった点はそのままに
13年5月29日水曜日
LARAVEL4
「ららべる子?」
「顔はかわいいんだけど」
「ちょっとおてんばな性格がなぁ…」
13年5月29日水曜日
LARAVEL4
そんなららべる子と1年ぶりに偶然再開したら
13年5月29日水曜日
LARAVEL4
かわいらしさはそのままに
とても品のよい子に成長していた ...!
13年5月29日水曜日
HAPPY HACKING
with Laravel4
13年5月29日水曜日
HAPPY HACKING
楽しいって何か
書いてて楽しい、嬉しい
ラクに書ける、シンプルで書きやすい
わかりやすい、悩まない
思い通りに操れる
13年5月29日水曜日
HAPPY HACKING
楽しいって何か
プログラマーズハイ?高揚感
スーパーハカーな気分
マジカルな感じ?支配感
ゆけおれのコードよ
13年5月29日水曜日
HAPPY HACKING
Laravelにあるもの
しっかりした枠組み
プログラミングを楽しくしてくれる仕組み
プログラミングのレベルを
底上げしてくれるような思想
13年5月29日水曜日
HAPPY HACKING
IoC Containerによるパワフルで賢い依存性解決
シンプルでクリーンな設計思想?記述
軽量で追いやすいコアコード
実績のある基盤(symfony component)
柔軟性、拡張性
13年5月29日水曜日
HAPPY HACKING
Staticメソッド多用
IoC Container x Facadeにより解決しました
新しいフレームワークって色々不安
信頼と実績のSymfony Componentが基盤になりました
命名規則が好みではない
好みな感じ(PSR-1準拠)になりました
Laravel3のとき気になってたあれらはどうなったのか
13年5月29日水曜日
HAPPY HACKING
もはやハッピーな感じしかしない
13年5月29日水曜日
HAPPY HACKING
ということで
Laravel4でブログをつくってみました
13年5月29日水曜日
POCHIKA
ポーチカ
13年5月29日水曜日
POCHIKA
Laravel4でつくった軽量ブログエンジン
データベースは使わず、markdownファイルを変換
jekyll風味(けどstatic ?le generatorではない)
php的に動的に動作する
キャッシュとかプラグインとか
13年5月29日水曜日
POCHIKA
使ってる機能
Routing
Con?g
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日水曜日
http://github.com/ohida/pochika
POCHIKA
13年5月29日水曜日
LARAVEL4
13年5月29日水曜日
LARAVEL4
IoC Container / Facade
Illuminate / composer / symfony components
psr-0(autoload) / psr-1(coding standard)
その他色々パワーアップ
3からの変更点
13年5月29日水曜日
LARAVEL4
IoC Container
... どのように依存性を解決するか
Facade
... シンプルで強力なインターフェイス
おまけ:UnitTest
... IoC ContainerとFacadeが必要な理由
13年5月29日水曜日
IOC CONTAINER
13年5月29日水曜日
IOC CONTAINER
IoC ... Inversion of Control
制御の逆転
13年5月29日水曜日
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日水曜日
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 ?exibility as dependency implementations may be swapped easily.
http://four.laravel.com/docs/ioc
LaravelのIoCコンテナはクラス依存性解決のためのパワフルなツールです。
DI(依存性の注入)はコードによるクラス解決を取り除き、代わりにアプリ
ケーションの実行時に依存性を注入します。このことにより依存の実装を容
易に入れ替えられるという柔軟性を得ることができます。
13年5月29日水曜日
IOC CONTAINER
Basic Usage
13年5月29日水曜日
IOC CONTAINER
$foo = new Foo;
13年5月29日水曜日
IOC CONTAINER
$foo = App::make('Foo');
13年5月29日水曜日
IOC CONTAINER
App::bind('foo', function() {
	 return new Foo;
});
$foo = App::make('foo');
13年5月29日水曜日
IOC CONTAINER
$view = new SmartyView;
"
App::bind('view', function() {
$smarty = new SmartyView;
$smarty->..
return $smarty;
});
$view = App::make('view');
13年5月29日水曜日
IOC CONTAINER
$view = new TwigView;
"
App::bind('view', function() {
return new TwigView([
..
]);
});
$view = App::make('view');
13年5月29日水曜日
IOC CONTAINER
クラスを「直接」呼ぶのではなく
IoC Containerを通して「間接的」に呼び出す
13年5月29日水曜日
IOC CONTAINER
クラスが必要になった時
IoC Containerさんがよしなにつくってくれる
13年5月29日水曜日
IOC CONTAINER
僕:IoCさん、僕がfeedくれっていったらAtomFeedのこと
ですからよろしくですよ
IoCさん:(o e o)アイヨ
~そしてその時がきた~
僕:「feedくれ!」
IoCさん:(o e o)つ アイヨ?~【AtomFeed】
13年5月29日水曜日
IOC CONTAINER
登録
App::bind('feed', function() {
	

 return new AtomFeed;
});
使う
$feed = App::make('feed');
echo $feed->generate(); //render xml/atom
13年5月29日水曜日
IOC CONTAINER
登録
App::bind('feed', function() {
	

 return new RssFeed;
});
使う
$feed = App::make('feed');
echo $feed->generate(); //render xml/rss
13年5月29日水曜日
IOC CONTAINER
singletonもIoCが解決
App::singleton('foo', function()
{
return new FooBar;
});
13年5月29日水曜日
IOC CONTAINER
既にあるインスタンスを登録することも
$foo = new Foo;
App::instance('foo', $foo);
13年5月29日水曜日
IOC CONTAINER
Automatic Resolution
The IoC container is powerful enough to resolve
classes without any con?guration at all in many
scenarios.
IoCコンテナは強力なので、多くの場合においてクラス解
決のために何かをする必要はありません。
13年5月29日水曜日
IOC CONTAINER
class FooBar {
public function __construct(Baz $baz)
{
$this->baz = $baz;
}
}
$foobar = new FooBar(new Baz);
13年5月29日水曜日
IOC CONTAINER
class FooBar {
public function __construct(Baz $baz)
{
$this->baz = $baz;
}
}
$foobar = App::make(‘FooBar’);
13年5月29日水曜日
IOC CONTAINER
class FooBar {
public function __construct(PiyoInterface $baz)
{
$this->baz = $baz;
}
}
IoCさん?(o e o)Interfaceかー 解決できねー...orz
なんていうことはなく
13年5月29日水曜日
IOC CONTAINER
App::bind(‘PiyoInterface’, Poyo);
# PiyoInterfaceが呼ばれたらPoyoのことなんだからね
13年5月29日水曜日
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日水曜日
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日水曜日
Practical Usage
実用例
IOC CONTAINER
13年5月29日水曜日
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日水曜日
IOC CONTAINER
$orders = new OrderRepository();
new OrderController($orders);
App::bind(‘OrderRepository’, ‘MockOrders’)
App::make(‘OrderControler’)
普通に書くとデータベースへの接続が発生
IoCを使うとスタブで置き換えられる
13年5月29日水曜日
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日水曜日
IOC CONTAINER
まとめ
IoCとは、Inversion Of Control(制御の逆転)
よしなにクラスをつくってくれる
よしなに依存関係を解決してくれる
テストもしやすくなる
13年5月29日水曜日
FACADE
13年5月29日水曜日
Facade(ファサード)とは
「建物の正面」を意味する。
(wikipediaより)
FACADE
13年5月29日水曜日
FACADE
なんの正面か = クラス
13年5月29日水曜日
FACADE
Page::find('about');
13年5月29日水曜日
FACADE
Behind the scene
13年5月29日水曜日
FACADE
class Page {
private static $pages;
public static function find($name)
{
return self::$pages[$name];
}
}
# なるほどstaticね。Pageクラスの中身はこんな感じかな
Page::find('about');
13年5月29日水曜日
FACADE
Page::find('about');
class Page {
private $pages;
public function find($name)
{
return $this->pages[$name];
}
}
# ちがうよ。Pageクラスはstaticメソッド持ってないよ
13年5月29日水曜日
FACADE
Page::find('about');
Pageクラスではなく、実は
Facadeが呼ばれている
13年5月29日水曜日
FACADE
Page::method()って書いたら、
普通はPageクラスがよばれる
そして ”そのメソッドはstaticに呼べません”
というエラーが出る
Facadeを介すには?
13年5月29日水曜日
FACADE
Page::method()って書いたら、
Facadeの方よんでねとLaravelに教える
app/con?g/app.phpに書く
aliases = [
‘Page’ => ‘FacadesPage’,
];
13年5月29日水曜日
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日水曜日
FACADE
Page::find(‘about’);
"
Pageファサード
"
App::resolve(‘page’)->find(‘about’);
13年5月29日水曜日
FACADE
$this->input->get(‘hoge’);
"
Input::get(‘hoge‘);
13年5月29日水曜日
FACADE
$view = new View;
$view->render(‘index.html’);
"
View::make(‘index.html’);
13年5月29日水曜日
FACADE
どこからでも単独で呼び出せる
$thisって誰?を意識しない
誰でもいいしいなくてもいい
疎結合
依存性、コンテキストの排除
統一されたクリーンなインターフェイス
$this->hogeだったりnew Fuga()だったりしない
13年5月29日水曜日
FACADE
まとめ
Facadeを利用することで、シンプルで強力な
インターフェイスでクラスを扱うことができる
13年5月29日水曜日
FACADE
Laravel4はIoC ContainerとFacadeがキモ
Laravel4使うなら最初に理解するべきポイント
13年5月29日水曜日
FACADE
Router
Router::get(‘/’,‘IndexController@index’);
Event
Event::?re(‘post.converted’);
View
View::make(‘index.html’, $payload);
13年5月29日水曜日
UNITTEST
13年5月29日水曜日
UNITTEST
テストしやすい/しにくいってなにか
Staticメソッドでテストが難しいのはなぜか
13年5月29日水曜日
UNITTEST
UnitTestではテスト毎に初期化されることが前提
前のテストの影響をうけるとまともなテストにな
らない
13年5月29日水曜日
UNITTEST
staticオブジェクトにはconstructorとdestructorが
ない
初期化処理と終了処理が行われない
始まりと終わりがない
ひとつのテストによって生じた状態をクリアで
きない
13年5月29日水曜日
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日水曜日
まとめ
13年5月29日水曜日
まとめ
Laravel4は3のときのよさ(クリーンさとか)はその
ままに
IoC Containerとかcomposerで中身がおとなになった
テストもしやすい(規模に関わらずテストは必要)
PHPもここまで来たかくらいイケてる感じで書ける
13年5月29日水曜日
LARAVEL4たのしい☆彡
のでみんなつかおう
(自分に合うかは見極めよう)
13年5月29日水曜日
13年5月29日水曜日
http://solvalou.net/
http://twitter.com/ohida
http://www.facebook.com/takashi.ohida
http://github.com/ohida
Takashi Ohida
13年5月29日水曜日

More Related Content

Laravel4 Happy Hacking