おれ、エンジニアになるよ。

エンジニア志望の大学生だった若造がISUCON7を通して見事就職した後、今度は一人前のエンジニアになることを目指す成長物語

Laravel JP Conferenceに行ってきました

みなさんこんばんは、nchaaaです。

実は先月の2月16日にLaravel JP Conferenceに行ってきました。

f:id:matsuda-juri:20190307222640j:plain

 

今日はそこで学んだ知見を書き残そうと思います。(今更ながらですが...)

 

 

ServiceProvider, ServiceContainer入門 

ちろ (@chiroruxxxx)さんの、LaravelのServiceProviderに関する発表です。

(スライド:ServiceProvider, ServiceContainer 入門 - Speaker Deck

 

メールサービスのSendGridを例に、具体的なコードからDI(依存性の注入)の問題点を挙げ、ServiceProviderとServiceContainerを使った解決法をわかりやすく説明してくれています。

以下引用。

・各処理ごとにサービスを毎回つくりたくない

=> ServiceContainer (サービスをまとめて管理したい)

 

・サービスの生成をロジックに書きたくない

=> ServiceProvider(サービスの生成方法をまとめて管理したい)

 

LaravelではデフォルトでAppというServiceContainerが登録されているのだとか。

 

App\Providers\AppServiceProvider::class,

ありましたねw

appはどこからでも呼べるので、グローバルということになります。

 

この発表を聞いてもう一回公式ドキュメント読んでみて思ったことがあります。

Laravelのアーキテクチャファサードパターン。

そのファサードを支えるのがServiceProvider・ServiceContainerなんだと。(合ってるのかな...?)

Laravelのコアとなる機能なので、もう少し勉強が必要そうです。

 

 

 

Laravelでパッケージ開発

mikakane (@_mikakane)さんの、パッケージ開発の発表です。

(スライド:Laravel Package Development - Speaker Deck

 

「パッケージ開発とは、小さなLaravelを作る」、ということです。

一般的にLaravelはappディレクトリ以下にControllerなりLogicなり書いていきます。

一方パッケージ開発では、appとは別にディレクトリを切ります。

 

ポイントは名前空間の衝突を避けることソースコードの管理

ディレクトリを分けたことによる依存解決は、composerによって統合するのだそう。

 

やり方はちょいと難しそうでしたが、考え方はマイクロサービスそのものですね。

機能ごとにディレクトリを切り、名前空間を切り出す。

極めればクラス設計とかめっちゃ楽しそうです。

 

 

 

LaravelでのAPI開発を爆速にするためにやっていること

kotamat | SCOUTER CTO (@kotamats)さんの、LaravelのAPI開発の発表です。

(スライド:LaravelでのAPI開発を爆速にするためにやっていること @LaravelJP Conference

 

こちらはパッケージ開発のディレクトリ分けとは違い、リポジトリごと切る手法です。

これはデプロイ・ビルドの観点からだそうです。

 

またLaravel Mixも、依存パッケージのバージョンに左右されることから使わないそうです。

インフラ面で見ると、フロントはS3、サーバーはEC2にデプロイ。

フロントとサーバーを完全に切り離すことでビルドの高速化が実現できるとのこと。

 

ここまでくると、Laravelのファサードパターンの恩恵が感じられますね。

インターフェースだけカチッと決めてあげるのがポイントっぽい。(かな?)

 

 

 

Laravelのデプロイ戦略。VPSからDocker、Kubernates、サーバレスまで 

 最後はTSURU (@t_tsuru)さんのデプロイ戦略に関する発表です。

(スライド:Laravelのデプロイ戦略。VPSからDocker、Kubernates、サーバレスまで - SpeakeDeck

今回一番聞きたかったやつ。(ほんと来てよかった)

 

オートスケールを見据えたインフラ設計や、モノリスからマイクロサービス化するときのポイントを具体的な話を用いて説明されてました。

これがめっちゃわかりやすかった!

 

Laravelプロジェクトにおけるインフラ設計のポイントは、初めからマイクロサービス化すること。

DBはもちろんですが、RedisやQueue、Cron周りなども切り離すことがポイントだそうです。

このあたりの話も、AWSのサービスを用いて詳しく載ってます。

ファイルストレージはS3使うといいよーとか。

 

Dockerを本番環境に持って行く際の注意点もありました。

CI/CDは必須だったり、コンテナ作成時のベストプラクティスだったり。

 

インフラエンジニア寄りの話ではありますが、デプロイは開発チームの問題。

デプロイ環境が整っていないチームは、まずはデプロイ自動化を目指すのがいいそうです。

 デプロイ問題については各社・各チーム異なるので、鶴島さんの発表はまさに一つのお手本となるような感じでした。(Code Pipeline絶対使う!)

 

 

 

最後に 

今回初めてLaravelの勉強会に行ったのですが、自分が全然知らないLaravelがそこにはありました。

ファサードパターンについて調べてみたり、デプロイについて考えてみたり、色々なきっかけと刺激があって今めっちゃ燃えています。

運営の方々と発表者のみなさんにほんとに感謝です。

 

来年もあるといいなー。

 

 

 

ではでは、今日はこの辺で。