Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Laravelでサービスを作った時にやったこと
Search
dala00
April 23, 2019
Programming
820
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Laravelでサービスを作った時にやったこと
dala00
April 23, 2019
More Decks by dala00
See All by dala00
Freelance Talk Session Kansai
dala00
0
57
A-FrameでWebVR
dala00
1
220
Nuxt.jsとExpressでWebサービスを作ってみた
dala00
0
1.8k
Laravel + Vue.jsでサービスを作成&運営してみて
dala00
1
560
何でも書ける技術者向けコミュニティCrieit - 制作物天下一武道会
dala00
0
78
Other Decks in Programming
See All in Programming
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.4k
JavaDoc 再入門
nagise
1
420
Mujeres en SEO Summit 2026 - Greatest Disaster Hits en Web Performance
guaca
0
200
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
120
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
400
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
170
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
190
The NotImplementedError Problem in Ruby
koic
1
950
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.7k
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
410
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
5.9k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
300
Featured
See All Featured
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
440
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
The Limits of Empathy - UXLibs8
cassininazir
1
370
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
300
Optimising Largest Contentful Paint
csswizardry
37
3.7k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Transcript
Laravelでサー ビスを作った 時にやった こと
自己紹介 Twitter: dala00 個人で色々とサービスを作っている(去年は5つ+α、今年も1つ) PHPメインだけどNode.js、Elixir、Firebase等何でも使ってリリースしたりする
作ったもの CrieitというQiitaのようだけど ポエムでも何でも書ける記事投稿サービス • Laravel • Vue.js • Bootstrap Material
Design
開発環境構築
docker-compose.yml いくつかのプロジェクトがあると バージョンが変わって辛いため
Vue.jsとの連携
全体を囲んでどこにでも コンポーネントを置けるようにする • scriptタグはappの外だけ使える
jsonにすれば直接コンポーネントにデータを渡せる
Vue.js表記の埋込エラー HTML上や、コンポーネントの属性にVue.jsのコンポーネントが埋め込まれるとエラーに なる <span>{</span>{ aaaa }<span>}</span> のようにして更にエスケープする、などが必要
本番用ビルド • yarn prodでリリースビルド • mix.version()でバージョニング • commitしちゃう(css, js, mix-manifest.json)
• 本番で不具合があった時一瞬で戻せる(ビルド不要) • 本番でNode動かす必要がない 個人開発だったらこれで十分かも
本番のインフラ
サーバー Google Compute Engine(f1-micro) DBもCloud SQLを使わず同じサーバーにインストールしているので無料運用。 ただしメモリ600MBくらいしかない…。
SQLはシンプルにする • 基本的に SELECT * FROM table WHERE インデックスついてるカラム =
value ORDER BY インデックスついてるカラム のような形 • JOINしない→LaravelのEager loadingが勝手にいい感じにしてくれる • Debugbarでクエリを見る • サブクエリ、UNION、怪しい関数などはとにかく使わない。ORMやMySQL自体に 便利なものが色々あるからと言って適当に使うのは危険。 • 複雑ならキャッシュする →はてなブックマークのテクノロジーでトップになっても問題なく動くくらい(ただ、意外と アクセスは多くないというのもある)
キャッシュの方法
ページをCDN配信する
Cloudflare 画像やhtmlなどの静的コンテンツを無料でCDN配信してくれる。(DNSサーバーを Cloudflareに変えるだけなので非常に簡単) コンテンツをCloudflare側にキャッシュし、閲覧者の近くのサーバーから配信してくれる のでめちゃくちゃ閲覧速度が速くなる。 → LaravelのページはPHPのためキャッシュが無効になっているが、設定を変えれば CDNで配信することもできる
記事ページだけ対応してみた 元々1秒位かかっていた(リージョンが遠い関係もある)
ページルールを設定 Cloudflare側にURLを設定すればそのURLをキャッシュしてくれる。 ただし、レスポンスヘッダをみてキャッシュすべきかどうかも判断しているため、これだけ だとまだキャッシュしてくれない。
CDN用のmiddlewareグループ • NoCookieを追加 • StartSession, ShareErrorsFromSession, VerifyCsrfTokenを削除
• RouteServiceProvider.php cdn.phpで設定できるように
ルーティングを書く
認証状態によって表示を変える • セッション無効にしてるので不可能 • セッション有効でも可能だが個人情報がキャッシュされてしまう • ログイン状態はVuex StoreやlocalStorageにいれてVueコンポーネント側で処理 する •
認証状態以外に必要なデータがあればAPIで取ってくる
None
PUSH通知 https://github.com/Paragraph1/php-fcm
やろうと思って諦めたこと
リアルタイム投稿 Scrapboxのように、入力中の内容を公開し、リアルタイムで他の閲覧者が見ることがで きる。 → WebSocketが必要
WebSocket Pusher.comと連携したりしてパフォーマンス的に不安な気がした。 → とりあえずFirebaseのRealtime databaseで対応した。 サーバー側に負荷もない。
現在のWebSocket https://github.com/beyondcode/laravel-websockets ・Pusherを経由しないで直接Laravel側と繋げるっぽいのでとても良さそう。
まとめ • やっぱり何でも最初から揃っているというのは最高 ◦ なにか必要になった時にハマることも少なくすぐ導入できる ◦ 最近Expressでも作ったがパズルのようでしんどい