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
ジャンプTOONにおける サイトマップの自動生成手法
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Asahara
December 10, 2024
Technology
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ジャンプTOONにおける サイトマップの自動生成手法
https://cyberagent.connpass.com/event/335669/
Asahara
December 10, 2024
More Decks by Asahara
See All by Asahara
「アクセシビリティやるぞ!LT祭り #6
assa1605
0
26
PWA Night vol.27 ~HitRate 活用事例~
assa1605
0
25
Other Decks in Technology
See All in Technology
推論の観測、できていますか? 〜 Google Cloud Gemini Enterprise Agent Platformで 3つの Gemini モデルを実測して踏んだ、評価の罠 〜
shukob
PRO
0
110
作り直せるコードは迅速に 作り直せないDBは慎重に - AI時代のプロダクトエンジニアが「判断の不可逆性」で開発速度を変える話
kinosuke01
0
150
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
630
AndroidでHDRメディアを「壊さずに」扱う
chigichan24
0
340
Claude Codeの体系的な理解と知識のフック
oikon48
10
6.6k
【試作】IoT x AIエージェント
happysamurai294
0
110
DINO-EdgeQuery:Edge-First Polygon Decoding for Building Footprint Extraction from Satellite Imagery
lehupa
0
130
GuardDuty 検知対応を DevOps Agent で効率化しようとしている話 / GuardDuty Investigations with DevOps Agent
masahirokawahara
1
240
[RSJ26] AnoleVLA: Lightweight Vision-Language-Action Model with Deep State Space Models for Mobile Manipulation
keio_smilab
PRO
0
120
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
1
490
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
240
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
3
1.9k
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.4k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
For a Future-Friendly Web
brad_frost
183
10k
Everyday Curiosity
cassininazir
0
310
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
Testing 201, or: Great Expectations
jmmastey
46
8.3k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.9k
HDC tutorial
michielstock
2
840
Raft: Consensus for Rubyists
vanstee
141
7.7k
Navigating Weather and Climate Data
rabernat
0
510
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
500
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Transcript
ジャンプTOONにおける サイトマップの自動生成手法 浅原昌大
株式会社サイバーエージェント SGEマンガ事業部 Web フロントエンドエンジニア 浅原昌大 @assa1605 @assa1605 2023年サイバーエージェント新卒入社 SGEマンガ事業部に配属 あさはらまさひろ
ジャンプTOONについて サイトマップについて サイトマップ生成手法の紹介 設計と実装 01 02 03 04 CONTENTS まとめと振り返り
05
ジャンプTOONについて サイトマップについて サイトマップ生成手法の紹介 設計と実装 01 02 03 04 CONTENTS まとめと振り返り
05
ジャンプTOONについて ジャンプTOON のサービス紹介 01 2024 年 5 月にサービスを開始 オリジナル縦読みマンガ作品や人気作品のタテカラー版を連載中
サイトマップについて サイトマップとは サイト全体のページ構成を一覧で記載 • HTMLサイトマップ:ユーザーが情報を見つけやすくする役割 • XMLサイトマップ:検索エンジンにサイト内のページを伝える役割 02
サイトマップについて サイトマップとは サイト全体のページ構成を一覧で記載 • HTMLサイトマップ:ユーザーが情報を見つけやすくする役割 • XMLサイトマップ:検索エンジンにサイト内のページを伝える役割 02
サイトマップについて XMLサイトマップを作成する上で.. 02 URL の上限件数:50,000件 サイズ上限:50MB(圧縮なし) 読み込みに上限があるため、上限 に達しないよう分割して作成する 制約 XML
サイトマップの構造は、親ファイルと子ファイルから構成
ジャンプTOONについて サイトマップについて サイトマップ生成手法の紹介 設計と実装 01 02 03 04 CONTENTS まとめと振り返り
05
サイトマップ生成手法の紹介 Next.js の sitemap.js 03 URL の配列を返すデフォルトの関数を エクスポートするだけでサイトマップを生成 ⭐
特徴 • 自動的に/sitemap.xmlエンドポイント が生成される • 動的関数を使用しない限り デフォルトでキャッシュされる https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap
サイトマップ生成手法の紹介 Next.js の sitemap.js 03 https://nextjs.org/docs/app/api-reference/functions/generate-sitemaps sitemap.js 内でデータフェッチして 動的なパスも含めることも
サイトマップ生成手法の紹介 generateSitemaps 関数 03 https://nextjs.org/docs/app/api-reference/functions/generate-sitemaps URLの分割も簡単に可能 /product/sitemap/1.xml /product/sitemap/2.xml /product/sitemap/3.xml ..
サイトマップ生成手法の紹介 generateSitemaps 関数 03 https://nextjs.org/docs/app/api-reference/functions/generate-sitemaps sitemap.js 内でデータフェッチして 動的なパスも含めることも
これ使えば良さそう👏
サイトマップ生成手法の紹介 Next.js の sitemap.js ちょっと待った... 03 • URL の分割はできるが、親のインデックスファイルを生成してくれない 不都合な点
サイトマップ生成手法の紹介 Next.js の sitemap.js ちょっと待った... 03 サイトマップの配信URLを変更できない • スクレイピングの対象になるため、サイトマップを隠したい •
google bot だけがアクセスできればOK 不都合な点
サイトマップ生成手法の紹介 Next.js の sitemap.js ちょっと待った... 03 • URL の分割はできるが、親のインデックスファイルを生成してくれない •
サイトマップの配信URLを変更できない 不都合な点 自作スクリプトでサイトマップ生成する
ジャンプTOONについて サイトマップについて サイトマップ生成手法の紹介 設計と実装 01 02 03 04 CONTENTS まとめと振り返り
05
設計と実装 サイトマップに含めないパス 04 • マイページなど noindex のパス • リダイレクトのみのパス •
検索結果
設計と実装 サイトマップに含める情報 04 有無 詳細 <loc> 含める サイト内の一つのページについて
の情報を説明する <lastmod> 含める ページの最終更新日を記載する (コンテンツが変わった時のみ更新) <changefreq> 含めない ページの更新頻度を記載する。 Googleでは無視される。 <priority> 含めない ページの優先度合いを示す。 Googleでは無視される。
設計と実装 ディレクトリ構成 04 上から順に - 定期的にサイトマップを生成するためのワーク フローファイル - サイトマップの生成スクリプト -
Route 個別のパスを定義 - サイトマップを生成するための固有ロジック
設計と実装 ディレクトリ構成 04 サイトマップを作成するためのロジック類
設計と実装 lib/sitemap/constant.ts 04 サイトマップ作成する上で必要な情報
設計と実装 lib/sitemap/sitemap.ts 04 createSitemapItem URL と更新日を含む オブジェクトを返す
設計と実装 lib/sitemap/sitemap.ts 04 getSitemapData サーバーのレスポンスから必要データを取得
設計と実装 ディレクトリ構成 04 Route 個別の SitemapItem を作成する
設計と実装 src/app/_sitemap.ts 04 generatePageSitemapItems シグネチャは統一しておく 動的パス 静的パス
設計と実装 ディレクトリ構成 04 各 Route の SitemapItem を結合 XMLサイトマップ組み立てる
設計と実装 script/sitemap/generate-xml.ts 04 generateSItemapIndexXml 親ファイルのサイトマップのフォーマットに沿った XML を返す
設計と実装 script/sitemap/generate-xml.ts 04 generateSitemapXml 子ファイルのサイトマップのフォーマットに沿った XML を返す 更新日 (lastmod) のみ含める
設計と実装 script/sitemap/ save-split-sitemap.ts 04 saveSplitSitmap Route 個別の sitemapItem と 出力先
を受け取ってファイルに書き込み url の上限やファイルサイズを考慮しておく
設計と実装 script/sitemap/ save-split-sitemap.ts 04 saveSplitSitmap Route 個別の sitemapItem と 出力先
を受け取ってファイルに書き込み 実際にファイルに書き込み
設計と実装 script/sitemap/save-split-sitemap.ts 04 writeToFile ファイルパスと中身をファイルに 書き込む writeSitemapFile ファイル番号を受け取れるように して writeToFile
関数を呼ぶ
設計と実装 script/sitemap/save-split-sitemap.ts 04 createSitemapFile サイトマップを生成する Route 個別の sitemapItem を saveSplitSitmap
関数に受け渡し
設計と実装 script/sitemap/purge-fastly-cache.sh 04 一部コード省略 サイトマップは、CDN(fastly) で キャッシュしている。 purge_cache サロゲートキーが諸事情で使えなかっ たので、一時的に作ったパージ用のス
クリプト
設計と実装 ディレクトリ構成 04 定期バッチ、GCSに転送、失敗通知
設計と実装 github/workflows/sitemap.yml 04 毎日 サイトマップを更新する ため cron を使って定期実行
設計と実装 github/workflows/sitemap.yml 04 GCS からサイトマップ 生成に必要なjson 取得
サイトマップ生成 設計と実装 github/workflows/sitemap.yml 04
設計と実装 github/workflows/sitemap.yml 04 生成したサイトマップを 配信用の GCS バケット へアップロード
設計と実装 github/workflows/sitemap.yml 04 キャッシュ削除
設計と実装 github/workflows/sitemap.yml 04 生成に失敗したら、 GitHub Actions の実行結果を Slack に通知
設計と実装 出来上がった sitemap 👏 04 親ファイル 子ファイル
設計と実装 サイトマップをサーチコンソールから登録 04
ジャンプTOONについて サイトマップについて サイトマップ生成手法の紹介 設計と実装 01 02 03 04 CONTENTS まとめと振り返り
05
• サイトマップの自動生成を行った ◦ ライブラリやNext.js に用意されている機能を使わず自作した ◦ マンガの作品や話が増えた場合でも、自動でサイトマップファイルがス ケールするように • 全体の設計方針にあるコロケーションの概念とも一致した構成
• 自作コードに対してテストコードもその分必要 ◦ サイトマップを分割するロジックなどはライブラリに頼ってよかったかも まとめと振り返り 05 まとめと振り返り
ジャンプTOONについて ジャンプTOON Web の技術 01 https://developers.cyberagent.co.jp/blog/archives/49294/ https://developers.cyberagent.co.jp/blog/archives/49429/
ご清聴ありがとうございました Thank you!