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
PR TIMESをSSRした裏側 /phpcondo-2024
Search
sucalul
January 13, 2024
1
270
PR TIMESをSSRした裏側 /phpcondo-2024
sucalul
January 13, 2024
Tweet
Share
More Decks by sucalul
See All by sucalul
テスト書いてますか?そのテストは動いてますか?そのテストは他のメンバーに伝わりますか?/ PHPerKaigi-2023-after-event
sucalul
1
100
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
Speed Design
sergeychernyshev
32
1.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
11
920
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
KATA
mclloyd
PRO
32
15k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.8k
Transcript
PR TIMESを SSRに移行した裏側 PHPカンファレンス北海道2024 スポンサーLT 1
自己紹介 • yuya.miyazaki ◦ すか ◦ @sucalul in X, github
• 所属 ◦ 株式会社PR TIMES ◦ 2022年4月〜現在 ◦ プレスリリースページのバックエンド ◦ 新卒2年目 • 職業 ◦ バックエンドエンジニア ◦ PHP/Go 2
プレスリリース配信サービス「 PR TIMES」を運営。 企業、メディア、生活者をニュースでつなぐサービスとして、 2007年よりスタート。 3
PR TIMESをSSRに移行した裏側 • PR TIMES ◦ プレスリリースページ ◦ https://prtimes.jp/main/html/rd/p/000001308.000000112.html 4
今回の発表について • 開発者ブログにて公開してます ◦ https://developers.prtimes.jp/2023/12/13/replace-press-release-page-with -nextjs/ 5
• 背景 • 前提 • 技術選定・構成 • キャッシュ • リリースの流れ
6 話すこと
背景 • 今後プレスリリースページの機能追加していくにあたってリプレイス • UIリニューアルプロジェクトの予定があった ◦ こちらもリリースを行っている ◦ https://prtimes.jp/main/html/rd/p/000001357.000000112.html 7
前提 • Fastly移行 • アクセスログ改善 8
前提 • Fastly移行 ◦ Next.jsを活用してSSRの結果をCDN上に柔軟にキャッシュさせるため • アクセスログ改善 9
前提 • Fastly移行 ◦ Next.jsを活用してSSRの結果をCDN上に柔軟にキャッシュさせるため • アクセスログ改善 ◦ アプリケーションにリクエストが到達する前提の構成になっており、Next.jsで SSRしたHTMLをCDN上でキャッシュさせる構成を取れない
10
技術選定・構成 • 元々はPHP + Smarty + jQuery • リプレイス後はNext.jsを採用し、SSRを行う •
DBへのアクセスはVPC内でバックエンドサーバーに問い合わせる 11
技術選定・構成 • 元々はPHP + Smarty + jQuery • リプレイス後はNext.jsを採用し、SSRを行う •
DBへのアクセスはVPC内でバックエンドサーバーに問い合わせる →PHPのAPIサーバーからデータを返し、SSRを行いクライアントに HTMLを返す。その結果をCDNでキャッシュする構成。 12
13 技術選定・構成
• SSRした理由 ◦ プレスリリースページは、一般に公開されているため、パフォーマンスと検索エ ンジンの指数化が重要 ◦ 検索エンジンになるべく早くインデックスさせたい ◦ SPAよりSSR の方が、検索結果への反映までの時間の面で通常有利と言わ
れている 14 技術選定・構成
• 公開情報を載せて SSR した HTML を、CDN でキャッシュさせて配 信する構成 • 意識したこと
◦ オリジンサーバーにキャッシュを持たない ▪ 多段キャッシュはしない ◦ フロントエンド側のミスによって情報漏洩が生じうる構成を初めから取らない 15 キャッシュ
• フロントエンド側のミスによって情報漏洩が生じうる構成を初めから 取らない ◦ ユーザーによって閲覧できる限定コンテンツがあり、それらの非公開情報につ いては部分的にSSRを避け、クライアントサイドからデータ取得を行い CSR する ◦ 全ユーザーに公開可能な情報を取得するAPIと非公開情報を取得するAPIを
作り、API自体を分ける 16 キャッシュ
• 配信割合を刻んでの段階リリース • Fastly の Director 機能の Random を使用 17
リリースの流れ 20%の例
• NewRelicでアクセス量、ブラウザ到達比率、CPU・メモリ使用率、 キャッシュHIT 率、API のレスポンスステータスなどを見るダッシュ ボード、および一部のメトリクスで Slack へのアラートを設定して監 視 18
リリースの流れ
• PR TIMESでは日々このようなリプレイス・リニューアルを行ってい ます • より詳細については開発者ブログをご覧いただけますと幸いです • ブースもやっているのでぜひお越しください! 19 最後に
カジュアル面談(全職種)👆 エンジニア募集職種👆 エンジニア採用サイト👆 PR TIMES 採用情報 検索 私たちと一緒に 「未来の変化」 をつくっていく仲間を募集しています。
採用情報のご案内 20