Laravel Advent Calendar 振り返り

## 最終日ですよ
メリークリスマス！[Laravel Advent Calendar 2014](http://qiita.com/advent-calendar/2014/laravel)最終日担当の @localdisk です。クリスマスに予定が入っていないので当日に書いています。やりましたね。

## Advent Calendar を振り返って
今年の Advent Calendar を振り返って思うのは、やはり参加者が増えたことでしょうか。[去年](http://qiita.com/advent-calendar/2013/laravel)はアレでしたからね。

- @localdisk が7日
- @HiroKws が6日
- @ytake が4日

という3人で約7割消化するというね、無理矢理感がすごかった。それに較べて今年は多くても僕が3日だけなんでね。かなり楽になりました。それにやはり参加者が多いと読者として楽しみが多いです。どのエントリも面白かった！

…で、まぁ残念な点ですが完走できなかったことですかね（[自分の事を棚に上げるのは得意です](http://qiita.com/localdisk/items/55c5c20299333f5bf160))。まぁ忙しいですからね。しょうがない部分はあります。ネタに走ってもよかったのよ？

というわけで、皆さんに書いて頂いたエントリを振り返っていきましょう。未読の方はどれも参考になると思うのでよかったら読んでみて下さいね。

### 1日目 : [Laravel5 route, event アノテーション](http://qiita.com/ytake/items/1c6eb4aae06aaad554aa)

Laravel5 新機能ネタ1発目ですね。この部分は結局どうなるかなぁと注意深く見守ってます。この機能がコミットされた当初は全面的に使っていく感じで `routes.php` が削除されたこともありました。現在はオプション扱いで「使いたい人はどうぞ」みたいになってます。
このエントリでルート定義時に `$router->get` という記述が使われていますが、この `$router` は `App\Providers\RouteServiceProvider` から**来ていました。**来ていましたと過去形なのは `RouteServiceProvider`の実装が少し変わったようで現在 `routes.php` は従来の `Facade` を使用したものに変更されています。

### 2日目 : [フロントエンド片手間ンによる Laravel Elixir 入門](http://qiita.com/localdisk/items/72bcbe71734253d1416f)
僕が書いたやつ。これ書くために初めて `node.js` と `gulp` 入れました。Advent Calendar 駆動で勉強してエントリ起こしました。ここ僕より詳しい人たくさんいると思います。

### 3日目 : [Laravel5 Testing, use Contracts](http://qiita.com/ytake/items/eab27f60e756f9a0abcd)
地味ですが、Laravel5 の目玉のひとつと言えると思います。これあるのとないのではコア部分を拡張する時の手数が全然違ってきます。
で、さらに素晴らしいのは、これ別に知らなきゃ知らないで別に困らないです。あくまで機能の拡張や置換、フレームワークの理解には必要なことですが、プロトタイピング等ライトに使う場合は特に覚える必要はありません。

### 4日目 : [Laravel Socialite で簡単ソーシャルログイン](http://qiita.com/localdisk/items/2e2724f31864fd49b675)
続き書く書く詐欺エントリ。年末休みにやっときます。すいません。

### 5日目 : [Laravelでいくつかサービス作ってみた話](http://qiita.com/syossan27/items/25686053cbf48c89dd4d)
@syossan27 の Laravel を実戦投入した話。僕、実はあんまり仕事で Laravel 使ってないので羨ましかったり。あと、最後に書かれてるように Laravel 始めて「わかんねぇ！」ってなったら twitter でつぶやいて見てください。僕、`Laravel` で1日1回は検索してるので。見つけ次第お答えしますので。

### 6日目 : [派遣労働者から見た、「まずはこう使え、DIコンテナ」](http://qiita.com/morisuke/items/fcd9027eb5250c30dbba)
現場のつらみがにじみ出てるエントリですね。これ読んだ時、過去の現場でとんでもソースに遭遇してウッってなった時のことを思い出しました。
Laravel5 からメソッドインジェクションがサポートされますので、コンストラクタで引数がえらいことになるのは、これからなくなると思います。あとは `Mockery` をうまく使ってテストを頑張って回してください…。

### 7日目 : [connection を切り替えて relation の loading をしたかった時の話](http://qiita.com/fd0/items/9818e898aa1743c40312)
アプリケーションの中で動的にコネクションを切り替えたい時の苦肉の策…といった感じのエントリですね。マスター/スレーブ構成なら [Read/Write Connection](http://readouble.com/laravel/4/2/0/ja/database.html#read-write-connections) 使ったり、決めうちなら `Model` の `connection` フィールドを定義しておくということができるんですが、こういったケースは `Eloquent` では逆に複雑になっちゃうので `Query Builder` を使うのがおすすめです。

```php
DB::connection('slave')...
```

といった感じで。

### 8日目 : [Laravel5 コマンド登録とスケジュール機能について](http://blog.takahash.com/entry/2014/12/08/Laravel5_%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E7%99%BB%E9%8C%B2%E3%81%A8%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E6%A9%9F%E8%83%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

これめっちゃ便利ですよね。以前から似たようなことは `"indatus/dispatcher"` で実現できてるんですが、今回はソースを取り込むのではなく自力実装した模様。これで `cron` に色々定義していたのが一元化できて管理しやすくなりました。

### 9日目 : [自分流 Laravel 4 アプリケーションアーキテクチャ](http://www.1x1.jp/blog/2014/12/laravel-4-application-architecture.html)
これ見たとき「なるほどなー」って声がでました。素で。会社で。Laravel をディープに使う人ってあまり Laravel デフォルトのディレクトリ構成を使わない傾向があるように思います。

デフォルトの構成だと意図的に名前空間を使ってない部分があって手軽な反面、名前がかぶってしまったらクラス名を変更する他ないですからね。

このエントリは PSR-4 をフルに使用することによってそういった問題を回避。Service層を設けて `Controller` と `Model` が結合しないようにしています。この Service層を用いる方法や、最近はやりの Repository パターンを見ると、昔 SIer で Java 開発していた頃を思い出します。

この他 Trait の使用など知見にあふれています。こういうのって実際の開発で試行錯誤しないと出てこないだろうなと。すごい。

良し悪しはともかくとして最近の PHP は J2EE(JavaEEじゃなくて) の頃のトレンドの後追いをしている感がありますね(DIとかAOPとか).


続きは来年で！このエントリをストックしておくと変更が通知されるので、続きが気になる方はぜひ。

良いお年を