Laravelでサービスを作った時にやったこと
by
dala00
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Laravelでサー ビスを作った 時にやった こと
Slide 2
Slide 2 text
自己紹介 Twitter: dala00 個人で色々とサービスを作っている(去年は5つ+α、今年も1つ) PHPメインだけどNode.js、Elixir、Firebase等何でも使ってリリースしたりする
Slide 3
Slide 3 text
作ったもの CrieitというQiitaのようだけど ポエムでも何でも書ける記事投稿サービス ● Laravel ● Vue.js ● Bootstrap Material Design
Slide 4
Slide 4 text
開発環境構築
Slide 5
Slide 5 text
docker-compose.yml いくつかのプロジェクトがあると バージョンが変わって辛いため
Slide 6
Slide 6 text
Vue.jsとの連携
Slide 7
Slide 7 text
全体を囲んでどこにでも コンポーネントを置けるようにする ● scriptタグはappの外だけ使える
Slide 8
Slide 8 text
jsonにすれば直接コンポーネントにデータを渡せる
Slide 9
Slide 9 text
Vue.js表記の埋込エラー HTML上や、コンポーネントの属性にVue.jsのコンポーネントが埋め込まれるとエラーに なる
{
{ aaaa }
}
のようにして更にエスケープする、などが必要
Slide 10
Slide 10 text
本番用ビルド ● yarn prodでリリースビルド ● mix.version()でバージョニング ● commitしちゃう(css, js, mix-manifest.json) ● 本番で不具合があった時一瞬で戻せる(ビルド不要) ● 本番でNode動かす必要がない 個人開発だったらこれで十分かも
Slide 11
Slide 11 text
本番のインフラ
Slide 12
Slide 12 text
サーバー Google Compute Engine(f1-micro) DBもCloud SQLを使わず同じサーバーにインストールしているので無料運用。 ただしメモリ600MBくらいしかない…。
Slide 13
Slide 13 text
SQLはシンプルにする ● 基本的に SELECT * FROM table WHERE インデックスついてるカラム = value ORDER BY インデックスついてるカラム のような形 ● JOINしない→LaravelのEager loadingが勝手にいい感じにしてくれる ● Debugbarでクエリを見る ● サブクエリ、UNION、怪しい関数などはとにかく使わない。ORMやMySQL自体に 便利なものが色々あるからと言って適当に使うのは危険。 ● 複雑ならキャッシュする →はてなブックマークのテクノロジーでトップになっても問題なく動くくらい(ただ、意外と アクセスは多くないというのもある)
Slide 14
Slide 14 text
キャッシュの方法
Slide 15
Slide 15 text
ページをCDN配信する
Slide 16
Slide 16 text
Cloudflare 画像やhtmlなどの静的コンテンツを無料でCDN配信してくれる。(DNSサーバーを Cloudflareに変えるだけなので非常に簡単) コンテンツをCloudflare側にキャッシュし、閲覧者の近くのサーバーから配信してくれる のでめちゃくちゃ閲覧速度が速くなる。 → LaravelのページはPHPのためキャッシュが無効になっているが、設定を変えれば CDNで配信することもできる
Slide 17
Slide 17 text
記事ページだけ対応してみた 元々1秒位かかっていた(リージョンが遠い関係もある)
Slide 18
Slide 18 text
ページルールを設定 Cloudflare側にURLを設定すればそのURLをキャッシュしてくれる。 ただし、レスポンスヘッダをみてキャッシュすべきかどうかも判断しているため、これだけ だとまだキャッシュしてくれない。
Slide 19
Slide 19 text
CDN用のmiddlewareグループ ● NoCookieを追加 ● StartSession, ShareErrorsFromSession, VerifyCsrfTokenを削除
Slide 20
Slide 20 text
● RouteServiceProvider.php cdn.phpで設定できるように
Slide 21
Slide 21 text
ルーティングを書く
Slide 22
Slide 22 text
認証状態によって表示を変える ● セッション無効にしてるので不可能 ● セッション有効でも可能だが個人情報がキャッシュされてしまう ● ログイン状態はVuex StoreやlocalStorageにいれてVueコンポーネント側で処理 する ● 認証状態以外に必要なデータがあればAPIで取ってくる
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
PUSH通知 https://github.com/Paragraph1/php-fcm
Slide 25
Slide 25 text
やろうと思って諦めたこと
Slide 26
Slide 26 text
リアルタイム投稿 Scrapboxのように、入力中の内容を公開し、リアルタイムで他の閲覧者が見ることがで きる。 → WebSocketが必要
Slide 27
Slide 27 text
WebSocket Pusher.comと連携したりしてパフォーマンス的に不安な気がした。 → とりあえずFirebaseのRealtime databaseで対応した。 サーバー側に負荷もない。
Slide 28
Slide 28 text
現在のWebSocket https://github.com/beyondcode/laravel-websockets ・Pusherを経由しないで直接Laravel側と繋げるっぽいのでとても良さそう。
Slide 29
Slide 29 text
まとめ ● やっぱり何でも最初から揃っているというのは最高 ○ なにか必要になった時にハマることも少なくすぐ導入できる ○ 最近Expressでも作ったがパズルのようでしんどい