こんにちわ、ITプロパートナーズのエンジニアのくまモンエンジニア(@miyakey7)です。
Laravel駆動転職(LDJC)により今年1月にITプロパートナーズにジョインしました。
初めて実務でLaravelを使った開発を行い、あっという間に11月になってしまいました。
そうですね、気になりますよね?
2018年、Laravelにはどんな変化があったのか気になりますよね?
今回は少し早いですが2018年のLaravelに関する出来事や気になる変更点などを自分なりにピックアップして書きます!
(11月以降は随時追記していきたいと思いますw)
- 2018年1月のLaravel
- 2018年2月のLaravel
- 2018年3月のLaravel
- 2018年4月のLaravel
- 2018年5月のLaravel
- 2018年6月のLaravel
- 2018年7月のLaravel
- 2018年8月のLaravel
- 2018年9月のLaravel
- 2018年10月のLaravel
- 2018年11月のLaravel
- 2018年12月のLaravel
- 2019年のLaravel
- 最後に
2018年1月のLaravel
Laravel 5.5.29→33
①ModelにqualifyColumn()メソッドが追加されました
このメソッドは引数で指定したカラム名をモデルのテーブルで修飾します。
// 元々の記述
$this->getTable().'.'.$this->getKeyName();
// qualifyColumnを使った記法
$this->qualifyColumn($this->getKeyName()) ;
// 使用例
$article->qualifyColumn('title'); // -> articles.title
使った事無いという方、Eloquent内でしっかり動いております!
気になる方は以下を確認ください!
②query builderにdoesntExists()メソッドが追加され...マジか
そうですねexists()はよく使うのですが5.5.33より、doesntExists()が追加されております!
ちなみに一瞬notExists()という名前になりそうでした。
if( !User::where('email', 'user@example.com')->exists() ){
}
↓
if( User::where('email', 'user@example.com')->doesntExists(){
}
③ModelのwithTrashed()メソッドに引数指定が追加されました
withTrashed()メソッドは論理削除したデータを取得データに含める場合に使用します。
今回の変更により、元々以下のようにフラグで切り分けて使っていたのを
public function index(Request $request) { $query = User::query(); if ($request->showDeleted) { $query->withTrashed(); } return $query->get(); }
下記のようにwithTrashed()メソッドの引数に依存して使用する/しないを切り替える事が出来ます。
public function index(Request $request) { return User::withTrashed($request->showDeleted)->get(); }
2018年2月のLaravel
Laracon Online 2018
「Laracon Online 2018」が開催されました!
Laravelのオンラインカンファレンスは毎年開催されています!
今年の目玉はやはり、Laravel 5.6のリリースでした!
Laravel 5.6 Release
①log機能が改良されました
logging.phpが追加され、より細かい設定を行う事ができるようになりました。
カスタマイズで簡単にslackにログを通知することも出来ます。
チャンネルに「slack」を指定
'stack' => [
'driver' => 'stack',
'name' => 'channel-name',
'channels' => ['single', 'slack'],
],
チャンネル設定で「slack」の設定を記述。下記の場合クリティカルレベルのログのみslackに通知する事が出来ます。
'channels' => [
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Log通知',
'emoji' => '',
'level' => 'critical',
],
],
②Eloquentの日付データのキャスト機能追加されました
$castsを定義することで取得時指定したデータ形式にキャストされます。
protected $casts = [
'birthday' => '誕生日:Y-m-d',
'logined_at' => 'datetime:Y-m-d H:00',
];
③Blade Componentにエイリアス名が付けれるようになりました
resources/views/components/alert.blade.phpに以下のような記述をします。
<div class="alert alert-danger">
{{ $slot }}
</div>
AppServiceProviderのbootに以下のような記載をします。
Blade::component('components.alert', 'alert');
以下のように記述することが出来ます!
@component('alert')
<p>アラートメッセージ</p>
@endcomponent
// 以下のような省略も出来ます
@alert
<p>アラートメッセージ</p>
@endalert
④bootstrap4対応になりました
時代は4ですね。
⑤署名付きURLの発行がURL Generationの機能に追加
使い方は以下にまとめてあります!
Under Construction Package(4桁数字認証用パッケージ)
4桁数字認証を簡単に実装できるパッケージが公開されました。
5.6以降から使えます。
使い方は以下にまとめてあります!
2018年3月のLaravel
Laravel 5.6.7→13
①MySQLのsounds likeがサポートされました
以下の書き方で利用できます。
$query->where('name', 'sounds like', 'John Doe');
②@dumpがbladeに実装されました
元々あった@ddとの違いは、処理が止まらないことですね。
③Mailablesによるメールへの添付ファイル設定が簡単に行えるようになりました
Coming in next release of Laravel 5.6… easily attach files from Storage (S3, etc.) to mailables! 🔥 Thanks @reinink for the inspiration. pic.twitter.com/gRaLDivnNJ
— Taylor Otwell 🏄♂️ (@taylorotwell) March 7, 2018
④query builder のメソッドにが追加されましした
orWhereDay()、orWhereMonth()、orWhereYear()が追加されました。
\App\User::whereDay('updated_at', '=', 1)
->orWhereDay('updated_at', '=', 2);
⑤bladeに@elseauth()、@elseguestが追加されました
bladeでの切り分けが容易にできます。
@auth('administrator')
<p>管理者</p>
@elseauth('standard')
<p>一般ユーザー</p>
@endauth
@guest('user')
<p>ゲストユーザー</p>
@elseguest('subUser')
<p>サブゲストユーザー</p>
@endauth
⑥セキュリティパッチがリリースされました
Laravel 5.6.15と5.5.40が対策版のバージョンになります。
Laravel meetup Tokyo Vol.10開催
10回目で初参加しました。とても勉強になりモチベーションが上がる楽しいmeetupです。
laravel-meetup-tokyo.connpass.com
2018年4月のLaravel
Laravel 5.6.16→19
サブクエリ用のメソッドが追加されました!
joinSub()、leftJoinSub()、rightJoinSub()、が追加されました。
元々は以下のようにDB::raw()を使うやり方をしていました。
$query = DB::table('subtable');
$sql = '(' . $query->toSql() . ') as "sub"';
DB::table('table')->join(DB::raw($sql), ...);
それが以下のように書けるようになりました。
DB::table('table')->joinSub('select * from "subtable"', 'sub', ...);
DB::table('table')->leftJoinSub(function ($q) { $q->from('subtable'); }, 'sub', ...);
DB::table('table')->rightJoinSub(DB::table('subtable')->where('foo', 'bar'), 'sub', ...);
Laravelのdocsに私のプルリクが通った
これはビッグニュースですね!
OSS活動もっとやりたかったですが、結局今年はこれだけになるかも...
2018年5月のLaravel
Laravel 5.6.20→24
①abort()の引数にresponseを設定でHttpResponseExceptionを返すようになった
Added support for passing any response (or Responsable) to "abort" helper... can be useful. ✌️ pic.twitter.com/9kV1kqA4uc
— Taylor Otwell 🏄♂️ (@taylorotwell) April 30, 2018
②EloquentにloadMissing()メソッドが追加されました
リレーションがloadingしてない時だけloadingしてくれます。
public function format(Book $book)
{
$book->loadMissing('author');
return [
'name' => $book->name,
'author' => $book->author->name
];
}
2018年6月のLaravel
Laravel 5.6.25→26
①query builderにjson形式のデータに対するメソッドが追加されました
whereJsonNotContains()、orWhereJsonNotContains()、が追加されました。
含まれない条件のandとorですね。
$query->whereJsonNotContains('options->languages', ['en']);
$query->orWhereJsonNotContains('options->languages', ['en']);
②ModelにunsetRelation()メソッドが追加されました
メソッド名通り、リレーションをunsetしてくれます。
③AuthにhasUser()メソッドが追加されました
動作的にはAuth::guard()->user()をパブリックに使えるようにしたものです。
Laravel Event
Laravelのイベントを告知するサイトが出来ました。
世界中のイベントが載っています。
Laravel Live UK
UKでカンファレンスが開催されました。
世界中で開催されていますね。
2018年7月のLaravel
Laracon US 2018
今年のLaracon USはシカゴで開催されました!
Laraconのサイトは2019仕様に既に変わってしまいましたが
2018年のセッションはYoutubeに再生リストで上がっており見ることが出来ます。
(Vue.jsのEvan氏もセッションに参加しております。)
私は開催当日、日本で早朝からtwitterと動画配信を追いかけてましたが、
クラシコムのエンジニアの方がLaracon US参加レポートを書かれています。
日本人の参加者がほとんどいないため、会場の雰囲気など大変参考になります!
Laravel Nova発表
Laravel Novaは公式のLaravel管理画面作成用パッケージになります。
サイト単位の有料ライセンスパッケージになっており、サポート付きかそうでないかで
料金が違います。
詳細は以下のページで確認できます。
Laravel Nova - Beautifully-designed administration panel for Laravel
弊社でも8月にリリースしたGraspyというサービスで早急に管理画面が必要になったため、発売開始直後にサポート付きライセンスを購入致しました。
そこでの知見はまたこのブログで展開できればと思います!
2018年8月のLaravel
Laravel 5.6.30→34
セキュリティパッチのリリースがありました
Laravel 5.6.30とLaravel 5.5.42がセキュリティ対策版のリリースバージョンになります。
Laravel EU 2018開催
2018年9月のLaravel
Laravel 5.7 Release
①ディレクトリ構成の変更
こちらが5.6までの構成です。
/resources
├── assets
│ ├── js
│ └── sass
├── lang
│ └── en
└── views
以下が新しいディレクトリ構成になります。集約されました。
/resources
├── js
├── lang
├── sass
└── views
②エラーメッセージがわかりやすくなりました
これメッチャ良いですね。Laravelのエラーメッセージはプログラミング初心者等には
かなり厳しい感じはしていました。
Ever mistyped a method on an Eloquent model and got a cryptic error saying that the method doesn't exist *on the query builder* 😳
— Joseph Silber (@joseph_silber) August 12, 2018
Well, in @laravelphp 5.7 you'll now get a clear, concise message saying that the method doesn't exist on the model 👌https://t.co/uKAxbIVdmv pic.twitter.com/aWgQ8zr2ak
③ページネーションの中央のリンクに対するサイドの数を設定出来るようになりました。
デフォルトは3になります。
// [1][2][3]...[6][7][8]【10】[11][12][13]...[20][21][22]
User::paginate(10)
// [1][2][3]...[9]【10】[11]...[20][21][22]
User::paginate(10)->onEachSide(1);
④Mail Localizationが簡単に出来るようになりました
Mail::to($user)->locale('en')->send(new OrderConfirmation($order))
Mail::to($user)->locale('ja')->send(new OrderConfirmation($order))
Laravel meetup Tokyo Vol.11開催
2回目の参加になりました!
発売前のLaravel本の紹介などもあり、とても充実した内容でした。
laravel-meetup-tokyo.connpass.com
Laravel本「PHPフレームワーク Laravel Webアプリケーション開発 」発売
これまでに無かった一つレベルの上がった中級者以上向けの本になるかと思います。
実践パターンが豊富で、非常に参考になる1冊でした。
2018年10月のLaravel
Laravel 5.7.9→5.7.12
CollectionにloadCount()が追加されました
withCount()は元々あったのですが、loadでリレーションする際にはメソッドが用意されていなかったのが今回追加されました。
$events = Event::latest()->with('eventable')->paginate(); $groups = $events->map(function ($event) { return $event->eventable; })->groupBy(function ($eventable) { return get_class($eventable); }); $groups[Post::class]->loadCount('comments'); $groups[Comment::class]->loadCount('hearts'); return new EventIndexResponse($events);
Laravel Telescope発表
Laravel Telescopeは新しいLaravelのデバッグ用アプリです。
わかりやすいGUIを兼ね備えており、Laravelの処理全般を確認することが出来ます。
Laravel AU 2018
オーストラリアでのカンファレンスが開催されました。
これに伴い、Laravelの作者のTaylor Otwellが日本に来日して
観光を楽しんでいたようです。
— Taylor Otwell 🏄♂️ (@taylorotwell) October 14, 2018
2018年11月のLaravel
Laravel 5.7.13
CollectionにwhenEmpty()、whenNotEmpty()、unlessEmpty()、unlessNotEmpty()メソッドが追加されました
whenEmpty()の処理はコレクションが空の時にコールバックが呼ばれます。
$collection = new Collection;
$collection->whenEmpty(function ($collection) {
return $collection->push('test');
});
$this->assertSame(['test'], $collection->toArray());
unlessEmpty()の処理はコレクションが空でない時にコールバックが呼ばれます。
$collection = new Collection;
$collection->unlessEmpty(function ($collection) {
return $collection->push('abcd');
});
$this->assertSame([], $collection->toArray());
2018年12月のLaravel
Laravel Advent Calendar
12月といえば、Advent Calendarですね!
今年は#2まで出来ております。
私は今年初参戦ですが何か役に立つ記事を書ければと思います!
2019年のLaravel
Laravel JP Conference
来年2月に、日本初のLaravelカンファレンスが開催されます!
ララベラー全員集合間違いなしですね。
Laracon VII (Laracon US 2019)
来年のLaracon US 2019の開催は既に発表されております!
今年はシカゴでしたが来年はNYです!行きたい!
Laracon VII! July 24-25, 2019 at the PlayStation Theater in Times Square, NYC! 🔥https://t.co/Txd9CgMCfC
— Laravel (@laravelphp) November 13, 2018
Laravel 5.8
5.8の話も少しずつ出てきていますね。
①Carbon2を使えるようになる
ついにCarbonのv2を選べるようになることで、immutableに扱えるようになります!
(既にmutableな使い方に慣れてしまっていますが...)
②Laravel mixも進化するみたい
テスト中にLaravel Mixをオーバーライドすることが出来るみたいです!
該当のPRはこちらです。
Laravel 6 ?
Laravel 6やLaravelの今後を知るには、Laravelのアイディアを纏めた以下のリポジトリのissuesを読むのが一番だと思います。
以前はLaravel6のwishlistも有りましたが、今は閉じられています。
Laravelは5系の完成度が高く、LTSもあるためか、メジャーバージョンのアップデートサイクルが当初の想定よりずれています。(特に悪いことではないと思います)
Laravel4→5で実施したようなチャレンジングな進化を6にも期待したいですね。
長くなりましたが今年のLaravelをまとめてみました。
こうしてみると色んな事があった盛り沢山な1年だったと思います。
来年もLaravelの勢いが続くように少しでも貢献できればと思います。
最後に
ITプロパートナーズでは大半のサービスのサーバーサイド開発をLaravelを利用して行っています。
この記事を最後まで読んだそこのあなたは相当なララベラーだと思います!
一緒にLaravelやりませんか?
もし興味があれば気軽にオフィスに遊びに来てください!