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
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張
Search
Hatena
February 25, 2025
Technology
730
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張
Hatena Engineer Seminar #32 はてなブログ新機能基盤の開発編 の発表資料です
https://hatena.connpass.com/event/344958/
Hatena
February 25, 2025
More Decks by Hatena
See All by Hatena
60分で学ぶクラウドとSRE・サービス運用 / GeekCAMPAcademia 2026-05
hatena
1
91
エンジニアリング マネージャーの育成と評価軸の考え方
hatena
0
630
Perlブートキャンプ
hatena
0
5.2k
はてなサマーインターンシップ2025 Web API 講義資料
hatena
0
1.1k
はてなサマーインターンシップ2025 フロントエンド 講義資料
hatena
21
11k
はてなサマーインターンシップ2025 コンテナ + Kubernetesハンズオン 講義資料
hatena
0
760
はてなサマーインターンシップ2025 クラウドと運用 講義資料
hatena
0
810
はてなサマーインターンシップ2025 RDBMSの基礎 講義資料
hatena
0
870
はてなサマーインターンシップ2025 セキュリティ 講義資料
hatena
0
800
Other Decks in Technology
See All in Technology
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
390
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
420
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
9
4k
公式ドキュメントの歩き方etc
coco_se
1
120
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
390
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.9k
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
2
550
アップデートで何が変わった?デモで学んで使いこなすIBM Bob2.0
muehara
0
110
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.5k
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
880
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
290
Featured
See All Featured
Site-Speed That Sticks
csswizardry
13
1.3k
How STYLIGHT went responsive
nonsquared
100
6.2k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
370
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
The Cult of Friendly URLs
andyhume
79
6.9k
Scaling GitHub
holman
464
140k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
150
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
180
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Transcript
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張 id:nanto_vi (TOYAMA Nao) 2025-02-25 Hatena Engineer Seminar
#32 はてなブログ新機能基盤の開発編 1
アジェンダ • 自己紹介 • はてなCMSで配信されるコンテンツ ◦ 従来のコンテンツの配信 ◦ CMSのコンテンツの配信 •
コンテンツのプレビュー ◦ 従来のプレビューの配信 ◦ CMSのプレビューの配信 2
自己紹介 • id:nanto_vi (TOYAMA Nao) ◦ 株式会社はてな ◦ ブログチーム Webアプリケーションエンジニア
◦ 名古屋出身 ▪ 『メダリスト』に登場するスケートリンクを懐かしみつつ観 ています。 3
はてなCMS 4
配信するコンテンツ 従来のコンテンツ • Perlアプリケー ションから出力 CMSのコンテンツ • Next.jsアプリケー ションから出力 5
従来のコンテンツの配信 6 リバースプロキシ (Nginx) Perl アプリケーション 1 2 3 4
ユーザー ※ CDN、ロードバランサー、キャッシュサーバー(Varnish)などは省略
• URLパスだけでは従来のコンテンツかCMSの コンテンツか判別不能 ◦ リバースプロキシで事前に切り分けられない • 限定公開のサイトの閲覧をどうするか ◦ 従来はPerlアプリケーションで認可 CMSのコンテンツを配信するために
7
CMSのコンテンツの配信 8 リバースプロキシ (Nginx) Perl アプリケーション 1 2 3 6
ユーザー Next.js アプリケーション 4 5
CMSのコンテンツの配信 • CMSのコンテンツ かどうかはPerl アプリケーション で判別 ◦ CMSのコンテンツなら、 Nginxの内部リダイレクト機能を使って配信 •
限定公開の認可はPerlアプリケーションで行う 9 リバースプロキシ (Nginx) Perl アプリケーション 1 2 3 6 ユーザー Next.js アプリケーション 4 5
Nginxの内部リダイレクト機能 A. ユーザーが https://cms. example.com/ foo にアクセス B. Perlアプリケーションが X-Accel-Redirect:
internal_url 応答ヘッダ付きの応答を返す C. Nginxはinternal_url (Next.jsアプリケーション) に要求 を投げ、返ってきた応答をユーザーに返す 10 リバースプロキシ (Nginx) Perl アプリケーション 1 2 3 6 ユーザー Next.js アプリケーション 4 5
CMSでのコンテンツの出力 • Next.jsのビルド済みJSファイルははてなのドメイン (cms.hatena.ne.jp) から配信 ◦ サイトのURLにはサブディレクトリが含まれることが あり、JSファイルのパスを解決できない ◦ Next.jsのassetPrefix設定
• internal_urlが外部から直接アクセスできないよう に、HTTP要求ヘッダの値によるアクセス制限 11
プレビュー機能 • 実際の表示に近づけたい ので、管理画面のドメイン (cms.hatena.ne.jp)では なく、サイトのドメイン (cms.example.com)で 表示 12
プレビュー機能の変化 従来のプレビュー • ページ内のタブ切り 替え、または新規 ウィンドウで開く • プレビューウィンド ウを再読み込みして も内容はそのまま
CMSのプレビュー • 新規タブで開く • プレビューウィンドウ (タブ)を再読み込みす ると、その時点で編集 中の内容がプレビュー される 13
従来のプレビューの配信 1. プレビュー内容を送信 2. トークンとキーを返す ◦ 限定公開のサイトを閲覧 可にする認可トークン ◦ プレビュー内容が勝手に
変更されないためのキー 3. プレビュー内容、トークン、キーを送信 14 1 ユーザー 管理画面のドメイン blog.hatena.ne.jp サイトのドメイン cms.example.com 2 3 4
CMSのプレビューの配信 2., 3. 認可トークンは従来のPerl アプリケーションから取得 4., 5. プレビュー内容そのもの ではなく、内容を指す キーをやり取り
• Nginxの内部リダイレクト およびNext.jsでPOST要求 本体を扱いづらいため 15 1 ユーザー 管理画面のドメイン cms.hatena.ne.jp サイトのドメイン cms.example.com 4 5 6 管理画面のドメイン blog.hatena.ne.jp 2 3
再読み込みへの対応 1. 編集ページからプレビューページを開く 2. プレビューページから編集ページに、 ウィンドウ間通信(postMessage)を 用いて、認可トークンとキーを 問い合わせ 3. iframe内にプレビュー内容を読み込み
◦ プレビューページを再読み込みすると、 2.の手順から再実行することになる 16
まとめ • Nginxの内部リダイレクト機能を使い、 同一ドメイン下で従来のコンテンツ配信と CMSのコンテンツ配信を共存 • 認証・認可は既存の仕組みを流用すること で、従来と同レベルの安全性を確保しつつ 開発工数を節約 17