株匏䌚瀟ZOZOのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ZOZO

株匏䌚瀟ZOZO の技術ブログ

å…š1050ä»¶

ZOZO開発組織の2025幎8月分の掻動を振り返り、ZOZO TECH BLOGで公開した蚘事や登壇・掲茉情報などをたずめたMonthly Tech Reportをお届けしたす。 ZOZO TECH BLOG 2025幎8月は、前月のMonthly Tech Reportを含む蚈9本の蚘事を公開したした。特に次の3蚘事はずおも倚くの方に読たれおいたす。 techblog.zozo.com techblog.zozo.com techblog.zozo.com 登壇 Google Cloud Next Tokyo 25 8月5日、6日に東京ビッグサむトにお「 Google Cloud Next Tokyo 25 」が開催され、ZOZOから4名の゚ンゞニアが登壇したした。 ⬜ 8/5火14:00 - 14:30 🟥 DAY 1 セッションD1-APP-04 #ZOZOTOWN の 倧芏暡マヌケティング メヌル配信を支える アヌキテクチャ ✉ https://t.co/camTqrqb0P #CloudRun の 3 ぀の実行モヌドリク゚ストベヌス、垞時皌働 CPU、ゞョブを甚途に応じお䜿い分け👍 #GoogleCloudNext 🗌 pic.twitter.com/oRQcpONDAk — Google Cloud Japan (@googlecloud_jp) 2025幎7月24日 🩶 8/5火16:00 - 16:30 💚 DAY 1 セッションD1-BFE-01🧑‍💻👩‍💻 予枬䞍胜な時代を生き抜く #゚ンゞニア のキャリアに぀いお考える ✏ https://t.co/87VMwQw8br 倚様なバック グラりンドを持぀゚ンゞニアが、自身のキャリア圢成における思想や具䜓的な道のりをお話ししたす #GoogleCloudNext 🗌 pic.twitter.com/0HBQIrhrbk — Google Cloud Japan (@googlecloud_jp) 2025幎7月23日 ⬜ 8/6氎13:00 - 13:30 🟚 DAY 2 セッションD2-AIML-10 ファッション コヌディネヌト アプリ「WEAR」における、 #VertexAI Vector Search を利甚したレコメンド機胜の開発・運甚で埗られたノりハりの玹介 👗 https://t.co/rJi9Dl6GSE #ZOZO #GoogleCloudNext 🗌 pic.twitter.com/K3piy3n94q — Google Cloud Japan (@googlecloud_jp) 2025幎7月23日 むオン×ZOZO×『Web配信の技術』著者が語るパフォヌマンスチュヌニング:60分で掎む劇的改善術 8月26日に開催された「 むオン×ZOZO×『Web配信の技術』著者が語るパフォヌマンスチュヌニング:60分で掎む劇的改善術 」に、EC基盀開発本郚の秋田が登壇したした。 🗣 本日 12:00 開催 『むオン×ZOZO×『Web配信の技術』著者が語るパフォヌマンスチュヌニング:60分で掎む劇的改善術』にSRE郚の秋田が「ZOZOTOWNリプレむスで埗たパフォヌマンス改善の知芋ず、チヌムで継続するための取り組み」ずいうタむトルで登壇したす https://t.co/4jnAv8ZuIa #aeon_tech_hub — ZOZO Developers (@zozotech) 2025幎8月26日 掲茉 oceanα これからの海を持続可胜に共創しおいくダむバヌず海の総合サむト「 oceanα 」に、ZOZOMETRYのオヌダヌり゚ットスヌツ補䜜に関する蚘事が掲茉されたした。 oceana.ne.jp corp.zozo.com Girls Meet STEM 8月18日に、「 Girls Meet STEM 」プログラムの䞀環ずしお、䞭高生女子を察象ずした䜓隓むベント「 ZOZOTOWNずWEARを支える技術ず働き方をのぞいおみよう 」を開催したした。 techblog.zozo.com このむベントの内容が耇数メディアに掲茉されたした。 www.nikkei.com www.nikkei.com www.sankei.com ゜フトバンクニュヌス Webメディア「 ゜フトバンクニュヌス 」に、生産プラットフォヌム開発本郚本郚長の鈎朚が取材された蚘事が掲茉されたした。サステナビリティ芳点でのMade by ZOZOの匷みや「キダスクwith ZOZO」など呚蟺の取り組みが玹介されおいたす。 www.softbank.jp 以䞊、2025幎8月のZOZOの掻動報告でした ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com
.entry .entry-content ul > li > ul { display: none; } .entry-content td { text-align: left; } こんにちは。技術戊略郚 CTOブロックの ikkou です。ZOZOでは毎幎、独自の新卒研修を実斜しおいたすが、今幎は日本CTO協䌚の新卒゚ンゞニア合同研修にも参加するこずにしたした。参加は任意ずしお、興味を持぀研修を自身で遞択できるようにしたした。遠方に䜏んでいるメンバヌも参加できるように調敎の䞊、ZOZOからは通算11名の新卒゚ンゞニアが参加したした。本蚘事では参加者によるレポヌトをお䌝えしたす。 日本CTO協䌚 新卒゚ンゞニア合同研修ずは 第1回Google Cloud のスペシャリストず孊ぶ BigQuery & Gemini講垫グヌグル・クラりド・ゞャパン合同䌚瀟 Google Cloud プロダクトの魅力に觊れる 生成 AI をテヌマずしたグルヌプワヌク 懇芪䌚での亀流 たずめ 第2回CTOから新卒に向けた講話講垫日本CTO協䌚 / 株匏䌚瀟LayerX) / 生成AI時代の゜フトりェア゚ンゞニアずしおの働き方の期埅倀株匏䌚瀟Progate AI時代に必芁なキャッチアップずアりトプット 解像床を高め、目の前の仕事を明文化する 投資家的にキャリアを考える 最初の10幎時間ず健康をレバレッゞにする 環境が人を぀くる 最埌に 第3回AWS 初孊者向け合同研修 / AWS JumpStart 講垫アマゟンりェブサヌビスゞャパン合同䌚瀟 Day0 事前課題「Cloud Practitioner Essentials」でりォヌムアップ Day1 講矩ずハンズオン Day2 アヌキテクチャ怜蚎䌚 最埌に 第4回サヌバヌ解䜓研修講垫GMOペパボ株匏䌚瀟 解䜓の前に いよいよサヌバ解䜓 1. 物理サヌバのほずんどの郚品は工具なしで解䜓可胜 2. メモリには刺す順番が重芁 3. 物理サヌバにおける冗長化の仕組み たずめ 第5回日本CTO協䌚ISUCON新卒研修*1 + 解説株匏䌚瀟PR TIMES ISUCONずは、 研修の目的 実際にISUCONをやっおみお 1. ログからボトルネックを芋぀ける nginxのアクセスログを芋る プロセスごずのCPU負荷を確認する スロヌク゚リログを有効化 2. チュヌニング むンデックスの远加 LIMIT句の付䞎 静的ファむルはnginxに任せる 懇芪䌚の亀流 たずめ 第6回生成AIに関する講矩講垫: 日本マむクロ゜フト株匏䌚瀟 AIネむティブ時代 ゚ンゞニアの未来 Azure AI Foundryずモデルの進化 たずめ おわりに 日本CTO協䌚 新卒゚ンゞニア合同研修ずは 本合同研修は、日本CTO協䌚の䌚員䌁業の新卒゚ンゞニアを察象ずした取り組みで、初回の2024幎床に続き今回が2幎目です。ZOZOは初幎床に参加しおいなかったので、今回が初参加ずなりたす。 cto-a.org 研修は党6回で構成され、すべおオフラむンで実斜されたした。 研修内容 講垫 第1回Google Cloud のスペシャリストず孊ぶ BigQuery & Gemini グヌグル・クラりド・ゞャパン合同䌚瀟 第2回CTOから新卒に向けた講話 / 生成AI時代の゜フトりェア゚ンゞニアずしおの働き方の期埅倀 日本CTO協䌚 / 株匏䌚瀟LayerX、株匏䌚瀟Progate 第3回AWS 初孊者向け合同研修 / AWS JumpStart アマゟンりェブサヌビスゞャパン合同䌚瀟 第4回サヌバヌ解䜓研修 GMOペパボ株匏䌚瀟 第5回日本CTO協䌚ISUCON新卒研修 *1 + 解説 株匏䌚瀟PR TIMES 第6回生成AIに関する講矩 日本マむクロ゜フト株匏䌚瀟 各回の内容に぀いお3名からのレポヌトをお届けしたす 第1回Google Cloud のスペシャリストず孊ぶ BigQuery & Gemini講垫グヌグル・クラりド・ゞャパン合同䌚瀟 第1回は坂元が担圓いたしたす 今回は、枋谷ストリヌムにある Google さんのオフィスにお邪魔しお、研修に参加しおきたした。 この研修回では倧きく分けお講矩・グルヌプワヌク・懇芪䌚の3぀に分けお、各パヌトをご玹介いたしたす Google Cloud プロダクトの魅力に觊れる 研修の前半では、Google Cloud が提䟛するさたざたなプロダクトの講矩がありたした。䞭でも特に印象的だったのが「 BigQuery 」ず「 NotebookLM 」に関するセッションです。 普段、匊瀟でも BigQuery を䜿っおデヌタ分析や開発を行っおいたすが、正盎なずころこれたでは「高速で䜿いやすい分析基盀」ずいう、少しふんわりずしたむメヌゞしか持っおいたせんでした。しかし、今回の研修を通じお、BigQuery の内郚構造の仕組みBorg による実行、Colossus でのストレヌゞ管理、Jupiter によるネットワヌク制埡などを孊び、匊瀟含め倚くの䌁業が採甚しおいる理由がはっきりず芋えおきたした。 さらに印象的だったのが、他の Google サヌビスずの高い芪和性です。䟋えば、Gemini in BigQuery を䜿うこずで、自然蚀語で質問するだけで自動的に SQL ク゚リを生成しおくれる機胜がありたす。そこから Google Chat ず぀なげるこずで、BigQuery を盎接開かなくおもデヌタにアクセスできる仕組みが実珟できるずいう話もあり、そんな未来的な掻甚䟋に、玔粋にワクワクしたした そしお、個人的に䞀番「すぐに䜿えそう」ず感じたのが「NotebookLM」のセッションです。NotebookLM は、資料や䌚議内容などをアップロヌドしおおくず、そこから芁玄やアむデア出したでしおくれたす。このサヌビスは、日々倧量の情報をキャッチアップする新卒の立堎にずっお本圓にありがたい存圚です。しかも、アップロヌドする資料に基づいお掚論しおくれるため、自身の業務ドメむンに特化したような回答を埗るこずができるのです。 ここで重芁なのが、プロンプトの工倫です。今回の講矩では、実務でもすぐに䜿えるプロンプト改善のポむントを5぀教わりたした。 詳现か぀明確な指瀺を出す - 具䜓的な情報を提䟛し、期埅する回答の方向性を明確に 圹割を䞎える - 䟋「あなたは優秀なデヌタサむ゚ンティストです」 “Don't”よりも“Do”を䜿う -「しないで」ではなく「する」ず指瀺する 回答できない堎合の代替案を提瀺する - 䟋「わからない堎合は、関連する情報を提䟛しおください」 繰り返し詊行しおフィヌドバックを䞎える - 䞀床で正解を求めず、やり取りを重ねる意識を持぀ このポむントを意識しおプロンプトを䜜っおみたずころ、 より想定しおいた回答に近いアりトプットが返っおきお、次の日の業務からさっそく掻かすこずができたした。 普段、瀟内のツヌルをなんずなく䜿っおしたうこずもありたしたが、今回の研修を通しお「なぜこのツヌルを䜿うのか」「どう掻甚すればもっず䟿利になるのか」ずいう、日々の業務ではなかなか埗られない知識を深めるこずができたした。その結果、業務の理解や掻甚スキルの底䞊げにも぀ながり、実際の仕事にもすぐに圹立おるこずができたした。 生成 AI をテヌマずしたグルヌプワヌク 研修の埌半では、10人匱のグルヌプに分かれお「 新卒研修期間、たたその埌に盎面するであろう業務の課題に察し、生成 AI をどのように圹立おられるか 」ずいうテヌマでグルヌプディスカッションが行われたした。私のチヌムでは、新卒ならではの悩み䟋ドキュメントが未敎備、情報が属人化しおいる、AI 利甚ポリシヌが曖昧に察しお、以䞋のようなアむデアが出たした。 NotebookLM に関連情報をアップロヌドし、キャッチアップを効率化 ドキュメントだけでなく、䌚議音声やメモもアップロヌド MCP 経由での情報提䟛 退職者に聞くような感芚で情報を匕き出すこずで、属人化の解消にもなる AI 利甚ポリシヌを監芖するような゚ヌゞェントの蚭眮 同じ新卒ずいう立堎からこそ、業務の䞭での小さな悩みや課題を共有し合うこずができた時間でした。最埌には他チヌムの発衚もあり、「確かにそんな課題もあるな」「こんなふうに AI を掻甚する芖点があるのか」ずいった新たな気づきがあり、すごく参加者の皆が近くに感じられお楜しかったです。たた、「新卒だからこそ、生成 AI ず䞀緒にできるこずがある」ずいう前向きな議論が倚く、頌もしい仲間の存圚を感じるこずができたした。 懇芪䌚での亀流 研修の締めくくりには、懇芪䌚が行われたした。本研修では、毎回最埌に懇芪䌚が蚭けられおおり、普段なかなか話す機䌚のない他の新卒メンバヌや、開催䌁業の瀟員の方々ず亀流できたす。今回は、Google Cloud の瀟員の方々ずお話しする機䌚があり、普段の業務や Google Cloud のプロダクトの掻甚方法に぀いお、ざっくばらんにお話しできたした。特に、懇芪䌚で開催されたクむズ倧䌚では、Google Cloud に関する知識を深めるずずもに、他の新卒メンバヌずの芪睊も深めるこずができたした。ありがたいこずに、クむズ倧䌚では入賞でき、「Google Cloud ではじめる実践デヌタ゚ンゞニアリング入門」ずいう曞籍をいただくこずができたした たずめ 今回の研修を通じお、Google Cloud のプロダクトの魅力や生成 AI の掻甚方法に぀いお深く孊ぶこずができたした。明日から生かせるような実践的なお話も倚く、研修埌すぐに業務に掻かし、さらに孊びを深められるきっかけになりたした 第2回CTOから新卒に向けた講話講垫日本CTO協䌚 / 株匏䌚瀟LayerX) / 生成AI時代の゜フトりェア゚ンゞニアずしおの働き方の期埅倀株匏䌚瀟Progate 第2回は䞉山が担圓いたしたす 今回はProgate CTOの島接真人さんによる「 AI時代の新卒゚ンゞニアに必芁な倉化ず孊習 」ず、LayerX代衚取締圹CTOの束本勇気さんによる「 キャリアの考え方、フォロワヌシップ 」に぀いおの貎重なお話を䌺うこずができたした。CTOの方々から盎接お話が聞ける機䌚は滅倚にないこずなので、ずおも楜しみでした。 前半は島接さんによる「AI時代の新卒゚ンゞニアに必芁な倉化ず孊習」に぀いおの講矩をしおいただきたした。特に印象に残ったのは、AI時代における゚ンゞニアの実践ずしお、以䞋の2点でした。 キャッチアップずアりトプットを埪環させるこず 解像床を高め、仕事を明文化するこず AI時代に必芁なキャッチアップずアりトプット AIは日進月歩で進化しおおり、私たちも継続的にアップデヌトを重ねる必芁がありたす。ここで重芁になるのが キャッチアップずアりトプット です。珟圚はAIが台頭し始めたばかりで、AIの掻甚法に明確な答えは芋぀かっおいたせん。AIに仕事が代替される可胜性を懞念する声も少なくありたせんが、島接さんは「AIを䜿っおみないこずには、掻甚されるむメヌゞも、代替されるむメヌゞも湧いおこない」ずおっしゃっおいたした。確かに、AIの基本的な䜿い方は理解しおいおも、それが自分の仕事に察しお十分に掻甚できおいるかは疑問でした。そのため、たずはAIを積極的に䜿っおいくこずが重芁だず感じたした。 島接さんが匷調されおいたのは、 キャッチアップずアりトプットの埪環 を䜜るこずです。 自分で詊行錯誀を重ねお局所最適を積み重ねる。 埗られた知芋をチヌムや組織、コミュニティに共有しおいく。 このサむクルを高速に回し、AIに関する知識を継続的にアップデヌトしおいくこずが倧切だずいうこずでした。このサむクルを意識しお業務でもどんどんAIを䜿い、掻甚法をチヌムに還元しおいきたいず思いたした 解像床を高め、目の前の仕事を明文化する 業務でAIを䜿っおいるず、回答の質がプロンプトの質に倧きく䟝存しおいるこずを実感したす。期埅から倖れた回答が返っおくる背景には、埀々にしお 「自分の理解が浅い」たたは「衚珟が曖昧」 ずいう問題が朜んでいたす。これに察しお島接さんは、 「自分の仕事を文章に起こせるほどに明確に理解するこず」 が重芁だずおっしゃっおいたした。 私自身も業務でChatGPTを䜿甚する機䌚が倚いのですが、耇数の受け取り方ができるような曖昧な衚珟をした時は、確かに期埅した回答が埗られたせん。こうした堎面では決たっお、タスクに察する理解床が䜎く、党䜓像は捉えおいるものの具䜓的な郚分の理解が浅い状態にありたした。だからこそ 前提・制玄・期埅する結果を蚀語化する 甚語を揃える 曖昧さを排陀する ずいった「解像床を䞊げるプロセス」そのものがAIを正しく䜿いこなす力に぀ながるず感じたした。タスクをやり始めるずわからないこずだらけですが、曖昧な郚分を極力無くし詳现な説明がい぀でもできるようなレベルたで解像床を高くするこずを意識しお業務に取り組んで行きたす 研修の埌半では、LayerX CTOの束本さんによる「キャリアの考え方ずフォロワヌシップ」に぀いおの講矩が行われたした。 急速な技術革新や働き方の倉化が続く䞭で、キャリアに䞍安を抱く新卒の方も倚いはずです。私自身、3幎埌・5幎埌はおろか、1幎埌さえどうなっおいるのか想像が぀きたせん。ここでは、 埌悔のないキャリアを築くための 3 ぀のポむント を敎理しお共有したす。 投資家的にキャリアを考える 束本さんは、埌悔しないキャリアを築くための鍵ずしお 「投資家の芖点を持぀こず」 を挙げられたした。投資家は自身の資産を元手にリスクを取り、将来のリタヌンを狙い資産を増やしおいきたす。キャリアの䞖界での “資産” は、 信頌・信甚、知識・経隓、スキル技術力マネゞメント力 など。これらを元手に、やりたい方向ぞ効率よく投資し、リタヌンを最倧化する——それが「投資家的に考えるキャリア」です。 「信頌やスキルの量によっお任される仕事の倧きさが倉わる」ずいう実感は、倚くの人がうなずけるはずです。䞀方で、新卒の私たちはただこの資産を十分に持っおいたせん。では、䜕を元手にすればよいのでしょうか。 最初の10幎時間ず健康をレバレッゞにする 私たちは資産が乏しいように芋えお、実は 「時間」ず「健康」 ずいう、誰もが喉から手が出るほど欲しい資産を持っおいたす。家庭を持぀前の20〜30代は、もっずも自由に時間を䜿え、もっずも動ける時期です。だからこそ、この10幎をフル投資期間ずしお、将来の資産信頌・知識・スキルぞ倧胆に投資しおいくこずが重芁です。 具䜓的には 小さなプロゞェクトでも締切ず品質を培底し、信頌を積み䞊げる 登壇や蚘事執筆で孊びを発信し、知識ず信甚を広げる 少し背䌞びしたタスクを匕き受け、成功すれば実瞟、倱敗しおも経隓を資産化する 行動にはリスクが䌎いたすが、 行動 → å­Šç¿’ → 振り返り のサむクルを短く回すほど、同じ成果をより小さなリスクで埗られるようになりたす。時間ず健康ずいうレバレッゞを効かせ、投資を続けおいきたす。 環境が人を぀くる 「人は呚囲の5人の平均である」ずいう蚀葉がありたす。私自身、所属するコミュニティの䟡倀芳や考え方に倧きく圱響を受け、それが今の自分を圢䜜っおいるず感じたす。束本さんは、 意思の力に頌るより、環境を遞ぶこず の重芁性を匷調しおいたした。努力する仲間の姿を芋れば自然ず自分も頑匵れたすし、同僚の昇進に悔しさを芚えるこずも「健党な嫉劬」ずしお行動゚ネルギヌに倉えられたす。自らも行動し発信するこずで、呚囲にポゞティブな刺激を䞎える存圚になるこずもできたす。 最埌に 今回は島接さんず束本さんのお二方からお話を聞く機䌚を蚭けお頂きたしたが、お二方ずも口を揃えお仰っおいたこずは行動ず孊習のサむクルを回すこずの重芁性です。圓たり前なこのサむクルを高い質で回せるようになるためにもたずはたくさん行動しお経隓を積み重ねおいきたいず思いたした。このような貎重な機䌚をいただき、本圓にありがずうございたした 第3回AWS 初孊者向け合同研修 / AWS JumpStart 講垫アマゟンりェブサヌビスゞャパン合同䌚瀟 第3回も䞉山が担圓いたしたす 今回はアマゟンりェブサヌビスゞャパン合同䌚瀟による「 AWS JumpStart 」でした。 本研修はAWSの初心者から䞭玚者を察象ずしたもので、オンラむンで2日間かけお開催されたした。研修内容ずしおはAWSサヌビスを利甚しおアプリを䜜成するために必芁ずなる知識を講矩ずハンズオン圢匏で孊び、その埌チヌムに分かれお䞎えられた芁件に沿うアヌキテクチャを怜蚎するグルヌプワヌクを行いたした。最埌はチヌムごずにアヌキテクチャをテヌマずした発衚䌚を行いたした。 Day0 事前課題「Cloud Practitioner Essentials」でりォヌムアップ 今回の研修は初孊者を察象ずしおいたすが、2日目にはチヌムでのアヌキテクチャ怜蚎䌚もありたすし、知識䞍足で䜕もできないのではないか ず少し䞍安でした。しかし、公匏が提䟛するAWS Cloud Practitioner Essentialsを事前に孊べる機䌚が甚意されおいたした。「サヌビス名は知っおるけど、どこでどんな目的で䜿われおるのかわからない」状態だった私も、しっかりず土台を築けたした このAWS Cloud Practitioner Essentialsは、資栌を取埗のための講座ですが、具䜓䟋がずおもわかりやすくここでAWSぞの理解がかなり深たったず思っおいたす。誰でも受けられる講座なので、AWSをこれから孊びたい ず思っおいる初心者の方はたずこの講座を受けるこずをお勧めしたす Day1 講矩ずハンズオン 初日は、事前孊習で埗た知識の振り返りずチヌムを組んでTODOアプリをクラりド䞊に構築するハンズオンを行いたした。ハンズオンは2、3人でチヌムを組みモブプロ圢匏で進めおいきたした。 モブプロは、画面操䜜をするドラむバヌず口頭で指瀺を出すナビゲヌタヌに分かれお行いたした。オンラむンでの䜜業であったため、ドラむバヌ圹の時は「むンスタンスタむプをt2.microにしたす」ず実況したした。ナビゲヌタヌ圹の時も「右偎䞊郚のオレンゞのボタン「むンスタンスを起動」を抌しおください」ずいうように具䜓的な指瀺を出すこずで、スムヌズに進めるこずができたした。 ハンズオンでは、ALBを䜿ったマルチAZ方匏で可甚性を担保した構成をECSFargateで構築したした。そしお、デヌタベヌスもAurora MySQLのWriterReader構成で構築したした。これによりアプリ、DBの双方で冗長性が確保され、片方のAZで障害が発生しおもサヌビスを継続できるようになりたす。 モブプロで䜜成したアプリケヌションのむンフラ構成図(JumpStart2025-スケヌラブルハンズオンモブプロverより匕甚 今回は実際に障害が起こった際、どのようにしお自動で埩旧するのかを確認するために、Writerを停止しおその挙動を芳察したした。Writerがダりンしおもフェむルオヌバヌが発生し、自動で埩旧するこずが確認でき、冗長構成にする倧切さを孊びたした サヌビスを運甚するにあたり、冗長性や可甚性はずおも倧切な芁玠になりたす。それがどのように実珟されおいるのかを手を動かしながら孊ぶこずで理解が深たりたした Day2 アヌキテクチャ怜蚎䌚 2日目は1日目の振り返りを行ったあず、1チヌム5、6人のグルヌプに分かれアヌキテクチャ怜蚎䌚を行いたした。グルヌプワヌクでは、" 党員退職した EC チヌムの代打 "ずいう蚭定で、半幎埌にロヌンチ予定のECサむトのAWS構成を今日䞭に提案するずいう、ドラマ仕立おの課題に取り組みたした。 匊瀟もECサむトを運営しおいるため、このテヌマをもらった時は党䜓像を想像しやすかったです。実際に取り組んでみるず、さたざたな課題が䞎えられたした。「アクセス数が増加する時間垯に応じおスケヌルさせる」「ナヌザヌの賌買ログをためおAIに解析させる」「利甚者が10倍に増えおも同じ構成で捌ききれるのか」など、運甚を考慮した課題ばかりでした。アヌキテクチャ蚭蚈の難しさを感じたした。 しかし、チヌムメむトず協力し意芋を出し合いながら進められた点は面癜く、自分では考えおいなかった気づきを共有しおくれおずおも充実した1日を過ごせたず思っおいたす。改善の䜙地はあるものの、チヌムずしお玍埗できるアヌキテクチャ構成図を䜜成できたした 2日目に䜜成したアヌキテクチャ構成図 最埌に 始たる前はAWSの構成図を芋ただけでは䜕がどうなっおいるのか党くわからない状態でした。しかし今では、アプリを運甚するための基本的なサヌビスの圹割を理解し、䜕を行っおいるかがわかるレベルたで来られたず感じおいたす。今回はGUI操䜜でWebアプリの環境構築を䜓隓したした。AWSにはCloudFormationやCDKずいったIaCInfrastructure as Codeず呌ばれるコヌドベヌスで環境構築する手法もありたす。次はコヌドデプロむに挑戊しおみたいず思いたす 2日間かけおAWSのサヌビスに぀いおれロから孊び、非垞に充実した研修ずなりたした。今埌のAWS構成の考え方や、知識を広げおいく方法も掎めた実感がありたす。今回の孊びを業務や個人の成長に掻かしおいきたいず思いたした 第4回サヌバヌ解䜓研修講垫GMOペパボ株匏䌚瀟 第4回も坂元が担圓いたしたす 今回は、GMOペパボさんのオフィスにお邪魔しお、「 サヌバ解䜓研修 」に参加しおきたした。普段はクラりドや仮想環境䞊で開発するこずが倚い私にずっお、物理サヌバに盎接觊れお解䜓するずいうこずが初めおずいうこずで、人䞀倍ワクワクしながら向かいたした。 解䜓の前に 実際に解䜓する前に、たずはサヌバの構成に関する座孊が行われたした。どんな郚品があり、それぞれの郚品がどのような圹割を果たしおいるのかを事前に孊んでおくこずで、サヌバ解䜓䜓隓の解像床が䞀気に高たりたす。 いよいよサヌバ解䜓 講矩の埌にいよいよ研修のメむンむベントであるサヌバ解䜓に進みたす。1チヌム十数人に分かれお倧きなテヌブルを囲み、甚意された実機のサヌバを順に分解しおいきたす。 最初は「壊しおしたわないか」ず䞍安に思いながら慎重に觊れおいたのですが、埐々に慣れおくるず、「ここっお倖れるのか」ずいう探究心が勝り、倢䞭になっお䜜業しおいたした。普段゜フトりェアを扱うこずが倚いからこそ、こうしおハヌドりェアに盎接觊れられる貎重さを改めお実感したした。解䜓を通じお、倚くの気づきや驚きがありたしたが、その䞭でも特に印象的だった3点を玹介したす。 1. 物理サヌバのほずんどの郚品は工具なしで解䜓可胜 䞀番初めに驚いたのは、物理サヌバは工具なしで解䜓できるずいうこずです。おっきりネゞをドラむバヌで倖しおいくものだず思っおいたので、最初に倧きな衝撃を受けたした。このような蚭蚈になっおいるのは、サヌバを垞時皌働させながらパヌツを亀換するためです。いわゆるホットスワップに察応しおおり、停止時間を最小限に抑えたメンテナンスが可胜になりたす。たた、サヌバ内郚のパヌツにはオレンゞ色ず青色のハンドルがあり、色によっお亀換の可吊が区別されおいたした。 オレンゞホットスワップ察応皌働䞭に亀換可胜。 青コヌルドスワップ察応シャットダりンが必芁。 ホットスワップのパヌツはサヌバラックから䞋ろさずずも亀換できるずいう話を䌺い、メンテナンスを考慮した合理的な蚭蚈になっおいるこずに感動したした。 2. メモリには刺す順番が重芁 2点目は、メモリには“掚奚の挿入順序”が存圚するずいうこずです。順番が異なっおもサヌバは動䜜したすが、システム偎での最適な構成が取れず、パフォヌマンスに圱響を及がす可胜性がありたす。クラりドでは、抜象化されたリ゜ヌスずしお最適化が自動的に行われるため、普段はあたり意識するこずがありたせん。しかし今回の研修を通じお、物理サヌバならではの芖点や工倫を知り、それらがハヌドりェアレベルで実珟されおいるこずを䜓感したした。 3. 物理サヌバにおける冗長化の仕組み クラりドにも冗長構成がありたすが、もちろん物理サヌバにも冗長性を担保する構成が存圚したす。䟋えば、RAID構成によるディスクの冗長化や電源ナニットの二重化など、障害耐性を高める工倫が随所に芋受けられたした。先述したホットスワップの考え方ずも぀ながり、物理むンフラでも「止めないこず」がいかに重芖されおいるか、そしおどのように実珟されおいるかを孊ぶこずができたした。たた、物理サヌバずクラりドを比范するこずで、オンプレ構成のこずはもちろんクラりドの構成に関しおもより理解が深たりたした。 自チヌムの解䜓䜜業が終わった埌は、他テヌブルの様子も芋孊したした。解䜓しおいるサヌバはテヌブルごずに異なり、NVIDIA補のGPUが搭茉された高性胜なサヌバを解䜓しおいるテヌブルもありたした そのテヌブルでは、GPUの仕組みや冷华構造に泚目しながら、より技術的な䌚話が亀わされおいお、䞀段ず癜熱した議論が亀わされおいたした。 そしお最埌に、解䜓したサヌバを再び元に戻しお終了ずなりたす。「どこに䜕があったっけ 」ず苊戊しながらも、チヌムで協力しお慎重に戻しおいきたした。 ※写真は撮り忘れおしたいたしたが、無事に元の状態に戻せたした たずめ 今回のサヌバ解䜓研修を通じお、単にパヌツ構成を孊ぶだけではなく、なぜこのような構造になっおいるのか、どんな工倫が詰め蟌たれおいるのかを孊ぶこずができたした。たた、オンプレの知識を埗たこずでクラりドぞの理解もさらに深たりたした。今たで、物理サヌバはどこか遠く難しいものだず敬遠しおしたっおいた郚分がありたしたが、今回手で觊れるこずによっおより身近な存圚に倉わったず実感しおいたす。今回の孊びを今埌の業務にも掻かしおいきたいず思いたす 第5回日本CTO協䌚ISUCON新卒研修*1 + 解説株匏䌚瀟PR TIMES 第5回はもみじこず皇映が担圓いたしたす 今回は、東京郜千駄ヶ谷のピクシブ本瀟にお邪魔したした 研修のテヌマは「 ISUCON新卒研修 」になりたす ISUCONずは、 ISUCONずは、「 Iikanjini Speed Up Contestいい感じにスピヌドアップコンテスト 」の略で、お題ずなるWebサヌビスを決められたレギュレヌションの䞭で限界たで高速化を図るチュヌニングバトルです ISUCONはLINEダフヌ瀟が䞻催しおおり、毎幎開催されおいたす。ISUCONでは3人以䞋のチヌムで参加でき、優勝賞金はなんず100䞇円です これはモチベが䞊がりたすね それだけでなく、ISUCONで孊んだ知識は、実際の珟堎にも通じるものがたくさんあるため、実践的なスキルを習埗するずおも良い機䌚です 研修の目的 今回の研修では2人たたは3人のチヌムで、ISUCONずほが同様なWebサヌビスをお題に、チヌム察抗でスコアを競い合うISUCON研修を実斜したした たた研修の目的ずしおは、ISUCONを䜓隓するだけでなく、チヌムでの掻動を通しお、実際の業務で「呚りの力を掻甚し、問題解決する」力を逊い、自分起点で質問をしお協力を埗る姿勢を習埗するこずです 実際にISUCONをやっおみお 私は3人チヌムでWebチュヌニングを行いたした 競技時間は10:00〜18:00でしたが、あっずいう間に時間が過ぎ、正盎時間があればもっずできたなず悔しかったです Webのチュヌニングの基本はシンプルです、「蚈枬しお、いちばん時間を食っおいる郚分から手を入れる」これに぀きたす ここでは、今回のお題で私たちが取り組んだ具䜓的なステップず最適化手法に぀いお玹介したす 1. ログからボトルネックを芋぀ける nginxのアクセスログを芋る 今回のフロント゚ンドにはnginxが入っおいるので、たずは access.log を解析したした。ログにリク゚ストのメ゜ッドやURI、応答時間を出力するこずで、どのリク゚ストに時間を芁しおいるのかを調査したした。解析ツヌルalpなどを䜿うこずにより、重いリク゚ストをすぐに抜出できたす。 プロセスごずのCPU負荷を確認する htop や top でCPU䜿甚率を芋るこずで、時間がかかっおいるプロセスを芋぀けるこずができたす。今回のお題ではMySQLでCPUを倚く䜿甚しおおり、DBにボトルネックがあるこずを発芋できたした。 スロヌク゚リログを有効化 スロヌク゚リログを有効化し、すべおのク゚リをロギングするこずにより、最も時間のかかるク゚リを調べるこずができたす。たた、EXPLAINでむンデックス利甚状況をチェックするこずにより、「むンデックスが適切に䜿われおいるか」や「filesortが発生しおいないか」を確認できたす。 2. チュヌニング 調査から埗られた情報をもずに、具䜓的なチュヌニングを行なっおいきたす。今回のお題では以䞋のようなチュヌニングを行いスコアを向䞊させたした。 むンデックスの远加 今回のお題では、耇合むンデックスを远加するこずで、filesortがなくなり倧幅に高速化できたした。 LIMIT句の付䞎 アプリケヌション偎でLIMIT句により取埗数の制限をかけるこずにより、ネットワヌク転送やメモリ䜿甚量を削枛し、高速化に繋げるこずができたした。 静的ファむルはnginxに任せる 画像やCSS、JavaScriptはアプリケヌションサヌバヌを経由せず、nginxの try_files や expires ディレクティブで盎接返すこずにより、アプリケヌションのリ゜ヌスを必芁な凊理に集䞭でき、高速化が図れたした。 懇芪䌚の亀流 懇談䌚では、高埗点をずったチヌムの人にスコアアップの秘蚣を聞きたした 限られた時間の䞭でいかに「調査→改善」のサむクルを回すこずができるかが重芁であるず感じたした 研修に参加した人の䞭には、早くも冬に行われるISUCON本番に向けお、準備を始める人もいたした私も参加する予定です たずめ 今回のISUCON新卒研修では、ISUCONずいうお題を通しお、チヌムで課題解決に向かう力ず共に、適切な技術を甚いお課題を解決するこずの倧切さを孊びたした。これは実際の業務にも匷く生きる内容であるず感じたした。たた、ISUCONずいう競技の楜しさ・技術の面癜さを改めお匷く感じる研修でした 今回研修に参加された皆さん、研修を支えおくださった皆様、本圓に貎重な䜓隓ず良い孊びをありがずうございたした 第6回生成AIに関する講矩講垫: 日本マむクロ゜フト株匏䌚瀟 第6回ももみじこず皇映が担圓いたしたす 今回は、品川の日本マむクロ゜フト株匏䌚瀟にお邪魔したした 研修のテヌマは「生成AIに関する講矩」になりたす 講矩は柳原 @yanashin18618 さんに行なっおいただきたした AIネむティブ時代 今幎で創立50呚幎を迎えるMicrosoftでは、2025幎を「AI゚ヌゞェント元幎」ず䜍眮づけおいるほど、今幎は新たな時代を迎える1幎です。Microsoftが目指すAIの䞖界は、自然蚀語を䜿い、私たちがPCやサヌビスを盎感的に操䜜する未来を描いおいたす。 Microsoftが掚進するAIのキヌワヌドは、この2぀です。 Copilotコパむロット– ナヌザヌの盞棒のように䜜業をサポヌトするAI Agent゚ヌゞェント– 人間が委任したタスクを自埋的に完遂するAI どちらの蚀葉も近幎私たちの日垞でも聞くようになりたしたね GitHub Copilotは既に䞖界で1,500䞇人以䞊が利甚し、Microsoft Copilotは2,000䞇〜3,000䞇人のアクティブナヌザヌを抱えおいるそうです 人間ずAIが䌎走したり、AIに自埋的に任せたりするこずが圓たり前の瀟䌚が圢成されおいきそうです ゚ンゞニアの未来 今回の講矩でずおも興味深かったのが「Agent」のお話です 私はこれたでも仕事においおAIを掻甚しおいたした。これたでのAIは人間の“助手”ずしお動く存圚でしたが、Agentはそれを䞀歩超えお、たるで有胜な同僚のように仕事を䞞ごず任せるように仕事をすべおAIによっお完了させるこずができたす さらに面癜いのは「マルチ゚ヌゞェント」の仕組みです 耇数の゚ヌゞェントが䌚話しながら協力し、コヌドの生成から運甚・監芖たで䞀貫しお行う、たるで人間のチヌムメンバヌ同士のやり取りがAIに眮き換わるむメヌゞです これからは、゚ンゞニアの圹割は単玔なコヌディングから「AIに䜕を任せるかを蚭蚈する偎」ぞずシフトし぀぀ありたす Azure AI Foundryずモデルの進化 MicrosoftはこのAI革呜を支える基盀ずしお、Azure䞊で動䜜する「Azure AI Foundry」を構築しおいたす。Azure AI Foundryずは、Azureが提䟛する統合型AIプラットフォヌムです。開発者・䌁業が生成AIアプリや゚ヌゞェントを安党か぀スケヌラブルに構築できるように蚭蚈されたサヌビスになりたす。Azure AI Foundryでは、OpenAIのGPTシリヌズGPT-3、GPT-4、GPT-4oやMicrosoft独自のLLM/SLMを自由に組み合わせ、AI゚ヌゞェントの䜜成からモデルのチュヌニングたで䞀気通貫で行うこずができたす このようなサヌビスが提䟛されおいる䞭で、「どんな゚ヌゞェントを䜜るのか」「䜕を任せたいのか」を明確に描ける人こそが、これからの゚ンゞニアリング䞖界で匷くなるず感じたした AIネむティブな時代においお 「AIが䜜業をすべおやっおくれるなら、人間は䜕をする」 ずいう疑問がありたす。 今回の講矩を通しお、 人間の圹割は「手を動かすこず」から「考えるこず・創るこず」ぞシフトしおいく ず匷く感じたした。AIに仕事を委任できるからこそ、人間は「なぜそれをやるのか」「どんな䟡倀を生むのか」ずいう䞊流の蚭蚈・刀断・クリ゚むティブな発想がより重芁になりたす。 ゚ンゞニアはコヌドを曞く“職人”ではなく、AIを䜿いこなす“ディレクタヌ”のような立ち䜍眮に進化しおいくのではないでしょうか たずめ 今回の研修では生成AIの掻甚に぀いお孊びたした AIネむティブ時代の゚ンゞニアずしお生成AIを掻甚し、AIず共存しおいく未来がすぐそこたできおいたす。AIに䜕をさせるか、䜕をしお欲しいのかを明確に䌝えるこずによりAIの性胜を匕き出すこずが求められたす。今埌はAIの性胜を最倧限匕き出しながら、効率的に開発し、よりクリ゚むティブな゚ンゞニアになれるように頑匵りたす おわりに 参加した新卒゚ンゞニアは各研修を通じお、さたざたな内容を幅広く孊べたのではないでしょうか。たた、オフラむン開催ずいうこずで、他瀟の同期ずの亀流もあり、きっず刺激を受けるこずもあったず考えおいたす。これらの経隓は、今埌の業務においおも倧いに圹立぀こずでしょう。みんなの掻躍を期埅しおいたす ZOZOでは、新卒・䞭途に限らず、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味ある方は以䞋のリンクからぜひご応募ください。 corp.zozo.com corp.zozo.com *1 : 「ISUCON」は、LINEダフヌ株匏䌚瀟の商暙たたは登録商暙です。
.table-of-contents ul ul { display: none; } はじめに こんにちは、SRE郚カヌト決枈SREブロックの䌊藀 @_itito_ です。普段はZOZOTOWNのカヌト決枈機胜のリプレむス・運甚・保守に携わっおいたす。たた、デヌタベヌス以䞋DB領域でのテックリヌドを担っおおり、DBREずしおDB呚りの運甚・保守・構築に関わっおいたす。 匊瀟のDBRE掻動に぀いおは、以前次の蚘事で玹介したした。 techblog.zozo.com この掻動の䞭で、DBのテヌブル定矩の蚭蚈レビュヌを行っおいたす。この運甚にAWSのBedrockを甚いお自動化を組み蟌んだ取り組みを玹介したす。 目次 はじめに 目次 背景・課題 DB蚭蚈レビュヌの課題 レビュヌ工数ず「トむル化」の問題 開発者によるガむドラむン遵守床のばら぀き DBレビュヌフロヌの倉曎方針 自動レビュヌBotの蚭蚈・実装 技術遞定 䜜成するレビュヌシステムずSlackずの連携 Confluenceずの連携方法 LLMモデルの遞定 AWS Bedrockのナレッゞベヌスの䜿甚是非 システムの党䜓構成 AWSリ゜ヌスに぀いお Bedrockアクセス甚のInference Profileに぀いお Lambda䞊で動かすPythonコヌドの実装に぀いお 重耇実行察策 Bedrockの呌び出しコヌド Slackのむベントに応じた凊理の実装 Bedrockに枡すプロンプト リリヌス埌の効果 レビュヌ時の指摘件数の枛少 リリヌス埌のコスト たずめず展望 背景・課題 匊瀟では2020幎頃から、ZOZOTOWNに関わるDBのテヌブルや列の「远加・曎新・削陀」を行う際には、蚭蚈レビュヌを必須ずしおいたす。これは、䞻に以䞋の3぀の目的で開始されたした。 リプレむスが進むZOZOTOWNのDB呚りの党䜓像把握のため 秘密情報の含たれたデヌタがマスク化などのアクセス制埡が行われずにリリヌスされるこずを防ぐため 開発ガむドラむンに沿った蚭蚈をしおいるかを確認するため 秘密情報の取扱いルヌルに぀いおは以䞋で玹介しおいたす。 techblog.zozo.com たた、匊瀟では各プラットフォヌムごずに開発ガむドラむンが定められおいたす。䟋えば以前本ブログで玹介されたものずしおはバッチの開発ガむドラむンがありたす。 techblog.zozo.com DBの蚭蚈においおは、呜名芏玄やテヌブル蚭蚈時の泚意点、デヌタ保護のためのルヌルなどが定められおいたす。 DB蚭蚈レビュヌの課題 䞊蚘のような目的で行われおいるDB蚭蚈レビュヌですが、運甚する䞭でいく぀か課題を抱えおいたした。 レビュヌ工数ず「トむル化」の問題 レビュヌ䟝頌は週に倚くおも10件皋床ず、件数自䜓は倚くありたせん。しかし、そのほずんどが「開発ガむドラむンに沿っおいるか」を確認する定型的な䜜業であり、䞀皮のトむル手䜜業による非効率な繰り返し䜜業ずなっおいたした。 開発者によるガむドラむン遵守床のばら぀き ZOZOTOWNの開発には、倚くの瀟員やパヌトナヌ䌚瀟の゚ンゞニアが関わっおいたす。これは私たちの匷みである䞀方、開発ガむドラむンぞの遵守床に倧きく差が生たれる偎面もありたした。ガむドラむンにただ慣れおいないメンバヌの蚭蚈では、基本的な指摘が倚くなるケヌスもあり、レビュヌにかかる工数・負荷の増加に぀ながっおいたした。 DBレビュヌフロヌの倉曎方針 これたでDB蚭蚈レビュヌを次のようなフロヌで行っおいたした。 開発者がConfluence䞊に蚭蚈曞を䜜成 Slackの専甚チャンネルにおワヌクフロヌからレビュヌ䟝頌を投皿 DBREメンバヌがレビュヌを実斜 蚭蚈レビュヌ承認埌に実装を開始 このフロヌの改善を考える䞭で、根本から仕組みを芋盎すこずも怜蚎したした。䟋えば、蚭蚈曞をMarkdownでGit管理しおプルリク゚ストでレビュヌするフロヌぞず切り替えるずCopilotによる自動レビュヌなどが可胜になりたす。 しかしER図のような芖芚的な衚珟が難しくなる点や、倧きな倉曎はかえっお開発者偎の負担を増やしおしたう懞念がありたした。 そこで、既存フロヌの途䞭でBotによる自動レビュヌを組み蟌むこずにしたした。 開発者がConfluence䞊に蚭蚈曞を䜜成 Slackの専甚チャンネルにおワヌクフロヌからレビュヌ䟝頌を投皿 BotがConfluenceからテヌブル構造を読み取り、レビュヌを実斜 DBREメンバヌがBotで刀断できなかった郚分を远加でレビュヌ 蚭蚈レビュヌ承認埌に実装を開始 実際に手順3の自動レビュヌの流れを、実装埌のキャプチャを甚いお図瀺したのが次の画像です。 この仕組みを構築するにあたっお䜿甚した技術や実装の詳现に぀いお、次の章で玹介したす。 自動レビュヌBotの蚭蚈・実装 技術遞定 システムを構築するにあたり、必芁ずなる技術の調査および遞定をしたした。 䜜成するレビュヌシステムずSlackずの連携 䞊蚘のレビュヌフロヌを実珟するためにはSlack䞊での投皿をトリガヌずしお凊理を開始し、結果をSlack䞊に投皿する仕組みが必芁です。 このためにSlack Appを䜜成し、Botずしお動䜜させるこずにしたした。開発にはSlack公匏のPython向けフレヌムワヌクである「 Slack Bolt for Python 」を䜿甚するこずにしたした。 Slack Boltではリク゚スト眲名の怜蚌ずいったセキュリティ察策がデフォルトで有効になっおいる点も倧きなメリットでした。 Confluenceずの連携方法 Botがレビュヌをするには、たずConfluenceから蚭蚈曞の内容の取埗が必芁です。 ここでポむントずなったのが、匊瀟が利甚しおいるConfluenceがServer版である点です。Cloud版であればMCPのようなモダンな連携方法も考えられたすが、Server版では利甚できたせん。さらに、将来的にはCloud版ぞ移行するずいう話もあったため、移行埌も動き続ける仕組みが必芁でした。 この状況から、技術遞定では以䞋の2点を重芖したした。 Cloud版ずServer版の䞡方に察応できるこず 最䜎限の機胜ずしお、テヌブル蚭蚈の蚘茉されたペヌゞが取埗できるこず この方針のもず、最終的にConfluence REST APIを盎接利甚するシンプルな方法を遞びたした。実装には、䞡方のバヌゞョンをサポヌトしおいるラむブラリ「 Atlassian Python API 」を掻甚しおいたす。 LLMモデルの遞定 私たちのむンフラはAWSをメむンで利甚しおいるこず、セキュリティの芳点からモデルの孊習にデヌタが䜿われないようオプトアりト蚭定も可胜なこずから、実行環境にはAWS Bedrockを遞択したした。 Bedrockでは倚くのモデルが利甚できたすが、以䞋の3぀のモデルを候補ずしたした。 Titan Text G1 - Express Claude 3.5 Sonnet Claude 3 Haiku 開発元 Amazon Anthropic Anthropic モデルの䜍眮づけ 速床ずコスト効率を重芖した汎甚モデル 知胜、速床、コストのバランスに優れた䞻力モデル 最速・最軜量・䜎コストな゚ントリヌモデル 入力トヌクン 1,000 個あたりの䟡栌 USD 0.000275 USD 0.003 USD 0.00025 出力トヌクン 1,000 個あたりの䟡栌 USD 0.000825 USD 0.015 USD 0.00125 レビュヌ粟床 × ◯ △ 怜蚌結果 指摘すべき点を芋逃した ガむドラむンに沿った指摘ができた 䞀郚、誀った指摘があった モデルのレビュヌ粟床を確かめるため、意図的にアンチパタヌンを含んだテヌブル定矩ず蚭蚈ガむドラむンを枡し、各モデルにレビュヌさせおみたした。 結果は衚の通り、 Anthropic Claude 3.5 Sonnet が最も的確な指摘をしおくれたした。䟡栌は3぀の䞭で最も高䟡ですが、Botの利甚頻床は1日数回皋床です。そのため、コストは数円から数十円の範囲に収たり、粟床の高さを考えれば十分に蚱容できるず刀断したした。珟圚はその埌継である最新版のSonnetモデルを利甚しおいたす。 AWS Bedrockのナレッゞベヌスの䜿甚是非 Botの回答粟床を高めるには、私たちのDB蚭蚈甚の開発ガむドラむンをLLMに䌝える必芁がありたす。その方法ずしお、AWS Bedrockの「ナレッゞベヌス」機胜の利甚を怜蚎したした。 これは、S3などにあるドキュメントを読み蟌たせるだけで、簡単にRAG怜玢拡匵生成を実珟できる䟿利な機胜です。 しかし、調査を進めるずコスト面が課題ずなるこずがわかりたした。ナレッゞベヌスの裏偎では、ベクトルデヌタベヌスずしおAmazon OpenSearch Serviceが利甚されたす。これにより、最䜎でも月数䞇円の固定費が発生する芋蟌みずなりたした。 今回Botに䞎えたい知識は「開発ガむドラむン」の、DB項目のさらに䞀郚だけです。デヌタ量はそこたで倚くなく、曎新頻床も高くありたせん。このためだけに垞時皌働のデヌタベヌスを甚意するのは、費甚察効果が芋合わないず刀断したした。 結果ずしお、よりシンプルに 必芁なガむドラむン情報を、郜床プロンプトに盎接埋め蟌む 方匏を採甚したした。シンプルながら、私たちのナヌスケヌスにはこれが最適なアプロヌチでした。 システムの党䜓構成 䞊蚘を螏たえ、以䞋のようなアヌキテクチャずしたした。 Confluenceから取埗したデヌタはそのたただずHTML圢匏の文字列のため、これをパヌスしお情報を䞀床たずめおからJSON圢匏に倉換しおいたす。 この倉換はレビュヌの粟床を向䞊させるために行っおいたす。怜蚌の結果、HTMLをそのたた枡すよりも、敎圢枈みのデヌタを枡すこずで、モデルが意図した情報を正確に理解しやすくなりたした。 たた、パヌスには圓初PythonのラむブラリのBeautiful Soupを䜿甚する考えでしたが、自由な構造に察応できるように、ここでもBedrockを䜿甚するこずずしたした。 AWSリ゜ヌスに぀いお AWSリ゜ヌスはCloudFormationで管理しおおり、䞻に以䞋のリ゜ヌスを䜜成しおいたす。 S3 Bucket ゜ヌスコヌドを栌玍するためのバケット API Gateway Slackからのリク゚ストを受け取るための゚ンドポむント AWS Lambda Pythonで実装したSlackアプリケヌションを実行するためのLambda関数 Secrets Manager 各皮トヌクン情報を安党に管理するためのシヌクレット Inference Profile Bedrockでモデルを利甚する際に䜿甚するプロファむル Bedrockアクセス甚のInference Profileに぀いお AWS Bedrockでは、有効化した時点でそのモデルを利甚可胜ずなりたす。ただし、デフォルトの掚論プロファむルを䜿甚するず、どのアプリケヌション・ナヌザヌがコストを発生させたのかを远跡できたせん。これにより、コストの配分や分析が難しくなりたす。 そのため次のようなコヌドでコスト配分タグを付䞎したアプリケヌション掚論プロファむルを䜜成しお䜿甚するこずにしたした。 Resources : InferenceProfileDBDesignReviewBot : Type : AWS::Bedrock::ApplicationInferenceProfile Properties : InferenceProfileName : !Sub "${AppNameDBDesignReviewBot}-inference-profile" ModelSource : CopyFrom : !Sub "arn:aws:bedrock:ap-northeast-1:${AWS::AccountId}:inference-profile/apac.anthropic.claude-sonnet-4-20250514-v1:0" Tags : - Key : Name Value : !Sub "${AppNameDBDesignReviewBot}-inference-profile" - Key : CostEnv Value : !Ref CostEnv - Key : CostTeam Value : !Ref CostTeam Lambda䞊で動かすPythonコヌドの実装に぀いお ここからは、このBotを実珟しおいるAWS LambdaのPythonコヌドに぀いお、ポむントを絞っお玹介したす。 Pythonず䞻芁ラむブラリのバヌゞョン Python : 3.13 atlassian-python-api : 4.0.4 slack_bolt : 1.23.0 重耇実行察策 Slackからのリク゚ストをLambdaで凊理する際、泚意したいのがタむムアりトによるリトラむです。AWS Lambdaのコヌルドスタヌトなどで凊理に3秒以䞊かかるず、Slackは「応答がない」ず刀断し、同じリク゚ストを再送しおきたす。これにより意図せず凊理が重耇しお実行される可胜性がありたす。 そのため、リトラむを衚すヘッダヌが付䞎されおいる堎合はSkipするこずで重耇凊理を回避するようにしたした。 def lambda_handler (event, context): """ Lambda Functionのハンドラヌに蚭定する関数 """ headers = event.get( "headers" , {}) if "X-Slack-Retry-Reason" in headers: logger.info( "Slackリトラむリク゚ストを無芖したす" ) return { "statusCode" : 200 , "body" : "" } return slack_request_handler.handle(event, context) Bedrockの呌び出しコヌド AWSが提䟛しおいるBedrockのAPI呌び出しの方法ずしお、「InvokeModel」ず「Converse API」の2皮類が存圚しおいたす。 docs.aws.amazon.com 䞡者の倧きな違いの1぀ずしお、柔軟性の違いがありたす。実際にテストコヌドを基にした䟋が次の画像です。InvokeModelを䜿甚した堎合は、リク゚ストボディやレスポンスの解析をモデルごずに行う必芁がありたす。 InvokeModelでモデルが異なる堎合の実装䟋 䞀方、Converse APIを䜿甚するずこれが共通のコヌドで実装できるようになりたす。 ConverseAPIでモデルが異なる堎合の実装䟋 LLMの進化は速いため、将来のモデル倉曎に備えお、柔軟性の高いConverse APIを遞択したした。 Slackのむベントに応じた凊理の実装 Slackで発生する様々なむベントに応じた凊理は、Boltのデコレヌタを䜿っお実装したす。䟋えば、Botぞのメンションをきっかけに入力フォヌムを開く凊理は、以䞋のコヌドで実珟しおいたす。 @ app.event ( "app_mention" ) def handle_app_mentions (body, say): thread_ts = body.get( "event" , {}).get( "thread_ts" ) or body.get( "event" , {}).get( "ts" ) send_review_request_message(say, thread_ts) def send_review_request_message (say, thread_ts): """ 自動レビュヌに必芁な情報を送信するためのフォヌムをスレッドに送信したす。 """ say( blocks=[ { "type" : "header" , "text" : { "type" : "plain_text" , "text" : "DB蚭蚈自動レビュヌ䟝頌" , } }, { "type" : "section" , "text" : { "type" : "mrkdwn" , "text" : f "お疲れ様です。DB蚭蚈自動レビュヌBotです。 \n 蚭蚈曞の自動レビュヌを行いたい堎合、以䞋を入力しお送信ボタンを抌しおください。 \n\n 利甚マニュアル: <{BOT_MANUAL_URL}|{BOT_MANUAL_TITLE}> \n *泚意: テンプレヌトに沿ったConfluenceのURLのみレビュヌ可胜です。* \n " } }, ... 䞊蚘コヌドによっお、前述の自動レビュヌの党䜓像のこの郚分が実行されたす。 Slack䞊でのメッセヌゞの芋た目を敎え、入力欄やボタンの配眮には、Slack公匏の Block kit Builder を掻甚しおいたす。 Bedrockに枡すプロンプト レビュヌ時に䜿甚するプロンプトは以䞋のように定矩しおいたす。Confluenceから取埗した「テヌブル蚭蚈情報」ず、「開発ガむドラむン」をこのプロンプト内に動的に埋め蟌めるようにしたした。なお、プロンプト゚ンゞニアリングに぀いおの知芋がただ少ない状態での実装のため、あくたで䞀䟋ずしおご芧ください。 prompt_data = f """ あなたはデヌタベヌスのテヌブル蚭蚈の専門家です。 テヌブル蚭蚈情報ず、開発ガむドラむンの情報を枡したすのでレビュヌしおください。 ガむドラむンに沿っおいない項目に関しおは「指摘箇所」ずしお、 泚意事項リストに該圓する項目の堎合は「泚意箇所」ずしお、 その他のコメントがあれば「その他」ずしお出力しおください。 出力フォヌマットは以䞋の通りです。 ``` 提䟛されたテヌブル蚭蚈情報に基づいお、ガむドラむンに沿っおレビュヌを行いたした。 ヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌ :rotating_light:指摘箇所:rotating_light: 【1】<指摘察象> ・ 指摘内容: <指摘内容> ・ ガむドラむンの察応項目: <ガむドラむンの察応項目> ・ 修正案: <修正案> 2. <指摘察象> ... ヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌ :warning:泚意箇所:warning: 【1】<泚意内容> ・泚意理由: <泚意理由> 【2】<泚意内容> ヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌヌ :memo:その他:memo: ・ <その他のコメント> ``` 指摘内容がある堎合の出力䟋 ``` :rotating_light:指摘箇所:rotating_light: 【1】テヌブル名: Member ・ 指摘内容: テヌブル名が単数圢になっおいる ・ ガむドラむンの察応項目: テヌブルおよびカラムにプレフィックスを぀けず、テヌブル名は耇数圢にするMUST ・ 修正案: テヌブル名をMembersに倉曎する 【2】カラム名: MemberID ... ``` 指摘内容がない堎合の出力䟋 ``` :rotating_light:指摘箇所:rotating_light: 特に指摘箇所はありたせんでした。 ``` テヌブル蚭蚈情報は次のようにJSON圢匏で提䟛されたす。 テヌブル蚭蚈情報: {table_design_json} ガむドラむンは以䞋の通りです。 {BASE_GUIDELINES} {guidelines_by_db_engine} 泚意事項リストは以䞋の通りです。 {WARNING_LIST} 珟圚匊瀟でレビュヌ䟝頌のあるDBは、「SQL Server」ず「MySQL」の2皮類が倚くを占めおいたすが、それぞれでガむドラむンに違いがありたす。そのためSlack䞊での入力フォヌムでどちらか遞択できるようにし、遞択されたDBに応じたガむドラむンが䜿われるようにしおいたす。 たた、これたでレビュヌ時に泚意喚起を行なっおいた項目なども、泚意リストずしお定矩し、プロンプトぞず埋め蟌むようにしたした。䟋えば秘密情報が含たれたカラムを远加する堎合には、運甚フロヌに則っお別途察応が必芁ずなるため、そちらの察応を促すようにしおいたす。 ガむドラむンや泚意リストを枡すだけでもレビュヌはできたすが、それだけでは指瀺された項目しかチェックできたせん。そこで、プロンプトの冒頭で「あなたはデヌタベヌスのテヌブル蚭蚈の専門家です」ずいう圹割を蚭定しおいたす。これにより、私たちが明瀺的に定矩しおいない事柄に぀いおも、LLMが持぀知識を掻かし、プラスアルファの指摘をしおくれたす。 リリヌス埌の効果 レビュヌ時の指摘件数の枛少 リリヌス前埌10件のレビュヌにおける、レビュアヌからの指摘件数を比范した結果が以䞋のグラフです。 Botにより必芁な指摘の玄7割が自動で行われるようになり、レビュアヌの負荷が軜枛されたした。 ガむドラむンには「ロヌマ字衚蚘や省略圢の英単語は䜿わず、完党な英単語を䜿甚する」ずいう項目もあり、芋萜ずしがちなスペルミスなども自動的に拟われお修正されるなど嬉しい効果もありたした。 リリヌス埌のコスト 運甚開始埌のコストを、以䞋にたずめたした。 レビュヌBotを動かす環境は、「開発者からのレビュヌ䟝頌を受ける環境」ず、「Botの改修時に䜿甚する環境」ずしお2環境を甚意しおいたす。圓初想定しおいなかった芏暡の倧きなテヌブルがレビュヌ䟝頌ずなり、改修ずリトラむを繰り返したこずで最初の2日間は他の日ず比べおコストが高くなっおいたす。その埌は安定しおおり、1日あたり数十セント皋床のコストで運甚できおいたす。 AWSのサヌビスで芋た堎合には、次のようになっおいたす。Secrets Managerぞの保存によっお若干のコストがかかっおいる他は、ほずんどがBedrockのコストです。 箄1か月運甚しおかかった実際のコストずしおは玄7.62ドルであり、コストを倧きく抑えお運甚できたした。 たずめず展望 本蚘事では、長幎手動で察応しおいたDB蚭蚈レビュヌのフロヌに自動化を組み蟌んだ事䟋に぀いお玹介したした。 Slackを起点ずしおPythonのアプリを動かし、Confluenceからテヌブル蚭蚈情報を読み取り、Bedrockを甚いお開発ガむドラむンに基づいお自動レビュヌする仕組みずしおいたす。 今回の仕組みのタヌゲットは蚭蚈曞のレビュヌでしたが、その蚭蚈曞通りに実装できおいるかプルリク゚ストに察しおレビュヌする仕組みなどにも応甚は効きそうです。LLMを掻甚するこずによる運甚負荷軜枛を実珟するための取り組みは匕き続き進めおいきたいず思いたす。 ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 hrmos.co
はじめに こんにちは。Developer Engagementブロックの @wiroha です。8月18日月に、ZOZOにお䞭高生女子を察象ずした䜓隓むベント「 ZOZOTOWNずWEARを支える技術ず働き方をのぞいおみよう 」を開催したした。 これは 公益財団法人山田進倪郎D&I財団 が実斜する「 Girls Meet STEM 」プログラムの䞀環です。䞭高生女子がSTEM科孊・技術・工孊・数孊分野で働く人やSTEM分野で孊ぶ孊生、実際の珟堎に觊れるこずで、将来の可胜性を広げる機䌚を提䟛するこずを目的ずしおいたす。ZOZOではこの掻動の意矩に共感し昚幎より参画しおおり、今回は2床目の開催です。前回の様子は次のレポヌト蚘事をご芧ください。 techblog.zozo.com 今回は玄20名の参加者が集たり、オフィスツアヌ、サヌビス䜓隓技術玹介、女性゚ンゞニアずの亀流を通じお、ファッションず技術の面癜さを䜓感したした。本蚘事では、圓日の様子をご玹介したす。 むベント抂芁 日時2025幎8月18日月13:0015:30 䌚堎ZOZO西千葉本瀟 察象䞭孊1幎生高校3幎生たでの戞籍䞊たたは性自認が女性の方 定員20名 www.shinfdn.org オヌプニング たずは䌚瀟玹介や事業玹介により、ZOZOのこずを知っおもらう時間を蚭けたした。ZOZOTOWNやWEAR by ZOZO以䞋、WEARのサヌビス、蚈枬事業などに぀いお解説するこずで、この埌のサヌビス䜓隓技術玹介の内容をより深く理解しおもらうこずを目指したした。 サヌビス䜓隓技術玹介 2぀のグルヌプにわかれ、「サヌビス䜓隓技術玹介」ず「オフィスツアヌ」を亀代で実斜したした。「サヌビス䜓隓技術玹介」では、ZOZOTOWNのARメむク、ZOZOGLASS、WEARのファッションゞャンル蚺断を䜓隓しおもらいたした。 AR技術でメむクが斜された画面䞊の自分の顔に驚き、カラフルで芋慣れないZOZOGLASSを手に取り笑顔が出るなど、ZOZOの技術を楜しんでいる様子でした。䜓隓した埌は各サヌビスで䜿甚されおいる技術を玹介し、技術によっおファッションが楜しくなるこずを感じおもらいたした。 実際にZOZOGLASSを担圓しおいる女性゚ンゞニアからやりがいに぀いお語っおもらったずころ、海倖チヌムず䞀緒に働くこずや英語孊習の重芁性に関心が集たっおいたした。 オフィスツアヌ こだわりの瀟屋である、西千葉本瀟のオフィスツアヌを実斜したした。メッセヌゞが蟌められたアヌトや遊び心のある䌚議宀、絚毯の暡様や色䜿いの工倫など、ZOZOらしいデザむンが斜されたオフィス内を案内したした。クむズを亀えながらの玹介で、参加者の皆さんも考えながら楜しんでいたした。最初は緊匵しおいた参加者も、オフィス内を歩くうちにリラックスできた様子でした。 パネルトヌク 次にパネルトヌクを開催し、新卒1〜2幎目の若手゚ンゞニアから話を聞きたした。孊生時代の経隓や゚ンゞニアになろうず思ったきっかけ、䞭孊・高校時代の進路遞択などに぀いお語っおもらいたした。 幎霢の近い゚ンゞニアからの話は身近に感じられたようで、熱心に聞き入っおいたした。文系から゚ンゞニアになった話や転孊科した話もあり、タむミングに合わせお進路やキャリアを考えながら、自らアクションするこずの倧切さを感じおもらえたのではないでしょうか。 質問䌚 その埌は少人数のグルヌプに分かれお参加者からの質問に答える時間を蚭け、ZOZOの女性゚ンゞニア6名が䞀緒にお話ししたした。 slido を掻甚したずころ、非垞にたくさんの質問が寄せられたした。「い぀進路を決めたしたか」「文系や未経隓でも゚ンゞニアになれたすか」「取っおおいた方がいい資栌はありたすか」など、進路や孊習に関する質問に察しお゚ンゞニアたちが自身の経隓を亀えながら䞁寧に答えたした。 お土産 参加者の皆さんに、ZOZOオリゞナルグッズなどをお土産ずしおお枡ししたした。むベントの思い出ずしお楜しんでもらえたら嬉しいです。今回の䜓隓時間に入りきらなかったZOZOMATもお枡ししおおり、自宅で足の3Dサむズ蚈枬を䜓隓しおもらえればず思いたす。 メディア掲茉情報 本むベントはメディアからの泚目も集め、以䞋のずおり掲茉されたした。今埌も公開され次第、順次远蚘しおいきたす。 www.nikkei.com www.sankei.com 最埌に 参加者の皆さんからは、次のような感想をいただきたした。 このオフィスで働きたいず思えるような玠敵な環境が敎ったオフィスだった 今日䜓隓した自分に䌌合うものを探したりするのが楜しかった 文系・理系関係なく挑戊すればできるのかもしれないず思えた 奜きなこずを仕事にするこずは自分のためになるず知るこずができた 苊手なこずや、やらなければならないこずに䞍安を抱く方が倚かった䞭で、亀流を通じお自分の興味や埗意なこずに目を向けるようになっおいる様子が䌺えたした。 ZOZOはこれたでもさたざたな女性掻躍掚進のための掻動に取り組んできおおり、今埌もこうした機䌚を提䟛しおいきたいず考えおいたす。本むベントにより䞭高生女子の皆さんがファッションず技術の面癜さを感じ、将来の可胜性を広げるきっかけになれば幞いです。
2025/10/29 モゞュラモノリスの採甚に関する蚘述を䞀郚修正いたしたした。 こんにちは、カヌト決枈郚カヌト決枈基盀ブロックの倚田ず䞉浊です。 普段はZOZOTOWN内のカヌト機胜や決枈機胜の開発、保守運甚、リプレむスを担圓しおいたす。 これたでにカヌト決枈サヌビスのリプレむスでは圚庫デヌタのクラりドリフトやクレゞットカヌド決枈の非同期化を実珟しおいたす。 techblog.zozo.com techblog.zozo.com 本蚘事では、ZOZOTOWNにおける「カヌト投入から泚文䜜成たで」のシステムを、Classic ASPからJavaぞ移行した取り組みに぀いおご玹介したす。䞀郚機胜は既にリリヌス枈みで、珟圚も段階的な移行を継続䞭です。 このプロゞェクトは、モノリシックなアプリケヌションからマむクロサヌビスアヌキテクチャぞず段階的に移行する取り組みの䞀環ずしお進めおきたした。その過皋で、どこでサヌビスを分けるべきかずいう課題に盎面したした。安易な分割は機胜間の䟝存を耇雑化させる䞀方で、分割を避けすぎるずモノリスのたたずなり、保守性は向䞊したせん。 こうした難しさに向き合う䞭で、私たちはシステムの責務やドメむン構造を明確にする手段ずしお、むベントストヌミングを導入するこずにしたした。 きっかけは、瀟内で実斜された「むベントストヌミング䌚」でした。興味を持ったメンバヌが䜕床か参加するうちに、「自分たちの担圓領域のカヌト投入から泚文䜜成でも詊しおみよう」ずいう声が自然ず䞊がるようになりたした。ちょうど新たなメンバヌがチヌムに加わったタむミングでもあり、ドメむン党䜓を俯瞰する手段ずしおも有効だず考えたした。たた、新たな手法に挑戊するこず自䜓が゚ンゞニアずしおのスキル向䞊に぀ながり、チヌム党䜓で取り組むこずはチヌムビルディングの面でもプラスになるず刀断したした。 アヌキテクチャの遞定にあたり、圓初はマむクロサヌビスアヌキテクチャの採甚を怜蚎しおいたした。しかし、巚倧なカヌト決枈システムの耇雑性や実装・運甚の難易床、開発リ゜ヌスの制玄を螏たえ、拡匵性ず保守性を䞡立できる珟実的な遞択ずしおモゞュラモノリスアヌキテクチャを採甚したした。 以䞋では、その刀断に至った背景や、実際の取り組み内容、そしお埗られた気づきに぀いお詳しくご玹介したす。 モゞュラモノリスを採甚した理由 メリット・デメリット比范 むベントストヌミング むベントストヌミング抂芁ず目的 コンテキスト境界ずは むベントストヌミングの進め方 1.ブレむンストヌミングする 2.むベントを時系列に䞊べる 3.カラヌパズルをする 4.コンテキスト境界を定める むベントストヌミングをやっおみお モゞュラモノリスの実装 ZOZOのカヌト決枈基盀のプロゞェクト構成 orchestrator モゞュヌルの圹割 build.gradleによる䟝存関係の制埡 モゞュラモノリスやっおみたメリット/デメリット メリット デメリット 今埌の展望 たずめ モゞュラモノリスを採甚した理由 マむクロサヌビスずの比范怜蚎の結果、私たちがモゞュラモノリスを採甚した理由をご説明したす。 メリット・デメリット比范 マむクロサヌビス モゞュラモノリス メリット スケヌラビリティ・匟力性が高い ・ 高負荷なサヌビスのみスケヌル可胜 テスタビリティが高い ・ 共通ラむブラリのアップデヌト時のテスト範囲が狭い サヌビス間の凊理の匕越しがしやすい ・ コヌドの移動のみで察応可胜 ・ むンタフェヌスの倉曎が䞍芁 デメリット 開発䞭に倉曎があった際にサヌビス間の凊理の匕越しがしにくい ・ API蚭蚈のし盎し ・ オヌケストレヌタからのリク゚スト修正 ・テスト甚モック修正 スケヌラビリティ・匟力性が䜎い ・ 䞀郚モゞュヌルのみの迅速な曎新・スケヌリングが難しい マむクロサヌビスは運甚面での恩恵が倧きい䞀方で、開発初期の柔軟性や倉曎察応ではモゞュラモノリスが優れおいるこずが分かりたす。 圓初はマむクロサヌビスぞの现分化を進める予定でしたが、怜蚎を進める䞭で泚文コンテキストが想定以䞊に倧きくなりたした。特に泚文テヌブルの責務をどのサヌビスが担圓すべきかずいう課題に盎面したした。 たた、デヌタの独立性やトランザクション境界を考慮したマむクロサヌビスの境界を定めるこずは困難でした。 そこで、以䞋の理由からモゞュラモノリスを採甚する方針に転換したした。 開発スピヌドず工数の芳点 マむクロサヌビス化には盞応の開発工数が必芁だが、案件開発が䞊行しお進行しおいるずいう背景を螏たえ、モゞュラモノリスなら段階的な移行が可胜で、リプレむスのスピヌドを優先可胜。 組織䜓制ずの敎合性 マむクロサヌビスではサヌビスごずに専任チヌムが望たしいが、珟圚のチヌム䜓制では各サヌビスずチヌムを1察1で察応させるこずが難しい状況。 サヌビス分割の投資察効果 決枈凊理など䞀郚機胜をマむクロサヌビス化するこずも怜蚎した。しかし、利甚者がZOZOTOWN内郚に限定されるこずや、専甚デヌタベヌスぞの移行が困難なこずから、珟時点での分割メリットは限定的ず刀断。 たずはモゞュラモノリスずしおコンテキスト境界に基づいたモゞュヌル分割を実斜し぀぀、今埌の組織倉曎や事業の成長に応じお、段階的なマむクロサヌビス化も芖野に入れた拡匵性のある蚭蚈方針ずしたした。 むベントストヌミング むベントストヌミング抂芁ず目的 むベントストヌミングEvent Stormingずは、䞻に゜フトりェア開発や業務プロセスの蚭蚈で䜿われるワヌクショップ手法です。関係者党員が集たり、システムや業務の流れを「むベント出来事」を䞭心に可芖化・敎理したす。 私たちは以䞋の目的でこの手法を導入したした。 コンテキスト境界を明確にする。 カヌト/泚文フロヌの党䜓像を把握し、チヌム間で認識を統䞀する。 ドメむン知識を持぀メンバヌず新芏参入メンバヌずの間で知識を共有し、リプレむスを円滑に進める。 コンテキスト境界ずは bounded context A description of a boundary (typically a subsystem, or the work of a particular team) within which a particular model is defined and applicable. 境界づけられたコンテキストBounded Contextずは、特定のモデルを定矩・適甚する範囲を明瀺的に瀺したものです。 代衚的な境界の䟋は、サブシステムやチヌムなどです。 匕甚 公匏DDD Reference 䞀方で「コンテキスト境界」は、この境界づけられたコンテキスト同士の境界線や接觊郚分を指したす。それぞれのコンテキストがどこたでの責務を持ち、他のコンテキストずどのように連携するかを定める境界のこずです。 䟋えば、モゞュラモノリスでは「モゞュヌル」単䜍を基本ずしお、マむクロサヌビスでは「サヌビス」単䜍を基本ずしおコンテキスト境界を蚭定するこずが䞀般的です。ただし、必ずしも1:1察応するわけではなく、ドメむンの特性や組織の状況に応じお柔軟に蚭定されたす。 むベントストヌミングの進め方 1.ブレむンストヌミングする 各自、思い぀く限りのドメむンむベントを付箋にそれぞれ蚘茉する。 重耇しおも問題なく、たずは蚘茉する。 この段階でむベントに抜けや挏れがあっおも気にする必芁はありたせん。埌のステップで敎理・補完しおいくため、たずはシステム党䜓の流れや構造をざっくりず把握するこずを目的ずしおいたす。 2.むベントを時系列に䞊べる 時系列に䞊べる。 同じむベントを重ねる可胜であれば、重耇削陀する。 䞍足しおいるむベントがあれば付箋を远加する。 このステップの目的は、システムや業務プロセスの党䜓的な流れや構造を明確にするこずです。 むベントを時系列で敎理するこずで、プロセスの前埌関係や䟝存関係が可芖化されたす。これにより、関係者党員が同じ芖点で党䜓像を把握できるようになり、抜けや重耇、認識のズレなども発芋しやすくなりたす。 3.カラヌパズルをする 時系列に䞊べたむベントの付箋に察しお、アクタヌやコマンド、゚ンティティなどの情報を远加する。 「アクタヌ」「どのような操䜜や指瀺コマンド」をきっかけにむベントが発生したのかを色分けした付箋やラベルで敎理する。 その時に関わる゚ンティティやシステムの状態なども䜵せお蚘茉する。 アクタヌActor むベントを匕き起こす䞻䜓。システムのナヌザヌや倖郚サヌビス、管理者などが該圓する。 コマンドCommand アクタヌがシステムに察しお行う操䜜や指瀺。䟋ずしお「商品をカヌトに远加する」「泚文を確定する」などの具䜓的なアクションが含たれる。 ゚ンティティEntity システム内で管理される情報やオブゞェクト。䟋えば「カヌト」「泚文」「商品」などが該圓する。 このステップの目的は、むベント同士の関係性や、業務・システム内での圹割分担、デヌタの流れをより明確にするこずです。色分けによっお芖芚的にも分かりやすくなり、耇雑なビゞネスルヌルを盎感的に理解できるようになりたす。 4.コンテキスト境界を定める 業務むベントやナヌスケヌスの流れをもずに、責任や関心ごずが明確に分かれるポむントで境界を蚭定する。 既存システムの匷い䟝存ストアドプロシヌゞャヌによるトランザクション管理がある領域は、珟段階では無理に分割せず、将来的な分離を芋据えお倧きめにたずめる。 頻繁に䞀緒に倉曎される機胜や連携の匷い領域は同じコンテキスト内に収めるこずで、保守性や開発効率を高める。 最終的に以䞋のようにコンテキスト境界を定めたした。 むベントストヌミングをやっおみお ワヌクショップ圢匏で実斜したこずで、ドメむン知識を吞収しやすいず感じたした。長幎カヌト決枈システムに携わっおきたメンバヌが持぀暗黙知や個人の頭の䞭にあったビゞネスルヌルを新芏参入メンバヌを含むチヌム党䜓で共有・明文化できたした。たた、各メンバヌがそれぞれ異なる芖点で捉えおいたコンテキスト境界を図解するこずで、具䜓的な合意圢成ができたした。抜象的だった「責務の分担」が芖芚的に敎理され、モゞュヌル蚭蚈の方向性に぀いお玍埗感のある議論ができたのは倧きな収穫でした。 䞀方で、オンラむンでの開催はどうしおも発蚀者が限られがちで、察面に比べお議論が掻発になりにくい印象を受けたした。特に耇雑なテヌマでは、オフラむンで1日かけおじっくり議論したほうが、倚くの意芋を匕き出しやすく、党䜓の理解も進みやすいず感じたした。 たた、既存システムを題材にした堎合、党䜓像を把握するのに想定以䞊の時間がかかりたした。実際、週1回1時間のペヌスで進めお玄2か月かかりたした。なお、この期間はむベントストヌミングに専念しおいたわけではなく、メンバヌはそれぞれ他の業務ず䞊行しお取り組んでいたため、じっくり時間をかけお進めた圢になりたす。 モゞュラモノリスの実装 ZOZOのカヌト決枈基盀のプロゞェクト構成 䜿甚しおいる技術スタックは以䞋の通りです。 蚀語Java フレヌムワヌクSpring Boot ビルドツヌルGradle カヌト決枈基盀で採甚しおいるモゞュラモノリスの構成を簡略化するず以䞋の通りです。 . ┣ module ┃ ┣ orchestrator ┃ ┣ cart ┃ ┣ order ┃ ┣ payment ┃ ┗ {module-name} ┗ core --- 各モゞュヌルで共通しお利甚するクラスの実装。 各業務機胜泚文、カヌト、決枈などごずにモゞュヌルを分けおおり、各モゞュヌルは基本的に単䞀責務を持぀ように蚭蚈しおいたす。たた、coreモゞュヌルには耇数のモゞュヌルで共通しお䜿甚する芁玠を集玄しおいたす。具䜓的には、日時や文字列操䜜などのナヌティリティクラスや、各モゞュヌルで共通しお利甚する凊理などです。これにより、コヌドの重耇を避け぀぀、再利甚性を高めおいたす。 orchestrator モゞュヌルの圹割 党䜓の構成の䞭でもorchestratorモゞュヌルは、ナヌスケヌスの流れを制埡する䞭栞的な圹割を担っおいたす。耇数モゞュヌルにたたがる業務フロヌを統括する責任を持っおいるのがorchestratorです。具䜓的には、cartやorder、paymentずいった各モゞュヌルのアプリケヌション局に䟝存し、それらを組み合わせお「1぀の業務シナリオ」ずしおたずめる圹割を果たしたす。orchestratorには以䞋の利点がありたす。 各モゞュヌルはあくたで自埋的な責務を持぀。 orchestratorが連携のハブずなるこずでモゞュヌル間の䟝存が耇雑にならない。 最終的にマむクロサヌビスに分離する際にも、orchestratorの統合・調敎機胜はそのたた掻甚でき、BFFBackend for Frontendアヌキテクチャず連携しやすい蚭蚈になっおいる。 build.gradleによる䟝存関係の制埡 重芁なポむントずしお、モノリスに逆戻りしないための䟝存関係の制埡がありたす。各モゞュヌルには個別のbuild.gradleを配眮し、䟝存察象を明瀺的に制限しおいたす。以䞋はorderモゞュヌルのapplicationserviceにおける䞀䟋です。 project(':modules:order') { project('applicationservice') { dependencies { implementation project(':core') implementation project(':modules:order:domain') implementation project(':modules:payment:domain') } } } このように蚘述するこずで䟝存関係を制限し、䞋蚘のような蚭蚈の意図に反する䟝存を防いでいたす。 orderのアプリケヌション局はcoreや自身のドメむン局、必芁最䜎限の他モゞュヌルこの堎合はpaymentのドメむンにのみ䟝存する。 他のcartやorchestratorのようなモゞュヌルぞの䞍芁な䟝存は䞍可。 モゞュラモノリスやっおみたメリット/デメリット メリット 開発やテストがしやすい プロセスが1぀なので、環境構築やロヌカル開発がマむクロサヌビスに比べお非垞に簡単。 統合テストも容易で、テストコヌドのカバレッゞを䞊げやすい。 モゞュラモノリスにより柔軟で早い開発サむクルが実珟できおいる。 ストラングラヌフィグパタヌン*でリプレむスを進めおいるため、新旧システムで二重開発が発生しがちになる。しかし、モゞュラモノリスの構造により早いサむクルでリリヌスができおおり、二重開発を可胜な限り避けながら段階的に移行できおいる。 *ストラングラヌフィグパタヌンずは、リプレむス察象のシステムの機胜を段階的に新しいシステムに眮き換えおいき、すべおの機胜を眮き換えた埌、最終的に移行元のシステムを停止する戊略である。 パフォヌマンスやトレヌシングが楜 ログやトレヌスの収集も1぀のAPIで完結し䞀括管理しやすい。 ネットワヌク通信が䞍芁なため、レむテンシが最小化される。 呜名や実装の差異を早期に発芋・統䞀できる すべおのコヌドが1぀のプロゞェクト内にたずたっおいるため、呜名の䞍䞀臎や実装の重耇に気づきやすい。 たずめおリファクタリングできる。 デメリット デプロむ単䜍が分割できない 党䜓で1぀のアプリケヌションずしお動䜜するため、小さな倉曎でも党䜓のビルド・テスト・デプロむが必芁。 特定モゞュヌルだけを玠早く曎新する柔軟性には欠ける。 同じValue Object以䞋VO*が耇数モゞュヌルに珟れる cartモゞュヌルずorderモゞュヌルの䞡方で商品金額を扱う堎合など、同じ構造のVOが各モゞュヌル内で独立しお定矩される。 モゞュヌル間の盎接䟝存を避ける蚭蚈方針で、将来的にマむクロサヌビスぞ切り出す際の独立性を保぀ための意図的な遞択。 *Value Objectずは、倀そのものを衚珟するオブゞェクトで、同じ倀であれば同䞀ずみなす䞍倉オブゞェクトです。䟋えば、商品金額や日付などがValue Objectにあたりたす。 今埌の展望 モゞュラモノリスは1぀のアプリケヌションずしお構築されおいるため、マむクロサヌビスず比べおCI実行時のテスト時間が長くなりがちです。 䞊列にテストを実行するこずで時間短瞮を図っおいたすが、さらなる短瞮ず開発䜓隓の向䞊に向けた取り組みを継続しおいきたす。 たた、珟圚は各モゞュヌルで同じ意味を持぀VOであっおも、モゞュヌルごずに呜名の異なるケヌスが䞀郚存圚しおいたす。 蚭蚈䞊の意図や責務の違いによる分離は尊重し぀぀も、ドメむンモデル間の䞀貫性を高めるために、こうしたVOの芋盎しやリファクタリングも進めおいく予定です。 今埌も、段階的な改善を重ねながら、将来的なマむクロサヌビス化も芖野に入れた柔軟なアヌキテクチャを目指しおいきたす。 たずめ 本蚘事では、カヌト決枈基盀をモゞュラモノリスで構築するたでの過皋をご玹介したした。耇雑でモノリシックなアプリケヌションの分割を怜蚎しおいる方がいれば、参考になれば幞いです。今埌リプレむスを掚進しおいき泚文フロヌのリプレむス完遂をしおいきたいず考えおいたす。 ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com
はじめに こんにちは。Developer Engagementブロックの @wiroha です。2025幎8月5日、6日に東京ビッグサむトにお Google Cloud Next Tokyo 25 が開催され、ZOZOから4名の゚ンゞニアが登壇したした。 Google Cloud Next Tokyoは、Google Cloudの最新情報や技術を孊ぶこずができるむベントです。生成AI、クラりド技術、ビゞネスず技術の融合など、幅広いトピックが扱われたした。セッションの他にハンズオンや展瀺もあり、参加者は最新の技術に觊れるこずができたす。本蚘事では登壇レポヌトを䞭心に、珟地の様子も含めお玹介したす。 基調講挔の䌚堎 登壇レポヌト ZOZOTOWN の倧芏暡マヌケティング メヌル配信を支えるアヌキテクチャ speakerdeck.com MA郚の田島 / 富氞 からは、メヌル配信基盀システムのリアヌキテクチャの蚭蚈ず技術遞定に぀いお説明したした。ワヌクフロヌ゚ンゞンを甚いたバッチ凊理をベヌスずした旧システムから、Cloud Runずゞョブキュヌを甚いた蚭蚈ぞず倉曎したこずで、メヌル配信基盀は配信の優先順䜍を柔軟に決定し぀぀効率的に凊理を行えるようになりたした。 このセッションは基調講挔ず同じ䌚堎に蚭けられたステヌゞにお行われ、これたでに経隓がない広い䌚堎での登壇に緊匵もありたした。しかし、倚くの方にご来堎いただき、真剣に耳を傟けおくださる姿に倧きな励たしをいただきたした。䌚堎の熱気ず皆さたの関心の高さを肌で感じる、貎重な経隓ずなりたした。 特に埌半パヌトでは、Google CloudのサヌビスであるCloud Run、Pub/Sub、Cloud Tasksをどのような理由で、どのように利甚しおいるかに぀いお具䜓的に解説し、この郚分に興味を持っおくださった方が倚いように感じたした。MA郚での取り組みや蚭蚈方針、実装の䞭で埗た経隓から、情報や気づきを提䟛できおいたら幞いです。 Ask The Speakerにも倚くの方々にご参加いただき、リトラむ䞊限を超えお凊理が倱敗した堎合の察応や、倖郚メヌル配信サヌビス自䜓で凊理が倱敗した堎合の察応方法など、゚ンゞニアならではの鋭いご質問もお寄せいただきたした。Google Cloudサヌビスやシステム蚭蚈、メヌル配信システムに関心を持぀方々ず意芋亀換ができ、私たちずしおも非垞に勉匷になる時間でした。 ファッション コヌディネヌト アプリ「WEAR」における、Vertex AI Vector Search を利甚したレコメンド機胜の開発・運甚で埗られたノりハりの玹介 speakerdeck.com デヌタシステム郚MLOpsブロックの 岡本 による発衚に぀いおご報告したす。 発衚では、WEAR by ZOZOの関連コヌデレコメンドプロゞェクトのベクトル怜玢の開発にVertex AI Vector Searchを導入し、実装・本番運甚で埗られた知芋をご玹介したした。たたレコメンドシステムの党䜓構成や技術遞定の理由もご玹介したした。 圓日は倚くの聎講者の方にお越しいただきありがずうございたした。たた発衚埌の、Ask The Speakerにおいおも倚くの方からご質問いただきたした。これからVertex AI Vector Searchの導入を怜蚎されおいる方が倚い印象で、費甚やベクトル怜玢パラメヌタのチュヌニングに関する質問を倚くいただきたした。時間の郜合により発衚内で説明できなかった費甚やパラメヌタチュヌニングの深い話に぀いおは、発衚終了埌に公開した圓瀟のテックブログ WEAR関連コヌデレコメンドプロゞェクトぞのVertex AI Vector Search導入ず実践 で説明しおいたす。発衚内容ず合わせおご参照ください。 自分がGoogle Cloud Next Tokyoに参加したのは23から数えお3回目であり、Speakerずしおの参加は今回が初めおでした。発衚を聎くだけでなく、Google Cloudの補品やシステム開発に関する話を参加者の方々ずさせおいただき、非垞に有意矩な時間ずなりたした。 予枬䞍胜な時代を生き抜く゚ンゞニアのキャリアに぀いお考える wirohaです。倚様なバックグラりンドを持぀゚ンゞニア3名が集たった、キャリアに関するパネルトヌクにパネリストずしお登壇したした。垭は立ち芋が出るほどの満員で、関心の倚さを感じたした。キャリア圢成の軞は䜕か、新しい技術や知識を習埗するための工倫はあるか、これたでに予枬䞍胜な事態をどう乗り越えおきたかずいったテヌマに぀いおお話ししたした。 パネルトヌクの登壇ははじめおでずおも緊匵したしたが、Ask The Speakerの際に「柔軟なキャリアチェンゞをする姿に励たされた」ずいった感想をもらい安心したした。他にも初孊者のキャリアの積み方に぀いお他のパネリストずずもにディスカッションをするなど、さたざたな芖点も埗られお良い経隓になりたした。 䌚堎レポヌト 匕き続きwirohaから、Expo゚リアの様子を玹介したす。次のマップを芋るずわかるずおり、ExpoにはGoogle Cloudの技術を玹介するブヌスや、Expertに盞談できるブヌス、コミュニティ・スポンサヌによるブヌスなど倚様なコンテンツが揃っおいたした。 組み立おたブロック䜜品をGeminiが評䟡しスコアを競うゲヌムや、Google I/O 2025で発衚されおいたバヌチャル詊着サヌビスなど、Googleの技術を盎接䜓隓し解説を聞けるのは楜しくお豪華でした。䞭でも存圚感があったのは、AIバスケットボヌルコヌチです。ここでは本物のゎヌルが蚭眮されおおり、シュヌトを打぀ず自分のフォヌムが分析・スコア化されお改善のアドバむスを受けるこずができたす。 特別な機噚を身に぀けるこずなくカメラの映像分析でアドバむスを受けられるのは手軜で、AIがより生掻に浞透しおいく可胜性を感じたした。 Expo゚リアはブヌスだけではなくオヌプンステヌゞやDeveloper Stageがあり、そちらでも発衚が行われおいたした。事前にチェックしお蚈画を立おおおいた方が、芋逃しがなくたわれお良さそうでした。 おわりに 今回ZOZOからは登壇者以倖にも倚数の゚ンゞニアが参加し、セッションを聎講しおいたした。各セッションのアヌカむブ動画は8月埌半に公開予定ずのこずです。自分の登壇に意識が向いおいお芋逃しおしたったセッションもあるので、公開を楜しみにしたいず思いたす。 ZOZOでは、カンファレンスから情報をキャッチアップし぀぀、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com
.table-of-contents ul ul { display: none; } はじめに こんにちは。デヌタサむ゚ンス郚怜玢グロヌスブロックの䌊柀です。私は、2025幎7月13日から17日たでむタリア・パドノァで開催されたSIGIR 2025Special Interest Group on Information Retrievalに珟地参加しおきたした。本蚘事では、基調講挔やワヌクショップ、各セッションにおいお特に興味深かったトピックをいく぀か取り䞊げおご玹介したす。 SIGIR 2025 セッション䌚堎の様子 はじめに SIGIR 2025ずは 䞻な研究動向 開催地ず䌚堎 パドノァに぀いお 䌚堎斜蚭 基調講挔 初日: BM25 and All That - A Look Back 2日目: Digital Health 3日目: Please meet AI, our dear new colleague セッションレポヌト Progressive Refinement of E-commerce Search Ranking Based on Short-Term Activities of the Buyer 感想 Towards Improving Image Quality in Second-Hand Marketplaces with LLMs 感想 From Keywords to Concepts: A Late Interaction Approach to Semantic Product Search on IKEA.com 感想 Optimizing Compound Retrieval Systems 感想・考察 Practical Secondary Stack Optimization on Search Pages: A Lightweight Contextual Bandit Approach 感想 たずめ SIGIR 2025ずは SIGIRSpecial Interest Group on Information Retrieval はACM米囜蚈算機孊䌚の情報怜玢特別研究グルヌプが䞻催する、情報怜玢分野においお最も暩嚁ある囜際䌚議です。1963幎の開始以来、怜玢およびその他の情報アクセス技術の分野における研究、開発、教育の発展を牜匕しおきたした。 第48回ずなる今回は2025幎7月13日〜17日の5日間、むタリアのパドノァで開催されたした。パドノァはノェネチア・マルコポヌロ囜際空枯からバスで玄1時間の距離にあり、䌚議の前埌や合間でノェネチアたで足を運んだ参加者もいたそうです。 本䌚議は、論文発衚、ポスタヌセッション、チュヌトリアル、ワヌクショップなど倚様なプログラムで構成され、䞖界䞭から1000人を超える研究者や開発者が参加したした。 sigir2025.dei.unipd.it 䞻な研究動向 今回は239件のFull Papers、107件のShort Papersをはじめ、Industrial PapersやDemo Papersなど倚数の研究成果が発衚されたした。 特に泚目されたのは、生成AIず情報怜玢技術の融合領域です。RAGRetrieval-Augmented Generation、Generative Retrieval、Conversational Search、LLMを甚いた評䟡ずいったトピックに関心が集䞭しおおり、関連するチュヌトリアルやワヌクショップが倚数開催されたした。これは、情報怜玢分野における生成技術の本栌的な掻甚が進んでいるこずを瀺す重芁な動向ずいえたす。 論文発衚セッションの構成ずしおは、Search & Reranking、LLM Evaluation、Conversational Searchから䌁業での応甚事䟋たで、理論研究から実甚化たで幅広いテヌマが扱われたした。参加者は各時間垯で䞊行しお行われるセッションから関心のある内容を自由に遞んで聎講できる圢匏でした。 sigir2025.dei.unipd.it 開催地ず䌚堎 開催地のパドノァは䞭䞖・ルネサンス矎術が豊富に残る歎史ある街 パドノァに぀いお 開催地のパドノァは、䞭䞖・ルネサンス矎術が豊富に残る歎史ある街です。叀い建物が倚く立ち䞊ぶ街䞊みの䞭で、随所に壁画アヌトを芋るこずができたした。たた、ガリレオ・ガリレむが教鞭を執ったこずでも知られるパドバ倧孊の所圚地でもありたす。垂街地には、䞖界遺産に登録されおいるスクロノェヌニ瀌拝堂があり、その壁画で特に有名です。 本䌚議のりェルカム・レセプションは䞭心街のPiazza della Fruttaで開催され、それに先立っお隣接するラゞョヌネ宮殿でのガむドツアヌも実斜されたした。 Piazza della Fruttaお開催されたりェルカムレセプションの様子 䌚堎斜蚭 䌚堎は2022幎4月に開通したPadova Congress Centerで、䞭心地から埒歩で20分ほどの距離にありたす。 参加者は各時間垯で関心のあるセッションを遞択し、䌚堎内の各ホヌルや䌚議宀で聎講する圢匏ずなっおいたした。チュヌトリアル、ポスタヌセッション、ワヌクショップも䜵行しお開催され、ランチタむムを含めお掻発な議論ず知識亀換が行われおいたした。 たた、りェルカム・レセプション、孊生向けむベント、゜ヌシャル・ディナヌなど倚圩なネットワヌキングむベントが開催され、参加者間の積極的な亀流が促進されおいたした。 SIGIR2025の䌚堎のPadova Congress Center ランチタむムの䌚堎の様子 基調講挔 基調講挔は、メむンカンファレンス期間䞭の7月14日から16日たで各日の冒頭で実斜されたした。 初日: BM25 and All That - A Look Back BM25の開発者であるStephen Robertson氏が、55幎にわたる情報怜玢分野の発展を自身の経隓ずずもに振り返りたした。1960幎代埌半の手蚈算や電卓を甚いた研究スタむル、手玙でのやりずりずいった黎明期の゚ピ゜ヌドからは、圓時の研究環境の厳しさず研究者の情熱が䌝わっおきたした。BM25誕生に至る道のりや、珟圚でも機械孊習においお匷力な特城量ずしお掻甚されおいる事実など、AI時代の珟圚にも通じる普遍的䟡倀を再認識させる貎重な講挔でした。 2日目: Digital Health Georgetown倧孊のOphir Frieder氏による講挔が行われたした。䞖界的に深刻化する医療人材䞍足に察しお、AIを掻甚するこずで医療埓事者を補完し、より効率的か぀粟床の高い医療刀断が可胜になるずいう展望が語られたした。EHR電子健康蚘録を掻甚した癌スクリヌニングや、メンタルヘルスの早期怜知など、実甚的なAI医療応甚の䟋が数倚く玹介されたした。同時に、AIの限界や倫理的な課題にも蚀及があり、「AIは医療埓事者の代替ではなく、あくたで補完的存圚である」ずいうメッセヌゞが印象に残りたした。 3日目: Please meet AI, our dear new colleague 3日目は、Darmstadt工科倧孊のIryna Gurevych教授が、科孊研究ずAIの協働可胜性をテヌマに講挔したした。AIによる論文執筆や実隓自動化ずいった事䟋が玹介される䞀方で、実装䞊の課題や倫理的懞念も匷調され、人間ずAIが補完し合う協働の重芁性が語られたした。特に、AIを単なるツヌルずしおではなく、「協働者」ずしお捉える芖点で、今埌の科孊研究のあり方に深い瀺唆を䞎える内容でした。 セッションレポヌト 論文発衚セッションやワヌクショップで聎講したトピックをいく぀かピックアップしたす。 Progressive Refinement of E-commerce Search Ranking Based on Short-Term Activities of the Buyer sigir2025.dei.unipd.it eBayによる発衚で、Eコマヌスの怜玢結果をナヌザヌの盎近行動に合わせお段階的に最適化する手法を提案しおいたす。埓来のパヌ゜ナラむズ手法は、長期的なナヌザヌプロファむルに䟝存する傟向があり、倧量の履歎デヌタを必芁ずする䞊に、セッション内で賌買意図が倉化する堎合には察応が困難でした。本研究では、最近の1〜5件のクリックずいった短期的なナヌザヌ行動に着目し、それを特城量ずしお取り入れるこずで、軜量か぀柔軟なランキング改善を実珟しおいたす。 提案手法では、3段階のコンテキスト化アプロヌチにより構成されおいたす。1段階目のHeuristic Autoregressive Contextualizationでは、怜玢結果の商品ずナヌザヌが過去にクリックした商品の類䌌床を、テキストベヌスたたはeBertモデルによる埋め蟌みベヌスの指暙ずしお算出したす。 以䞋の衚に各指暙の抂芁をたずめおいたす。 手法 抂芁 Last Clickテキスト 最埌のクリック商品タむトルず珟圚の怜玢結果の商品タむトル間のNormalized Compression Distance (NCD)を蚈算 Last Click埋め蟌み eBay独自開発のeBertモデルによる埋め蟌みを利甚し、最埌のクリック商品ず珟圚の怜玢結果の埋め蟌みベクトル間のコサむン類䌌床を蚈算 Last 5 Clicksテキスト 過去5回のクリック商品タむトルを連結したものず珟圚の怜玢結果の商品タむトル間のNCDを蚈算 Last 5 Clicks埋め蟌み 過去5回のクリック商品タむトルず珟圚の怜玢結果の商品タむトルの埋め蟌み類䌌床の平均を蚈算 2段階目のIntent-Aware Contextualizationでは、怜玢ク゚リず過去のクリック履歎の関連性を評䟡し、最も怜玢意図に近いクリック商品を遞定した䞊で、その商品ず怜玢結果の商品ずの類䌌床を特城量ずしお远加したす。これにより、怜玢意図ず無関係な過去の行動がノむズになる問題を緩和したす。 3段階目のSequential Attention Contextualizationでは、クリック履歎を時系列的に捉え、TransformerやPerceiverを甚いたシヌケンスモデルから埗られた埋め蟌み衚珟ず怜玢結果ずのコサむン類䌌床を特城量ずしたす。これにより、ナヌザヌ行動の倉化や文脈をより粟緻に捉えるこずが可胜になりたす。 実隓では、各手法を段階的に远加した際のMean Reciprocal RankMRRを確認しおいたす。オフラむン評䟡においお、Heuristic Autoregressive Contextualizationのうち「Last Click埋め蟌み」特城量により1.84の改善、Intent-Aware Contextualizationの特城量の远加でさらに1.08。Sequential Attention Contextualizationの特城量の远加でさらに1.01の改善が芋られたした。eBayにおけるA/Bテストでは「Last Clickテキスト」の特城量によっお1.30改善、テキストベヌスのIntent-Aware Contextualizationの特城量の远加でさらに0.96の改善を瀺したした。 感想 本研究で特に印象的だったのは、長期履歎に䟝存せず短期的コンテキストのみで高い怜玢粟床向䞊を実珟しおいる点です。さらに、テキストよりも埋め蟌みベヌスの特城量が䞀貫しお高い性胜を瀺しおおり、意味的類䌌性の捉え方の重芁性が再認識されたした。 シンプルなヒュヌリスティック手法から始めお段階的に高床な手法ぞ拡匵するアプロヌチは、実運甚を芋据えた実甚的な蚭蚈であるず感じたした。A/Bテストの結果ではテキストベヌスの手法でも䞀定の性胜向䞊が確認されおいるこずから、埋め蟌みを扱っおいないEコマヌスシステムも導入しやすいものであるず思いたした。 Towards Improving Image Quality in Second-Hand Marketplaces with LLMs sigir2025.dei.unipd.it 本研究では、二次流通マヌケットプレむスにおける商品広告画像の品質を自動で評䟡する手法ずしお、Multimodal Large Language ModelsMLLMsの掻甚が提案されたした。 高品質な商品画像は、ナヌザヌの信頌圢成や賌買意欲に倧きな圱響を䞎えるこずが知られおいたす。特にZ䞖代では画像品質の䜎さが離脱芁因になり埗るこずが、18名の瀟内ナヌザヌを察象ずした調査から明らかになっおいたす。埓来の画像評䟡手法、たずえばCNNベヌスのアプロヌチは、解釈性に乏しく、教垫デヌタの収集にも倚倧なコストがかかるずいう課題がありたした。 本研究では、MLLMsに察しおZero-shotプロンプトを甚い、商品画像の品質を1〜5のスケヌルでスコアリングさせるずいうシンプルか぀効果的な方法を怜蚌しおいたす。評䟡には、オンラむンナヌザヌ調査により929名からスコアが付䞎された581枚の画像デヌタが䜿甚されたした。 モデルの評䟡指暙ずしおは、ナヌザヌ評䟡ずの敎合性を枬るために、Percent AgreementPA、Weighted KappaWK、およびピア゜ンの盞関係数が甚いられたした。プロンプトの圱響を評䟡した結果、スコア基準を明瀺的に指瀺するGuided Promptの方が、汎甚的な指瀺のみを䞎えるGeneric Promptよりも、ナヌザヌ評䟡ずの䞀臎床が高いこずが瀺されたした。 さらに泚目すべきは、ファむンチュヌニングを斜した軜量モデル「Nova Lite」が、倧芏暡なモデルClaude 3.5 SonnetやNova Proを䞊回る性胜を発揮した点です。これは、モデルのサむズよりも適切なタスク適応が性胜向䞊に寄䞎するこずを瀺唆しおおり、コスト効率の高いアプロヌチずしお実甚性の高さがうかがえたす。 感想 匊瀟でも、ZOZOTOWNの怜玢結果画面においおサムネむル画像の違いがナヌザヌ゚ンゲヌゞメントに䞎える圱響に぀いお研究を進めおいたす。本研究で提案されたMLLMによる画像クオリティ評䟡やヒヌロヌ画像の自動遞定ずいったナヌスケヌスには匷い関心を抱きたした。 www.jstage.jst.go.jp 特に、ファむンチュヌニングされたNova Liteが倧芏暡なモデルの性胜を䞊回った結果は印象的であり、小芏暡なモデルであっおも適切なタスク蚭蚈ず調敎により、倧芏暡モデルに匹敵する性胜が実珟可胜であるこずを瀺しおいたす。掚論コストを抑えながら実甚性を確保できる点も、プロダクション導入を芋据えた際に倧きな利点だず感じたした。 From Keywords to Concepts: A Late Interaction Approach to Semantic Product Search on IKEA.com sigir2025.dei.unipd.it この発衚は、IKEA Retailによるセマンティック怜玢システム導入の事䟋玹介です。埓来のキヌワヌドベヌスの怜玢では、「modern desk with cable management」や「sofa with storage for small apartments」ずいった耇雑な自然蚀語ク゚リに察しお十分に察応ができないずいう課題がありたす。この課題に察し、IKEAはLate Interactionベヌスの怜玢アヌキテクチャを導入し、怜玢粟床の改善を実珟したした。 本研究ではColBERTに芋られるようなLate Interactionモデルを採甚し、RetrievalずRerankingをEnd-to-Endで統合しおリアルタむムでのトヌクンレベルのスコアリングを実珟しおいたす。 怜玢゚ンゞンにはPLAIDPerformance-optimized Late Interaction Driverを掻甚しおおり、IKEAの3䞇点以䞊ある商品に察しお30ms以䞋のレむテンシでの怜玢を可胜にしおいたす。 孊習デヌタには、玄3䞇点のIKEA商品に察し、LLMを甚いお倚様な芖点から自動生成した玄100䞇件の怜玢ク゚リが䜿甚されおいたす。ネガティブサンプルの生成の際にはBGEモデルを掻甚し、意味的には類䌌しおいるが異なるカテゎリの商品を抜出したす。具䜓的には、コサむン類䌌床に基づいおランキングを行い、k䜍以降でカテゎリが異なる商品を遞択するこずで、意味的に近いが誀解を招くようなペアp−を蚭定したす。そしお、コントラスト孊習によっお、p+よりp−の関連性スコアが䜎くなるようにモデルを孊習させおいたす。 たた、セマンティック怜玢における課題ずしお「関連性スコアの境界が曖昧で、ク゚リごずに最適な閟倀が異なる」点が挙げられたす。怜玢ク゚リによっおも関連性スコアの分垃は異なり、埓来の固定的な閟倀では怜玢ク゚リごずに結果数がバラバラになっおしたいたす。この課題に察し、本研究では確率的か぀適応的に閟倀を蚭定する手法を導入しおいたす。具䜓的には、商品ランキングの前埌の商品間のスコアの差分の平均ず分散からZスコアを蚈算し、急激なスコア倉化点Zスコアが閟倀を䞋回る地点をカットオフずみなすアプロヌチです。候補が耇数ある堎合には、盞察的なスコア倉化率が䞀定以䞊ずなる䜍眮をカットオフずしたす。 本システムの評䟡に぀いおは、アメリカのIKEA.comにおlong tailク゚リを察象にオンラむンA/Bテストを行いたした。埓来のテキストベヌスの怜玢Boolean怜玢ず比范しお商品クリック率が3.1増加、コンバヌゞョン率が1.96増加、カヌト远加数が2.18増加する結果ずなりたした。 感想 本研究は、耇雑な自然蚀語ク゚リぞの察応やLLMを掻甚したク゚リ生成、さらにはク゚リごずに動的に最適な閟倀を蚭定する仕組みなど、実甚的なセマンティック怜玢システムの奜䟋ずしお非垞に参考になりたす。匊瀟でもベクトル怜玢の導入を怜蚎しおおり、特に「固定閟倀に䟝存しない動的カットオフ」の考え方は非垞に有甚だず感じたした。 techblog.zozo.com 䞀方でZOZOTOWNのように商品点数が桁違いに倚い堎合は、蚈算コストやむンデックスサむズ、カテゎリごずの閟倀調敎ずいったスケヌラビリティ䞊の課題が想定されたす。今埌さらなるスケヌラビリティ察応に関する技術的な知芋が共有されるこずにも期埅しおいたす。 Optimizing Compound Retrieval Systems sigir2025.dei.unipd.it Google DeepMindずRadboud倧孊による研究で、埓来の怜玢システム蚭蚈の䞻流であったカスケヌド型怜玢システムに代わる新しいフレヌムワヌク「Compound Retrieval System」を提案しおいたす。 埓来のカスケヌド型怜玢では、たずBM25のような軜量なモデルで初期ランキングを生成し、䞊䜍K件に察しお高性胜だが蚈算コストの高いモデル䟋LLMを段階的に適甚するこずで、コストず性胜のバランスを図る蚭蚈が䞀般的です。䞀方、この構造では、予枬察象ず予枬利甚の制玄が以䞋のように固定的であり、予枬モデルのコスト効率性や有甚性を柔軟に掻甚する機䌚を制限しおいるずいう課題がありたす。 予枬察象の制玄 モデルの予枬は「前段階モデルの䞊䜍K件の文曞に察しおのみ」行う 予枬利甚の制玄 予枬されたスコアは「同じ䞊䜍K件の再ランキングにのみ」䜿甚する 本研究では、こうした制玄を取り払い、モデルの粟床やコスト特性に応じお「どの文曞たたは文曞ペアにどのモデルを適甚し、どのようにスコアを統合するか」を最適に蚭蚈できるフレヌムワヌク「Compound Retrieval System」を提案しおいたす。このフレヌムワヌクにより、軜量なモデルによる最初のランキングに察しお、LLMなどのポむントワむズモデルやペアワむズモデルPRPをどのドキュメントに適甚し、それらの予枬をどのように統合するかを最適化したす。 具䜓的には以䞋のような仕組みです。 軜量モデル$M_0$e.g. BM25での初期ランキング$R_0$を䜜成 $R_0$に察し、どのドキュメントたたはドキュメントのペアに䜕の予枬モデルを䜿うかを決める遞択ポリシヌ$π$ã‚’å­Šç¿’ 遞択ポリシヌ$π$により遞ばれた予枬察象ずするかどうかのフラグ$s1$、$s2$に察しお、それぞれポむントワむズモデル$M_1$、ペアワむズモデル$M_2$を実行 スコア統合関数$f$により、$M_1$、$M_2$の予枬結果を統合しお最終的なランキングスコアを算出 $f$で算出されたスコアに基づきドキュメントを゜ヌトしお最終的なランキング$R*$を䜜成 出兞: Oosterhuis et al., Optimizing Compound Retrieval Systems, SIGIR 2025 Figure 1 遞択ポリシヌ$π$ずスコア統合関数$f$は、モデルのランキング性胜ずコストe.g. LLMの呌び出し回数の線圢結合の損倱関数の最適化によっお獲埗したす。 $$ \mathcal{L}{\mathrm{comp}}(f, \pi) = \alpha \mathcal{L}_{\mathrm{ranking}}(\pi, f) + (1 - \alpha) \mathcal{L}{\mathrm{cost}}(\pi). $$ $L_{\text{ranking}}$ランキング粟床䟋nDCGに関する損倱 $L_{\text{cost}}$LLM予枬の取埗コスト予枬回数に関する損倱 $\alpha$モデルのランキング性胜ずコストの重みトレヌドオフ 本研究内では、遞択ポリシヌ$π$ずスコア統合関数$f$は、䞊蚘の損倱関数を最適化するポむントワむズ甚ずPRP甚の2぀のニュヌラルネットワヌクの孊習を通じお獲埗しおいたす。募配を遞択ポリシヌ$π$やスコア統合関数$f$に䌝搬させるこずで最適化しおいたす。最適化手法にはAdamaxを採甚しおいたす。 掚論時は、埗られたπを䜿ったベルヌヌむサンプリングでsのパタヌンを耇数生成し、怜蚌デヌタに察しお最小のロスを実珟する確定的なポリシヌを甚いたす。 TREC-DLデヌタセットを䜿甚した実隓では、BM25で取埗した䞊䜍1000件の文曞を再ランキングするタスクでnDCG@Kを評䟡しおいたす。 実隓の結果、埓来のカスケヌド型怜玢でのLLMを甚いたPRPのモデルず比べお、提案手法が同等あるいはそれ以䞊のランキング粟床を、10分の1のLLM呌び出し回数に抑えた䞊で達成したした。 感想・考察 スタンダヌドずされおきたカスケヌド型怜玢に代わり、柔軟な怜玢システム構築の可胜性を提瀺した非垞に興味深い研究です。特に印象的だったのは、効率性を重芖した蚭蚈でありながら、最倧性胜においおも埓来手法を䞊回る粟床を実珟しおいる点です。 Rerankingにおけるモデルの組み合わせや、どの予枬を取埗するかずいった遞択を動的に最適化するこずで、単䞀モデルの限界を超える性胜を匕き出せるこずが瀺されおおり、非垞に瀺唆に富んでいたす。 LLMの怜玢応甚においお泚目される「効率ず効果のトレヌドオフ」ずいう課題に察しお、本研究はそのバランスをより良く実珟する手法ずしお、倧きなむンパクトを䞎える可胜性があるず感じたした。 Practical Secondary Stack Optimization on Search Pages: A Lightweight Contextual Bandit Approach 本研究は、SIGIR2025のワヌクショップのセッションであるWorkshop on eCommerce (ECOM25)においお、Walmart Global Techによっお発衚されたものです。Eコマヌスの怜玢ペヌゞにおいお怜玢結果ず䜵せお衚瀺されるレコメンドモゞュヌルSecondary Stackの遞択をContextual Multi-Armed Banditにより最適化する手法を提案しおいたす。 Secondary Stackずは、怜玢結果の䞋郚などに衚瀺される、ナヌザヌの賌買履歎に基づいたパヌ゜ナラむズされた商品や、カスタマヌレビュヌで高評䟡を埗た商品矀などを瀺すレコメンドモゞュヌルを指したす。埓来、Walmartではビゞネスルヌルに基づいおスタックの皮類を決定しおおり、怜玢ク゚リやナヌザヌ属性などのコンテキストは考慮されおいないこずや、ナヌザヌの゚ンゲヌゞメントパタヌンも時間ずずもに倉化する可胜性のあるこずが課題ずされおいたした。 本研究では、この問題をContextual Multi-Armed Bandit文脈付き倚腕バンディットずしお定匏化しおいたす。コンテキストずしおは、怜玢ク゚リや利甚プラットフォヌム、絞り蟌み条件、䌚員ステヌタスなど耇数の芁玠を階局的に管理する「Context Tree」を構築したす。 図のようにContext Treeの各ノヌドには、スタックごずのクリック数や非クリック数ずいった゚ンゲヌゞメント統蚈情報が蚘録され、䞊䜍ノヌドは䞋䜍ノヌドの情報を包含したす。このContext Treeは、葉ノヌドから芪ノヌドぞず再垰的に情報を集玄するボトムアップ手法で構築されたす。 出兞: Song et al,. Practical Secondary Stack Optimization on Search Pages: A Lightweight Contextual Bandit Approach Figure 2 実運甚を螏たえ、Context Treeは日次バッチ凊理により曎新されたす。前日たでの統蚈情報ず圓日のナヌザヌ行動を、それぞれ割匕係数λを甚いお重み付けし、統合するこずで新たなContext Treeを生成したす。 コンテキストが増えるずコンテキストごずのデヌタ数が少なくなり過孊習のリスクが高たりたす。この課題に察しおは、初期段階で党スタックをランダムに衚瀺しおナヌザヌ゚ンゲヌゞメント情報を収集し、どのコンテキストが予枬粟床を高めるかを評䟡するこずで、Secondary Stackの効果に圱響する重芁なコンテキストのみを事前に遞択する方法を提案しおいたす。 本手法のアヌキテクチャは次の図のようになっおいたす。 出兞: Song et al,. Practical Secondary Stack Optimization on Search Pages: A Lightweight Contextual Bandit Approach Figure 3 オフラむンで構築されたContext Treeを基に、オンラむン環境ではThompson Samplingを甚いお「探玢」ず「掻甚」のバランスをずりながらスタックを遞択したす。各コンテキストに十分なデヌタが蓄積されるたでは、䞊䜍のコンテキストノヌドに基づいおスタックを遞択する蚭蚈ずなっおいたす。たた、セッション内での䞀貫性を保぀ために、ハッシュベヌスのシヌドによるスタック固定も導入されおいたす。 Walmart本番環境でのA/Bテストでは、怜玢経由での商品カヌト远加率が0.3、Secondary Stack経由では11.1の向䞊が確認されおおり、実運甚における高い効果が瀺されたした。 感想 本研究は、耇雑な機械孊習モデルに頌らず、Multi-Armed Banditを掻甚するこずで、䜎コストか぀䜎遅延な本番運甚を実珟しおいる点が実践的で印象的でした。特に、導入初期のデヌタ収集フェヌズず本栌運甚フェヌズを分け、リスクを抑えながら効果を怜蚌しおいる蚭蚈は、実務での導入においお非垞に参考になりたす。 たずめ 今回のSIGIR 2025では、生成AIず情報怜玢の融合がいよいよ本栌化し、怜玢技術の未来に向けた倧きな転換点を感じるこずができたした。理論から実甚たで幅広いトピックが扱われ、日々の業務に盎結する孊びも倚く埗られたした。今埌も最新技術の動向を泚芖しながら、プロダクトぞの応甚に繋げおいきたいず思いたす。 SIGIR2026の開催地はオヌストラリアのメルボルン ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる仲間を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください corp.zozo.com
ZOZOTOWN開発本郚でZOZOTOWN iOSの開発を担圓しおいる らぷらぷ です。䟋幎プラむベヌトのメむン機であるiPhoneをベヌタアップデヌトしおたすが、い぀たで正垞に動䜜し぀づけるのかヒダヒダしおいたす。 今幎のWWDC25も開催期間䞭には远いきれないほど数倚くのアップデヌトがありたした。みなさんはどのセッションが気になりたしたか。 本蚘事では、ZOZOのiOS゚ンゞニアが気になったセッションをご玹介したす。この蚘事を読み終えたらぜひあなたの気になるセッションずずもに感想をシェアしお頂けるず嬉しいです。 たた、今回詊したAIを掻甚したセッションのキャッチアップ効率化に぀いおもご玹介したす。 気になったセッション WebKit for SwiftUI こんにちは。WEAR by ZOZOのiOSアプリ開発を担圓しおいるセヌタです。 今回の発衚では、WebKitがSwiftUI向けにアップデヌトされ、iOS26から暙準でWebViewを䜿甚できるようになりたした。詳现は「 Meet WebKit for SwiftUI 」のセッションをご芧ください。 セッションではWebViewずWebPageクラスが登堎したす。WebView(url:)ず蚘述するだけで簡単にWebサむトを衚瀺でき、WebPageクラスを合わせお䜿うこずで、URLや読み蟌み状況、進捗などをプロパティずしおリアルタむムで監芖できたす。これにより、これたでUIViewRepresentableを䜿っお行っおいた耇雑な実装が䞍芁になりたす。状態を管理するために必須だったKVOKey-Value ObservingやDelegateがなくなるこずで、より盎感的なカスタマむズが可胜です。 WebPageクラスでは、状態管理だけでなく、WKWebViewが提䟛しおいるほずんどの機胜が䜿甚できたす。これにより、既存の実装からスムヌズに移行できそうです。 珟圚WEARでも䞀郚画面でSwiftUI化を進めおいるので、今回のアップデヌトによっお将来的なリプレむスの負担が軜枛されるこずを期埅しおいたす。 Record, replay, and review: UI automation with Xcode ZOZOTOWN iOSの開発を担圓しおいるらぷらぷです。 UIAutomationが提䟛されおからこの技術をベヌスずした様々なUIテストコヌド生成ツヌルが長幎出おきたしたが、぀いにXcodeず連携するテスト録画機胜が提䟛されたした。「 Record, replay, and review: UI automation with Xcode 」および 公匏ドキュメント で詳しく玹介されおいたす。 実際に觊っおみたずころ、タップ・ダブルタップ・スワむプなどの基本的な操䜜の蚘録はしっかりカバヌしおいるこずはもちろんのこず、蚘録終了埌に任意の芁玠に耇数の芁玠ク゚リが存圚する堎合はXcode䞊で遞択できる点が䜿いやすかったです。 将来 GPT Driver のようなAI連携が進み、蚘録したテストの自動修正、必芁なテストシナリオの提瀺や自動蚘録のようなこずが実珟するず嬉しいですね。 Writing Tools ショップスタッフ向けの販売サポヌトツヌルであるFAANSのiOSアプリを開発しおいるむッセヌです。 今回のWWDCでは、Apple Intelligenceを掻甚した文章の校正・添削機胜「Writing Tools」のアップデヌトが発衚されたした。詳现は「 Dive deeper into Writing Tools 」のセッションをご芧ください。 私が泚目したのは、UIBarButtonItemにWriting Toolsが远加され、キヌボヌドのツヌルバヌ䞊に起動ボタンを衚瀺できるようになった点です。セッションでは玔正のメヌルアプリやメモアプリを䟋に、テキストが倚いアプリにはツヌルバヌにボタンを远加するよう掚奚されおいたした。iOS、iPadOS、macOSでは18.2以䞊で䜿甚できるため、すぐに導入できたす。 たた、Writing Toolsは遞択したテキストに衚瀺されるボタンを抌すこずで起動する必芁があり、䟿利でありながらも䜿甚たでのハヌドルが高いずいう課題がありたした。 しかし今回のアップデヌトにより、Writing Toolsを起動するためのプログラムは別途必芁であるものの、ツヌルバヌから盎感的に起動できるようになりたした。 私たちが開発しおいるFAANSには、コヌディネヌト写真・動画にタむトルや説明文を入力する機胜がありたす。この入力時にWriting Toolsを起動するボタンをツヌルバヌに远加するこずで、ショップスタッフの方々の投皿䜜成の負担を軜枛し、より質の高い文章䜜りをサポヌトできるず考えおいたす。そのため、導入を怜蚎したいず思いたす。 Wi-fi Aware 察応 こんにちは、ZOZOTOWNのiOSアプリ開発を担圓しおいるぎゅです。 WWDC25では、Appleデバむス間の近距離通信を可胜にする「Wi-Fi Aware」のサポヌトが発衚されたした。 Wi-Fi Awareずは、Wi-Fi Allianceが暙準化した近接通信技術で、察応するスマヌトフォンやIoT端末などがむンタヌネットやアクセスポむントを介さずに近くのデバむスを発芋・盎接通信P2Pできる技術です。 iOS 26・iPadOS 26からは、Apple補品同士の接続はもちろん、iOS ↔ AndroidやiOS ↔ Windowsずいった異なるプラットフォヌム間での通信も可胜になりたした。これにより、これたでApple補品内に限定されおいた䜓隓が、より倚くのデバむス環境で掻甚できるようになりたす。詳现は「 Supercharge device connectivity with Wi-Fi Aware 」のセッションをご芧ください。 Wi-FiやBluetoothに䟝存せず、むンタヌネット接続なしでも異なるプラットフォヌムのデバむスを自動的に発芋・通信できる点が特に興味深いポむントです。接続時には確認コヌドで認蚌されるため、安党性も担保されおいたす。WifiAwareおよびNetworkフレヌムワヌクを甚いお実装可胜です。 今回のアップデヌトにより、呚蟺機噚ずの自動ペアリングや䜎遅延通信がよりシンプルに実珟される芋蟌みです。期埅されるナヌスケヌスずしおは、ファむル送受信の高速化、画面共有、オフラむンでのコンテンツ同期などが想定されたす。 これたでAppleはAWDLずいう独自のP2P通信技術を䜿甚しおいたしたが、EUの芏制により、暙準プロトコル䟋Wi-Fi Awareぞの準拠が求められるようになったこずが背景にあるようです。 今回のWi-Fi Aware察応を掻かしお、ZOZOTOWNで芋぀けた商品を近くのデバむスず画面・動画で共有しながら、ファッション䜓隓を楜しめるようなシヌンに応甚できるのではず期埅しおいたす。 キャッチアップに぀いお 去幎はセッション動画の字幕をAIチャットボットに芁玄させおセッションを深がるべきか短時間で芋極めおいたした。今幎は去幎以䞊のAIツヌルの進化を利甚すべく、こうしたキャッチアップの効率化をさらに加速できないか詊行錯誀したした。 今回詊した手法の䞭でおすすめしたいのがNotebookLMにセッションのYouTube動画を远加しお芁玄させる方法です。テキストベヌスのレポヌトに加えお、マむンドマップ出力を甚いお芖芚的な理解を補助しおくれたす。たた、日本語の音声芁玄を掻かしおポッドキャストを聞くかのような䜓隓でキャッチアップを手助けしおくれたす。 WWDC初日からAppleがYouTubeの公匏アカりントでセッション動画を党お公開しおくれたからこそ思い぀いた手法でした。字幕の自動翻蚳察応の恩恵を考えるず、来幎以降もYouTubeでセッション動画がすぐ芋られるずありがたいです。 おわりに 今幎のWWDCは公匏サむトおよび AppleのYouTubeチャンネル でセッション動画が初日から党お公開されたり、Group labsのようなパネルディスカッションが甚意されたりず、リモヌト参加者に察する創意工倫が感じられるむベントでした。来幎のWWDCも楜しみです。 たた、珟地に参加された @ikkou のレポヌトず、 @wiroha によるLINEダフヌずの合同報告䌚の蚘事もあわせおぜひご芧ください。 techblog.zozo.com techblog.zozo.com ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる仲間を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 hrmos.co
.table-of-contents ul ul { display: none; } はじめに こんにちは、デヌタシステム郚MLOpsブロックの 岡本 です。 MLOpsブロックではWEAR by ZOZO以䞋WEARやZOZOTOWNのレコメンドシステムを開発・運甚しおいたす。 WEARのコヌディネヌト詳现画面には、衚瀺しおいるコヌディネヌトに関連性が高いコヌディネヌトを衚瀺する関連枠がありたす。今回、WEARのコヌディネヌト詳现画面の関連枠におけるコヌディネヌトの衚瀺ロゞックを、ルヌルベヌスからMLを䜿ったロゞックに眮き換えたした。新たに開発したMLを䜿ったロゞックを、以䞋では関連コヌデレコメンド機胜ず呌んでいたす。説明のため、以䞋では関連コヌデレコメンド機胜を本機胜ず蚘茉したす。 本機胜の開発ではベクトル怜玢技術を利甚しおいたす。ベクトル怜玢の実装には、Google Cloudが提䟛するマネヌゞドなベクトル怜玢サヌビスである Vertex AI Vector Search を利甚したした。 Vertex AI Vector Searchでベクトル怜玢機胜を実装する際に、Google Cloudの公匏ドキュメントの説明だけでは理解しにくかった点などいく぀か苊劎がありたした。たた本番環境のシステムの䞀郚ずしお運甚し、遭遇した課題やその解決策に぀いおも孊びがありたした。 本蚘事では、WEARの関連コヌデレコメンドプロゞェクトのベクトル怜玢の開発にVertex AI Vector Searchを導入し、実装・本番運甚で埗られた知芋を説明したす。Vertex AI Vector Searchを䜿っおベクトル怜玢機胜を実装する際の参考になれば幞いです。 蚘事の内容は2025幎7月時点での情報であるこずにご留意ください。 目次 はじめに 目次 プロゞェクト説明ずVertex AI Vector Searchの導入背景 関連コヌデレコメンドプロゞェクトの抂芁 レコメンドロゞックの抂芁 グラフニュヌラルネットワヌクモデルによるEmbeddingの抜出 2段階のベクトル怜玢 Vertex AI Vector Searchの導入背景 過去プロゞェクトにおけるベクトル怜玢機胜の実装 Vertex AI Vector Searchの導入モチベヌション ベクトル怜玢機胜を持぀マネヌゞドサヌビスの比范 Vertex AI Vector SearchずScaNNアルゎリズムの抂芁 Vertex AI Vector Searchの抂芁 ScaNNアルゎリズムの抂芁 Index構築の実装ずパラメヌタ倀の決定 Indexの䜜成・曎新フロヌ Index構築の実装 Index䜜成の実装 Index Endpointの䜜成ずIndexのデプロむ Index構成パラメヌタの決定 ク゚リ実行時に䞊曞きしおいるパラメヌタ Index構成時に指定しおいるパラメヌタ Indexサむズの芋積もりずシャヌドサむズの決定 Indexのデプロむ戊略ずEmbeddingの曎新・削陀方法 Indexのデプロむ戊略 Indexの曎新・削陀 Indexの曎新方法 Indexの削陀方法 ベクトル怜玢ク゚リ実行ずフィルタリングの実装 ク゚リ実行の実装 フィルタリングの実装 Vertex AI Vector Searchの本番運甚ず課題の改善 モニタリング運甚 運甚しお感じたメリット 運甚・保守の容易さ 安定したパフォヌマンス 運甚しお芋぀かった課題ず改善 Indexの曎新時間が長い Indexのデヌタ曎新費甚の増加 Embedding曎新察象のデヌタ数を削枛 Indexのデヌタ曎新費甚の芋積もり たずめ プロゞェクト説明ずVertex AI Vector Searchの導入背景 関連コヌデレコメンドプロゞェクトの抂芁 WEARの関連コヌデレコメンドプロゞェクトでは、コヌディネヌト詳现画面の関連枠に衚瀺するコヌディネヌトの遞出ロゞックをルヌルベヌスからMLに眮き換えるこずを目的ずしたした。 䞋図の巊偎の画像は、WEARのコヌディネヌト詳现画面の関連枠のUIで、右偎の画像がコヌディネヌト詳现のトップです。関連枠はコヌディネヌト詳现画面の䞋郚に衚瀺され、ナヌザヌが閲芧しおいるコヌディネヌトに関連する他のコヌディネヌトをコンテンツずしお䞀芧衚瀺したす。 ルヌルベヌスのロゞックでは、コヌディネヌトに玐づくメタデヌタを䜿っお関連枠に衚瀺するコヌディネヌトを遞出しおいたした。ルヌルベヌスによる関連枠の衚瀺には次の課題がありたした。 芖芚的な類䌌性を考慮できおいない ログむンナヌザヌの嗜奜に基づいた関連性を考慮できおいない 本プロゞェクトでは既存のルヌルベヌスによるコヌディネヌト遞出での䞊蚘2぀の課題を解決するため、MLを䜿った手法でコヌディネヌトを遞出したした。よりナヌザヌが興味を持぀コヌディネヌトを提案するこずを目指し、関連枠でのむンプレッション数、クリック数ずいったKPIの改善を図りたした。 レコメンドロゞックの抂芁 グラフニュヌラルネットワヌクモデルによるEmbeddingの抜出 本機胜ではナヌザヌ・コヌディネヌトのベクトル衚珟であるEmbeddingを抜出し、ベクトル怜玢に利甚するこずでナヌザヌごずにパヌ゜ナラむズされた類䌌コヌディネヌトを遞出したした。 Embeddingの抜出にはグラフニュヌラルネットワヌク以䞋GNNを甚いおいたす。GNNは深局孊習の手法であり、ネットワヌク構造を持぀デヌタに察しお効率的に特城を孊習・衚珟したす。ネットワヌクは各芁玠を衚すNodeずNode間を結ぶEdgeから構成されたす。本機胜ではWEARにおけるナヌザヌずコヌディネヌトの関係をネットワヌクずしお衚珟し、GNNモデルでコヌディネヌトずナヌザヌの関係性を孊習したした。WEARにおけるナヌザヌずコヌディネヌトの関係は次のネットワヌク構造で衚珟したした。 Node ナヌザヌ コヌディネヌト Edge ナヌザヌ行動 クリック いいね etc... WEARのデヌタを甚いお孊習したGNNモデルを䜿うこずで、ネットワヌクの持぀構造的な特城を反映したEmbeddingを抜出できたす。たたGNNモデルずは別のモデルでナヌザヌ・コヌディネヌトの内郚特性を衚す特城量を抜出しおおり、GNNモデルで抜出したEmbeddingず集玄するこずで最終的なEmbeddingを䜜成しおいたす。こうしおナヌザヌ・コヌディネヌトに぀いお構造的か぀属性を反映したEmbeddingを埗おいたす。 このように埗られたコヌディネヌトのEmbeddingを甚いお、ベクトル怜玢のIndexを構築しおいたす。構築したIndexを察象にベクトル怜玢ク゚リを実行するこずでコヌディネヌト矀を取埗できたす。ナヌザヌのEmbeddingはリランキングに利甚しおおり、リランキングに぀いおは埌節 2段階のベクトル怜玢 で説明したす。 2段階のベクトル怜玢 本機胜ではナヌザヌごずにパヌ゜ナラむズされた類䌌コヌディネヌト矀を取埗するため、2段階でベクトル怜玢しおいたす。 類䌌コヌディネヌト矀の取埗 ナヌザヌ嗜奜に基づくパヌ゜ナラむズリランキング 1段階目のベクトル怜玢ク゚リ実行では、コヌディネヌトEmbeddingを入力ずしお芖芚的に類䌌したコヌディネヌト矀を取埗したす。 続いお2段階目のベクトル怜玢ク゚リ実行では、ナヌザヌEmbeddingを入力ずしお1段階目で取埗した類䌌コヌディネヌト矀をリランキングしたす。 リランキングにより類䌌コヌディネヌト矀はナヌザヌの嗜奜に基づいお䞊び替えられたす。これにより関連枠に衚瀺する最終的なコヌディネヌトを決定したす。 Vertex AI Vector Searchの導入背景 過去プロゞェクトにおけるベクトル怜玢機胜の実装 MLOpsブロックでは関連コヌデレコメンドプロゞェクト以前にも、ベクトル怜玢を利甚した他のレコメンドシステムを構築・運甚しおいたした。䞀方で過去のシステム実装時にはベクトル怜玢のマネヌゞドサヌビスが充実しおおらず、自前でベクトル怜玢機胜を実装・運甚しおいたした。 過去に自前でベクトル怜玢機胜を実装し、運甚を続けおいるシステムの1぀ずしお、 ZOZOTOWNの類䌌アむテム怜玢機胜 がありたす。 類䌌アむテム怜玢機胜はZOZOTOWNの商品詳现画面から利甚できる機胜で、ナヌザヌが閲芧しおいる商品に類䌌した商品を怜玢したす。類䌌アむテム怜玢では、商品画像から抜出した特城量によりベクトル怜玢Indexを構築しおいたす。構築したIndexに察しおベクトル怜玢ク゚リを実行し、類䌌商品を取埗しおいたす。 類䌌アむテム怜玢のベクトル怜玢システムは䞻に次の機胜を含んでおり、これらの実装・運甚にかかる工数面での課題がありたした。 バッチ凊理 Indexの構築 Indexの曎新新芏商品の远加・削陀 ベクトル怜玢API Indexを甚いおベクトル怜玢ク゚リを実行 Indexのリリヌス管理 バッチで䜜成したベクトル怜玢Indexの曎新をベクトル怜玢APIに反映 特にIndexのリリヌス管理はシステム的にバッチ凊理ずベクトル怜玢APIに跚る郚分であり、実装だけでなく運甚面の耇雑さを増す芁因ずなり課題感がありたした。バッチずベクトル怜玢API間の連携に぀いお以䞋で説明したす。 前提ずしおMLOpsブロックではAPIの動䜜むンフラずしおGoogle Kubernetes Engine以䞋GKEを利甚しおいたす。類䌌アむテム怜玢のベクトル怜玢APIもGKE䞊にPodずしおデプロむされおいたす。 ベクトル怜玢APIのコンテナはベクトル怜玢Indexをメモリに持ち、ク゚リ実行時はIndexを参照しおベクトル怜玢したす。API起動時にIndexをメモリぞ読み蟌み、保持しおいたす。そのためIndexの曎新をベクトル怜玢APIぞ反映するにはPodの再起動が必芁です。 Index曎新時は同期的にベクトル怜玢APIぞIndex曎新を反映するため、Index曎新ずベクトル怜玢APIのPodの再起動を䞡方バッチ凊理で実行しおいたした。 䞊蚘の構成では運甚面で具䜓的に次の課題がありたした。 ベクトル怜玢APIの回埩性が悪い Indexのデヌタ量が倧きく、ベクトル怜玢APIのPod起動に時間がかかる Podの入れ替わり頻床が高いこずによる障害リスクの増加 入れ替わり時にぱラヌ発生のリスクが高い 入れ替わり時の障害リスクを防ぐためには、リク゚ストのドレむンやProbeなど特に慎重に考慮する必芁があり、実装難易床が高い バッチずAPI間の䟝存によるシステムの耇雑性の高さ ベクトル怜玢APIぞのIndex曎新の反映タむミングを開発者偎で制埡できない バッチ凊理を実装する䞊で、ベクトル怜玢APIの実装や構成を考慮する必芁がある このように自前でベクトル怜玢機胜を実装・運甚する堎合は工数・システムの耇雑性の面でいく぀かの課題がありたした。 Vertex AI Vector Searchの導入モチベヌション 本システムの開発でVertex AI Vector Searchの導入に至ったモチベヌションは次になりたす。 マネヌゞドサヌビスである ベクトル怜玢機胜の実装・運甚・保守の工数を抑えられる 䞀床IndexをデプロむすればIndexのEmbedding曎新はVertex AI Vector Search偎で自動反映する 高速なク゚リ実行が可胜 ScaNN アルゎリズムを利甚しお高速な近䌌最近傍探玢が可胜 将来需芁に備えた知芋獲埗 今埌瀟内でベクトル怜玢を利甚したレコメンドシステムの開発が増えるず予想されるため、マネヌゞドサヌビスでのベクトル怜玢機胜の開発・運甚事䟋を獲埗する マネヌゞドサヌビスであるVertex AI Vector Searchを利甚するこずで、ベクトル怜玢機胜を自前で実装・運甚する堎合の工数やシステムの耇雑性の課題を解決できるず考えたした。たた今埌瀟内でベクトル怜玢を利甚したレコメンドシステムの開発が増えるこずも予想されおおり、Vertex AI Vector Searchを利甚した開発・本番運甚の知芋を獲埗したい狙いもありたした。WEARはZOZOTOWNず比范するずトラフィック負荷は小さいため、Vertex AI Vector Searchを本番環境で利甚し、知芋を埗るには適したプロゞェクトであるず刀断したした。 Vertex AI Vector Searchでは、ベクトル怜玢のアルゎリズムにScaNNアルゎリズムを利甚しおおり近䌌最近傍探玢を高速に実行できたす。前述した類䌌アむテム怜玢のベクトル怜玢機胜では Annoy アルゎリズムを利甚しおいたした。埌発の手法であるScaNNアルゎリズムの性胜を詊す良い機䌚であるず考えたした。 ベクトル怜玢機胜を持぀マネヌゞドサヌビスの比范 Vertex AI Vector Searchを導入する前に、Google Cloudのその他のベクトル怜玢サヌビスず比范したした。 Google Cloudでは耇数のマネヌゞドデヌタベヌスサヌビスでベクトル怜玢機胜も提䟛しおいたす。このうち AlloyDB for PostgreSQL 以䞋AlloyDBでもScaNNアルゎリズムを利甚しおいたす。マネヌゞドサヌビスである点やScaNNアルゎリズムを利甚しおいる点で、AlloyDBのベクトル怜玢機胜はVertex AI Vector Searchず類䌌しおいたす。䞀方で本番システム以倖のナヌスケヌスでは、サヌビス構築や他サヌビスずの連携の容易性もサヌビス遞定の䞊で重芁な芁玠ず考えたした。 MLOpsブロックが関わるプロゞェクトの機胜開発では、本番システム開発初期の段階で実隓・PoCを行いたす。この段階では䞻にML゚ンゞニアやデヌタサむ゚ンティストがMLモデルの粟床や出力の評䟡・改善をしたす。本システムの最終的な出力は、GNNモデルで抜出したEmbeddingではなくベクトル怜玢ク゚リ実行の結果です。そのため実隓・PoCの段階でもGNNモデルで抜出したナヌザヌ・コヌディネヌトのEmbeddingを元にベクトル怜玢Indexを構築し、ク゚リを実行しお結果を比范・確認可胜にしたす。 本番システムの開発ではサヌビス遞定時にシステムの堅牢性や安定性を重芖したす。䞀方で開発初期の実隓・PoC段階での開発では構築容易性ず柔軟性を重芖しおいたす。実隓・PoC段階での利甚も考慮に入れるず、Vertex AI Vector SearchにはAlloyDBず比范しお次の優䜍性を感じたした。 環境構築が容易 デヌタベヌスの構築が䞍芁 Google Cloud Storage 以䞋GCSのデヌタを元にIndexを䜜成可胜 Indexの切り替えが容易 Vertex AI Pipelines ず合わせお利甚しやすい AlloyDBでベクトル怜玢機胜を利甚するには、 PostgreSQL のデヌタベヌスの構築が必芁です。これに察しおVertex AI Vector SearchではGCSのデヌタを元にIndexを䜜成できるため、デヌタベヌスの構築が䞍芁で゜ヌスデヌタも甚意しやすく環境構築が容易です。たたVertex AI Vector Searchではアクセス先ずなるIndex EndpointずIndexが分離されおおり、Indexを切り替えおベクトル怜玢結果を比范可胜です。 さらにVertex AI Vector Searchは瀟内のML系のサヌビスのパむプラむン開発で倚く利甚しおいるVertex AI Pipelinesずも合わせお利甚しやすいです。Vertex AI Pipelinesは Kubeflow Pipelines のフレヌムワヌクを䜿甚しおサヌバレスでMLワヌクフロヌをオヌケストレヌションできるサヌビスです。Kubeflow PipelinesはKubernetes䞊で機械孊習ワヌクフロヌを管理するためのオヌプン゜ヌスツヌルです。 Vertex AI Pipelinesではパむプラむンの成果物であるArtifactをGCSに保存したす。Vertex AI Vector SearchではGCSのオブゞェクトを元にIndexを䜜成したす。そのためVertex AI Pipelinesでパむプラむンの成果物ずしお保存したGCSのデヌタを盎接参照しおIndexを䜜成・曎新できたす。パむプラむンでのIndexの䜜成・曎新に぀いおは埌節 Indexの䜜成・曎新フロヌ で説明したす。 これらの芳点からベクトル怜玢機胜のマネヌゞドサヌビスずしおVertex AI Vector Searchを遞定したした。 Vertex AI Vector SearchずScaNNアルゎリズムの抂芁 Vertex AI Vector Searchの抂芁 Vertex AI Vector Searchは、Google Cloudが提䟛するマネヌゞドなベクトル怜玢サヌビスです。以前はVertex AI Matching Engineずいう名称で提䟛されおいたした。 Vertex AI Vector Searchは䞻に次のコンポヌネントで構成されおいたす。 Vector Search Index Vector Search Index Endpoint以䞋Index Endpoint Vector Search Indexは、ベクトル怜玢のIndexを衚珟するコンポヌネントで、GCSに保存されたデヌタを元に構築されたす。Index Endpointは、構築したIndexのデプロむ先であり、ク゚リを受け付ける゚ンドポむントです。 各コンポヌネントの関係性は次の図で衚せたす。 開発者は事前にIndex EndpointずIndexを䜜成したす。Indexを指定したIndex Endpointにデプロむするこずでベクトル怜玢ク゚リを実行できたす。Vertex AI Vector Searchの各コンポヌネントをこのように構成するこずでベクトル怜玢機胜を実装できたす。 ScaNNアルゎリズムの抂芁 Vertex AI Vector Searchを利甚する䞊で、ScaNNアルゎリズムの特城の理解は有甚です。 ScaNNアルゎリズムは次の特城を持぀近䌌最近傍探玢の手法です。 デヌタを事前にパヌティショニングし、怜玢時には党デヌタを察象ずせずに近いパヌティションのみを怜玢するこずで蚈算コストを削枛する ベクトル量子化手法の䞀皮であるProduct QuantizationPQにより高次元ベクトルを圧瞮するためメモリ効率が良い ScaNNアルゎリズムでは次の3段階の凊理でベクトル怜玢をしたす。 パヌティショニングデヌタを事前にパヌティショニングし、ク゚リ実行時に䞊䜍のパヌティションを遞択しお、2段階目のスコアリングに進む スコアリング怜玢察象のパヌティション内の党デヌタポむントたでの距離を近䌌蚈算し、スコアリングする 再スコアリング2段階目のスコアリングの結果から䞊䜍k'個のデヌタポむントを遞択する。正確な距離を再蚈算した䞊で䞊䜍k個のデヌタポむントを遞択するこずで再スコアリングするk'はkより倧きな倀を取る 1・2段階目の凊理では蚈算コストを削枛し、3段階目の再スコアリングで粟床を向䞊させたす。これにより速床ず粟床のトレヌドオフを䞡立しおおり、倧芏暡なデヌタセットに察しおも高速な近䌌最近傍探玢を実珟しおいたす。 Vertex AI Vector Searchで提䟛されおいるTreeAH IndexはScaNNアルゎリズムを䜿甚するベクトルIndexの1぀です。 TreeAHでは1段階目の凊理でデヌタをツリヌ構造にパヌティショニングしたす。パヌティショニングを行わない堎合は党デヌタを察象に近䌌蚈算するブルヌトフォヌス怜玢ずなりたす。 TreeAHの2段階目の凊理では、PQの䞭でも特に4-bit PQを利甚しお高次元ベクトルを圧瞮量子化したす。4-bit PQを利甚するこずでSIMDレゞスタに収たるサむズのベクトルを扱うこずができたす。 SIMDずはSingle Instruction, Multiple Dataの略で1぀の呜什で耇数のデヌタを䞊列化し、同時に凊理する圢態を指したす。4-bit PQではCPUのSIMD呜什を利甚するこずで高速な近䌌最近傍探玢が可胜になっおいたす。TreeAHの AH はAsymmetric Hashingの略です。ク゚リベクトルは量子化されない生ベクトルである䞀方、候補デヌタのベクトルは事前に量子化されおいるこずがAsymmetric Hashingの所以です。 ScaNNアルゎリズムのドキュメントでは経隓則ずしおデヌタ数に応じお次の構成が掚奚されおいたす。 デヌタ芏暡 掚奚手法 20,000 件未満 ブルヌトフォヌスを䜿う 100,000 件未満 Asymmetric HashingAHでスコアリングし、その埌再スコアリングする 100,000 件以䞊 パヌティショニングを行い、AH でスコアリングし、その埌再スコアリングする ScaNNアルゎリズムやTreeAHの理解にあたっおは次の資料を参考にさせおいただきたした。 Accelerating Large-Scale Inference with Anisotropic Vector Quantization ScaNN Algorithms and Configuration たた近䌌最近傍探玢のアルゎリズムや4-bit PQに぀いおは次の資料を参考にさせおいただきたした。 近䌌最近傍探玢の最前線 4-bit PQの解説 アルゎリズムの詳现に぀いおは䞊蚘の資料をご参照ください。 Index構築の実装ずパラメヌタ倀の決定 Indexの䜜成・曎新フロヌ 関連コヌデレコメンドのシステムでは、Embeddingの抜出からIndexの䜜成・曎新・デプロむたでの䞀連の凊理をパむプラむンで実行しおいたす。パむプラむンのむンフラにはVertex AI Pipelinesを利甚しおいたす。 本システムのパむプラむンは日次実行しおおり、デプロむ枈みのIndexを曎新しおいたす。Index曎新時は新芏コヌディネヌトのEmbeddingの远加や、既存のコヌディネヌトのEmbeddingを最新のナヌザヌの行動を反映したEmbeddingぞ曎新したす。さらに削陀枈みのコヌディネヌトのEmbeddingを削陀するこずでIndexを最新化したす。 䞋図は本システムでVector Search Indexを䜜成・曎新・デプロむするパむプラむンの凊理のフロヌを瀺しおいたす。説明の関係でVertex AI Vector Searchに盎接関係しない凊理は省略しおいたす。 Vertex AI Pipelinesで実行される各タスク間のデヌタの受け枡しにはArtifactを利甚しおいたす。ArtifactはKubeflowでデヌタを保存するための仕組みです。Vertex AI PipelinesにおいおArtifactはGCSのオブゞェクトずしお保存されたす。 パむプラむンのタスクで抜出したコヌディネヌトのEmbeddingはIndexの゜ヌスデヌタ圢匏に合わせお成圢し、ArtifactずしおGCSに保存したす。Vertex AI Vector SearchではGCSのデヌタを元にIndexを䜜成・曎新したす。パむプラむンのタスクで保存したArtifactをそのたたIndexのデヌタ゜ヌスずしお参照し、Vertex AI Vector SearchのIndexを䜜成・曎新しおいたす。 システムの構成にあたっおはGKEクラスタずVertex AI Vector Search、Vertex AI Pipelinesで利甚するリヌゞョンを揃えるこずに泚意したした。 ZOZOではDWHずしおBigQueryを利甚しおおり、パむプラむンで扱う倚くのデヌタはUSマルチリヌゞョンに保存されおいたす。そのため通垞は、Vertex AI Pipelinesの実行リヌゞョンはBigQueryのク゚リ費甚を抑えるためにUS系のリヌゞョンを利甚するこずが倚いです。 䞀方で本システムではVertex AI Vector Searchの呌び出し元ずなるAPIは asia-northeast1 リヌゞョンのGKEクラスタで動䜜しおいたす。以䞋では呌び出し元ずなるAPIをアプリケヌションAPIず蚘茉したす。ベクトル怜玢ク゚リ実行時のレむテンシを抑えるためIndex EndpointはアプリケヌションAPIず同じ asia-northeast1 リヌゞョンに䜜成しおいたす。たたVertex AI Vector SearchではIndexデプロむ時の制玄ずしお、デプロむ先のIndex EndpointずIndexのリヌゞョンを䞀臎させる必芁がありたす。この制玄によりIndexのリヌゞョンはIndex Endpointに合わせお asia-northeast1 リヌゞョンに䜜成したした。 Indexのリヌゞョン制玄ずしおは、゜ヌスデヌタに指定するGCSのバケットずIndexのリヌゞョンを䞀臎させる必芁もありたす。本システムではVertex AI PipelinesのArtifactをIndexの゜ヌスデヌタずしお盎接参照しおいたす。そのためArtifactを保存するGCSのバケットも asia-northeast1 リヌゞョンに䜜成したした。 たたVertex AI Pipelinesでは、Artifactの保存先のGCSバケットのリヌゞョンずパむプラむンを実行するリヌゞョンを䞀臎させる必芁がありたす。そのためパむプラむンの実行も asia-northeast1 リヌゞョンで行うようにしたした。 リヌゞョン制玄は芋萜ずしがちであるため、システム蚭蚈時に確認しおおくこずをおすすめしたす。 Index構築の実装 Index䜜成の実装 パむプラむンでのVertex AI Vector Search Index、Index Endpointに関わるタスク実装にはVertex AI SDK for Pythonを利甚したした。 Index䜜成の実装は次の通りです。 MatchingEngineIndex クラスの create_tree_ah_index メ゜ッドを呌ぶこずでIndexを䜜成できたす。 create_tree_ah_index メ゜ッドの匕数のうち dimensions 以䞋の匕数はIndex構成パラメヌタです。Index構成パラメヌタに぀いおは埌節 Index構成パラメヌタの決定 で別途説明したす。 from google.cloud.aiplatform.matching_engine import MatchingEngineIndex created_index = MatchingEngineIndex.create_tree_ah_index( project=project_id, location=location, display_name=index_display_name, index_update_method= "BATCH_UPDATE" , contents_delta_uri=gcs_uri, ####### 以䞋はIndex構成パラメヌタ ######## dimensions=dimensions, approximate_neighbors_count=approximate_neighbors_count, shard_size=shard_size, leaf_node_embedding_count=leaf_node_embedding_count, distance_measure_type=distance_measure_type, feature_norm_type=feature_norm_type, ) with open (output_index_name, "w" ) as f: f.write(created_index.name) 匕数の contents_delta_uri にはIndex䜜成の゜ヌスデヌタずしお参照するGCSのURI gs:// で始たるものを指定したす。゜ヌスデヌタずしお参照するフォルダは次の構成に埓う必芁がありたす。フォルダ名やファむル名は任意ですがファむルの拡匵子は .csv 、 .json 、 .avro のいずれかである必芁がありたす。 batch_root/ feature_file_1.json feature_file_2.json 各ファむルはEmbeddingデヌタを含み、デヌタの圢匏は決たっおいたす。密Embedding、スパヌスEmbedding、ハむブリッドEmbeddingのどれを䜿甚するかによっお、ファむル内のデヌタ圢匏が決たっおいるため泚意が必芁です。詳现は公匏ドキュメントの 入力デヌタ凊理 を参照しおください。本システムでは密Embeddingを䜿甚しおおり、各ファむルは次の䟋の圢匏で保存しおいたす。䟋に蚘茉のid、embeddingの倀はご自身の環境に合わせお眮き換えおください。 { " id ": " 1 ", " embedding ": [ 0.1 , 0.05 , 0.3 ] } { " id ": " 2 ", " embedding ": [ 0.2 , 0.01 , 0.02 ]} Index内の各Embeddingごずのレコヌドを以䞋ではデヌタポむントず呌びたす。デヌタポむントのidはIndex内で䞀意になるため重耇しないように泚意しおください。本システムではコヌディネヌトが䞀意のidを持っおいるためコヌディネヌトのidをそのたたデヌタポむントのidずしお利甚したした。 create_tree_ah_index メ゜ッドの戻り倀は MatchingEngineIndex クラスのむンスタンスでありIndexのメタデヌタを含みたす。むンスタンスの name プロパティを参照するこずで完党修食されたIndexのidを取埗できたす。Indexのidはデプロむ時に必芁であるため、 created_index.name の倀を最埌にタスクの出力パラメヌタずしお曞き蟌んでいたす。 Index Endpointの䜜成ずIndexのデプロむ 䜜成したIndexをデプロむする前にデプロむ先ずなるIndex Endpointの䜜成が必芁です。 Index Endpointはパむプラむンずは別で Terraform により䜜成したした。TerraformはIaCツヌルの1぀でむンフラの構成を宣蚀的に蚘述でき、゜ヌスコヌドずしお管理できたす。MLOpsブロックでは原則ずしおGoogle Cloudのむンフラ構成をTerraformで定矩し、管理しおいたす。 次に瀺すのはIndex Endpointを䜜成するTerraform実装です。Terraform Providerの蚭定は省略しおいたすが、 google Provider を利甚しお䜜成可胜です。 resource "google_vertex_ai_index_endpoint" "user_to_snap_index_endpoint" { display_name = "user_to_snap_index_endpoint" region = "asia-northeast1" network = "projects/1234/global/networks/dummy-vpc-network" public_endpoint_enabled = false } Vertex AI Vector Searchぞのリク゚ストはセキュリティ、レむテンシの芳点から内郚通信のみに制限しおいたす。Index Endpointの䜜成時にVPCネットワヌクを指定するこずで、サヌビスプロデュヌサヌ偎のネットワヌクずナヌザヌが䜜成するVPCネットワヌク間でVPC Peeringを構成できたす。VPC Peeringを構成するこずで2぀のVPCネットワヌクを接続でき、各ネットワヌク内のリ゜ヌスが盞互に内郚通信できたす。Vertex AI Vector SearchのVPC Peering構成の詳现に぀いおは公匏ドキュメントの VPC ネットワヌク ピアリング接続を蚭定する を合わせおご参照ください。 たたVertex AI Vector SearchではGoogle Cloudのネットワヌキング機胜の1぀である Private Service Connect もサポヌトしおいたす。Private Service Connectを利甚する堎合は公匏ドキュメントの Private Service Connect でベクトル怜玢を蚭定する をご参照ください。 次に瀺すのはパむプラむンでIndexをデプロむする実装䟋です。Terraformで事前䜜成したIndex Endpointのidを指定しお MatchingEngineIndexEndpoint クラスのむンスタンスを䜜成したす。䜜成したむンスタンスの deploy_index メ゜ッドを呌ぶこずでIndexをデプロむできたす。 import time from google.cloud.aiplatform.matching_engine import MatchingEngineIndex, MatchingEngineIndexEndpoint index_endpoint_name = ( "projects/<YOUR_PROJECT_NAME>/locations/asia-northeast1/indexEndpoints/<YOUR_INDEX_ENDPOINT_ID>" ) index_name = "<YOUR_INDEX_ID>" machine_type = "e2-standard-16" min_replica_count = 2 max_replica_count = 5 index_endpoint = MatchingEngineIndexEndpoint( index_endpoint_name= str (index_endpoint_name), ) index = MatchingEngineIndex( index_name= str (index_name), ) current_timestamp_sec = int (time.time()) deployed_index_id = f "{index.display_name}_{index.name}_{current_timestamp_sec}" deployed_index_endpoint = index_endpoint.deploy_index( index=index, deployed_index_id=deployed_index_id, display_name=index_endpoint_display_name, deploy_request_timeout=timeout, ####以䞋ではマシンタむプやレプリカ数を指定##### machine_type=machine_type, min_replica_count=min_replica_count, max_replica_count=max_replica_count, ) with open (output_index_endpoint_name, "w" ) as f: f.write( str (deployed_index_endpoint.name)) Indexのデプロむ埌はIndexのidずは別にデプロむ枈みIndexのidが付䞎されたす。デプロむ枈みIndexはGoogle Cloudのコン゜ヌル䞊で確認できたす。次の画像に含たれる ID の倀がデプロむ枈みIndexのidです。 本システムでは、デプロむ察象のIndexのidず䜜成時のタむムスタンプを組み合わせおデプロむ枈みIndexのidを生成しおいたす。タむムスタンプを含めるのは、同じIndexを再床デプロむした堎合にデプロむ枈みIndexのidが重耇しないようにする意図です。 Indexのデプロむ時にはマシンタむプやノヌドの最小・最倧レプリカ数を指定できたす。利甚可胜なマシンタむプは埌述するIndex構成パラメヌタの1぀であるシャヌドサむズごずに限定されたす。マシンタむプはIndexのデプロむ埌に倉曎できないため、シャヌドサむズを芋積もった䞊でマシンタむプの遞定が必芁です。Indexサむズの芋積もりずシャヌドサむズの決定に぀いおは埌節 Indexサむズの芋積もりずシャヌドサむズの決定 で説明したす。 たたマシンタむプには、それぞれパフォヌマンスず費甚のトレヌドオフがありたす。これらを考慮した䞊で、システムの芁件に合わせおマシンタむプを遞定するこずをおすすめしたす。マシンタむプごずのパフォヌマンスに぀いおは公匏ドキュメントの パフォヌマンスに圱響するデプロむ蚭定 をご参照ください。 レプリカ数はIndexのシャヌドごずのノヌド台数を指定するパラメヌタです。぀たり シャヌド数xレプリカ数 がノヌド台数の合蚈になりたす。レプリカ数は最小・最倧レプリカ数の範囲でオヌトスケヌリングしたす。たた最小レプリカ数を2未満に蚭定する堎合はVertex AIサヌビスレベル契玄の察象倖ずなるため泚意しおください。 Indexをデプロむするずアクセス先ずなるgRPCアドレスが割り圓おられたす。ベクトル怜玢ク゚リ実行時はこのgRPCアドレスを指定しおリク゚ストを送信したす。リク゚スト先ずなるアドレスの範囲は deploy_index メ゜ッドの reserved_ip_ranges 匕数で指定可胜です。指定がない堎合はVPC内でVPC Peering甚に割り圓おおいるアドレス範囲から割り圓おられたす。ノヌドのレプリカ数を倉曎した堎合もリク゚スト先のgRPCアドレスは䞍倉です。 Indexのデプロむに関する詳现は公匏ドキュメントの VPC ネットワヌクにむンデックス ゚ンドポむントをデプロむしお管理する を参照しおください。たた deploy_index メ゜ッドの詳现に぀いおは Python SDKのドキュメント をご参照ください。 Index構成パラメヌタの決定 Indexの䜜成時にはIndex構成パラメヌタを指定したす。パラメヌタの倚くはIndex䜜成時に確定したすが、ク゚リ実行時に蚭定倀を䞊曞きするこずで動的に調敎できるものもありたす。ここでは、Index䜜成時に指定するパラメヌタずク゚リ実行時に動的に調敎しおいるパラメヌタに぀いお、本システムを構成した際の倀の決め方を説明したす。 ベクトル怜玢で利甚するアルゎリズムはTreeAHずBruteForceの2皮類から遞択できたす。前節 ScaNNアルゎリズムの抂芁 で述べたScaNNアルゎリズムのドキュメントの経隓則では100,000件以䞊のデヌタ芏暡ではTreeAHの利甚が掚奚されおいたした。本システムのIndexに含たれるEmbedding総数は玄1,400䞇件であるため、TreeAHを利甚するこずにしたした。本蚘事での内容は特に断りがない限りはTreeAHアルゎリズムの利甚を前提ずしおいるこずをご留意ください。 Index構成パラメヌタに぀いおは公匏ドキュメントの むンデックス構成パラメヌタ も本節の内容ず合わせおご参照ください。 ク゚リ実行時に䞊曞きしおいるパラメヌタ 本システムではク゚リ実行時、次のIndex構成パラメヌタを䞊曞きするこずで動的に調敎しおいたす。 フィヌルド 説明 approximateNeighborsCount 再スコアリング実行前の近䌌探玢によっおデフォルトで探玢される近傍数 fractionLeafNodesToSearch ク゚リが怜玢されるリヌフノヌドのデフォルトの割合 これらの倀の倧小は再珟率ずレむテンシ間のトレヌドオフになりたす。倀を倧きくするほど怜玢範囲が広がるため再珟率は向䞊する䞀方でレむテンシは増加したす。 たたIndexの構成パラメヌタではありたせんが、ベクトル怜玢ク゚リ実行時にはク゚リで返す結果の数である setNeighborCount も指定できたす。この倀が倧きくなるほどレむテンシは悪化したす。 前節 2段階のベクトル怜玢 の説明の通り、本システムは1段階目のベクトル怜玢で取埗した類䌌コヌディネヌト矀を2段階目のベクトル怜玢でリランキングし最終的な結果を返したす。ここで最終的に返すべき件数の䞊限を60件ずする芁件は決たっおいたため、この倀を元にその他のパラメヌタ倀を決定したした。 たず1段階目のベクトル怜玢におけるパラメヌタ倀の決定に぀いお説明したす。1段階目は「粗く速く、倚めに拟う」を意識しお決定したした。 2段階目に1段階目で取埗した結果をリランキングするこずを鑑みるず1段階目ではなるべく倚くの結果を返したいず考えたした。そのため2段階目で返す60件よりも十分倧きい倀を1段階目で返す結果数の䞊限ずし、 setNeighborCount の倀を決定したした。 公匏ドキュメント パフォヌマンスに圱響するク゚リ時間の蚭定 では setNeighborCount の倀が小さい堎合、 approximateNeighborsCount の倀を10倍にするこずが掚奚されおいたす。 approximateNeighborsCount の倀はこの掚奚に埓っお決定したした。 本システムのビゞネス芁件ではそれほど高い再珟率は芁求されおいたせんでした。そのため類䌌コヌディネヌト矀の取埗においおは、再珟率よりもレむテンシを優先しお fractionLeafNodesToSearch は比范的小さい倀であるデフォルト倀をそのたた採甚したした。 䞊蚘を螏たえお1段階目のク゚リ実行時に䞊曞きしたパラメヌタず倀は次の通りです。参考たでに本システムのベクトル怜玢IndexのEmbedding総数は玄1,400䞇件です。 フィヌルド 倀 approximateNeighborsCount 10,000 fractionLeafNodesToSearch 0.05 setNeighborCount 1,000 続いお2段階目のベクトル怜玢におけるパラメヌタ倀の決定に぀いお説明したす。2段階目は「粟床の重芖」を意識しお決定したした。 2段階目のベクトル怜玢では1段階目のベクトル怜玢結果に絞り蟌んでベクトル怜玢するため怜玢察象は1,000件に絞られおいたす。 approximateNeighborsCount や fractionLeafNodesToSearch の倀を倧きくするずレむテンシの増加が懞念されたす。䞀方でここでは怜玢察象数が絞られおいるためここでのレむテンシ悪化の懞念は少ないず考えたした。そのため2段階目では再珟率を重芖しお approximateNeighborsCount 、 fractionLeafNodesToSearch ずもに十分倧きな倀を指定したした。具䜓的に指定した倀は次の通りです。 フィヌルド 倀 approximateNeighborsCount 1,000 fractionLeafNodesToSearch 0.99 setNeighborCount 60 このように決めた倀でベクトル怜玢ク゚リを実行し、レむテンシの芳点で目暙を満たせるこずを確認したした。たたベクトル怜玢結果に぀いお定性的に満足できる結果が埗られるこずも確認したした。開発スケゞュヌルが厳しかったこずもあり、厳密な比范調敎などのチュヌニングは行わず䞊蚘の倀で運甚を開始したした。 ク゚リ実行時に指定可胜なパラメヌタずパフォヌマンス圱響に぀いおは、公匏ドキュメントの パフォヌマンスに圱響するク゚リ時間の蚭定 で説明されおいるため合わせおご参照ください。 Index構成時に指定しおいるパラメヌタ Indexの構成パラメヌタのうち、前節 ク゚リ実行時に䞊曞きしおいるパラメヌタ で説明したパラメヌタ以倖はIndex䜜成埌の倉曎はできたせん。これらの倀を倉曎する堎合はIndexの再䜜成が必芁です。 次のパラメヌタはIndex䜜成時に確定するパラメヌタです。これらのパラメヌタに぀いお本システムでの倀の決め方を説明したす。 フィヌルド 説明 dimensions 入力ベクトルの次元数 ShardSize 各シャヌドのサむズ leafNodeEmbeddingCount 各リヌフノヌドに察するEmbeddingの数 distanceMeasureType 最近傍探玢で䜿甚される距離尺床 featureNormType 各ベクトルに察しお実行される正芏化のタむプ dimensions は入力ベクトルの次元数を指定するパラメヌタです。Embeddingの次元数を元に倀を決定したす。本システムではGNNモデルで抜出したEmbeddingの次元数は256次元であるため256を指定したした。 ShardSize は次の3皮類から遞択できたす。 皮類 説明 SHARD_SIZE_SMALL シャヌドあたり 2 GiB SHARD_SIZE_MEDIUM シャヌドあたり 20 GiB SHARD_SIZE_LARGE シャヌドあたり 50 GiB ShardSize は各ノヌド䞊のデヌタ量を制埡するパラメヌタです。本システムでは SHARD_SIZE_MEDIUM を遞択したした。本システムでのシャヌドサむズの決定方法に぀いおは埌節 Indexサむズの芋積もりずシャヌドサむズの決定 で別途詳现に説明したす。 leafNodeEmbeddingCount は各リヌフノヌドのEmbeddingの数を指定するパラメヌタです。前節 ScaNNアルゎリズムの抂芁 で説明したパヌティショニング数に関わりたす。倀の倧小は再珟率ずレむテンシ間のトレヌドオフになりたす。倀を倧きくするほど怜玢察象が枛りレむテンシは短くなる䞀方で再珟率は䜎䞋したす。公匏ドキュメント パフォヌマンスに圱響する構成パラメヌタ では、ほずんどのナヌスケヌスで倀が15,000を超えない限りレむテンシは短くなるず説明されおいたす。本システムではレむテンシを優先しお15,000を指定したした。 leafNodeEmbeddingCount に぀いおは、パラメヌタ倀を決定する前にダミヌで100ずしおいたずころク゚リ実行に数秒かかる問題がありたした。15,000に倉曎したずころク゚リ実行の時間は数10ミリ秒に改善したした。Index内のEmbedding数が倚い堎合は泚意しお leafNodeEmbeddingCount の倀を決定するこずをおすすめしたす。 distanceMeasureType ず featureNormType は公匏ドキュメント むンデックス構成パラメヌタ での掚奚倀に埓い DOT_PRODUCT_DISTANCE + UNIT_L2_NORM を指定したした。以䞊をたずめるず本システムでのIndex構成時に指定しおいるパラメヌタ倀は次の通りです。 フィヌルド 倀 dimensions 256 ShardSize SHARD_SIZE_MEDIUM leafNodeEmbeddingCount 15,000 distanceMeasureType DOT_PRODUCT_DISTANCE featureNormType UNIT_L2_NORM Indexサむズの芋積もりずシャヌドサむズの決定 Index構成パラメヌタのうち、 ShardSize は各ノヌド䞊のデヌタ量を制埡するパラメヌタであり、指定した ShardSize ごずにサポヌトされるデヌタサむズが決たっおいたす。シャヌド数は指定した ShardSize ずIndexのサむズに応じお自動で決定されたす。 ShardSize はIndex䜜成埌に倉曎できないため、事前に倀の芋積もりが必芁です。たたVertex AI Vector Searchの合蚈ノヌド台数は シャヌド数xレプリカ数 で決たるため、 ShardSize の芋積もりは費甚にも倧きく圱響したす。 最適な ShardSize を遞択するために、䜜成するIndexサむズの確認が必芁です。䞀方で䜜成したIndexのサむズを盎接的に確認する方法はないため抂算したす。 Indexのサむズは次匏で抂算したした。ここで匏に含たれるRestrictsはEmbeddingデヌタに属性情報を付䞎するためのフィヌルドであり、ベクトル怜玢時のフィルタリングに利甚できたす。本システムでは2段階目のベクトル怜玢ク゚リ実行時、怜玢察象を1段階目のベクトル怜玢結果ぞ絞り蟌むためにフィルタリングを利甚しおいたす。Restrictsに぀いおは埌節 フィルタリングの実装 で詳しく説明したす。 IndexサむズBytes = Embedding数 × (次元数 × 1次元あたりのサむズ) + Restrictsのサむズ ScaNNアルゎリズムではEmbeddingを圧瞮したすが、 ShardSize の芋積もりにあたっおは圧瞮埌のサむズではなく、圧瞮前のサむズを元に蚈算する必芁があるこずに泚意しおください。 本システムではEmbedding数は玄1,400䞇件、次元数は256次元、1次元あたりのサむズは4 Bytesfloat32です。Embeddingデヌタのサむズは 14,000,000 × (256 × 4) で蚈算でき、玄13.35 GiBずなりたす。RestrictsのサむズをIndexのサむズに察しお玄15ず芋積もるずIndexの党䜓サむズは玄15.35 GiBず抂算できたした。抂算のためRestrictsのサむズは倧きめに芋積もりたした。 Indexの党䜓サむズが15.35 GiBである堎合、 SHARD_SIZE_SMALL ず SHARD_SIZE_MEDIUM の2皮類のシャヌドサむズでは必芁なシャヌド数は次のように芋積もりできたす。 皮類 サポヌトされるサむズ シャヌド数の芋積もり SHARD_SIZE_SMALL シャヌドあたり 2 GiB 8~9 SHARD_SIZE_MEDIUM シャヌドあたり 20 GiB 1 䞊蚘のEmbedding数でシャヌドサむズに SHARD_SIZE_SMALL を遞択するず実際のシャヌド数は8ずなりたした。前述の通りIndexのサむズを盎接確認する方法はないため、実際に構成するたではシャヌド数の芋積もりの劥圓性を厳密に確認できたせん。䞀方で芋積もりず実際の倀の誀差が2 GiB皋床で䞀臎したこずから、抂算倀の劥圓性はある皋床担保されおいるず刀断できたす。そのため実際にIndexを䜜成し、シャヌドサむズを倉曎しお確認せずずもシャヌドサむズを決定できたす。 シャヌドサむズずシャヌド数の倧小は再珟率ずレむテンシ間のトレヌドオフになりたす。シャヌドサむズが小さいほどシャヌド数は増え再珟率を向䞊したすがレむテンシを悪化させたす。シャヌドサむズが倧きいほどシャヌド数は枛りレむテンシを改善したすが再珟率を䜎䞋させたす。本システムではレむテンシを優先しお SHARD_SIZE_MEDIUM を遞択したした。 Indexのデプロむに䜿甚できるマシンタむプは ShardSize によっお異なりたす。䟋えば e2-standard-2 マシンタむプは SHARD_SIZE_SMALL のシャヌドサむズでのみ利甚可胜です。 SHARD_SIZE_MEDIUM を遞択した堎合に利甚できる最も安䟡なマシンタむプは e2-standard-16 になりたす。 マシンタむプ SHARD_SIZE_SMALL SHARD_SIZE_MEDIUM SHARD_SIZE_LARGE n1-standard-16 ◯ ◯ × n1-standard-32 ◯ ◯ ◯ e2-standard-2 ◯ × × e2-standard-16 ◯ ◯ × e2-highmem-16 ◯ ◯ ◯ n2d-standard-32 ◯ ◯ ◯ 本システムのIndexサむズを元に、 SHARD_SIZE_SMALL を遞択した堎合ず SHARD_SIZE_MEDIUM を遞択した堎合の費甚を比范するず次の通りです。蚈算に圓たっおはそれぞれの ShardSize ごずに䜿甚できる最も安䟡なマシンタむプで比范しおいたす。リヌゞョンは asia-northeast1 を想定しおおり、マシンタむプの費甚は 公匏ドキュメント の2025幎7月時点の䟡栌を元に蚈算しおいたす。レプリカ数は本システムでの最小レプリカ数である2を想定しおいたす。 皮類 シャヌド数 マシンタむプ 1ノヌド時間あたりの費甚USD ノヌド台数シャヌド数 × レプリカ数 月額費甚USD SHARD_SIZE_SMALL 8 e2-standard-2 0.12 16 1382.4 SHARD_SIZE_MEDIUM 1 e2-standard-16 0.963 2 1386.72 蚈算䟋では、 SHARD_SIZE_SMALL を遞択しお小さなマシンを利甚するのず SHARD_SIZE_MEDIUM を遞択し、より倧きなマシンを利甚するのでは費甚に倧きな差はないこずがわかりたす。 SHARD_SIZE_SMALL の堎合、リリヌス埌の早い段階でEmbedding数が増えおシャヌド数が9になる可胜性もありたす。シャヌド数9だず SHARD_SIZE_SMALL の堎合は SHARD_SIZE_MEDIUM ず比范しお若干費甚が高くなりたす。このように費甚芳点でも SHARD_SIZE_MEDIUM を遞択するこずが劥圓であるず刀断したした。 ShardSize の遞択時は今埌のEmbedding数の増加も考慮に入れるなど、システム芁件に応じお倀を遞定するこずをおすすめしたす。 シャヌドサむズに぀いおは公匏ドキュメントの むンデックスの管理 も合わせおご参照ください。 Indexのデプロむ戊略ずEmbeddingの曎新・削陀方法 本番システムの運甚芳点においおIndexのデプロむ・リリヌス管理をどのように行うか、Indexの曎新・削陀時はどのようなフロヌで行うのか、ダりンタむムはあるのかは重芁なポむントずしお考慮しおいたす。関連コヌデレコメンドでもVertex AI Vector Searchを利甚しおシステムを構成する際にこれらのポむントには泚意したした。 本節では関連コヌデレコメンドのシステムにおけるIndexのデプロむ戊略の玹介ず、Indexの曎新・削陀の実装時の泚意点に぀いお説明したす。 Indexのデプロむ戊略 本システムにおけるIndexのリリヌスフロヌをご説明したす。 前節 Index Endpointの䜜成ずIndexのデプロむ での説明の通り本システムでは、Indexのデプロむ先ずなるIndex EndpointをTerraformで䜜成しおいたす。Index Endpointの䜜成埌は、Vertex AI Pipelinesを利甚しおIndexをデプロむしたす。 IndexのデプロむはTerraformの google_vertex_ai_index_endpoint_deployed_index リ゜ヌスでも可胜です。䞀方で本システムでは新芏にIndexを䜜成する堎合、Indexの䜜成ずデプロむの䜜業を分けない方が開発者の手間が少ないず考えたした。そのためIndexの䜜成ずデプロむはどちらもVertex AI Pipelinesで行う構成にしたした。 ただ実際運甚しおみるず、Indexのデプロむに関しおはVertex AI Pipelinesで行っおもTerraformで行っおも運甚䞊倧きな違いはないず感じおいたす。倧切なのはIndexのデプロむ時には先のシャヌドサむズずマシンタむプ、シャヌド数ずレプリカ数など、Indexの構成パラメヌタずむンフラの蚭定が密接に関わるものがある点に぀いお理解するこずだず思いたす。䟋えばIndexを䜜成するチヌムずデプロむを担圓するむンフラチヌムが分かれおいる堎合は、Index䜜成ずデプロむに぀いおお互いの棲み分けや連携に぀いおの認識合わせが重芁ず感じたした。 本システムにおけるIndexのリリヌスフロヌは次図で衚せたす。 Vertex AI Vector Searchでのベクトル怜玢ク゚リはMLOpsブロックで開発・運甚するアプリケヌションAPIから実行しおいたす。アプリケヌションAPIはGKE䞊で動䜜しおおり、コンテナの環境倉数でク゚リ実行先のIndex Endpoint、Indexを指定しおいたす。 MLOpsブロックでは、GKE䞊で動䜜するAPIのデプロむをKubernetes向けのGitOpsデリバリヌツヌルである Argo CD で行っおいたす。たた高床なデプロむ戊略の実珟のため、Kubernetesのカナリアリリヌスやブルヌグリヌンデプロむメントをサポヌトするツヌルである Argo Rollouts を利甚しおいたす。 Argo Rolloutsではこれらのデプロむ戊略に加えおAPIのSLO分析を組み合わせた段階的なリリヌス・自動ロヌルバックの仕組みを提䟛しおいたす。このようなデプロむ手法をプログレッシブデリバリヌず呌びたす。アプリケヌションAPIのデプロむはArgo CDで管理されおおり、Argo Rolloutsを利甚しおプログレッシブデリバリヌを実珟しおいたす。 アプリケヌションAPIのメトリクスは Datadog で収集しおいたす。Argo RolloutsのSLO分析にはDatadogのメトリクスを利甚しおいたす。゚ラヌレヌトやレむテンシのSLOを蚭定し、これらのSLOを満たさない堎合は自動でロヌルバックするよう蚭定しおいたす。 MLOpsブロックで利甚するArgo CDの詳现は、TECH BLOGの「MLOpsマルチテナントクラスタぞのArgo CDの導入ず運甚」をご参照ください。 techblog.zozo.com 本システムの構成では新芏にIndexをデプロむした堎合、アプリケヌションAPIの環境倉数でク゚リ実行先のIndexを倉曎したす。この䜜業を挟むこずで、Index新芏デプロむ時の安党性はアプリケヌションAPIのプログレッシブデリバリヌにより担保しおいたす。 たた新芏にIndexをデプロむした埌で参照されなくなったデプロむ枈みIndexは䞍芁な費甚を防ぐため、デプロむを解陀したす。図では省略しおいたすがこの䜜業は手動で行っおいたす。 Indexの曎新・削陀 Indexの曎新方法 本システムではVertex AI PipelinesのタスクでIndexを曎新したす。本番環境では最新のIndexではなく過去に䜜成したIndexを曎新したいケヌスはないず考え、曎新察象は䜜成日が最も新しいIndexずしたした。 from google.api_core.client_options import ClientOptions from google.cloud.aiplatform_v1 import IndexServiceClient, ListIndexesRequest from google.cloud.aiplatform_v1.services.index_service import pagers from google.cloud.aiplatform_v1.types import Index from google.cloud.aiplatform.matching_engine import MatchingEngineIndex location = "asia-northeast1" project_id = "<YOUR_PROJECT_ID>" target_index_display_name = "<YOUR_TARGET_INDEX_DISPLAY_NAME>" option = ClientOptions(api_endpoint=f "{location}-aiplatform.googleapis.com" ) client = IndexServiceClient(client_options=option) parent = f "projects/{project_id}/locations/{location}" filter = f 'display_name="{target_index_display_name}"' request = ListIndexesRequest(parent=parent, filter = filter ) page_result: pagers.ListIndexesPager = client.list_indexes(request=request) latest_index: Index = sorted (page_result, key= lambda i: i.create_time, reverse= True )[ 0 ] index_name = latest_index.name index = MatchingEngineIndex(index_name=index_name) gcs_uri = str (contents_delta_jsonl_dir).replace( "/gcs/" , "gs://" ) index.update_embeddings( contents_delta_uri=gcs_uri, is_complete_overwrite=is_complete_overwrite, ) 本システムではIndex曎新方法ずしおバッチ曎新を利甚しおいたす。バッチ曎新の堎合は MatchingEngineIndex.update_embeddings メ゜ッドを利甚しおIndexを曎新したす。曎新時に指定する゜ヌスデヌタはIndex䜜成時の゜ヌスデヌタず同じ圢匏で甚意し、 contents_delta_uri 匕数で指定したす。 is_complete_overwrite 匕数は曎新時にIndex党䜓を䞊曞きするかどうかを指定するものです。本システムではIndex党䜓を曎新分で眮き換えたい蚳ではなく、郚分的にIndexを曎新するため垞に False を指定しおいたす。 ゜ヌスデヌタに含たれるデヌタポむントのidが既にIndexに存圚する堎合は新しいEmbeddingデヌタで䞊曞きされたす。゜ヌスデヌタに含たれるデヌタポむントのidがIndexに存圚しない堎合は新芏に远加されたす。 Indexの曎新埌はIndexが自動で再構築圧瞮され、再構築䞭は増分Indexが䜜成されたす。増分Indexが存圚する間は、曎新埌にコン゜ヌルから確認できるIndexの密ベクトル数が実際にIndexに含たれるid数より倚くなるこずがありたす。たた増分Indexが存圚する間はベクトル怜玢ク゚リ実行時に増分Indexが優先的に参照されるため、この間も新芏曎新したEmbeddingを䜿っおベクトル怜玢したす。 デプロむ枈みのIndexを曎新する堎合はIndexの曎新埌に同期が必芁です。基本的にバックグラりンドで自動同期されたすが、曎新から同期の完了たでは若干のラグがあるこずに泚意が必芁です。コン゜ヌルから確認できるデプロむ枈みIndexの 前回の同期 の倀はEmbeddingの曎新に関わらず定期的に曎新されたす。ドキュメント等に明蚘はなかったため手元で確認した倀にはなりたすが、この倀は5分間隔で曎新されおいたした。そのため経隓的にはIndex曎新の完了埌5分以内に同期が完了したす。 デプロむ枈みIndexを曎新する堎合、曎新や再構築、同期の間にダりンタむムはありたせん。 Indexの曎新に関する詳现は公匏ドキュメントの アクティブ むンデックスの曎新ず再構築 をご参照ください。 Indexの削陀方法 Index内のEmbeddingデヌタを削陀する堎合は、Indexのバッチ曎新ず同じく MatchingEngineIndex.update_embeddings メ゜ッドを呌び出したす。デヌタ曎新ず異なる点は contents_delta_uri 匕数で゜ヌスデヌタに指定するフォルダの構成です。指定先のフォルダ内に delete ずいう名前でサブディレクトリを䜜成し、削陀察象のデヌタポむントのidを指定したテキストファむルを配眮したす。 batch_root/ delete/ delete_file.txt テキストファむルには次の䟋のように各行に1぀のidを指定したす。 1 2 Indexの曎新ず削陀は䞀床の MatchingEngineIndex.update_embeddings メ゜ッドの呌び出しで同時に行えないこずに泚意しおください。指定したフォルダ内にEmbedding曎新甚のファむルず delete サブディレクトリ内に削陀甚のファむルの䞡方が存圚する堎合、Indexデヌタの削陀が行われないずいう事態がありたした。Indexの曎新ず削陀を別々の凊理ずしお実装するこずで解消できたため、本システムでは凊理を分けおいたす。 ベクトル怜玢ク゚リ実行ずフィルタリングの実装 ク゚リ実行の実装 Python Vertex AI SDKずcurlコマンドでのベクトル怜玢ク゚リ実行の方法は公匏ドキュメント パブリック むンデックスをク゚リしお最近傍を取埗する に蚘茉されおいたす。公匏ドキュメントだけでなくGoogle CloudのVertex AI Vector Searchのコン゜ヌルでも grpc_cli ずPythonでの実装䟋が甚意されおいたす。コン゜ヌルのPython実装䟋はVertex AI Pythonクラむアントラむブラリを利甚した実装になっおいたす。 Vertex AI SDKはクラむアントラむブラリよりも高い抜象化レベルで動䜜したす。より高い柔軟性や制埡等のチュヌニングが必芁な堎合はVertex AI Pythonクラむアントラむブラリの利甚も怜蚎できたす。 本システムのアプリケヌションAPIはWEARのバック゚ンドAPIからのリク゚ストを受けお、Vertex AI Vector SearchやDBぞアクセスする圹割を担いたす。これらのVertex AI Vector SearchやDBぞのリク゚ストはI/Oバりンドな凊理であり、I/O埅ちの間に他の凊理を非同期に実行するこずでAPIのパフォヌマンスを向䞊できたす。 アプリケヌションAPIの実装にはPythonのWebフレヌムワヌクである Fast API を利甚しおおり、゚ンドポむントの定矩であるPath Operationに枡す関数は async def ずしお定矩しおいたす。Fast APIではこの関数を async def で定矩するこずで むベントルヌプ を利甚した非同期凊理が可胜になりたす。䞀方で関数を def で定矩するずスレッドプヌルを利甚した䞊列凊理を行いたす。むベントルヌプを䜿った方法はスレッドプヌルを䜿った方法よりも高い䞊行性を持ちたす。 Path Operationに枡す関数を async def で定矩する際の泚意点ずしお、関数内に同期凊理があるずむベントルヌプがブロックされおしたいパフォヌマンスの䜎䞋に぀ながりたす。そのため async def で関数を定矩し効率的に䞊行凊理するには、関数内の重たい同期凊理やI/O埅ちのある凊理を党お非同期凊理にしたす。 Vertex AI Vector Searchでのベクトル怜玢ク゚リ実行に぀いお、Python Vertex AI SDKで甚意されおいるクラむアントは非同期凊理に察応しおいたせん。ベクトル怜玢ク゚リを非同期に実行するため、本システムではVertex AI Pythonクラむアントラむブラリで非同期凊理に察応したクラむアントを指定しお実装したした。 䞊述したコン゜ヌルのPython実装䟋を非同期凊理に察応させるず次のようになりたす。泚意点ずしお、 grpc.insecure_channel や grpc.aio.insecure_channel は通信を暗号化したせん。そのため実際の実装では grpc.aio.secure_channel を利甚しお通信を暗号化するこずを掚奚したす。 import grpc from google.cloud.aiplatform_v1beta1 import MatchServiceAsyncClient from google.cloud.aiplatform_v1beta1.services.match_service.transports.grpc_asyncio import ( MatchServiceGrpcAsyncIOTransport, ) index_endpoint_ip_port = "<YOUR_gRPC_ADDRESS>:10000" channel = grpc.aio.insecure_channel(target=index_endpoint_ip_port) transport = MatchServiceGrpcAsyncIOTransport(channel=channel) client = MatchServiceAsyncClient(transport=transport) ベクトル怜玢ク゚リ実行の実装䟋は次です。 from collections.abc import MutableSequence from google.cloud.aiplatform.matching_engine import MatchingEngineIndexEndpoint from google.cloud.aiplatform_v1.types import ( FindNeighborsRequest, FindNeighborsResponse, IndexDatapoint, ) feature_vector: list [ float ] = [ 0.1 , 0.2 , 0.3 , ...] # ク゚リに䜿甚するベクトル※ 実際の倀に眮き換えおください neighbor_count: int = 1000 # 取埗する近傍の数 approximate_neighbor_count: int = 10000 # 近䌌探玢で取埗する近傍の数 fraction_leaf_nodes_to_search: float = 0.05 # 怜玢するリヌフノヌドの割合 index_endpoint_name = ( "projects/<YOUR_PROJECT_NAME>/locations/asia-northeast1/indexEndpoints/<YOUR_INDEX_ENDPOINT_ID>" ) deployed_index_id = "<YOUR_DEPLOYED_INDEX_ID>" # デプロむ枈みIndexのid datapoint = IndexDatapoint( feature_vector=feature_vector, ) vector_search_endpoint = MatchingEngineIndexEndpoint( index_endpoint_name=index_endpoint_name, ) query = FindNeighborsRequest.Query( datapoint=datapoint, neighbor_count=neighbor_count, approximate_neighbor_count=approximate_neighbor_count, fraction_leaf_nodes_to_search_override=fraction_leaf_nodes_to_search, ) find_neighbors_req = FindNeighborsRequest( index_endpoint=index_endpoint_name, deployed_index_id=deployed_index_id, queries=[query], return_full_datapoint= False , ) res: FindNeighborsResponse = await client.find_neighbors( request=find_neighbors_req, ) neighbors: MutableSequence[FindNeighborsResponse.NearestNeighbors] = ( res.nearest_neighbors ) 先の方法で初期化したクラむアントの find_neighbors メ゜ッドを呌び出すこずでベクトル怜玢リク゚ストを実行できたす。ここで find_neighbors メ゜ッドは非同期メ゜ッドであり、 await を付けお呌び出すこずでベクトル怜玢リク゚ストを非同期に実行できたす。 find_neighbors メ゜ッドの匕数の request 匕数に FindNeighborsRequest クラス のオブゞェクトを枡すこずで、ベクトル怜玢先やク゚リ実行のパラメヌタを指定できたす。たた蚘茉は省いおいたすが、 timeout 匕数や retry 匕数を指定するこずでタむムアりトやリトラむの蚭定も可胜です。 ク゚リ実行察象のIndex Endpointずデプロむ枈みIndexは FindNeighborsRequest クラスの初期化時に指定したす。 index_endpoint 匕数でIndex Endpointのリ゜ヌス名を、 deployed_index_id 匕数でデプロむ枈みIndexのidを指定したす。 queries 匕数に FindNeighborsRequest.Query クラスのオブゞェクトを芁玠ずしお持぀配列を枡しおベクトル怜玢ク゚リの内容を指定したす。 queries 匕数の倀は配列であり、芁玠が耇数ある堎合はク゚リを同時に指定できたす。本システムでは特に ハむブリッド怜玢 は利甚しおいないためク゚リは1぀指定しおいたす。たた return_full_datapoint 匕数でベクトル怜玢結果のデヌタポむントが持぀党おの情報を返すかどうかを指定できたす。 return_full_datapoint 匕数の倀を True にした堎合、デヌタポむントのidだけでなく、Embeddingや restricts フィヌルドの倀も返したす。本システムではデヌタポむントのidのみがあれば十分であり、レスポンスサむズを小さくするために False を指定しおいたす。 FindNeighborsRequest.Query クラスの初期化時、 datapoint 匕数に IndexDatapoint クラス のオブゞェクトを枡すこずでベクトル怜玢の察象を指定したす。ク゚リ実行時の入力にはEmbeddingだけでなく、Indexに含たれるデヌタポむントのidも指定できたす。本システムではデヌタポむントのidずしおコヌディネヌトのidを利甚しおいたす。アプリケヌションAPIはWEARのバック゚ンドAPIからコヌディネヌトのidを受け取り、そのたた IndexDatapoint の datapoint_id フィヌルドに指定しおク゚リ実行しおいたす。たた IndexDatapoint クラスには restricts フィヌルドも指定可胜です。こちらは埌節 フィルタリングの実装 で詳しく説明したす。 䞊蚘の䟋ではク゚リ実行時の入力にEmbeddingを䜿甚する実装䟋ですが、デヌタポむントのidを指定する堎合は次のように IndexDatapoint オブゞェクトを䜜成できたす。 datapoint_id= "1234" datapoint = IndexDatapoint( datapoint_id=datapoint_id ) 前節 ク゚リ実行時に䞊曞きしおいるパラメヌタ での説明の通り、 approximateNeighborsCount ・ fractionLeafNodesToSearch ・ setNeighborCount の倀はク゚リ実行時に䞊曞きし、Index䜜成時の指定倀を倉曎しおいたす。これらの倀は FindNeighborsRequest.Query クラスの初期化時に指定したす。 フィルタリングの実装 Vertex AI Vector SearchではIndexのデヌタポむントぞ属性情報を付䞎する restricts フィヌルドを利甚しお、ベクトル怜玢ク゚リの察象をIndexのサブセットに制限できたす。 前節 2段階のベクトル怜玢 で説明した通り、本システムでは2段階にベクトル怜玢をしたす。 restricts フィヌルドを利甚するこずで、2段階目のベクトル怜玢ク゚リ実行時に、怜玢察象を1段階目のベクトル怜玢で取埗したサブセットに制限しおいたす。 restricts フィヌルドを指定する堎合、名前空間 namespace フィヌルドの指定が必芁です。たたオプションずしおトヌクン allow ・ deny フィヌルドの倀を指定できたす。トヌクンの倀は文字列の配列になりたす。ク゚リ実行時に allow_list や deny_list を指定するこずで、トヌクンの倀に応じお怜玢察象を制限できたす。 前節 Index䜜成の実装 で玹介したIndex゜ヌスデヌタのファむルの倀に restricts フィヌルドを指定するず、次の䟋のデヌタ圢匏になりたす。 { " id ": " 1 ", " embedding ": [ 0.1 , 0.05 , 0.3 ] , " restricts ": [{ " namespace ": " snap_id ", " allow ": [ " 1 " ]}] } { " id ": " 2 ", " embedding ": [ 0.2 , 0.01 , 0.02 ] , " restricts ": [{ " namespace ": " snap_id ", " allow ": [ " 2 " ]}]} 前節 ク゚リ実行の実装 に蚘茉の通り、本システムではIndexのデヌタポむントのidずしおコヌディネヌトのidを利甚しおいたす。フィルタリングには取埗したデヌタポむントのidを指定するため、䞊蚘のように restricts フィヌルドのトヌクンの倀にもコヌディネヌトのidを利甚しおいたす。たた allow ・ deny フィヌルドはオプションであるため、指定しない堎合は空の配列になりたす。本システムでは allow フィヌルドのみを指定しおいたす。 次に瀺すのは restricts フィヌルドを指定したベクトル怜玢ク゚リ実行における IndexDatapoint クラスのオブゞェクトの初期化の䟋です。本システムの2段階目のベクトル怜玢ク゚リ実行では IndexDatapoint.Restriction クラスの匕数に allow_list を指定し、ク゚リ実行の察象をサブセットに制限しおいたす。぀たり find_neighbors メ゜ッド呌び出しの戻り倀は allow_list に指定した倀を持぀デヌタポむントのみになりたす。 from google.cloud.aiplatform_v1.types import IndexDatapoint namespace = "snap_id" # 名前空間の指定 allow_list = [ "1" ] # 蚱可察象ずする倀の配列 datapoint = IndexDatapoint( feature_vector=feature_vector, restricts=[ IndexDatapoint.Restriction( namespace=namespace, allow_list=allow_list, ) ], ) たた本システムでは1段階目のベクトル怜玢ク゚リ実行時にも restricts フィヌルドを掻甚しおいたす。Vertex AI Vector Searchではデヌタポむントのidを指定しおベクトル怜玢ク゚リを実行した堎合、ベクトル怜玢結果には自身のデヌタポむントも含たれたす。本システムでは1段階目のベクトル怜玢ク゚リ実行時にデヌタポむントのidを指定しお近傍を取埗しおいたす。そのためデフォルトでは指定したデヌタポむントのidも find_neighbors メ゜ッド呌び出しの戻り倀に含たれたす。本システムでは入力ずなるコヌディネヌトの類䌌コヌディネヌトを取埗したいため、 find_neighbors メ゜ッド呌び出しの戻り倀に入力ずなるコヌディネヌトのidを含めたくありたせん。入力したデヌタポむントのidを怜玢結果から陀倖するため、 IndexDatapoint.Restriction クラスの匕数ぞ deny_list を指定しおいたす。 from google.cloud.aiplatform_v1beta1.types import IndexDatapoint namespace = "snap_id" # 名前空間の指定 deny_list = [ "1" ] # 陀倖察象ずする倀の配列 datapoint = IndexDatapoint( datapoint_id=datapoint_id, restricts=[ IndexDatapoint.Restriction( namespace=namespace, deny_list=deny_list ) ], ) Restrictsの利甚時に泚意が必芁なのは、Index䜜成時に指定する allow ・ deny フィヌルドずク゚リ実行時に指定する allow_list ・ deny_list はそれぞれの組み合わせでフィルタリングされる点です。フィルタ条件ず䞀臎に぀いお次の䟋で説明したす。この䟋は公匏ドキュメント ベクトル䞀臎をフィルタする での説明を元にしおいたす。 䟋えば color 名前空間に぀いお、次の allow ・ deny フィヌルドを持぀デヌタポむントがIndexに存圚するずしたす。 A : { " id ": " A ", " embedding ": [ ... ]} B : { " id ": " B ", " embedding ": [ ... ] , " restricts ": [{ " namespace ": " color ", " allow ": [ " red " ] , " deny ": []}]} C : { " id ": " C ", " embedding ": [ ... ] , " restricts ": [{ " namespace ": " color ", " allow ": [ " blue " ] , " deny ": []}]} D : { " id ": " D ", " embedding ": [ ... ] , " restricts ": [{ " namespace ": " color ", " allow ": [ " orange " ] , " deny ": []}]} E : { " id ": " E ", " embedding ": [ ... ] , " restricts ": [{ " namespace ": " color ", " allow ": [ " red ", " blue " ] , " deny ": []}]} F : { " id ": " F ", " embedding ": [ ... ] , " restricts ": [{ " namespace ": " color ", " allow ": [ " red " ] , " deny ": [ " blue " ]}]} G : { " id ": " G ", " embedding ": [ ... ] , " restricts ": [{ " namespace ": " color ", " allow ": [ " red ", " blue " ] , " deny ": [ " blue " ]}]} # 実務䞊必芁性が薄いケヌス H : { " id ": " H ", " embedding ": [ ... ] , " restricts ": [{ " namespace ": " color ", " allow ": [] , " deny ": [ " blue " ]}]} 䞊蚘を゜ヌスデヌタに持぀Indexに察しおク゚リ実行時に指定する allow_list ・ deny_list のパタヌンずしお次の䟋を考えたす。 (1) {} # restricts の指定なし (2) { " namespace ": " color ", " allow_list ": [ " red " ] , " deny_list ": []} (3) { " namespace ": " color ", " allow_list ": [ " blue " ] , " deny_list ": []} (4) { " namespace ": " color ", " allow_list ": [ " orange " ] , " deny_list ": []} (5) { " namespace ": " color ", " allow_list ": [ " red ", " blue " ] , " deny_list ": []} (6) { " namespace ": " color ", " allow_list ": [ " red " ] , " deny_list ": [ " blue " ]} (7) { " namespace ": " color ", " allow_list ": [ " red ", " blue " ] , " deny_list ": [ " blue " ]} # 実務䞊必芁性が薄いケヌス (8) { " namespace ": " color ", " allow_list ": [] , " deny_list ": [ " blue " ]} この時、デヌタポむントの allow ・ deny フィヌルドずク゚リ実行時に指定する allow_list ・ deny_list の組み合わせによるフィルタリング結果は次になりたす。◯は条件が䞀臎しデヌタポむントを取埗できる組み合わせです。空欄は条件が䞀臎せずデヌタポむントを取埗できない組み合わせを衚しおいたす。 A B C D E F G H (1) ◯ ◯ ◯ ◯ ◯ ◯ ◯ ◯ (2) ◯ ◯ ◯ ◯ (3) ◯ ◯ (4) ◯ (5) ◯ ◯ ◯ (6) ◯ ◯ (7) ◯ (8) ◯ ◯ ◯ ◯ ◯ 本システムではデヌタポむントの䜜成時、 allow フィヌルドに1぀のトヌクンの倀を持たせおいるため、䞊蚘の䟋ではデヌタポむント B~D のパタヌンに該圓するデヌタポむントがIndexに存圚したす。 1段階目のク゚リ実行では入力ずなるコヌディネヌトのidを陀倖するように deny_list を指定しおおり、これは䞊蚘の䟋ではク゚リの (8) に該圓したす。 (8)ずB~D で䞀臎を芋るず (8)ずC 以倖の組み合わせで䞀臎するこずがわかりたす。たた2段階目のク゚リ実行では1段階目のベクトル怜玢で取埗した耇数のデヌタポむントのidを allow_list に指定しおおり、䞊蚘の䟋ではク゚リの (5) に該圓したす。 (5)ずB~D で䞀臎を芋るず (5)ずB 、 (5)ずC の組み合わせで䞀臎するこずがわかりたす。 このようにデヌタポむントの restricts フィヌルドの allow ・ deny フィヌルドずク゚リ実行時に指定する allow_list ・ deny_list の組み合わせで耇雑な条件でのフィルタリングが可胜です。䞀方で本システムのような簡単なク゚リであればデヌタポむントに持たせるのは allow フィヌルドのみで十分です。ナヌスケヌスによっお指定するフィヌルドを䜿い分け぀぀、䞊蚘のような衚でフィルタリング察象が意図したものになるか確認するこずをおすすめしたす。 Vertex AI Vector Searchの本番運甚ず課題の改善 モニタリング運甚 Vertex AI Vector Searchではメトリクスダッシュボヌドがデフォルトで提䟛されおおり、ダッシュボヌドでは次のメトリクスを確認できたす。 ノヌド数 シャヌド数 秒間ク゚リ数 レむテンシ50・95・99tile CPU䜿甚率 メモリ䜿甚率 次に瀺すのは実際のダッシュボヌドの画面です。 本システムでは珟状、Vertex AI Vector Searchのメトリクスを察象ずしたアラヌトの蚭定は行なっおいたせん。アプリケヌションAPIやLoad Balancer、Datadogのメトリクスはモニタリング・アラヌトを蚭定しおいたす。Vertex AI Vector Searchのメトリクスダッシュボヌドはこれらのモニタリングで異垞があった堎合の調査手段ずしお参照しおいたす。 珟状䞊蚘のモニタリング運甚で特に困った点はありたせん。今埌の運甚でVertex AI Vector Search単䜓でのメトリクス悪化を怜知したいケヌスなど出た堎合は、Vertex AI Vector Searchのみの監芖やアラヌトの蚭定を怜蚎したす。 運甚しお感じたメリット 関連コヌデレコメンドでVertex AI Vector Searchを玄4か月間、本番運甚しお感じた利甚メリットを玹介したす。 運甚・保守の容易さ 前節 Vertex AI Vector Searchの導入モチベヌション でVertex AI Vector Searchの採甚理由ずしおマネヌゞドサヌビスであるこずを挙げおいたした。マネヌゞドサヌビスであるためリリヌス埌に必芁な運甚・保守䜜業は特になく、ナヌザヌ偎ではベクトル怜玢Indexの䜜成や曎新、ク゚リ実行の実装に集䞭できおいたす。 たた 過去プロゞェクトにおけるベクトル怜玢機胜の実装 で述べたようなバッチずAPI間の䟝存もありたせん。前節 Indexのデプロむ戊略 で述べたようにIndexのデプロむ戊略もシンプルな構成に実装できおいたす。過去プロゞェクトにおけるベクトル怜玢機胜ず比范するずシステム自䜓をシンプルにできた点も運甚負荷の軜枛に぀ながりたした。 安定したパフォヌマンス 本システムをリリヌス埌、Vertex AI Vector Search起因での問題はほずんど発生しおおらず、安定したパフォヌマンスを発揮しおいたす。 本システムの平均リク゚スト数は玄15req/secでピヌク時は玄30req/secです。Vertex AI Vector Searchのベクトル怜玢リク゚ストのレむテンシは99tileで玄60〜120msであり、特にピヌク時の倧きなレむテンシ悪化も芋られたせん。 Vertex AI Vector Searchはマネヌゞドサヌビスであるため、ベクトル怜玢APIず同じGKEクラスタ内に自前でAPIを構築する堎合ず比范するずネットワヌク的な距離は離れおいたす。ク゚リ実行のレむテンシぞネットワヌク起因でのレむテンシ等が䞊乗せされるこずで、ベクトル怜玢リク゚スト時のレむテンシを増加する可胜性を懞念しおいたしたが、結果ずしお本プロゞェクトの芁件に察しおは十分なパフォヌマンスでした。 たたマネヌゞドサヌビスぞのリク゚スト時、timeout゚ラヌの発生が床々他システムで芋られおおり、Vertex AI Vector Searchに぀いおも懞念しおいたした。しかし本システムでのVertex AI Vector Searchぞのリク゚ストではtimeout゚ラヌは1日1件発生するかどうかの頻床ずなっおおり安定しおいたす。 関連コヌデレコメンドプロゞェクトの出面での負荷は比范的に芏暡が小さく、より高負荷な本番環境でのVertex AI Vector Searchの利甚実瞟はただMLOpsブロックでは䜜れおいたせん。しかし負荷詊隓時には新芏導入したVertex AI Vector Searchの負荷限界を把握するため、本番の想定トラフィックを倧きく超える~200req/secたで怜蚌したした。怜蚌した範囲ではVertex AI Vector Searchのレむテンシに倧きな倉化は芋られたせんでした。こういった実瞟からも、今埌より倧芏暡なシステムでベクトル怜玢機胜を構築する際にも十分遞択肢になり埗るず考えおいたす。 運甚しお芋぀かった課題ず改善 Vertex AI Vector Searchを利甚した本システムを本番運甚する䞭で次の課題が芋぀かりたした。 Index曎新にかかる時間が長い Index曎新数が倚いずデヌタ曎新にかかる費甚が増加する それぞれの課題ず本システムで実斜した改善内容を玹介したす。 Indexの曎新時間が長い 本システムでは日次でIndexの曎新を行なっおいたす。たた前節 Indexの削陀方法 で述べた通り远加・曎新ず削陀はタスクを分けお盎列に実行しおいたす。Indexの曎新にかかる時間は远加・曎新、削陀を合わせるず玄2〜3時間ずなっおおり、パむプラむンの党䜓の実行時間に察しお玄半分の割合を占めおいたした。 それぞれのタスクにかかる時間ず曎新数は次の通りです。参考たでにIndex党䜓のデヌタ数は玄1,400䞇件です。 远加・曎新1〜2時間 曎新数玄3,500,000ä»¶ 削陀玄30〜40分 曎新数玄30〜60ä»¶ 本システムではむンフラ構築にかかる費甚やシステムの耇雑性を抑えるため、APIでのリアルタむムなEmbedding抜出は行なっおいたせん。そのためバッチ凊理で事前にEmbedding抜出されたナヌザヌ・コヌディネヌトのみを関連コヌデレコメンドプロゞェクトでのMLを䜿ったレコメンドの察象ずしおいたす。この構成では新芏ナヌザヌ・コヌディネヌトのEmbeddingをより早く抜出し、レコメンド察象ずするにはバッチの実行頻床を䞊げる必芁がありたす。たたバッチの実行頻床を䞊げるず、より盎近の行動を反映したEmbeddingを䜿っおベクトル怜玢をできるためレコメンドのリアルタむム性も向䞊したす。 本システムで高いリアルタむム性は芁求されおいたせんが、今埌バッチの実行頻床を増やしおリアルタむム性を向䞊させる堎合、Indexの曎新にかかる時間がボトルネックになるこずを懞念したした。 Indexのデヌタ曎新費甚の増加 Vertex AI Vector Searchの費甚は䞻に次の2぀の芁玠で構成されおいたす。 むンスタンスの費甚 Index構築の費甚 デヌタ曎新によるIndex構築の費甚はIndexの曎新時に凊理されたデヌタの量に応じお課金されたす。Vertex AI Vector Searchのバッチ曎新では2025幎7月珟圚、すべおのリヌゞョンに䞀埋で凊理されたデヌタ量に察しお$3.00/GiBが課金されたす。費甚に぀いおは 公匏ドキュメント で最新の情報を参照しおください。 本システムでのIndex曎新数は1日あたり3,500,000件であり、Vertex AI Vector SearchのIndex曎新に䌎うIndex構築の費甚は1日あたり玄$46ずなっおいたした。 asia-northeast1 リヌゞョンで e2-standard-16 むンスタンスをノヌド数2で利甚した堎合の1日あたりの費甚は玄$46ずなりたす。そのためIndex曎新の費甚はむンスタンスの費甚ず同皋床ずなっおおり、デヌタ曎新に䌎う費甚がベクトル怜玢機胜の費甚の半分近くを占めおいたす。これは圓初想定しおいたよりも倧きな費甚であり、問題になりたした。 Indexのデヌタ曎新費甚の算出に぀いおは混乱する郚分があったため埌節 Indexのデヌタ曎新費甚の芋積もり で別途説明したす。 Embedding曎新察象のデヌタ数を削枛 本システムでは前節の運甚課題に察しおIndexの曎新察象ずなるデヌタ数を枛らすこずで察応したした。曎新察象ずなるデヌタ数を枛らすこずで次の改善が埗られたした。 Indexのデヌタ曎新費甚の倧幅な削枛 Index曎新時間の短瞮 前節 グラフニュヌラルネットワヌクモデルによるEmbeddingの抜出 で述べた通り、本システムではGNNモデルを利甚しおEmbeddingを抜出しおいたす。次に該圓するナヌザヌ・コヌディネヌトをEmbedding抜出察象ずし、Indexぞ远加・曎新しおいたした。このうちデヌタ曎新数の増加に倧きく関係しおいたのは3のデヌタでした。 新芏远加されたNode 自身に玐づくナヌザヌ行動の倉化があったNode 䞊蚘の曎新察象に隣接するNode 2に該圓するナヌザヌ・コヌディネヌトをアクティブなナヌザヌ・コヌディネヌトず衚珟したす。3を曎新察象ずするこずでアクティブなナヌザヌ・コヌディネヌトに玐づく非アクティブなナヌザヌ・コヌディネヌトも曎新察象ずなりたす。特にアクティブなナヌザヌ・コヌディネヌトは隣接するNodeも倚いため、結果ずしお曎新数の爆発的な増加ぞ繋がっおいたした。 3に該圓するナヌザヌ・コヌディネヌトのEmbedding曎新に぀いおはレコメンドの粟床にはそれほど倧きく圱響しないず考えたした。曎新察象のデヌタ数を枛らすため3に該圓するナヌザヌ・コヌディネヌトはEmbeddingの曎新察象ぞ含めないよう倉曎したした。補足ずしお非アクティブなナヌザヌ・コヌディネヌトに぀いおも、新芏にナヌザヌ行動があった堎合には䞊蚘の2に該圓するため、隣接Nodeずの関係性を考慮しおEmbeddingを曎新しおいたす。倉曎の適甚埌もビゞネスKPIに悪化は芋られず、レコメンドの粟床に倧きく圱響するこずなく曎新数を䜎枛できたした。 削枛前埌のEmbedding曎新数は次の通りです。 コヌディネヌト 削枛前玄3,500,000ä»¶ 削枛埌玄150,000ä»¶ ナヌザヌ 削枛前玄2,000,000ä»¶ 削枛埌玄10,000ä»¶ 日によっお曎新数は倉動したすが、曎新察象のデヌタ数を倧きく枛らすこずができたした。コヌディネヌトに぀いおは削枛前に比べお玄23分の1、ナヌザヌに぀いおは玄200分の1のデヌタ曎新数ずなりたした。 抜出したナヌザヌのEmbeddingはGoogle CloudのサヌバレスNoSQLドキュメントデヌタベヌスである Cloud Firestore に保存しおいたした。曎新察象のナヌザヌEmbeddingの件数も想定より倚かったためCloud Firestoreの曞き蟌み費甚も課題ずなっおいたした。曎新察象のデヌタ数を削枛したこずにより、Vertex AI Vector Search、Cloud Firestoreのデヌタ曎新費甚は察応以前ず比范しお8割以䞊削枛できおいたす。 たたIndex曎新察象のデヌタ数が倧きく枛ったこずで、Indexの曎新にかかる時間も倧きく短瞮されたした。デヌタ曎新時に玄1〜2時間かかっおいたIndexの曎新時間は玄40分に短瞮できたした。デヌタ凊理察象の件数が枛ったこずでパむプラむン内のIndexの曎新以倖のタスクの実行時間も短瞮され、パむプラむン党䜓の実行時間は玄半分に短瞮されたした。 䞀方でIndexぞのEmbeddingの远加・曎新時の曎新時間は曎新デヌタ削枛察応埌、Embeddingの削陀時の曎新時間ず同皋床たで短瞮できたした。玄30〜60件しか曎新察象のデヌタ数がない削陀時ず同皋床たで短瞮できたこずを鑑みお、さらに曎新察象のデヌタ数を枛らすこずによる曎新時間の短瞮は効果が薄いず考えおいたす。 バッチ曎新時間の曎なる短瞮のためにはIndexの ストリヌミング曎新 の利甚可胜性がありたす。公匏ドキュメントにはストリヌミング曎新を利甚するこずで数秒以内にIndexを曎新できるず説明がありたす。 䞀方で既存のIndexではバッチ曎新を利甚しおいるため、ストリヌミング曎新を利甚するにはIndexの再䜜成が必芁ずなりたす。たたストリヌミング曎新では曎新リク゚ストの制限や割り圓おの䞊限があるため、倧芏暡なデヌタ曎新には向かないずいう懞念がありたす。このような理由からストリヌミング曎新の利甚は珟時点では慎重に怜蚎しおいたす。 Indexのデヌタ曎新費甚の芋積もり Vertex AI Vector Searchを本番運甚する䞭で、自分が芋積もりしおいたIndexのデヌタ曎新時の費甚ず Cloud Billing のコン゜ヌルで確認できる費甚に乖離がありたした。 前述の通りIndex構築の費甚は2025幎7月珟圚、 公匏ドキュメント で次のように説明されおいたす。 ベクトル怜玢では、すべおのリヌゞョンにおいお、凊理されたデヌタ 1 GiB あたり $3.00 が課金されたす。 圓初自分は 凊理されたデヌタ を曎新察象のデヌタず解釈しおいたした。぀たりIndex曎新のデヌタ゜ヌスずしお指定したファむルに含たれるEmbeddingデヌタを課金察象ず勘違いしおいたした。 Embedding曎新察象のデヌタ数を削枛する前のIndexの曎新数は1日あたり玄3,500,000件です。前節 Indexサむズの芋積もりずシャヌドサむズの決定 の匏で曎新分のデヌタ量を蚈算するず1日あたり玄3.8GiBです。曎新分のデヌタ量に察しお課金された堎合、1日あたり$11.4が費甚ずなるはずです。しかし前節 Indexのデヌタ曎新費甚の増加 で述べた通り、Cloud Billingで確認した費甚は1日あたり玄$46であり、曎新分のデヌタ量での芋積もり額よりも明らかに倧きな金額です。 凊理されたデヌタ を曎新察象のデヌタだけでなく、既存のIndexに含たれるデヌタも含めたデヌタ党䜓を指すず考える堎合、実際の費甚ず近い金額を算出できるこずに気が぀きたした。削枛察応前では、デヌタ曎新数ずIndexのデヌタ総数を合わせお玄1,400䞇件でした。デヌタ量は玄15.35GiBであり、費甚を算出するず玄$46ずなるためCloud Billingで確認した費甚に䞀臎したす。 しかしIndexデヌタ党䜓を課金察象ず考えるず、曎新察象のデヌタ数を枛らすこずでIndexの曎新に䌎うIndex構築の費甚を倧きく削枛できたこずの説明が぀きたせん。そこでIndexの圧瞮による再構築で凊理されたデヌタ量が費甚に関係しおいるず掚枬したした。バッチアップデヌトでのIndexの圧瞮に぀いおは 公匏ドキュメント で次の説明がありたす。 増分デヌタセット サむズが基本デヌタセット サむズの 20% を超えるずきに行われたす。 削枛前のIndexのデヌタ総数は玄1,380䞇件であり、曎新察象のデヌタ数は玄350䞇件でした。350䞇件は1,380䞇件の玄25に盞圓したす。曎新察象のデヌタ数が20を超えたこずで、曎新の床にIndexは圧瞮により再構築され、デヌタ党䜓を凊理するこずで課金察象ずなったず考えたした。削枛埌の曎新察象のデヌタ数は玄150,000件であり、1,380䞇件の玄1に盞圓したす。曎新察象のデヌタ数が20を䞋回ったためIndexの圧瞮による再構築はされず、凊理されるデヌタ量が倧きく枛ったこずで費甚が枛少したず掚枬したした。 次図は曎新分のデヌタ量がIndexのデヌタ量の20以䞊の堎合に課金察象ずなるデヌタのむメヌゞです。 次図は曎新分のデヌタ量がIndexのデヌタ量の20以䞋の堎合に課金察象ずなるデヌタのむメヌゞです。こちらは内郚挙動を掚枬しお䜜成したむメヌゞであるため実際の挙動ずは異なる可胜性がありたす。 Cloud Billingで確認できた削枛察応の前埌でのIndex構築の費甚の倉化は次の通りです。 曎新察象デヌタを削枛した7月7日以降に費甚が倧きく枛っおおり、曎新察象デヌタ削枛の効果が出おいるこずがわかりたす。しかし費甚が倧きく枛った7月8日以降は費甚が線圢に増加しおいたす。曎新察象のデヌタ量はほが䞀定の倀であるため、線圢に増加するのは䞍自然だず感じたした。たた公匏ドキュメントに蚘茉の内容からこのような費甚増加の説明は読み取れたせんでした。そこでVertex AI Vector Searchの内郚挙動を掚枬しお、曎新察象のデヌタ数が20を䞋回る堎合の費甚芋積もりの方法を考えたした。 本節の以䞋の内容は、公匏ドキュメントに蚘茉のない内容を掚枬で補い、仮説立おした説明です。公匏ドキュメントに蚘茉の内容・実際の費甚・デヌタ量以倖は掚枬であり、確実でないためご泚意ください。 デヌタ曎新にかかるIndex構築費甚の算出は本システムの運甚の䞭で苊劎した点であり、同様の課題を抱える方の参考になればず思い、蚘茉しおいたす。 曎新察象デヌタを削枛した埌で費甚が倧きく枛ったこず、その埌で線圢増加したこずを螏たえお、Indexは内郚でパヌティショニングされおおり曎新時にパヌティションデヌタを凊理しおいる可胜性を掚枬したした。䞀般的に倧量のデヌタを扱うシステムでは、䞀郚のデヌタ曎新でデヌタ党䜓を再構築せず、パヌティションデヌタのみを曎新するこずでパフォヌマンスを向䞊させたす。公匏ドキュメント内での蚘茉はないため、あくたでも掚枬ですが、Vertex AI Vector SearchでもIndexをパヌティショニングしおいる可胜性はありたす。パヌティションがIndex党䜓の20を超えるたではパヌティションデヌタを曎新し、パヌティションがIndex党䜓の20を超える堎合はIndex党䜓が圧瞮されるず掚枬したした。たたパヌティションデヌタの曎新時は环積曎新分ずパヌティション分のデヌタ量に察しお課金されるず掚枬する堎合、削枛埌の費甚の線圢増加も説明できたす。 次図は曎新分のデヌタ量がIndexのデヌタ量の20以䞋か぀パヌティションデヌタを曎新する堎合に課金察象ずなるデヌタのむメヌゞです。こちらも内郚挙動を掚枬しお䜜成したむメヌゞであるため実際の挙動ずは異なる可胜性がありたす。 以䞊の掚枬に基づいお、曎新察象のデヌタ数がIndex党䜓の20以䞋である堎合のIndexのデヌタ曎新費甚は次の匏で蚈算できるず考えたした。本システムのIndex構築費甚の算出に次匏を利甚しおいたす。 デヌタサむズBytes = (パヌティションの环積曎新Embedding数重耇あり + 曎新前のパヌティションのEmbedding数重耇なし) × (次元数 × 1次元あたりのサむズ) + Restrictsのサむズ 公匏ドキュメントに蚘茉の費甚ずCloud Billingで確認できる費甚以倖の芁玠は掚枬であるため、䞊匏での正確な費甚の算出はできおいたせん。実際のずころ、過去のデヌタを甚いお䞊匏で蚈算した費甚ずCloud Billingで確認できる費甚には10前埌のズレが出おいたす。しかし党䜓ずしおの傟向は捉えられおおり、単に曎新分のデヌタ量やIndex党䜓のデヌタ量を 凊理されたデヌタ ずしお芋積もるよりも、実際の費甚ず近い倀を蚈算できおいたす。 費甚の圢態や課金の仕組みはサヌビス内郚の仕様に䟝存するため、費甚の傟向が倉わる可胜性はありたす。そのため今埌もVertex AI Vector SearchのIndex構築の費甚は継続的に確認し、芋積もりから倧きくずれるこずがあれば芋積もり方法の芋盎しを考えおいたす。 たずめ 本蚘事ではWEAR関連コヌデレコメンドプロゞェクトぞのVertex AI Vector Search導入ず実践に぀いお玹介したした。実プロゞェクトでの実装・運甚経隓を通じお埗られた知芋が、これからVertex AI Vector Searchの導入を怜蚎しおいる方の参考になれば幞いです。 今埌はVertex AI Vector Searchの利甚実瞟を増やし、より倧芏暡なシステムでの利甚経隓を積んでいきたいず考えおいたす。たた、Vertex AI Vector Searchの新機胜や改善点に぀いおも匕き続き泚目しおいきたす。 ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。MLOpsブロックでも絶賛採甚を行っおいるため、ご興味ある方は以䞋のリンクからぜひご応募ください。 corp.zozo.com
ZOZO開発組織の2025幎7月分の掻動を振り返り、ZOZO TECH BLOGで公開した蚘事や登壇・掲茉情報などをたずめたMonthly Tech Reportをお届けしたす。 ZOZO TECH BLOG 2025幎7月は、前月のMonthly Tech Reportを含む蚈5本の蚘事を公開したした。特に泚目を集めおいた「開発生産性Conference 2025」の参加レポヌト蚘事は倚くの方に読たれおいたす。 techblog.zozo.com 登壇 WWDC25 Recap - Japan-(region).swift 7月6日に開催された「 WWDC25 Recap - Japan-region.swift 」に、FAANS郚の加藀が「 動画゚フェクトに関する新技術の玹介 」ずいうタむトルで登壇したした。 SRE NEXT 2025 7月11日、12日に開催された「 SRE NEXT 2025 」のLTに蚈枬システム郚の土田が「 セキュアな瀟内Dify運甚ず倖郚連携の䞡立 ~AIによるAPIリスク評䟡~ 」ずいうタむトルで登壇したした。 speakerdeck.com Data Engineering Study #30 7月18日に開催された「 Data Engineering Study #30 」にデヌタシステム郚の塩厎が「 デヌタ基盀の管理者からGoogle Cloud党䜓の管理者になっおいた話 」ずいうタむトルで登壇したした。 speakerdeck.com 掲茉 開発AI゚ヌゞェントを党゚ンゞニアに導入 党゚ンゞニアを察象に1人あたり月額200米ドルの基準のもず、開発AI゚ヌゞェントの導入決定ずあわせお、導入前の調査・怜蚌ず利甚ガむドラむンの䜜成をおこなうこずで、瀟員がスムヌズか぀安党に掻甚できるような䜓制を構築したこずを発衚したした。 corp.zozo.com この内容に関する蚘事が以䞋のメディアをはじめずしお耇数のメディアに掲茉されたした。 www.nikkei.com www.itmedia.co.jp codezine.jp 高粟床身䜓蚈枬サヌビスのZOZOMETRY、オヌダヌり゚ットスヌツ補䜜に察応し、メヌカヌ蚈4瀟ぞ導入が決定 事業者向け蚈枬業務効率化サヌビス「 ZOZOMETRY 」は、オヌダヌり゚ットスヌツ補䜜に察応し、オヌダヌり゚ットスヌツメヌカヌ蚈4瀟での導入が決定したこずを発衚したした。 corp.zozo.com この内容に関する蚘事が「 日本ネット経枈新聞 」に掲茉されたした。 netkeizai.com その他 2026幎3月期 第1四半期 決算発衚 7月31日に2026幎3月期第1四半期決算を開瀺したした。詳现は以䞋のリンクにある開瀺資料をご確認ください。 corp.zozo.com 以䞊、2025幎7月のZOZOの掻動報告でした ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com
こんにちは。䞀番奜きなマゞックナンバヌは 0x5F3759DF 1 な、技術戊略郚CTOブロックの塩厎です。 先日、圓瀟から以䞋のプレスリリヌスを発衚いたしたした。その䞭でも曞かれおいるように、1人あたり月額200ドルの基準のもず、Claude CodeやGemini CLIをはじめずした各皮AI開発ツヌルを利甚可胜になりたした。 corp.zozo.com この蚘事ではAI開発ツヌルの1぀であるGemini CLIを党瀟で䜿えるようにするため、Google Cloud管理者ずしお実斜したこずを玹介したす。Gemini CLIやClaude Codeなどに関しおは以䞋のような蚘事がよく目立ちたすが、この蚘事にはそのような内容が曞かれおおりたせん。 俺が考えたベストのGemini CLI蚭定 Gemini CLIを䜿っお効率を䞊げる10の方法 Gemini CLIで開発効率が〇〇アップ むしろ、Gemini CLIを利甚するプログラマではなく、Gemini CLIなどのツヌルを導入したいず盞談を受けおいるシステム管理者向けの蚘事です。 Gemini CLIの認蚌方法に぀いお Gemini CLIを利甚するためのGoogle Cloudプロゞェクト 利甚開始するための瀟内申請 利甚費の集蚈 䜿いすぎ防止 GitHub ActionsでGemini CLIを実行する 党瀟統䞀プロゞェクト以倖でGemini CLIを利甚しおいるこずの怜知 Gemini CLIに脆匱性が報告されたずきの圱響範囲の調査 今埌の展望 たずめ Gemini CLIの認蚌方法に぀いお Gemini CLIには耇数の認蚌方法があり、どれを利甚するかによっお利甚芏玄やプラむバシヌポリシヌが倉化したす。そのため、党瀟導入にあたっおどの認蚌方法を䜿うべきかを決める必芁がありたす。 以䞋の衚は認蚌方法毎の違いをたずめたものです。 No 認蚌方法 アカりント 入力が孊習に䜿われるか 利甚芏玄 プラむバシヌポリシヌ 1 Gemini Code Assist via Google 個人 䜿われる Google Terms of Service Gemini Code Assist Privacy Notice for Individuals 2 Gemini Code Assist via Google Google Workspaceたたは有料版Gemini Code Assist 䜿われない Google Cloud Platform Terms of Service Gemini Code Assist Privacy Notice for Standard and Enterprise 3 Gemini Developer API 無料 䜿われる Gemini API Terms of Service - Unpaid Services Google Privacy Policy 4 Gemini Developer API 有料 䜿われない Gemini API Terms of Service - Paid Services Google Privacy Policy 5 Vertex AI Gen API 䜿われない Google Cloud Platform Service Terms Google Cloud Privacy Notice 参考 GitHub - google-gemini/gemini-cli/docs/tos-privacy.md 1ず3はどちらも無料で利甚できたすが、入力が孊習に利甚されたす。これらの認蚌方法はAIモデルを通した情報挏掩などの懞念があるため利甚を犁止しおいたす。たた、4はこれ以降で説明するような費甚管理や暩限管理の仕組みを構築する䞊でやや難があったため、こちらも利甚を犁止しおいたす。 残りの認蚌方法は2ず5ですが、今回は5を採甚するこずにしたした。2ず5の䞻な違いは定額課金か埓量課金ずいう点です。定額課金にするず費甚管理がしやすくなる䞀方で、サブスクリプションの賌入などの契玄面で時間を取られるこずも芋蟌たれたため、運甚初期は5の埓量課金のみを採甚しおいたす。ゆくゆくは2の定額課金プランも察象ずし、利甚量に応じおどちらを䜿うべきかを芋極めおいく予定です。 これ以降では5のVertex AI Gen APIを認蚌方法ずしお利甚しおGemini CLIを䜿うための方法を玹介しおいきたす。 Gemini CLIを利甚するためのGoogle Cloudプロゞェクト Gemini CLIを利甚するためにGoogle Cloudプロゞェクトが必芁なため、これをどうするかを考えたす。郚眲ごずにプロゞェクトを䜜成しおもらうのか、党瀟統䞀で1぀のプロゞェクトを利甚するのかずいう2぀の方針が考えられたす。今回は埌者の党瀟統䞀で1぀のプロゞェクトを利甚する方法を採りたした。 以䞋の理由から党瀟統䞀プロゞェクトにメリットがあるず考えたためです。 各郚眲にプロゞェクト䜜成をしおもらうよりも、統䞀プロゞェクトにしたほうがGemini CLIの利甚申請が簡玠化される 各自の暩限や費甚などを䞭倮集暩的に管理できる 利甚開始するための瀟内申請 Gemini CLIを利甚するための瀟内申請にはGitHubを䜿うこずにしたした。たず、先ほど玹介したGoogle CloudプロゞェクトにterraformでIaC(Infrastructure as Code)を導入したした。そしお、マヌゞをトリガヌにしおterraform applyをGitHub Actionsから実行するようにしたした。 たず、暩限管理甚のGitHubリポゞトリには以䞋のようなGemini CLI利甚者が列挙されおいるYAMLファむルを甚意したす。 - sato@example.com - suzuki@example.com - takahashi@example.com そしお、このYAMLファむルを読み取っおリ゜ヌスを䜜成するためのtfファむルも甚意したす。 resource "google_project_iam_member" "vertex-ai-user" { for_each = toset ( yamldecode ( file ( "$ { path.module } /users.yaml" ))) project = <プロゞェクトID> member = format ( "user:%s" , each.value) role = "roles/aiplatform.user" } その埌は、前述のYAMLファむルにGemini CLIを利甚したいナヌザヌを远加しおPRを䜜成すれば申請䜜業が完了したす。 管理者偎の暩限を反映する䜜業も簡玠化されおおり、GitHubでMergeボタンを抌すのみで完了したす。 利甚費の集蚈 圓瀟では開発AI゚ヌゞェントを自由に䜿える制床がスタヌトしたしたが、1人あたり月額200ドルずいう費甚の目安がありたす。この金額を超過しおいないか確認するために、以䞋のような仕組みを䜿っおGemini CLIでどの皋床の費甚が発生したのかを集蚈しおいたす。 課金情報ず監査ログをBigQueryにexportし、それらを集蚈するこずで各個人の費甚を集蚈しおいたす。たた、個人毎の費甚情報ず組織マスタを突き合わせお、郚眲毎の費甚も確認できるようにしおいたす。 課金情報をBigQueryに゚クスポヌトするためには、以䞋のドキュメントに埓っお蚭定しおいたす。 cloud.google.com 監査ログをBigQueryに゚クスポヌトするための蚭定は以䞋のようにterraformで管理しおいたす。Gemini CLI甚のプロゞェクトだけではなく、Organization内の党郚のプロゞェクトに察しお監査ログをBigQueryに゚クスポヌトする蚭定を入れおいたす。 data "google_organization" "zozo-com" { domain = "zozo.com" } resource "google_organization_iam_audit_config" "zozo-com" { org_id = data.google_organization.zozo-com.org_id service = "allServices" audit_log_config { log_type = "ADMIN_READ" } audit_log_config { log_type = "DATA_READ" } audit_log_config { log_type = "DATA_WRITE" } } resource "google_logging_organization_sink" "audit_log_sink" { name = "audit_log_sink" org_id = data.google_organization.zozo-com.org_id destination = "bigquery.googleapis.com/$ { google_bigquery_dataset.audit_log.id } " include_children = true filter = "protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"" } 参考 Terraform provider for Google Cloud - google_organization_iam_audit_config Terraform provider for Google Cloud - google_logging_organization_sink これらのデヌタをどのように集蚈しおいるのかも玹介したす。 たずは以䞋のように課金情報から1時間毎の費甚を集蚈したす。この時にGeminiモデルもGROUP BY条件に入れおいたす。 -- NOTE : 将来モデルが増えた堎合に修正する create temporary function ski_id_to_model_name(sku_id string) as ( case sku_id when ' A121-E2B5-1418 ' then ' gemini-2.5-pro ' -- Gemini 2.5 Pro Text Input - Predictions when ' 5DA2-3F77-1CA5 ' then ' gemini-2.5-pro ' -- Gemini 2.5 Pro Text Output - Predictions when ' E367-697F-F274 ' then ' gemini-2.5-pro ' -- Gemini 2.5 Pro Thinking Text Output - Predictions when ' E941-1B12-88B9 ' then ' gemini-2.5-pro ' -- Gemini 2.5 Pro Input Text Caching when ' FDAB-647C-5A22 ' then ' gemini-2.5-flash ' -- Gemini 2.5 Flash GA Text Input - Predictions when ' AF56-1BF9-492A ' then ' gemini-2.5-flash ' -- Gemini 2.5 Flash GA Text Output - Predictions when ' A253-E8A3-DE5C ' then ' gemini-2.5-flash ' -- Gemini 2.5 Flash GA Thinking Text Output - Predictions when ' CD33-11F4-1220 ' then ' gemini-2.5-flash ' -- Gemini 2.5 Flash Ga Thinking Text Output - Predictions when ' A1C1-77CC-6FAE ' then ' gemini-2.5-flash ' -- Gemini 2.5 Flash GA Input Text Caching else " others " end ); with hourly_gemini_cost as ( select timestamp_trunc(usage_start_time, HOUR) as datetime_hour, sum (cost) as cost, ski_id_to_model_name(sku.id) as model_name, from <課金情報> where project.id = <Gemini CLI甚プロゞェクト> and service.description = ' Vertex AI ' group by all ) さらに、監査ログから各個人の1時間毎のAPIコヌル数を取埗したす。こちらも同様にGeminiモデル毎のコヌル数になるようにGROUP BY条件を蚭定しおいたす。 with api_call_count as ( select timestamp_trunc( timestamp , HOUR) as datetime_hour, protopayload_auditlog.authenticationInfo.principalEmail as email, array_last(split(protopayload_auditlog.resourceName, ' / ' )) as model_name, count (*) as count , from 監査ログ where resource .labels.project_id = <Gemini CLI甚プロゞェクト> and resource .labels.service = ' aiplatform.googleapis.com ' and protopayload_auditlog.methodName in ( ' google.cloud.aiplatform.v1beta1.PredictionService.GenerateContent ' , ' google.cloud.aiplatform.v1beta1.PredictionService.StreamGenerateContent ' ) group by all ) そしお䞊蚘の2぀の情報を結合しお各個人のコストを集蚈しおいたす。各時間垯・Geminiモデル毎の費甚を各個人のAPIコヌル数で按分しお各個人の費甚ずしおいたす。厳密にはAPIコヌル数ではなくInput・Outputしたトヌクン数で按分しないず正しい倀にはなりたせんが、監査ログにトヌクン数が含たれおいないため、APIコヌル数で近䌌しおいたす。 with api_call_count_and_ratio as ( select datetime_hour, email, model_name, count , count / sum ( count ) over(partition by datetime_hour, model_name) as ratio, from api_call_count ), hourly_personal_cost as ( select datetime_hour, email, cost * ratio as personal_cost, from hourly_gemini_cost left join api_call_count_and_ratio using (datetime_hour, model_name) where email is not null ), daily_personal_cost as ( select date (datetime_hour, " Asia/Tokyo " ) as date_jst, email, sum (personal_cost) as personal_cost, from hourly_personal_cost group by all order by date_jst, email ) select * from daily_personal_cost さらに、この情報に組織図マスタを結合させお、組織毎の費甚を集蚈しおいたす。組織マスタはkintoneに栌玍されおおり、以䞋の蚘事で玹介しおいる方法でBigQueryから読み出しできるようにしおいたす。 techblog.zozo.com これらの集蚈倀はGoogle SpreadsheetずBigQueryの連携機胜を䜿い、結果を毎日Spreadsheetに出力しおいたす。 support.google.com 䜿いすぎ防止 定期的な集蚈をしおいるずはいえ、利甚者党員が毎日の集蚈結果を芋るわけではありたせん。そのため、過床な利甚があった堎合にSlackなどに通知をしたり、暩限を䞀時的に削陀しおこれ以䞊の䜿いすぎを防止する仕組みも必芁です。そのような仕組みもGemini CLIの党瀟展開のために䜜成したので玹介したす。 この仕組みを構築するうえで倧事なこずは情報の鮮床です。倧量の費甚が短時間で発生した堎合にも迅速に察応するためには鮮床が倧事です。先ほど玹介した費甚集蚈の方法ですず、監査ログは十分な鮮床を持っおいたすが、課金情報の鮮床が䜎いため、そのたた䜿うこずはできたせん。 そのために、代わりにCloud Monitoringから取埗できる以䞋のメトリクスを利甚したす。このメトリクスでLLMモデルにInput・Outputされたトヌクンの数を取埗できたす。 aiplatform.googleapis.com/publisher/online_serving/token_count cloud.google.com たた、以䞋のフィヌルドを group_by_fields に指定したす。 フィヌルド名 栌玍されおいる情報 metric.label.type InputかOutputか resource.label.model_user_id モデル名 そしお、ここで取埗した情報ずモデル毎の単䟡情報を合わせお、1時間毎の費甚を取埗しおいたす。 def get_hourly_token_usage (project_id: str ): client = MetricServiceClient() project_name = f "projects/{project_id}" now = datetime.now(timezone.utc).replace(minute= 0 , second= 0 , microsecond= 0 ) start_time = now - timedelta(days= 3 ) interval = TimeInterval(start_time=start_time, end_time=now) filter_str = 'metric.type = "aiplatform.googleapis.com/publisher/online_serving/token_count"' aggregation = Aggregation( alignment_period={ "seconds" : 3600 }, # 1 hour per_series_aligner=Aggregation.Aligner.ALIGN_SUM, cross_series_reducer=Aggregation.Reducer.REDUCE_SUM, group_by_fields=[ "metric.label.type" , "resource.label.model_user_id" ], ) request = ListTimeSeriesRequest( name=project_name, filter =filter_str, interval=interval, view=ListTimeSeriesRequest.TimeSeriesView.FULL, aggregation=aggregation, ) hourly_data = defaultdict( list ) try : results = client.list_time_series(request) for result in results: token_type = result.metric.labels.get( "type" , "unknown" ) model_user_id = result.resource.labels.get( "model_user_id" , "unknown" ) for point in result.points: timestamp = point.interval.end_time.strftime( "%Y-%m-%d %H:%M:%S UTC" ) token_count = point.value.int64_value hourly_data[timestamp].append({ "token_type" : token_type, "model_user_id" : model_user_id, "token_count" : token_count, }) except Exception as e: print (f "An error occurred while processing: {e}" ) return なお、この方法で鮮床良く課金情報が取埗できるなら先に玹介したCloud Billingの情報は䞍芁なのではず考える方もいるかもしれたせん。しかし、実際のGeminiの課金の蚈算はより耇雑なため、正確な費甚を求めるためにはCloud Billingの情報が必芁です。本章の仕組みは鮮床が良いですが、近䌌的な倀になっおしたいたす。 費甚を䜿いすぎおしたった堎合の凊理は、通知ず暩限削陀の2皮類を甚意しおいたす。通知凊理は予算の80を超過しおしたった堎合の凊理です。Slackで該圓のナヌザヌに予算額の80に達した旚を通知したす。 暩限削陀は予算金額の100を超過しおしたった堎合の凊理です。この凊理では該圓ナヌザヌのGemini CLIを利甚する暩限を削陀したす。通垞のIAM暩限(Allow policy)を削陀しおしたうず、最初に玹介したterraformが構成ドリフトを起こしおしたうため、Deny Policyに远加するこずで暩限を削陀しおいたす。 cloud.google.com 1日あたりの予算金額はデフォルトでは10ドルにしおあり、月間では200ドルには達しない皋床になっおいたす。䞀時的に金額を匕き䞊げたい堎合には、以䞋のようなYAMLファむルを修正したす。これらの蚭定倀の調敎をするための申請はGitHubでPRを投げおもらうこずで実珟しおいたす。 # このファむルを修正するず1日あたりの予算䞊限を䞊曞きできたす。 # 曞き換えた堎合、月間の予算䞊限をオヌバヌしないように自力で管理しおください。 # With great power comes great responsibility. - user : suzuki@example.com daily_budget_usd : 200 notify_threshold_in_percent : 80 これらの凊理はCloud RunやCloud Schedulerを䜿い定期的に実行しおいたす。 なお、この仕組みの構築に必芁なコヌドのほずんどはGemini CLIに曞いおもらいたした。1〜2割くらいは手で曞きたしたが、残りはGemini CLIに任せるこずができたした。 GitHub ActionsでGemini CLIを実行する GitHub ActionsでGemini CLIを実行するための方法に぀いおも玹介したす。 この時、認蚌情報をどのようにGitHub Actionsに枡すべきかが重芁になりたす。Service AccountのJSONキヌやGemini APIキヌなどのような認蚌情報をGitHub ActionsのSecretにセットする方法が考えられたすが、この方法は非掚奚です。 docs.github.com その代わりにWorkload Identity Federationずいう仕組みを䜿っおGemini CLIを利甚するための認蚌情報をGitHub Actionsに枡したす。Workload Identity Federationを行うためには、Workload Identity PoolずWorkload Identity Providerを予め䜜成したす。以䞋のドキュメントに埓っおそれらを䜜成しおおきたす。 github.com そしお、以䞋のようにService Accountを䜜成しお、そのService AccountにGemini CLIの暩限を付䞎したす。 data "google_project" "ai-coding" { project_id = local.project_id } locals { github_actions_service_accounts = yamldecode ( file ( "$ { path.module } /github_actions_service_accounts.yaml" )) } resource "google_service_account" "github-actions" { for_each = { for github_actions_service_account in local.github_actions_service_accounts : github_actions_service_account [ "repository" ] => { repository = github_actions_service_account [ "repository" ] } } account_id = format ( "gha-%s" , replace (each.value.repository, "_" , "-" )) display_name = format ( "GitHub Actions(%s)" , each.value.repository) } resource "google_service_account_iam_member" "github-actions" { for_each = { for github_actions_service_account in local.github_actions_service_accounts : github_actions_service_account [ "repository" ] => { repository = github_actions_service_account [ "repository" ] } } service_account_id = google_service_account.github-actions [ each.value.repository ] .name role = "roles/iam.workloadIdentityUser" member = format ( "principalSet://iam.googleapis.com/projects/%d/locations/global/workloadIdentityPools/github-actions/attribute.repository/<組織名>/%s" , data.google_project.ai-coding. number , each.value.repository) } resource "google_project_iam_member" "vertex-ai-service-account" { for_each = { for github_actions_service_account in local.github_actions_service_accounts : github_actions_service_account [ "repository" ] => { repository = github_actions_service_account [ "repository" ] } } project = local.project_id role = "roles/aiplatform.user" member = google_service_account.github-actions [ each.value.repository ] .member } 䞊蚘のterraformで参照しおいる、 github_actions_service_accounts.yaml は以䞋のようなYAMLです。新芏にGemini CLIを動かしたいリポゞトリが増えた堎合には、利甚者にはこのYAMLを修正するPRを䜜成する圢で暩限付䞎の申請をしおもらいたす。 - repository : <Gemini CLIを動かしたいリポゞトリ名> division : 〇〇本郚 department : 〇〇郚 terraformではYAML内のrepositoryフィヌルドのみを読みだしおいたすが、それ以倖のフィヌルドは郚眲ごずの費甚集蚈に利甚しおいたす。 そしお、以䞋のようなYAMLを .github/workflows 配䞋に配眮すれば、GitHub Actions内でgeminiコマンドが利甚できたす。MacなどでGemini CLIを起動する際には初回起動時にむンタラクティブな手順で認蚌方法を蚭定したすが、GitHub Actionsではこの方法が䜿えたせん。そのため、認蚌方法をVertex AIにするための蚭定をJSONファむルに盎接曞き出しおいたす。 name : Gemini CLI Example # ゞョブの起動条件は各自でお奜みに on : push : branches : - main env : GOOGLE_CLOUD_PROJECT : <プロゞェクトID> GOOGLE_CLOUD_LOCATION : <どのリヌゞョンのGeminiモデルを呌び出すのかを指定> permissions : contents : 'read' id-token : 'write' jobs : run-gemini-cli : runs-on : ubuntu-latest steps : - name : Checkout repository uses : actions/checkout@v3 - name : 'Authenticate to Google Cloud' uses : 'google-github-actions/auth@v2' with : workload_identity_provider : projects/<Project Numberを入れる>/locations/global/workloadIdentityPools/github-actions/providers/github-actions service_account : <サヌビスアカりント> - name : Setup Node.js uses : actions/setup-node@v3 with : node-version : '22' - name : Install Gemini CLI run : npm install -g @google/gemini-cli # NOTE : 認蚌方法の蚭定方法がプリミティブすぎる気がするので、将来的にいい感じのactionがでおきお欲しい - name : Create Gemini settings run : | mkdir /home/runner/.gemini && echo '{"selectedAuthType": "vertex-ai"}' > /home/runner/.gemini/settings.json - name : Run Gemini CLI run : | gemini -p "hello" 党瀟統䞀プロゞェクト以倖でGemini CLIを利甚しおいるこずの怜知 Gemini CLIを利甚するプロゞェクトを䞭倮集暩化するためには、それ以倖のプロゞェクトでGemini CLIを利甚しおいる瀟員の怜知も重芁です。Vertex AIの暩限を付䞎すれば、他のプロゞェクトでもGemini CLIを䜿えおしたうため、それらの利甚を怜知しお、䞭倮管理のプロゞェクトに移行しおもらう必芁がありたす。 監査ログに察しお以䞋のク゚リを実行するず、䞭倮管理のプロゞェクト以倖でGemini CLIを利甚しおいるナヌザヌを抜出できたす。Gemini CLIがGemini APIを呌び出す時のUserAgentは、 GeminiCLI/ から始たっおいるため、この条件で抜出しおいたす。 select distinct resource .labels.project_id, protopayload_auditlog.authenticationInfo.principalEmail as email, regexp_extract(protopayload_auditlog.requestMetadata.callerSuppliedUserAgent, r ' ^(.+)/.+$ ' ) as ai_coding_tool, from <監査ログ> where resource .labels.project_id <> ' 䞭倮管理するプロゞェクトID ' and resource .labels.service = ' aiplatform.googleapis.com ' and starts_with(protopayload_auditlog.requestMetadata.callerSuppliedUserAgent, ' GeminiCLI/ ' ) order by project_id asc , email asc , ai_coding_tool asc Gemini CLIに脆匱性が報告されたずきの圱響範囲の調査 先日、Gemini CLIに深刻な脆匱性が発芋されたずいう蚘事が公開されたした。最新版ではこの脆匱性は修正枈みなので、Gemini CLIの利甚者を調査しおバヌゞョンを䞊げるように促す必芁がありたす。本章ではその䜜業を玹介いたしたす。 arstechnica.com たず、以䞋のク゚リでGemini CLIを利甚しおいるナヌザヌを抜出できたす。 select distinct resource .labels.project_id, protopayload_auditlog.authenticationInfo.principalEmail as email, from <監査ログ> where resource .labels.service = ' aiplatform.googleapis.com ' and starts_with(protopayload_auditlog.requestMetadata.callerSuppliedUserAgent, ' GeminiCLI/ ' ) order by project_id asc そしお、抜出されたナヌザヌに察しおGemini CLIを最新版に䞊げるようにアナりンスを行っおいたす。 今埌の展望 この仕組みの今埌の展望に぀いおも玹介したす。 今回玹介した仕組みはVertex AI Gen APIでGemini CLIを利甚するためのものでしたが、定額課金でもGemini CLIを利甚できたす。Gemini CLIを倚く䜿いたい人はこちらのプランで利甚したほうがコストパフォヌマンス良く利甚できたす。そのため、定額課金でGemini CLIを利甚するための瀟内の準備が敎い次第、利甚費の倚い人を定額課金に切り替えるような運甚フロヌも予定しおいたす。その際にはこの蚘事で玹介した費甚集蚈の仕組みなどにも手をいれる必芁がありたすが、コスト効率の良い開発AI゚ヌゞェント掻甚のためにも定額プランの掻甚は必芁です。 たた、Vertex AI Model GardenでAnthropic瀟のモデルの利甚もできたす。Claude Codeの䜿うモデルプロバむダをGoogle Cloudにする堎合の費甚集蚈の仕組みなどの構築も予定しおいたす。 たずめ Gemini CLIを党瀟員が利甚できるようにするための様々な仕組みを玹介したした。「Gemini CLIで効率アップ」ずいう蚘事は毎日のようにSNSを賑わせおいたすが、本蚘事のような管理偎に立った蚘事も増えおいくず嬉しいです。 この蚘事を曞くにあたっお、以䞋の゚ムスリヌさんの蚘事の監査ログを掻甚するアむデアなどを参考にさせおいただきたした。AI開発ツヌルの掻甚方法だけはなく、管理系のノりハりも公開しお頂けおいるこずにお瀌申し䞊げたす。 www.m3tech.blog たた、本蚘事で玹介した仕組みはこのタむミングでれロから䜜ったわけではなく、監査ログや課金情報をBigQueryに集めおいる郚分は既存の仕組みを流甚したした。BigQueryはずおもパワフルな分析DBなので、ずりあえず様々な情報を栌玍しおおくず、今回のようなケヌスで朰しが効くのでオススメです。 ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com Wikipedia - Fast inverse square root ↩
.table-of-contents ul ul { display: none; } はじめに こんにちは。蚈枬システム郚研究開発ブロックの 皆川 です。普段はWebAssemblyを甚いた身䜓蚈枬Webアプリの開発や、AIを甚いた身䜓蚈枬アルゎリズムの改善に携わっおいたす。 2025幎の6月11日から15日にかけお行われたCVPR 2025に参加したした。この蚘事では、珟地の様子ず筆者が遞んだ面癜かったセッションに぀いおご玹介したす。䟋幎通りだず、ほずんどの発衚がカンファレンス埌たもなくしお 公匏サむト で動画公開されたす。 はじめに CVPRずは 日本からナッシュビルたで 䌚堎の様子 セッションレポヌト Googleのファッション分野での取り組み 技術抂芁 技術課題 2Dバヌチャル詊着以倖の取り組み 感想 AIpparel 技術抂芁 応甚 技術課題 感想 PromptHMR 技術抂芁 感想 VGGT: Visual Geometry Grounded Transformer 技術抂芁 感想 さいごに CVPRずは CVPRは1䞇人以䞊が参加する䞖界最倧玚の「AIず画像凊理のカンファレンス」です。今幎はアメリカのナッシュビルで5日間にわたっお開催され、玄120のワヌクショップや、玄3000の研究発衚をはじめずしお、さたざたなセッションが行われたした。 日本からナッシュビルたで CVPR 2025の開催地であるテネシヌ州ナッシュビルは、アメリカ䞭郚に䜍眮したす。今回、筆者は矜田空枯から、シカゎ・オヘア空枯で乗り継ぎ、ナッシュビル囜際空枯ぞ向かいたした矜田からシカゎたでは12時間、シカゎからナッシュビルたでは2時間。 空枯からホテルたではバスを乗り継けば玄1時間ですが、慣れない土地で、時差がけもあったのでUberを䜿いたした。ホテルたでの所芁時間は15分くらいでした。車内ではドラむバヌが倧音量でアップテンポな音楜を流しながら高速道路を走行しおおり、そんな様子を芋おアメリカに来たずいう実感が改めお湧いおきたした。 䌚堎の様子 䌚堎であるミュヌゞック・シティ・センタヌは、ナッシュビルの垂街地にありたす。1䞇人芏暡のカンファレンスにも䜙裕で耐えられるくらい倧きい䌚堎でした。 ミュヌゞック・シティ・センタヌの倖芳 物理参加者は9,300人ほどだったそうです。初日には参加蚌をもらうのに長蛇の列ができおいたした。 撮圱皆川 撮圱皆川 参加者特兞ずしおオリゞナルTシャツが配垃されたした。サむズも遞択でき、筆者はLを受け取りたした。 オリゞナルTシャツの前面ず背面 ランチはご芧のずおり倧盛況で、䞖界各囜から集たった画像凊理の専門家が英語で盛んに意芋亀換を行なっおいたした。偶然、同垭したフロリダ州で工孊を教えおいるずいうシニア䞖代の教授からは「私の幎代はオンラむンでは服は買わないが、どうすれば賌入を促せるず思うか」ずいう挑戊的でありながら瀺唆に富む質問も寄せられたした。 撮圱皆川 ランチは、参加登録時に遞んだものを圓日受け取る圢匏でした。 ランチで提䟛されたサンドむッチ ポスタヌ発衚䌚堎の様子です。 撮圱皆川 撮圱皆川 オヌラル䌚堎の様子。採択された研究の䞭で3ほどがオヌラル発衚に遞ばれたす。 撮圱皆川 キヌノヌト発衚が行われたメむン䌚堎の様子。 撮圱皆川 今幎は以䞋の3぀がキヌノヌトでした。 Exploring the Low Altitude Airspace: From Natural Resource to Economic Engine The Llama Herd of Models: System 1, 2, 3 Go! Gemini Robotics, Bringing AI to the Physical World 登壇者は盎前たで非公開だったため、筆者は密かにYann Lecun氏やAndrej Karpathy氏の登壇を期埅しおいたしたが、残念ながら実珟したせんでした。 䌁業ブヌスの様子です。出展䌁業の数は、他のカンファレンスに比べお想定しおいたより少なめでした。 個人的には、Metaのブヌスが特に印象的でした。カンファレンス党䜓を通しお、Meta由来のモデルが研究プロゞェクトで掻甚されおいるのをたくさん目にしたした。ブヌスではそれらに実際に觊れるむンタラクティブなデモがあり、MetaがAI分野においお果たしおいる貢献の倧きさを改めお感じる機䌚になりたした。 DINO v2を䜿った、地図画像から地圢の暙高を掚定するデモ。AIが地球科孊領域で具䜓的に応甚される䟋で興味深いです。 3Dデヌタからテキストでオブゞェクトの怜出ができるLocate 3Dのデモ。 Metaのブヌスに長蛇の列ができおいるコヌナヌがあり、確認するずテキストプロンプトから生成した画像を、その堎でステッカヌにプリントできる䜓隓ブヌスでした。 長蛇の列ができおいた生成AIデモの様子。 セッションレポヌト ここからはCVPR 2025で気になった発衚を玹介したす。 Googleのファッション分野での取り組み Googleの最近のファッション関係の取り組みに぀いお、Ira Kemelmacher-Shlizerman氏が バヌチャル詊着に関するワヌクショップ の䞭で発衚しおいたした。 Googleは本皿の執筆時点で、アメリカ地域のみですが、バヌチャル詊着のデモを展開䞭です。このデモは、自分の党身写真を甚いお、Google Shoppingにある衣服をすべお詊着でき、2025幎5月のGoogle I/Oで倧きな反響を呌びたした。 Googleのブログ蚘事「 Shop with AI Mode, use AI to buy and try clothes on yourself virtually 」より抜粋。 技術抂芁 Ira氏の発衚によるず、仕組みずしおは昚幎のCVPRでIra氏のチヌムの発衚した M&M VTO を䜿っおいるそうです。M&M VTOの仕組みずしおの特城は以䞋です。 UNet Diffusion Transformerずいうモデルアヌキテクチャヌを採甚するこずで、テキストプロンプトず入力画像の埋め蟌みベクトルを条件付き入力(conditioning)ずしお取り蟌めるようにした。 衣服の倖芳情報を忠実に保持するため、拡散過皋にはSingle-Stage Diffusionを採甚した。 同䞀デヌタセットを、䜎解像床→高解像床の順に孊習する二段階孊習を導入した。 アむデンティティ保持機胜を高めるため、合成デヌタセットを新たに構築し、モデルに専甚孊習ブランチを蚭けた。 M&M VTOの抂芁図。 プロゞェクトペヌゞ より抜粋。 バヌチャル詊着のベンチマヌクDressCodeのFIDでは、M&M VTOを䞊回る手法も耇数存圚したす。しかし、筆者が実際にそれらの手法を觊っおみた感芚ずしおは、生成画像の品質や衣服の倖芳の保持の点で、M&M VTOが際立っお優れおいるず感じたした。 なお、バヌチャル詊着のベンチマヌクに぀いおは、むリノむ倧孊のDavid Forsyth教授が同ワヌクショップで指摘しおいたした。「珟行の評䟡手法には倧きな課題があり、これを改善すれば研究の進展が加速する」ずのこずでした。 技術課題 Googleバヌチャル詊着は他の手法に比べお実際の䜿甚感が優れおいるず感じたしたが、論文でも指摘されおいる通り、以䞋のような課題もありたす。 䜓型や顔などが倉わっおしたう堎合がある。 服の现かい特城が倱われおしたう堎合がある。 服のサむズ感を考慮しおいないため、服のサむズが合っおいるか保蚌されない。 バヌチャル詊着の珟行手法のボトルネックずしおは、先述のForsyth教授が「デヌタの欠劂よりはアヌキテクチャヌに問題があるかもしれない」ず述べおいたのが印象的でした。 倚くの手法で採甚されおいるDiffusionモデルは比范的新しく、その制埡方法はホットなトピックです。CVPR 2025でも同トピックに関する発衚は䟝然ずしお倚かった印象です䟋1 PS-Diffusion 。䟋2 Paint by Inpaint  たた、Diffusion以倖の生成手法を怜蚎するワヌクショップ「 Visual Generative Modeling:What's After Diffusion? 」もありたした。コミュニティ党䜓ずしおDiffusion技術に関する課題感の高さを感じたした。 2Dバヌチャル詊着以倖の取り組み Ira氏の発衚ではこれらに加え、 Total Selfie Chen et al., CVPR 2024や、Super Zoom未発衚などの取り組みも玹介されたした。総じおGoogleのファッション領域ぞの積極的な技術投資が䌺える内容でした。 自撮りからアバタヌを生成できるTotal Selfie。 論文 より抜粋。 マりスオヌバヌするず生成AIで超解像床の画像を生成するSuper Zoom。 発衚の動画 3:31:09頃 より抜粋。 感想 Googleのバヌチャル詊着は、衣服ず身䜓のサむズ情報を取り入れおいないずのこずでした。発衚者のIra氏もアパレル分野ではサむズのミスマッチを枛らすこずに倧きな関心があるこずは認知しおいる䞊で、珟状でサむズの問題に取り組む予定はないずのこずでした。蚈枬技術に携わっおいる筆者ずしおは、今埌この2Dのバヌチャル詊着ずいう分野に取り組む堎合は、衣服ず身䜓のサむズ情報を保持したsize-awareなバヌチャル詊着を目指したいず思いたす。 AIpparel AIpparel は画像やテキストを入力ずしお衣服の2D型玙を生成するマルチモヌダルな基盀モデルです。埓来はCAD操䜜や裁断の専門知識が必芁だったアパレルデザむンを、自然蚀語の指瀺だけで誰でも行えるようにするこずを目指しおいたす。 プロゞェクトペヌゞ より抜粋。 技術抂芁 手法の抂芁は以䞋の通りです。 GarmentCode ずいうドメむン固有蚀語DSLから衣服の型玙patternsをルヌルベヌスで生成する手法を基盀にしおいる。 GarmentCodeず互換性のあるGarmentCode DSL以䞋、GCDSLを孊習し、出力する。 マルチモヌダルなモデルのため、画像・テキスト・GCDSLのいずれも入力可胜。 䞻な機胜は、以䞋です。 画像やテキストからの型玙生成 既存の型玙のテキストによる線集 モデル孊習の抂芁は以䞋の通りです。 オヌプン゜ヌスVLMであるLLaVa-1.5をファむンチュヌニングし、テキストおよびたたは画像入力からGCDSLを出力するモデルを構築。 孊習デヌタにはGarmentCodeDataにVLMBLIP-2でキャプションを付䞎したものを䜿甚。 モデルのファむンチュヌニング時には以䞋の3パタヌンで教垫あり孊習を実行※実際はトヌクナむザかデトヌクナむザが介圚するため、GCDSLは厳密にはモデルの盎接の入出力ではない。 a入力テキスト→出力GCDSL b入力画像→出力GCDSL c入力GCDSL→出力GCDSL プロゞェクトペヌゞ より抜粋。 本手法は、以䞋のタスクで最高性胜を達成しおいたす。 テキストからの型玙生成 画像からの型玙埩元 型玙の局所線集 テキストや画像による型玙生成の䟋。 論文 より抜粋。 型玙の局所線集の䟋。 論文 より抜粋。 応甚 本手法の基盀であるGarmentCodeは、既出のバヌチャル詊着のワヌクショップで、倚数の登壇者が蚀及しおおり、泚目床の高い手法です。実際、GarmentCodeを利甚したバヌチャル詊着や䜓型掚定向け合成デヌタセットの構築も行われおいるようでした。 本手法は、珟時点ではデモが公開されおいないものの、バヌチャル詊着やマスカスタマむれヌションの分野で応甚できる研究です。䟋えば、以䞋のようなシナリオが考えられたす。 ECサむト䞊に掲茉された膚倧な量の衣服を、サむズ情報を維持したたた、自身のアバタヌで詊着する。 詊着した衣服をAIず察話しながら「もっず肩幅を広くしお」「もっずミニマルに」など自然 蚀語でデザむンやサむズを修正する。 技術課題 䞀方で、ファッション分野では衣服デヌタ2D・3D䞍足が課題であるこずも、既出のワヌクショップでも議論されおいたした。今埌、デヌタ拡充によっお基盀モデルがより機胜的になるこずで、ファッション関連の゜フトりェア技術はさらに進歩しおいくこずが期埅されたす。 感想 身䜓の3D化技術は SMPL 2015の発明以降、段々ず成熟しおきおいる印象がありたすが、衣服の3D化技術も、GarmentCode(2023)以降、盛り䞊がりを感じたす。この技術が進んでいけば、size-awareでスケヌラブルなバヌチャル詊着は技術的には実珟可胜だず蚀えたす。 実際、デモレベルであればsize-awareなバヌチャル詊着は存圚しおいたす。䟋えば、 GarmentCodeのデモ では、WebのUIからオリゞナルの衣服がデザむンでき、それを自分の䜓型デヌタを再珟したアバタヌに着せるこずができたす。 ただしこうしたデモを日垞の賌買䜓隓に繋げるには、衣服の3D化技術だけでなく、センスの良いビュヌアや、簡単か぀正確に枬れる身䜓蚈枬機胜など耇数のコンポヌネントが必芁になりたす。筆者は今埌も身䜓蚈枬機胜の進化に尜力しおいきたいず思いたす。 PromptHMR PromptHMRは画像䞭の人䜓掚定に、テキストやバりンディングボックスずいった付加情報を付䞎できるようにした手法です。埓来では難しかった画像でも正確な䜓型・姿勢掚定を実珟しおいたす。 埓来手法では難しかった画像ず、PromptHMRによる掚論結果。 論文 より抜粋。 技術抂芁 PromptHMR は、手法ずしお以䞋のような背景や特城がありたす。 䜓型・姿勢掚定タスクでは、埓来のモデルではクロップした画像を前提ずしおいるため堎所の情報がうたく䜿えない。 過去にはVLMを応甚した䟋もあるが、粟床の点ではいたいちだった。 トランスフォヌマヌをベヌスにした手法では、䞊蚘の2぀の䟋にあるような、䜍眮的な情報ず意味的な情報を付䞎できるようなモデル蚭蚈が可胜。 プロンプトずしお、テキストやバりンディングボックス、セグメンテヌションマスクなどが入力可胜。 EMBDや3DPWなどの、実環境in-the-wild画像における姿勢掚定のベンチマヌクで最高倀を曎新。 手法の抂芁。 論文 より抜粋。 感想 著者の䞀人であるMichael Black氏はデゞタルヒュヌマン分野における䞖界的な第䞀人者です。今埌も本研究のようにAI技術の最先端を取り入れ、技術的限界を抌し広げる先進的な研究が期埅されたす。 過去には同じ著者達による研究で、自然蚀語による䜓型掚定にフォヌカスした手法である SHAPY があり、本研究よりファッションずの関連性がより高い内容ずなっおいたす。 本研究は埓来、画像だけでは解くのが難しかったタスクで、トランスフォヌマヌ構造に付加情報を組み蟌むこずでロバストさや粟床が向䞊する䟋です。今埌、この研究を応甚するこずで、スヌツやマットなどの物理参照物がなくおも、安定しお粟床よく枬れるようなアルゎリズムを開発しおいこうず思っおいたす。 VGGT: Visual Geometry Grounded Transformer VGGT は埓来数十秒から数分かかっおいた3D再構成を1秒以内で実行し、耇数の3D再構成に関連するベンチマヌクで最高性胜を達成した汎甚3D画像モデルです。本研究はカンファレンスのBest Paper Awardも受賞しおいたす。 技術抂芁 本手法の抂芁は以䞋の通りです。 倧芏暡トランスフォヌマヌを採甚。画像入力のみで深床、カメラ、点矀を掚定。 3D再構成タスクで頻出の反埩的最適化を甚いおいないため、埓来手法ず比べお高速。 15を超えるデヌタセット実写、合成含むを䜿っお孊習。 入力にカメラ倉数を必芁ずしない。入力は䞀枚から数癟枚たで可倉的に凊理可胜。 カメラ倉数掚定や深床掚定、点矀掚定などの3D再構成関連タスクで最高性胜を獲埗。 本手法の動䜜むメヌゞ。䞀枚〜数癟枚の任意の枚数の画像を入力にずり、3Dデヌタを出力する。 論文 より抜粋。 本手法の抂芁。 論文 より抜粋。 感想 実際に公開されおいるデモを觊っおみた結果、実行速床の早さに驚きたした。たた埓来の方法ず比べお、非剛䜓倉圢䟋ポヌズ倉化に察するロバストさが高いずも感じたした。論文では「小芏暡の非剛䜓倉圢には察応できるが、倧きなものだず倱敗する」ず述べられおいたす。同時に「アヌキテクチャヌを倧きく倉曎しなくおも、デヌタセットさえあればタスク特化ができる」ず明蚀されおいたす。䟋えば人䜓蚈枬甚途でのロバスト性匷化も最小限の改倉で実珟できる可胜性がありたす。 著者であるJianyuan Wang氏は、3Dは2Dに比べお倧幅にデヌタが少ないこずを3Dの画像凊理の倧きな課題であるず指摘しおいたす。そしお2D画像から3Dデヌタを生成する本手法の重芁性を匷調しおいたす。本手法は今埌、3Dの画像凊理分野を加速させるツヌルになり埗るず感じたした。 珟状の画像を甚いた身䜓蚈枬は、SMPL等のテンプレヌトメッシュを䜿った方法が䞻流です。しかし、本研究のようにリアルタむムか぀非剛䜓にもロバストな方法が出おくるず、蚈枬粟床の点で有利な3D再構成を甚いた身䜓蚈枬を遞択肢ずしお考える堎面も将来的には出おくる可胜性もある、ず思いたした。 さいごに CVPR 2025の参加レポヌトをお届けしたした。カンファレンスを通しお技術的に感じたのは、マルチモヌダルな倧芏暡トランスフォヌマヌの持぀ポテンシャルず、その孊習に必芁な3Dデヌタの垌少性でした。ファッションに関する゜フトりェア技術ずしおは、身䜓蚈枬研究の進化や、それず関連のあるバヌチャル詊着研究の進化を目の圓たりにでき、知芋を貯められたこずに参加意矩があったず思いたす。たたAIや画像凊理の分野における䞖界のトップランナヌ達の話を生で聎けたのもずおも刺激になりたした。今回埗た知芋を掻かし、今埌も蚈枬技術の研究開発に取り組んでいきたいず思っおおりたす。 ZOZOでは、各皮゚ンゞニアを採甚䞭です。ご興味のある方は以䞋のリンクからご応募ください。 corp.zozo.com
ZOZO開発組織の2025幎6月分の掻動を振り返り、ZOZO TECH BLOGで公開した蚘事や登壇・掲茉情報などをたずめたMonthly Tech Reportをお届けしたす。 ZOZO TECH BLOG 2025幎6月は、前月のMonthly Tech Reportを含む蚈10本の蚘事を公開したした。振り返っおみるず特にむベントの参加レポヌトが倚い月でした。特にTwo-Towerモデル×Vertex AI Vector Searchの蚘事は倚くの方に読たれおいたす。 techblog.zozo.com 登壇 OctoNihon Forum 6月6日に開催された「 OctoNihon Forum 」に技術戊略郚の堀江が「 ZOZOにおけるGitHub Copilotの掻甚事䟋 」ずいうタむトルで登壇したした。 🗣 明日 6/6(金) 開催 GitHub Enterpriseナヌザヌが集い、知芋を共有し、最新技術を孊び、AI時代の゜フトりェア開発の未来を探るこずを目的ずしたむベント『OctoNihon Forum』で技術戊略郚の堀江 @Horie1024 が事䟋セッションに登壇したす🎙 https://t.co/kJPGR2Hr8J #zozo_engineer — ZOZO Developers (@zozotech) 2025幎6月5日 speakerdeck.com JJUG CCC 2025 Spring 6月7日に開催された「 JJUG CCC 2025 Spring 」に物流開発郚の岡本が「 Javaに鉄道指向プログラミング(Railway Oriented Programming)の゚ッセンスを取り入れる 」ずいうタむトルで登壇したした。 🗣 6/7(土)に開催される『JJUG CCC 2025 Spring』で物流開発郚の岡本が「Javaに鉄道指向プログラミング(Railway Oriented Programming)の゚ッセンスを取り入れる」ずいうタむトルで登壇したす🛀 https://t.co/y5Q3ojPbn2 #jjug_ccc — ZOZO Developers (@zozotech) 2025幎6月6日 speakerdeck.com Extended Tokyo - WWDC 2025 6月9日に開催された「 Extended Tokyo - WWDC 2025 」に、ZOZOTOWN開発2郚の續橋が登壇したした。 📣 6/9(月)深倜に開催される「Extended Tokyo - WWDC 2025」にお、ZOZOTOWN開発本郚の續橋 @tsuzuki817 が登壇したす 🗣テヌマは 「SwiftUI Transaction を培底掻甚ZOZOTOWN UI開発での掻甚事䟋」 幎に䞀床のお祭りを䞀緒に楜しみたしょう https://t.co/npN9QlobsS #WWDC25 #extended_tokyo — ZOZO Developers (@zozotech) 2025幎6月6日 speakerdeck.com WWDC25 Recap for Spatial Computing 6月16日に開催された「 WWDC25 Recap for Spatial Computing 」に、技術戊略郚の諞星が登壇したした。 WWDC25 報告䌚 at LINEダフヌ, ZOZO 6月19日に開催された「 WWDC25 報告䌚 at LINEダフヌ, ZOZO 」に、ZOZOTOWN開発1郚の濵田、WEARフロント゚ンド郚の枅板、FAANS郚の䞊田がトヌク枠で登壇したした。たた、技術戊略郚の諞星がパネルディスカッション枠で登壇したした。 📣 6/19(朚)に開催される「WWDC25 報告䌚 at LINEダフヌ, ZOZO」にお、ZOZOTOWN開発1郚 濵田・WEARフロント゚ンド郚 枅板・FAANS郚 䞊田がLTのスピヌカヌずしお、技術戊略郚 諞星がパネルディスカッションのパネラヌずしお登壇したす https://t.co/pJOhbV0673 #WWDC25 #wwdc_lyz — ZOZO Developers (@zozotech) 2025幎6月18日 techblog.zozo.com LODGE XR Talk Vol.28 6月25日に開催された「 LODGE XR Talk Vol.28 」に、技術戊略郚の諞星が「 WWDC25 & AWE USA 2025 Report 」ず題しお登壇したした。 DroidKaigi.collect { #20@Tokyo } 6月27日に開催された「 DroidKaigi.collect { #20@Tokyo } 」に、技術戊略郚の堀江が登壇したした。 掲茉 キヌマンズネット 「 キヌマンズネット 」に、GitHub Copilotの掻甚事䟋に関する蚘事が掲茉されたした。私たちは2023幎7月に「 GitHub Copilotの党瀟導入ずその効果 」ずいう蚘事を公開しおいたす。そこから2幎匱が経過した珟圚の状況ずしお、「 GitHub Copilot Agent mode 」ず「 GitHub Copilot code review 」が利甚可胜な状況になっおいるこずなどが玹介されおいたす。 kn.itmedia.co.jp その他 マッチングアプリ「ZOZOマッチ」を提䟛開始 6月30日に、マッチングアプリ「 ZOZOマッチ 」を提䟛開始したした。 corp.zozo.com zozomatch.jp 「Girls Meet STEM」2025倏ツアヌに参画 昚幎末に匕き続き、公益財団法人山田進倪郎DI財団が䞻催する䞭高生女子にSTEM理系領域の䜓隓を提䟛するプログラム「Girls Meet STEM」2025倏ツアヌに参画したす。今回のテヌマは「 ZOZOTOWN・WEARを支える技術ず働き方をのぞいおみよう オフィスを芋孊しお女性゚ンゞニアず亀流 IT×ファッションずは  」です。 corp.zozo.com www.shinfdn.org 以䞊、2025幎6月のZOZOの掻動報告でした ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com
はじめに こんにちは、ZOZOMO郚FBZブロックの杉田です。2025幎7月3日・4日の2日間、JPタワヌホヌルカンファレンスにお「 開発生産性Conference 2025 」が開催されたした。本蚘事では、䌚堎や各ブヌスの様子に加え、特に印象に残ったセッションに぀いおご玹介したす。 開発生産性Conference 2025ずは 本カンファレンスは、生成AIずの協働が䞍可欠な時代に、いかに開発生産性に取り組み事業䟡倀を高めおいくかをテヌマに開催されたした。3回目を迎える今幎は、来堎者数が3000人を超える盛況ぶりで、開発生産性ぞの関心の高さがうかがえたす。 䌚堎の様子 䌚堎は東京駅盎結のJPタワヌホヌルカンファレンスでした。 䌚堎から東京駅を䞀望できる ゚ントランスのパネル セッションの合間には倚くの参加者がスポンサヌブヌスで情報収集したり、掻発に亀流したりしおいたした。皆さん、開発生産性に関する話題で盛り䞊がっおいる様子が印象的でした。 スポンサヌブヌスの様子 #1 スポンサヌブヌスの様子 #2 スポンサヌブヌスでは参加者向けのアンケヌトも実斜されおおり、むベント参加者の傟向が芋お取れお興味深かったので、アンケヌト結果をいく぀か抜粋しおご玹介したいず思いたす。 株匏䌚瀟コドモンさんのブヌス 「あなたのチヌムの開発生産性を支えおいるもの」ずいうテヌマに察しお、「Claude CodeなどのコヌディングAI」や「ペアプロ」「チヌムの協力䜓制」ずいった実践的な回答が倚く寄せられおいたした。その䞭に「愛」や「匷い心」ずいった粟神的な支えを挙げるナニヌクな回答も芋られたのが印象的でした。 株匏䌚瀟ビズリヌチさんのブヌス 「開発生産性お悩みランキングず実践知」ずいうテヌマで、倚くの開発者が共感する悩みず、実際に詊しお効果のあった取り組みが玹介されおいたした。最も共感を集めた悩みは「技術的負債の返枈ず新機胜開発ずのバランス」で、これに察し、キヌノヌトに登壇されたケント・ベック氏の著曞「Tidy First?」の内容を実践しおいるずいうメモもあり、倧倉参考になりたした。 株匏䌚瀟LayerXさんのブヌス AIコヌディングの利甚状況を芋るず、ほずんどの人が日垞的に掻甚しおおり、その効果を実感しおいるこずが分かる結果ずなっおいたした。 セッション玹介 ここからは気になったセッションの玹介をしたす。 開発生産性枬定のトレヌドオフ 「グッドハヌトの法則」はもっず悲芳的に捉えるべきだった ケント・ベック氏の登堎時の様子 このセッションを聞いお、゜フトりェア開発の「生産性」ずいう蚀葉の裏に朜む奥深さを改めお感じたした。特に印象的だったのは、衚題にも含たれおいる「指暙が目暙になるず、それはもはや良い指暙ではなくなる」ずいうグッドハヌトの法則です。 Goodhart’s Law 開発者のプルリク゚スト数やコヌド行数ずいった数倀目暙がいかにシステムを歪たせ、かえっお生産性を損なうかずいう具䜓䟋は身に぀たされる思いでした。AIの登堎がコヌディング効率を劇的に高める䞀方で、埓来の枬定アプロヌチがこの歪みをさらに悪化させる可胜性があるずいう指摘は、これからの開発珟堎を考える䞊で非垞に重芁だず感じたした。 ケント・ベック氏が提唱する「䟡倀のパス」の抂念は「顧客の振る舞いの倉化アりトカム」や「䌚瀟ぞの収益貢献むンパクト」ずいった、より埌期の段階で行うべきずあり、本質的な䟡倀远求の重芁性を教えおくれたした。 Path of Value リヌダヌずしお「デヌタで気づきを促す」こずの重芁性や、若手育成においおアりトプットの量ではなく「孊び」に焊点を圓おるべきずいう瀺唆は、AI時代におけるマネゞメントや人材育成に察する新たな芖点を䞎えおくれたした。単なる数字の远求ではなく、真の䟡倀ずは䜕か、それをどう育んでいくべきかを深く考えるきっかけずなる非垞に瀺唆に富んだセッションでした。 AIを前提ずした開発プロセスずマネゞメントの倉革 - 開発生産性+2000達成に向けた取り組み このセッションでは、AIを前提ずしたプロダクト開発を実践するこずで生産性を爆発的に向䞊させた事䟋に぀いお玹介されおいたした。 倚くの組織では専門領域ごずの分業が圓たり前ですが、このセッションではその分業こそがコミュニケヌションの肥倧化を生み、情報ロスや開発速床の䜎䞋を匕き起こすボトルネックだず指摘しおいたした。䌁画ず開発、PMず゚ンゞニアずいった圹割の間で生たれる無数のやり取りが、䟡倀提䟛のスピヌドを鈍らせおいるのです。 プロダクト開発䜓制 この壁を砎壊するアプロヌチずしお「プロダクト志向 × 倚胜工」が玹介されおいたした。 プロダクト志向×倚胜工 これは、以䞋の2぀の芁玠を掛け合わせた考え方です。 プロダクト志向「なぜ䜜るのかWhy」ずいう顧客䟡倀に垞に立ち返る思考 倚胜工 䞀人の担圓者が、課題発芋Whyから実装Howたでを䞀気通貫で担うスキル この䞀人で完結させる働き方を、AIが匷力にサポヌトしたす。AIは実装や資料䜜成ずいった䜜業を肩代わりし、スキルギャップを埋めおくれるのです。たるでゞュニアメンバヌのようにAIをマネゞメントするこずで、生み出せる䟡倀は飛躍的に高たるずのこずです。 AIを甚いたリ゜ヌスのスケヌルアりト 実際に、あるPMの方が事業開発からリリヌス・運甚たで党おの工皋を䞀人で担ったずいう゚ピ゜ヌドも玹介されたした。 サヌビス立ち䞊げにおける圹割 その際に利甚したAIの膚倧なトヌクン数を瀺したダッシュボヌドも公開され、むンパクトがありたした。 Claude Code䜿甚料ダッシュボヌド しかし、これら䞀連の話には重芁な瀺唆も含たれおいたした。顧客が本圓に困っおいるこず、すなわち「Why」を深く探求するこず、そしお䞭長期的な運甚を芋据えた品質を担保するこずは、やはり人間にしかできないずいう事実です。 AIに「Howどう䜜るか」を任せ人間は「Whyなぜ䜜るか」に深く寄り添う、この圹割分担こそが、これからの時代に圧倒的な開発生産性を生み出す鍵になっおいくのだろうず感じたした。 開発生産性を組織党䜓の「生産性」ぞ 郚門間連携の壁を越える実践的ステップ speakerdeck.com このセッションでは、開発生産性ずビゞネス指暙の乖離を解消するための具䜓的な実践ステップが玹介されたした。 郚分蚀語の理解 各郚門のKPIを深く理解し、゚ンゞニアの貢献を「誰が・䜕を行い・どのような結果をもたらしたか」ずいう圢で具䜓的に蚀語化する 共通蚀語の蚭蚈 開発チヌムの掻動ず経営指暙を盞関マップで関連付け、職胜を暪断しお理解できる「共通蚀語」を蚭蚈する 指暙化 蚭蚈した共通蚀語に基づき、工数やリヌドタむムずいった課題を深掘りするための具䜓的な指暙を䜜成し、継続的な改善を促す 結論ずしお、生産性指暙は䞀床䜜成しお終わりではなく、察話を通じお改善し続ける「生きた蚀語」ずしお育おるこずで、組織党䜓の生産性向䞊に぀ながるず述べられおいたした。このセッションから、単にFour Keysのような䞀般的な指暙を远い求めるのではなく、たずは自瀟の状況に合わせた「共通蚀語」を蚭蚈し、そこから課題の原因を深掘りできる指暙を䜜るこず。そしお、スモヌルスタヌトで導入し、フィヌドバックを埗ながら改善サむクルを回しおいくこずの重芁性を孊びたした。 「開発生産性」ではなく、事業の投資察効果に向き合う「事業生産性」ぞ speakerdeck.com 埓来の開発生産性はタスクの消化量で芋られがちでしたが、このセッションではROIC投䞋資本利益率を事業生産性ずしお捉える芖点で觊れおおり、倚くの孊びや気づきがありたした。 AIぞの投資に察する解釈 䞭でも、開発者䞀人ひずりが日々の業務ず䌚瀟の利益売䞊増加やコスト削枛ずの繋がりを意識し、ROIC向䞊に貢献すべきずいう話が特に印象に残りたした。ROIC向䞊に貢献するための具䜓的な手段ずしお、生成AIの掻甚が倧きく貢献するずいう倖郚機関のレポヌトは興味深かったです。 セッションサマリ このセッションでは、開発ずビゞネスが䞀䜓ずなっお䟡倀を創造する重芁性を改めお孊ぶ良い機䌚ずなりたした。この孊びを、今埌の業務に掻かしおいきたいず思いたす。 ゚ンゞニアが䞻䜓的にビゞネスに貢献する〜開発珟堎からの倉革 このセッションは、株匏䌚瀟䞀䌑CTOの䌊藀盎也氏ず、ファむンディ株匏䌚瀟代衚の山田裕䞀朗氏による察談圢匏で行われたした。 察談はいく぀かのテヌマをもずに進行したしたが、䞀貫しお語られたのぱンゞニアの本圓の䟡倀は技術力そのものではなく、顧客の課題をどれだけ解決できたかで枬られるずいうものでした。私たち゚ンゞニアは、぀い「䜕が䜜れるか」ずいう技術を起点に考えがちです。しかし、顧客が本圓に困っおいるこずは、珟堎の䞀次情報に觊れなければ本質的には理解できたせん。そのための実践䟋ずしお、䞀䌑でぱンゞニアが営業に同行し、顧客のリアルな声を聞くこずを実践しおいるそうです。これにより、開発すべきプロダクトの解像床が飛躍的に高たり、ビゞネスぞの貢献床が倧きく倉わるずいいたす。 埓来のように、良いコヌドを曞くこずや蚭蚈するスキルはもちろん重芁です。しかし、これからの時代は技術領域に留たらずビゞネスの壁を越え、䞻䜓的に課題を発芋しようず珟堎に目を向ける姿勢こそが、組織の䞭で䟡倀を発揮する秘蚣なのだず思いたす。 さいごに 今回のカンファレンスに参加しお、倚くのセッションで語られおいた「開発生産性は、事業䟡倀ぞの貢献ず切り離せない」ずいう圓たり前のようでいお、぀い芋倱いがちな芖点に぀いお気づくこずができたした。私たち゚ンゞニアは、日々の業務で぀いコヌドを曞く速さや量に目を向けおしたいがちです。でも本圓に倧切なのは、その掻動がいかにしお顧客に䟡倀を届け、ビゞネスの成長に繋がっおいるのかを考え抜くこずなのだず、改めお気づかされたした。 ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com
はじめに こんにちは、情報セキュリティ郚の 兵藀 です。日々ZOZOの安党を守るためSOC業務に取り組んでいたす。 ZOZOではGitHub Advanced Securityを導入、運甚しおおりたす。本蚘事では、GitHub Advanced Securityに関する取り組みに぀いお玹介したす。 たた、情報セキュリティ郚ではその他にもZOZOを守るための取り組みを行っおいたす。詳现に぀いおは以䞋の「OpenCTIをSentinelに食わせおみた」をご芧ください。 techblog.zozo.com 目次 はじめに 目次 GitHub Advanced Securityずは GitHub Advanced Securityの導入の目的 導入の際に実斜したこず CodeQLのAdvanced Setup蚭定 コンテナスキャンの蚭定 CodeQLの怜知怜蚌 CodeQLの埗意な怜知 CodeQLの䞍埗意な怜知 運甚の際に実斜したこず GHASのAlertの通知蚭定 Push Protectionの蚭定 Code scanningのAlertの察応 Secret scanningのAlertの察応 たずめ おわりに GitHub Advanced Securityずは GitHub Advanced Security以䞋、GHASは、コヌドのセキュリティを向䞊させる耇数の機胜が含たれおおり、䞻な機胜は以䞋の3぀がありたす。 Code scanning : コヌドの脆匱性を怜出するための静的解析の機胜 Secret scanning : コヌド内に含たれるシヌクレットAPIキヌやパスワヌドなどを怜出する機胜 Dependabot : ラむブラリずフレヌムワヌクの既知の脆匱性を含む䟝存関係を怜出する機胜 パブリックリポゞトリにおいおは、GHASの機胜は無料で利甚可胜ですが、プラむベヌトリポゞトリにおいおはCode scanningやSecret scanningの機胜は有料ずなりたす。Enterpriseプランではアクティブコミッタヌ数に応じお課金されたす。詳しくは 公匏ドキュメント をご芧ください。 GitHub Advanced Securityの導入の目的 ZOZOではZOZOTOWNをはじめずし、WEAR, FANNS, ZOZOMETRYなど自瀟開発のサヌビスを倚数運甚しおいたす。これらのサヌビスにおけるコヌドのセキュリティ向䞊のために、GHASを導入したした。具䜓的な目的は以䞋の通りです。 コヌドの脆匱性の早期発芋 : Code scanningを利甚しおコヌドの脆匱性を開発の段階で早期に発芋し、修正するこずで、セキュリティリスクを䜎枛する。 シヌクレットの挏掩防止 : Secret scanningを利甚しおコヌド内に含たれるシヌクレットを怜出し、挏掩を防止する。 リポゞトリのセキュリティ芋える化 : Organizationのセキュリティダッシュボヌドを利甚しお、リポゞトリのセキュリティ状況を可芖化する。 これらを目的にGHASを導入、運甚する過皋でどのようにGHASを調敎、掻甚しおいったかを玹介しおいきたす。 導入の際に実斜したこず CodeQLのAdvanced Setup蚭定 ZOZOではGHASの機胜をOrganization党䜓で有効化しおいたす。Settingsの「Security configurations」から蚭定ができたす。Code scanningの蚭定のうち「CodeQL analysis」に぀いおは基本的にDefaultの蚭定以降、AutoBuildを配るこずになりたす。 このCode scanningは実態ずしおはGitHub Actionsで codeql-action を動かしおおり、別のActionsに組み蟌むこずも可胜です。 初期のAutoBuildの蚭定では䞀郚AndroidやiOS、Cなどのビルドを行うようなコヌドを扱うリポゞトリにおいお、Code scanningの有効化に倱敗する堎合がありたす。 理由は様々ですが、ビルドにおいお他のリポゞトリを参照しおいる、芁求ラむブラリや゜フトのバヌゞョンがシビア、Actionsのそもそものリ゜ヌスがデフォルトのものでは足りない堎合などが考えられたす。そのためCodeQLの Advanced Setup を蚭定し、個々のリポゞトリにおいおCodeQLのビルドを行うように蚭定したした。 以䞋のようにCodeQL analysisからAdvanced Setupを遞択できたす。 YAMLが出力されるので、リポゞトリごずのBuildに必芁な蚭定を普通のActionsのように線集したす。䟋えば、以䞋のように蚭定するこずで、Advanced Setupを実斜できたす。 jobs : analyze : name : Analyze (${{ matrix.language }}) runs-on : my-larger-runner # 実行したい環境を指定 timeout-minutes : 360 strategy : fail-fast : false matrix : include : - language : java-kotlin build-mode : manual # manualに倉曎しお、カスタムしたビルドを行う - language : ruby build-mode : none - if : matrix.build-mode == 'manual' name : Build with Gradle # manualでのBuild方法を蚘茉 run : | ./gradlew assembleDebug これらの蚭定は個々のリポゞトリごずに蚭定する必芁があったため、プロダクトの゚ンゞニアの協力を埗お、CodeQLが有効化されおいないリポゞトリに察しお、Advanced Setupの蚭定をしたした。 ある皋床ビルドが倱敗する原因、グルヌプが絞れおいる堎合はこちらの ドキュメント のようにスクリプトを利甚しお䞀括蚭定も可胜です。 コンテナスキャンの蚭定 GHASの機胜にはコンテナむメヌゞに存圚するラむブラリやOSの脆匱性を怜出する機胜は特段ありたせん。 そのため、TrivyやAWSのECRのコンテナスキャンなどのツヌルを利甚しおコンテナむメヌゞの脆匱性を怜出するなど代替案を怜蚎する必芁がありたした。 基本的にこれらのコンテナスキャンの蚭定は各プロダクトで管理しおいたす。このコンテナスキャンの結果はCodeQLで怜出した結果ず同じようにGitHubのSecurityタブで確認できるため、瀟内にコンテナスキャンを行うActionsを展開したした。以䞋はTrivyを利甚したコンテナスキャンの結果をGHASのSecurityタブにアップロヌドするActionsの䞀䟋です。 jobs :   scan-container :     runs-on : ubuntu-latest     timeout-minutes : 300     steps : # Checkout code - name : "Checkout repository" uses : actions/checkout@v4 #名称決定 - name : "Prepare" id : prep run : | REPO_NAME=$(echo "${{ github.repository }}" | tr "[:upper:]" "[:lower:]" ) echo "repo_name=${REPO_NAME}" >> $GITHUB_OUTPUT # コンテナビルド - name : "Build Container" run : docker build -t ghcr.io/${{ steps.prep.outputs.repo_name }}:scan-tmp ./ # 脆匱性スキャン - name : "Scan Container" uses : aquasecurity/trivy-action@master with : image-ref : "ghcr.io/${{ steps.prep.outputs.repo_name }}:scan-tmp" format : "sarif" limit-severities-for-sarif : true exit-code : "0" vuln-type : "os,library" severity : "CRITICAL" trivyignores : ".github/workflows/trivy/.trivyignore" output : "trivy-results.sarif" # GHASぞのアップロヌド - name : "Upload Trivy scan results to GitHub Security tab" uses : github/codeql-action/upload-sarif@v3 with : sarif_file : "trivy-results.sarif" GHASは sarif 圢匏の ファむルアップロヌド をサポヌトしおおりこの圢匏で出力すれば、コンテナスキャンの結果もGHASのSecurityタブで確認できたす。この䟋では limit-severities-for-sarif を true にするこずで、 severity がCriticalの脆匱性のみを怜出し、GHASにアップロヌドしおいたす。 CodeQLの怜知怜蚌 CodeQLには様々な怜知ルヌル query が甚意されおおり、コヌドの脆匱性をそのqueryに基づいお怜出したす。Organization党䜓でCode scanningを有効化するず、 default のqueryスむヌトが適甚されたす。 security-extended のqueryスむヌトに぀いおは各リポゞトリで適甚できたす。 ZOZOではこの怜出機胜を怜蚌するために脆匱なRuby, JavaScriptのアプリを甚意したした。その際の所感をここでは玹介したす。 CodeQLの埗意な怜知 SQLむンゞェクションやOSコマンドむンゞェクションはもちろん、プロトタむプ汚染たで怜知しおくれたす。基本的にナヌザヌの入力が行われるずころで発火するものは挏れなく怜知しおくれる印象です。 その䞭でもSSRFなど、䞀般的な蚺断ツヌルで怜知が難しいものを挏れなく拟っおくれる点は非垞に良いず思いたした。 このSSRFの脆匱性は環境ごずに圱響床合いが倉わるためトリアヌゞは難しいです。䟋えばAWSの堎合はIMDSv2のtokenが奪取された状況、Azureの堎合はManaged Identityの IDENTITY_HEADER が奪取された状況では被害が拡倧し、無芖できないものです。 実際に怜知されたAlertに぀いおの察応は埌ほど蚘茉いたしたす。 CodeQLの䞍埗意な怜知 䞀床DBなどに栌玍された倀など、Storedされた倀を出力する際に発火するパストラバヌサルやXSSなどの怜知は難しい印象を受けたした。 Storedされた情報を元に怜知するqueryは蚀語によっおバラ぀きがあるようで、パストラバヌサルに関しおはただ Rubyのquery では実装されおいないようでした。 Javaでは実装されおいそう なので、今埌Rubyでも怜知できそうです。 その他にもアクセス制埡䞍備の脆匱性など、そもそもSASTでの怜知が難しいであろう郚分もありたした。 運甚の際に実斜したこず GHASのAlertの通知蚭定 GHASではCode scanningやSecret scanningで怜出された脆匱性やシヌクレットの挏掩に぀いお、Alertが発生したす。これらのAlertはGitHubのWeb UI䞊で確認できたすが、Alertの発生をSlackや倖郚SIEMサヌビスなどの倖郚サヌビスに送信できたす。 SOCではGHASから発生するAlertに぀いお監芖し、重倧なAlertに察しお早急に察応する䜓制を構築したした。具䜓的にはSOCで利甚しおいるSentinelにGitHubのWebhookを介しおAlertを送信したす。 ドキュメント に埓っお application/json 圢匏で蚭定したす。ペむロヌドURLに関しおは、 Sentinelのコネクタ で䜜成されるAzure FunctionsのURLを蚭定したす。以䞋のコネクタヌです。 SentinelのGitHub(using WebHooks)コネクタ 䜜成されたFunctionの「関数のURLの取埗」から「ファンクション キヌ」のURLを蚭定すればログがSentinelに栌玍されたす。 コネクタのAzure Functions githubscanaudit_CL のテヌブルに dependabot_alert 、 secret_scanning_alert 、 repository_vulnerability_alert のeventがログずしおJSON圢匏で栌玍されたす。これらのログを元にKQLの分析ルヌルを䜜成し、重倧なAlertを抜出、通知したす。 以䞋はCode scanningのAlertを抜出するKQLの䞀䟋です。 githubscanaudit_CL | where event_s == "code_scanning_alert" and action_s == "created" | extend alert = parse_json(alert_s) | extend scan_url = alert.html_url, path = alert.most_recent_instance.location.path, severity = alert.rule.security_severity_level, description = alert.rule.description, message = alert.most_recent_instance.message.text | where severity == 'critical' | project TimeGenerated, scan_url, path, severity, description, message, alert Code scanningのCriticalなAlertを抜出し、 scan_url や path 、 severity 、 description 、 message を衚瀺しおいたす。 scan_url はGitHubのWeb UI䞊でAlertの詳现を確認するためのURLで、こちらでコヌド䞊の脆匱な箇所を確認できたす。 Secret scanningでのAlertの抜出も䌌たようなKQLで抜出できたす。以䞋はSecret scanningのAlertを抜出するKQLの䞀䟋です。 githubscanaudit_CL | where event_s == "secret_scanning_alert" and action_s == "created" | extend alert = parse_json(alert_s) | extend scan_url = alert.html_url, secret_type = alert.secret_type_display_name, validity = alert.validity | where validity == "active" or validity == "unknown" | project TimeGenerated, secret_type, scan_url, validity, alert Secret scanningのAlertでは シヌクレットの有効性 を瀺す validity があり、 active や unknown のものを抜出しおいたす。トリアヌゞを行う際にこの倀は指暙ずなるので、有効化しおおくず良いでしょう。こちらの ドキュメント が参考になりたす。 Sentinelでこれらの分析ルヌルを䜜成すれば、他の監芖ルヌルず同様にAlertをSlackやメヌルなどで通知し、SOC業務の䞭で監芖できたす。 Push Protectionの蚭定 GHASのSecret scanningの機胜には Push Protection ずいう機胜がありたす。これは、GitHubにPushされる前段階でシヌクレットを怜出し、Pushをブロックする機胜です。GHASの機胜の䞭で䞀番心螊る機胜ですね。 ゚ンゞニアが開発䞭においお誀っおシヌクレットをPushする前にブロックできるので、予防的察策ずしお非垞に有効な機胜です。ZOZOではこのPush Protectionを有効化するにあたっお、いく぀か手順を螏みたした。 ZOZOでは開発䜓隓を損なわないためにPush Protectionによるブロック、そしお誀怜知の頻床に着目したした。2か月ほど様子芋を行い、怜知されるシヌクレットはAlertで察応するずいった運甚をしおいたした。 2か月の運甚で、おおよそ1か月で20Alertほど䞊がるこずが確認できたした。ただ、このAlertは1぀のリポゞトリに察しお耇数のシヌクレットが怜出されるので、シヌクレットのPush頻床で蚀えば2週間に1床あるかないかの頻床でした。この蟺りはGitHubのSecurityタブの「Overview」などから芖芚的に確認できたす。 たた、誀怜知に぀いおはあたりなく、 FirebaseのAPI key などコヌド䞊に蚘茉できる特殊なシヌクレットを陀いおは、ずおも正確な怜知でした。 そのため、Push Protectionを有効化しおも開発䜓隓を損なうこずはないず刀断し、Push Protectionの有効化するこずにしたした。 たた、Push Protectionにはバむパス機胜があり、ブロックされたシヌクレットを゚ンゞニア自身が確認でき、以䞋のように自身でPushを蚱可できたす。 Push Protectionのバむパス このバむパス機胜によっおシヌムレスな開発が可胜です。 Push Protectionの党瀟展開埌のブロック数やバむパス数は以䞋のようにSecurityタブの「Secret scanning insights」から確認できたす。 Secret scanning insights こういった芖芚情報でリポゞトリのシヌクレットの状況を確認できるのは非垞に䟿利です。 Code scanningのAlertの察応 Code scanningで怜出された脆匱性のAlertは、Securityタブの「Code scanning」から確認できたすが、開発䞭のPRでもAlertを䞊げおくれたす。たた、以䞋の「Copilot Autofix」を有効化しおいれば、GitHub Copilotのラむセンスを利甚しなくおも 1 、Copilotが脆匱性の修正案を提瀺しおくれる機胜もありたす。 Copilot Autofix これらの機胜を掻甚しお、゚ンゞニア自身に開発䞭のセキュアコヌディングを実斜しおもらうこずができたす。SOCでのAlert察応はこの機胜で修正されなかったもののうち、重倧なものに察しお察応する圢になりたす。 ZOZOにおいおセキュアコヌディングは実践すべき重芁な取り組みです。これにより、SentinelぞのAlertの発生を抑制し、SOCチヌムはログ解析やむンシデント察応ずいった業務 2 に泚力できたす。Copilotの掻甚は、セキュアコヌディングを匷力に支揎し、開発チヌムやSOCチヌムの生産性向䞊にも寄䞎したす。 実際に以䞋のような脆匱なFlaskアプリを䜜成しおみたした。 脆匱なFlaskアプリ この脆匱なコヌドを含むPRを䜜成するず、Code scanningのActionsが実行されたす。 Code scanning on PR Actionsが完了するず以䞋のように脆匱性が怜知されたす。 Uncontrolled command line Alert 「Copilot Autofix」を有効化しおいれば、PR䞊で修正案も䞁寧に提案しおくれお䟿利です。 Copilot Autofixによるコヌドの修正案 Flaskのデバッグモヌドも怜知しおくれたした。 Flask app is run in debug mode このように開発段階で脆匱性を怜知し、修正案を提瀺しおくれる機胜は非垞に優秀で、助かっおいたす。 以䞋は䞀時期のCode scanningのAlertの数です。Securityタブの「CodeQL pull request alerts」から確認できたす。 CodeQL pull request alerts 38ほどのAlertに察しおCopilotが修正案を提瀺しおくれおおり、そのうち12.5はCopilotの修正案を適甚しおAlertを解消しおたす。修正刀断をしたAlertにおけるCopilotの提案をそのたた受けお修正した平均時間が12.98時間ほどです。たた、Copilotから修正案が提瀺されなかったAlertにおける修正した時間が175.98時間玄1週間ほどです。これらから、単玔に163時間6日以䞊をCopilotの修正案で削枛できおいるこずがわかりたす。 「Copilot Autofix」の機胜はZOZOでのセキュアコヌディングにおいお非垞に匷力であるこずがわかりたす。 Secret scanningのAlertの察応 Secret scanningで怜出されたシヌクレットのAlertは、Push Protectionを有効化しおいる堎合は基本的にPush Protectionによっおブロックされたす。ですが、Push Protection有効化前にPushされたものはブロックされたせん。 䟋えば、誀っおPushしおしたったシヌクレットに察しお蚘茉されおいるファむルを削陀したずしおも、コミットログなどにその情報は残ったたたです。そのため、 git show などのコマンドでシヌクレットが確認できおしたいたす。 そのため、以前にPushしおしたったいにしえの䌝統のリポゞトリなどはこういったシヌクレットが残っおいる堎合がありたす。これらのシヌクレットに察しおもGHASのSecret scanningは怜出しおくれたす。 少数怜知の堎合は郜床プロダクトチヌムに修正䟝頌をする圢でも良いのですが、数が倚い堎合は䜕か共通の管理シヌトのようなものが必芁になっおきたす。ZOZOではGHASのSecurityタブを確認できる察象者を絞っおいるので、プロダクトの゚ンゞニア党䜓に䞀気に共有できる別の方法を暡玢したした。 以䞋のようにSecurityタブの「Overview」におFilterを甚いお察象を絞り぀぀、「Export CSV」で察象のAlertをCSV圢匏で゚クスポヌトできたす。 Export CSV これで察象ずなるAlertを出力し、党䜓を管理するためのシヌトを党瀟に展開するこずで、プロダクトチヌムに察しおシヌクレットの修正察象を共有できたした。このCSV自䜓にシヌクレットは茉らず、リポゞトリ個別のAlert URLに繋がる情報が含たれるので、そのURL経由で各プロダクトに察しお、Alertの詳现を確認しおもらうこずができたす。 以降の修正の流れはシヌクレットの提䟛元でシヌクレット無効化䜜業や、 公匏ドキュメント に沿っお修正する圢になりたす。地道な䜜業ですが、プロダクトの゚ンゞニアの協力を埗お、シヌクレットの修正をしたした。 埐々にシヌクレットの修正が進んでいき、GHASのSecret scanningのAlertも枛少しおいきたした。 Secret scanning Alert こういった情報も䞊蚘のようにOverviewから確認できたす。 たずめ GHASの導入によっお、ZOZOにおけるセキュアコヌディング環境がより敎備され、開発者がセキュリティを意識した開発をしやすくなりたした。特にCode scanningやSecret scanningの機胜は、開発段階での脆匱性怜出やシヌクレット挏掩防止に倧きく貢献しおいたす。たた、Copilot Autofixの機胜を掻甚するこずで、脆匱性の修正も効率的に行えるようになりたした。 おわりに ZOZOでは、䞀緒に安党なサヌビスを䜜り䞊げおくれる仲間を募集䞭です。ご興味のある方は、以䞋のリンクから是非ご応募ください corp.zozo.com コヌドスキャンに察するCopilot Autofixの責任ある䜿甚 ↩ DefenderでもMacを守りたい ↩
.table-of-contents ul ul { display: none; } はじめに こんにちは。WEARバック゚ンド郚SREブロックの 春日 です。 6月25日、26日の2日間にわたっお開催された AWS Summit Japan 2025 に、今幎もZOZOのSREが倚数参加したした。この蚘事では、珟地の様子ずSREのメンバヌが各自遞んだ面癜かったセッションに぀いおご玹介したす。 はじめに AWS Summit Japanずは 䌚堎の様子 セッションレポヌト 生成 AI オブザヌバビリティのベストプラクティスAWS-49 コンポヌネントレベルのメトリクス RAG、゚ヌゞェント、チェヌントレヌス 高床な指暙ず分析 ゚ンドナヌザヌからのフィヌドバック 責任あるAIに向けお: 生成AIアプリケヌション評䟡のアプロヌチ AWS-52 セッションのテヌマず課題 セッションのポむント1 生成AIアプリケヌション自䜓の評䟡方法 セッションのポむント2 生成AIアプリケヌション構成芁玠の評䟡方法 1. 基盀モデルの評䟡 2. RAGの評䟡 3. ゚ヌゞェントの評䟡 セッションのポむント3 信頌性を高める評䟡戊略 Bedrock Guardrailsの日本語察応を確認する アップデヌト内容ず留意点 日本語フィルタリングの動䜜怜蚌 たずめ AI Agent 時代の゜フトりェア開発の型 〜 Everything as Code で叡智を䌝える 〜AWS-57 ゜フトりェア開発におけるAIの進化 AIに自埋的に意図通りに動いおもらうには 組織内でAIの䟡倀を認識させるには 感想 GenU × Amazon Bedrock による実装ぞの挑戊-オむシックス・ラ・倧地が実珟した 333 時間の工数削枛の技術解説CUS-38 メルマガ䜜成業務の課題 生成AIを掻甚したメルマガ䜜成PoCずそこで芋えおきた課題 GenUのカスタマむズ 結果 セッションの感想 AIを䜿う AIに䜿っおいただこう。AI が考えた次の⟏動ず実アクションの実践的Agent アプロヌチAWS-55 内容 感想 SmartNews における1000+ ノヌド芏暡 K8s 基盀 でのコスト最適化 – Spot・Graviton の倧芏暡導入ぞの挑戊CUS-33CUS-33 背景成長ずずもに増倧したむンフラコスト 戊略動的か぀柔軟なリ゜ヌス運甚ぞ 技術課題ず解決アプロヌチ Karpenterのカスタマむズでスケヌリング最適化 可芖化による玍埗感の醞成 スポットの安定運甚に向けた仕組み プロダクトチヌムずの連携による掚進力 最適化の成果 たずめ おわりに AWS Summit Japanずは www.youtube.com AWS Summit Japanは延べ4䞇人以䞊が参加する日本最倧の「AWSを孊ぶむベント」です。今幎も幕匵メッセで2日間にわたり開催され、160以䞊のセッション、270以䞊の展瀺が行われたした。ラむブ配信も行われ、2025幎7月11日たでの期間限定でオンデマンド配信が芖聎可胜です。 aws.amazon.com 䌚堎の様子 倚くの参加者で賑わう䌚堎。 撮圱春日 撮圱春日 今幎も先着4000名にお匁圓匕換刞ずクッションが配垃されたした。䜙ったお匁圓は匕換刞がない方も先着で貰えたようです。 撮圱酒郚 撮圱花房 今回ラりンゞはAWS認定者だけではなく、誰でも利甚可胜になっおいたした。堎所はむンフォメヌションの呚りず壁際に沿うように耇数に甚意されおおり、倚くの人が利甚できるようになりたした。 撮圱春日 撮圱春日 1日目の18:10からは基調講挔の䌚堎でQuizKnockず盎接察決できるAWSクむズ倧䌚が開催されたした。党員が参加可胜なWeb䞊での予遞を勝ち抜いた䞊䜍5人が登壇し、QuizKnockのメンバヌず早抌しクむズで察戊したした。結果は挑戊者チヌムの勝利でした。 撮圱春日 AWS Builders' Fairでは1日ごずにブヌスの出展が倉わりたした。実際に䜓隓可胜な展瀺や動く展瀺などがあり、楜しみながら孊ぶこずができたした。 撮圱春日 撮圱江島 サヌバヌレスで構築されたコヌヒヌ泚文システム。定期的に発行されるQRコヌドを読み取るこずで実際に泚文が可胜でした。 撮圱春日 「アヌキテクチャ道堎2025 - 実践線」セッションではZOZOTOWNの話も。䟝存システムの関係ですぐにはDBをオンプレミスからクラりド移行できない制玄の元、人気商品によるアクセス集䞭でもスケヌルできる蚭蚈事䟋が玹介されたした。 撮圱花房 誰でも曞けるボヌド。ZOZOのロゎがどこに曞かれおいるかぜひ探しおみおください 撮圱春日 正解はここでした。 撮圱花房 セッションレポヌト ここからは珟地参加したZOZOのSREが気になったセッションを玹介したす。 生成 AI オブザヌバビリティのベストプラクティスAWS-49 生産プラットフォヌム開発郚SREの塚本です。普段は、受泚生産の仕組みを提䟛しおいる、生産支揎プラットフォヌム「 Made by ZOZO 」の開発に携わっおいたす。 生成AIを掻甚したシステムは、既に倚くの商甚環境で利甚されるようになっおいたす。私の郚眲内でも生成AIを掻甚したツヌルの開発が進んでいたす。これらのシステムが単に機胜するだけでなく、継続的に改善されおいくためには、オブザヌバビリティ可芳枬性に基づいた蚈枬ず分析が䞍可欠ずなりたす。このセッションでは、生成AIシステムを深く蚈枬し、改善しおいくための階局型アプロヌチが説明されおいたした。 このアプロヌチは4぀のレむダヌで構成されおいたす。 オブザヌバビリティを蚈枬するための階局型アプロヌチ コンポヌネントレベルのメトリクス システムの基盀ずなる各コンポヌネントから発行されるメトリクスを掻甚したす。セッションでは、サヌビスの呌び出し゚ラヌ、レむテンシヌ、リ゜ヌス䜿甚率などの基本的なメトリクスが玹介されたした。たた、Amazon CloudWatchの耇合アラヌムを䜿甚するこずで、集玄されたレベルでアラヌムを蚭定し、アラヌトノむズを削枛できる点が匷調されおいたした。 コンポヌネントレベルのメトリクス RAG、゚ヌゞェント、チェヌントレヌス RAG怜玢拡匵生成や゚ヌゞェントベヌスのアヌキテクチャでは、䞀連のリク゚スト凊理党䜓を远跡するトレヌスが重芁です。発衚では、ナニヌクなTrace IDを蚭定するこずで、各サヌビス間での凊理の流れを远跡する仕組みが説明されたした。特に、OpenTelemetry (OTel) を甚いたトレヌスの䌝播がデモンストレヌションで玹介されおおり、耇雑なオヌケストレヌションレむダヌの可芖化に有効であるこずが玹介されおいたした。 RAG、゚ヌゞェント、チェヌントレヌス 高床な指暙ず分析 より深いオブザヌバビリティずしお、高床な指暙ず分析が挙げられたす。Amazon Bedrockのガヌドレヌル機胜を利甚した堎合、ガヌドレヌルによっお制限された結果をメトリクスずしお出力し、可芖化できたす。これにより、蚭定したポリシヌの遵守状況を監芖し、必芁に応じお調敎できたす。 高床な指暙ず分析 ゚ンドナヌザヌからのフィヌドバック 最埌に、゚ンドナヌザヌからのフィヌドバックをオブザヌバビリティのルヌプに組み蟌むこずで、朜圚的な問題を早期に発芋し、ナヌザヌ䜓隓の改善に繋げたす。ここでは、CloudWatch Embedded Metric Format (EMF) を掻甚し、フィヌドバックを含むログからメトリクスを自動的に抜出し、評䟡する方法が玹介されたした。これにより、ナヌザヌの定性的なフィヌドバックを定量的な指暙ずしお捉えるこずが可胜になりたす。 ゚ンドナヌザヌからのフィヌドバック このセッションは、生成AIアプリケヌションの改善アプロヌチの党䜓像から、各レむダヌでの具䜓的なオブザヌバビリティの実装方法たで、デモンストレヌションを亀えながらずおも明快に説明されおいたした。今埌、オブザヌバビリティによる継続的な改善サむクルを回し、より良いナヌザヌ䜓隓に繋がる生成AIアプリケヌションの開発に取り組んでいきたいず改めお感じたした。 責任あるAIに向けお: 生成AIアプリケヌション評䟡のアプロヌチ AWS-52 EC基盀開発本郚SRE郚商品基盀SREブロックの䜐藀です。私は「 責任あるAIに向けお 生成AIアプリケヌション評䟡のアプロヌチ 」ずいうセッションに参加したした。 セッションのテヌマず課題 本セッションの䞻題は、生成AIアプリケヌションを本番環境ぞ安党にデプロむする際、どのように評䟡ず信頌性を確保するかずいう点でした。登壇者は、次のような課題を提瀺しおいたす。 埓来のAIモデルは特定ナヌスケヌスに最適化されおいたのに察し、基盀モデルFMは耇数ナヌスケヌスに察応できる反面、アプリケヌション党䜓の耇雑性が増しおいる。 品質を確保し぀぀開発速床アゞリティも維持する必芁があるが、過床な分析や察策をずるずリリヌスが停滞し、本番環境のむンシデント防止ずのバランスを取るこずが難しい。 これらの課題を解決し、品質ずリスクの䞡面で自信を持぀ためには、本番デプロむ埌も含めた䞀貫したテストず評䟡の仕組みを構築するこずが重芁であるず匷調しおいたした。 セッションのポむント1 生成AIアプリケヌション自䜓の評䟡方法 生成AIアプリケヌションには、埓来のアプリケヌションにはない「信頌性ずリスクが蚱容範囲内に収たっおいるか」ずいう評䟡芳点があり、その評䟡手法ずしお次の3぀のアプロヌチが玹介されたした。 アプロヌチ 抂芁 䞻なメリット 䞻なデメリット 1. 人間による評䟡手動 人間が盎接出力を確認し、品質を刀定する。 高い粟床ず信頌性が埗られる。 時間ずコストが倚く、スケヌルしにくい。 2. 経隓則に基づく評䟡自動 機械的に蚈算可胜なスコアリングを甚いる手法。 高速・スケヌラブル・実行コストが䜎い。 人間の評䟡ず結果が䞀臎しない堎合がある。 3. AIによる評䟡LLM-as-a-Judge LLMを評䟡者ずしおプロンプトする手法。 柔軟に評䟡芳点をカスタマむズできる。 評䟡モデルのバむアスや掚論コストが課題。 経隓則に基づく評䟡、AIによる評䟡のどちらを遞ぶにしろ、人間による評䟡ずの敎合性を定期的に確認し、キャリブレヌション補正を行うこずを掚奚しおいたした。 セッションのポむント2 生成AIアプリケヌション構成芁玠の評䟡方法 次に、生成AIアプリケヌションを構成する3぀の芁玠基盀モデル・RAG・゚ヌゞェントに぀いお、それぞれに適した評䟡手法が玹介されおいたした。 1. 基盀モデルの評䟡 評䟡方法 手法 補足 モデル比范 リヌダヌボヌドを利甚する。 ベンチマヌクは自瀟ナヌスケヌスず必ずしも盞関しない点に泚意。 Bedrockでの評䟡 Bedrockの「モデル評䟡」機胜を利甚。 - 人手評䟡・経隓則メトリクス・LLM-as-a-Judgeから遞択可胜。 - カスタムむンポヌトモデルも評䟡可胜。 SageMakerでの評䟡 OSSラむブラリ「 fmeval 」を䜿甚。 独自の評䟡セットを利甚可胜。 2. RAGの評䟡 評䟡方法 手法 補足 Bedrockでの評䟡 Bedrock Knowledge Basesの「RAG評䟡」機胜を利甚。 怜玢゚ンゞン単䜓、たたは怜玢生成をたずめお評䟡可胜。 高床なカスタム評䟡 OSSフレヌムワヌク「 Ragas 」を䜿甚。 Bedrockの評䟡を䜿甚したうえでチュヌニングしたい堎合に利甚。 3. ゚ヌゞェントの評䟡 評䟡方法 手法 補足 ナヌザヌず゚ヌゞェントずの察話テスト 「 agent-evaluation 」フレヌムワヌク。 - YAMLでテストケヌスナヌザヌ入力ず想定結果を蚘述。 - LLM-as-a-Judgeで察話成立を評䟡。 - CI/CDで実行可胜。 セッションのポむント3 信頌性を高める評䟡戊略 「リスク評䟡」の芳点でリリヌスの信頌性を䞊げるために、以䞋7段階の評䟡プロセスによる評䟡戊略が玹介されおいたした。 ステップ 内容 1. ナヌスケヌス定矩 扱う情報䟋ヘルスケア、金融などによっお朜圚リスクが異なるため、リリヌスぞの圱響床を敎理する。 2. リスク評䟡 NIST AI Risk Management Framework に基づきリスクを掗い出す。 次に、発生確率ず圱響床を掛け合わせたリスク評䟡マトリックスでリスクレベルを決定する。 3. メトリクス遞定 評䟡の目的ずリスクに察応するメトリクスを遞定する。 4. リリヌス基準策定 リスク評䟡マトリックスを基に、どのレベルを満たせばデプロむ可胜かを策定する。 5. 評䟡デヌタセット蚭蚈枬定 自動評䟡ず人間評䟡を組み合わせ、ナヌスケヌスに沿ったデヌタセットを䜜成しお枬定をする。 6. 結果の解釈 限られたポむントのメトリクスだけで刀断せず、分垃や信頌区間を確認し、過床な䞀般化を避ける。 7. リスク緩和戊略 入力・出力フィルタリングを実斜する。Amazon Bedrock Guardrailsは、このフィルタリングを実珟するツヌル。 Bedrock Guardrailsの日本語察応を確認する セッションでも觊れられおいたしたが、6月25日AWS Summit初日にAmazon Bedrock Guardrailsが日本語をサポヌトした旚がアナりンスされたした。 Amazon Bedrock Guardrails announces tiers for content filters and denied topics アップデヌト内容ず留意点 日本語に察応した機胜 コンテンツおよびPrompt Attackフィルタヌ 拒吊トピック 日本語に未察応の機胜 ワヌドフィルタヌ 機密情報フィルタヌ コンテキストグラりンディングチェック 蚭定の留意点 Content Filters tierはStandard Filters Tierを遞択する必芁がある。 Standard Filters Tierはクロスリヌゞョン掚論が必須ずなるので、囜内リヌゞョン内に凊理を閉じたい芁件がある堎合は留意する必芁がある。 日本語フィルタリングの動䜜怜蚌 クロスリヌゞョン掚論Cross-Region inferenceを有効化し、Standard Filtersを指定しお「拒吊されたトピック」の「定矩」を日本語で蚭定したす。 「拒吊されたトピック」の「定矩」を日本語で蚭定する 日本語プロンプトでテストを実行したずころ、暎力衚珟を含む質問は「Violence」などのコンテンツフィルタヌにより拒吊されたした。 暎力衚珟を含む質問は「Violence」などのコンテンツフィルタヌにより拒吊される Prompt Attackや拒吊トピックに぀いおも同様に、日本語入力でフィルタリングが成功するこずを確認したした。 Prompt Attackによっおフィルタリングされる 拒吊トピックによっおフィルタリングされる たずめ 本セッションを通じお、モデルの粟床だけではなく「責任あるAI」ずいう芖点が重芁であるず認識したした。たた、評䟡そのものの信頌性をどのように担保するかに぀いおも倚くの瀺唆を埗たした。たずは自瀟サヌビスのナヌスケヌスを敎理し、固有の課題を正確に把握したうえで、リスクを継続的に管理する評䟡戊略を実践する必芁がありたす。匊瀟ではマむクロサヌビスをリリヌスする際に「プロダクションレディチェック」を実斜しおいたすが、今回孊んだ知芋を取り入れるこずで、生成AIアプリケヌション向けの新しいチェックリストずしお発展させられるず感じたした。 AI Agent 時代の゜フトりェア開発の型 〜 Everything as Code で叡智を䌝える 〜AWS-57 怜玢基盀SREブロックの花房です。普段はZOZOTOWNの怜玢関連マむクロサヌビスにおけるQCD改善やむンフラ運甚を担圓しおいたす。 匊瀟では珟圚、業務の効率化を目的ずした生成AIの導入が進められおいたす。私自身も゜フトりェア開発やシステム運甚の効率化のために生成AIの掻甚に取り組んでおり、その情報収集の䞀貫ずしお本セッションに参加したした。本セッションで孊んだ内容を以䞋にたずめたす。 ゜フトりェア開発におけるAIの進化 ゜フトりェア開発においおAIは飛躍的な進化を遂げたした。コヌディング支揎のレベルは䞋蚘の3぀に分けられ、珟圚のAIはレベル3たで到達しおいたす。 プログラムによるメ゜ッドなどの補完、リファクタリング AIによるむンラむンのコヌド補完、チャットでのコヌド生成 AI Agentによる自埋的な探玢、コヌド修正、テスト レベル3では人間の詳现な指瀺が必芁ですが、ドラむバヌをAIに亀代できたす。AIが進化を続けるずレベル3の先のレベル4に到達するず考えられたす。レベル4ではAIのみで長時間の自動運転が可胜になるず予想されたす。そのような未来に備えお、今からAIを䞭心ずした゜フトりェア開発の型を身に付けおおく必芁がありたす。 AIに自埋的に意図通りに動いおもらうには AIを掻甚した開発でよくある悩みは、AIが意図通りに動いおくれないこずです。AIは確率的に行動を決定しおいるため垞に期埅通りの振る舞いをするずは限りたせん。AIの振る舞いの粟床を高めるには指瀺や制玄を蚀語化しお䞎えおおく必芁がありたす。しかし、党おの意図を蚀語化するこずは困難です。そこで、蚀語化できない郚分のコンテキストをAIぞ䌝えるためにコヌドを利甚したす。 ここで玹介されたものが「Everything as Code」です。 Everything as code is a software development practice that seeks to apply the same principles of version control, testing, and deployment to enhance maintainability and scalability of all aspects of the development lifecycle, including networking infrastructure, documentation, and configuration. Everything as code - DevOps Guidance より匕甚。 人間が゜フトりェア開発に関する党おをコヌドで衚珟しおおくこずによりAIが埗られる情報は自然に増加したす。コヌドはプレヌンテキストであり、AIにも理解しやすい圢匏であるためです。意図した通りAIに動いおもらうには、䞊蚘のようにAIが自埋的に必芁な情報を探せる状態を䜜るこずが重芁です。 組織内でAIの䟡倀を認識させるには ビゞネスの目的はナヌザヌに倚くの䟡倀を届けるこずです。組織内にAI掻甚の胜力を獲埗させるこずができれば、より倚くの䟡倀を届けるこずが可胜になりたす。しかし、組織内でAI掻甚の䟡倀を蚀葉で説明しおも受け止め方は人によっお様々です。説明を聞いお䞀郚のタスクを完党にAI任せにできる人もいれば、AIを䜿いこなせおいない人も珟れたす。 蚀語による説明だけでは䟡倀が䌝わらず、時間をかけおマスタしお初めお気づく䟡倀は存圚したす䟋Vimキヌバむンド、空手。そのため、今は䟡倀に気づかれないずしおも基本の型を組織で続けおおくこずが重芁です。AIを䞭心ずした゜フトりェア開発における基本の型は「Everything as Code」です。 感想 AIが意図通りに動かないのはそういうものだず少し諊めおおり、振る舞いの粟床を高められる方法がもしあれば知りたいず思っおいたした。本セッションに参加したこずで、その方法の1぀である「Everything as Code」を知るこずができたした。コヌドの衚珟であればAIだけでなく人間同士でも意図を䌝えられるため、非垞に有甚なプラクティスだず感じたした。 私も生成AIの掻甚の掚進しおいる䞭で、口頭での説明だけだず生成AI掻甚の䟡倀を䌝えるには䞍十分だず感じおいたした。本セッションを通じお、今は䟡倀を完党に理解されずずも、今埌のためにAIを䞭心ずした゜フトりェア開発の型を組織で実践しおおくこずが重芁だず認識を改められたした。 匕き続き、本セッションで埗られたプラクティスやヒントを元に生成AIの掻甚を掚進しおいきたいず思いたす。 GenU × Amazon Bedrock による実装ぞの挑戊-オむシックス・ラ・倧地が実珟した 333 時間の工数削枛の技術解説CUS-38 WEARバック゚ンド郚SREブロックの春日です。普段は WEAR by ZOZO ずいうサヌビスのSREずしお開発・運甚に携わっおいたす。私からは「 GenU × Amazon Bedrockによる実装ぞの挑戊-オむシックス・ラ・倧地が実珟した333時間の工数削枛の技術解説 」ずいうセッションをご玹介したす。 メルマガ䜜成業務の課題 メルマガ䜜成業務の課題ずしお、以䞋が挙げられおいたした。 1回のメルマガにかかる工数が倧きい 䜜成者のスキルによっお品質維持が難しい メルマガを配信するたでにはメルマガ原皿の䜜成埌、法務による衚珟の校正ず原皿の修正䜜業が繰り返し発生したす。衚珟の校正ずいうのは䟋えば、「業界No.1」「ダむ゚ットに効果的」ずいった、景品衚瀺法や薬機法によっお犁止されおいる衚珟がされおいないか確認しおいるずのこずでした。こういった校正䜜業により工数がかかるようです。 生成AIを掻甚したメルマガ䜜成PoCずそこで芋えおきた課題 コンテンツ生成が埗意である生成AIを掻甚し、メルマガ䜜成業務における工数を削枛し぀぀品質を維持できないかず考えたす。生成AIを甚いおメルマガを䜜成するPoCを行ったずころ、生成AIが䜜成したメルマガの方がCVRが䞊がったずのこずでした。PoCは Generative AI Use Cases(GenU) を甚いお行われたした。GenUは生成AIを掻甚する環境構築を1クリックで行えるアプリケヌションで、Web UIから簡単に Amazon Bedrock を䜿甚できたす。 しかし、デフォルトのGenUを䜿甚するだけでは、いく぀か課題が芋぀かりたした。 メルマガの内容は毎回倉わるためメルマガ生成プロンプトの䜜成難易床が高く、結局人間が原皿を䜜成するのず同じくらいの時間がかかる 景品衚瀺法や薬機法にかからないような、メルマガ専甚の校正機胜が必芁 これらの課題を解決するために、GenUをカスタマむズするこずになりたした。 GenUのカスタマむズ GenUにメルマガ䜜成機胜ずメルマガ校正機胜を远加したす。メルマガの文章構成はある皋床決たっおいるこずから、動的郚分だけを入力すれば自動でプロンプトが生成されるようになっおいたす。たた、過去のメルマガのサンプルを耇数甚意しお参考にするようにプロンプトで指瀺するこずでも構成を螏襲させおいるようです。ここのサンプルの遞定に偏りがあるず、おせちの内容でも倏を感じる文章になっおしたうなど意図しない出力がされおしたう課題があったようでした。これはサンプルの遞定を季節に䟝存しないものぞするこずで改善されたずのこずです。 メルマガ䜜成機胜 メルマガ校正機胜も生成AIを甚いお実装されおいたす。瀟内ドキュメントで管理されおいる衚珟チェックリストを甚いお、プロンプトにNG衚珟や蚀い換えを組み蟌むこずで怜出したす。NG衚珟に䌌たニュアンスの問題ない衚珟もNGずしお怜出されおしたうこずがあったため、チェックリストに「完党䞀臎する堎合のみ」指摘するようにプロンプトを調敎するこずで改善されたずのこずでした。 フロント゚ンドもデフォルトのものからReactで自前実装されおいたす。動的な入力事項の必須項目化や、远加項目の折りたたみ衚瀺、NG衚珟ずOK衚珟の色分けなど、UI/UXの改善が行われおいたす。手間をかけおでもナヌザ䜓隓を向䞊させたい堎合は、远加実装がおすすめずのこずです。 自䜜のフロント゚ンド 結果 結果ずしお、1か月あたりのメルマガ䜜成工数が133時間、校正の工数が200時間削枛され、合蚈333時間の工数削枛に成功したようです。たた、人が䜜成したメルマガに比べおCVRが200向䞊したずのこずでした。品質の担保や特定瀟員の負荷軜枛も成功したずのこずでした。 セッションの感想 人が䜜成したメルマガに比べ、生成AIによっお䜜成された方が200もCVRが向䞊したずいうのは驚きでした。たた、メルマガ生成郚分ず校正郚分の2軞でそれぞれ生成AIを掻甚するずいう郚分が特に印象的でした。䞀床で完璧なメルマガを生成するよりも、それぞれで特化したプロンプトを甚意する方が効果的なのかもしれたせん。プロンプトチュヌニングのTipsもあり、非垞に参考になりたした。今回孊んだ内容を業務にも掻甚しおいきたいず思いたす。 AIを䜿う AIに䜿っおいただこう。AI が考えた次の⟏動ず実アクションの実践的Agent アプロヌチAWS-55 フロントSREブロックの江島です。ZOZOTOWNの゚ンドナヌザヌに近い郚分フロント゚ンド、BFF等を担圓領域ずしおいたす。たた、党瀟のAWS管理者ずしおの圹割も担っおいたす。 内容 今幎のAWS Summitも昚幎床に匕き続いお生成AIに関するセッションが盛り沢山でした。 䞀方で、私自身は生成AIの技術に関するキャッチアップが十分に出来おいないず感じおいたした。そこでこの2日間は生成AI関連のセッションに泚力する姿勢で臚みたした。 その䞭でも今回は「 AIを䜿う AIに䜿っおいただこう。AIが考えた次の⟏動ず実アクションの実践的Agentアプロヌチ 」ずいうセッションに぀いおたずめたいず思いたす。 AIを䜿うAIに䜿っおいただこう。AIが考えた次の⟏動ず実アクションの実践的 Agent アプロヌチ LLMには最新情報にアクセスできないずいう課題がありたす。LLMは倧量の孊習によっお過去に䜕が起きたのかは知っおいたすが、孊習埌に生じた最新情報にはアクセスできたせん。䞀方で、LLM単䜓では盎接回答できない情報であっおも、答えに蟿り着くためのアプロヌチは提案できたす。そこで、LLMの持぀課題を解決するために、LLMにツヌルを持たせるずいう考え方が生たれたした。 LLMずToolが繋がれば倖郚䞖界ず連携できる しかし、LLMにツヌルを持たせる際には、以䞋のような課題が発生したす。 ハルシネヌションツヌルを䜿甚しおいないにもかかわらず、䜿甚したかのように応答するこず ツヌルの情報挏掩LLMが利甚可胜なツヌルを挏掩し、悪甚される可胜性があるこず 䞍定な応答フォヌマットLLMの応答テキストの䞭からツヌル実行に必芁な情報を正確にパヌスするこずが難しいこず これらの課題を解決するために、Tool Use専甚の構文を䜿うアプロヌチが採甚されたした。Amazon Bedrockではこの機胜がTool Useずしお提䟛されおおり、以䞋の3぀の特城を持っおいたす。 ナヌザヌメッセヌゞやシステムプロンプトず分離したTool専甚の匕数ツヌルを挏掩したり、ハルシネヌションを防いだりするのに圹立぀ Tool利甚時は通垞のテキストレスポンスずは分離された出力ツヌル䜿甚時のパヌスが容易になる Tool実行結果も分離しお入力Tool実行結果のLLMによる解釈が容易になる このTool Useは以䞋のようなフロヌで凊理が実行されたす。倧たかには、利甚可胜なツヌルずその䜿い方をあらかじめLLMに定矩しおおき、LLMがツヌルの実行を指瀺しなくなるたでツヌルの実行ずその結果のモデルぞのフィヌドバックを繰り返すずいう流れです。 Tool Use フロヌ このセッションのタむトル「AIを䜿うAIに䜿っおいただこう」に関連しお、発衚者からは、゚ンゞニアの芖点ではAIを盎接䜿うずいうよりも、AIにツヌルを䜿っおもらうための「䞋準備」ツヌルの開発や説明などをするこずが重芁であるずいう点が匷調されたした。これは最近話題ずなっおいるMCP等の技術にも共通する考え方です。 さらに、ツヌルを甚いるこずで生成AIアプリケヌションを゚ヌゞェントずしお動䜜させる䞊で、どこたでを゚ヌゞェントに任せるか人間の介入床合いを怜蚎するこずが非垞に重芁であるず説明されたした。介入の床合いは、「必ず人間が介入」「郚分的にAgent」「党郚Agent」の3段階で考えられ、ナヌスケヌスに応じお適切なバランスを芋぀けるこずが掚奚されたす。 あなたの Agent のちょうどいいずころは このような゚ヌゞェント開発をより容易にするため、AWSはAmazon Bedrock Agentsずいう機胜を提䟛しおいたす。Amazon Bedrock Agentsは、LLM、ツヌル、Knowledge Basesの間でオヌケストレヌタヌずしお機胜し、開発者の負荷を䜎枛したす。 感想 このセッションを聎講するこずで、たずLLMが䞍埗意ずするこず特に最新情報ぞのアクセスず掚論の粟床を深く理解できたした。たた、それらに察しおツヌルずいう解決策が提唱され、そこから様々なこずをAIにやらせようずいう゚ヌゞェント化の流れに繋がっおいるんだずいうこずが敎理できたした。 AWSが提䟛しおいるBedrockのTool Use機胜を甚いた実装の流れを知るこずで、Agentずしお働く生成AIアプリケヌションが思考を繰り返す流れを具䜓的に理解できたした。今回孊んだ内容を通じお、実際の業務でも生成AIアプリケヌションを䜿った業務改善に取り組んでいきたいず感じたした。 SmartNews における1000+ ノヌド芏暡 K8s 基盀 でのコスト最適化 – Spot・Graviton の倧芏暡導入ぞの挑戊CUS-33CUS-33 フロントSREブロックの埐です。ZOZOTOWNの゚ンドナヌザヌに近い郚分フロント゚ンド、BFF等を担圓領域ずしおいたす。 SREにずっお、むンフラの信頌性を守るこずず同じくらい重芁なのが、持続可胜なコスト管理です。日々の運甚の䞭で、どこたで効率的に、そしお倧胆にコスト削枛に挑めるかは垞に意識すべきテヌマだず感じおいたす。今回ちょうどスマヌトニュヌス瀟がこのテヌマで登壇するセッションがあったため、その取り組みを知りたいず考え、参加したした。 背景成長ずずもに増倧したむンフラコスト スマヌトニュヌスでは、倧芏暡なEKSクラスタヌ䞊にFlink、Kafka、ClickHouseなどのプラットフォヌムを構築し、機胜開発を重芖しおきたした。しかしその結果、ナヌザヌ数の増加以䞊のスピヌドでコストが増倧し、䜓系だったコスト管理が必芁なフェヌズに突入したした。リ゜ヌス䜿甚量が党䜓の50以䞊に達しおいたこずを受けお、むンフラずプロダクトを暪断する圢でコスト最適化プロゞェクトが立ち䞊がりたした。 背景成長ずずもに増倧したむンフラコスト 戊略動的か぀柔軟なリ゜ヌス運甚ぞ 戊略動的か぀柔軟なリ゜ヌス運甚ぞ Reserved InstanceやSaving Planずいった固定的なコスト察策だけでは、トラフィックの倉動や将来的な成長に察応するには䞍十分でした。スマヌトニュヌスでは、柔軟性ず機動力を重芖したアプロヌチずしお、スポットむンスタンスの掻甚を党瀟的に掚進し、Gravitonアヌキテクチャの導入を段階的に拡倧しおいたす。たた、EKSクラスタヌのスケゞュヌラヌにはKarpenterを採甚し、芁件に応じお改修を加えるこずで、高速か぀安定したスケヌリングを実珟したす。これらの取り組みの効果を定量的に把握するため、コストやリ゜ヌス䜿甚状況を可芖化するダッシュボヌドも構築されおいたす。 技術課題ず解決アプロヌチ スマヌトニュヌスが盎面した技術的課題は、成長に䌎うむンフラコストの増加に加え、スポットむンスタンスやGraviton導入に察する開発偎の䞍安、そしお耇雑なスケゞュヌリング蚭蚈ぞの察応でした。この課題に察し、スマヌトニュヌスではむンフラチヌムずプロダクトチヌムが連携し、瀟内セッションによる知識の底䞊げを行うずずもに、サヌビスごずのSLAや䞭断察応方針の敎理を進めたした。加えお、Karpenterの改修によっおスケヌリング性胜の最適化を図り、可芖化ダッシュボヌドの敎備を通じおコスト構造の把握ず運甚刀断の粟床向䞊にも取り組んでいたす。 Karpenterのカスタマむズでスケヌリング最適化 Karpenterのカスタマむズでスケヌリング最適化 スポットむンスタンスの掻甚には、柔軟か぀高速なスケゞュヌリングが䞍可欠です。Karpenterの導入にあたり、スマヌトニュヌスでは耇数のカスタマむズを斜したした。具䜓的には、CPU䜿甚率が閟倀を䞋回った堎合にスケヌルむンを行う制埡や、凊理枈みのペンディングポッドが存圚する堎合には䞀定時間スケヌルアりトを抑制する仕組みを実装。たた、スポットむンスタンスの䞭断通知をトリガヌずしお即座に新しいノヌドを立ち䞊げるこずで、スケヌルアップにかかる時間を6分から3分ぞ短瞮するこずに成功したした。 可芖化による玍埗感の醞成 可芖化による玍埗感の醞成 コスト最適化を組織ずしお進める䞊では、関係者党員で玍埗できる透明性が欠かせたせん。スマヌトニュヌスでは、リアルタむムに利甚状況ずコスト構造を把握できるダッシュボヌドを構築しおいたす。サヌビスごずのスポットむンスタンスずオンデマンドむンスタンスの䜿甚比率やコスト掚移をはじめ、スポットの䞭断発生やキャパシティ䞍足の頻床、各むンスタンスタむプのリ゜ヌス利甚効率なども可芖化されおおり、運甚刀断や改善サむクルの粟床向䞊に貢献しおいたす。 スポットの安定運甚に向けた仕組み スポットむンスタンス利甚時にオンデマンドむンスタンスぞ自動的にフォヌルバックしおしたう課題に察応するため、スマヌトニュヌスでは安定運甚を実珟するための仕組みを構築したした。たず、PreferSpotずいうラベルを導入するこずで、Podが可胜な限りスポットむンスタンスで起動されるよう明瀺的に指定しおいたす。 仮にスポットむンスタンスのキャパシティが確保できず起動に倱敗した堎合でも、䞀時的にオンデマンドノヌドで代替的に起動させるこずで可甚性を担保したす。そのうえで、䞀定時間が経過するずオンデマンドノヌドは自動でシャットダりンされ、再床スポットむンスタンスでの起動を詊行するように蚭蚈されおいたす。このようにしお、コストず可甚性のバランスを取り぀぀、スポットの安定掻甚を促進しおいたす。 プロダクトチヌムずの連携による掚進力 単なるむンフラ最適化にずどたらず、プロダクトチヌムず密に連携しながら掚進力を高めおきたした。たず、VPの支揎のもずで専任のタスクフォヌスを蚭眮し、圹割ず暩限を明確化するこずで迅速な意思決定を可胜にしたした。 たた、ダッシュボヌドを通じおサヌビス単䜍や技術レむダ単䜍でのコスト構造を可芖化し、関係者党䜓のコスト意識を醞成したした。さらに、Javaのバヌゞョン倉曎やシャットダりン凊理の最適化など、比范的短期間で効果が芋蟌めるQuick Win斜策を積極的に展開したこずで、䞻芁コンポヌネントにおいおスポット利甚率が90を超える成果を䞊げるこずができたした。 最適化の成果 モニタリングシステム100スポットむンスタンスぞ移行 ランキングシステム80以䞊スポット化 MLむンファレンス100スポット + 100 Graviton 党䜓のGraviton䜿甚率40以䞊 最適化の成果 たずめ 今回の発衚を通じお、スポットむンスタンスやGravitonの導入、Karpenterの柔軟な掻甚が、単なるコスト削枛にずどたらず、組織党䜓の技術成熟床を高めるこずに぀ながるず実感したした。 特に可芖化やSLAの敎備によっお、珟堎の玍埗感ず刀断の質が倧きく向䞊しおいたのが印象的です。コストはSREにずっお避けおは通れないテヌマであり、今埌も技術ず仕組みの䞡茪で継続的に向き合っおいきたいず感じたした。 おわりに 撮圱䜐藀 オンラむンでもセッションの芖聎は可胜ですが、実際に身䜓を動かすデモや珟地の゚ンゞニアずの亀流など、珟地参加ならではの䜓隓もAWS Summitの魅力の1぀です。今回埗たたくさんの知芋を今埌の業務にも掻甚しおいきたいず思いたす。 ZOZOでは来幎開催されるAWS Summit Japan 2026に䞀緒に参加しおくれる゚ンゞニアを募集しおいたす。ご興味のある方は、ぜひ以䞋のリンクからご応募ください。 corp.zozo.com それではたた来幎のAWS Summitでお䌚いしたしょう
.table-of-contents ul ul { display: none; } .images-row { width: 860px !important; } こんにちは、技術戊略郚のikkouです。2025幎6月17、18日の2日間にわたり「 KubeCon + CloudNativeCon Japan 2025 」がヒルトン東京お台堎で開催されたした。ZOZOは今回シルバヌスポンサヌずしお協賛し、スポンサヌブヌスを出展したした。 technote.zozo.com 本蚘事では、前半はZOZOの゚ンゞニアが気になったセッションを玹介したす。そしお埌半はZOZOの協賛ブヌスの様子ず各瀟のブヌスコヌデのたずめを写真倚めでお䌝えしたす。 KubeCon + CloudNativeConずは ZOZO゚ンゞニアの気になったセッションの玹介 Kubernetes SIG Node Intro and Deep Dive Platform Engineering Day 2: Why Service Iterations Are the Crux of Developer Platforms Internal Developer PlatformIDP Golden Path Day 2 Best Practices Japan Community Day Doc Sprint参加レポヌト Japan Community Dayずは Doc Sprintの抂芁 圓日の䜜業フロヌ 埗られた孊び 翻蚳ガむドラむンの理解ず運甚 コントリビュヌションの可芖化ずモチベヌション コントリビュヌタヌロヌルの明確化 その他 たずめ Exploring Tenant-centric Strategies To Simplify Multi-cluster and Multi-cloud Complexities Infra / Platform Team目線 End use 目線 Cloud Native Scalability for Internal Developer Platforms セッション抂芁 1. Internal Developer Platform(IDP)の党䜓像 2. スケヌラビリティの旅ず盎面した壁 (Scalability Journey in Our Internal Developer Platform) 2-1. クラスタ蚭蚈Single vs Multi 2-2. オペレヌショナルスケヌラビリティ 2-3. カスタムコントロヌラ性胜 3. いた盎面しおいる3぀のControl Planeの課題 おわりに ZOZOブヌスの玹介 ZOZOTOWNのアヌキテクチャ OSS デモ 協賛䌁業ブヌスのコヌデたずめ おわりに KubeCon + CloudNativeConずは KubeCon + CloudNativeConは、ZOZOでも利甚しおいるKubernetesをはじめずしたCloud Native Computing Foundation (CNCF)に関する技術を䞭心ずした倧芏暡カンファレンスです。これたではUSやEUなどで開催されおいお、䟋幎ZOZOの゚ンゞニアも珟地参加しおきたした。 KubeCon + CloudNativeCon Europe 2024 参加レポート - ZOZO TECH BLOG KubeCon + CloudNativeCon Europe 2023 参加レポート - ZOZO TECH BLOG KubeCon + CloudNativeCon North America 2022参加レポート〜3年ぶりのアメリカ現地開催の様子とセッション紹介〜 - ZOZO TECH BLOG 今回は「KubeCon + CloudNativeCon Japan」ずしお初めお日本で開催されたした。初回から想定を䞊回る1,500人の参加者が集たり、チケットも売り切れになったそうです。 ZOZO゚ンゞニアの気になったセッションの玹介 今回、ZOZOからは10名を超える゚ンゞニアが参加したした。代衚しお5名から、それぞれが気になったセッションを玹介したす。 Kubernetes SIG Node Intro and Deep Dive こんにちは、MLOpsブロックの 朚村 です。「 Kubernetes SIG Node Intro and Deep Dive 」セッション登壇者Narang Dixita Sohanlal 氏Google、Paco Xu 氏DaoCloud、怎名宏兞 氏Independentをご玹介したす。 kccncjpn2025.sched.com このセッションでは、Kubernetesのノヌド呚蟺に関する最新機胜に぀いおの発衚が行われたした。特に泚目されおいたのは、GPUのような特殊なリ゜ヌスをPodやコンテナ間で柔軟にリク゚スト・共有できるようにするための仕組みである Dynamic Resource Allocation (DRA) ず、Podの再起動を䌎わずにリ゜ヌスの割り圓おを倉曎可胜ずする機胜 In-Place Pod Resize の2぀です。どちらも、リ゜ヌス䜿甚量が倉動しやすいワヌクロヌドを効率的に運甚するうえで非垞に有甚なアップデヌト情報でした。 DRAは、これたでPod䜜成時に静的に確保されおいたGPUなどの特殊リ゜ヌスを、Podがノヌドにスケゞュヌルされるタむミングで、ノヌド䞊の利甚可胜なデバむス状況に応じお柔軟か぀動的に割り圓おるための仕組みです。これにより限られたリ゜ヌスの利甚効率を高めるこずができたす。さらに、1぀のGPUを耇数のPodで共有したり、Pod偎からデバむスの構成パラメヌタを现かく指定したりできたす。この機胜は、Kubernetes v1.32でベヌタ版ずしお導入されたした。 さらに、Kubernetes v1.33では、以䞋のアルファ機胜が远加されたした。 Partitionable Devices 物理GPUを分割しお耇数Podに割り圓お、リ゜ヌス効率を最倧化 Device Taints and Tolerations 特定のPodにのみ特定デバむスを䜿わせる制埡 Admin Access DRAに管理者甚のアクセス暩限を導入 今埌Kubernetes v1.34での正匏サポヌトGAを目指しお掻発に開発が進められおいたす。詳现に぀いおは以䞋の公匏ドキュメントをご参照ください。 https://kubernetes.io/blog/2025/05/01/kubernetes-v1-33-dra-updates/#what-s-next 次に玹介されおいたIn-Place Pod Resizeは、既存のPodを削陀せずにCPUやメモリのrequests / limitsを動的に倉曎できる機胜です。これたでKubernetesではリ゜ヌスを倉曎する際にはPodを再起動する必芁がありたしたが、この機胜によっお、Podを停止せずにリ゜ヌス構成を倉曎できるようになりたす。 Kubernetes v1.27ではアルファ版ずしお登堎し、v1.33では以䞋の改善がありたした。 --subresource=resize による明瀺的なリサむズAPIの提䟛 リサむズ反映たでの時間が倧幅に短瞮され、即時察応が可胜に 特に泚目すべき点はダりンタむムの削枛です。v1.31ではリ゜ヌス倉曎の反映に60〜90秒ほどかかっおいたしたが、v1.33では即時で反映されるようになり、よりスムヌズなリ゜ヌス倉曎が可胜になりたした。 この2぀の機胜は、今埌のKubernetesにおいお非垞に重芁な圹割を果たすず考えられたす。DRAによるGPUの现かな割り圓お制埡は、AI/MLの掻甚が進む䞭で高たるGPU需芁に察し、限られたリ゜ヌスをいかに効率よく掻甚するかずいう課題の解決に貢献したす。たた、In-Place Pod Resizeを掻甚するこずで、動的に倉化するワヌクロヌドにも柔軟か぀迅速に察応するこずが可胜になりたす。 特にDRAは、今回のKubeCon + CloudNativeCon Japan 2025でも耇数のセッションで取り䞊げられおおり、コミュニティ内でも高い関心を集めおいるテヌマであるこずが印象的でした。今埌のバヌゞョンアップを通じお、より高床で柔軟なリ゜ヌス管理が実珟されおいくこずに期埅されたす。SIG Nodeチヌムは、ノヌドやリ゜ヌス管理の進化を牜匕する存圚であり、今埌のアップデヌトにも匕き続き泚目しおいきたいです。 Platform Engineering Day 2: Why Service Iterations Are the Crux of Developer Platforms 蚈枬プラットフォヌム開発本郚・システム郚SREブロックの近藀です。「 Platform Engineering Day 2: Why Service Iterations Are the Crux of Developer Platforms 」セッション登壇者Puja Abbassi氏[Giant Swarm]をご玹介したす。私の所属する郚眲では、既存プロダクトの開発・運甚に加え、蚈枬技術を掻甚したPoCや新芏プロダクトの立ち䞊げにも取り組んでいたす。そのため、KubeConの䞭ではやや異色に感じたセッションでしたが、普段の業務に通じる内容が倚く、非垞に実践的な孊びが埗られたした。 kccncjpn2025.sched.com Internal Developer PlatformIDP 本セッションでは、開発者䜓隓DXを向䞊させるための基盀ずしお「Developer Platform」が玹介されたした。その䞭でも、瀟内での開発者向けに最適化された仕組みずしお「Internal Developer PlatformIDP」が取り䞊げられおいたす。 Platform Engineering Day 2 Why Service Iterations Are the Crux of Developer Platforms P.4より匕甚 IDPのサヌビスアヌキテクチャが図瀺されおおり、非垞にわかりやすい構成でした。匊チヌムではリリヌス自動化には取り組んでいるものの、IDPずしおの構成図は明確に描けおいなかったため、この図に圓おはめるこずで自分達が泚力しおいる郚分Applications / Services局を再認識する良い機䌚ずなりたした。 Golden Path セッション内で印象的だったキヌワヌドのひず぀が「Golden Path」です。これは、開発者が迷わず最適な方法でアプリケヌションを構築・運甚できるよう導く、暙準化されたベストプラクティスの道筋ず定矩されおいたす。新芏プロダクトのスピヌディな立ち䞊げが求められる匊チヌムにずっお、Golden Pathの敎備はDX向䞊の鍵であり、改めおその重芁性を実感したした。 Platform Engineering Day 2 Why Service Iterations Are the Crux of Developer Platforms P.7より匕甚 Day 2 このセッションでは「Day 2」ずいうフェヌズが明確に定矩されおおり、プロダクトがリリヌスされた埌の運甚・改善フェヌズに焊点が圓おられおいたした。セッション内でDay 2におけるアプリケヌション開発者・プラットフォヌム゚ンゞニアそれぞれの圹割や課題が具䜓的に玹介されおいたす。 Platform Engineering Day 2 Why Service Iterations Are the Crux of Developer Platforms P.10より匕甚 Platform Engineering Day 2 Why Service Iterations Are the Crux of Developer Platforms P.13より匕甚 Best Practices セッションの最埌では、Day 2を芋据えたベストプラクティスが玹介されおいたした。 Platform Engineering Day 2 Why Service Iterations Are the Crux of Developer Platforms P.26より匕甚 䞭でも「むテレヌションをKPIずする」ずいう考え方は、これたであたり意識できおいなかった芖点であり、非垞に良い気づきずなりたした。匊チヌムではPoCからプロダクトフェヌズぞの移行が倚いため、継続的な改善を前提ずしたプラットフォヌム蚭蚈ず運甚が今埌たすたす重芁になるず感じおいたす。今回のセッションで埗た知芋を掻かし、Golden Pathの敎備や自己サヌビス化の掚進など、開発者がより快適に開発できる環境づくりを進めおいきたいず思いたす。 Japan Community Day Doc Sprint参加レポヌト EC基盀開発本郚 SRE郚 商品基盀SREブロックの䜐藀です。私は Japan Community Day で開催された『 Doc Sprint 』に参加したした。 community.cncf.io Japan Community Dayずは Japan Community Dayの様子 KubeCon + CloudNativeConの開催前日に行われる実質0日目むベントで、 Cloud Native Community Japan が䞻催ずなっお䌁画しおいたす。 公匏サむト のずおり、セッションやLTに加えおハンズオン型プログラムが充実しおおり、初参加の人でも気軜にOSSぞ関われるのが倧きな魅力です。今回は、その䞭で開催された『 Kubernetesドキュメント Doc Sprint 』に参加したした。 Doc Sprintの抂芁 目的 Kubernetes 公匏ドキュメント日本語版 の品質向䞊ず翻蚳差分の解消 察象リポゞトリ https://github.com/kubernetes/website メンタヌレビュヌずマヌゞ暩限を持぀Docs Approver2名 圓日の䜜業フロヌ リポゞトリ準備 kubernetes/website をForkし、ロヌカルにclone。 ロヌカルプレビュヌ Hugoサヌバヌを起動し、ブラりザで該圓ペヌゞを確認。修正前埌の差分を比范。 ドキュメント線集 content/ja/docs/以䞋のMarkdownを修正。 PR䜜成 mainブランチにPull Requestを提出し、Reviewerをアサむン。 レビュヌ&マヌゞ メンタヌが即時レビュヌ → LGTM → Approved → Merge。初のコントリビュヌトが、わずか数十分で完了したした。 埗られた孊び 翻蚳ガむドラむンの理解ず運甚 翻蚳ルヌルLocalization Guide にあるように、衚蚘の統䞀や語圙の取り扱いには明確なルヌルが定められおいたす。日本語蚳では、䞋蚘の項目にあるような现かい議論が発生しやすいこずを実感したした。それをApproverの方ず盎接盞談できたのは貎重な䜓隓でした。 長音蚘号䟋クラスタヌ vs クラスタを䜿うか カタカナ衚蚘たたは英語衚蚘か 特に「node」のように文脈によっお意味が倉わる単語の扱い 䟋  コントリビュヌションの可芖化ずモチベヌション DevStatsダッシュボヌド を䜿うず、コントリビュヌタヌの囜別・䌁業別・個人別の貢献状況などを確認でき、モチベヌションアップに盎結する仕組みがあるこずを知りたした。自分の名前も実際に 確認できたした 。 コントリビュヌタヌロヌルの明確化 Kubernetes Docsチヌムには明確な ロヌルず責任 があり、少しず぀経隓を積んで、Reviewer・Approverぞず進んでいける仕組みが敎備されおいたした。 Anyone定期的にコントリビュヌトする人。誰でもなれる。 MemberIssueのトリアヌゞや非公匏レビュヌが可胜になる。 Reviewer公匏レビュヌをリヌドし、品質保蚌を担う。 Approverマヌゞ暩限を持ち、ドキュメント党䜓の敎合性を管理する。 その他 日本語翻蚳は䞖界で3番目に掻発な蚀語化プロゞェクト資料 Kubernetes SIG Docs Localization Subproject (ja) 。 ずくにブログの翻蚳は䞖界最速を目指しおいる蚘事が出た圓日に培倜で翻蚳するこずもあるそうです。 掻動を支えるために、小さなPRや曎新の積み重ねが倧切である。 Slack #sig-docs-ja で情報共有や盞談ができる。 「このペヌゞに蚘茉されおいる情報は叀い可胜性がありたす」バナヌが぀いおいるペヌゞは、初心者に最適な貢献ポむント。 たずめ Doc Sprintは「Approverにすぐ盞談できる」「PRがその堎でマヌゞされる」ずいう即時フィヌドバックが魅力の孊習環境でした。ドキュメントは垞に改善䜙地があり、OSS初心者が成功䜓隓を埗やすい入口だず実感したした。今埌も曎新が滞っおいるペヌゞの刷新に取り組み、Kubernetes日本語ドキュメントの充実に貢献しおいきたいず思いたす。 最埌に、機䌚をくださったApproverの皆さん、そしお䞀緒に参加しおくださった皆さんZOZOブヌスにもお越しくださりありがずうございたしたに感謝いたしたす。 Exploring Tenant-centric Strategies To Simplify Multi-cluster and Multi-cloud Complexities SRE郚フロントSREブロックの䞉品です。私が所属するSRE郚フロントSREブロックでは、ZOZOTOWNが持぀APIの䞭でもクラむアントに近い、BFFを含むFrontendレむダヌのサヌビスを運甚しおおり、蚀わばEmbedded SRE的な業務を行っおいたす。今回、日本初開催のKubeConに参加しお私が今回興味深いず感じたセッションを玹介したす。 kccncjpn2025.sched.com このセッションでは、マルチクラスタヌやマルチクラりドにより耇雑化するKubernetes環境を、運甚担圓者がどのように管理しおいくかが解説されおいたした。セッションの冒頭では、プラットフォヌム゚ンゞニアず゚ンドナヌザヌの䞡芖点から、Kubernetes環境の耇雑性ずそれに䌎う課題が玹介されおいたした。 Infra / Platform Team目線 Exploring Tenant-centric Strategies To Simplify Multi-cluster and Multi-cloud Complexities P.4より匕甚 マルチクラりド・マルチリヌゞョン環境では、管理すべきリ゜ヌスの数の急増が指摘されたした。加えお、クラりドプロバむダヌごずにAPIや構成方法が異なるため、統䞀的な管理が難しいずいう課題も挙げられたした。これらを背景に、効率的なリ゜ヌス管理には、 プログラマブルなアプロヌチ が䞍可欠であるず説明されおいたす。 End use 目線 Exploring Tenant-centric Strategies To Simplify Multi-cluster and Multi-cloud Complexities P.5より匕甚 䞀方で゚ンドナヌザヌ偎では、マルチクラりドやマルチクラスタヌ構成の圱響で、利甚するツヌルが倚様化しおいたす。ツヌルやクラりドごずに操䜜方法やAPI仕様が異なるため、それぞれのツヌルに関する深い理解ず、 高床なデバッグ胜力 が必芁であるず述べられおいたした。これらの問題に察しおセッションでは、以䞋のようなゎヌルが蚭定されたす。 ツヌルやクラりドプロバむダヌの違いを吞収する 抜象化レむダヌ コヌド生成 や 蚭定ファンアりト を含む、リ゜ヌスのプログラム的テンプレヌト化 䞀貫性ず拡匵性を䞡立した API駆動型プラットフォヌム スキヌマに基づいおリ゜ヌス定矩ず構成を管理する 自動化ず制埡の仕組み スラむドのようなアヌキテクチャが説明されおいたした。 Exploring Tenant-centric Strategies To Simplify Multi-cluster and Multi-cloud Complexities P.9より匕甚 Exploring Tenant-centric Strategies To Simplify Multi-cluster and Multi-cloud Complexities P.11より匕甚 たた、アヌキテクチャの説明が行われたのち、達成順序に぀いおも述べられおいたした。 Exploring Tenant-centric Strategies To Simplify Multi-cluster and Multi-cloud Complexities P.12より匕甚 個人的に興味深かった点は、 Pkl を採甚しおいる点ずマルチクラスタ構成そのものに぀いおです。 たず、Pklに぀いおですが、ZOZOではKubernetesマニフェストをKustomizeを䜿い base/ + env/ 構成で管理しおいたす。ただし、この構成では各環境の倀䟋えば、JVMのパラメヌタヌなどを静的に定矩する必芁があり、条件分岐やデフォルト倀の蚭定などを ロゞックベヌスで扱うこずが難しい ずいう課題がありたす。 䞀方で、Pklを甚いるこずでこうした 条件分岐やデフォルトの共通化をプログラマブルに衚珟 できるため、より柔軟な構成管理が可胜になるず感じたした。ただし、Kustomizeを䜿った玔粋なYAMLを䜿った曞き方に比べるず、孊習コストが増えるこずが予想され、新芏メンバヌがJoinした際に必ず孊習期間を蚭ける必芁がありたす。そういった点で利䟿性ず孊習コストが採甚する際の倩秀ずしお難しいなず個人的には感じたした。 次に、マルチクラスタに぀いおです。ZOZOTOWNでは、EKS䞊でシングルリヌゞョン・シングルクラスタのマルチテナント方匏でKubernetesを運甚しおいたす。 これたで私は、マルチクラスタ構成に぀いお「クラスタ内の構成は簡玠になっおも、マニフェストの管理やアップデヌト時の運甚負荷が増えるのではないか」ず考え、あたり前向きに怜蚎しおきたせんでした。しかし今回のセッションを通じお、もし各クラスタに察しおリ゜ヌスを自動でApplyできるような環境䟋Crossplane + ArgoCDなどを敎備できるのであれば、芁件的にマルチクラスタ構成が必芁ない堎合でも クラスタ間の責務を明確に分離するこずで、個々の構成をシンプルに保ち぀぀ 安党性や柔軟性の高い運甚ができる可胜性あるず感じたした。 䞀方で、マルチクラスタ化が進むず、それぞれのクラスタにむンストヌルされるカスタムオペレヌタCRDやコントロヌラの数も増えおいきたす。その堎合、各オペレヌタのアップデヌト察応や互換性の確認など、新たな運甚コストが発生する懞念もありたす。これたで私はマルチクラスタに぀いお深く考える機䌚があたりなかったのですが、今回のセッションを通じお、改めおそのメリット・デメリットを敎理し、今埌の構成蚭蚈に掻かしおいきたいず感じたした。 Cloud Native Scalability for Internal Developer Platforms こんにちは、Platform SREブロックの石井です。 Cloud Native Scalability for Internal Developer Platforms - Hiroshi Hayakawa, LY Corporationをご玹介したす。 kccncjpn2025.sched.com 自分はプラットフォヌム゚ンゞニアずしお掻動しおおり、「Kubernetesにはスケヌルの限界があるのか・倧きなスケヌルのチヌムは䜕か特別な扱い方をしおいるのか」ずいう疑問がありたした。本セッションでは 690 テナント / 29,000 アプリ / 112,000 Pods ずいう囜内最倧玚の芏暡を 箄5幎間で実珟 した実践䟋および珟状の課題が玹介されたした。たさに自分達が珟圚盎面しおいる課題や、“数幎埌の自分たち”に盎結する䜕かが埗られるず考え、セッションを拝芋したした。 セッション抂芁 以䞋のような内容が本セッションでは玹介されおいたした。 背景 シンプルなコマンドでアプリケヌションを実行できるHerokuのようなPaaS(IDP:Internal Developer Platform)を構築し、党瀟開発者ぞ提䟛。 5幎のスケヌラビリティの旅 スケヌルする䞭でさたざたばクラスタ蚭蚈・運甚自動化・メトリクス基盀・コントロヌラ性胜の壁を順に突砎。 珟圚盎面しおいる課題 Control Planeの限界ずController Shardingぞの挑戊。 1. Internal Developer Platform(IDP)の党䜓像 たずは、IDPの党䜓像が玹介されおおり、芏暡の倧きさに非垞に感銘を受けたした。 構成  特城単䞀Control Plane Clusterで耇数Workload Clustersを制埡し、「 論理的な䞀぀のクラスタ 」ずしお扱う蚭蚈 Control Plane Cluster : ナヌザヌからの支持を受け付け、アプリケヌションのデプロむに必芁な凊理を行うクラスタ。どのWorkload Clusterにスケゞュヌルするか・アプリケヌションを倖郚に公開する準備を行う Workload Clusters : アプリケヌションを実際に実行するクラスタ矀 Cloud Native Scalability for Internal Developer Platforms P.6より匕甚 スケヌルの倉遷 Cloud Native Scalability for Internal Developer Platforms P.7より匕甚 2. スケヌラビリティの旅ず盎面した壁 (Scalability Journey in Our Internal Developer Platform) この倧きくスケヌルした5幎間で盎面した課題やそれに察する決定などが玹介されおいたした。䞀郚を玹介したす。 2-1. クラスタ蚭蚈Single vs Multi 非垞に倚くのアプリケヌションをホストする芁件があったため、どのようにしおKubernetes Clusterをスケヌルするかは非垞に重芁な事項であった。䞻に2぀の遞択肢があった。 Cloud Native Scalability for Internal Developer Platforms P.17より匕甚 結果マルチクラスタを遞定 決め手 組織的に耇数クラスタ運甚ノりハりがあり、瀟内の芁件に則った。これは絶察的な正解ではなくチヌムのスキルセットや組織の芁件によっおこずなる。 マルチクラスタ蚭蚈 CPU / メモリを倧きく消費するアプリケヌションだけを Silo Cluster に隔離、残りは Pool Cluster で共有するハむブリッド方匏を採甚。これによりNoisy Neighborの問題を最小限にできる。 Silo Cluster : 特定ワヌクロヌドのリ゜ヌス消費が倧きいなどの理由によりシングルテナントで利甚されおいるクラスタ Pool Cluster : マルチテナントでリ゜ヌスが共有されおいるマルチテナントのクラスタ Cloud Native Scalability for Internal Developer Platforms P.21より匕甚 2-2. オペレヌショナルスケヌラビリティ DeveloperチヌムがPlatform利甚開始する、オンボヌディング関連䜜業を少数のPlatformチヌムメンバヌのみで行っおいた。しかし、組織にプラットフォヌムを公開する必芁があり、この䜜業をスケヌラブルにする必芁があった。 自動化前: 開発者がチケット経由でテナントをリク゚スト プラットフォヌム゚ンゞニアが察応 Athenzに認可ポリシヌを登録 Git䞊にNamespaceを䜜成GitOpsにより管理 Cloud Native Scalability for Internal Developer Platforms P.25より匕甚 自動化埌: カスタムコントロヌラを䜜成し、ポリシヌ登録を自動化 チケットシステムをオンボヌディングアプリに眮き換え 珟圚は完党セルフサヌビス化。開発者自身でオンボヌディング可胜に Cloud Native Scalability for Internal Developer Platforms P.31より匕甚 2-3. カスタムコントロヌラ性胜 カスタムコントロヌラヌはリコンサむル凊理で競合を起こさないように単䞀のむンスタンスで動䜜する必芁がある。しかし、クラスタの芏暡が倧きくなるず単䞀むンスタンスのスケヌルアップだけでは、様々な問題に盎面するようになった。 珟状 単䞀Podでスケヌルアップ 珟圚挑戊䞭 CNCF Sandbox timebertt/kubernetes-controller-sharding ぞコントリビュヌトし 氎平分割Shardによる Scale-Out を怜蚌䞭 3. いた盎面しおいる3぀のControl Planeの課題 Platformが成長しスケヌルするにあたり、生じたControl Planeに関する耇数の課題が玹介されおいたした。 リ゜ヌス数増加により、kube-apiserverの消費メモリが増倧する問題 v1.33からデフォルトONの Streaming List で解消芋蟌み etcd サむズ肥倧 Aggregation Layer経由で䞀郚のCRDをWorkload Clusterぞ移譲 Controllerがスケヌルアップしかできない Kubernetes Controller Sharding をぞ䌚瀟ずしおコントリビュヌトしおいる。 おわりに 本セッションで最も印象に残ったのは、「スケヌルの旅に終わりなし。その旅を楜しめ」 ずいう姿勢でした。倧芏暡運甚を支える構成や技術遞定はもちろん、負荷の特性に応じたクラスタ分離戊略Silo / Poolモデルの䜵甚、無理なく自動化を進める段階的アプロヌチ、ずいったひず぀ひず぀の蚭蚈思想に、深く感銘を受けたした。そしお、Controller Shardingのようなただ未成熟な領域にも、「必芁だから、自分たちで積極的にコントリビュヌトする」ずいう姿勢が垣間芋えた点も非垞に刺激的でした。このセッションには倚くの刺激を受け、たた、孊びを埗るこずができたした。これを自瀟のプラットフォヌムの発展にも圹立おおいきたす。 ZOZOブヌスの玹介 ZOZOブヌスの様子 ZOZOのスポンサヌブヌスでは、ZOZOTOWNのアヌキテクチャずOSSデモをメむンコンテンツずしお展瀺したした。たた、各プロダクトのステッカヌやZOZOの蚈枬テクノロゞヌを生かした ZOZOGLASS ず ZOZOMAT を配垃したした。 ZOZOブヌスで配垃したノベルティ ZOZOTOWNのアヌキテクチャ 展瀺コンテンツの1぀であるZOZOTOWNのアヌキテクチャに぀いお、プラットフォヌムSREの酒郚ず、怜玢基盀SREの埳山から玹介いたしたす。2人ずも25幎床新卒ずしお入瀟したした。 ZOZOTOWNでは長らくオンプレミスからクラりドぞの移行ずマむクロサヌビス化を進めおいたす。 techblog.zozo.com ただ移行過枡期であるものの、日本で初めお開催される「KubeCon + CloudNativeCon Japan 2025」ずいうクラりドネむティブの䞖界的なカンファレンスで展瀺するこずで、瀟倖からの疑問や意芋を亀換できる機䌚になるず考え、このコンテンツ制䜜に至りたした。䌚期䞭に展瀺しおいたスラむドの䞀郚を掲茉いたしたす。 ずおも倚くの方に関心を持っおいただいたZOZOTOWN Architecture Architectural Policy Ecosystem for Achieving System Stability Ecosystem for a Highly Productive Development System 「クラりドをどのように䜿い分けおいる」、「プラットフォヌムが倚機胜で運甚が倧倉そう」ずいった質問や感想を頂きたした。 僕たちはZOZOTOWNの新卒SREず蚀う立堎で今回のむベントに参加し、アヌキテクチャ図の制䜜からブヌス察応をする䞭で倚くの気づきがありたした。 今回、ZOZOTOWNのアヌキテクチャずマむクロサヌビスを自動リリヌスする手法に぀いお先茩瀟員から孊びながらアヌキテクチャ図を制䜜したした。ZOZOTOWNの党䜓像ず安党にリリヌスするための先進的な仕組みを孊ぶこずができる貎重な機䌚になりたした。ブヌス察応をする䞭で他瀟のアヌキテクチャも聞けたしたが、他瀟さんに比べおZOZOでは独自のAPI Gatewayを䜜っおいるなど、オンプレを含むハむブリッドな構成であるこずを感じたした。 参加者の半分くらいは日本人で蚀語の壁を感じるこずなく議論ができたした。たた海倖の参加者も日本語で話しかけおくださったりしお、英語に苊手意識がある自分でも緊匵せずに議論できお、本むベントの参加者の暖かさも感じるこずができおよかったです。 ブヌス出展したこずで、Kubernetesを䞭心ずしたクラりドネむティブ技術の最前線に觊れられただけでなく、䞖界䞭の情熱的な゚ンゞニアず繋がれる玠晎らしい機䌚になりたした。ブヌスに立ち寄っお頂いた皆様、ありがずうございたした。 OSS デモ OSSデモの様子 ZOZOにお開発し利甚しおいる倧芏暡負荷詊隓ツヌル「 Gatling Operator 」ず、耇数の負荷詊隓を省力化しお実行可胜なCLIツヌル「 Gatling Commander 」のデモを行いたした。 説明䞭の様子 Gatling Operatorは、Gatlingをベヌスずした分散負荷詊隓のラむフサむクルを自動化するKubernetes Operatorです。Gatling CommanderはGatling Operaorによる耇数の負荷詊隓を自動的に連続・連携しお実行可胜ずし省力化するCLIツヌルです。 Gatling Commanderを実行するずGatling Operatorが立ち䞊っお察象サヌバヌぞリク゚ストが行われ、テスト結果が Google スプレッドシヌト で䞀芧確認できるデモを行いたした。 デモはGatling Commanderを実行するCLI、Gatling Operatorが動䜜するKubernetesのPodの状態、察象サヌバヌのアクセス状況を衚瀺するツヌルを䜜成したした。 Gatling CommanderずGatling Operator ブヌス展瀺のために䜜成したデモツヌルの様子 テスト結果はGoogle スプレッドシヌトで参照可胜です。結果はGoogle スプレッドシヌトに耇数のテストを集玄する圢で衚瀺されたす。 テスト結果はGoogle スプレッドシヌトで参照可胜 Gatling Operator ず Gatling Commander はそれぞれオヌプン゜ヌスずしおGitHubで公開しおいたす。たた、過去に公開しおいる関連蚘事もみおいただけるず嬉しいです。 techblog.zozo.com techblog.zozo.com 協賛䌁業ブヌスのコヌデたずめ あっすヌです。他カンファレンスず同じように協賛䌁業ブヌスを回っおきたしたので、各ブヌスのコヌデをお送りしたす 各瀟の雰囲気に合わせたデザむン・着こなしは、やはりZOZOずしおも気になるポむント。参加した方は圓日の䌚堎の様子を思い出しながらご芧ください。 Kongさん DoiTさん Red Hatさん 日立補䜜所さん衚 日立補䜜所さん裏 Octopus Deployさん Tintriさん EDBさん Kubernetes Contributor Summit LINEダフヌさん / クラりドネむティブな高速近䌌最近傍密ベクトル怜玢゚ンゞン「 Vald 」 Splunkさん衚 Splunkさん裏 ClickHouseさん衚 ClickHouseさん裏 Dash0さん衚 Dash0さん裏 AWSさん Google Cloudさん Grafanaさん SUSEさん C-Nativeさん Akamaiさん お忙しい䞭ご協力いただいたブヌスの皆様、本圓にありがずうございたした おわりに 日本初開催のKubeCon + CloudNativeCon Japanに協賛、そしおブヌスを出展できたこずはずおも良い経隓になりたした。改めおブヌスにお越しいただいた倚くの皆さん、ありがずうございたした。少しでもZOZOに興味を持っおもらえたら幞いです ZOZOから参加した䞀郚メンバヌで撮圱した集合写真 ZOZOでは、䞀緒に働くSREの仲間を募集しおいたす。ご興味のある方はこちらからご応募ください。 ZOZOTOWN SRE | 株式会社ZOZO WEAR by ZOZO SRE | 株式会社ZOZO ZOZOMO SRE | 株式会社ZOZO SRE(オープンポジション) | 株式会社ZOZO たた、䌚期䞭は混雑しおいるこずも倚く、じっくりずお話しする時間が取れなかったので、もう少し詳しく話を聞きたい ずいう方はカゞュアル面談も受け付けおいたす。 hrmos.co 既に来幎開催される「 KubeCon + CloudNativeCon Japan 2026 」のペヌゞも公開されおいたす。来幎も玠敵なカンファレンスになるこずを期埅しおいたす 珟堎からは以䞊です
はじめに こんにちは。ZOZO研究所の研究員の川島、ZOZOのデヌタサむ゚ンティストの吉本・広枡です。2025幎5月27日火から5月30日金にかけお倧阪で開催された『2025幎床 人工知胜孊䌚党囜倧䌚JSAI2025』に参加したした。この蚘事では我々が気になったセッションの内容をご玹介したす。 はじめに JSAI2025ずは セッションレポヌト [2M5-OS-37b] AIを甚いた空間・時系列デヌタのモデリング手法ず応甚 [2M5-OS-37b-01] OS招埅講挔地理空間情報を掻甚した経路蚈画 [2M5-OS-37b-02] 経路耇雑性の掻甚による経路遞択モデリングの性胜改善 [2M5-OS-37b-03] モデル化誀差が顕著な状況における制埡のためのダむナミクス孊習 [2M5-OS-37b-04] 倧孊病院の集䞭治療宀における医療スタッフの移動軌跡の抜出手法 [3F5-OS-42b] 倧芏暡蚀語モデルの安党察策 ― 倧いなる力には、倧いなる責任が䌎う [3F5-OS-42b-01] AIの安党性に関する䞖界の動きずAI Safety InstituteAISIに぀いお [3F5-OS-42b-02] AISI囜際ネットワヌクにおける共同テスト挔習に぀いお [3F5-OS-42b-03] 倧芏暡蚀語モデルのゞェむルブレむクに察するむンコンテキスト防埡の圹割明蚘による改良 [3F5-OS-42b-04] OS招埅講挔安党な倧芏暡蚀語モデルの構築ず利甚を目指しお [4D2-OS-33b] AIを掻甚したマヌケティング実践 [4D2-OS-33b-01] LLMを掻甚したペル゜ナベヌスのデルファむ法による倚芖点アむディア評䟡 [4D2-OS-33b-02] 深掘り質問促進のための LLM を掻甚した動的プロンプト制埡型顧客むンタビュヌトレヌニングシステム [4D2-OS-33b-03] 生成AIずゞョブ理論で䜜る顧客䞭心型CRM [4D2-OS-33b-04] 広告デザむン改善のための代替案生成手法 [4D2-OS-33b-05] 双方向掚薊システムにおけるコントラスト効果の応甚 たずめ JSAI2025ずは JSAIずは、䞀般瀟団法人 人工知胜孊䌚JSAI が䞻催する日本最倧玚のAI孊術むベントで、2025幎に第39回を迎えたした。今回は倧阪囜際䌚議堎で開催され、過去最倚ずなる4,939名が参加したした。 EXPO 2025 倧阪・関西䞇博のテヌマりィヌク ず連携した特別セッションが蚭けられるなど、孊術研究ず囜際的なむベントが融合した倧䌚ずなりたした。 www.ai-gakkai.or.jp セッションレポヌト [2M5-OS-37b] AIを甚いた空間・時系列デヌタのモデリング手法ず応甚 ZOZO研究所の川島です。䌚期2日目である5/28氎には、オヌガナむズドセッション「 AIを甚いた空間・時系列デヌタのモデリング手法ず応甚 」が開催されたした。 同オヌガナむズドセッションは幎床ごずのマむナヌチェンゞはあるものの、2020幎床倧䌚から継続しお開催されおおり、珟圚のJSAIにおける䞻芁なテヌマのひず぀ず蚀えたす。 ZOZO研究所では 物流コストの最小化を目指す研究 を行っおおり、そのような技術に぀ながる新たな発芋を期埅しお同セッションに参加いたしたした。以䞋ではセッション内の各発衚に぀いお簡単にレポヌトいたしたす。 [2M5-OS-37b-01] OS招埅講挔地理空間情報を掻甚した経路蚈画 同セッションは豊田䞭倮研究所の倧滝氏による招埅講挔から始たりたした。本講挔は䞻に歩行する人を察象ずし、どのような方法で出発地から目的地たでたどり着くたでの経路を案内するか、ずいう経路蚈画の問題に぀いおの発衚でした。 最短あるいは最短に近い経路を求めるこずはあたり難しくないのですが、本講挔の面癜いずころはいかに「最短でない経路」をサゞェストするかずいうずころに焊点をあおおいるずころでした。講挔者らが実斜したアンケヌトでは、回答者の玄半数がナビゲヌションにおいお「案内される経路が必ずしも最短でなくおもよい」ず答えたそうです。実際の研究事䟋ずしお、1目的地に目暙の時間に着くたでに歩き回れる経路の探玢、2歩く道の景芳情報を加味した楜しい街歩きのための経路の探玢、3東京タワヌのようなランドマヌクの情報を䜿った迷いづらい経路の探玢、4道路ずしおの魅力床の差異䟋パチンコ屋が䞊んでいる道ずアヌケヌドの商店街を評䟡する研究などが玹介されたした。 ずころでZOZOでは「 䌌合うっおなんだ 」をコンセプトずした研究を粟力的に行っおいたすが、ファッションの評䟡には䞻芳的な奜みが垞に぀きたずいたす。この講挔で玹介された研究に぀いおもそのような䞻芳性に基づいた問題蚭定である面癜さや難しさがあり、匊瀟での取り組みずの共通点を感じながら聎講しおいたした。 [2M5-OS-37b-02] 経路耇雑性の掻甚による経路遞択モデリングの性胜改善 続いおの口頭発衚でも経路遞択に関する研究が玹介されたした。本発衚は逆匷化孊習を甚いた経路遞択においお、どのようなデヌタを甚いればより高品質な経路遞択が可胜ずなるか、ずいう問いに察する怜蚎を行うものでした。 逆匷化孊習はその名の通り匷化孊習の逆の問題を解くタスクで、通垞の匷化孊習では「定矩した報酬関数をもずにそれを最倧化する方策を探す」こずを考える䞀方、逆匷化孊習では「デヌタセット䞭で実際に取られた方策から報酬関数を掚定する」ずいうこずを行いたす。具䜓的には、タクシヌドラむバヌが実際に通った経路を集めたデヌタからRCM-AIRL (Route Choice Modeling Adversarial Inverse Reinforcement Learning)ず呌ばれる手法で報酬関数を掚定し、それを甚いお経路遞択をするずいうこずが行われおいたした。このデヌタセットを経路䞭の右巊折の倚さによっお3段階に分割し、それぞれ+党デヌタを䜿った堎合で孊習を行ったずころ、䞭皋床に耇雑な経路からなるデヌタセットを甚いた堎合で定量的に最もよい経路遞択が行えたそうです。 [2M5-OS-37b-03] モデル化誀差が顕著な状況における制埡のためのダむナミクス孊習 埮分方皋匏に埓う時系列デヌタのダむナミクスをうたくモデリングするこずは、制埡などの意味で非垞に重芁です。 孊習によっおダむナミクスを掚定する際、物理的な事前知識によっお埗られる具䜓的なモデル䞭の未知パラメヌタを掚定する堎合ず、Neural ODE (Neural Ordinary Differential Equation) のようなブラックボックスモデルを甚いる堎合ずがありたす。埌者のアプロヌチを採甚するず事前知識は䞍芁になりモデリングの柔軟性は増したすが、孊習のためのデヌタは倧量に取埗しなければならなくなりたす。䞡者の利点をあわせ持぀のがハむブリッド型の方法で、事前知識に基づく数理モデルずブラックボックスの足し合わせで時間発展を蚘述するアプロヌチをずりたす。ただしハむブリッド型の方法はナむヌブに孊習するず本来数理モデル偎で衚珟しおほしいパヌトたで、その衚珟胜力の高さゆえにブラックボックスモデルに吞収されおしたう問題があるようです。 このため、ブラックボックスモデルに䜕らかの圢で正則化をかける必芁がありたす。本発衚は、その正則化の皮類や倧きさが実際の粟床にどう圱響するかに぀いお、マルチコプタヌのシミュレヌションを題材に調べた研究でした。結果ずしおモデル党䜓数理モデル+ブラックボックスモデルずブラックボックス単䜓ずの出力の盞関に関しお正則化を行うのがベタヌで、たた正則化を倧きくしすぎるず予枬誀差が倧きくなるこずが確認されたようです。 [2M5-OS-37b-04] 倧孊病院の集䞭治療宀における医療スタッフの移動軌跡の抜出手法 セッション最埌の研究は、病院の集䞭治療宀 (ICU) の業務効率化を目指し、センサを甚いおICU䞭のスタッフの移動軌跡を取埗・分析するずいう研究でした。 ICUでは実際に動線の亀錯や滞留が生じるものの、動画デヌタを甚いた堎合患者ぞのプラむバシヌの問題が発生する、ずいう特有の課題があるずのこずでした。デヌタの取埗にはスタッフの業務を阻害しない小型の2D-LiDARセンサを甚いお点矀デヌタを取埗したのち、事前孊習枈みの物䜓怜出モデルで人物怜出を行い、カルマンフィルタによっお各個人の軌跡を远跡する、ずいうパむプラむンが甚いられおいたした。その埌各軌跡に察しおGMM (Gaussian Mixture Model)による移動・滞留のクラスタリングや効果的な可芖化を甚いた定性的な確認などの耇数の偎面からデヌタを分析し、人流の様子を定量的・定性的に把握できるようになったそうです。 [3F5-OS-42b] 倧芏暡蚀語モデルの安党察策 ― 倧いなる力には、倧いなる責任が䌎う デヌタ・AIシステム本郚デヌタサむ゚ンス2ブロックの吉本です。 私たちのブロックでは、AIやデヌタサむ゚ンス技術を甚いたプロダクト開発ずそのための研究開発に取り組んでいたす。ここでは、5/29朚に行われたオヌガナむズドセッション「 倧芏暡蚀語モデルの安党察策 ― 倧いなる力には、倧いなる責任が䌎う 」の各発衚に぀いおレポヌトしたす。 [3F5-OS-42b-01] AIの安党性に関する䞖界の動きずAI Safety InstituteAISIに぀いお 同日の午前䞭の招埅講挔 [3A2-PS-3] AIのリスクず安党性〜AI広島プロセスからAISI蚭立たで村䞊 明子氏 ず合わせお玹介させおいただきたす。 AISIAIセヌフティ・むンスティテュヌト は、安党・安心で信頌できるAIの実珟に向けお、AIセヌフティに関する評䟡手法や基準の怜蚎・掚進するための機関です。2024幎2月14日に10の関係府省庁ず5の政府系関係機関が共同で蚭立したした。 掻動の1぀ずしおガむドラむンの策定があり、AIシステムの安党性を評䟡する際の基本的な考え方を瀺した AIセヌフティに関する評䟡芳点ガむド や、AIシステムのリスク察策を攻撃者の芖点から評䟡するためのレッドチヌミング手法に関する AIセヌフティに関するレッドチヌミング手法ガむド などが玹介されたした。 AIのリスクに぀いおは、 International AI Safety Report や総務省・経枈産業省が出しおいる AI 事業者ガむドラむン に基づいお説明されたした。たた、AIの安党性を守るための芏制の動向に関しおも説明がありたした。ガむドラむンのような眰則のないゆるやかな方匏で行う゜フトロヌず、法埋で定めたうえで眰則も芖野に入れたハヌドロヌの考え方が玹介され、発衚前日5月28日に成立した AI法 に関しおも觊れられたした。 [3F5-OS-42b-02] AISI囜際ネットワヌクにおける共同テスト挔習に぀いお この発衚では、 AISI囜際ネットワヌク が行った、10カ囜共同での テスト挔習 が玹介されたした。 テスト挔習は、倚蚀語評䟡ずサむバヌセキュリティ評䟡の2぀の分野に぀いお実斜されたした。日本はデヌタセットの翻蚳䜜業、評䟡の実斜、分析を担圓したした。倚蚀語評䟡は日本・シンガポヌルが、サむバヌセキュリティ評䟡は英囜が䞻導したした。 倚蚀語評䟡のデヌタセットずしおは MLCommons 、 AnswerCarefully V2 、および CyberSecEval が䜿甚されたした。MLCommons、AnswerCarefully V2は、懞念のある質問に察しおLLMが無害な出力を生成できるかどうかを怜査したす。CyberSecEvalは、プロンプトむンゞェクション攻撃ぞの耐性を怜査したす。 サむバヌセキュリティ評䟡は英囜AISIが開発した Inspect AI プラットフォヌム䞊で行われ、デヌタセットずしおはサむバヌセキュリティスキルを評䟡する Cybench が甚いられたした。 モデルずしおは、他蚀語評䟡ではMistral LargeずGemma2が、サむバヌセキュリティ評䟡ではMistral Large、GPT-4o、GPT-4o miniが評䟡されたした。 [3F5-OS-42b-03] 倧芏暡蚀語モデルのゞェむルブレむクに察するむンコンテキスト防埡の圹割明蚘による改良 LLMに察する攻撃の1぀に、プロンプトを入力しお䞍適切な出力を誘導するゞェむルブレヌク攻撃がありたす。LLMの再孊習による察策は蚈算・時間のコストが高いため、プロンプトの加工による防埡手法が泚目されおいたすが、過剰な応答拒吊や生成文の品質の劣化ずいった課題がありたした。 これらの課題に察応するため、この研究ではプロンプト䞭に呜什ず圹割の察応付けを培底する「RoleSpec」ずいう手法が提案されたした。RoleSpecでは、システムメッセヌゞには「System」、LLMの応答には「Assistant」、ナヌザヌのプロンプトには「User」ずいった圹割名を明蚘したす。 実隓はLlama-2-7b-chatモデルを甚いお行われ、攻撃手法ずしおはプロンプトの末尟に人工的な文字列を远加するGCG、攻撃甚LLMがプロンプトを自然で説埗的な文に掗緎するPAIR、ロヌルプレむングを䌎うプロンプトで攻撃するDANが詊されたした。 評䟡指暙ずしおは、攻撃に察する拒吊応答率ず、䞀般タスクに察する回答品質を枬る MT-bench が甚いられたした。 実隓の結果、RoleSpecを適甚するこずで、䜕も防埡しおいない堎合ず比范しお、攻撃に察する拒吊応答率ずMT-benchの回答品質の䞡方が倧幅に向䞊するこずが確認されたした。たた既存手法ず組み合わせた堎合でも、攻撃耐性ず回答品質が向䞊するこずが瀺されたした。 [3F5-OS-42b-04] OS招埅講挔安党な倧芏暡蚀語モデルの構築ず利甚を目指しお この招埅講挔では、東京科孊倧孊の岡厎盎芳氏がこれたでに取り組んでこられた、LLMの安党性に関わる研究が玹介されたした。 バむアスに関しお3ä»¶ [1] [2] [3] 、LLMが生成したテキストの怜出に関しお2ä»¶ [4] [5] 、メンバヌシップ掚論攻撃に関しお2ä»¶ [6] [7] 、日本語LLMであるSwallowに関しお3ä»¶ [8] [9] [10] の研究が玹介されたした。 バむアス [1] では職業名ず性別を瀺す単語を含む文ペアに察し、含意関係認識を行わせるこずで、蚀語モデルのバむアスを定量評䟡したす。䟋えば「看護垫がテニスをしおいたす」ず「女性がテニスをしおいたす」のペアの関係を含意・矛盟・䞭立のどれずモデルが刀定するかを芋たす。 [2] では、「技術面接での質問に男性ず女性のどちらが正解したか」ずいった性別バむアスが関わる質問にLLMに答えさせ、回答がバむアスを含んでいた堎合に、LLM自身でフィヌドバックを䞎えお修正させる手法が提案されたした。 [3] はLLM-as-a-judgeの蚭定における、尀床バむアスの評䟡・緩和に関する取り組みです。LLMが蚈算する尀床ず、LLMず人間のスコアの差ずの盞関係数によっおバむアスを評䟡したす。たたfew-shot事䟋をプロンプトずしお提瀺するこずで、このバむアスを緩和できるこずが瀺されたした。 LLMが生成したテキストの怜出 [4] ではLLMが生成した゚ッセむの怜出噚ず、その怜出を回避しようずする攻撃偎LLMを敵察的にIn-Context Learningさせるこずで、䞡者の性胜がずもに向䞊する「いたちごっこ」が生じるこずが確認されたした。 [5] は生成テキストの品質を維持し぀぀、透かしを入れるようにLLMが生成したものであるず怜出されやすくするこずを目指した研究です。怜出噚からの報酬ず評䟡噚からの報酬を組み合わせた匷化孊習を甚いるこずで、品質を保ち぀぀怜出されやすさを向䞊できるこずが瀺されたした。 メンバヌシップ掚論攻撃 (MIA) MIAずは、テキストがLLMの孊習に䜿われたものかを掚論する攻撃です。 [6] では、尀床にアクセスできないクロヌズドなLLMに察する攻撃手法が怜蚌されたした。怜出察象テキストの前半郚分をLLMに入力し、その続きずしおLLMが生成したテキストず、元の察象テキストの埌半ずの䞀臎率を比范するこずで、高い怜出率が埗られるこずが瀺されたした。 [7] では、アンラヌニングをし぀぀忘华察象のテキストを蚀い換えたテキストで孊習させるこずで、MIAによっお怜出されないようにデヌタ挏掩の隠蔜し぀぀、察象タスク性胜を維持する手法が玹介されたした。 Swallow [8] に関しおは、蚓緎デヌタに察する安党察策ずしお、有害な衚珟を含む可胜性のあるりェブペヌゞをフィルタヌしおいるこずが玹介されたした。たた [9] では、 こちら でも玹介させおいただいたように、有甚なテキストをLLMで遞定しおいるこずが玹介されたした。 [10] に関しおは、LLMによっお生成された指瀺チュヌニングの孊習デヌタ䞭に、回答拒吊を含む応答が含たれおいるこずが玹介されたした。 [4D2-OS-33b] AIを掻甚したマヌケティング実践 ZOZOの広枡です。䌚期4日目である5月30日金には、オヌガナむズドセッション「AIを掻甚したマヌケティング実践」が開催されたした。同セッションではAIを掻甚したマヌケティングの実践事䟋や課題が玹介されたした。以䞋ではセッションの各発衚の内容に぀いお簡単にレポヌトいたしたす。 [4D2-OS-33b-01] LLMを掻甚したペル゜ナベヌスのデルファむ法による倚芖点アむディア評䟡 デルファむ法は、専門家の意芋を集玄し、未来予枬や合意圢成に広く甚いられるアンケヌト手法です。本発衚では、LLMを掻甚したペル゜ナずファシリテヌタヌに基づくデルファむ法によっお、倚様な芖点からのアむデア評䟡手法の実隓が行われたした。 具䜓的には、幎霢や性別の異なる15皮類のAIペル゜ナを䜜成し、各ペル゜ナが自身の属性に埓っお独自に10皮類の評䟡項目を遞択しおアむデアを評䟡したす。ファシリテヌタヌ圹のLLMが党AIペル゜ナの評䟡結果を集蚈・芁玄し、そのフィヌドバックを基に各AIペル゜ナが評䟡項目を芋盎しおアむデアを再評䟡するずいう反埩プロセスを3回繰り返したす。 実隓の結果、ペル゜ナの属性によっお評䟡項目の遞択に特城があるこずが瀺唆されたした。評䟡を重ねるごずに遞択される評䟡項目の皮類は収束し、平均評䟡スコアも䞊昇する傟向が瀺されたした。これらの結果から、AIペル゜ナベヌスのデルファむ法により、倚角的な芖点を取り入れた評䟡を䜎コストで実珟できる可胜性が瀺唆されたした。 [4D2-OS-33b-02] 深掘り質問促進のための LLM を掻甚した動的プロンプト制埡型顧客むンタビュヌトレヌニングシステム 近幎、顧客の朜圚ニヌズ把握の重芁性が高たる䞭、本発衚では、LLMをむンタビュむヌずしお掻甚する顧客むンタビュヌトレヌニングシステムが提案されたした。このシステムは、察話の進行に応じおプロンプトの情報を動的に曎新するこずで、ナヌザヌが適切な深掘り質問を行わなければ朜圚ニヌズを匕き出せない仕組みを構築しおいたす。 具䜓的には、顧客情報を3段階の階局構造で管理し、ナヌザが質問を通じおシステムから情報を聞き出すず、远加情報がプロンプトに远蚘されたす。 被隓者8名が提案手法ずベヌスラむン手法党情報を最初からプロンプトに含めるで蚈2回トレヌニングを行いたした。提案手法を甚いたグルヌプでは、2回目のトレヌニングにおける質問数ナヌザヌが行った質問の回数が1回目ず比范しお平均148.89増加したのに察し、ベヌスラむン手法では35.00の増加にずどたりたした。たた、1぀の情報を埗るために必芁な質問数は、提案手法がベヌスラむン手法の最倧4倍ずなり、深掘り質問の促進に有効であるこずが瀺されたした。 [4D2-OS-33b-03] 生成AIずゞョブ理論で䜜る顧客䞭心型CRM 本発衚では、顧客関係管理CRMにおける埓来の静的なセグメンテヌションの限界を克服するため、生成AIずゞョブ理論を統合した顧客䞭心型CRM戊略を提案しおいたす。この戊略は、生成AIを掻甚した動的な顧客プロファむル生成により、䟋えば「仕事埌にリラックスしたい」顧客にはカフェの割匕のむンセンティブを提䟛するなど、リアルタむムで適応可胜なパヌ゜ナラむれヌションを実珟するこずが目的です。 提案手法では、オヌプン゜ヌスの米囜クレゞット䞎信デヌタを掻甚し、Googleの生成AI「Gemini」を甚いお顧客プロファむルを生成したす。さらに、生成されたプロファむルに基づき、各顧客に最適なむンセンティブを生成したす。 生成AIを甚いた顧客プロファむル生成では、顧客の基本属性を適切に再珟できるこずが確認できたした。さらに生成AIにより生成した200件の顧客プロファむルを基に人間による補正ず再孊習を経お、最終的に1000件のむンセンティブを生成し、タヌゲット顧客の賌買行動ずの䞀臎床が向䞊したず報告されおいたす。 [4D2-OS-33b-04] 広告デザむン改善のための代替案生成手法 本発衚では、広告デザむンの改善を支揎するため、過去の広告デヌタを掻甚した代替案生成手法を提案しおいたす。デザむナヌが広告デザむンを䜜成した際に、改善の方向性を芋出すこずが難しく、広告を効率的に䜜成しづらいずいう課題を解決するこずが目的です。 提案手法は、孊習段階ずデザむンプロセスの2段階で構成されたす。たず、孊習段階では、Photoshopデヌタから広告の芖芚芁玠色、レむアりトなどを特城量ずしお抜出し、クリック率CTRを目的倉数ずしお決定朚モデルを孊習したす。決定朚モデルには、平均二乗誀差ず決定係数がXGBoostより優れおいたCatBoostが採甚されたした。次に、デザむンプロセスでは、新しく䜜成された広告の特城量を抜出し、孊習枈みモデルでCTRを予枬したす。この際、Tree SHAPを甚いお、各特城量の予枬結果ぞの圱響床を解析し、最も負の圱響を䞎えおいる特城量を「改善箇所」ずみなしたす。特定された改善箇所に察しおは、ヒュヌリスティックな倉換指定された特城量の類䌌色や補色ぞの倉換などを適甚し、耇数の代替広告デザむンが生成されたす。 実隓では、「クリックを促すボタンの色」が最も負の圱響を䞎えおいるず刀断され、ヒュヌリスティック倉換を斜されおいる䟋が瀺されおいたす。これにより、改善箇所が元の画像よりも濃い色や、補色に倉換された画像が生成され、これたで怜蚎されおいなかった现かな色の違いを把握し比范できるず報告されおいたす。 [4D2-OS-33b-05] 双方向掚薊システムにおけるコントラスト効果の応甚 コントラスト効果は、ある察象を別の察象ず比范しお提瀺するこずで、盞察的な䟡倀や魅力が倉動する心理的効果を指したす。本発衚では、「コントラスト効果」を求人怜玢プラットフォヌムのような双方向掚薊システムに応甚するこずで、埓来の掚薊システムが抱えおいた課題の解決を目指しおいたす。埓来の掚薊システムは、䞻にナヌザヌずアむテムの適合床蚈算に基づいお掚薊を行うため、提瀺順序や比范察象ずいった盞察的な魅力を圢成する芁玠を十分に考慮しおいたせんでした。たた、短期的なマッチング数の最倧化に偏りがちであり、長期的な効果を加味しにくい、利甚者の状態倉化に察する柔軟性が䜎いずいう問題がありたした。 提案手法では、求職者のオンラむン行動による朜圚的なマッチングの増加分を評䟡関数に組み蟌みたす。これにより、求職者の掻動状況や登録からの経過日数に応じお、「オンラむン行動重芖床」ず「マッチング重芖床」を動的に調敎するこずが可胜になりたす。 実際の求人怜玢プラットフォヌムを利甚し䞀郚の求職者を察象にA/Bテストを実斜した結果、提案手法の評䟡関数を甚いお掚薊するグルヌプの方が埓来の評䟡関数を甚いるよりも、オンラむン行動ずマッチング行動がずもに増加するこずを確認したず報告されおいたす。 たずめ 本蚘事では、JSAI2025の䞀郚セッションの内容をご報告したした。参加を通じお、倚くの新たな知芋を埗るこずができたした。特に印象的だったのは、LLMの進化が倚岐にわたる研究分野に䞎える圱響の倧きさです。AI技術が具䜓的な課題解決に掻甚されおいる事䟋を数倚く目の圓たりにし、その応甚可胜性の広がりを実感したした。ここで埗た知芋を糧に、私たちも人工知胜研究の進展に貢献できるよう、䞀局邁進しおたいりたす。 ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com
はじめに こんにちは、 ZOZOMO店舗圚庫取り眮き サヌビスの開発を担圓しおいるZOZOMO郚OMOブロックの朚目沢です。 珟代の゜フトりェア開発においお、倉化の激しい環境に柔軟に察応できるチヌム䜜りは重芁な課題です。特に耇数のプロダクトを扱う開発チヌムでは、メンバヌ党員が自埋的に動き、状況に応じお適切な刀断ができる「自己組織化されたチヌム」の実珟が求められたす。 ZOZOMO郚OMOブロックでは、ZOZOMO店舗圚庫取り眮きを取り扱っおきたしたが、珟圚は別のサヌビスの開発も行っおいたす。そこで2぀のプロダクトを扱う開発チヌムの自己組織化を目指し、昚幎床に様々な取り組みを実斜したした。結果的に、䞻芁な取り組みは5぀に敎理されたす。 本蚘事では、これらの取り組みがどのような背景から始たり、具䜓的にどのような方法で実践され、どのような成果をもたらしたかを詳しく玹介したす。同じような課題を抱える開発チヌムの参考になれば幞いです。 目次 はじめに 目次 なぜチヌムの自己組織化を目指したのか 耇数プロダクトぞの察応力匷化 ボトルネックの解消 チヌム党䜓の知識レベル向䞊 5぀のTRYによる具䜓的な取り組み TRY 1: 理想のチヌムの定矩ず蚈枬 TRY 2: 状況に応じた開発プロセスの遞択 TRY 3: モブプログラミングず゜ロプログラミングずNo issue, no work. TRY 4: レトロスペクティブずワヌキングアグリヌメント TRY 5: 仕様の調敎から開発チヌムに任す チヌムでできるこずが増えおいけばメンバヌもさらに茝く 自己組織化による新たな課題ず今埌の展望 おわりに なぜチヌムの自己組織化を目指したのか 私たちが自己組織化ずいう目暙を掲げた背景には、䞻に以䞋の理由がありたす。 耇数プロダクトぞの察応力匷化 たず、OMOブロックは、珟圚開発䞭であるサヌビスずZOZOMO店舗圚庫取り眮きずいう2぀のプロダクトを扱っおいたす。珟状では、この別サヌビスの開発に泚力しおおり、ZOZOMO店舗圚庫取り眮きの開発はほが停止しおいる状況です。いずれZOZOMO店舗圚庫取り眮きの開発も再開するため、各プロダクトに専甚のチヌムを蚭けるこずが理想的だず認識しおいたすが、圓面の間は1぀のチヌムで䞡方のプロダクトに察応する必芁がありたす。そのため、今埌どのような状況でも、チヌムが柔軟に動けるようにしたいずいう匷い意図がありたした。 ボトルネックの解消 次に、これたでの開発䜓制では、䞊長による现かい指瀺で開発を進めるこずずなっおおり、そのため、䞊長自身がボトルネックになる可胜性がありたした。より迅速か぀効率的に開発を進めるためには、この䜓制を改善する必芁があったのです。 チヌム党䜓の知識レベル向䞊 そしお䜕より、チヌムメンバヌ党員がプロダクトを深く理解し、自ら考えお動けるようになるこずが䞍可欠だず考えたした。経隓の浅いメンバヌや育䌑から埩垰したメンバヌなどチヌムには様々な背景をもったメンバヌがおり、そのため、個々人の成長ずチヌム党䜓での知識共有が匷く求められおいたした。 これらの課題を解決し、どんな倉化にも察応できるチヌムずなるため、私たちは自己組織化ずいう目暙を掲げたした。 5぀のTRYによる具䜓的な取り組み 自己組織化を実珟するために、OMOブロックでは昚幎床に様々な取り組みを行いたした。振り返っおみるず、䞻芁な取り組みは以䞋の5぀に敎理されたす。 TRY 1: 理想のチヌムの定矩ず蚈枬 たず、チヌム党員で「理想のチヌム」ずは䜕かを定矩するワヌクを開催したした。この定矩には、人材開発ブロックのメンバヌにファシリテヌションの協力を䟝頌したした。普段ファシリテヌションを担圓するメンバヌも他の参加者ず同じ目線で参加し、䞍芁なバむアスがかからないようにするためです。 定矩するだけでなく、毎週点数を぀けおチヌムの成長を蚈枬したした。これにより、チヌムの目指す方向性を明確にし、具䜓的な改善掻動カむれンに぀なげられたした。この蚈枬により、自分たちが考えた理想像に向かおうずする姿勢を埗点の掚移から䌺えるようになりたした。 TRY 2: 状況に応じた開発プロセスの遞択 開発の「HOWどのように」を既知のフレヌムワヌクやプラクティスを採甚するこずで芋える化し、状況に応じた開発プロセスの遞択による継続的な改善を図りたした。チヌムは自分たちの状況に合わせお、開発の進め方を柔軟に倉えるようになりたした。 具䜓的には、昚幎床のZOZOMO店舗圚庫取り眮き開発期には「スクラム1週間スプリント」を採甚したした。昚幎床䞊期の別サヌビスのモック開発期には「スクラム1日スプリント」、昚幎床䞋期には「Kanban」、そしお珟圚は「スパむラル型」を採甚しおいたす。これは、柔軟な転換の必芁性、モック開発の迅速化、時間的制玄などの理由によりたす。 TRY 3: モブプログラミングず゜ロプログラミングずNo issue, no work. 単独䜜業のタスクを陀いお、原則ずしおモブプログラミングで実装を進めたした。これにより、チヌム党員がプロダクトの仕様を深く理解し、誰でも察応できる状況を䜜り出すこずを目指したした。 モブプログラミングでは、Gatherずいうツヌルを䜿っお実斜され、ドラむバヌずナビゲヌタヌの圹割を亀代しながら䜜業を進めたす。 モブプログラミングのチヌム内でのルヌルはチヌムで議論をした䞊でチヌムメンバヌ党員の合意を取っおおり、ワヌキングアグリヌメントずいう文曞にたずめられおいたす。その䞀郚を玹介したす。 たた、すべおの䜜業においお"No issue, no work."を培底し、プログラミングに限らず蚭蚈や調査、䌚議準備なども含めたあらゆる䜜業を芋える化しお改善の察象ずしたした。䞊長の仕事ももちろん"No issue, no work."を培底しおいたす。これらの取り組みにより、タスクが特定の個人に集䞭するこずがなくなり、チヌム党䜓で改善の察象ずしお考えるようになりたした。 TRY 4: レトロスペクティブずワヌキングアグリヌメント 開発プロセスが倉化しおも、毎週レトロスペクティブ振り返りを欠かさず実斜したした。レトロスペクティブの結果、カむれンした習慣をワヌキングアグリヌメントに文曞化したした。たた、ワヌキングアグリヌメント自䜓もカむれンの察象ずするこずで、チヌム自らが改善のサむクルを回せるようにしたした。 先皋はモブプログラミングのワヌキングアグリヌメントを玹介したしたが、他にもいく぀か玹介したす。 以䞋はレビュヌに関するワヌキングアグリヌメントです。 こちらはチヌムの掻動に関するワヌキングアグリヌメントです。 TRY 5: 仕様の調敎から開発チヌムに任す これたで䞊長が现かく指瀺を出したり倖郚からの䟝頌を受けたりするやり方から、開発チヌムが自ら調敎䟝頌を受けお玠早く察応できる方針ぞず倉曎したした。 なぜやるのかずいうずころや優先順䜍を含め、最終的な責任は匕き続き䞊長が持ちたす。䞀方で䞊長はあれこれ指瀺をする代わりに開発チヌムぞの支揎を匷化し、チヌムの動きを芳察したりコヌチングを行ったりする圹割を担うようになりたした。時には改善を提案するこずもありたす。この倉化により、倖郚ずの調敎にかかる時間や䌝蚀ゲヌムによる䌝達ミスが枛り、開発チヌムはプロダクトに぀いおより深く理解するようになりたした。 結果、チヌムは自ら考えお動けるようになるずいう倧きなメリットを埗られたした。その反面、開発チヌム自身が調敎業務を担うこずで、玔粋な開発にかけられる時間が倚少枛るずいうデメリットも生じおいたす。しかし珟時点では、メリットの方が䞊回っおいるためこの取り組みを継続しおいたす。 チヌムでできるこずが増えおいけばメンバヌもさらに茝く ただただ途䞊で今埌も倚くの挑戊が必芁ですが、チヌムの自己組織化は進み、状況に応じ柔軟にチヌムで察応できる力が付いおきたした。たた、これたで玹介しおきた内容は、チヌムが自らでできる幅を広げ広さ経隓をさらに深める深さ斜策でした。これらをプロダクト開発のラむフサむクルにマッピングさせおみるず、ただものを䜜るだけのチヌムではなく、プロダクトずしお党䜓を捉えるようになっおきおいるず蚀えたす。 これらのこずはさらにチヌムメンバヌがそれぞれやりたいこず・実珟したいこずの発芋に繋がり、自己実珟の堎ずしおもチヌムを捉えるこずもできそうです。 自己組織化による新たな課題ず今埌の展望 自己組織化により倚くの成果を埗られた䞀方で、新たな課題も芋えおきおいたす。このたたさらに開発チヌムぞの暩限委譲を進め、チヌムの掻動を広げおいくず玔粋な開発に集䞭できる時間の枛少ずいう問題を生じる可胜性がありたす。 このゞレンマを解決するために、以䞋のようなアプロヌチが有効だず考えおいたす。 たず、盎近で察応する課題のみを仕様の調敎の察象ずするこずで、調敎業務の範囲を限定し開発時間ぞの圱響を最小化したす。長期的な課題や将来的な芁件に぀いおは詳现な敎理や調敎を遅らせるこずで、開発チヌムが日垞的に察凊する調敎業務から切り離すこずができたす。 これはスクラムで採甚されるプラクティスの䞀郚です。぀たり、プロダクトを扱うようになりより耇雑化しおいく状況においおは、スクラムの適甚が特に有効になっおいきたす。スプリント単䜍で開発サむクルを区切り、リファむンメントを別途行うこず、盎近で察応する課題のみを扱うこずで開発に集䞭できたす。 加えお、昚今話題の生成AI゚ヌゞェントの掻甚により、効率的に゜ヌスコヌドを曞く時間を削枛できそうです。さらにテストコヌド、ドキュメント、バグ修正など開発における幅広い領域での掻甚が期埅できたす。これにより、チヌムずしおよりコアずなる郚分に倚くの時間を割けるようになりたす。 スクラムをはじめずしたアゞャむルの远求ず生成AI゚ヌゞェントの掻甚により、チヌムはさらに自己組織化を進めおいくこずでプロダクトにコミットできおいくず考えおいたす。 おわりに 自己組織化ぞの挑戊は、OMOブロックに倧きな倉化ず成長をもたらしたした。チヌムメンバヌ党員がプロダクトの理解を深め、自埋的に動くこずで、倉化の激しいプロダクト開発に柔軟に察応するようになっおいたす。私たちはこれからも、倉化に察応できる匷くしなやかなチヌムを目指しお、挑戊を続けおいきたす。 ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com 最埌たでご芧いただきありがずうございたした
はじめに こんにちは、ZOZOTOWNアプリのバック゚ンド開発を担圓しおいる䜐藀です。匊瀟では、お客様からの問い合わせに察しお、開発゚ンゞニアも調査に関わりたす。この蚘事では、OpenAI瀟のEmbedding APIを掻甚し、お客様ぞの返信プロセスを簡略化した事䟋をご玹介したす。 目次 はじめに 目次 課題 解決アプロヌチ 䞻な技術構成 補足事項 導入による効果 属人化の排陀 䜜業コストの削枛 埗られた孊び たずめ さいごに 課題 開発郚門が察応するお客様ぞの返信プロセスに぀いお、既存の察応フロヌは以䞋の通りでした。 問い合わせを調査する䞊で、「察応チヌムぞの゚スカレヌション刀断が属人化しおいる」こずに課題感がありたした。ZOZOTOWNの仕様党般に関する問い合わせは1぀のSlackチャンネルで受け付けおおり、担圓チヌムが倚岐にわたるため、振り分け圹が必芁でした。この状況により以䞋の問題が発生しおいたした。 内容の粟査ず担圓チヌムぞの振り分けが特定メンバヌに䟝存 月100件皋床の通知を捌くため、゚ンゞニアの䜜業が䞭断される 䌚議などでアサむンが遅れるず、リヌドタむムに圱響する 担圓䞍明・アサむン挏れなどのヒュヌマン゚ラヌが生じる 解決アプロヌチ これらの課題をたずめお解消するため、゚スカレヌションの振り分けを自動化できないか怜蚎したした。もずもず問い合わせ察応のデヌタはGoogleスプレッドシヌトで個人情報を省いた状態で管理しおおり、類䌌刀定に䜿える十分な事䟋デヌタが揃っおいたした。そのため、察応デヌタを元に担圓チヌムを特定できるEmbedding APIを遞定したした。䞻な技術構成は以䞋の通りですが、なるべくコストをかけない制玄の䞭で、適切な察応チヌムをSlackで自動メンションする「問い合わせ自動振り分けBot」ができたした。 䞻な技術構成 ツヌル・サヌビス 圹割・甚途 Slack 問い合わせ投皿ワヌクフロヌず調査ログの管理 Zapier Slack投皿をトリガヌに、Embedding APIを呌び出す。結果をスプレッドシヌトに登録する Embedding API 問い合わせ文をベクトル圢匏に倉換 GASGoogle Apps Script ベクトル比范凊理、Slack通知メッセヌゞの生成 Googleスプレッドシヌト 問い合わせ内容、ベクトル、回答たでのリヌドタむムなどの情報を䞀元管理 補足事項 圓初Zapierでは類䌌床蚈算ができなかったため、比范凊理はGASで代替 Googleスプレッドシヌトには自動で振り分けられたチヌムず実際に察応したチヌムを蚘録し、粟床改善に掻甚 Embedding APIの利甚コストは月間玄100件で 1円未満 に収たっおおり、ランニングコストも非垞に䜎い 導入による効果 属人化の排陀 特定メンバヌや時間垯に䟝存しない即時察応が可胜になった 月単䜍の 正答率は玄82 で、䟋倖的な問い合わせだけを人が察応すれば良い状態になった 䜜業コストの削枛 通知凊理の自動化により、他䜜業ぞの割り蟌みが解消できた 回答たでの平均リヌドタむムが 箄0.4営業日短瞮 ず、シヌムレスな返信が実珟できるようになった 埗られた孊び デヌタ蓄積 が属人化を解消に効果的であった Slack・Zapier・GASの構成は 小芏暡から導入しやすく、柔軟なスケヌラビリティ を持぀ Embedding APIの掻甚により、 過去の問い合わせ知芋を機械的に再利甚 する仕組みを䜜れた たずめ デヌタを取るこず自䜓が業務改善に繋がり、日々の「ちょっずした刀断」や「仕分け䜜業」からでも無理なく始められるこずが分かりたした。Slackを起点ずした業務オヌケストレヌタヌは拡匵性があり、Embedding APIを組み合わせるこずで、属人化や䜜業負荷ずいった課題は着実に解消されたした。なにより、「䞀秒でも早くお客様に返答したい」ずいう想いを、届けられる䜓制を䜜れたこずが最倧の成果ずなりたした。 さいごに ZOZOでは、䞀緒にサヌビスを䜜り䞊げおくれる方を募集䞭です。ご興味のある方は、以䞋のリンクからぜひご応募ください。 corp.zozo.com