TECH PLAY

タむミヌ

タむミヌ の技術ブログ

å…š292ä»¶

こんにちは、株匏䌚瀟タむミヌでMLOps゚ンゞニアをしおいるKYです。普段はMLプラットフォヌムの構築・運甚を担圓しおいたす。 実務の䞭でコンテナむメヌゞのサプラむチェヌンセキュリティ匷化を進めおおり、その䞀環ずしお Docker 瀟が提䟛する「Docker Hardened ImagesDHI」の実装を蟿る機䌚がありたした。 その際、実際の定矩ファむルを芋お、少し驚きたした。コンテナのビルド定矩ずいえば「Dockerfile」が圓たり前だず思っおいたのですが、DHI の定矩はなんず YAML で曞かれおいたのです。 「なぜ Dockerfile ではないのか」ず定矩の読み方を远いかけおいくうちに、BuildKit のアヌキテクチャに行き着きたした。この蚘事では、DHI の仕組みを通じお、私たちが普段の Dockerfile 運甚で抌さえるべきポむントを再確認したいず思いたす。 ビルド定矩の䞻圹は「Frontend」 BuildKit は、「定矩を解釈する郚分Frontend」ず「実際にビルドを実行する郚分Backend」に分離しおいたす。Frontend は、入力Dockerfile や YAMLを BuildKit の䞭間衚珟LLBに倉換する圹割を持ちたす。 ここで鍵になるのが、ファむル先頭のコメント行 # syntax=... です。BuildKit はたずこの1行を読み、どの Frontend で埌続を解釈するかを決めたす。぀たり、Docker 公匏が掚奚しおいるのに芋萜ずされがちな以䞋の1行は、単なるコメントではなく「このファむルは公匏の Dockerfile Frontend で解釈しおほしい」ずいう宣蚀です。 # syntax=docker/dockerfile:1 䞀方で DHI の定矩ファむルを開くず、YAML の1行目に次の指定がありたす。 # syntax=dhi.io/build:2-debian13 YAML も # をコメントずしお扱うため、BuildKit から芋れば「 # syntax= から始たるビルド定矩」ずいう意味で入口は同じ。その埌の䞭身を YAML ずしお解釈するのは、差し替えられた DHI Frontend の仕事 ずいうわけです。 DHI は䜕をしおいるのかYAML をコンパむルする DHI の定矩ファむルYAMLは、 RUN apt-get... のようにずいった手順を重ねるのではなく、「最終的に䜕を入れるか」ずいう状態を宣蚀したす。 【DHI の YAML 定矩䟋実際の定矩ファむルからの抜粋】 # syntax=dhi.io/build:2-debian13 name : Debian 13 Base image : dhi.io/debian-base variant : runtime platforms : - linux/amd64 - linux/arm64 dates : release : "2025-08-09" end-of-life : "2028-08-09" contents : packages : - '!libelogind0' - '!mawk' - '!original-awk' - base-files - bash - ca-certificates - coreutils # ... 以䞋、ベヌスに含めるパッケヌゞの列挙が続く accounts : run-as : nonroot users : - name : nonroot uid : 65532 gid : 65532 cmd : - /bin/bash いく぀かのフィヌルドに泚目しおみたす。 contents.packages : !mawk のように ! プレフィックスを付けるず「明瀺的に含めない」パッケヌゞを宣蚀できたす。削陀手順を曞くのではなく、最初から「入れない」ず衚明する点が Dockerfile ずの倧きな違いです。 accounts.run-as: nonroot : 実行ナヌザヌを非 root に固定する宣蚀で、Dockerfile の USER 呜什に盞圓したす。Dockerfile のように RUN useradd ... ずいったナヌザ䜜成手順を曞く必芁はなく、「誰で動かすか」ずいう状態だけが残る点が特城です。 dates.end-of-life : むメヌゞのラむフサむクル終了日たで定矩に含たれおおり、運甚䞊の管理情報もビルド定矩の䞀郚ずしお扱われおいたす。 このように、DHI の YAML は「どう䜜るか」ではなく「䜕が入っおいお、誰が動かすか」を宣蚀しおいたす。そしおここで重芁なのは、 BuildKit が YAML を盎接ビルドしおいるわけではない ずいう点です。 DHI の Frontend がこの YAML を読み蟌んで䞭間衚珟LLBぞコンパむルし、あずは通垞通り BuildKit がビルドを実行したす。぀たり、DHI の YAML は「別蚀語」ではなく、 Frontend を差し替えお埗た “別の入力圢匏” なのです。 たずえば䞍芁パッケヌゞの陀倖ひず぀ずっおも、Dockerfile では apt-get remove → autoremove → キャッシュ削陀ず手順を重ねる必芁がありたす。䞀方、DHI なら - '!mawk' の1行で意図が完結したす。手順Howではなく意図Whatだけが残るため、セキュリティ監査や再珟性の面で有利です。DHI が宣蚀的定矩を採甚しおいるのは、こうした盞性の良さがあるからです。 忘れられがちな Dockerfile の公匏掚奚蚭定 今埌、DHI のような宣蚀的フロント゚ンドがすぐに䞻流になるかは未知数であり、圓面は既存の Dockerfile 運甚が続くでしょう。 しかし、DHI が瀺す「Frontend は明瀺し、遞ぶものである」ずいう芳点は重芁です。たずは Docker 公匏が掚奚する以䞋の2行を、忘れずに Dockerfile の先頭ぞ蚘述したしょう。 # syntax=docker/dockerfile:1 # check=error=true # syntax=... 䜿甚する Frontend を固定し、手元の環境ず CI の違いによるビルド結果の揺れを防ぎたす。 # check=error=true BuildKit の静的解析lintを匷め、譊告レベルの蚘述を CI で匟けるようにしたす。 これらを習慣づけるだけで、「Frontend を明瀺し、品質を保぀」文化に確実に近づきたす。 たずめ DHI から孊べる本質は、 BuildKit は Frontend を自由に差し替えられる ずいう点にありたす。この芖点を持぀ず、DHI は単なるセキュアなベヌスむメヌゞではなく、ビルド定矩の抜象床を䞀段䞊げる詊みずしお芋えおきたす。 「手順を曞く」から「状態を宣蚀する」ぞの移行は、Infrastructure as Code で䜕床か芋おきた流れず重なっお芋えたす。DHI を觊っおみお、その発想がコンテナビルドの入力圢匏にも持ち蟌たれおいるこずを実感したした。 将来的にビルドのパラダむムがどう倉わるにせよ、たずは芋逃されがちな # syntax=... ず # check=... をきちんず眮くこず。タむミヌでも Cloud Run / Vertex AI Pipelines の DHI 移行を進める䞭で、Frontend 指定の差がビルド結果の揺れに盎結する堎面に䜕床か遭遇し、この2行の重芁性を改めお感じたした。DHI がもたらした芖点を持ち぀぀、足元の運甚を公匏のベストプラクティスで堅牢にする。これが、珟実的で安党なコンテナ運甚の第䞀歩です。 参考文献 Docker Hardened Images - カタログリポゞトリ Debian 13 Base 定矩ファむル13.yaml — 蚘事䞭の YAML 定矩䟋の抜出元 Custom Dockerfile syntax - Docker Docs Build hardened images - Docker Docs We're Hiring! サプラむチェヌンセキュリティや ML 基盀の足回りに興味を持っおいただけたなら、ぜひ䞀緒に働きたせんか。タむミヌでは、ML プラットフォヌムの構築・運甚やサプラむチェヌンセキュリティの匷化に取り組む゚ンゞニアを募集しおいたす 少しでも興味を持っおいただけたしたら、ぜひ以䞋のリンクから詳现をご芧ください。 MLOps゚ンゞニア シニアMLOps゚ンゞニア 募集ポゞション䞀芧
こんにちは、株匏䌚瀟タむミヌで MLOps ゚ンゞニアをしおいる KY です。普段は ML プラットフォヌムの構築・運甚を担圓しおいたす。 私たちのチヌムでは、機械孊習゚ンゞニアやデヌタサむ゚ンティストが開発に集䞭できるよう、VS Code のリモヌト開発Remote SSH および Dev Containerを掻甚した開発環境を提䟛しおいたす。本蚘事では、その䞭でも 共通 Dev Container Feature によるガヌドレヌル にフォヌカスし、各チヌムが自分たちで開発環境を立ち䞊げられるこずを前提にしながら、 セキュア・バむ・デフォルト をどう実珟しおいるかをご玹介したす。 なぜ Dev Container Feature にガヌドレヌルを寄せるのか この蚘事を曞こうず思ったきっかけは、もずもず機械孊習゚ンゞニアやデヌタサむ゚ンティスト向けだった開発環境を、デヌタアナリストをはじめずする別職皮のメンバヌにも広げ始めたこずでした。ナヌザヌ局が広がるに぀れ、「どこたでを各自の蚭定に任せ、どこからを仕組みで瞛るか」をあらためお考え盎す必芁が出おきた、ずいうのが出発点です。あわせお、組織ずしお求められるセキュリティレベルも幎々高たっおきおいたす。 ML プラットフォヌム特有の事情ずしお、ナヌザヌの専門領域が幅広い、ずいう点がありたす。機械孊習゚ンゞニアやデヌタサむ゚ンティストはモデリングやデヌタ分析を䞻戊堎ずしおおり、䟝存パッケヌゞの脆匱性管理やコンテナの暩限蚭蚈ずいった領域は、本来の業務の䞭心ではないこずが倚いです。だからこそ、これらをナヌザヌ個々の習熟床に委ねるのではなく、プラットフォヌム偎で初期倀を配る方針を取りたした。 各チヌムがセルフサヌビスで開発環境を立ち䞊げられ、特別な蚭定をしなくおも初期状態でセキュリティのベヌスラむンが担保される 状態を目指しおいたす。掚奚パスに乗るだけで安党に進められる、いわゆる「ゎヌルデンパス」の発想であり、 セキュア・バむ・デフォルト を仕組みで成立させるアプロヌチです。 この方針を devcontainer.json レベルで玠盎に衚珟できる仕組みが Dev Container Feature でした。Feature を1行足すだけで宣蚀的にガヌドレヌルが適甚されるため、「各チヌムが自埋的に環境を立ち䞊げ぀぀、危険な操䜜だけは仕組みで塞ぐ」ずいう蚭蚈ずよく噛み合っおいたす。 共通 Dev Container Feature によるガヌドレヌル 私たちの開発環境では、共通化した Dev Container Feature以䞋、共通 Featureを配っおいたす。たず、ベヌスむメヌゞず Feature の圹割は明確に分けおいたす。 Docker Hardened Images以䞋、DHIをベヌスにした開発甚むメヌゞでは、各皮開発ツヌルPython / uv / gcloud / Claude Code などをむンストヌルしおおきたす 。 共通 Feature では、それらツヌルの蚭定ファむル配眮ずガヌドレヌル適甚のみを担いたす 。 この前提のもず、各チヌムの devcontainer.json は以䞋のようにシンプルで、ベヌスむメヌゞを指定し、共通 Feature を远加するだけで、埌述するガヌドレヌルがたずめお適甚されたす。 { " image ": " asia-northeast1-docker.pkg.dev/<PROJECT>/<CUSTOM_DHI_PATH>:<TAG> ", " features ": { " asia-northeast1-docker.pkg.dev/<PROJECT>/<CUSTOM_FEATURE_PATH>:<TAG> ": {} } } こうしおレむダヌを分けおおくず、ツヌルの入れ物ずポリシヌの適甚が混ざらずに敎理されるため、 よりセキュアに締めやすい ずいう䜓感がありたす。たずえばポリシヌ偎だけを Renovate で継続的に曎新しおいけるので、むメヌゞの差し替えず独立しおセキュリティ蚭定の远埓・レビュヌを回せたす。なお、ベヌスむメヌゞ偎で抌さえるべきリスクOS パッケヌゞの脆匱性などず、Feature 偎で抌さえるべきリスクツヌルの暩限・蚭定をどう切り分けるかずいった論点もありたす。ただし本蚘事のスコヌプ倖のため、詳现は割愛したす。 この Feature がプロビゞョニング時に各皮蚭定ファむルを配眮し、ガヌドレヌルを自動で効かせたす。実際には耇数のツヌル蚭定を同じ方匏で配垃しおいたすが、本蚘事では代衚䟋ずしお AI ゚ヌゞェントの制埡を取り䞊げたす。 Claude Code などの AI ゚ヌゞェントの制埡 昚今、 Claude Code のような AI コヌディング゚ヌゞェントが普及しおいたすが、無制限の暩限を䞎えるず砎壊的倉曎や意図しないデヌタ送信のリスクがありたす。共通 Feature は /etc/claude-code/managed-settings.json を自動生成し、システムレベルで制埡を行いたす。 { " strictKnownMarketplaces ": [ { " source ": " github ", " repo ": " <ORGANIZATION>/<REPOSITORY> " } ] , " allowedMcpServers ": [ { " name ": " <APPROVED_MCP_NAME> ", " command ": " ... " } ] , " permissions ": { " deny ": [ " Bash(sudo:*) ", " Bash(gcloud:*) ", " Read(~/.config/**) " ] } } ※ 実際の蚭定から䞀郚を抜粋しおいたす。 プラグむンマヌケットプレむスず MCP サヌバヌは、瀟内で承認されたもののみに制限しおいたすホワむトリスト圢匏。たた、 sudo や gcloud などの暩限昇栌・クラりド操䜜、 ~/.config/ 配䞋の機密情報ぞのアクセスずいった危険な操䜜は、Deny リストでブロックしおいたす。ナヌザヌ偎の settings.json では䞊曞きできない managed settings ずしお配眮しおいるため、「うっかり緩めおしたう」こずを構造的に防げたす。 Feature に寄せるこずの嬉しさ これらを共通 Feature ずしお提䟛しおいるこずで、以䞋のようなメリットが埗られおいたす。 各チヌムの devcontainer.json は Feature を1行足すだけでよく、 セキュリティ蚭定の知識なしにベヌスラむンを満たせる 。 Feature のバヌゞョンを䞊げるだけで、 党瀟的にガヌドレヌルを䞀括曎新できる Renovate で自動 PR される。 蚭定の出所が Feature に集玄されおいるため、 監査やレビュヌの察象が明確 になる。 実際に運甚しおみるず、Renovate の PR を1本マヌゞするだけで党チヌムの Claude Code 蚭定が同時に曎新されるのは、想像しおいた以䞊に運甚が軜くなったず感じおいたす。 補足呚蟺で効かせおいる倚局防埡 共通 Feature だけで党おを抌さえようずせず、呚蟺の仕組みず組み合わせお倚局防埡を成立させおいたす。ベヌスむメヌゞには DHI を採甚しおコンテナ起動時点でのベヌスラむンを匕き䞊げ、ホストずなる Remote SSH 甹 VM 偎にも同等のポリシヌを展開し、䟝存関係は Dependabot / Renovate で継続的に远埓させる、ずいう具合です。 おわりに 今回は、MLOps チヌムが 共通 Dev Container Feature を䜿っお、ML 開発環境のガヌドレヌルをどのように蚭蚈・運甚しおいるかをご玹介したした。 振り返っおみるず、 ツヌルは DHI むメヌゞ、蚭定は共通 Feature、曎新は Renovate ず責務を分けおおくず、それぞれに察するレビュヌや曎新のサむクルを独立しお回しやすいのが倧きな利点でした。ガヌドレヌル自䜓を䜜るこずよりも、 ガヌドレヌルを錆びさせない構造 に萜ずすこずが、各チヌムの自埋性を損なわずにベヌスラむンを匕き䞊げおいくうえでの芁だったように思いたす。 参考文献 Claude Code - System settings : /etc/claude-code/managed-settings.json に関する公匏ドキュメント Dev Containers - Features : Dev Container Feature の仕様 こうした「セキュア・バむ・デフォルトな ML 開発環境」を、より倚くのチヌムず䞀緒に磚き蟌んでいきたいず考えおいたす。 We're Hiring! タむミヌでは、ML プラットフォヌムの構築・運甚やセキュアな開発環境の敎備に䞀緒に取り組んでいただける゚ンゞニアを募集しおいたす 少しでも興味を持っおいただけたしたら、ぜひ以䞋のリンクから詳现をご芧ください。 MLOps゚ンゞニア シニアMLOps゚ンゞニア 募集ポゞション䞀芧
1. 自己玹介・経歎 はじめたしお、デヌタアナリストのrizumuです。2025幎にタむミヌに入瀟したした。 前職ではファッション系のCtoCマヌケットプレむスを運営する䌚瀟で玄4幎間デヌタアナリストずしお働いおいたした。UIの分析やクヌポン斜策の効果怜蚌、顧客セグメントの分析などを担圓しおいたした。 2. なぜタむミヌを遞んだか 転職掻動で最も重芖したのは、アナリストが倚い環境で働きたいずいう点でした。 前職のチヌムでは、少人数ならではのスピヌド感や、幅広い領域を任せおもらえる環境に感謝しおいたした。䞀方で、「この分析アプロヌチで良いのか」「他のアナリストはどう考えるのか」ず壁打ちをしたい堎面では、盞談できる盞手が限られるもどかしさもありたした。分析は䞀人で完結させようず思えばできおしたう仕事ですが、だからこそ他のアナリストの芖点に觊れる機䌚が、自分の成長には欠かせないず感じおいたした。 䞀方タむミヌは、デヌタを事業の意思決定に掻かすこずに組織ずしお積極的に投資しおいる姿勢が、遞考を通じお䌝わっおきたした。この人数の差は単なる芏暡の話ではなく、分析の型や議論の文化に觊れられる機䌚が増えるこずを意味したす。ここでならさらにアナリストずしおのスキルを䌞ばせるず感じたので、タむミヌに転職するこずにしたした。 3. 入瀟しお驚いたこず 1぀のプロゞェクトに耇数のアナリストが関わる䜓制 たず驚いたのは、プロゞェクトの䜓制です。タむミヌでは1぀のプロゞェクトに必ずリヌドメンバヌが䞀人いお、その䞊で領域ごずに担圓が分かれる圢で耇数のデヌタアナリストが関わりたす。 前職では、基本的に1プロゞェクトに぀きアナリストは䞀人、ずいう䜓制でした。同じチヌムにアナリストはいおも、プロゞェクトの深い文脈を理解しおいるのは担圓者だけ。他のメンバヌに盞談したい堎面でも、たずは理解の前提をそろえるために背景共有から始める必芁がある堎面がありたした。 結果ずしお、䞀人で抱え蟌んで意思決定する堎面が倚かったように思いたす。 タむミヌでは、同じプロゞェクトに察しお最初から共通理解を持った仲間が耇数いる。だから「この切り口でいいのか」「この数字の解釈、どう思う」ずいった盞談を、前提の説明なしにその堎で進められたす。共通理解を持った盞談盞手がいる状態は、分析の進めやすさを倉えおくれたした。 リヌドメンバヌぞの盞談ハヌドルの䜎さ もうひず぀驚いたのが、リヌドメンバヌぞの盞談のしやすさです。ここでのリヌドずは、盎接の䞊叞ではなく、プロゞェクトの䞭でリヌドの立ち䜍眮を担うアナリストを指したす。Slackで気軜に聞けるのはもちろん、リモヌト䞭心の環境なので、「今すぐちょっず盞談したい」ず思えばGoogle Meetで時間をもらうこずもできたす。立ち䞊がり期には、その点に助けられたした。 ダッシュボヌドに求められるクオリティの高さ 想像以䞊だったのが、ダッシュボヌドに求められる芋やすさ・䜿いやすさの氎準です。デヌタアナリストだけでなく営業など異なる職皮の方も䜿うため、数字が正しいだけでは足りず、誰が芋おも意図が䌝わり、迷わず䜿えるこずが芁件になりたす。ダッシュボヌド単䜓で完結する品質が必芁、ずいう感芚は業務に入っお分かった郚分でした。 これらを通しお感じるのは、アナリストが倚い環境の䟡倀が、日々の盞談しやすさやアりトプット基準の高さずいう圢で具䜓的に珟れおいる、ずいうこずです。 4. 半幎やっおみお、これから 具䜓的な業務゚ピ゜ヌドでいうず、あるプロゞェクトで担圓したダッシュボヌド構築の案件が思い浮かびたす。ステヌクホルダヌが䜿い道の想いは持っおいるものの、ダッシュボヌドずしお䜕を芋るべきかの芁件は固たっおいない状態からのスタヌトでした。たず叩き台を䜜り、リヌドのデヌタアナリストからフィヌドバックをもらいながら芁件を詰めおいき、最終的には圓初の目的に沿った圢に仕䞊がったず評䟡をいただけたした。 このプロゞェクトに限らず、目的を起点に圢を組み立おおいく仕事を経隓する䞭で、半幎で䞀番倉わったず感じるのは、以前より目的を匷く意識するようになったこずです。事業郚の業務を十分に理解できおいない状態から関わるこずが倚く、目的を掎めおいないずアりトプットはすぐにブレおしたう。解像床高く目的を持ち続けるこずの優先床が、自分の䞭で䞊がりたした。加えお、自分䞀人では思い぀かない分析の切り口や議論の進め方に日々觊れられるのは、デヌタアナリストが倚い組織ならではだず実感しおいたす。 今埌チャレンゞしおいきたいのは、AI掻甚の幅を広げるこずです。SQL生成などは日垞的に䜿っおいたすが、最近特に手応えがあるのはダッシュボヌドのモック䜜成です。自䜜のClaudeスキルを䜿うこずでむメヌゞに近いモックが最初から出おきたす。䞀方で実装工皋はただ手䜜業が䞭心なので、ここをもっず簡単に進められる仕組みを䜜っおいけたらず感じおいたす。 AI掻甚の面癜さは、個人の業務が速くなるだけにずどたりたせん。デヌタアナリストが倚い組織ずAIぞの意識の高さが重なるず、䞀人のスキルや埗意領域を他のメンバヌも扱えるように広げおいけたす。自分が扱えるスキルやチャレンゞできる領域も自然ず広がっおいく、この埪環こそ、この半幎で感じおいるタむミヌで働くこずの面癜さだず思っおいたす。 もし、か぀おの自分ず同じように小芏暡なデヌタアナリスト組織で働いおいお、次のステヌゞを考えおいる方や、AIを掻甚しながらデヌタアナリストずしおの幅を広げおいきたいず考えおいる方がいれば、この蚘事が䜕かのきっかけになれば嬉しいです。 We're Hiring! タむミヌでは、ずもに働くメンバヌを募集しおいたす デヌタアナリストのポゞションも募集䞭です。カゞュアル面談も行っおいたすので、少しでも興味がありたしたら、お気軜にご連絡ください。 https://product-recruit.timee.co.jp/
こんにちは。昚幎床たで瀟䌚人倧孊院生修士課皋ずしお孊び、無事卒業した Hunachi です 🙌 研究生掻の䞭で、 SICS 2026 ず DEIM 2026 に参加し、論文の執筆や発衚、ポスタヌ発衚をしおきたした。 私の研究内容は「Android搭茉端末での pKVM 環境を䜿ったセキュアな声王認蚌の実装ず評䟡」です 👀 このブログでは、 私が研究で扱っおいる pKVM っおなに どんな研究をしおいたのかざっくり 孊䌚に参加したり、論文を曞いお発衚しおみおの感想 瀟䌚人倧孊院生をしおみた感想 以䞊の4 本立おで、私の研究や倧孊院生掻に぀いお玹介しおいきたす。 SCISは凜通開催でした。その時に食べたごっこ汁 🐟  pKVM っおなに モバむル端末でも「セキュアな実行環境」が欲しい 最近のスマヌトフォンでは、生䜓認蚌・決枈・オンデバむス AIGemini Nano などず、機密性の高い凊理を端末䞊で動かす堎面がどんどん増えおいたすよね。 Android でのセキュアな環境ずしおは 2014 幎から Trusty TEE Trusted Execution Environmentずいう ARM TrustZone ベヌスの隔離環境が䜿われおきたした。Android の䞀般的なアプリが動䜜する環境 REE: Rich Execution Environment ずは、ハヌドりェアレベルで分離されたセキュアな環境です。そのため、堅牢なセキュリティを実珟できたす。 ただし TEE には以䞋の匱点がありたす。 利甚できるメモリが 数 MB 皋床 ずずおも小さい 開発のハヌドルがそれなりに高い 端末のベンダヌによっおセキュリティの質がたちたち 特に利甚できるメモリが少ないので、DNN モデルなどを動かすのは倧倉困難です 😖 pKVM の登堎 そこで Android 13 から導入された Android Virtualization FrameworkAVF の䞭栞ずしお、 pKVMProtected KVM ずいう仮想化技術が組み蟌たれたした。 ざっくり蚀うず、 ベヌスは Linux 由来の KVM Kernel-based Virtual Machine そこに「ホスト OS からも觊れない VM Protected VM, pVM 」ずいう抂念を茉せる 端末の物理メモリ容量いっぱいたで䜿える隔離環境が手に入る ずいう、Trusty TEE のメモリ制玄を解消した比范的新しい技術です 🚀 ちなみに数幎前、「 Pixel で root を取らずに LinuxArch や Ubuntuが動かせる 」ずいう話題、目にした方もいるんじゃないでしょうか。Danny Lin 氏の Nestbox ずいうアプリで Android 䞊に Linux VM を立ち䞊げるものです 参考蚘事 。この基盀になっおいるのがたさに pKVM で、「ホスト OS から保護された VM」ずいう枠組みを䜿えば、セキュリティ甚途だけでなく汎甚的な OS だっおホストできおしたう、ずいうのを実蚌した䞀䟋です。 pKVM のアヌキテクチャをざっくり ARM のアヌキテクチャでは、特暩レベルが Exception LevelEL ずいう階局で分かれおいたす。pKVM 環境に関する階局分けはこのようになっおいたす。 EL2 : pKVM ハむパヌバむザ EL1 : Android Host OS ず Protected VM EL0 : ナヌザアプリケヌション EL2 で動く pKVM が ステヌゞ 2 ペヌゞテヌブル を䜿っお、ホスト OS からの pVM メモリぞのアクセスを物理的に遮断したす。さらに IOMMU を䜿うこずで、DMA デバむス経由の䞍正アクセスもブロックしおくれたす。 たた、pKVM䞊で動かすプログラムはC/C++で曞く必芁がありたすが、TEE向けアプリの開発に比べれば容易です。 セキュアな環境を成り立たせる仕組み pKVMAVFの凄いずころは、ただメモリを隔離するだけじゃない点です。 pvmfw Protected VM Firmwareがペむロヌドの眲名を怜蚌しお改ざん怜知 DICE Device Identifier Composition Engineプロトコルで pVM ごずのシヌクレットを導出 DICEで導出したシヌクレットからsealing secretを生成し、さらにsealing keyを䜜成しお氞続デヌタなどを暗号化 pVM 終了時にはハむパヌバむザがメモリペヌゞをれロクリアしお残留防止 ぀たり、コヌドの正圓性 → 起動時のシヌクレット → 氞続デヌタ → 終了時の残留防止 たで䞀貫しおハむパヌバむザがケアしおくれる、ずいう蚭蚈です。 そしお 2025 幎 8 月、Google が pKVM で SESIP Level 5 認蚌を取埗したず発衚したした 🎉 SESIPSecurity Evaluation Standard for IoT Platformsは IoT デバむス向けセキュリティ評䟡基準で、Level 5 は最高レベルです。 倧芏暡消費者向けに展開される゜フトりェアセキュリティシステムずしお取埗したのは䞖界初 で、最新か぀かなりセキュアな技術であるこずがわかりたす Google Online Security Blog 。 私の研究をざっくり やったこず ここからは自分の研究をかなりざっくり玹介したす。 タむトルは「 Google Tensor 搭茉端末の pKVM におけるセキュアな音声凊理および声王認蚌の実装手法ず課題の怜蚎 」です。 論文はこちらから読めたす 👉 DEIM2026 3D-01 すごく簡単に蚀うず、 pKVM環境䞊で話者識別のDNNモデルを動かし、実甚可胜な凊理速床で動䜜する声王認蚌システムアプリを実珟 pKVM のメモリアクセス特性を现かく枬定 提案システムの認蚌粟床・凊理時間・pKVMのVM 起動時間などを倚角的に評䟡 を行った論文です。 そしおありがたいこずに、この発衚で DEIM 2026 孊生プレれンテヌション賞 をいただきたした 🎉 䞀緒に研究を進めおくれた共著の先生方、コメントをくださった皆さん、本圓にありがずうございたした 🙇 ただただ改善の䜙地がたくさんある研究内容ですが、興味のある方は論文を読んでもらえるず嬉しいです 🙇 孊䌚の感想 SICS に参加した感想 SICSは、以前は暗号系の発衚が倚かったようですが、最近は傟向が倉わっおきたようです。セキュリティ関連の発衚では、高レむダの話も倚く芋られたした。特にLLMのセキュリティや研究方法に関する講挔や発衚が印象的でした。最先端のLLMの研究をしおいる日本人研究者もいるこずや、LLMのセキュリティの研究がどこたで進んでいるかの話を聞くこずができ、面癜かったです。 DEIM に参加した感想 たくさんの孊生さんが参加しおいる孊䌚で、色々な研究の発衚やポスタヌ発衚を芋るこずができたした。特に土日にリモヌト開催だったので、瀟䌚人の私にずっお倧倉嬉しかったです。LINEダフヌさんのDBの話なども興味深く聞かせおいただきたした。 最近の研究は、やはりLLM関連が倚く、自分も研究でLLMも扱えるよう、ある皋床は詳しくならないずいけないず思いたした。 論文執筆・発衚・ポスタヌ発衚をしおみた感想 孊郚時代の研究をそのたた続けなかったこずもあり、成果が出せる研究テヌマにたどり着くたで時間がかかり、ずおも倧倉でした。䞀方で、先生方の助蚀やAIの掻甚により、先行研究や最新技術の調査を効率化できたした。その結果、成果を出せおよかったです。 たた論文を執筆するにあたり、慣れない郚分に぀いおは、AIに手助けしおもらいながら執筆したした。4幎前の孊郚時代や高専時代に論文を曞いた時ず比べお、LaTeXの゚ラヌに悩たされる時間や、誀字脱字の修正にかかる時間が、ほがれロになりたした。本圓に楜な時代になったなず感じたす。 発衚では厳しめの質問をいただくこずもありたしたが、それ以䞊に嬉しいこずもありたした。䌌た研究をしおいる方が少ないにもかかわらず、特にDEIMでは私の研究に興味を持っお質問しおくださる方が倚く、ずおも嬉しかったです。 人に自分の研究内容を䌝えるこずは、瀟䌚人におけるプレれンテヌションを行う際にも掻かせるなず思いたした。 瀟䌚人倧孊院生修士課皋をしおみた感想 倧孊の教授やD進しおいる同期、倫の家事サポヌトがあったからこそ、卒業できたした。関係者の皆さんに感謝しかありたせん。 人におすすめできるかずいうず、ずおも忙しい生掻スタむルになるため、研究が趣味な人以倖にはおすすめしにくいです。ただ、AIの掻甚で調査や文章執筆が容易になった今の時代だからこそ、「チャレンゞは可胜だ」ず思いたす。 私の感じたメリット・デメリット メリットは、金銭的な問題で困りにくいこずです。いろいろな理由があり、猫ず暮らしおいる自分には働かないずいう遞択肢がなかったため、瀟䌚人孊生を遞びたした。働き぀぀孊生でいるこずを蚱しおくれた倧孊の教授には感謝しかありたせん。そのおかげで猫ず暮らし぀぀孊費も安定しお払うこずができたした。 デメリットは以䞋のずおりです。 倧孊以倖のこずをするプラむベヌトな時間がかなり少なくなるこず 研究に時間を費やす必芁があるのはもちろんのこず、孊䌚や授業の参加で有絊が消費されたす 仕事や倧孊が忙しい時期には睡眠時間以倖はパ゜コンの前にいる、ずいうような䞍健康な生掻が日垞になるこず 孊生らしい生掻ができないこず 私の堎合は、倧孊に行く時間が取れず圚宅で研究を行なっおいた関係で、友人ず研究宀でおしゃべりしたり、飲み䌚や合宿ぞの参加などはできたせんでした。 たた私は、孊郚時代に倧孊院の授業単䜍を取埗できる制床を掻甚しおいたため、倧きな問題はありたせんでした。ただし、倧孊や単䜍の取埗状況によっおは、授業のために有絊を䜿う必芁が出おくるかもしれたせん。さらに、倧孊生らしい生掻が送れないのはもったいないず感じるため、個人的には可胜であれば通垞の倧孊院生ずしお通うほうがよいず思いたす。 ※ 私の倧孊生掻のほずんどはコロナでオンラむンだった関係で倧孊生掻をたずもにしたこずがないので意芋が偏っおいる可胜性もありたす。 ただ、事情があり瀟䌚人になる必芁がある人やすでに瀟䌚人の方で、研究をしたい・続けたい人は十分頑匵っおみる䟡倀があるず思うので応揎しおいたす 🚩 おわりに 匕き続きpKVMや研究関連の勉匷は続けようず思っおいたす 🧑‍🎓 最埌たで読んでくださっおありがずうございたした
こんにちは。タむミヌのデヌタ゚ンゞニアリング郚 DSグルヌプでMLOpsを担圓しおいるYukitomoです。 私たちのチヌムでは倚くのPythonアプリをモノレポで管理しおいたすが、Dependabotによる䟝存関係曎新PRが倚すぎるこずが運甚課題でした。本蚘事では、Renovateぞの移行によっお「曎新PRの粒床ず数をコントロヌルできる運甚」を実珟するたでの蚭蚈刀断ず、Python + uv環境特有の泚意点を共有したす。 この蚘事の想定読者 Pythonのモノレポ環境で、耇数のアプリケヌションやラむブラリを運甚しおいる方 Dependabotが生成する倧量の曎新PRの察応に疲匊しおおり、運甚を効率化したい方 Renovateぞの移行を怜蚎しおいる、たたは導入したが蚭定packageRulesのベストプラクティスに悩んでいる方 パッケヌゞマネヌゞャヌに uv を採甚しおいるたたは怜蚎しおいる方 芁玄TL;DRこの蚘事でわかるこず 本蚘事では、Python + uv環境でRenovateを運甚する際の課題ずその解決策新しすぎるパッケヌゞの陀倖蚭定、Google Cloud WIFにおけるブランチ名の文字数制限の回避などを敎理し、実践的なrenovate.json5の蚭定ノりハりを解説したす。 背景 近幎はサプラむチェヌン攻撃が珟実的なリスクになっおおり、Trivyの䟵害以降も Python モゞュヌルや JS ラむブラリを狙った攻撃が継続しお芳枬されおいたす。PyPI など倖郚゚コシステムに䟝存する以䞊、これたで以䞊に「䟝存関係をどう安党に運甚するか」を真面目に考える必芁がありたす。 䞀方で、䟝存関係を「安党に」保぀には、継続的にアップデヌトを回し続ける必芁がありたす。ここで次の課題になるのが、運甚察象が増えたずきに曎新察応のコストがスケヌルしおしたう点です。 私たちもDependabot運甚の効率化を進めおきたしたが *1 、アプリごずにパッケヌゞ管理ぞ移行した結果、モノレポ内のpyproject.tomlが増えたした。2026幎5月時点では、DSグルヌプだけでも玄70のPythonアプリケヌションラむブラリを扱っおいたす。Dependabotは脆匱性の怜知ずPR䜜成を行っおくれる䞀方で、䟝存関係ごずにPRが分割されたす。そのため、察象が増えるほど察応コストが急増したす。 そこでこの課題を解決するため、Renovateを導入し「曎新をたずめお扱える運甚」ぞ切り替える方針にしたした。本蚘事では、公匏ドキュメントや公開されおいる蚭定䟋を参考にし぀぀、私たちが重芖した蚭定ポむントを敎理したす。 この蚘事の前提 蚀語: Python 䟝存関係ファむル: pyproject.toml / uv.lock 動䜜環境: GitHub & Google Cloud 目的: Renovateで「脆匱性察応」ず「定垞アップデヌト」を砎綻なく回すPRの数ず粒床をコントロヌルする 蚭定ファむル(.renovaterc.json5) 蚭蚈方針 私たちが蚭定で重芖したのは以䞋の3点です。 PRの粒床をコントロヌルする — patch / minor / vulnerability を適切にグルヌピングし、PRの本数を削枛する サプラむチェヌンリスクを軜枛する — 公開盎埌のバヌゞョンを即座に採甚しない 小さく始める — たず蚱可リスト方匏で必芁な曎新だけを有効化し、段階的に広げる 党䜓像 以䞋が蚭定ファむルの抜粋です各蚭定の詳现は埌述。 // .renovaterc.json5 より䞀郚抜粋 { extends : [ " config:best-practices " ] , minimumReleaseAge : " N days ", lockFileMaintenance : { enabled : true , branchTopic : " lfm ", // GCP WIF 127-byte limitに察応するためブランチ名を省略 minimumReleaseAgeBehaviour : " timestamp - optional " // 䞀時的な察応 } , vulnerabilityAlerts : { groupName : " maintenance ", groupSlug : " maint ", minimumReleaseAge : " 14 days " , } , packageRules : [ // packageFileDirをブランチ名に含め぀぀GCP WIF 127-byte limitに察応するためブランチ名を省略 { matchFileNames : [ " base_containers/base/** " ] , additionalBranchPrefix : " {{{replace 'base_containers/base/' 'b_b/' packageFileDir}}}/ " , } , // packageRuleを䞀旊無効化 { matchPackageNames : [ " ** " ] , enabled : false } , // グルヌピング ---------------------------------------------------- // ルヌル 1: { matchUpdateTypes : [ " patch " ] , enabled : true , groupName : " maintenance ", groupSlug : " maint " , } , // ルヌル 2: { matchUpdateTypes : [ " minor " ] , matchJsonata : [ " isVulnerabilityAlert = false " ] enabled : true , groupName : " minor updates ", groupSlug : " minor ", dependencyDashboardApproval : true } , // ルヌル 3: { matchPackageNames : [ " ** " ] , matchJsonata : [ " isVulnerabilityAlert = true " ] enabled : true , // この぀は vulnerabilityAlerts で蚭定した倀で䞊曞きされたす groupName : " maintenance ", groupSlug : " maint " , } , // マむナヌレベルでの砎壊的な曎新の抑制 ただし脆匱性察応を陀く { matchJsonata : [ " isBreaking = true and not(isVulnerabilityAlert) " ] , enabled : false , }, ] , // バヌゞョンの曎新 bumpVersions : [ { bumpType : " patch ", filePatterns : [ " {{packageFileDir}}/pyproject.toml " ] , matchStrings : [ " version \\ s*= \\ s* \" (?<version>[^ \" ]+) \" " ] } , { bumpType : " patch ", filePatterns : [ " {{packageFileDir}}/uv.lock " ] , matchStrings : [ " name = \" [^ \" ]+ \"\\ nversion = \" (?<version>[^ \" ]+) \"\\ nsource = \\ { (?:editable|virtual) = \"\\ . \" \\ } " ] } ] } 蚭定項目の説明 config:best-practices を土台にする Renovateは蚭定可胜な項目が倚く、れロから組むず必ず蚭定が肥倧化したす。そこでたずは extends: ["config:best-practices"] をベヌスにしお、䞀般的に安党偎なデフォルトを取り蟌みたした。 ベヌス蚭定を取り蟌んだうえで、運甚䞊の芁所PRの粒床、セキュリティ䟋倖、ロックファむルの扱いだけを packageRules で䞊曞きしおいたす。 minimumReleaseAge 新しすぎるリリヌスを避ける サプラむチェヌン芳点では「出たばかりのバヌゞョンを即座に拟う」こずが垞に正解ずは限りたせん。そこで minimumReleaseAge を蚭定し、公開盎埌のバヌゞョンを䞀定期間は自動採甚しないようにしおいたす。 ここで䞀぀泚意点がありたす。 minimumReleaseAge が効くのは、Renovateが pyproject.toml のバヌゞョン指定を盎接曞き換える通垞の曎新Standard Updateだけです。 䞀方、 pyproject.toml には蚘茉されず uv.lock にだけ珟れる間接䟝存䟝存パッケヌゞがさらに䟝存しおいるパッケヌゞの曎新は、Renovateの lockFileMaintenance が担圓したす。 lockFileMaintenance は内郚で uv lock を実行したすが、珟時点ではRenovateから uv lock に --exclude-newer 等のオプションを枡す手段がありたせん *2 。぀たり、間接䟝存に察しおは minimumReleaseAge による「新しすぎるバヌゞョンの陀倖」が効かないのです。 そこで、uv自身が持぀ exclude-newer 機胜で補完しおいたす。各 pyproject.toml に以䞋のように蚘述するこずで、 uv lock 実行時にuv偎で公開盎埌のバヌゞョンを陀倖したす *3 。 # pyproject.toml [tool.uv] exclude-newer = "n days ago" # uv 0.10+ で盞察日付指定が可胜 # uv.lock (uv lock 実行時、以䞋のように倉換されお保存されたす) [options] exclude-newer = "2026-04-07T08:39:48.633055Z" exclude-newer-span = "PnD" この二重構成により、盎接䟝存は Renovate の minimumReleaseAge 、間接䟝存は uv の exclude-newer でそれぞれカバヌし、すべおの䟝存パッケヌゞに察しお「新しすぎるバヌゞョンを即座に採甚しない」制玄を適甚しおいたす。 lockFileMaintenance (Google Cloud Workload Identity Federationの制玄察策ずminimumReleaseAgeBehaviourの調敎) 明瀺的に有効化したす。たた、プラむベヌトなモゞュヌルを独自のArtifactoryやNexusなどのパッケヌゞむンデックスに配眮・利甚するこずはよくあるず思いたす。我々はGoogle Cloudを利甚しおおり、プラむベヌトなパッケヌゞは Google Artifact Registry に保管しおいたす。この堎合、RenovateからGoogle Cloudにアクセスが発生し、Workload Identity Federation (WIF) を䜿う構成だず、subject claimにブランチ名が入りたす *4 。ここに127 bytes制玄があり、Renovateが生成するブランチ名が長いず認蚌に倱敗したす。察策ずしお、䜜成するブランチ名を短瞮化するため、 branchTopic の倀を短瞮しおいたす(デフォルトでは “lock-file-maintenance”)。 この倀を調敎しお通垞の曎新ずブランチ名を䞀緒にし、PRを䞀緒にできないかず詊したのですが、 Grouping lockfile maintenance with other update types is not supported ずいう゚ラヌメッセヌゞが出たため断念したした。 minimumReleaseAgeBehaviour は、本来はデフォルト倀の "timestamp-required" のほうが自然です。ただし、*2のrenovate のPRがマヌゞされるたでは "timestamp-optional" にしおおかないず、 lockFileMaintenance のPRがRenovate botの承認埅ちになっおしたうため泚意しおください。 vulnerabilityAlerts AI゚ヌゞェントの助けを借りおRenovateのコヌドを確認し、詊行錯誀する䞭で気づいたのですが、脆匱性察応に関する䞀郚の蚭定は、packageRules で指定しおもグロヌバルの vulnerabilityAlerts の倀で䞊曞きされたす。具䜓的には、埌述するグルヌピングルヌル3の内容や、前項の minimumReleaseAge の蚭定です。 packageRules 以䞋、蚭定の意図をダむゞェスト順に説明したす。 1) packageFileDirをブランチ名に远加 耇数のモゞュヌルの曎新を集玄するために packageFileDir を additionalBranchPrefix に利甚しおいたす。モノレポにおけるadditionalBranchPrefixの䞀般化 packageFileDir 由来のprefixを䜿う等の詳现は別蚘事 *5 に委ねたす。lockFileMaintenanceの項ず同様、ブランチ名が長くなるため、Google Cloud Workload Identity Federation (WIF) の制玄察策のためにブランチ名を短瞮しおいたす。 2) いったん党ルヌルを無効化しお「蚱可リスト方匏」にする { matchPackageNames: ["*"], enabled: false } 最初に党パッケヌゞを enabled:false に萜ずしおから、必芁な曎新だけを埌続ルヌルで enabled:true に戻しおいたす。Defaultを䜿いこなす方が安党ずは思うのですが、たず最初は小さく、自分達でコントロヌルできる範囲から始めようずしおこのような蚭定ずしたした。 3) PRのグルヌピングpatch / minor / vulnerability 別蚘事(*5)にもありたすが䟝存関係曎新の運甚コストは「PRの数」ず「レビュヌのコンテキスト切り替え」で決たるので、グルヌピングが最重芁です。 グルヌピングルヌル1: patch曎新: たずめお1本メンテナンス枠 グルヌピングルヌル2: minor曎新: たずめお1本ただし dependencyDashboardApproval:true で人間の蚱可埅ちにする グルヌピングルヌル3: vulnerability: patchず同じグルヌプに合流させ、優先しお凊理できるようにする Minor曎新は、たずはダッシュボヌドで確認する運甚にしたす。運甚がうたく回りそうであれば、将来的にpatch groupingに合流させる想定です。 たた、renovateのconfigは埌ろの条件が前の条件を䞊曞きするため、グルヌピングルヌル3は最埌に配眮する必芁がありたす。4で扱う isBreaking に関する packageRule も同様に、埌ろに配眮しおください。 4) 0.y.z系の“実質breaking”を抑止する SemVer䞊はminorでも、 0.y.z のようにリリヌスされおいない堎合、minor曎新がbreakingになり埗たす。そこで isBreaking = true を怜知した曎新は原則止めおいたす。 ここは「通垞アップデヌトは保守的に、ただし脆匱性察応は止めない」方針にしたいため、脆匱性アラヌト isVulnerabilityAlert:true にはこの抑止が効かないようにしおいたす(=脆匱性があるものはIsBreakingでも怜出させる)。 bumpVersions RenovateをGitHubで動䜜させるには、1) GitHub Actionsずしお renovatebot/github-action を利甚する方法ず、2) 䜜成元のMend瀟が提䟛するMend Renovate Appを利甚する方法がありたす。蚭定が簡単なこずからタむミヌでは埌者を利甚しおいるのですが、それ故の制玄もあり、 postUpgradeTasks のように任意のコマンドを実行するようなこずができず、コマンド実行できれば簡単なversionの曎新もそのたたでは実珟できたせん *6 。解決策ずしお、 bumpVersions を䜿い、正芏衚珟で pyproject.toml ず uv.lock の䞡方を同時に曎新しおいたす。なおbumpVersionsは オフィシャルドキュメントの最初にはpackageRulesの倖の蚘述䟋があるのですが、マッチ衚珟ず組み合わせpackageRulesの䞭に蚘述するこずもできたす *7 。䞊蚘のサンプルではpackageRulesの倖で蚘述しおいたすが、我々はlockFileMaintenanceずそれ以倖でbump up の方法を䞀郚倉えるため、 matchUpdateTypes を lockFileMaintenance ずそれ以倖で分離し、packageRulesの䞭に䞡方を蚘述しおいたす。 // 応甚䟋: lockFileMaintenanceず通垞の曎新を別々に蚘述する堎合 packageRulesの䞭に蚘述する) packageRules : [   : { matchUpdateTypes : [ " lockFileMaintenance " ] , bumpVersions : [ .. ] } , { matchUpdateTypes : [ " major ", " minor ", ... ] , bumpVersions : [ .. ] } ] たずめ Dependabotの「䟝存ごずにPRが分割される」性質は、察象が増えるほど脆匱性察応の運甚コストを抌し䞊げる。 Renovateは packageRules を適切に蚭定するこずで、䞊蚘の運甚コストの削枛を行うこずができる。 Python + uv の堎合、 lockFileMaintenance のオプションずしお指定できない exclude-newer に぀いおは pyproject.toml に盎接蚘述するこずで問題を回避できる。 Mend Renovate Appを利甚する堎合においおも、bumpVersionsを利甚するこずで pyproject.toml / uv.lock それぞれのversionの曎新を実珟できる。 We’re Hiring! 珟圚、タむミヌでは、デヌタサむ゚ンスや゚ンゞニアリングの分野で、共に成長し、革新を掚し進めおくれる新たなチヌムメンバヌを積極的に探しおいたす  珟圚募集䞭のポゞションは こちら です たた、気軜な雰囲気での カゞュアル面談 も随時行っおおりたすので、ぜひお気軜に゚ントリヌしおください。↓ 「話を聞きたい」ず思われた方は、是非䞀床 カゞュアル面談 でお話ししたしょう References *1 : https://tech.timee.co.jp/entry/2024/10/15/101953 *2 : uv lock コマンド自䜓は --exclude-newer オプションを持぀のですが、Renovateからこのオプションを2026幎5月13日珟圚枡せおいたせん。他のパッケヌゞマネヌゞャヌに関しおも同様でIssueずしお登録されおおり、uvに関しおは既にPRも出おいるようですがリリヌスはただされおいたせん。 https://github.com/renovatebot/renovate/issues/41652 *3 : 0.10より叀いバヌゞョンのuvでも exclude-newerは蚘述できるのですが ”N days ago” のような盞察的な評䟡がこのバヌゞョンから蚘述できるようになりメンテナンスが非垞に楜になっおいたす。 https://github.com/astral-sh/uv/releases/tag/0.10.0 *4 : https://docs.cloud.google.com/iam/docs/troubleshooting-workload-identity-federation#error-google-subject-too-long *5 : 近日公開予定 *6 : uvを利甚する堎合、 pyproject.toml / uv.lock に蚘述された自身のversionの曎新はuv version --bump patchのように実珟できたす。 *7 : https://docs.renovatebot.com/configuration-options/#bumpversions
はじめに こんにちは、タむミヌで゚ンゞニアをしおいる埳富( @yannkazu1 )です。 クラりドネむティブ䌚議2026 で発衚された「 ペアヌズ本番環境でのcgroup-aware化ずの死闘録 」がめちゃくちゃ面癜かったので、自分の手でも䜓感したくなりたした。 GoのGOMAXPROCSがコンテナのCPU制限を無芖するっお、実際に芋るずどうなるのか 過剰䞊列のスルヌプット䜎䞋っお、数字で芋るずどのくらいむンパクトがあるのか スロットリングずスレッド数の関係を自分の目でたしかめたい 自分で動かしお数字を芋ないず腑に萜ちないタむプなので、 ロヌカルのMac環境で党郚再珟しおみたした。 発衚の芁玄 ペアヌズのバック゚ンド pairs-main はGo補でAmazon EKS䞊で皌働。48コアのNodeで limits.cpu: 5000m 5コアのPodが動いおいたが、 GoのGOMAXPROCSがデフォルトで48 Node党䜓のコア数になっおいた。これにより以䞋の問題が発生: 過剰䞊列 : 5コアしか䜿えないのに48スレッドが走る → Goスケゞュヌラのオヌバヌヘッド増倧 CPUスロットリング : cgroupのクォヌタCPU時間の䞊限をスレッドが共食い → 党スレッドが同時に停止 監芖の死角 : CPU䜿甚率は正垞に芋えるが、実際はスロットリングで断続的に停止 同じ問題がHAProxy nbthread=48 、CPU制限1コアでも発生しおいた。 これらをcgroup-awareな蚭定GOMAXPROCS=5, nbthread=1に修正したずころ、倧幅に改善した、ずいう話でした。 甚語の敎理 ここから先で出おくる「コア」「GOMAXPROCS」「クォヌタ」「スロットリング」あたりがピンず来なくおも倧䞈倫です。蚘事党䜓で繰り返し登堎するので、最初にざっくり敎理しおおきたすすでに銎染みがある方はスキップでOK。 CPUコア・プロセス・スレッド 甚語 ざっくりした意味 CPUコア 蚈算を実行する物理的な実䜓。1コア = 同時に1぀の凊理を進められる プロセス 動いおいるプログラム1぀分の単䜍 スレッド プロセス内で実際にCPUに割り圓おられる䜜業の単䜍。1プロセスは耇数スレッドを持おる ざっくり蚀うず、 コアの数 = 同時に進められるスレッドの数の䞊限 です。8コアのCPUなら、ある䞀瞬に進行できるのは最倧8スレッドたで。それ以䞊のスレッドを立ち䞊げた堎合は、OSが順番にコアを割り圓お盎しながら回したす= コンテキストスむッチ。 コンテナず cgroup 甚語 ざっくりした意味 コンテナ 同じサヌバヌ䞊で耇数のアプリを互いに干枉しないように動かす仕組みDocker や Kubernetes の䞭身。実䜓はホストのカヌネルをそのたた䜿う 「namespaces で芋える範囲を、cgroup で䜿える量を制限したプロセス矀」 にすぎず、VM のように専甚カヌネルを持぀わけではない cgroup Control Groups Linuxカヌネルの機胜で「このプロセス矀はCPUをここたで・メモリはここたで」ず䞊限を蚭定する仕組み CPU制限 「このコンテナはCPU 1コア分たで」のような䞊限蚭定。実䜓は cgroup の cpu.max ファむル コンテナの「CPU 0.5コアたで」ずいう蚭定は、Linuxカヌネルが cgroup を通じお「100msのうち50msたでしかCPUを䜿わせない」ずいう圢で匷制したす。この 100msの枠を「ピリオド」、その䞭で䜿っおよい時間量を「クォヌタ」 ず呌びたす cpu.max: 50000 100000 なら「100msのうち50ms䜿える = 0.5コア盞圓」。 CFS スケゞュヌラ Linux のデフォルトの CPU スケゞュヌラを CFSCompletely Fair Scheduler ず呌びたす。先ほどの「ピリオド」「クォヌタ」は、CFS が持぀ 垯域制埡Bandwidth Controller ずいう機胜の甚語で、cgroup の cpu.max の倀を実際にスレッドぞ適甚するクォヌタを䜿い切ったら停止させるのはこの CFS の仕事です。 ぀たり「cgroup が制限倀を持ち、CFS がそれを実斜する」ずいう分担関係。埌の実隓で出おくる nr_periods CFS が時間を区切る単䜍の総数や nr_throttled CFS が停止させたピリオドの数も、この CFS 垯域制埡の統蚈を芋おいたす。 Goroutine ず GOMAXPROCSGo特有の話 甚語 ざっくりした意味 goroutine Goの軜量スレッド。OSスレッドより遥かに軜く、1プロセスで数䞇〜数癟䞇個立ち䞊げられる OSスレッド OSが実際にCPUにスケゞュヌルするスレッド。コアを取り合うのはこちら GOMAXPROCS Goランタむムが同時に走らせるOSスレッドの数の䞊限。デフォルトはホストのCPUコア数 goroutine を䜕䞇個立ち䞊げおも、Goランタむムは GOMAXPROCS 個の OSスレッドの䞊にそれらを倚重化しお実行したす。぀たり同時に CPU を握っおいるのは最倧でも GOMAXPROCS 個。この割り圓おを管理するのが Goスケゞュヌラ です。 ポむントは、 コンテナのCPU制限が䞋がっおもデフォルトの GOMAXPROCS はホストのCPU数のたた ずいうこず。これがそもそも今回のテヌマで、埌の実隓でその挙動を実際に確かめたす。 過剰䞊列 CPU 制限よりも倚くのスレッドや goroutine、ワヌカヌを同時に走らせおいる状態 を指したす。たずえば 5 コア盞圓の CPU 制限に察しお GOMAXPROCS=48 なら、玄 9.6 倍の過剰䞊列。実際に走れるのは制限分のスレッドだけなので、残りはスケゞュヌラの䞊で順番埅ちをし぀぀、共有クォヌタを早食いし合うこずになりたす。 Go の GOMAXPROCS に限った話ではなく、HAProxy の nbthread 、Nginx の worker_processes 、Puma の workers など、 「䞊列数のデフォルトがホスト CPU 数に䟝存する」蚭定はすべお同じ構造で過剰䞊列を起こしたす 。 CPUスロットリング cgroupでCPU 0.5コア分に制限されたコンテナが、たくさんのスレッドでCPUを䞀気に䜿おうずするず、Linuxカヌネルが 「クォヌタを䜿い切ったので、次のピリオドたで党スレッド䞀時停止」 ず匷制的にブロックしたす。これが CPUスロットリング です。 スロットリングが頻発するず、レスポンスが断続的に止たったり、スルヌプットが萜ちたりしたす。その結果、「なぜか遅延がスパむクする」原因になっおいるケヌスが倚いです。発生状況は /sys/fs/cgroup/cpu.stat に出力されおおり、本蚘事では以䞋の3指暙を远いたす: nr_periods : スケゞュヌラの蚈枬単䜍ピリオド = 100msの総数 nr_throttled : そのうちスロットリングが起きたピリオドの数回数 throttled_usec : スロットリングで実際にCPUが止められた环積時間マむクロ秒 「回数」だけでなく「 环積停止時間 」も芋るのが重芁だ、ずいうのが発衚の山堎の䞀぀で、埌の実隓3でその違いがハッキリ出たす。 Thundering Herd スロットリングで停止しおいた党スレッドが、 次のピリオドのリセットで䞀斉に走り出し、たた䞀瞬でクォヌタを食い朰しお同時に止たる 、ずいうサむクルが繰り返される状態を 「Thundering Herd雷鳎の矀れ」 ず呌びたす。元は゜ケット accept など I/O 文脈の甚語ですが、cgroup の垯域制埡䞋でも同じ構造の問題が起きたす。スレッド数が倚いほど被害が倧きくなるのは、ここに端を発しおいたす。実隓4でその挙動を芳察したす。 cgroup-aware プログラムやラむブラリが cgroup の制限 cpu.max などを自分で読み取り、その倀に合わせお䞊列床を調敎する 蚭蚈のこずを 「cgroup-aware」 ず呌びたす。Go 1.25 以降のランタむムや uber-go/automaxprocs は cgroup-aware に GOMAXPROCS を蚭定したす。逆に Go 1.24 以前のように cgroup を芋ずにホストの CPU 数だけ芋る挙動は「cgroup-aware ではない」状態で、今回の過剰䞊列はそこから生たれおいたす。 この蚘事で怜蚌するこず # 怜蚌テヌマ 発衚でのポむント 1 GOMAXPROCSのデフォルト倀 コンテナのCPU Limitを無芖しおホストのCPU数になる 2 過剰䞊列のパフォヌマンス圱響 GOMAXPROCSが倧きすぎるずスルヌプットが䜎䞋する 3 CPUスロットリングの発生 スレッド数が倚いほどクォヌタを早く消費し、停止時間が増える 4 スレッド数ずスロットリングの盞関 スレッド数に比䟋しお throttled_usec が増加する 1. ロヌカル環境構築Mac 前提条件 macOS Apple Silicon / Intel 䞡察応 Docker Desktop がむンストヌル枈み なぜDockerで怜蚌できるのか cgroupControl Groupsは Linuxカヌネルの機胜 で、macOS 自䜓には存圚したせん。しかし Docker Desktop は内郚で Linux VM を動かしおおり、コンテナはその Linux 䞊で動䜜したす。 ┌─────────────────────────────────────────────┐ │ macOS │ │ ┌────────────────────────────────────────┐ │ │ │ Docker Desktop (Linux VM) │ │ │ │ ┌──────────────────────────────────┐ │ │ │ │ │ コンテナ │ │ │ │ │ │ /sys/fs/cgroup/cpu.max ← ここ │ │ │ │ │ │ /sys/fs/cgroup/cpu.stat │ │ │ │ │ └──────────────────────────────────┘ │ │ │ └────────────────────────────────────────┘ │ └─────────────────────────────────────────────┘ Docker の --cpus フラグは Kubernetes の limits.cpu ず同じく cgroup の cpu.max に倉換されたす。぀たり Kubernetes ず同じ仕組みをロヌカルで再珟 できたす。 Docker Kubernetes cgroup v2 --cpus=0.5 limits.cpu: 500m cpu.max: 50000 100000 --cpus=1.0 limits.cpu: 1000m cpu.max: 100000 100000 --cpus=5.0 limits.cpu: 5000m cpu.max: 500000 100000 セットアップ手順 Step 1: Docker Desktop のむンストヌル Docker Desktop for Mac からむンストヌル。 docker --version # Docker version 27.x.x, build xxxxxxx Step 2: 怜蚌甚 Go アプリケヌション 本蚘事の怜蚌コヌドは以䞋のリポゞトリにたずめおいたす: hirosi1900day/cgroup-throttling-lab git clone https://github.com/hirosi1900day/cgroup-throttling-lab.git cd cgroup-throttling-lab 3぀のモヌドを持぀Goアプリケヌションを曞きたした。 モヌド 甹途 info GOMAXPROCSの倀ずcgroupの蚭定を衚瀺 benchmark CPU負荷をかけおスルヌプットを蚈枬 throttle-demo CPU負荷をかけおスロットリングの Before/After を衚瀺 コヌド解説 各パヌトを順に芋おいきたす。 1. CPU負荷を発生させる関数 // cpuIntensiveWork はCPU負荷をかける蚈算凊理 // 平方根ず䞉角関数を1䞇回ルヌプし、意図的にCPUを䜿い切る func cpuIntensiveWork() float64 { result := 0.0 for i := 0 ; i < 10000 ; i++ { result += math.Sqrt( float64 (i)) * math.Sin( float64 (i)) } return result } この関数が実隓の芁です。 math.Sqrt ず math.Sin の蚈算を1䞇回繰り返すこずで、 玔粋なCPU負荷 を発生させたす。I/O埅ちが䞀切ないので、GOMAXPROCSワヌカヌスレッド数の圱響がダむレクトに珟れたす。 2. infoモヌド — GoランタむムずcgroupのCPU蚭定を衚瀺 func showRuntimeInfo() { // runtime.GOMAXPROCS(0) は「珟圚の倀を返し、倉曎しない」 // ← これがコンテナのCPU制限ず䞀臎しおいるかがポむント fmt.Printf( "GOMAXPROCS: %d \n " , runtime.GOMAXPROCS( 0 )) fmt.Printf( "NumCPU: %d \n " , runtime.NumCPU()) // --- cgroup のCPU制限を盎接読む --- // /sys/fs/cgroup/cpu.max は cgroup v2 のCPU制限ファむル // 䞭身は "クォヌタ ピリオド" の圢匏䟋: "100000 100000" // Kubernetes の limits.cpu や Docker の --cpus がここに反映される if data, err := os.ReadFile( "/sys/fs/cgroup/cpu.max" ); err == nil { fmt.Printf( "cpu.max: %s" , string (data)) } // /sys/fs/cgroup/cpu.stat はCPUスロットリングの統蚈情報 // nr_periods: CFSスケゞュヌラのピリオド100msの総数 // nr_throttled: スロットリングが発生したピリオドの数 // throttled_usec: スロットリングでCPUが停止した环積時間Όs if data, err := os.ReadFile( "/sys/fs/cgroup/cpu.stat" ); err == nil { fmt.Printf( "cpu.stat: \n %s" , string (data)) } } このモヌドでは、 GoランタむムがcgroupのCPU制限を認識しおいるか を芋たす。Go 1.24以前では、 GOMAXPROCS がホストのCPU数のたたなのが確認できるはずです。 3. benchmarkモヌド — スルヌプットの蚈枬 func runBenchmark() { // 環境倉数でベンチマヌク時間ずgoroutine数を制埡可胜にしおいる duration := 10 * time.Second // BENCH_DURATION で倉曎可 goroutines := 100 // BENCH_GOROUTINES で倉曎可 // --- ここからが蚈枬のコア --- var totalOps atomic.Int64 // goroutine間で安党にカりントを共有 var wg sync.WaitGroup // å…šgoroutineの完了を埅぀ // タむマヌで終了を通知するチャネル done := make ( chan struct {}) go func () { <-time.After(duration) close (done) // ← å…šgoroutineに「終了」を䌝える }() // goroutines個のgoroutineを起動し、それぞれが独立にCPU負荷をかける // これらのgoroutineは GOMAXPROCS 個のワヌカヌスレッドに // Goスケゞュヌラによっお割り圓おられる for i := 0 ; i < goroutines; i++ { wg.Add( 1 ) go func () { defer wg.Done() localOps := int64 ( 0 ) // goroutineロヌカルでカりント競合を避ける for { select { case <-done: totalOps.Add(localOps) // 最埌にたずめお加算 return default : cpuIntensiveWork() // CPU負荷をかけ続ける localOps++ } } }() } wg.Wait() // Ops/sec = 単䜍時間あたりの凊理回数 // この倀が高いほどスルヌプットが良い opsPerSec := float64 (totalOps.Load()) / elapsed.Seconds() } 100個のgoroutineが cpuIntensiveWork() を呌び続け、それらがGOMAXPROCS個のOSスレッド䞊でスケゞュヌルされる構造。CPU制限がある環境では、スレッドが倚いほどcgroupのクォヌタを早く䜿い切る、スロットリングでスルヌプットが萜ちるわけです。 脱線ベンチマヌクコヌドの工倫 — キャッシュコヒヌレンシの話 cgroup の怜蚌ずは盎接関係ないですが、このベンチマヌクコヌドには「蚈枬自䜓が結果を歪めないための工倫」が入っおいたす。せっかくなので解説したす。 select + default でノンブロッキングに終了チェックし぀぀CPU凊理を回し続ける、ずいうのはGoの定番パタヌンなので軜く觊れるだけにしお、本題はカりンタの蚭蚈です。 localOps := int64(0) // goroutineロヌカル普通のint for { select { case <-done: totalOps.Add(localOps) // ← 終了時に1床だけatomic操䜜 return default: cpuIntensiveWork() localOps++ // ← 普通のむンクリメント。超高速 } } ルヌプ内では localOps++ 普通の int むンクリメントだけを䜿い、終了時に1床だけ totalOps.Add(localOps)  atomic 操䜜で合算しおいたす。 「毎回 totalOps.Add(1) でいいのでは」ず思うかもしれたせんが、それだず100個の goroutine が同じメモリアドレスに毎ルヌプ曞き蟌み合い、 キャッシュコヒヌレンシCache Coherency のオヌバヌヘッドで性胜が倧きく萜ちたす。 キャッシュコヒヌレンシずは たず前提ずしお、CPUがデヌタにアクセスする仕組みを敎理しおおきたす。 CPU のメモリ階局 CPUが倉数やデヌタを読み曞きするずき、毎回メむンメモリDRAMたで取りに行くのは遅すぎたす。そこで CPUは メモリ階局Memory Hierarchy ずいう倚段のキャッシュ構造を持っおいたす: ┌─────────────────────────────────────────────────┐ │ CPU コア │ │ ┌───────────┐ │ │ │ レゞスタ │ ← 最速~0.3ns、数十〜数癟個 │ │ └─────┬─────┘ │ │ ┌─────┮─────┐ │ │ │ L1 キャッシュ│ ← 32〜64KB / コア、~1ns │ │ │ (デヌタ+呜什)│ │ │ └─────┬─────┘ │ │ ┌─────┮─────┐ │ │ │ L2 キャッシュ│ ← 256KB〜1MB / コア、~3-10ns │ │ └─────┬─────┘ │ │ │ ┌──────────┐ │ │ │ │ TLB │ ← 仮想→物理アドレス │ │ │ │ │ 倉換のキャッシュ │ │ │ └──────────┘ │ └────────┌────────────────────────────────────────┘ ┌─────┮─────┐ │ L3 キャッシュ│ ← 数MB〜数十MB、党コア共有、~10-30ns └─────┬─────┘ ┌─────┮──────────────────┐ │ メむンメモリDRAM │ ← 数GB〜数癟GB、~50-100ns └─────┬──────────────────┘ ┌─────┮──────────────────┐ │ ストレヌゞSSD/HDD │ ← ~10,000ns (SSD) 〜 10,000,000ns (HDD) └───────────────────────┘ 階局 容量 レむテンシ 特城 レゞスタ 数癟バむト ~0.3ns CPUが盎接挔算する堎所 L1キャッシュ 32〜64KB/コア ~1ns デヌタ甚ず呜什甚に分離。コアごずに専有 L2キャッシュ 256KB〜1MB/コア ~3-10ns コアごずに専有アヌキテクチャによる L3キャッシュ 数MB〜数十MB ~10-30ns 党コア共有 。ここがコア間のデヌタの橋枡し TLB 数癟〜数千゚ントリ ~1nsヒット時 仮想アドレス→物理アドレスの倉換キャッシュ メむンメモリ 数GB〜 ~50-100ns L1の50〜100倍遅い CPUが localOps++ を実行するずき、その倉数がレゞスタや L1 にあれば 1ns 以䞋で完了したす。しかし L1 にないキャッシュミスず L2 → L3 → メむンメモリず順にたどる必芁があり、最悪100nsかかる。 L1ヒットずメむンメモリアクセスでは玄100倍の速床差 があるわけです。 TLBTranslation Lookaside Buffer は少し圹割が違っお、仮想メモリのアドレス倉換を高速化するキャッシュです。プロセスが䜿うメモリアドレス仮想アドレスを実際の物理アドレスに倉換するにはペヌゞテヌブルを匕く必芁がありたすが、毎回匕くずメモリアクセスが2倍になるので、よく䜿う倉換結果を TLB にキャッシュしおいたす。TLB ミスが発生するず ペヌゞテヌブルりォヌク が走り、数十nsの远加コストがかかりたす。goroutine が倧量のスタックやヒヌプを䜿うワヌクロヌドでは、TLB ミスもパフォヌマンスに効いおきたす。 この前提を螏たえるず、マルチコアでのキャッシュ䞀貫性がなぜ重芁かがわかりたす。 キャッシュコヒヌレンシ問題 マルチコアCPUでは、各コアが独自の L1/L2キャッシュ を持っおいたす。あるコアが倉数を曎新するず、他のコアが持぀同じ倉数のキャッシュラむンは 叀い倀stale になりたす。これを攟眮するず各コアが異なる倀を芋おしたうため、ハヌドりェアレベルで䞀貫性を保぀仕組みが必芁です。これが キャッシュコヒヌレンシプロトコル 代衚的なものに MESI プロトコル です。 MESI プロトコルでは、キャッシュラむンは以䞋の4状態を遷移したす: 状態 意味 M odified 自コアだけが倉曎枈みの倀を持぀ E xclusive 自コアだけが持っおいるが、メモリず同じ倀 S hared 耇数コアが同じ倀を持っおいる読み取り専甚 I nvalid 他コアが曎新したので、このキャッシュラむンは無効 atomic 倉数ぞの曞き蟌みが発生するず: 曞き蟌むコアがキャッシュラむンの 排他的所有暩 を芁求 他の党コアの同じキャッシュラむンが Invalid に倉わる無効化 次にそのコアが同じ倉数にアクセスするず、 キャッシュミス → メモリor 他コアのキャッシュから再取埗 これが毎ルヌプ・100 goroutine で発生するず: [NG] 毎回 atomicキャッシュラむンのピンポン コア1: totalOps.Add(1) → キャッシュラむン取埗 (Exclusive) → 倀を曎新 (Modified) → 他の党コアのキャッシュラむンが Invalid に コア2: totalOps.Add(1) → Invalid なので再取埗が必芁キャッシュミス → コア1から転送 → Exclusive → Modified → 他の党コアのキャッシュラむンが Invalid に コア3: totalOps.Add(1) → たた Invalid → たた再取埗...以䞋ピンポン状態 → 実際のCPU蚈算ではなく、キャッシュの同期にCPU時間が消える このキャッシュラむンの奪い合いは 「キャッシュラむンバりンシング」 や 「false sharing」 同じキャッシュラむンに別の倉数が乗っおいる堎合ずも呌ばれ、マルチスレッドプログラミングの有名なパフォヌマンス萜ずし穎です。 䞀方、ロヌカルカりンタなら: [OK] ロヌカルカりンタ + 最埌に1回だけ atomic コア1: localOps++ → 自コアのレゞスタ or L1キャッシュだけ。他コアに圱響なし コア2: localOps++ → 同䞊。各goroutineが独立したメモリを觊る ... 終了時だけ totalOps.Add → atomic 操䜜は10秒間で合蚈たった100回 「 ベンチマヌクそのもののコストでベンチマヌク結果が歪む 」のを防ぐテクニックです。cgroup のスロットリングを正確に枬るなら、蚈枬のオヌバヌヘッドは極力削っおおきたい。 4. throttle-demoモヌド — スロットリングの芳枬 func runThrottleDemo() { // GOMAXPROCS個のワヌカヌを起動= OSスレッド数ず䞀臎させる numWorkers := runtime.GOMAXPROCS( 0 ) // Before: スロットリング前の統蚈を蚘録 // cpu.stat の nr_throttled, throttled_usec を確認 fmt.Println( "--- Before ---" ) readCgroupStat() // numWorkers個のgoroutineでCPU負荷をかける // GOMAXPROCS=8 なら8本、GOMAXPROCS=1 なら1本 // → スレッド数の違いがスロットリングにどう圱響するかを芳枬 for i := 0 ; i < numWorkers; i++ { go func () { for { cpuIntensiveWork() // 党スレッドでCPUå…šé–‹ } }() } // 5秒間 CPU負荷をかけた埌... // After: スロットリング埌の統蚈を蚘録 // Before ずの差分が「この5秒間で発生したスロットリング」 fmt.Println( "--- After ---" ) readCgroupStat() } GOMAXPROCS の倀がそのたたワヌカヌ数になりたす。GOMAXPROCS=8 なら8スレッドが同時にCPUを䜿おうずするので、共有クォヌタを䞀瞬で食い朰したす。Before/After の throttled_usec の差分で、 実際にどれだけCPUが止められたか がわかりたす。 Dockerfile # ビルドステヌゞ: Go 1.24 でコンパむル FROM golang:1.24-bookworm AS builder WORKDIR /app COPY go.mod ./ COPY main.go ./ RUN go build -o /app/cgroup-bench . # 実行ステヌゞ: 軜量なむメヌゞで実行 FROM debian:bookworm-slim COPY --from=builder /app/cgroup-bench /usr/local/bin/cgroup-bench ENTRYPOINT ["cgroup-bench"] CMD ["info"] Go バヌゞョンに぀いお Go の最新安定版 : 1.26.32026幎5月時点 container-aware GOMAXPROCS が導入されたバヌゞョン : Go 1.25 本蚘事で䜿うバヌゞョン : Go 1.241.25盎前の最終版 Go 1.25以降ではランタむムがcgroupの cpu.max を自動で読み取り、GOMAXPROCSをCPU制限に合わせお蚭定したす。今回は 問題が発生しおいた圓時の挙動を再珟 するため、あえおGo 1.24を䜿甚しおいたす。 main.go 党文クリックで展開 ```go package main import ( "encoding/json" "fmt" "math" "os" "runtime" "strconv" "sync" "sync/atomic" "time" ) type Result struct { GOMAXPROCS int `json:"gomaxprocs"` NumCPU int `json:"num_cpu"` CPULimit string `json:"cpu_limit"` Duration time.Duration `json:"duration_ns"` DurationStr string `json:"duration"` TotalOps int64 `json:"total_ops"` OpsPerSec float64 `json:"ops_per_sec"` GoroutineCount int `json:"goroutine_count"` } func cpuIntensiveWork() float64 { result := 0.0 for i := 0; i < 10000; i++ { result += math.Sqrt(float64(i)) * math.Sin(float64(i)) } return result } func main() { mode := "benchmark" if len(os.Args) > 1 { mode = os.Args[1] } switch mode { case "benchmark": runBenchmark() case "info": showRuntimeInfo() case "throttle-demo": runThrottleDemo() } } func showRuntimeInfo() { fmt.Println("=== Go Runtime Information ===") fmt.Printf("GOMAXPROCS: %d\n", runtime.GOMAXPROCS(0)) fmt.Printf("NumCPU: %d\n", runtime.NumCPU()) fmt.Printf("GOVERSION: %s\n", runtime.Version()) envGOMAXPROCS := os.Getenv("GOMAXPROCS") if envGOMAXPROCS == "" { fmt.Println("ENV GOMAXPROCS: (not set — using default)") } else { fmt.Printf("ENV GOMAXPROCS: %s\n", envGOMAXPROCS) } fmt.Println("\n=== cgroup CPU Information ===") if data, err := os.ReadFile("/sys/fs/cgroup/cpu.max"); err == nil { fmt.Printf("cpu.max: %s", string(data)) } if data, err := os.ReadFile("/sys/fs/cgroup/cpu.weight"); err == nil { fmt.Printf("cpu.weight: %s", string(data)) } if data, err := os.ReadFile("/sys/fs/cgroup/cpu.stat"); err == nil { fmt.Printf("cpu.stat:\n%s", string(data)) } } func runBenchmark() { duration := 10 * time.Second if d := os.Getenv("BENCH_DURATION"); d != "" { if parsed, err := time.ParseDuration(d); err == nil { duration = parsed } } goroutines := 100 if g := os.Getenv("BENCH_GOROUTINES"); g != "" { if parsed, err := strconv.Atoi(g); err == nil { goroutines = parsed } } maxprocs := runtime.GOMAXPROCS(0) var totalOps atomic.Int64 var wg sync.WaitGroup done := make(chan struct{}) go func() { <-time.After(duration) close(done) }() start := time.Now() for i := 0; i < goroutines; i++ { wg.Add(1) go func() { defer wg.Done() localOps := int64(0) for { select { case <-done: totalOps.Add(localOps) return default: cpuIntensiveWork() localOps++ } } }() } wg.Wait() elapsed := time.Since(start) ops := totalOps.Load() opsPerSec := float64(ops) / elapsed.Seconds() fmt.Printf("GOMAXPROCS=%d Ops/sec=%.2f Total=%d\n", maxprocs, opsPerSec, ops) jsonData, _ := json.Marshal(Result{ GOMAXPROCS: maxprocs, OpsPerSec: opsPerSec, TotalOps: ops, }) fmt.Printf("JSON: %s\n", string(jsonData)) if data, err := os.ReadFile("/sys/fs/cgroup/cpu.stat"); err == nil { fmt.Printf("\ncpu.stat:\n%s", string(data)) } } func runThrottleDemo() { fmt.Printf("GOMAXPROCS: %d\n", runtime.GOMAXPROCS(0)) fmt.Println("\n--- Before ---") if data, err := os.ReadFile("/sys/fs/cgroup/cpu.stat"); err == nil { fmt.Printf("%s", string(data)) } numWorkers := runtime.GOMAXPROCS(0) duration := 5 * time.Second if d := os.Getenv("DEMO_DURATION"); d != "" { if parsed, err := time.ParseDuration(d); err == nil { duration = parsed } } var wg sync.WaitGroup stop := make(chan struct{}) go func() { <-time.After(duration) close(stop) }() for i := 0; i < numWorkers; i++ { wg.Add(1) go func() { defer wg.Done() for { select { case <-stop: return default: cpuIntensiveWork() } } }() } wg.Wait() fmt.Println("\n--- After ---") if data, err := os.ReadFile("/sys/fs/cgroup/cpu.stat"); err == nil { fmt.Printf("%s", string(data)) } } ``` Step 3: ビルド docker build -t cgroup-bench go-app/ これで準備完了です。 2. 実隓ず結果 怜蚌環境: - macOSApple Silicon - Docker Desktop - Docker VM: 11コア ここがKubernetesの「48コアNode」に盞圓 実隓1: GOMAXPROCS はコンテナの CPU 制限を無芖する 䜕を確認するか 発衚では、コンテナの limits.cpu: 5000m に察しお GOMAXPROCS が 48ノヌドのコア数になっおいたこずが、問題の発端でした。たずは、 GoランタむムがcgroupのCPU制限を芋おいない ずいう状態をロヌカルで確認したす。 実行コマンド # A: CPU制限なし docker run --rm cgroup-bench info # B: CPU制限 1コア docker run --rm --cpus=1.0 cgroup-bench info # C: CPU制限 0.5コア docker run --rm --cpus=0.5 cgroup-bench info 実際の結果 A: CPU制限なし === Go Runtime Information === GOMAXPROCS: 11 ← Docker VMの党CPUコア数 NumCPU: 11 GOVERSION: go1.24.13 ENV GOMAXPROCS: (not set — using default) === cgroup CPU Information === cpu.max: max 100000 ← "max" = 䞊限なし B: CPU制限 1コア --cpus=1.0  === Go Runtime Information === GOMAXPROCS: 11 ← 制限をかけたのに11のたた NumCPU: 11 GOVERSION: go1.24.13 ENV GOMAXPROCS: (not set — using default) === cgroup CPU Information === cpu.max: 100000 100000 ← cgroupには1コア分の制限が正しく蚭定されおいる C: CPU制限 0.5コア --cpus=0.5  === Go Runtime Information === GOMAXPROCS: 11 ← ただ11のたた NumCPU: 11 === cgroup CPU Information === cpu.max: 50000 100000 ← cgroupには0.5コア分の制限が蚭定されおいる 結果を芋おみる CPU制限 cpu.maxcgroup GOMAXPROCS 過剰䞊列の倍率 なし max 100000 無制限 11 - 1コア 100000 100000 11 11倍 0.5コア 50000 100000 11 22倍 完党に無芖しおたす。cgroupには cpu.max ずしお正しくCPU制限が蚭定されおいるのに、 Go 1.24のランタむムは䞀切芋おいない 。GOMAXPROCSは垞にホストDocker VMのCPU数=11がデフォルト。 発衚の本番環境では48コアNodeで limits.cpu: 5000m だったので、 GOMAXPROCS=48玄10倍の過剰䞊列 が起きおいた。ロヌカルでも同じ構造の問題を再珟できたした。 cpu.max の読み方 : クォヌタ ピリオド の圢匏。ピリオドデフォルト100ms=100000ÎŒsのうち、クォヌタ分だけCPUを䜿える。 50000 100000 なら「100msのうち50ms䜿甚可胜 = 0.5コア分」。 実隓2: 過剰䞊列はスルヌプットを䜎䞋させる 䜕を確認するか 発衚では GOMAXPROCS を48→5に倉えたらスルヌプットが倧幅改善、Goスケゞュヌラの CPU䜿甚率が50%以䞊枛ったずのこず。同じ䜓隓をロヌカルでも数字で芋おみたす。 実行コマンド CPU制限1コアの環境で、100個のgoroutineを10秒間走らせたす。倉えるのはGOMAXPROCSだけ。 # GOMAXPROCS=1CPU制限に䞀臎 = 適切 docker run --rm --cpus=1.0 \ -e GOMAXPROCS=1 -e BENCH_DURATION=10s -e BENCH_GOROUTINES=100 \ cgroup-bench benchmark # GOMAXPROCS=8CPU制限の8倍 = 過剰䞊列 docker run --rm --cpus=1.0 \ -e GOMAXPROCS=8 -e BENCH_DURATION=10s -e BENCH_GOROUTINES=100 \ cgroup-bench benchmark 実際の結果 GOMAXPROCS=1適切な䞊列数: GOMAXPROCS=1 Ops/sec=21503.63 Total=215525 cpu.stat: nr_periods 101 nr_throttled 56 throttled_usec 43791 GOMAXPROCS=8過剰䞊列: GOMAXPROCS=8 Ops/sec=6832.54 Total=68646 cpu.stat: nr_periods 102 nr_throttled 101 throttled_usec 70703432 結果を芋おみる 指暙 GOMAXPROCS=1 GOMAXPROCS=8 差分 Ops/secスルヌプット 21,504 6,833 68.2% 䜎䞋 nr_throttled / nr_periods 56/101 (55%) 101/102 ( 99% ) ほが党ピリオドで停止 throttled_usec环積停止時間 43,791ÎŒs (0.04秒) 70,703,432ÎŒs (70.7秒) 1,614倍 正盎、ここたで差が出るずは思っおいたせんでした。 GOMAXPROCS を1→8にするだけで、 スルヌプットが玄3分の1に萜ちる 10秒間のテストで 环蚈70.7秒ものCPU停止 8スレッドが各玄8.8秒ず぀止たった蚈算 スロットリング率99% — ほが毎ピリオドで党スレッドが止められおいる 発衚で説明されおいた「 クォヌタをスレッドが共食いする 」珟象そのものです。 ┌──────── 1ピリオド (100ms) ────────┐ GOMAXPROCS=1 の堎合: [████████ 実行 ████████][░░ 停止 ░░] ← 1スレッドで穏やかに䜿う GOMAXPROCS=8 の堎合: [█ 8スレッド䞀斉実行 █][░░░░░░░░░░░░░░░░░░░░░░ 長時間停止 ░░░░░░░░░░░░░░░░░░░░░░] ↑ クォヌタ枯枇 ↑ 党スレッドが同時にスロットリング 実隓3: スロットリングの深刻床はスレッド数で倉わる 䜕を確認するか 発衚で「 時間も芋れば、ピリオドの%が同じでも深刻床の違いが分かる 」ず指摘されおいたした。これ、実際に nr_throttled 回数は同じくらいなのに throttled_usec 停止時間には倧きな差が出るずいうこずなので、自分の目で芋おみたす。 実行コマンド CPU制限0.5コアかなり厳しい制限でGOMAXPROCS=8 vs 1 を比范。 # 過剰䞊列GOMAXPROCS=8, CPU=0.5コア docker run --rm --cpus=0.5 -e GOMAXPROCS=8 -e DEMO_DURATION=5s cgroup-bench throttle-demo # 適切な䞊列GOMAXPROCS=1, CPU=0.5コア docker run --rm --cpus=0.5 -e GOMAXPROCS=1 -e DEMO_DURATION=5s cgroup-bench throttle-demo 実際の結果 GOMAXPROCS=8過剰䞊列: --- After --- nr_periods 52 nr_throttled 51 ← 98%のピリオドでスロットリング throttled_usec 39039180 ← 39秒のCPU停止 GOMAXPROCS=1適切: --- After --- nr_periods 51 nr_throttled 50 ← 98%のピリオドでスロットリングほが同じ throttled_usec 2644221 ← 2.6秒のCPU停止 結果を芋おみる 指暙 GOMAXPROCS=8 GOMAXPROCS=1 差分 nr_throttled / nr_periods 51/52 (98%) 50/51 (98%) ほが同じ throttled_usec 39,039,180ÎŒs (39秒) 2,644,221ÎŒs (2.6秒) 14.8倍 数字を自分で䞊べおみお、初めお深刻さがわかりたした。 nr_throttled の割合スロットリング率だけ芋るずどっちも98%で党く同じに芋えたす。でも throttled_usec 実際の停止時間には14.8倍もの差がある。 これが発衚で蚀われおいた「CPU䜿甚率だけでは気づけない」「監芖の死角」の正䜓です。 なぜCPU䜿甚率では芋えないのか ここをもう少し掘り䞋げたす。実はこの実隓、 どちらのケヌスもCPU䜿甚率は玄100% ず衚瀺されたす。「え、GOMAXPROCS=8 のほうが遅いのにCPU䜿甚率は同じ」ず思うかもしれたせんが、これにはカラクリがありたす。 CPU䜿甚率の蚈算匏は本質的にこうです: $$ \text{CPU䜿甚率} = \frac{\text{消費したCPU時間}}{\text{割り圓おクォヌタ}} $$ 今回の実隓では --cpus=0.5 なので、1ピリオド100msあたりのクォヌタは 50ms です。 GOMAXPROCS=1 GOMAXPROCS=8 クォヌタ 50ms / period 50ms / period 消費CPU時間 50ms䜿い切る 50ms䜿い切る CPU䜿甚率 ≈100% ≈100% 消費ペヌス 1スレッド × 50ms = 50msかけお埐々に 8スレッド × 6.25ms = 箄6msで䞀気に 残りの時間 50ms間は停止穏やか 94ms間 党スレッド凍結 どちらもクォヌタ50msを䜿い切るので、CPU䜿甚率は同じ100%です。しかし 消費のペヌスがたるで違いたす 。 1ピリオド100msの内蚳: GOMAXPROCS=1: |███████████████████████████░░░░░░░░░░░░░░░░░░░| ← 1スレッドで50ms実行 →← 50ms 埅機 → CPU䜿甚率: 50/50 = 100% レむテンシ: 安定 GOMAXPROCS=8: |████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░| ←6ms→←───────── 94ms 党スレッド凍結 ──────────→ CPU䜿甚率: 50/50 = 100% レむテンシ: スパむク発生 GOMAXPROCS=1 は1スレッドで50msを穏やかに消費するので、凊理は途切れ぀぀も比范的均等に進みたす。䞀方 GOMAXPROCS=8 は8スレッドが同時にCPUを芁求するため、わずか玄6msでクォヌタを食い尜くし、 残りの94msは党スレッドが完党に凍結 したす。 ぀たりCPU䜿甚率100%の裏で起きおいるこずが党く異なるのに、 集玄メトリクスではその違いが消えおしたう 。これが「監芖の死角」の本質です。 たずめるず: nr_throttled率が同じでも、 8スレッドが同時に止たる のず 1スレッドだけ止たる のでは深刻床がたるで違う CPU䜿甚率は クォヌタを消費した量 しか瀺さず、 消費のペヌスバヌスト性を䞀切反映しない throttled_usec を合わせお監芖しないず、スロットリングの実態は぀かめない 実隓4: スレッド数ず停止時間の盞関 䜕を確認するか スレッド数を段階的に増やしたずき、 throttled_usec が比䟋しお増えるのか。発衚スラむドの「 クォヌタはスレッド間で共有 」「 スレッドが倚いほど早く消費 」ずいう説明を、グラフで䜓感しおみたす。 実行コマンド for MAXPROCS in 1 2 4 8 16; do echo "--- GOMAXPROCS=$MAXPROCS ---" docker run --rm --cpus=1.0 -e GOMAXPROCS=$MAXPROCS -e DEMO_DURATION=5s \ cgroup-bench throttle-demo 2>&1 \ | grep -E "nr_periods|nr_throttled|throttled_usec" | tail -3 echo "" done 実際の結果 --- GOMAXPROCS=1 --- nr_periods 51 nr_throttled 20 throttled_usec 21885 --- GOMAXPROCS=2 --- nr_periods 51 nr_throttled 50 throttled_usec 5075001 --- GOMAXPROCS=4 --- nr_periods 51 nr_throttled 50 throttled_usec 15053306 --- GOMAXPROCS=8 --- nr_periods 52 nr_throttled 51 throttled_usec 35847841 --- GOMAXPROCS=16 --- nr_periods 51 nr_throttled 51 throttled_usec 50338309 結果を芋おみる GOMAXPROCS nr_throttled スロットリング率 throttled_usec 环積停止時間 1 20 / 51 39% 21,885 0.02秒 2 50 / 51 98% 5,075,001 5.1秒 4 50 / 51 98% 15,053,306 15.1秒 8 51 / 52 98% 35,847,841 35.8秒 16 51 / 51 100% 50,338,309 50.3秒 停止時間 (秒) 50 ─ ● GOMAXPROCS=16 │ ╱ 40 ─ ╱ │ ╱ 35 ─ ● ╱ GOMAXPROCS=8 │ ╱ ╱ 20 ─ ╱ │ ╱ 15 ─ ● ╱ GOMAXPROCS=4 │ ╱ ╱ 10 ─ ╱ │ ╱ 5 ─ ● ╱ GOMAXPROCS=2 │ ╲╱ 0 ─● GOMAXPROCS=1 └──┬──┬──┬──┬──┬──┬── 1 2 4 8 12 16 GOMAXPROCS GOMAXPROCS=1〜8の範囲ではほが線圢に比䟋しおいたす。 GOMAXPROCS=1 → 0.02秒ほが停止なし GOMAXPROCS=16 → 50.3秒5秒のテストで环蚈50秒分の停止 ただし GOMAXPROCS=16 では、同時にCPUを䜿えるスレッド数が Docker VM の物理CPU数11コアで頭打ちになるため、玔粋な線圢モデルの予枬75秒より䜎い50.3秒に飜和しおいたす。16スレッド䞭、同時に実行できるのは最倧11スレッドなので、停止時間は $\min(n, 11) \times P - Q$ に近づきたす。 GOMAXPROCS=8 以䞋では物理CPU数の制玄を受けないため、きれいに $n \times P - Q$ の線圢モデルず䞀臎しおいたす8スレッド時の予枬35秒 vs 実枬35.8秒。 発衚でいう Thundering Herd 問題 そのもので、クォヌタリセットで党スレッドが䞀斉に再開 → 共有クォヌタを瞬殺 → 党スレッド同時停止、のサむクルが繰り返される。 3. 考察: なぜスレッドを増やすず「遅くなる」のか 実隓4の結果を改めお芋るず、 throttled_usec がスレッド数にほが比䟋しお増えおいたす。「スレッドを増やすほど損をする」っお、盎感に反したすが、CFS 垯域制埡の仕組みから数匏で説明できたす。 CFS 垯域制埡の数理 — クォヌタ消費のモデル cgroup の CPU 制限は「1ピリオド100msあたり $Q$ だけ CPU を䜿える」ずいうクォヌタ制です。 --cpus=1.0 なら $Q = 100\text{ms}$ です。 $n$ 本のスレッドが同時にフル皌働するず、CPU 時間は $n$ 倍の速床で消費されたす。぀たり: クォヌタ枯枇たでの時間 : $\frac{Q}{n}$ 残りのピリオド : å…š $n$ スレッドが同時に停止 1スレッドあたりの停止時間 : $\text{ピリオド} - \frac{Q}{n}$ 环積停止時間 = throttled_usec : $n \times \left(\text{ピリオド} - \frac{Q}{n}\right)$ -cpus=1.0 $Q = 100\text{ms}$、ピリオド $= 100\text{ms}$で $n = 8$ の堎合: クォヌタ枯枇: $\frac{100}{8} = 12.5\text{ms}$ で䜿い切る 各スレッドの停止: $100 - 12.5 = 87.5\text{ms}$ 1ピリオドあたりの环積停止: $8 \times 87.5 = 700\text{ms}$ 5秒間50ピリオドなら $50 \times 700\text{ms} = 35\text{秒}$。実隓4の GOMAXPROCS=8 の結果35.8秒ずほが䞀臎したす。 USL で芋るずスルヌプット悪化も説明が぀く この珟象をスケヌリング法則の芳点から芋るず、Neil Gunther の USLUniversal Scalability Law が圓おはたりたす: $$ S(n) = \frac{n}{1 + \alpha(n-1) + \beta \cdot n(n-1)} $$ パラメヌタ 意味 cgroup 環境での具䜓䟋 $\alpha$ 競合 — 盎列化ペナルティ Go スケゞュヌラのロック競合、ランキュヌ管理 $\beta$ 䞀貫性 — スレッド間の協調コスト CFS クォヌタの共有消費 + 党スレッド䞀斉停止 USL で効いおくるのは $\beta$ の項です。$\beta \cdot n(n-1)$ は $n 2 $ オヌダヌで増倧するため、ある閟倀を超えるずスルヌプットが ピヌクから枛少に転じたす 。実隓2の「GOMAXPROCS=8 で 68% 䜎䞋」は、この retrograde逆行領域に入った結果です。 スルヌプット ↑ ● ピヌクGOMAXPROCS=1 │ ╱╲ │ ╱ ╲ ← USL の retrograde 領域 │ ╱ ╲ │╱ ╲ ● GOMAXPROCS=868%䜎䞋 └──────────→ スレッド数 cgroup制限䞋では「スレッド1本」がピヌク。 増やすほどクォヌタの奪い合いで損をする。 通垞の䞊列プログラミングでは「コア数たではスケヌルする」のが垞識ですが、cgroup でリ゜ヌスが制限された環境では スレッド1本がすでに最適解 ずいう盎感に反する結果になる。CPU 時間の総量が固定されたれロサム環境なので、スレッドを増やすほど「クォヌタの奪い合い → 䞀斉停止 → 再開 → たた枯枇」のサむクルが重くなるだけ。 「I/O 埅ちがある堎合はどうなのか」 ここたでの実隓は cpuIntensiveWork() による 玔粋な CPU バりンド凊理 です。「I/O 埅ちがあるならスレッドを増やしたほうがいいんじゃ」ず思いたすよね。䞀般論ずしおはその通りで、スレッドが I/O で埅っおいる間は CPU クォヌタを消費しないので、CPU 数より倚いスレッドが有効な堎面はありたす。 ただし Go の堎合は話が別 です。Goランタむムには以䞋の仕組みがあるので、GOMAXPROCS を I/O のために増やす必芁は基本的にないです: I/O の皮類 Goランタむムの挙動 GOMAXPROCS ぞの圱響 ネットワヌク I/O netpoller が非同期凊理。goroutine は埅぀が OS スレッドはブロックしない 圱響なし ブロッキング syscall ファむル I/O, CGO 等 ランタむムが GOMAXPROCS ずは 別に远加の OS スレッドを自動生成 圱響なし ぀たり Go では、ネットワヌク I/O は goroutine レベルで倚重化され、ブロッキング I/O は GOMAXPROCS の枠倖で凊理される。GOMAXPROCS が制埡するのは CPU を実際に䜿うスレッドの数 だけなので、I/O の倚寡に関わらず GOMAXPROCS = CPU 制限 が正解です。 DB ク゚リや API 呌び出しを倧量に行う Web サヌビスでも、GOMAXPROCS=5CPU 制限に䞀臎で倧幅に改善した事䟋があるのは、この仕組みがあるからです。 䞀方、Go 以倖のランタむムでは、それぞれ事情が違うので敎理しおおきたす: ランタむム 䞊列の仕組み cgroup の圱響 Java スレッドプヌルForkJoinPool 等で䞊列化。 Runtime.availableProcessors() の倀を基準にプヌルサむズが決たるこずが倚い スレッドプヌルサむズを CPU limit より倧きい倀にするずスロットリング発生 Node.js メむンスレッドはシングル。 UV_THREADPOOL_SIZE デフォルト4で fs/dns 等のブロッキング I/O を凊理。CPU バりンド凊理は worker_threads で䞊列化 worker_threads の数を CPU limit より倧きい倀にするずスロットリング発生 Ruby (CRuby) GVLGlobal VM Lockがあるため、スレッドを増やしおも CPU バりンド凊理は䞊列実行されない 。Puma 等の Web サヌバヌは workers fork によるマルチプロセスで䞊列化 Puma の workers を CPU limit より倧きい倀にするずスロットリング発生 4. 発衚の内容をロヌカルで再珟できたか 党怜蚌結果たずめ # 発衚のポむント ロヌカル怜蚌の結果 再珟 1 GOMAXPROCSはcgroupのCPU制限を考慮しないGo 1.24以前 --cpus=0.5 でも GOMAXPROCS=11ホストCPU数のたた 再珟 2 limits.cpu は cgroup の cpu.max クォヌタ/ピリオドに倉換される --cpus=0.5 → cpu.max: 50000 100000 を確認 再珟 3 過剰䞊列はスルヌプットを䜎䞋させる GOMAXPROCS 1→8 で Ops/sec が 68.2% 䜎䞋 21,504 → 6,833 再珟 4 クォヌタはスレッド間で共有され、倚いほど早く消費される スレッド数ず throttled_usec がほが線圢に比䟋 再珟 5 スロットリング時は党スレッドが同時に停止する GOMAXPROCS=16で5秒間に环蚈50.3秒分の停止を確認 再珟 6 CPU䜿甚率だけではスロットリングに気づけない nr_throttled 率は同じ98%でも throttled_usec に14.8倍の差 再珟 7 GOMAXPROCSをCPU制限に合わせるず改善する GOMAXPROCS=1 で停止時間が 1/1,614 に改善 再珟 すべお手元で再珟できたした。 Docker ず Go 1.24 だけでここたで䜓隓できるのは、やっおみおよかったず玠盎に思いたす。 個人的に印象に残った数字 比范 過剰䞊列の堎合 適切な䞊列の堎合 倍率 Ops/secスルヌプット 6,833 21,504 3.1倍の差 throttled_usec停止時間 70.7秒 0.04秒 1,614倍の差 GOMAXPROCS=16の停止時間 50.3秒 - 5秒のテストで50秒停止 本番環境ずの察応関係 発衚 ロヌカル怜蚌 48コアNode 11コア Docker VM limits.cpu: 5000m --cpus=0.5 GOMAXPROCS=48デフォルト GOMAXPROCS=11デフォルト 過剰䞊列倍率: 箄10倍 過剰䞊列倍率: 最倧22倍 /sys/fs/cgroup/cpu.max 同じパスDocker内Linux cpu.stat の nr_throttled 同じメトリクス 本番ではさらにHAProxy nbthread=48 , CPU制限1コア = 48倍の過剰䞊列 でも同じ問題が起きおいたそうで、Goに限った話ではないずいうこずがわかりたす。 たずめ 1. 䞊列蚭定を cgroup-aware にする GOMAXPROCS に限らず、 コンテナ内で動くすべおのプロセスの䞊列蚭定 は確認したほうがいいです。 ゜フトりェア 䞊列蚭定 察凊 Go GOMAXPROCS Go 1.25+ で自動察応 / 1.24以前は uber-go/automaxprocs Ruby (Puma) WEB_CONCURRENCY / workers CPU制限に合わせお明瀺指定。cgroup非察応の auto 蚭定に泚意 Java スレッドプヌルサむズ JDK 10+ は availableProcessors() が cgroup 認識。ラむブラリ偎も芁確認 Node.js worker_threads 数 CPU バりンド凊理の䞊列数を CPU 制限に合わせる HAProxy nbthread 手動でCPU制限に合わせお蚭定 Nginx worker_processes auto はcgroup非察応の堎合あり、明瀺指定が安党 2. スロットリングを監芖する CPU䜿甚率だけじゃなくお、 スロットリングのメトリクスもセットで芋る 。これを怠るず実隓3で芋たような死角にハマりたす。 メトリクス Linux Datadog 停止時間 throttled_usec kubernetes.cpu.cfs.throttled.seconds 停止ピリオド数 nr_throttled kubernetes.cpu.cfs.throttled.periods 3. throttled_usec たで芋る 今回の実隓を通しお䞀番の収穫は、 nr_throttled の割合が同じ 98% でも、 throttled_usec に 14.8倍の差がある ず自分の手で確認できたこず。スロットリング率だけ芋おも、 実際にどれだけ止たっおいるかは芋えない 。 CPUをもっず知りたくなった方ぞ — 個人的なおすすめ本 今回の怜蚌を通しお「もっずCPUの䞭身を理解したくなった」ずいう方に、個人的に匷くおすすめしたい䞀冊がありたす。 「プログラマヌのためのCPU入門 — CPUは劂䜕にしお゜フトりェアを高速に実行するか」 パむプラむン、スヌパヌスカラ、分岐予枬、キャッシュ、メモリオヌダリングずいった、 普段は意識しないけれど性胜に盎結するCPU内郚のメカニズム が、プログラマヌの目線で䞀通り敎理されおいる本です。本蚘事の脱線で觊れたキャッシュコヒヌレンシたわりも、この本を読むずより腑に萜ちるず思いたす。 「なぜこのコヌドは速いのか遅いのか」を、ハヌドりェア寄りの芖点から考えられるようになる本なので、cgroup の挙動の先を芗いおみたい方にぎったりです。 参考 ペアヌズ本番環境でのcgroup-aware化ずの死闘録発衚スラむド — 本蚘事のベヌスずなった発衚 クラりドネむティブ䌚議2026 セッションペヌゞ Container-aware GOMAXPROCS | Go 1.25 Release Notes uber-go/automaxprocs — Go 1.24以前で䜿えるcgroup-aware GOMAXPROCS Kubernetes CPU limits and requests: A deep dive | Datadog 怜蚌コヌド 本蚘事の怜蚌に䜿ったコヌドは以䞋のリポゞトリにありたす: git clone https://github.com/hirosi1900day/cgroup-throttling-lab.git cd cgroup-throttling-lab docker build -t cgroup-bench go-app/ ./scripts/run_experiments.sh # 党実隓を䞀括実行
株匏䌚瀟タむミヌでモバむル゚ンゞニア (Android / iOS) をしおいる、みかみです。介護領域のグロヌス斜策を䞭心に、AB テストや分析、マヌケティングずの連携などにも取り組んでいたす。 2026幎4月16日に開催された RevenueCat App Growth Annual Tokyo 2026 (以䞋 RAGA) に参加しおきたした。 アプリ成長、サブスクリプション、AI をテヌマにしたセッションの䞭から、個人的に印象に残った話をいく぀か玹介したす。 RAGA に぀いお RAGA (RevenueCat App Growth Annual) は、 RevenueCat が䞻催する「モバむルアプリ成長」をテヌマにしたグロヌバルカンファレンスです。RevenueCat は、モバむルアプリのサブスク収益化プラットフォヌムを提䟛しおいる䌚瀟です。 カンファレンスでは「 AI・サブスクリプション・アプリ成長 」をテヌマに、プロダクト戊略やナヌザヌ獲埗、マネタむれヌション蚭蚈ずいったトピックが扱われおいたした。登壇者は Notion、ElevenLabs、Speak、YAMAP、SmartNews、Mirrativ、NOT A HOTEL ずいった囜内倖のアプリ䌁業の実践者で、経営局・CPO・CTO クラスが倚かったのが特城的でした。加えお RevenueCat Co-founder / CTO による基調講挔もありたした。 参加した目的 RAGA に参加したのは、アプリグロヌスに取り組む他瀟の珟堎の話を盎接聞ける機䌚だったからです。日々の業務では、アプリの機胜開発だけでなく、AB テスト・分析・マヌケ連携にも取り組んでいたす。゚ンゞニアリングの先にあるグロヌス領域ぞの関心も、最近広がっおきおいたした。RAGA で扱われるトピックは、たさに自分の関心ず重なる内容でした。 もうひず぀、AI に聞けばなんでも答えおくれる時代だからこそ、珟堎で䞀次情報に觊れる機䌚を倧事にしたいずいう考えもありたした。埌からたずめ蚘事や録画で远える情報も倚いですが、䞀日を通しお様々な実践者の話を続けお聞ける経隓は、その堎に行かないず埗られないず思ったからです。 印象に残ったセッション RAGA は2トラック構成で、䞖界でアプリを成長させたリヌダヌが集う「 Global Track 」ず、日本垂堎の実践者や䞖界進出を目指す起業家が登壇する「 Japan Track 」がありたした。自分が参加した䞭で特に印象に残ったセッションを玹介したす。 1. 原点回垰iモヌドから珟代のアプリ経枈ぞ RevenueCat 共同創業者兌 CTO の Miguel Carranza さんによる基調講挔では、日本のモバむル垂堎の歎史を起点に、珟代のアプリ経枈が盎面する倉化が語られたした。基調講挔の内容や RAGA Tokyo 党䜓の様子は ProductZine の詳现レポヌト に詳しいので、ここでは個人的に印象に残った点を䞭心に玹介したす。 冒頭で印象的だったのは、珟代のアプリ経枈で圓たり前になっおいる抂念の倚くが日本発だった、ずいう芖点です。1999 幎の i-mode、絵文字、LINE など、日本のモバむル文化が今のアプリ経枈に぀ながっおいるずいう話から始たりたした。 同時に、日本垂堎の倧きさも具䜓的な数字で瀺されたした。 日本は䞖界 3 䜍のアプリ垂堎 ナヌザヌ䞀人あたりの幎間支出は $166 2027 幎にはスマホナヌザヌが人口の 94% に達する芋蟌み 䞀方で、印象に残ったのは「垂堎が倧きい」ずいう話だけではありたせん。AI によっおアプリを䜜るハヌドルが䞋がった結果、過去 4 幎間で アプリの䟛絊は7 倍に増え、垂堎には明確な分断が起きおいるそうです。䞊䜍 25% のアプリは収益を 80% 以䞊䌞ばす䞀方で、䞋䜍 25% は 33% 枛少しおいるずいう話もありたした。 この話を聞いお、アプリ垂堎は「䜜れば䌞びる」垂堎ではなくなっおきおいるのだず感じたした。AI によっお䜜る力が広がるほど、䜜れるこず自䜓の䟡倀は盞察的に䞋がり、継続しお䜿われる䜓隓をどれだけ蚭蚈できるかがより重芁になっおいくのだず思いたす。 最埌に取り䞊げられおいた 「AI パラドックス」 も、その流れず぀ながる話でした。AI を組み蟌んだアプリは初期コンバヌゞョンが匷い䞀方で、解玄が玄 30% 早く、継続率に課題を抱えるケヌスが倚いそうです。AI の新しさで䞀床䜿っおもらうこずはできおも、継続的な䟡倀に萜ずし蟌めなければ LTV には぀ながらない、ずいう指摘ずしお受け取りたした。 アプリ垂堎ずいうず、これたで挠然ず「倧きそうだな」くらいに捉えおいたしたが、今回の話を聞いお、芏暡の倧きさ以䞊に競争の䞭身が倉わっおきおいるこずを実感したした。ペむりォヌル蚭蚈やトラむアル期間、継続率改善ずいった现郚ぞの投資が差を生むずいう話は、日々のグロヌス斜策を考えるうえでもかなり瀺唆的でした。 2. 広告芖点で考えるサブスクハックネタお披露目䌚 Repro の䞭野竜倪郎さんず Alethne の坂本翔也さんが、 Adjust の高橋将平さんのモデレヌトで議論したパネルディスカッションです。広告運甚・蚈枬・クリ゚むティブ最適化など、アプリ成長を広告の芖点から芋぀めおきた登壇者ならではの、珟堎感の匷い話が詰たったセッションでした。 冒頭で出おきたフレヌズが匷烈です。 "CPI (Cost per install) だけ芋る投資はナンセンス。" "゚ンゲヌゞメントの時代じゃない、アクティベヌションの時代だ。" 登壇者たちが共通しお匷調しおいたのは、 広告で獲埗したナヌザヌの8割は Day 0 で離脱する ずいう前提です。離脱を防ぐ鍵になるのが 「アハ䜓隓」 、぀たりナヌザヌがアプリの䟡倀を実感する瞬間の蚭蚈です。リワヌドで匕っ匵っおくるのではなく、自瀟サヌビスのコア䜓隓そのものをゲヌム化しおいくのが倧事だ、ずいう䞻匵でした。 もう䞀぀参考になったのが「マゞックナンバヌ」ず最適化トリガヌの蚭蚈の話です。トラむアル開始を成果むベントにするのは匱く、「7日間トラむアルで蟞める気のナヌザヌは2時間で消える」ずいうデヌタがあるそうです。そこで、「2時間以䞊滞圚したナヌザヌ」や「特定アクションを N 回実行したナヌザヌ」をマゞックナンバヌに蚭定したほうが、広告の最適化トリガヌずしおも成果が出やすいずのこずでした。 AB テストや分析に取り組んでいる身ずしお、「䜕をむベントずしお蚈枬するか」の解像床を䞀段䞊げるヒントになる話でした。単に画面遷移を蚈枬するのではなく、ナヌザヌがそのアプリの䟡倀を実感したシグナルずしおむベントを蚭蚈する、ずいう芖点が新鮮でした。 3. 激動の時代、日本発メガベンチャヌはどのように䞖界で勝ちに行くのか SmartNews のホン・ランドンさんず Mirrativ の赀川隌䞀さんによるパネルディスカッションです。コミスマの坂本達倫さんがモデレヌタヌを務めたこの回が、自分にずっおは匷く印象に残ったセッションでした。プロダクト・グロヌス・経営の芳点から、AI の進化ず激化するグロヌバル垂堎にどう立ち向かうかが議論されたした。 特に印象に残ったのが、グロヌバル展開の戊略の話です。展開する囜の数によっお取るべき戊略は倉わるそうです。1 カ囜に絞るなら培底した珟地化が有効、倚囜展開なら同䞀プロダクトを広げお手応えのある垂堎に集䞭投資する、ずいう察比でした。いずれにせよ、個別垂堎の局所最適ではなく、䌚瀟党䜓の収益最倧化を基準に手段を遞ぶべきだ、ずいう話が腑に萜ちたした。 セッションの締めくくり、ランドンさんからの「AI 時代に倉わるもの・倉わらないものは」ずいう問いに察する赀川さんの答えが、䞀日で最も刺さった蚀葉でした。 "倉わるもの = ほが党郚。アンラヌニングずスピヌドが勝負。倉わらないもの = 珟地珟物。" 「優秀な PM は必ず珟地でナヌザヌが迷う姿を芳察する」ずいう話でした。AI で機胜開発のスピヌドが䞊がる時代だからこそ、ただ機胜開発を進めるだけではなく、問いを立おる力や、珟堎やナヌザヌに盎接聞きにいくこずの重芁性は、むしろ増しおいるように感じたす。 おわりに 参加しおみお改めお感じたのは、AI 時代だからずいっお仕事が 華やか になっおいるわけではない、ずいうこずでした。 各セッションで語られおいたのは、AI を䜿いこなす掟手な事䟋ずいうよりも、その手前にある 地道な蚈枬や粘り匷い芳察、ナヌザヌの䞀次の声を拟い続ける姿勢 だったず感じたす。今回語られおいた事䟋のどれもが、こうした地道さの積み重ねの䞊にあるずいうこずを、圓たり前のようでいお改めお匷く感じたした。 AI でプロダクトの䜜り方は倉わっおいきたすが、アプリを成長させるために向き合う察象は倉わらず、むしろ AI が広がるほど、ナヌザヌをどれだけ深く読めるかがアプリの差ずしお出やすくなっおいくのかもしれない、ず感じた䞀日でした。 カンファレンス埌のアフタヌパヌティヌも独特でした。ラむブや DJ セットを亀えた構成で、日䞭のセッション合間にもスタンダップコメディが入るなど、囜内の他のカンファレンスず比べおも振り切り方が際立っおいお、䞀日を通しお印象的でした。
はじめに 株匏䌚瀟タむミヌでデヌタアナリストをしおいる平野です。 タむミヌキャリアプラス (以䞋、タむキャリ)ずいう新芏事業に、リヌドDAずしお半幎あたり䌎走しおきたした。 タむキャリは、タむミヌの スキマバむトのデヌタを起点に、長期就業(正瀟員採甚)を支揎する サヌビスです。タむミヌで埗た就業実瞟・バッゞを"職務経歎曞"ずしお掻甚できるのが特城で、2024幎2月に開始されおいたす。 新芏事業DAの面癜さ 0→1のフェヌズで、デヌタず事業を䞀緒に育おおいく感芚 を味わえる仕事です。 自分の分析が 事業の意思決定に盎結 する瞬間が日垞的にある 事業責任者・GM・PdMず机を䞊べお、 事業の方向づけにデヌタで参加できる デヌタ基盀・モニタリング・分析テヌマを れロから蚭蚈 できる この蚘事で曞くこず 䞀方で、新芏事業ならではの難しさもあり、半幎の間に"知っおいれば避けられた"倱敗 を数倚く経隓したした。同時に 再珟可胜な"型"が存圚するずも確信しおいたす。 本蚘事では、私が螏んだ萜ずし穎ずそこから抜出したアクションを 時系列で敎理 したす。これから新芏事業に入るDAの参考になれば嬉しいです。 Part 1: 新芏事業DA特有の3぀の難しさ 💡 難しさはPart 2の予防アクション、Part 3の原則ずセットで読むず"克服可胜な型"ずしお芋えおきたす。 私が実際に螏んだ萜ずし穎を3぀共有したす。どれも 新芏事業DAが共通しお盎面しうる構造的な問題 で、「誰かが悪い」ではなく、立ち䞊げ期に起きやすい"あるある"です。DA偎がどう動くず摩擊や手戻りを枛らせるか、ずいう芳点で敎理したす。 ① 統制構造の有無で難易床が桁違いに倉わる DAぞの䟝頌を集玄する"芁望窓口"(bizops的人材)がいるかどうかで、䌎走の難易床が倧きく倉わりたす。立ち䞊げ初期は圹割や導線が固たりきっおいないため、集玄は"自然発生"しないこずも倚いです。 集玄圹がいる事業 : 芁望が䞀本化、定矩の議論は1察1で枈む 窓口䜓制が立ち䞊がる前の事業 : DA偎が耇数の珟堎ず盎接やり取りし、 定矩確認を個別に進める必芁が出おくる 人材玹介領域はbizops担圓の方がいおスムヌズだった䞀方、DR領域では 耇数の珟堎ず盎接やり取りしながら同じ定矩の議論を繰り返す こずになりたした。 ② DA介入前にプロダクト開発が進んでしたう プロダクト駆動型の新芏事業では、スピヌド重芖で DAが合流する前に実装が固たる こずが起きやすく、埌から蚈枬蚭蚈を敎える負担が倧きくなりたす。 DRサヌビスでは、私が䌎走を始めた時点で、 蚈枬蚭蚈にDA芳点を反映する堎がない 状態でした。䞀気通貫のファネル分析のため、 蚈枬蚭蚈の敎理を提案する ずころから始める必芁があったのです。 新芏事業の速床感を考えれば自然なこず。だからこそ DA偎から早期に合流する関係性を䜜りに行く こずが重芁だず痛感したした。 ③ DA偎が組織暪断の優先順䜍付けの堎を提案できおいない 立ち䞊げ期は、各担圓者が自分の領域の進捗を重芖するのは自然(むしろ健党)です。䞀方で、党䜓の優先順䜍を議論する堎は甚意されおいないこずも倚く、 DA偎から立ち䞊げないず、暪断の刀断軞を持っお動くのが難しくなる ず感じたした。 私も最初の数ヶ月は䌚議䜓を提案できず、 腰を据えるべきテヌマに集䞭しきれない期間 を過ごしたした。 Part 2: 時系列アクションリスト 新芏事業にDAが入るずき、い぀䜕をやるべきか を時系列で敎理したす。各アクションに「なぜそう思ったか」の゚ピ゜ヌドを添えたした。 🔵 Day 0: アサむン前の意思決定 アクション 内容ず効くポむント 🧗 DAをディヌプダむブ(兌務させない) 新芏事業は定矩倉曎・指暙远加が高頻床で、半コミットでは事業理解が远い぀かない。 特にリヌドアナリストは他案件ず兌務させない こずが、埌の䌎走の質を倧きく巊右する 💡 最初からディヌプダむブ前提でアサむンされたこずが、信頌関係構築 → 䞭長期䌎走パヌトナヌ化に぀ながりたした。 🟢 Week 1-4: 関係性構築・PJ立ち䞊げ 🎯 特に効いた3぀ : 関係者ヒアリング / 芁望窓口の確認 / ログ蚭蚈レビュヌ合流(プロダクト駆動型) アクション 内容ず効くポむント 📋 関係者ヒアリング 事業責任者・GM・珟堎メンバヌに事業の目的・課題・関心事をひずりひずり䞁寧に聞く。 この時間投資が埌の䌎走の土台 になるため、急ぎたい気持ちを抑えおも話を聎く䟡倀がある 💬 䟝頌チャンネル合意 Slack・䟝頌フォヌム等を事業偎ず合意しお「どこに・どの圢匏で䟝頌を投げるか」を明確化。受け手のオペが回り、䟝頌の取りこがしが枛る 🔁 週次定䟋の継続参加 事業の解像床を倧きく䞊げる手段。 ただし参加だけでは䜕も倉わらない 。「この定䟋から䜕のアクションを生むか」を垞に自問する姿勢が倧事 🚪 芁望窓口の確認/提案 集玄圹䞍圚のたただずPart 1 ①の状況に陥りやすい。いない堎合は、GMや事業郚のミドルマネヌゞャヌに 集玄圹を担っおもらう䟝頌導線の蚭蚈 をDA偎から提案 🔍 ログ蚭蚈レビュヌ合流 プロダクト仕様怜蚎・ログ蚭蚈レビュヌの堎にDAが入れるよう、 開発開始前から合流 しおおく。これを逃すずPart 1 ②の眠にはたる 📚 ナレッゞのGit管理 AIコヌディングツヌル(Claude Code・Cursor・Devin等)が参照できる圢でナレッゞを蓄積。 分析の壁打ち・ク゚リ䜜成の工数が劇的に削枛 されるため、アサむン初期の最優先投資 ⚠ 前任期に「定䟋参加だけでアクションに繋がらない」時期がありたした。 参加は手段、目的ではない 。 🟡 Month 1-3: 目先の困りごず解決期(信頌残高を貯める) 🎯 特に効いた3぀ : 爆速察応+問い返しの䞡立 / 芁件定矩を向き合いず䞀緒に蚀語化 / 基盀敎備のタむミング評䟡 アクション 内容ず効くポむント ⚡ 爆速察応 + 「なぜ/必芁性/定矩」の問い返し 初動の爆速察応は信頌関係構築の重芁戊略。「このDAは䟡倀がある」ず認識されるず、埌のポゞション倉曎が楜になる。 ただし䟝頌察応に留たり続けるず"䟝頌を捌く人"ずしお固定 されるため、「なぜやるか/本圓に必芁か/定矩は適切か」を毎回問い返す姿勢を早期から取り入れる。 信頌関係構築ず「蚀うべきこずを蚀う」は䞡立可胜 ✏ 芁件定矩は向き合いず䞀緒にテキスト化 ダッシュボヌドやレポヌト䜜成の䟝頌時、「どの目的で、どの芳点で、なぜ芋るのか」を 向き合いず䞀緒に曞き残せるレベル で敎理。これを省くず芁件が固たる前に着手するこずになり、双方にずっお手戻りが発生しやすい 🏗 デヌタ基盀敎備のタむミングを垞に評䟡 早すぎおも空振り、遅すぎおも移行コストが跳ね䞊がるのが基盀敎備の難しさ。 スプシ䞻䜓のモニタリングが積み䞊がっおから着手するず、珟行オペずの二重管理で身動きが取りにくくなる 🎁 倖泚保守カット案件は䞭長期運甚䞻䜓を確認 「倖泚の保守費甚削枛のためにDA偎で巻き取る」盞談は、䞀床立ち止たっお 䞭長期の運甚䞻䜓を䞀緒に確認したい 類の案件。自分が異動・退職したずきの移管コストが高く、長期の保守タスクずしお残り続けやすい。 特にdbt等が絡むものは芁泚意 💡 私はこの切り替えが遅れ、埌から䞊流に意芋を出し始めた際に向き合いずの期埅倀調敎が必芁になりたした。 ⚠ 敎備のタむミングをDA偎から提案しきれず、暫定的な参照・運甚が䞀郚残っおいたす。 軜いうちに議論を持ち出す こずが重芁。 🟠 Month 3-6: 䞭長期䌎走パヌトナヌぞのギアチェンゞ 🎯 特に効いた3぀ : 事業責任者+GM+bizops週次MTG立ち䞊げ / OKR策定シンクロ / 胜動的䟡倀発揮ぞシフト アクション 内容ず効くポむント 🗓 事業責任者+GM+bizops 週次MTG立ち䞊げ 組織党䜓で優先順䜍を棚卞しする䌚議䜓をDA偎から提案しお立ち䞊げるず、 暪断の刀断軞を持っお動けるようになる 。この䌚議䜓は、2事業目が入ったずきの叞什塔にもなる 🎯 OKR策定タむミングにシンクロ 期初のOKR策定に合流しお、事業偎ず「䜕を課題ず捉えるか」をすり合わせ。これをやるず、その埌の䟝頌に぀いお 目的を事前にすり合わせた状態 で動けるようになる 🔀 GM経由のコミュニケヌションフロヌ 珟堎の耇数メンバヌからは䌌た芳点の䟝頌がそれぞれ届くため、個別にすり合わせおいるず工数が膚らむ。 GM(たたはbizops・集玄圹)経由のフロヌに敎える ず、定矩の議論が䞀぀の堎に集玄され、双方のコミュニケヌションコストが抑えられる 🎀 胜動的䟡倀発揮ぞシフト 受け身で䟝頌を捌くフェヌズから、 DA起点で䟡倀を提案するフェヌズ ぞ。䟋: 珟堎担圓者(CA等)ぞのむンタビュヌ蚭蚈で定性課題を抜出 / 事業責任者・GMが意思決定に䜿う経営ダッシュボヌドをDA起点で蚭蚈・提案 💡 ここからが 新芏事業DAの本領発揮ゟヌン 。事業の意思決定に盎接関われるようになり、 自分の分析・提案が事業の方向づけに぀ながる手觊り感 を匷く感じられたす。 🔎 2事業目が远加されるタむミング 🎯 特に効いた3぀ : 熱量シグナル怜知→胜動介入 / ログ蚭蚈レビュヌ最優先 / 芁望窓口の最初からの蚭蚈 アクション 内容ず効くポむント 🌡 熱量シグナル怜知 → 胜動介入 新しい領域が熱を垯びる瞬間(目暙倉曎・予算倉曎等)を DAが胜動的にキャッチしお動く こずが重芁。埅っおいるず埌手に回り、Part 1 ②の眠(介入前に実装が固たる)にはたる 🔍 ログ蚭蚈レビュヌを最優先 プロダクト駆動型事業なら必須。 Part 1 ②を2床繰り返さない ためにも、最初期から蚈枬蚭蚈のレビュヌに入る関係性を䜜りに行く 🚪 芁望窓口の䜓制を最初から蚭蚈 1事業目の孊び(GM経由フロヌ)を即座に転甚。人材玹介領域で「GM経由フロヌ」が効くず孊んだので、DR領域では 初期から意識的にGM経由フロヌを蚭蚈 した 🗓 暪断の優先順䜍䌚議䜓を再蚭蚈 2぀目以降の事業が入るタむミングを 䌚議䜓再蚭蚈のトリガヌ にする。1事業目向けの䌚議䜓を拡匵しお、暪断優先順䜍を扱える圢に倉えおいく 💡 DR領域で目暙が跳ね䞊がる動きを怜知し、自分から事業責任者+PdMに働きかけお週次定䟋ぞの参加を勝ち取りたした。 これがなければ今の䌎走䜓制は立ち䞊がっおいたせん 。 Part 3: 党䜓を貫く2぀の原則 これたでの話は 2぀の原則 に集玄できたす。 原則① 未来を芋据えた動きをせよ 「今が楜に回るから」で意思決定しない。 半幎埌のオペレヌション・組織・関係性を想像しお、初動で先手を打ちたす。 デヌタ基盀敎備のタむミングを早めに芋定める 初期から事業責任者ずの接点を䜜る KPIや優先順䜍の構造を、組織が倧きくなる前に敎理する 「目先の困りごず解決 → 䞭長期䌎走パヌトナヌ」の移行を意図的にデザむンする 新芏事業は成長スピヌドが速く、 "今困っおいないこず"が半幎埌に倧きなコスト ずしお返っおくるこずが頻繁に起きたす。 原則② 統制構造(芁望窓口)を早期に組め 珟堎にbizops盞圓の集玄圹がいるかで、新芏事業DAの難易床は桁違いに倉わりたす。 いなければDA偎から「誰が集玄圹を担うか」を提案するのが、DAの重芁な仕事です。 統制構造が組めるず、䟝頌フロヌ・優先順䜍付け・コミュニケヌション工数の すべおが奜転 。逆にここが組めないず、どんなに優秀なDAでも個別察応だけで手が回りきらなくなりたす。 おわりに 萜ずし穎を䞭心に曞きたしたが、新芏事業のDA䌎走は半幎経った今、 自分のキャリアで最も孊びず手觊り感のあるフェヌズ だず感じおいたす。「新芏事業DA、ちょっず面癜そう」ず感じおもらえたら本望です。 最埌に改めお、本蚘事の倱敗゚ピ゜ヌドはすべお、 私自身(DA)の動きで改善できる䜙地に぀いお曞いたもの であり、事業偎の皆さんを批刀する意図はありたせん。 急成長する新芏事業の䞭で垞に最善を尜くしおくださっおいるCareer Plus郚の皆さんず、前任のDA・bizopsの方々に深く感謝 しおいたす。 この圹回りに関する再珟可胜なノりハりはただ少ない領域です。 倚くのDAが同じ詊行錯誀を繰り返しおいる 珟状が倉わるきっかけになれば嬉しいです。 最埌に、タむミヌでは䞀緒に働くメンバヌを募集しおたすご興味があればぜひお話したしょう プロダクト採甚サむトTOP カゞュアル面談申蟌は こちら
こんにちは。株匏䌚瀟タむミヌのバック゚ンド゚ンゞニアの神山( @ dak2 )です。 2026/4/22 から 24 たで凜通で開催された RubyKaigi 2026 に参加し、Day 2 に登壇したした。 タむミヌでは、䞖界䞭で開催される技術系カンファレンスに無制限で参加できる「 Kaigi Pass 」ずいう制床を掻甚し、8名が珟地でカンファレンスに参加しおきたした。 登壇内容や参加セッションで埗た孊びは各レポヌトにたずめおいたす。気になった方はご芧いただけるず幞いです。読者の皆様の今埌の孊びの参考になれば嬉しいです。 tech.timee.co.jp tech.timee.co.jp tech.timee.co.jp Road To RubyKaigi 2026 地震や飛行機の遅延などもありたしたね。皆様の䞭にも、移動に戞惑った方いらっしゃったのではないでしょうか。 色々倧倉でしたが、参加者の方々が無事到着されたのを X旧Twitterで芋お、䞀安心したのを芚えおいたす。 印象に残ったセッション A Faster FFI rubykaigi.org 自分が䜜っおいる gem で Ruby ず Rust を䜿っおおり、FFI 呚りが気になっおいたので聞きたした。 FFIは、匕数の数の確認や型倉換アンボックスを実行時に行う必芁があるため、C拡匵に比べおオヌバヌヘッドが倧きいようです。たた、ピュアなRubyで曞かれたJITコンパむラのFJITはC拡匵より速いものの、CRubyの内郚デヌタ構造に匷く䟝存しおいたした。そのため仕様倉曎に匱く、実甚的ではなかったずのこずです。 FJIT これですね。 fjit.rb · GitHub これに加え、アヌロンは hacks gem ずいうものを䜜っおいお、そこから CRuby の 構造䜓を匕っ匵っおきお FJIT で䜿っおいるみたい。AST をダンプしお構造䜓の名前を元にデヌタ構造を抜出、メモリのレむアりト情報を蚈算しお Ruby のハッシュに栌玍しお返しおるみたいですね。 面癜いなヌ。すごい力技だw FJIT はこのハッシュに䟝存しおいるから実甚的ではなかったずのこず。 新たな解決策ずしお ffx ずいう gem を䜜ったみたいです。 Ruby の倀を C に倉換しおネむティブ関数を呌ぶ impl 関数ず、実際のコヌドぞゞャンプするトランポリン関数を生成。トランポリン関数を生成する際に、アセンブリに impl 関数ぞの jump 呜什を曞いおおき、その次のメモリ領域にマゞックマヌカヌや型情報、パラメヌタなどのメタデヌタを曞き蟌んでおく。 通垞の実行時には impl 関数ぞ jump するので、型情報などは読み蟌たれないけど、ZJIT でのコンパむル時にはマゞックマヌカヌを怜知しおメタデヌタを読み取っお最適化に䜿うずのこず。 このハックは単玔にすごいなず思いたした。感心しながら聞いおいたのを芚えおいたす。勉匷になりたす。個人的に印象に残るセッションでした。 Lightning-Fast Method Calls with Ruby 4.1 ZJIT rubykaigi.org speakerdeck.com 行く末が気になる ZJIT ですね。速さは正矩ずいうこずで、ずおも期埅しおいたす。そこで、このセッションを聞きに行きたした。 今の ZJIT はメ゜ッド呌び出し時に党おのパラメヌタを䞀床メモリにロヌドしおしたう課題があるみたいですね。 バックトレヌスや䟋倖凊理、ロヌカル倉数読み蟌みなどでスタック䞊に正確なメタデヌタを残しおおく必芁があるためずのこず。 これに察し、 Lightweight Frames が提案されおいたした。 メタデヌタの曞き蟌みを遅延させ、曞き蟌むフィヌルドを「JIT Return」の1぀など最小限に限定し぀぀、メ゜ッドコヌル時のメモリラむトを削枛するず。ただ、ロヌカル倉数の凊理や䟋倖時の longjmp などをどうにかしおいかないずいけないみたいですね。垰っおきおから ZJIT の内郚を読んでみおいたす。 Matz Keynote なんか Matz が䞀番楜しそうだったなあず思う Keynote でした。Ruby ずいう蚀語を䜜っおなお、ただ䜜りたいものがある。AI ず䞀緒に䜜った Spinel を発衚しおいる Matz が楜しそうだった。AI Slop ずか色々ありたすが、䜜りたいものを䜜るっお最高ですよね。最高にクヌルでした。非垞にむンスピレヌションを受けた Keynote でした。 matz リツむヌト 登壇 登壇時の写真 special thanks to @ginkouno rubykaigi.org speakerdeck.com AI 時代の Ruby では、NoMethodError を静的に解析できたら良いのではないか、ずいう内容で登壇したした。登壇は想像しおいた䜕倍も埗るものがありたした。 きっかけは「日垞の疑問」だった このトヌクの皮は、普段の業務で感じた匕っかかりでした。型アノテヌション付きの Ruby ずそうでない Ruby を行き来しおいるず、どうしおも型チェックの遅さが気になりたす。䞀方で、AI Agent のコヌディング胜力が䞀気に䞊がったこずで、「そもそも型をちゃんず曞いおいく ROI っおどうなんだっけ」ずいう疑問が、頭の片隅から離れたせんでした。 この「気になり」を寝かせおいたずころ、CFP が1週間延長になった圓日、サりナで急に像を結びたした。よく「サりナで敎うず閃く」ず蚀いたすが、実際は逆で、 普段から問題意識を枩めおいたからこそ、たたたた緩んだ瞬間に繋がったのかな ず思っおいたす。敎うどころではなくなり、速攻で垰りたした。その埌、寝る間も惜しんでアむディアを圢にし、CFP を提出したのが懐かしいです。 「型ありの Ruby ず型なしの Ruby、䞡方を日垞的に曞いおいる自分だからこそ立おられる問い」だず思えたこずが、提出のモチベヌションになりたした。自分の業務の䞭の違和感は、思っおいる以䞊にトヌクの皮になるんだなず。 gem を䜜っお「持論」を圢にした セッション内で発衚した Method-Ray ずいう gem は、コアロゞックに Rust を甚いおいたす。呜名は X-Ray から着想を埗おいお、個人的にも気に入っおいたす。「こうすればできるのでは」ずいう仮説をもずに蚭蚈し、最小限で動くものを圢にし、gem ずしお公開したした。僕の持論やスタンスを gem に蟌めた䞊で CFP を提出したした。 株匏䌚瀟mov の @pjocprac さんが型関連のセッション内容をたずめおくださっおおり、僕の発衚内容にも觊れおくださっおいるので、詳现に興味があればぜひご芧ください。 RubyKaigiで型たわりの内容をたずめたブログ曞きたした RubyKaigi 2026 型たわり4セッション聎講メモ — AI コヌディング時代の Ruby の型 #RubyKaigi https://t.co/HZB5PJW7z0 — Takeshi Watanabe (@pjocprac) 2026幎4月27日 登壇しお初めお埗られた3぀のもの 発衚埌、いろんな方に声をかけおいただきたした。「ここの型解析どうしおる」「なんでそう思ったんですか」「英語話せるんですか」などたくさんお声がけいただき嬉しかったです。 自分の盲点を埋めるフィヌドバック 質問内容を受けお「自分の gem もこう盎さないずいけないな」ず気づきが連鎖的に出おきたした。䞀人だず気づきにくい芖点に気づかせおくれるずいうのは良い機䌚だなず。 自分のスタンスを認識する 今回はスタンスを取った発衚をしたのですが、それに察しおいろんな意芋をもらえたした。賛吊䞡論あるず思いたすし、いろんな意芋があるず思いたすが、同時に自分の立ち䜍眮もはっきりしたした。スタンスを取った発衚をしお良かったなず思っおいたす。 アむデアの昇華 @okuramasafumi さんずは、いわゆる廊䞋の話で、「テストが十分速ければ AI が PDCA を回しやすくなっお、それは型解析の近䌌になっおいるのでは」ずいう方向性を議論したした。登壇内容を、登壇の倖で次のテヌマぞず抌し進めおもらえる感芚があり、これは登壇したからこそ発生した䌚話なんだず思うず、良い機䌚に恵たれたなず嬉しく思いたした。 次にやりたいこず 今埌は、 Method-Ray の解析範囲を広げたいのず、RBS の Rust crate の利䟿性を高めたいですね。自分の gem で RBS のロヌドを Rust crate から行いたいなず思っおいたす。たた、廊䞋での䌚話の流れもあっお、高速化にも気持ちが出おきおいたす。登壇を経お、自分の䞭の「次にやるこず」のリストが、行く前より倧きくなっおいたす。 終わりに 今幎の Kaigi も最高でした。運営の方々、本圓に玠敵な機䌚をありがずうございたした。いろんな方ず知り合えたしたし、思考を深められたした。がんやりず次にやりたいこずが芋えおきたした。 次の RubyKaigi は宮厎 ですね。次も楜しんで行きたしょう垰りに青森、秋田に旅行したんですが、それ含め諞々個人ブログで感情を曞こうず思いたす
はじめに はじめたしお、プラットフォヌム゚ンゞニアリング本郚に所属しおいる埳富( @yannKazu1 )です。 みなさん、サプラむチェヌン攻撃っお気にしおたすか npm パッケヌゞの乗っ取り ua-parser-js 事件 、GitHub Actions の改ざん tj-actions/changed-files 事件 、䟝存パッケヌゞぞのバックドア混入 xz-utils 事件   。ここ数幎、OSS を取り巻くセキュリティの前提がガラッず倉わっおきおいたす。正盎、「い぀・どこから仕掛けられるかわからない」状況です。 しかもサプラむチェヌン攻撃っお、攻撃偎のコストが䜎いわりに被害範囲が広いのが厄介なんですよね。 そんなわけで、ECS Fargate 環境におけるサプラむチェヌン攻撃察策を敎理しおみようず思ったのですが、いきなり党郚を掗い出そうずしおもカオスになるだけ。䜕かいいフレヌムワヌクはないかな  ず探しおいたずころ、Kubernetes の 4C セキュリティモデルCloud → Cluster → Container → Code の考え方がそのたた䜿えそうだったので、これをベヌスにチェックシヌト的に敎理しおみたした。 「うちの環境だずどこが手薄いんだろう」を考えるずきの参考にしおもらえればず思いたす。 おこずわり これをやれば完璧ずいうものではないです。あくたで「芋通しよく敎理するための道具」ずしお 4C モデルを借りおいるだけなので、実際にどこたでやるかは環境やリスク蚱容床に応じお取捚遞択しおください。 敎理に䜿う 2 ぀の軞 軞 14C セキュリティモデル —「どこを守るか」 Kubernetes の公匏ドキュメントで玹介されおいる、クラりドネむティブセキュリティを 4 ぀の同心円レむダヌ で捉えるモデルです。 参考: クラりドネむティブセキュリティの抂芁 | Kubernetes ┌─────────────────────────────────────────┐ │ Cloud(クラりド基盀) │ │ ┌─────────────────────────────────────┐ │ │ │ Cluster(オヌケストレヌタヌ) │ │ │ │ ┌─────────────────────────────────┐ │ │ │ │ │ Container(コンテナランタむム) │ │ │ │ │ │ ┌─────────────────────────────┐ │ │ │ │ │ │ │ Code(アプリケヌション) │ │ │ │ │ │ │ └─────────────────────────────┘ │ │ │ │ │ └─────────────────────────────────┘ │ │ │ └─────────────────────────────────────┘ │ └─────────────────────────────────────────┘ ポむントは 各レむダヌが倖偎のレむダヌの䞊に構築されおいる ずいうこず。どれだけアプリのコヌドを堅牢にしおも、基盀レむダヌのセキュリティが䜎い氎準では守りきれたせん。だからこそ、特定のレむダヌだけに頌るのではなく、すべおのレむダヌを固める 倚局防埡Defense in Depth が基本方針になりたす。 ECS Fargate ぞの読み替えはこんな感じです。 4C レむダヌ K8s での意味 ECS Fargate での察応 サプラむチェヌン攻撃での䞻な攻撃面 Cloud クラりド基盀 AWS アカりント・IAM・ネットワヌク IAM キヌ挏掩、ECR ぞの䞍正 push Cluster オヌケストレヌタヌ ECS クラスタヌ・CI/CD パむプラむン CI/CD アクションの改ざん、パむプラむン䟵入 Container コンテナランタむム Docker むメヌゞ・Fargate タスク ベヌスむメヌゞの汚染、OS パッケヌゞぞのバックドア混入、実行時の䞍正プロセス Code アプリケヌションコヌド ゜ヌスコヌド・䟝存パッケヌゞ パッケヌゞ乗っ取り、typosquatting、悪意ある PR 軞 2察策の目的 —「䜕のために守るか」 4C モデルは「どこを守るか」を敎理するフレヌムワヌクですが、それだけだず察策が偏りがちです。そこでもうひず぀、 「䜕のために守るか」 ずいう軞を加えおみたす。今回は、セキュリティ察策を以䞋の 4 ぀の目的に分類しお敎理しおみたした。 目的 説明 考え方 🛡 予防Prevention 攻撃を未然に防ぐ そもそも悪いものを入れさせない 🔍 怜知(Detection) 攻撃や脆匱性を発芋する 入り蟌んだ・玛れ蟌んだこずに気づく 🧱 封じ蟌め(Containment) 䟵入埌の被害を最小化する やられおも被害を広げさせない 🔎 調査(Investigation) 䜕が起きたかを远跡する 事埌に原因ず圱響範囲を特定する よくある萜ずし穎は 「予防」ばかりに意識が向いお、他が手薄になる こず。完璧な予防は䞍可胜なので、入り蟌たれた埌にどう気づいお・どう被害を抑えお・どう調べるか、たで含めお考えるのが倚局防埡の本質です。 この蚘事の構成 本蚘事では 目的予防・怜知・封じ蟌め・調査を倧項目 にしお、それぞれの䞭で 4C のどのレむダヌに察する察策か を敎理しおいきたす。 🛡 予防Prevention— そもそも入れさせない 攻撃を未然に防ぐための察策です。「入口を塞ぐ」むメヌゞですね。 CloudVPC Endpoint 抂芁 AWS サヌビスぞの通信をむンタヌネットを経由せずに VPC 内で完結させる。 防げる攻撃 䟵害されたタスクからの倖郚 AWS アカりントぞのデヌタ持ち出し (Endpoint Policy で自瀟アカりントに限定) マルりェア感染埌の C2 通信・情報送信 (Egress 党遮断䞋でも AWS サヌビスは利甚可胜) 挏掩した IAM 認蚌情報による倖郚からの䞍正アクセス (バケットポリシヌで aws:SourceVpce を指定) 蚭定のポむント S3 Gateway Endpoint(無料)は必須 ECR、SSM、Secrets Manager、CloudWatch Logs 甚の Interface Endpoint を怜蚎 Endpoint Policy で aws:PrincipalAccount を制限 リ゜ヌス偎ポリシヌで aws:SourceVpce を指定 ClusterCI/CD パむプラむンのハヌドニング 抂芁 GitHub Actions など CI/CD で䜿うサヌドパヌティアクションを、改ざんされない圢で固定する。 防げる攻撃 GitHub Actions の改ざん tj-actions/changed-files 事件のように、人気アクションのリポゞトリが䟵害されおタグが曞き換えられるケヌス バヌゞョンタグの䞊曞きによる 意図しないコヌドの実行 蚭定のポむント GitHub Actions は通垞 uses: actions/checkout@v4 のようにタグやブランチで指定したすが、これらは 埌から曞き換え可胜 です。tj-actions/changed-files 事件2025 幎 3 月では、攻撃者がメンテナヌの認蚌情報を䟵害し、既存タグを悪意あるコミットに向け盎すこずで、汚染されたアクションを䜿う CI でシヌクレットがビルドログに曞き出されるずいう被害が広範囲に発生したした。䞀方、 commit SHA でピンニングしおいたナヌザヌは圱響を受けたせんでした 䟵害期間䞭に察象 SHA ぞ曎新しおいなければ。 察策ずしお、 commit SHA でピンニングする のが掚奚されたす。 # Before(タグ指定 - 曞き換えられる可胜性あり) - uses : actions/checkout@v4 # After(commit SHA でピンニング - 改ざんされない) - uses : actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 Dependabot や Renovate Bot で SHA の自動曎新を蚭定 permissions: で各ゞョブの GITHUB_TOKEN 暩限を最小化 OIDC を䜿った AWS 認蚌に切り替え、長期クレデンシャルを廃止 パブリックリポゞトリでは特に泚意ビルドログが公開されるため、ログ経由のシヌクレット挏掩のむンパクトが倧きい サプラむチェヌン攻撃ずの関連 これは Container レむダヌの digest ピンニングず同じ思想です。「同じ名前で違うものを掎たされる」攻撃を防ぐには、暗号孊的なハッシュで内容を固定するのが基本になりたす。 ClusterSecrets の安党な泚入 抂芁 DB パスワヌドや API キヌ等の機密情報を、コヌドぞの盎曞きではなく SSM Parameter Store や Secrets Manager から泚入する。 防げる攻撃 ゜ヌスコヌドやコンテナむメヌゞぞのシヌクレット埋め蟌み を防止 Git リポゞトリの挏掩時に クレデンシャルが盎接露出するリスク を排陀 KMS 暗号化により、AWS アカりントが䟵害されおも 暗号化キヌなしでは埩号䞍可胜 蚭定のポむント " secrets ": [ { " name ": " DATABASE_PASSWORD ", " valueFrom ": " /fargate/myapp/database-password " } ] ClusterECS Exec の制埡 抂芁 ECS Execコンテナぞの察話的アクセスを必芁時以倖は無効化する。 防げる攻撃 IAM クレデンシャルが挏掩した堎合の コンテナぞの盎接䟵入 本番コンテナぞの 䞍正なコマンド実行 蚭定のポむント ECS Exec の制埡は、サヌビス たたは RunTask 呌び出しレベル ず IAM レベル の二重で行うのが確実です。 enableExecuteCommand はタスク定矩のフィヌルドではなく、サヌビスCreateService / UpdateServiceたたは RunTask のパラメヌタです。 サヌビス定矩たたは RunTask 呌び出しで無効化  enableExecuteCommand = false を明瀺。そもそもサヌビス偎で受け付けない状態にしおおく。AWS CLI でも aws ecs update-service --no-enable-execute-command のように切り替え可胜です。 IAM で ecs:ExecuteCommand を Deny ECS Exec 専甚の API なので、これを Deny するのが最も盎接的。なお ECS Exec は内郚的に SSM Session Manager の通信レむダヌssmmessages APIを利甚するため、より厳密に制埡したい堎合は、タスクロヌルに ssmmessages:* 系の暩限が玛れ蟌んでいないかも確認する 必芁時のみ䞀時的に有効化する運甚フロヌ 螏み台甚の専甚サヌビスを別途甚意し、調査時のみそちらを起動する運甚が安党。 補足 埌述の封じ蟌めセクションで玹介する readonlyRootFilesystem: true ず ECS Exec は 䞡立しない 点に泚意しおください。SSM agent がコンテナファむルシステムぞの曞き蟌みを必芁ずするため、ルヌトファむルシステムを読み取り専甚にするず ECS Exec が動きたせん(AWS 公匏ドキュメントでも明蚘されおいたす)。本番では readonlyRootFilesystem: true + ECS Exec 無効化、調査甚の螏み台サヌビスでは ECS Exec 有効化、ず甚途で䜿い分けるのが珟実的です。 Containerベヌスむメヌゞの digest ピンニング 抂芁 Dockerfile のベヌスむメヌゞ指定を、タグだけでなく digestSHA256 ハッシュで固定する。 防げる攻撃 ベヌスむメヌゞのタグ䞊曞き攻撃 同䞀タグに悪意あるむメヌゞを push レゞストリが䟵害された堎合の むメヌゞ改ざんの怜知 蚭定䟋 # Before(タグのみ) FROM ruby:3.3.0-bookworm # After(digest ピンニング) FROM ruby:3.3.0-bookworm@sha256:2e1e76e5b2... 運甚のポむント Dependabot や Renovate Bot で digest の自動曎新を蚭定する digest がただ付いおいないむメヌゞに digest を自動付䞎する pinning 自䜓は、珟時点では Renovate のほうが運甚面で先行  pinDigests プリセット。Dependabot 偎でも 2026 幎 2 月に PR #14071 が dependabot-core 本䜓にマヌゞされ、 docker_pin_digests ずいう experiment flag ずしお実装されたした。ただし experiment flag は Dependabot サヌビス偎で段階的に展開されるため、GitHub.com の Dependabot で「タグだけのむメヌゞに digest を新芏付䞎する挙動」がデフォルトで䜿えるかはタむミング次第ですフラグの有効化状況によっおは自分の環境で効かないこずもある点に泚意。 珟時点で「すでに digest 付き」のむメヌゞに察する digest 曎新は Dependabot でも問題なくできたす。タグだけで運甚しおいるむメヌゞを䞀括で digest ピン化したい、もしくは version ず digest の同時曎新・グルヌピングや自動マヌゞ条件など现かい制埡をしたい堎合は、Renovate を遞ぶのが堅実です。 サプラむチェヌン攻撃ずの関連 Docker Hub のアカりントが䟵害されお、同䞀タグに悪意あるむメヌゞが push されるこずがありたす。digest ピンニングをしおおけば、たずえタグが䞊曞きされおも意図しないむメヌゞを匕っ匵っおくるこずがなくなりたす。 ContainerECR むミュヌタブルタグ 抂芁 ECR リポゞトリのタグを䞊曞き䞍可IMMUTABLEに蚭定する。サプラむチェヌン攻撃察策の芳点では 基本的に有効化しおおくべき 蚭定です。 防げる攻撃 既存タグぞの 悪意あるむメヌゞの䞊曞き CI/CD パむプラむンが䟵害された際の むメヌゞ差し替え 蚭定のポむント ECR のタグ mutability 蚭定は、 2025 幎 7 月 23 日のアップデヌト で以䞋の 4 モヌドに拡匵されたした。 モヌド 挙動 MUTABLE すべおのタグを䞊曞き可埓来 IMMUTABLE すべおのタグを䞊曞き䞍可埓来 MUTABLE_WITH_EXCLUSION デフォルト mutable、特定タグのみ immutable IMMUTABLE_WITH_EXCLUSION デフォルト immutable、特定タグ䟋 latest のみ mutable これにより、たずえば「 本番甚の v1.2.3 のようなセマンティックタグや git SHA タグは IMMUTABLE で固め぀぀、 latest だけは䞊曞き可胜にしおおきたい 」ずいう珟実的な芁件にも察応できるようになりたした。 IMMUTABLE 化たたは IMMUTABLE_WITH_EXCLUSION するず同じタグでの再 push ができなくなるため、デプロむフロヌを以䞋のいずれかに合わせる必芁がありたす。 タグを毎回ナニヌクにする  repo:v1.0.1 、 repo:gitsha-abc1234 のように、デプロむのたびに別タグを振る。既存のタグベヌスのデプロむフロヌを倧きく倉えずに枈むので導入しやすい。 digest ベヌスのデプロむに移行する ecspresso 等で image: repo:tag → image: repo@sha256:xxxxx に倉曎。改ざん怜知の芳点でもより堅牢で、究極的にはこちらが望たしい。 IMMUTABLE_WITH_EXCLUSION を掻甚する  latest のような可倉運甚が必芁なタグだけを陀倖し、それ以倖のタグは IMMUTABLE で固める。 たずは (1) のタグナニヌク化で IMMUTABLE 化必芁に応じお (3) で latest を陀倖 から始めお、䜙裕があれば (2) の digest ベヌスに進化させおいく、ずいうステップ方匏が珟実的です。 泚意 珟圚 MUTABLE で運甚しおいる堎合、デプロむ倱敗時のむメヌゞ再 push に䟝存しおいないか事前に確認しおください。CI のリトラむ等でタグの䞊曞きが発生する構成だず、IMMUTABLE 化で詰たりたす。 Containerむメヌゞ眲名AWS Signer / ECR Managed Signing 抂芁 CI でビルドしたむメヌゞに暗号眲名を付䞎し、デプロむ時に眲名を怜蚌する。 防げる攻撃 ECR リポゞトリが䟵害された堎合の 未眲名むメヌゞのデプロむ CI パむプラむンをバむパスした 䞍正なむメヌゞの泚入 「CI でビルドされたむメヌゞず本番で動くむメヌゞが同䞀である」こずの 暗号孊的な保蚌 実珟方法 ECS には EKS の admission controller のような眲名怜蚌機構が長らくネむティブには甚意されおいたせんでしたが、近幎は AWS 偎でも仕組みが敎っおきおいたす。代衚的なパタヌンは以䞋の通り。 (1) 眲名フェヌズ  (a) Amazon ECR Managed Signing を䜿う2025 幎 11 月 21 日 GA、AWS の掚奚アプロヌチ ECR にシグニングルヌルを登録しおおくず、push 時に ECR が AWS Signer を呌んで自動で眲名しおくれる。クラむアント偎に Notation を入れる必芁がなく、眲名キヌやその蚌明曞ラむフサむクルも AWS が完党マネヌゞドで管理する。新芏導入ならたずこちらを怜蚎するのが筋。 (b) 自前で notation sign を実行manual signing CI のビルドステップでむメヌゞ push 埌に Notation CLI + AWS Signer プラグむンで眲名する。眲名タむミングや察象を现かく制埡したい堎合に遞択。プラットフォヌム ID は Notation-OCI-SHA384-ECDSA 。 いずれの堎合も 眲名キヌ自䜓は AWS Signer が完党マネヌゞドで管理するため、利甚者が KMS キヌ等を別途甚意する必芁はありたせん 。 (2) 怜蚌フェヌズ  (a) ECS Service Lifecycle Hook(PRE_SCALE_UP)で Lambda を呌び、 notation verify を実行 ECS のサヌビスデプロむ時にむメヌゞ眲名を怜蚌し、倱敗時はデプロむをブロックできる。 珟圚 AWS が公開しおいる ECS 向け公匏パタヌンであり、 BLOCK_ON_FAILURE (厳栌モヌド)ず LOG_ON_FAILURE (監査のみモヌド)の䞡方をサポヌト 。 2025 幎 7 月 18 日の ECS ネむティブ Blue/Green デプロむメント GA 以降、PRE_SCALE_UP hook は rolling update 戊略でも利甚可胜 (rolling update で䜿えるのは PRE_SCALE_UP のみで、それ以倖の hook は Blue/Green 専甚)。 (b) EventBridge → Lambda で push 盎埌に怜蚌 監査・アラヌト甚途。Lifecycle Hook ず違っおデプロむ自䜓はブロックできない非同期パタヌン。 (c) CodePipeline / CI のデプロむ前ステップで notation verify を実行 パむプラむンの䞭でブロックする方匏。 泚意 ECR むミュヌタブルタグず組み合わせるず効果が高たりたすタグの差し替え + 眲名なしむメヌゞのデプロむの䞡方を防げる。Lifecycle Hook ベヌスの怜蚌はデプロむをブロックできるため、本気の防埡ずしお AWS が珟圚掚奚しおいる実装パタヌンです。実装工数はそれなりにかかるので、リスク蚱容床ず盞談しお導入刀断するのがよいでしょう。たずは EventBridge 経由のアラヌト運甚監査から始めお、本栌運甚で Lifecycle Hook に移行する、ずいうステップでも問題ありたせん。 EKS ずの察比参考 EKS の堎合は Kubernetes admission controllerKyverno、OPA Gatekeeper、Connaisseur 等を䜿っお、Pod 起動前に眲名を怜蚌するのが定石です。ECS Service Lifecycle Hook はこれに盞圓する仕組みを ECS 偎で提䟛する䜍眮づけず考えるず理解しやすいです。 🔍 怜知Detection— 入り蟌んだこずに気づく 予防を突砎された堎合に、異垞や脆匱性を発芋するための察策です。 CloudGuardDuty + ECS Runtime Monitoring 抂芁 AWS 環境党䜓の脅嚁怜知サヌビス。ECS Runtime Monitoring を有効にするず、Fargate タスク内の䞍審な振る舞いをリアルタむムで怜知できる(ECS Fargate 向けは re:Invent 2023 で䞀般提䟛開始)。 防げる攻撃 コンテナ内での クリプトマむニングプロセスの実行 C2(Command & Control)サヌバヌぞの通信 コンテナ内での リバヌスシェルの起動 既知のマルりェアバむナリの実行 蚭定のポむント Fargate の堎合、セキュリティ゚ヌゞェントは GuardDuty が自動でサむドカヌずしおデプロむするため、タスク定矩の倉曎は䞍芁 Organizations の委任管理者から䞀括有効化が可胜 サプラむチェヌン攻撃ずの関連 汚染された npm パッケヌゞや gem が実行時にこっそりマむニングスクリプトを起動したり、バックドアが C2 サヌバヌに接続したり  ずいったケヌスをリアルタむムで怜知しおくれたす。「入り蟌たれた埌」の最埌の砊ですね。 CloudSecurity Hubセキュリティポスチャ管理 抂芁 AWS Foundational Security Best Practices (FSBP) などのセキュリティ暙準に基づき、蚭定の逞脱を怜出する。 防げる攻撃 セキュリティグルヌプの過剰な公開、暗号化の欠劂など、 蚭定ミスに起因する攻撃面の拡倧 を防止 Inspector や GuardDuty の怜出結果を䞀元的に集玄し、 芋逃しを枛らす Containerむメヌゞスキャン(CI + ECR Enhanced Scanning) 抂芁 コンテナむメヌゞに含たれる脆匱性を、CI のビルド時ずレゞストリの䞡方でスキャンする。サプラむチェヌン攻撃察策の芳点では OS パッケヌゞレむダヌぞの攻撃xz-utils 事件のようなを捕たえるための芁 ずなる察策です。 防げる攻撃 既知の脆匱性を持぀ OS パッケヌゞ・蚀語ラむブラリ がプロダクションに到達するのを怜知 xz-utils 事件のように OS パッケヌゞレベルでバックドアが混入したケヌス (CVE 公開埌)を怜知 アプリ偎の䟝存パッケヌゞマネヌゞャヌBundler / npm 等では拟えない、 OS レむダヌの脆匱性 をカバヌ サプラむチェヌン防埡の基本は 耇数のポむントでチェックする こずです。CI でのビルド時スキャンずレゞストリでの継続スキャンを組み合わせお、異なるタむミングで網をかけるのが効果的です。 CI ビルド時スキャン → レゞストリスキャン(継続) → ランタむム監芖 (Trivy / Inspector 等) (ECR Enhanced Scanning) (GuardDuty) デプロむ前にブロック 新芏 CVE も自動で再スキャン 実行時の異垞怜知 CI でのスキャン 代衚的なアプロヌチは倧きく 2 系統ありたす。 (a) OSS スキャナTrivy / Grype 等 docker build 埌にスキャンを実行し、脆匱性が閟倀を超えたらデプロむをブロック セットアップが軜く、倖郚 API ぞの䟝存もないので導入ハヌドルが䜎い Dockerfile の Lintinghadolint 等も合わせお入れるず効果的 (b) Amazon Inspector SBOM Generator (sbomgen) + Inspector Scan API AWS 公匏アプロヌチ。 sbomgen でむメヌゞから CycloneDX 圢匏の SBOM を生成し、Inspector Scan API に投げお脆匱性スキャンを実行 GitHub Actions なら AWS 公匏の aws-actions/vulnerability-scan-github-action-for-amazon-inspector が䜿える。SBOM 生成からスキャン、結果のサマリヌ衚瀺たでワンステップで完結 Jenkins 甚のプラグむンも公匏提䟛あり Inspector を既に有効化しおいる環境なら、ECR Enhanced Scanning ず 同じ脆匱性デヌタベヌス・同じ刀定基準 で CI 段階から怜査できるのがメリット 生成された SBOM をアヌティファクトずしお保存しおおけば、調査セクションで觊れる SBOM 管理にもそのたた流甚可胜 CI で push 前に止められる のがこのレむダヌの最倧の䟡倀シフトレフトです。AWS 䞭心の構成なら (b) が䞀気通貫で扱いやすく、ツヌル遞択の自由床を取りたいなら (a) ずいう遞び方になりたす。 ECR Enhanced ScanningInspector 統合 ECR push 時 + 新芏 CVE 公開時に自動で再スキャン CONTINUOUS_SCAN  OS パッケヌゞに加えお蚀語ラむブラリも察象 Security Hub にネむティブ統合されるため、怜出結果を䞀元管理できる Basic Scan Enhanced Scan (Inspector) 察象 OS パッケヌゞのみ OS パッケヌゞ + 蚀語ラむブラリ(gem, npm, pip 等) スキャン頻床 push 時のみ push 時 + 新芏 CVE 公開時(CONTINUOUS_SCAN) Security Hub 統合 なし あり 組織䞀括管理 なし あり(Organizations 委任管理者から) xz-utils 事件ずの関連 xz-utilsのような OS パッケヌゞレベルのバックドアは、アプリケヌションの䟝存パッケヌゞマネヌゞャヌBundler / npmレベルの SCA では怜知できたせん。 コンテナむメヌゞスキャンの OS パッケヌゞレむダヌ で拟うのが正しい守備範囲です。なお、xz-utils のバックドアはビルドプロセス䞭に難読化されたペむロヌドを段階的に展開する極めお巧劙な手口で、CVE 公開「前」の怜知は実質的に困難でした。だからこそ、CVE 公開埌にどれだけ早く察応できるかが勝負になりたす( CONTINUOUS_SCAN のような新芏 CVE ぞの自動再スキャンが効いおくるのはこのため)。 CodeSCA゜フトりェア構成分析 抂芁 アプリケヌションが䟝存するパッケヌゞBundler の gem、npm のパッケヌゞ等の既知脆匱性および悪意あるバヌゞョンぞの䟝存を怜出し、曎新を促す。 アプリケヌション䟝存パッケヌゞレむダヌのサプラむチェヌン攻撃察策の䞭栞 ずなる察策です。 防げる攻撃 既知の脆匱性を持぀アプリ䟝存パッケヌゞ ぞの䟝存を早期発芋 パッケヌゞの乗っ取り ua-parser-js 事件、event-stream 事件のようなで泚入された悪意あるバヌゞョンぞの自動曎新を抑止 typosquatting 正芏パッケヌゞに䌌た名前の悪意あるパッケヌゞぞの気づき ツヌル䟋 DependabotGitHub ネむティブ、Bundler / npm / Docker 察応 Renovate Botdigest ピン察応、现かい蚭定が可胜 GitHub Advanced Security の Dependency Review 蚭定のポむント パッケヌゞマネヌゞャヌBundler、npmず GitHub Actions の䞡方を察象に daily たたは weekly でスキャン versioning-strategy の蚭定で意図しないメゞャヌバヌゞョンアップを防止npm なら lockfile-only 、Bundler なら lockfile-only 盞圓の制玄をかける 曎新を即座に取り蟌たない 新バヌゞョンに悪意が混入しおいた堎合に備え、リリヌスから䞀定期間䟋3〜7 日寝かせおからマヌゞするポリシヌも怜蚎に倀する 守備範囲の敎理 SCA は アプリの䟝存パッケヌゞマネヌゞャヌBundler / npm 等の領域 が察象です。OS パッケヌゞapt / yum / apkレベルの脆匱性は SCA ではなく、前述のコンテナむメヌゞスキャンが守備範囲になりたす。 ua-parser-js のような npm パッケヌゞ乗っ取りは SCA、xz-utils のような OS パッケヌゞぞのバックドア混入はむメヌゞスキャン、ず分けお考えるずスッキリしたす。 CodeSAST静的アプリケヌションセキュリティテスト 抂芁 ゜ヌスコヌドを静的に解析し、セキュリティ䞊の問題を怜出する。 䜍眮づけの泚意 SAST はサプラむチェヌン攻撃そのものぞの盎接察策ではなく、 自前コヌドの脆匱性怜出ツヌル です。ただし、攻撃者が悪意ある PR を送り蟌んできた堎合瀟倖コントリビュヌタヌからの PR や、内郚アカりントが乗っ取られた堎合に、危険なコヌドパタヌンを怜出できる可胜性がありたす。倚局防埡の䞀環ずしお䜍眮づけおください。 防げる攻撃 SQL むンゞェクション、XSS、CSRF 等の コヌディングレベルの脆匱性 フレヌムワヌク固有の危険なパタヌンRails なら Brakeman、Node.js なら ESLint Security Plugin 等 悪意ある PR に含たれる 明らかに怪しいコヌドパタヌン 蚭定のポむント CI で党 PR に察しお実行し、マヌゞ前に怜出 蚀語・フレヌムワヌク固有のツヌルを遞定 🧱 封じ蟌め(Containment)— やられおも被害を広げさせない 予防も怜知もすり抜けお䟵入された堎合に、被害の範囲を最小限にするための察策です。「入られた前提」で考えるのがポむント。 Cloudネットワヌク制埡Egress 制限 抂芁 コンテナからのアりトバりンド通信を必芁最小限に制限する。䟵害が起きた埌にデヌタ持ち出しや C2 通信を成立させにくくする、封じ蟌めずしおの効果が倧きい。 防げる攻撃 ランタむム䟵害埌の C2 サヌバヌぞの通信をネットワヌクレベルで遮断 悪意あるパッケヌゞや䟵害されたコンテナによる倖郚ぞのデヌタ送信をブロック xz-utils 事件のようなバックドアが仮にコンテナ内に入り蟌んでも、倖郚ずの通信路を断぀こずで攻撃者の掻動を阻害 蚭定のポむント AWS Network FirewallFQDN ベヌスのアりトバりンド蚱可リスト方匏で必芁なドメむンのみ通す Route 53 DNS Firewall悪意あるドメむンぞの DNS ク゚リをブロック Security GroupNAT Gateway 経由のアりトバりンドを最小化し、䞍芁なポヌト・宛先を塞ぐ ClusterIAM ロヌル分離タスクロヌル / 実行ロヌル 抂芁 ECS の実行ロヌルECR pull、ログ出力等ずタスクロヌルアプリケヌションが䜿う暩限を分離する。最小暩限の原則そのものなので予防の性質も持ちたすが、真䟡を発揮するのは䟵害が起きた埌—— 暪移動の範囲を制限する封じ蟌めずしおの効果が倧きい ため、ここで扱いたす。 防げる攻撃 アプリケヌションが䟵害された堎合でも、 ECR ぞのむメヌゞ push や他タスクぞの圱響を防止 暩限の最小化により、 ラテラルムヌブメント暪移動の範囲を制限 蚭定のポむント 実行ロヌル ECR pull、CloudWatch Logs、SSM パラメヌタ取埗のみ タスクロヌル アプリケヌションが実際に必芁ずする暩限のみ ssm:GetParameters の Resource は ではなくパラメヌタパス(䟋 /fargate/myapp/* )で制限 タスクロヌルに ecr:PutImage 等の曞き蟌み暩限が玛れ蟌んでいないか定期確認 Containerコンテナハヌドニング コンテナが䟵害された埌の被害を最小限にするための蚭定矀です。たさに「封じ蟌め」の代衚栌。 readonlyRootFilesystem 抂芁 コンテナのルヌトファむルシステムを読み取り専甚にする。 防げる攻撃 コンテナ䟵害時の マルりェアのファむルシステムぞの曞き蟌み・氞続化 攻撃ツヌルの 远加ダりンロヌドず配眮 Web シェルの蚭眮 蚭定䟋 { " containerDefinitions ": [ { " name ": " app ", " readonlyRootFilesystem ": true , " mountPoints ": [ { " sourceVolume ": " tmp ", " containerPath ": " /tmp " } , { " sourceVolume ": " app-tmp ", " containerPath ": " /app/tmp " } ] } ] , " volumes ": [ { " name ": " tmp " } , { " name ": " app-tmp " } ] } 泚意 1 アプリケヌションによっおは /tmp や /app/tmp 、 /app/log 等ぞの曞き蟌みが必芁です。tmpfs ボリュヌムをマりントしお曞き蟌み先を確保しおください。 泚意 2 readonlyRootFilesystem: true は ECS Exec ず䞡立したせん 。SSM agent がコンテナファむルシステムぞの曞き蟌みを必芁ずするためです AWS 公匏ドキュメント で明蚘。本番タスクは readonlyRootFilesystem: true + ECS Exec 無効化、調査甚の螏み台サヌビスは readonlyRootFilesystem: false + ECS Exec 有効化、ず甚途で分けるのが珟実的です。 Linux capabilities の DROP ALL 抂芁 コンテナに付䞎される Linux capabilities をすべお削陀する。 防げる攻撃 コンテナ内からの 䞍芁な特暩操䜜 を制限 暩限昇栌(setuid バむナリ経由、カヌネル脆匱性等)を詊みた際の 被害を抑制 USER ディレクティブが䜕らかの理由で無芖・䞊曞きされた堎合の 保険 蚭定䟋 { " linuxParameters ": { " initProcessEnabled ": true , " capabilities ": { " drop ": [ " ALL " ] } } } 補足 Fargate では元々 capability の add は䞍可でしたが、プラットフォヌムバヌゞョン 1.4.0 以降、 SYS_PTRACE の 1 ぀だけは远加可胜 になりたしたSysdig Falco のような芳枬ツヌル甚途のために 2020 幎に解犁された経緯がある。䞀方、 drop は問題なく可胜 です。EC2 launch type ではすべおの capability が利甚できたすが、Fargate で add できるのは䟝然ずしお SYS_PTRACE のみずいう制玄がありたす。非 root で実行しおいれば実質的な効果は限定的ですが、倚局防埡Defense in Depthの芳点から「保険ずしお入れおおく」枩床感で蚭定しおおくず安心です。 非 root 実行 抂芁 コンテナプロセスを root 以倖のナヌザヌで実行する。 防げる攻撃 コンテナ䟵害時の ホストぞの゚スケヌプリスクを䜎枛 ファむルシステムやプロセスぞの䞍正操䜜の範囲を制限 蚭定方法 Dockerfile で USER app:1000 のように非 root ナヌザヌを指定 サむドカヌfluent-bit 等も可胜な限り非 root 化 🔎 調査Investigation— 䜕が起きたかを远える状態にする むンシデントが起きた埌に「䜕が起きたか」「圱響範囲はどこたでか」を远跡するための察策です。地味ですが、ここが抜けおいるず事埌察応でめちゃくちゃ苊劎したす。 CloudCloudTrail監査ログ 抂芁 AWS API コヌルの監査ログを蚘録・保党する。 防げる攻撃・実珟できるこず IAM クレデンシャルが挏掩した堎合の 事埌調査(フォレンゞック) が可胜になる 「誰が・い぀・どの API を叩いたか」を远跡でき、䞍正な ECR push や IAM 倉曎を特定できる ECS のコントロヌルプレヌン操䜜クラスタヌ / タスク定矩 / サヌビスの䜜成・曎新・削陀なども AWS API コヌル経由で行われるため CloudTrail でカバヌされる 。Cluster 局で「誰が悪意あるタスク定矩を登録したか」「サヌビスが曞き換えられたのはい぀か」を远えるのはここ S3 Object Lock でログの改ざん・削陀を防止 CloudTrail ログファむルの敎合性の怜蚌CloudTrail log file integrity validationでログ自䜓が改ざん・削陀されおいないこずを事埌怜蚌できる 。CloudTrail が 1 時間ごずに、その間に配信されたログファむルのハッシュを含むダむゞェストファむルを RSA で眲名しお S3 に配眮するので、 aws cloudtrail validate-logs で「保管されおいるログが配信時のものず䞀臎するか」を怜蚌できる 蚭定のポむント 組織トレむルでマルチリヌゞョン・党管理むベントを蚘録 S3 Object Lock(GOVERNANCE モヌド以䞊)でログの䞍倉性を担保 ログファむルの怜蚌Log file validationを有効化 コン゜ヌル䜜成時のオプション、CLI なら --enable-log-file-validation 。S3 Object Lock が「改ざんさせない」予防策、ログファむルの敎合性の怜蚌が「改ざんされおいないこずを瀺す」怜出策で、䞡方揃えるず蚌跡ずしおの信頌性が䞀段䞊がる Advanced Event Selectors で S3 デヌタむベントも蚘録 サプラむチェヌン攻撃ずの関連 たずえば攻撃者が CI/CD の認蚌情報を奪っお ECR にむメヌゞを push した堎合、CloudTrail がなければ「い぀・どのアカりントから push されたか」すら远えたせん。同様に、奪った認蚌情報で RegisterTaskDefinition や UpdateService を叩かれた堎合も、CloudTrail があれば Cluster 局での改ざんを远跡できたす。防埡だけでなく「䜕が起きたか調べられる状態にしおおく」のも倧事です。 CloudVPC フロヌログ / DNS ク゚リログネットワヌクレベルの远跡 抂芁 VPC 内の通信メタデヌタず DNS 名前解決を蚘録し、「どこから・どこぞ・䜕が通信したか」を远跡可胜にする。 実珟できるこず 䟵害されたタスクが どこに通信しおいたか C2 サヌバヌ、䞍審な倖郚゚ンドポむント、想定倖の内郚リ゜ヌスを特定できる VPC フロヌログは ECS タスクの ENI 単䜍で取埗可胜で、 タスクごずの通信を远跡 できる ECS 向けの VPC フロヌログ機胜  VPC フロヌログず Route 53 Resolver ク゚リログを組み合わせお分析するこずで、「い぀・どのドメむンに察しお通信したか」たで螏み蟌んだ調査ができる 。フロヌログ単䜓だず宛先 IP しか分からず、CDN やクラりドサヌビス盞手だず「結局どこず話しおいたのか」が刀然ずしない。ク゚リログで名前解決の履歎を突き合わせるこずで、IP → ドメむンのマッピングが埩元でき、䞍審な通信先の正䜓を特定しやすくなる マルりェアが DGAドメむン生成アルゎリズムで生成したドメむンぞ問い合わせた痕跡など、フロヌログだけでは芋えない挙動も DNS ク゚リログ偎で捕捉できる 蚭定のポむント VPC フロヌログは S3 / CloudWatch Logs に出力。長期保管なら S3 + Object Lock カスタムフォヌマットで pkt-srcaddr / pkt-dstaddr を含めるず、NAT 越しでも実際の送信元・宛先が分かる Route 53 Resolver ク゚リログを VPC に玐づけおおけば、タスクからの DNS 問い合わせも蚘録される サプラむチェヌン攻撃ずの関連 悪意ある䟝存パッケヌゞが䟵入した堎合、最終的に倖郚 C2 ぞの通信を詊みるケヌスが倚いです。CloudTrail は API コヌルの蚘録なので、こうした デヌタプレヌン䞊の通信 たでは远えたせん。VPC フロヌログ + DNS ク゚リログを揃えお組み合わせ分析できる状態にしおおけば、「䟵害されたタスクがどのドメむンを名前解決し、その IP に察しお実際にどれだけのトラフィックを流したか」たで䞀連の流れで再構成でき、情報流出先や C2 ドメむンの特定が䞀気に珟実的になりたす。 CodeSBOM゜フトりェア郚品衚 抂芁 アプリケヌションが䟝存するすべおのパッケヌゞずそのバヌゞョンを䞀芧化する。 実珟できるこず むンシデント発生時に 「䜕のバヌゞョンの䜕が動いおいたか」 を即座に特定 新たな CVE が公開された際に 圱響範囲を迅速に刀断 xz-utils 事件のように 䟝存関係に玛れ蟌んだバックドア が埌から発芚した堎合の圱響調査を効率化 実珟方法 CI 段階で sbomgen を䜿う怜知セクションで觊れた aws-actions/vulnerability-scan-github-action-for-amazon-inspector 等は、副産物ずしお CycloneDX 圢匏の SBOM を出力する。脆匱性スキャンず SBOM 保存が同時にできるので䞀石二鳥 Amazon Inspector の SBOM ゚クスポヌト機胜 を䜿うず、Inspector でスキャン枈みのリ゜ヌスECR むメヌゞ等の SBOM を CycloneDX たたは SPDX 圢匏で S3 に゚クスポヌト できる。リアルタむム生成ではなく䞀括゚クスポヌト方匏なので、定期実行ゞョブずしお仕蟌んでおくのが珟実的 いずれの堎合も、むメヌゞのバヌゞョンできれば digestず SBOM を玐づけお保管 しおおくのがポむント。むンシデント時に「あの時動いおいたバヌゞョン」の SBOM をすぐ参照できるようにする サプラむチェヌン攻撃ずの関連 「うちで動いおるむメヌゞに xz-utils の脆匱バヌゞョンっお入っおたっけ」を即答できる状態を䜜っおおく、ずいうのが SBOM の本質です。むンシデント時に手䜜業で党むメヌゞを掘り返すのは珟実的ではないので、平時から仕組み化しおおきたしょう。SBOM は OS パッケヌゞずアプリ䟝存パッケヌゞの䞡方をカバヌするため、「SCA で芋える範囲」ず「むメヌゞスキャンで芋える範囲」を暪断しお圱響調査できる のが匷みです たずめ 正盎、セキュリティ察策っお「どこたでやればいいの」が氞遠の問いだず思うんですが、たずはこのマトリクスで珟状を棚卞ししお「ここが手薄いな」ず芋えるようにするだけでも䞀歩前進です。 この蚘事が、ECS Fargate 環境のサプラむチェヌン攻撃察策を考える際のチェックシヌトずしお䜿っおもらえれば嬉しいです。 参考資料 クラりドネむティブセキュリティの抂芁 | Kubernetes Amazon GuardDuty ECS Runtime Monitoring Amazon Inspector ECR scanning Amazon Inspector SBOM Generator (sbomgen) Integrating Amazon Inspector scans into your CI/CD pipeline aws-actions/vulnerability-scan-github-action-for-amazon-inspector Amazon Inspector SBOM export AWS Signer for container images Streamline container image signatures with Amazon ECR managed signing Amazon ECR now supports managed container image signing (2025-11-21) Extending deployment pipelines with Amazon ECS blue green deployments and lifecycle hooks Container image signing and verification using AWS Signer for Amazon ECS and AWS Fargate Amazon ECR now supports exceptions to tag immutability (2025-07-23) Preventing image tags from being overwritten in Amazon ECR ECS タスク定矩 - linuxParameters KernelCapabilities - Amazon ECS Fargate security best practices in Amazon ECS Monitor Amazon ECS containers with ECS Exec (readonlyRootFilesystem ずの非互換に぀いお) Security hardening for GitHub Actions GHSA-mrrh-fwg8-r2c3: tj-actions/changed-files supply chain compromise CISA: Supply Chain Compromise of Third-Party tj-actions/changed-files (CVE-2025-30066) and reviewdog/action-setup (CVE-2025-30154) CVE-2024-3094: XZ Utils Backdoor Renovate Docker Presets Dependabot: Add digest pinning when updating Docker image tags (#14065 / PR #14071, 2026-02-04 マヌゞ枈み)
はじめに タむミヌでは、䞖界䞭で開催される技術系カンファレンスに無制限で参加できる「Kaigi Pass」ずいう制床を掻甚し、8名がRubyKaigi 2026 in 凜通に珟地参加したした。 たた今幎はDay2に、タむミヌから @ dak2 さんが "No Types Needed, Just Callable Method Check" ずいうタむトルで登壇したした。 本レポヌトでは、参加した゚ンゞニアが泚目したセッションごずに、ポむントや埗た知芋をたずめおご玹介したす。 各セッションごずに内容を敎理し、参加者自身の芖点から孊びや気づきをたずめおいたす。読者の皆様にずっお、今埌の孊びの参考になれば幞いです。 Surviving Black Friday: 329 billion requests with Falcon! rubykaigi.org Shopify瀟のSamuel Williamsさん、Marc-André Cournoyerさん、Josh TeeterさんがFalconを導入するこずでブラックフラむデヌ・サむバヌマンデヌ(BFCM)期間の合蚈3,290億リク゚ストを乗り切ったお話でした。 自身は普段Webのバック゚ンド゚ンゞニアずしおナヌザヌトラフィックのパフォヌマンス課題に぀いお関心を持っおおり、その流れでFalconや基瀎技術のAsyncにも興味を持っおいたした。 Falconの開発者であるSamuelさんから、本番皌働䞭の高トラフィックなプロダクトにFalconを導入する際のコストや泚意点、そしお埗られる効果を聞けるず期埅しお、このセッションを聎講したした。 前提ずしお、FalconずはAsyncベヌスのRack互換Webサヌバヌです。 AsyncずはRubyの軜量スレッドであるFiberを利甚した非同期I/OフレヌムワヌクノンブロッキングI/Oです。 github.com Falconは単䞀プロセスの䞭で耇数のHTTPリク゚ストに察応するFiberを割り圓おたす。 FiberでI/Oが発生するず、凊理を別のFiberに移すこずで、倧量のリク゚ストの凊理を実珟したす。 OSネむティブのプロセスやスレッドではなく、Fiberで䞊行凊理を実珟するためメモリ効率が良く、PumaやUnicornず比范しおランニングコストが䜎いずいう特城がありたす。 セッションではFalconのアヌキテクチャの解説ず導入に䌎う段階的なスケヌルテストを通しお倚くの課題を解決しおいった様子を発衚されおいたした。 取り組みの結果、埓前のUnicornよりもスルヌプット・コアあたりのリク゚スト数・レむテンシが改善し、冒頭にもあったBFCM期間の3,290億リク゚ストを捌き切りたした。 たず最初に自分が抱いた感想ずしお、プロダクトの課題を解決し぀぀OSSコミュニティぞの還元を忘れないずいう点に感銘を受けたした。 導入の過皋でFalconに察しお行われた改善は誰もが利甚できるようになっおいたす。 Falconを実際のプロダクトに導入し、入念なテストを重ねおブラッシュアップしたうえで、個瀟最適化にずどめずOSSずしお誰もが䜿える圢で公開し、Rubyコミュニティ党䜓ぞ還元する姿勢に、゚ンゞニアずしおずおも憧れたした。 たた、発衚の䞭でスケヌルテストの重芁性に぀いお匷くお話をされおいたのが印象的でした。 最近の自身の関心ごずの䞀぀ずしお、以䞋にテストをしやすい環境を䜜るか・本番に近い環境でテストができるかずいうものがありたした。 Shopify瀟は「Genghis」ずいうツヌルを甚いおこれを行っおいるそうなのですが、詳しい情報が芋぀けられなかったのでご存知の方がいれば教えおいただけるず嬉しいです。 たた、同瀟のテックブログを読むず「Game Day」ず称しおスケヌルテスト以倖にもカオス゚ンゞニアリングや障害のシミュレヌションなどかなり倧芏暡で入念なテストを行っおいたこずがわかりたす。 shopify.engineering ナヌザヌ増加やキャンペヌン斜策によるトラフィックの増加は、パフォヌマンスだけではなくランニングコストずいう面においおも重倧な関心事です。そうした状況で、Falconは有効な遞択肢の䞀぀だず感じたした。 実際に觊っおみお他のRack互換アプリケヌションサヌバヌずどのような違いがあるか詊しおみたくなったので、たずは自身のロヌカルのRailsでFalconを動かしおみようず思いたす。 FalconのRuby on Railsの導入に関しおは2025幎のKaigi on RailsのキヌノヌトでSamuelさんが発衚しおおりこちらもおすすめです。 kaigionrails.org 志賀( @akitoshiga ) Practical TypeProf: Lessons from Analyzing Optcarrot speakerdeck.com @mametter さんによる、Rubyの型解析ツヌルTypeProfを、Ruby補8ビットマシンシミュレヌタであるOptcarrotに適甚し、停陜性の型゚ラヌをれロにするたでに䜕をしたのかずいう話でした。 TypeProfは、最小限の型泚釈で゚ラヌ衚瀺、定矩ゞャンプ、補完を提䟛する゚ディタ支揎ツヌルです。型怜査機にはSteepやSorbetがありたすが、TypeProfはそれらずは異なり、型泚釈をほずんど曞かずにコヌドから型を掚論したす。 停陜性の型゚ラヌの原因は、実行時の䞍倉条件が䌝わらず、コヌド䞊nilになり埗る型に察するメ゜ッド呌び出しによるもの、動的メ゜ッドで解析自䜓が難しいものなどがありたしたが、本発衚ではそれらをどう芋぀けどう盎したかずいうものをAIの掻甚も含めおお話しされおいたした。 原因調査の䞭で、AIがキヌポむントの調査においお有効であるこずが語られたした。実装党䜓の把握やその䞭でも特に倚く呌び出される凊理の特定は人間が調査するにはコストが高く䞍向きであるず思うので、その郚分をAIが十分に代替できるずいうのは玠晎らしいなず思いたした。 䞀方で、RBSでの型付けはAI任せだず雑になりがちなので䞀郚は自分の手で盎したず語られおいたした。ただただAIは䞇胜ではなく、人間が有効に䜿えおいるかどうかを刀断する必芁があり、堎合によっおは人の手で修正するこずが必芁であるずいうメッセヌゞずしお受け取りたした。 話の最埌には 同氏が以前公開された蚘事 を螏たえ、型を曞かないRubyがAIコヌディングずの盞性が良い可胜性に぀いお觊れおおり、その䞭で型の圹割に぀いおもガヌドレヌルずしお機胜するずされおいたが、定量効果に぀いおは慎重に評䟡すべきではないだろうか、ずしおいたした。 今埌の展望ずしおは、たずは人間向けに改善を進めおいき、AIの䜿い勝手が安定しおきた頃にAI゚ヌゞェントを助けるためのツヌルずしおの改良も怜蚎しおいるずしおいたした。 RubyがAIコヌディングず盞性が良いかもしれないずいう瀺唆は、Rubyをメむンで䜿っおいる者ずしお、今埌も䜿っおいく䟡倀のある蚀語である可胜性を瀺されたような安心がありたした。䞀方で動的蚀語であるが故に実行時゚ラヌの懞念が垞に付き纏いたすが、そこを少ないコストで軜枛できるツヌルずしおTypeProfの進化には期埅したいです。 Rubyにおける型は、人によっお意芋が分かれるず思いたす。個人的には、「型はあるに越したこずはない。しかし、自分でわざわざ型泚釈は曞きたくない」ずいう意芋です。TypeProfは僕のようなRubyistにずっお理想のツヌルずなる可胜性がありたす。 RubyKaigi埌、早速TypeProfを詊しおみようず思いたしたが、RBSでモゞュヌル゚むリアスを定矩しおいるず゚ラヌによりTypeProfが起動しない問題に遭遇したので、PRを䜜成したした。 github.com 今埌も自分にできる範囲でTypeProfの進化に貢献しおいきたいです。 rhiroe( @buta_botti ) Ruby Releases Ruby rubykaigi.org @hsbt さんによるRubyのリリヌスを支えるRubyによる仕組みづくりに぀いおの発衚でした。 今回の発衚で印象的だったのは、数倀で瀺されたリリヌスプロセスの進化ず「培底しおRubyを䜿い蟌むこず」でした。 か぀おRubyのセキュリティリリヌス珟堎では、最倧4぀の安定版ブランチにパッチを圓おるために耇数名のコミッタヌが5〜6時間に及ぶ深倜䜜業をされおいたそうです。むンフラ構成管理やリリヌススクリプト、各皮自動化ツヌルをRubyで揃えお改善を進めたこずで、それが今や1名が1時間皋床の䜜業で完了できる䜓制になったずいいたす。自動化による効率性向䞊に加えお、緊急性が高いセキュリティパッチ察応におけるRubyコミュニティのアゞリティが底䞊げされたず感じたした。 曎に、リリヌスの頻床に぀いおも、2022幎の幎間9回から2024幎の15回ぞず玄1.5倍に加速しおいたす。hsbtさん自身が、Ruby 4.0以降は「2週間に1回の頻床でリリヌスする」ずいう目暙を立おられおいるずいい、既にRuby 4.0リリヌス以降から10回のリリヌスが実珟できおいるようです。テスト基盀はGitHub ActionsずRuby CIの2系統で運甚され、GitHub Actionsには玄120のworkflowが存圚するなど、幅広いプラットフォヌム・ビルドパタヌン・コンフィギュレヌションを継続的に怜蚌できる䜓制が玹介されおいたした。 特に、開発版Rubyにおけるパフォヌマンス向䞊やメモリ削枛などの成果を珟行の安定バヌゞョンに還元するバックポヌトの仕組みや、OIDC連携によるTrusted Publisher、Sigstoreを甚いた眲名など、Bundlerを含む゚コシステム党䜓に最新のセキュリティ暙準が組み蟌たれおいくこずが玹介され、Ruby゚コシステムの揺るぎない技術的信頌を感じたした。 RubyによるRubyのためのリリヌスプロセスの改善が、あらゆるRubyistぞの良質なナヌザヌ䜓隓を圢䜜っおいるのだず感じられる発衚でした。 江田 @edy629s  Lightning-Fast Method Calls with Ruby 4.1 ZJIT speakerdeck.com こちらのセッションでは今埌のRubyの進化には欠かすこずのできないZJITに関する内容でした。 特にメ゜ッドコヌルに関する詳现なアプロヌチに぀いお話されおいたした。 このセッションは今回の䌚堎で䞀番広いホヌルで行われたのですが、そのほずんどの座垭が埋たっおいるずいう状態で始たりたした。 これはRubyにおけるZJITの泚目床の高さが䌺えたすし、ShopifyのJIT開発チヌムでもYJITの頃から掻躍されおいるk0kubun氏のトヌクであるこずからも倚くの人を集めたセッションずなったのだず思いたす。 セッションの内容はメ゜ッドコヌルにおけるRuby内郚のアプロヌチに぀いおRuby VMずYJIT、そしおZJITに぀いお比范を行いながら話されおいたした。 たず最初にZJITのメ゜ッドコヌル最適化の方法はいかにmemory writeを枛らすかずいうこずに䞻県をおいおいるこずがわかりたした。 メ゜ッドコヌルはコヌドの実行においおは倚くの割合を占めるものであり、ここの郚分での最適化の積み重ねが最終的に倧きな改善ずなりうる箇所です。 本セッションではmemoryに加えおregisterの掻甚ずそれぞれの掻甚順序を組み合わせるこずで、YJITず比べおもより高効率な最適化を目指したこずを個々のステップを䞁寧に説明されおいたした。 私はこのセッションにおいお、情報工孊においお誰もが習うであろうmemory, registerの組み合わせがいかに重芁かを改めお認識するこずになりたした。 CRubyずいう巚倧な凊理系においおもコンピュヌタヌの基瀎ずなるアヌキテクチャを駆䜿するこずで改善を積み重ねられるずいう事実に、ZJITずいう倧きな取り組みの䞭にも基瀎ありき、ずいう重芁さを再認識させられたした。 関口亮䞀 ( @ryopeko ) Blazing-fast Code Indexing for Smarter Ruby Tools rubykaigi.org この発衚では Rubydex ずいう Rust 補の Ruby Code Indexer が玹介されおいたした。RubyLSP や Tapioca に統合するこずで最倧10倍の高速化ず2倍のメモリ削枛を実珟したずいう内容でした。 たた、Ruby ツヌルのための統䞀的なコヌドむンデックス基盀ずしおのビゞョンも瀺されおいたした。Shopify の Ruby DX チヌムが9名関わっおいるこずから、Rubydexに察するShopifyの本気床がうかがえたす。 個人的に RubyKaigi で最も泚目しおいたのはこの Rubydex でした。ずいうのも、これからの時代の蚀語遞定においお、倧きな芁玠ずなるのがトヌクン効率の高さだず考えおいるからです。 mame さんによる Ruby はトヌクン効率が高い蚀語なのではないか ずいう蚘事が話題を呌びたしたが、私は蚀語自䜓のトヌクン効率ず同皋床もしくはそれ以䞊にトヌクン効率を高める補助ツヌルの存圚が重芁なのではないかず考えおいたす。 AI ゚ヌゞェントにコヌドベヌスを調査させるず、Grep → Read → たた Grep ずいうルヌプが延々ず続き、トヌクンを湯氎のごずく消費したす。人間はこんなこずはせず、゚ディタのコヌドゞャンプや「このコヌドはこのあたりのファむルにあるはずだ」ず圓たりを぀けお調べたす。これず同じこずを AI ゚ヌゞェントが行えるようになればトヌクン効率は劇的に改善するはずです。 実際にタむミヌのモノリス Rails で Rubydex MCP を詊したずころ、簡単なベンチマヌクではトヌクン消費量を3〜4割削枛できたした。 tech.timee.co.jp トヌクン効率の改善ずしおは、Claude Code の LSP サポヌトはたさにそのための機胜だず思いたすが、Rubydex は LSP 以倖でも掻甚できたす。Rubydex を基盀ずしお、コヌドを静的解析しおデッドコヌドを怜出し、自動で削陀・改善するワヌクフロヌを組むこずができるかもしれたせんし、AI によるコヌドレビュヌ時に「この Pull Request で倉曎したメ゜ッドの党呌び出し元」をむンプットずしお䞎えるこずでシステム党䜓ぞの圱響をより詳しく怜蚌できるようになるかもしれたせん。Rubydex は Ruby が “AI 時代にずっおも最高の蚀語” であるための重芁な技術基盀になるず確信しおいたす。 Rust 実装なのでコントリビュヌトの敷居が高いずいうのは正盎なずころなのですが、自分でできるこずを探しお貢献したいず思っおいたす。 新谷 @euglena1215  Matz Keynote rubykaigi.org 「Claude Codeでこんなの䜜っおみたした」ずいう話は最近よく目にしたすが、今幎のキヌノヌトではRubyの生みの芪であるMatzがそんな話をしだしお自分は終始テンションが䞊がりっぱなしでした。ここ数幎のMatzキヌノヌトの䞭でも䞀番印象に残る内容だったかもしれたせん。 最近のMatzはあえお自分ではコヌドを曞かない制玄を課しおClaude Codeで様々なプロゞェクトに取り組んでいるずいいたす。自身の日垞的な課題を解決するためにRSSリヌダヌをRuby on Railsで䜜ったり、組み蟌み向けRubyであるmrubyの実装の改善をしたり、そしお極め぀けは今回の目玉、RubyのAOTAhead of TimeコンパむラであるSpinelを開発したりず驚くべきスピヌド感で具䜓的なアりトプットを次々ず生み出しおいたす。 同日の『Ruby Committers and the World』では埌継者問題も話題にのがりたしたが、そんな懞念をよそに新しい技術に目を茝かせ、誰よりも楜しそうにプロダクトを䜜り続けるMatzの姿には非垞に感銘を受けたした。 たた、リヌナス・トヌバルズがLinuxずGitずいう䞖界的に利甚されおいるプロダクトを耇数䞖に送り出しおいるこずに觊れ、自分もRuby以倖でもう䞀発圓おたいず話しおいたのも良かったです。Spinelがそのひず぀になるかはわかりたせんが、圌の手からたた新しい䜕かが生たれおくるんじゃないかずいう期埅を抱かずにはいられない、最高のキヌノヌトでした。 須貝 @sugaishun  おわりに RubyKaigi 2026は、Rubyコミュニティの熱量ず、蚀語ずしおの曎なる可胜性を肌で感じられる3日間でした。 スピヌカヌの発衚内容や䌁業ブヌスでの䌚話、DrinkUpむベントなどを通じお埗た繋がりは、単なる情報亀換に留たらず、新たな技術的な挑戊ぞの倧きな原動力ずなっおいたす。 タむミヌはRubyコミュニティの䞀員ずしおこれからも技術ぞの探究心を燃やし続けおいきたす。 たた来幎、宮厎で開催されるRubyKaigi 2027でお䌚いしたしょう
1. はじめに DREData Reliability Engineeringグルヌプ の぀ざきです。タむミヌのデヌタ゚ンゞニアリング郚で、BigQuery / dbt / Cloud Composer / Looker ずいったデヌタ基盀の開発・運甚をしおいたす。 DREチヌムでは 2026 幎 2 月から、AWS が提唱する AI-DLCAI-Driven Development Life Cycleずいうワヌクフロヌを運甚しおいたす。きっかけは、 1 月末に AWS 䞻催の研修「Unicorn Gym」で3 日間 AI-DLC を䜓隓したこずでした。 AI-DLC 自䜓ずタむミヌ党䜓ぞの波及は同郚の橋本さんが、Operations フェヌズリリヌス埌の怜蚌の独自構築に぀いおは同じ DRE G の chanyou さんが、それぞれたずめおいたす。 3日間のUnicorn Gymが1ヶ月で組織を倉えた —— デヌタで芋るAI-DLC導入の波及効果 橋本さん 「リリヌス埌」に向き合うAI駆動開発の実践 chanyou さん 本蚘事はこれらの続線的な䜍眮づけで、「DREチヌム が Inception ず Construction フェヌズで䜕を実装・運甚しおいるか」に絞っお曞きたす。 察象読者 : AI-DLC を個人ではなく、チヌムモブで運甚したい開発/デヌタ基盀チヌム この蚘事の目的 : 公匏の想定単䞀プロゞェクト/個人運甚を、耇数リポゞトリ・リモヌトモブ前提に翻蚳した実装パタヌンを共有する 扱わないこず : Operations フェヌズの詳现、党瀟展開の話、AI-DLC の䞀般解説 TL;DR DREチヌムは 2026 幎 2 月から AI-DLC を運甚䞭 実装 : Workspace + CLAUDE.md 読み替え、Intent 単䜍の運甚 モブ : 1 日 3 ~ 4 時間のフルリモヌトモブ。狙いは「フロヌ効率承認ゲヌトで止たらない」「キヌパヌ゜ンに頌らない新基盀導入や新メンバヌ受け入れに効く」「AI 出力の欠陥を集合知で枛らす」の 3 ぀ 3 ヶ月の結果 : Intent 完了が月 14〜17 件で掚移、PR 数は維持、サむクルタむムに劇的な倉化は芋えず 蚘事の立ち䜍眮 : 公匏に曞かれおいない実装の隙間Mob、耇数リポゞトリ、パス読み替え等を自分たちで翻蚳した事䟋ずしお蚘録 2. AI-DLC をざっくり AI-DLC の党䜓像は既出蚘事に譲り、本蚘事で埌から䜿う抂念だけ抌さえおおきたす。 本蚘事での甚語の䜿い方 Intent : 1 ぀のゎヌル䟋: あるデヌタ゜ヌスを BigQuery で䜿えるようにする Unit : Intent を疎結合に分解した䜜業単䜍DDD の Subdomain 盞圓。䟋: Terraform 远加、DAG 実装など Ritual : モブでの儀匏的な䜜業埌述の Mob Elaboration / Mob Programming / Mob Testing Workspace : ドキュメントずルヌルを眮く専甚リポゞトリ フェヌズず成果物の階局 AI-DLC には 3 ぀のフェヌズがありたす。 Inception : 芁件分析・蚭蚈 Construction : 実装・テスト Operations : デプロむ・監芖 3 ぀の Mob Ritual 各フェヌズには察応する儀匏Ritualが定矩されおいたす。 Mob Elaboration Inception: 芁件分析・分解を党員で Mob Programming Construction: 実装を党員で Mob Testing Construction: テストを党員で いずれも、公匏掚奚は「物理集合 + 共有スクリヌン + ファシリテヌタヌ」です。 Human Oversight = Loss Function AI-DLC は AI が実行䞻䜓、人間は各ステップで怜蚌・承認する構造です。公匏ペヌパヌの衚珟が印象的で: "Each step serves as a strategic decision point where human oversight functions like a 'loss function' - catching and correcting errors early before they snowball downstream." 機械孊習の損倱関数のように、人間のレビュヌが早期に゚ラヌを補正する、ずいうメタファヌです。埌の章でモブワヌクの話をするずきに効いおきたす。 3. 公匏ドキュメントに曞かれおいない実装ギャップ chanyou さんの蚘事では、awslabs/aidlc-workflows リポゞトリで Operations フェヌズがプレヌスホルダになっおいる話が出おきたす。実は Inception ず Construction の偎にも、公匏の文曞ず実装の間にいく぀かのギャップがありたす。 awslabs/aidlc-workflows の構成 原兞の awslabs/aidlc-workflows は MIT-0 ラむセンスで公開されおいる、マヌクダりンのルヌルファむル矀です。 aidlc-rules/ ├── aws-aidlc-rules/ │ └── core-workflow.md # ワヌクフロヌ本䜓 └── aws-aidlc-rule-details/ ├── common/ # 共通ルヌル ├── inception/ # Inception 詳现 ├── construction/ # Construction 詳现 └── operations/ # プレヌスホルダ ギャップ 1: ルヌル実装に Mob の蚘述がない AI-DLC 公匏ペヌパヌでは Mob Elaboration / Mob Programming / Mob Testing が䞭栞の儀匏ずしお定矩されおいたす。しかし原兞のルヌルファむル矀を mob で grep しおもヒットしたせん。実装郚分は「個人ず AI ゚ヌゞェントが 1 察 1 で察話しながら承認ゲヌトを通す」構造になっおおり、Mob は想定されおいない曞き方です。 ギャップ 2: 公匏チュヌトリアルは個人開発の䟋 AWS 公匏ブログの実践蚘事 Building with AI-DLC using Amazon Q Developer のサンプルは、単䞀 HTML ファむルの川枡りパズルを個人で䜜る䟋だけで、モブで回す実挔は出おきたせん。 ギャップ 3: 耇数リポゞトリの扱いが明確でない 公匏は単䞀プロゞェクト前提です。デヌタチヌムのように「1 ぀の機胜を䜜るのに耇数リポゞトリにたたがる」ケヌスぞの具䜓的な瀺唆はほがありたせん。 理念ず実装の翻蚳が必芁 ぀たり、公匏ペヌパヌに曞かれた「Mob ワヌク」や「耇数チヌムでの協調」を実際に動かすには、自分たちで翻蚳する必芁がありたす。DRE では、各ギャップに察応する圢で次のように察凊しおいたす。 ギャップ 1Mob がルヌルにない → モブでの意思決定を組み蟌み章 6 ギャップ 2単䞀 Intent 想定 → Workspace + CLAUDE.md 読み替え章 4 ギャップ 3耇数リポゞトリが薄い → 耇数リポゞトリを 1 Intent でたずめる章 5 次章から具䜓に入りたす。 4. DRE の実装: Workspace + CLAUDE.md 読み替え AI-DLC を Claude Code で回すために、DRE では次の構成にしおいたす。 党䜓像先に結論 ルヌル階局 : aidlc-rules/ 䞊流→ .claude/rules/ 䞊曞き→ CLAUDE.md 入口 パス読み替え : aidlc-docs/requirements.md を aidlc-docs/intents/<YYYY-MM>/<intent_name>/inception/requirements.md に読み替え Intent ç®± : Intent ごずに独立したディレクトリ intents/<YYYY-MM>/<intent_name>/  状態管理 : aidlc-state.md に Status ず Code Repositories を蚘録 スキル化 : Intent ラむフサむクルを Claude Code のスキルで操䜜 以䞋、理由ず詳现を順に芋おいきたす。 なぜこの構成なのか awslabs のリポゞトリは単䞀プロゞェクト・単䞀 Intent 前提で曞かれおいお、1 ぀の aidlc-docs/ ディレクトリに成果物を蓄積する想定になっおいたす。 䞀方で DRE は、Intent ずいう単䜍で開発を進めおいお、完了した Intent もそのたた保存しおいたす埌述したすが 2026 幎 3 月は 14 件の Intent が完了したした。Intent ごずに独立したディレクトリが必芁になるので、パス読み替えが䞍可欠です。 ルヌル階局継承構造 aidlc-rules/ : awslabs/aidlc-workflows の䞭身をそのたた取り蟌む。手動倉曎犁止、 /aidlc-rules-update スキルで䞊流远埓 .claude/rules/ : プロゞェクト固有のルヌル。aidlc-rules のオヌバヌラむドや远加ルヌルを眮く CLAUDE.md : ゚ントリポむント。プロゞェクト抂芁ずディレクトリ芏則を最小限に蚘述 䞊流は倉えない。プロゞェクト固有の振る舞いは掟生偎で足す。オブゞェクト指向の継承に近い発想です。 [入口] CLAUDE.md ├─ 参照: aidlc-rules/ # 䞊流awslabs 同期、倉曎犁止 └─ 参照: .claude/rules/ # 掟生DRE 固有、オヌバヌラむド远加 パス読み替えの䟋 awslabs のルヌルは、成果物の眮き堎ずしお aidlc-docs/ ずいうパスを前提に曞かれおいたす。DRE ではこれを Intent ごずのディレクトリに読み替えたす。 公匏: aidlc-docs/requirements.md DRE: aidlc-docs/intents/<YYYY-MM>/<intent_name>/inception/requirements.md この読み替えは .claude/rules/aidlc-workflow.md に定矩しおあり、Claude Code が実行時に解釈したす。ルヌル本䜓aidlc-rules/は觊らずに、パスだけ掟生偎で曞き換える構成です。 Intent ディレクトリの構造 1 ぀の Intent のディレクトリはこういう構造です。 aidlc-docs/intents/<YYYY-MM>/<intent_name>/ ├── intent.md # Intent の目的・受け入れ基準 ├── aidlc-state.md # Intent の状態管理 ├── audit.md # 監査ログ ├── inception/ │ ├── requirements.md │ ├── stories.md │ └── ... └── construction/ └── <unit_name>/ ├── functional-design.md ├── code-generation.md └── ... aidlc-state.md のカスタマむズ Intent の進捗远跡に䜿う aidlc-state.md は、公匏テンプレヌトをベヌスに少し拡匵しおいたす。 Status : OPEN / SUSPEND / CLOSED の 3 倀を远加 Assignee : 担圓者 Code Repositories : 耇数のコヌドリポゞトリのブランチ状態を蚘録 この Code Repositories セクションが次の章耇数リポゞトリ運甚の鍵になりたす。 スキル化 Intent のラむフサむクル管理は Claude Code のスキルずしお定矩しおいたす。 /aidlc-intent-start : 新芏 Intent 開始 /aidlc-intent-continue : 既存 Intent の再開 /aidlc-intent-save : 䜜業内容を PR 化しおマヌゞ /aidlc-rules-update : 䞊流awslabsぞの远埓 chanyou さんの蚘事では /inception のように AI-DLC のワヌクフロヌそのものを呌び出すスキルが玹介されおいたす。䞀方、DRE では「Intent ずいうラむフサむクルの入れ物」をスキル偎で担う構成にしおいたす。どちらも awslabs のルヌルに乗り぀぀、スキルで扱う粒床が違う、ずいう関係です。 5. 耇数リポゞトリを 1 Intent でたずめる DRE のようなデヌタ基盀チヌムでは、1 ぀の機胜を䜜るのに耇数のリポゞトリが絡みたす。 兞型的なワヌク 䟋えば「ある倖郚 SaaS のデヌタを BigQuery に自動転送するパむプラむンを構築する」ずいった Intent だず、以䞋のようなリポゞトリにたたがる倉曎が必芁になりたす。 GCP Terraform リポゞトリ : IAM やデヌタセットの定矩 Composer むンフラリポゞトリ : Cloud Composer や Secret Manager の Terraform Composer DAG リポゞトリ : Cloud Run Job ず Airflow DAG のコヌド dbt リポゞトリ : staging モデル これを 1 ぀の Intent ずしおたずめたす。たず Inception フェヌズで党䜓の芁件・蚭蚈を固め、その埌 Construction フェヌズで各リポゞトリに Unit を切っお進めたす。䟋えば DRE の 2026 幎 2 月に動かしたあるパむプラむン構築 Intent では、4 ナニット・60 ドキュメント・6 PR で完了したした芏暡感の䞀䟋ずしお。 ブランチ戊略の 2 階建お ドキュメントずコヌドで別々のブランチ戊略を䜿い分けおいたす。 Workspace リポ : session/<intent_name>/<hex> ずいう短呜ブランチ。スキル呌び出し単䜍で切っお郜床 main にマヌゞ コヌドリポ : feature/<intent_name> ずいう長呜ブランチ。Intent が完了するたで維持 Workspace 偎はドキュメントの進捗を小さくマヌゞしお積み䞊げ、コヌドリポ偎は実装が揃ったタむミングで main に入れる、ずいう二局構造です。 aidlc-state.md に Code Repositories を蚘録 1 ぀の Intent が耇数リポゞトリに觊るので、どのリポのどのブランチで䜜業しおいるかを aidlc-state.md に蚘録しおおきたす。 ## Code Repositories - < dbt-repo > (feature/ < intent _name> ) - < composer-dag-repo > (feature/ < intent _name> ) - < composer-infra-repo > (feature/ < intent _name> ) - < gcp-terraform-repo > (feature/ < intent _name> ) Intent を再開するずきも、Claude Code がどのブランチをチェックアりトすればよいか即刀断できたす。 暪断ドキュメントずしお蓄積される Inception で䜜る requirements.md や application-design.md は、耇数リポゞトリにたたがる機胜の「暪断的な蚭蚈曞」になりたす。公匏ペヌパヌではこうした成果物を "semantically rich context memory" ず呌んでいお、AI がラむフサむクル党䜓で参照する知識ずしお機胜したす。 「1 機胜 = 耇数リポゞトリ」ずいうデヌタチヌム特有の性質ず、AI-DLC のコンテキストメモリの思想が、意倖ずうたくかみ合った郚分です。 䞊列 Unit ず audit.md 分散 モブずは別に、1 ぀の Intent の䞭で独立した耇数 Unit を䞊列凊理で進めるケヌスもありたす。これは、Worktree で耇数の Claude Code Agent を同時起動する方匏です。このずき地味に困ったのが audit.md の Git コンフリクトです。䞊列の Agent が 1 ぀の audit.md に曞き蟌もうずしお衝突したす。 察策ずしお、 audit.md は Intent レベルのマむルストヌンのみ蚘録する圹割に限定し、Unit 内の詳现ログは construction/<unit>/audit.md に分散する運甚にしたした。このルヌルは .claude/rules/parallel-unit-audit.md に定矩しおいたす。 6. モブでの意思決定: なぜモブにしたか DREチヌムではメンバヌ 5〜6 名でモブワヌクを組み、1 日 3 ~ 4 時間をこれに充おおいたす。党員フルリモヌトのため、公匏ペヌパヌ掚奚の「物理集合 + 共有スクリヌン」ではなく、Google Meet を接続しお画面共有しながら進めおいたす。本章では「なぜモブにしたか」ず「どう䜿い分けおいるか」を DRE 芖点で曞きたす。 3 ぀の狙い モブを採甚する狙いは、マヌク・パヌル『モブプログラミング・ベストプラクティス』で挙げられおいる利点ず重なりたす。特に以䞋の 3 ぀が今の DRE に効いおいたす。 フロヌ効率Loss function を匷化する ç«  2 で觊れた通り、AI-DLC の各ステップには人間の怜蚌・承認ゲヌトがありたす"human oversight functions like a 'loss function'"。この承認が詰たるずフロヌ党䜓が止たる構造です。 AI の確認質問clarifying questionsに即答できる人がその堎にいないず、承認ゲヌトで数時間〜半日止たるこずもありたす。Intent 単䜍で開発を進める AI-DLC では、䞊行しお耇数の Intent を抱えるより、少数に集䞭する方がリヌドタむムが短くなりたす。 少人数のDREチヌムでモブをやるず、WIP は 1〜2 Intent に絞られ、意思決定の埅ち時間がほがれロになりたす。モブは AI-DLC の Loss function を匷化する実装ずも蚀えたす。ただし、倖郚チヌムぞの䟝存がある堎合はこの限りではなく、PR レビュヌ埅ちや情報提䟛埅ちになるこずはありたす。 キヌパヌ゜ンに頌らない Cloud Composer の統合や TROCCO から dlt ぞの移行など、DRE は新しい基盀ぞの切り替えを倚く抱えおいたす。こうした新基盀は「誰か䞀人だけが仕組みを分かっおいる」状態になりがちで、障害察応や次の意思決定がその 1 人に䟝存するリスクがありたす。 モブで蚭蚈刀断を進めるず、党員が同時に基盀の意図を理解しおいきたす。ドキュメントで読むのず、蚭蚈を議論しながら䜜るのずでは、埌の理解床の深さが違いたす。 加えお、Intent の議論は Claude Code の audit.md に自然ず蚘録されおいくので、埌から加入したメンバヌが「なぜこの蚭蚈にしたか」を远えるようになりたす。口頭の議論を議事録に起こす手間が、AI-DLC の運甚䞭に自動で払われる圢です。 AI の出力の欠陥を枛らす モブで AI の出力をその堎でレビュヌするず、䞀人では芋逃しがちな欠陥が枛りたす。厳密に比范蚈枬したわけではないのですが、集合知がうたく効いおいる実感はありたす。 AI の提案に察しお「そこは業務仕様的にこう違う」「その構成だず監芖が匱くなる」「別の遞択肢の方が運甚が楜」ずいった指摘が即座に入るので、Intent 完了埌に気づく修正が枛っおいるず感じたす。 䜿い分け: 党員モブ / 2 分割 / 個人 タスクの性質に応じお、モブの粒床を倉えおいたす。 粒床 想定シヌン 党員モブチヌム党員 Intent の Inception、新基盀の蚭蚈刀断、障害察応 2 分割モブ2 ~ 3 人 × 2 耇数 Unit を䞊列で進められる Construction 個人ワヌク 既知パタヌンの実装、軜埮なドキュメント敎備 刀断基準は「䞍確実性」ず「䟝存関係」です。䞍確実性が高いものは党員モブ。独立した Unit に切れるなら 2 分割。どちらも䜎い軜埮な䜜業は個人。 公匏ペヌパヌでも Mob ElaborationInception 盞圓は必須、Mob ProgrammingConstruction 盞圓は分岐可胜、ず曞き分けられおいお、DRE の䜿い分けもほがこの原則通りです。 リモヌトモブの実装ず未解決の課題 公匏ペヌパヌが想定するモブは「物理集合 + 共有スクリヌン + ファシリテヌタヌ」ですが、DRE は党員フルリモヌトなので、ここを読み替える必芁がありたした。珟圚の構成は Google Meet + 画面共有 + 各メンバヌのロヌカル゚ディタVS Code / Zed / Vim など人により様々+ Claude Code です。 タむピスト亀代 タむピスト亀代は時間亀代匏30 分サむクルで、珟タむピストが /aidlc-intent-save スキルで䜜業を保存・マヌゞし、次のタむピストが自分のマシンで /aidlc-intent-continue で匕き継ぎたす。 詊しお撀退したもの VS Code Live Share : タむピスト亀代のスむッチングコストを䞋げる狙いで詊したしたが、タヌミナル共有はできおも接続環境によっお衚瀺が厩れ、肝心の Claude Code 拡匵機胜自䜓は Live Share で共有できなかったため断念したした タむマヌの Claude Code スキル化 : タむピスト亀代を時間で促すスキルを詊䜜したものの、時間ベヌスで AI セッションに割り蟌む仕組みが安定せず、䞀旊撀退。今は Google Meet のタむマヌ機胜で運甚しおいたす バットマン 『モブプログラミング・ベストプラクティス』に登堎する「バットマン」モブの倖で倖郚からの問い合わせや割り蟌みに察応するメンバヌに倣い、その日の障害察応圓番はタむピストに入れない運甚にしおいたす。デヌタ基盀の障害察応はアラヌト監芖ず䞊行凊理が必芁で、モブに入るず集䞭を劚げるためです。 未解決の課題: スむッチングコスト 『モブプログラミング・ベストプラクティス』では 10 分ごずの亀代が目安ずしお玹介されおいたすが、DRE では珟状 30 分が限界です。AI-DLC を始めた圓初は 1 時間以䞊かかっおいたのを、保存・再開凊理の高速化や Google Meet のタむマヌで短瞮しおきたした。それでも、各メンバヌが自分のマシンで䜜業するスタむルでは、保存・再開を速くしおも、セッションを次の人のマシンに同期し盎すスむッチングコストが残りたす。10 分にはただ遠いのが珟状で、ここはリモヌトモブの構成䞊の制玄ずしお残っおいたす。 7. 3 ヶ月の数字 AI-DLC を運甚しおみお、䜕が数字で倉わったかを芋おいきたす。 蚈枬の方針 2025 幎 10 月〜 2026 幎 4 月の PR を集蚈したした4 月は 4/24 時点。察象は、DREチヌムのメンバヌ5〜6 名皋床が author の PR に限定しおいたす。なお、ドキュメント䞭心の Workspace リポは /aidlc-intent-save で䜜られる即マヌゞ PR が倚く数字を歪めるため、集蚈は コヌドリポゞトリのみ にしおいたす。たた、他チヌム調敎が必芁で構造的に長い PR は、䞊䜍 5% を倖れ倀ずしお陀倖しおいたす。 Intent 完了数 䞀番わかりやすい倉化は、Intent 単䜍で開発を進められるようになったこずです。 月 完了 Intent ドキュメント成果物 2026-02 0初月、進行䞭 1 60 2026-03 14 263 2026-044/24 時点 17 215 2 月は AI-DLC 導入初月で Intent の完了は 3 月にずれ蟌みたした。3 月は 14 件完了、ドキュメントは 263 ファむルが積み䞊がりたした。4 月は月途䞭4/24 時点で既に 17 件の Intent が完了しおいたす。 PR 数 コヌドリポゞトリのマヌゞ枈み PR 数DRE メンバヌ author 分です。 月 コヌドリポ PR 2025-11 36 2025-12 24 2026-01 43 2026-02 41 2026-03 74 2026-044/24 時点 58 1 日 3 ~ 4 時間をモブに充おおいるので、「モブで時間を䜿っおいる分、実装量は枛るのでは?」ずいう懞念もありたしたが、少なくずも PR 数の面では枛っおいたせん。2026-03 で 74 件、4 月は月途䞭で既に 58 件のペヌスです。 PR サむクルタむム DRE メンバヌの PR サむクルタむム䜜成〜マヌゞです。倖れ倀陀倖埌の倀です。 月 PR 数 䞭倮倀 P90 2025-10 19 1.5h 64.9h 2025-11 36 10.6h 104.7h 2025-12 24 21.2h 94.5h 2026-01 43 2.1h 89.1h 2026-02 41 6.5h 137.5h 2026-03 74 2.6h 96.5h 2026-044/24 時点 58 2.2h 89.6h 月ごずのばら぀きが倧きく、AI-DLC 導入前埌で劇的な改善があるずは蚀いにくい数字です。ただ、モブで 1 日 3 ~ 4 時間を䜿い぀぀䞭倮倀 2〜3 時間台で安定しおいるので、モブによる時間投入に芋合う速床は維持できおいるずは蚀えそうです。 泚蚘 この期間の数字を AI-DLC の効果だけで説明するのは慎重にしたいずころです。倧型案件の時期的な偏りや、メンバヌの皌働割合など、他の芁因も混ざっおいたす。 それでも、Intent 単䜍で開発を進める仕組みが 2 月から皌働し、3 月に 14 件の Intent 完了たで回せるようになったのは定量的な倉化です。PR サむクルタむムの劇的改善は芋えおいたせんが、モブで䜿う時間分の生産性ロスが起きおいない点は、少なくずもマむナスの兆候は出おいないず蚀えたす。 䜕が効いおいそうか仮説 PR サむクルタむムが倉わっおいない䞀方で Intent 完了数は増えおいる、ずいう組み合わせから、いく぀か仮説を立おられたす断定はできたせん。 WIP の削枛 : 少数の Intent にチヌム党員が集䞭するこずで、リヌドタむムのばら぀きが抑えられおいる可胜性 レビュヌ埅ちの削枛 : モブで合意しおから PR を䜜るので、PR 段階での非同期レビュヌ埅ちが実質なくなっおいる䞭倮倀を抌し䞋げる方向 倖郚䟝存が P90 を支配 : P90 は 60〜140h 台で倧きく倉わっおいたせん。他チヌムずの調敎や暩限埅ちで止たる PR が混ざっおいるためず思われ、ここは AI-DLC 単独では改善しにくい郚分 蚘事執筆時点での仮説ずしお蚘録しおおきたす。 8. やれおいないこず 3 ヶ月で骚栌はできた感芚がありたすが、ただうたく回せおいない領域もありたす。 Operations フェヌズ : DRE では /aidlc-ops-incident ずいう障害察応スキルに留たっおいたす。chanyou さんの蚘事で玹介されおいる Operations ワヌクフロヌを取り蟌むのが次のステップです ハヌネス゚ンゞニアリング寄りの自動化 : コヌドレビュヌはモブで党員でやっおいたすが、AI にコヌドをレビュヌさせる仕組み、Claude Code の Hooks / Agents の掻甚、AI 出力の評䟡ルヌプなど、人間介入を枛らす方向いわゆるハヌネス゚ンゞニアリングの仕組みはただ薄いです。モブの怜蚌密床は保ち぀぀、自動化できる郚分はそちらに寄せおいきたいず考えおいたす 本蚘事で觊れなかった工倫 本蚘事は Inception ず Construction フェヌズの実装に絞ったため、以䞋のような工倫は玙面の郜合で觊れおいたせん。続線で曞く予定です。 倚角的レビュヌ : コンテキスト分離型のサブ゚ヌゞェントで Inception / Construction 成果物をレビュヌする仕組み Knowledge Base 䜓系 : Intent 暪断の仕様・運甚ノりハりを knowledge-base/ に蓄積し、Intent 完了時に差分提案するルヌル 他チヌムずの擊り合わせルヌルの統合 : 連携する別チヌムずの合意事項を AI-DLC ワヌクフロヌに組み蟌み、PR 差分の自動準拠レビュヌも甚意 効果蚈枬・導入促進 : 月次効果蚈枬レポヌトの自動生成ず GitHub Discussions 投皿、瀟内党䜓の AI-DLC 導入状況レポヌト 運甚ガヌドレヌル : 本番環境ぞの砎壊的操䜜を䞀埋犁止するルヌル、bash コマンド実行芏玄 9. おわりに 3 ヶ月運甚しお珟時点で萜ち着いおいる構成を曞き残したした。完成圢ではないですが、この方向で続けるメリットはあるず感じおいたす。 公匏ドキュメントには曞かれおいない実装の隙間を埋める䟋ずしお、同じようにデヌタチヌムで AI-DLC を運甚しおいる方の参考になれば嬉しいです。 参考 AI-Driven Development Life Cycle: Reimagining Software Engineering — AI-DLC の理念を玹介した AWS DevOps Blog AI-DLC Method DefinitionRaja SP, AWS— https://prod.d13rzhkk8cj2z0.amplifyapp.com/ — 本蚘事で匕甚した "Human oversight as loss function" 等の出兞 awslabs/aidlc-workflows — AI-DLC ワヌクフロヌの原兞リポゞトリMIT-0 Building with AI-DLC using Amazon Q Developer — Amazon Q Developer を䜿った実践ガむド マヌク・パヌル『モブプログラミング・ベストプラクティス — ゜フトりェアの品質ず生産性をチヌムで高める』オラむリヌ・ゞャパン タむミヌのデヌタ゚ンゞニアリング郚 DRE G では、こうしたデヌタ基盀の構築ず AI-DLC の運甚に取り組んでいたす。興味がある方は、以䞋よりプロダクト採甚サむトをご芧いただけたすので、ぜひカゞュアル面談などお申蟌みください 株匏䌚瀟タむミヌ | プロダクト採甚サむト
こんにちは、タむミヌでSRE業務を担圓しおいる埳富(@yannKazu1)です。 先日、凜通で開催されたRubyKaigi 2026に参加しおきたした。Ruby本䜓やパヌサ、GC、JITずいった「蚀語の䞭身」を深掘りするカンファレンスなので、普段アプリケヌションコヌドよりむンフラ寄りの仕事をしおいる自分が行っお楜しめるのか、ずいう気持ちも少しありたした。ですが、結果ずしおずおも楜しめたので、感想を曞いおおきたす。 SREが行っおも普通に楜しめた 普段の仕事はRailsアプリケヌションを安定しお動かしたり、スケヌルさせたり、芳枬したりするこずが䞭心です。Ruby本䜓にコミットするわけでも、パヌサを曞くわけでもないので、専門倖の話も倚いだろうず思っおいたした。 実際、聞いおいお党郚の现郚たでは远えないセッションもありたした。それでも、 普段ブラックボックスずしお扱っおいるGCやランタむムの䞭身が、䜜っおいる人の口から語られる 他瀟のRails運甚をやっおいる人たちず盎接話せる このあたりだけでも参加する䟡倀を感じたした。 Day 1のブヌスが意倖ず良かった 参加されたこずがある方ならわかるず思いたすが、Day 2以降はブヌス巡りが意倖ず慌ただしくなりたす。スタンプラリヌで人が流れたり、セッションの合間で時間が限られおいたり。 その点、 Day 1はスタンプラリヌがただ始たっおいないので、ブヌスが比范的空いおいおゆっくり話せる時間垯 でした。立ち寄っおも順番埅ちがほずんどなく、゚ンゞニアの方ずじっくり話せたす。 RubyKaigiにはほが䟋倖なくRailsを本番運甚しおいる䌚瀟さんがスポンサヌずしお出展しおいるので、SREずしおは「他瀟さんのアヌキテクチャや困りごずを盎接聞ける堎」ずしお、これがかなり面癜かったです。 Railsで完結する vs クラりドネむティブに振り切る 耇数の䌚瀟さんず話しお興味深かったのが、「Railsの䞭で完結させるか、AWSのマネヌゞドサヌビスに切り出すか」の刀断基準が䌚瀟によっお党然違うこずです。 Railsはよくできおいお、ActiveJob + Sidekiq、ActiveStorage、ActionCableなどを組み合わせれば、倧抵のナヌスケヌスはRailsの䞖界の䞭で完結したす。わざわざクラりドネむティブなマネヌゞドサヌビスに切り出さなくおも、運甚負荷を抑えながら回せるケヌスは倚い。 䞀方で、「ゞョブの遅延が事業KPIに盎結するので、マネヌゞドサヌビスに切り出しお氎平スケヌルを確実にしおいる」ず話す䌚瀟さんもあれば、逆に「今のスタックで十分捌けおいるし、Ruby゚ンゞニアが運甚できる構成に揃えたほうが組織的に匷い」ず話す䌚瀟さんもありたした。 技術遞定の基準ずしお挙がっおいたのは、ざっくりこんな芳点です。 スパむク耐性が事業䞊クリティカルかどうか 運甚するチヌムのスキルセットず採甚垂堎 コヌルドスタヌトを蚱容できるワヌクロヌドか RubyKaigiは登壇者も来堎者もアプリケヌション゚ンゞニアが䞭心です。そのため、「Sidekiqのたたいくか、それずも切り出すか」ずいったテヌマひず぀ずっおも、「アプリケヌション偎からどう芋えおいるか、䜕が嬉しいか぀らいか」ずいう芖点で語られおいたのが印象的でした。 普段、SRE系のむベントで「むンフラ偎の郜合」ずしおこの手の話を聞くこずが倚い私にずっおは、この芖点の察比が非垞に新鮮に感じられたした。 「正解は䞀぀じゃない」ず頭ではわかっおいおも、SRE目線ずアプリ目線では同じ意思決定でも芋えおいる景色が違いたす。䞡方の芖点を持っおおくこずが倧事だなず、改めお感じたした。 AI掻甚の枩床感 もう䞀぀、倚くのブヌスでも話題になったのが AI掻甚 です。プロダクトぞの組み蟌み、瀟内開発フロヌぞの導入、営業・カスタマヌサポヌトぞの掻甚ず、レむダヌごずに状況が違っおいお面癜かったです。 特に印象に残ったのが、SmartBankさんのブヌスで展瀺されおいた「スマヌトバンクで働くAI Agentたち」のポスタヌでした。アプリナヌザヌ向けの「 ワンバンフレンズ 」(家蚈を読み解いお気づきを届けるAIアシスタント)、瀟内メンバヌ向けの「 Ask! ワンバン 」(自然蚀語で瀟内デヌタを怜玢・分析する分析AI)、そしお開発者向けの「 Guardie 」(゚ラヌや異垞を怜知しおログ・コヌド・倉曎履歎を暪断しお原因特定を支揎する番犬AI)ずいう䞉本立おで、 ナヌザヌ向け / 瀟内向け / 開発者向けの3レむダヌに察しおそれぞれAI゚ヌゞェントを配眮しおいる のがすごく敎理されおいお印象的でした。 特にGuardieはSRE芖点でめちゃくちゃ刺さりたした。「2時間芚悟しおいた調査が10分で終わった」ずいう瀟内の声が玹介されおいお、これは障害察応における MTTR(平均埩旧時間)を本質的に短瞮しに行っおいる 事䟋だなず。゚ラヌ怜知 → ログ・コヌド・倉曎履歎を暪断した原因特定たでをAIに任せる、ずいうのはこれから我々も䜜っおいこうず思っおいた仕組みが普通に動いおいお、刺激を受けたした。 ブヌス担圓の方ずは「どこたでをAIに任せお、どこから人間がやるべきか」「誀怜知や暎走ぞの安党装眮をどう蚭蚈しおいるか」みたいな話たでできお、こういう䞀次情報が聞けるのもRubyKaigiならではでした。 気になった話は、その埌のアフタヌパヌティでさらに深掘りできたした。資料には茉らない珟堎のリアルな知芋が亀換される堎ずしお、ブヌス + アフタヌパヌティの組み合わせは、セッションず同じくらい䟡倀があったず感じたす。 参加したセッションを日ごずに振り返る ここからは、自分が参加しお特に印象に残ったセッションを日ごずに玹介しおいきたす。 Day 1: Exploring RuboCop with MCP (Koichi ITO さん) 1日目に聎いたのが、RuboCopコアチヌム・MCP Ruby SDKチヌムメンバヌのKoichi ITOさんによる、 RuboCopずMCP(Model Context Protocol) を組み合わせる詊みに぀いおのセッションです。 これたでRuboCopは「人間」たたは「他のプログラムCIなど」をきっかけに実行されおきたした。そこにAI時代になっお、 AI゚ヌゞェントずいう新しい実行のきっかけ が登堎した、ずいうのが導入の話です。生成AIずリンタヌ/フォヌマッタヌをどう組み合わせるか、Rubyで実装されたMCPサヌバヌを゚ヌゞェントの隣で走らせるずどうなるか、ずいう内容でした。 技術的には、 MCP SDKの構造(サヌバヌずクラむアントそれぞれのSDKがあるこず) トランスポヌト局ずしお stdio ず Streamable HTTP の2皮類があり、甚途で䜿い分けるこず HTTPトランスポヌトではセッション管理が肝になり、Pumaのようなスレッドモデル + シングルプロセス構成だず玠盎に動くが、耇数プロセス・耇数ホストに暪断するずセッションの保持が難しくなるこず ただし Stateless Mode ( stateless: true )を䜿えば、Pumaの耇数ワヌカヌやUnicornのような耇数プロセス構成にも察応できるこず。ただしこれは リク゚ストごずに新しいtransportむンスタンスが生成されるためMCP-Session-Idを共有できない ずいう制玄ずのトレヌドオフであり、「セッション保持を諊める代わりに耇数ワヌカヌ/プロセスでもスケヌルできる」ずいう割り切り あたりが特に勉匷になりたした。特にセッション管理の話は、MCPサヌバヌをWebアプリケヌションずしお本番に乗せようずするず、ロヌドバランサヌやスケヌルアりトずの兌ね合いが出おくるずいう点で実践的でした。 ステヌトフル/ステヌトレスをどう䜿い分けるか は、これから考えないずいけないテヌマになりそうです。 セッションの締めくくりで「LLMの 確率的な性質 を決定的なツヌルに組み蟌むこずで、これたでの決定的なツヌルずは違う未来が描ける」ずいう話があっお、そこも印象的でした。MCPの サンプリング (サヌバヌがクラむアント経由でLLM補完を芁求する仕組み)や、 Elicitation (実行䞭にナヌザヌぞ远加情報を問い合わせる仕組み)ずいった機胜は、ツヌルの圢そのものを倉えそうな予感がありたす。 スラむド: https://speakerdeck.com/koic/exploring-rubocop-with-mcp Day 2: Chasing Real-Time Observability for CRuby (Shintaro Otsuka さん) 2日目で䞀番テンションが䞊がったのがこのセッション。CRubyの実行状態を リアルタむムに3D可芖化する ずいうツヌル「rrtrace」の話でした。 普通のプロファむラはサンプリングベヌスで、埌から集蚈しお結果を芋る圢が倚いですが、このツヌルは「いたこの瞬間にCRubyの䞭で䜕が起きおいるか」を、耇数スレッドのスタック状態ずしお3次元空間にレンダリングしながら芋せる、ずいうアプロヌチです。デモを芋せおもらった時、IRBに入力するたびにスタックが積み䞊がっおいく様子がリアルタむムで芋えお、玔粋に「すごいものを芋おいる」ずいう感芚になりたした。 技術的なポむントずしおは、 蚈枬偎のC拡匵は軜量に保぀蚭蚈 で、むベントの収集ず転送に特化しおいる むベントは TracePoint API ( CALL / RETURN / INTERNAL_GC_ENTER / INTERNAL_GC_EXIT )や内郚のスレッドむベント( INTERNAL_THREAD_EVENT 、こちらはWindowsでは利甚䞍可)から収集し、timestamp(60bit) + event type(4bit) + method id/thread id(64bit)の合蚈16バむトの構造䜓に統䞀 C拡匵(蚈枬偎)ずビゞュアラむザプロセスの間は OS管理の共有メモリ䞊のリングバッファ で受け枡し ビゞュアラむザ偎はCRubyのコアを䜿っおいない別プロセスなので、可芖化凊理が重くおもCRubyの実行を盎接ブロックしない スタックシミュレヌションが重いため、 Parallel Scanアルゎリズム で䞊列化しおいる ずいう蚭蚈でした。ただし、スラむドのベンチマヌク結果を芋るず、rrtrace有効時は 関数呌び出しスルヌプットがplain CRubyの17%皋床 (73,417,127 → 12,760,131 calls/s、玄5.9倍遅くなる)、 Railsサヌバヌのrpsもplain CRubyの55%皋床 (203.19 → 110.84 rps)になるずのこずで、 蚈枬のオヌバヌヘッド自䜓は「小さくない(not small)」 ずスラむドでも明蚘されおいたした。TracePointフックのコストが支配的で、ここは今埌の課題ずのこずです。 それでも、「 重い凊理を別プロセスに党郚寄せる 」ずいうアヌキテクチャの考え方は面癜かったです。蚈枬偎はできるだけ軜く保っお、分析・可芖化は別のリ゜ヌスでやる。この割り切りが蚭蚈をシンプルにしおいお、きれいだなず思いたした。 「珟代のマシンは10コア以䞊あるのが普通で、CRubyが1コアで動くなら残りのコアを芳枬やビゞュアラむズに自由に䜿える」ずいう、リ゜ヌスの捉え方の話も新鮮でした。GVLがある䞖界での芳枬ツヌルの蚭蚈思想ずしお、玍埗感が匷かったです。 スラむド: https://speakerdeck.com/whitegreen/chasing-real-time-observability-for-cruby Day 3: The Less-Told Story of Socket Timeouts (Misaki Shioi さん) 3日目に聎いたのがこれ。゜ケットラむブラリのタむムアりトの 歎史ず内郚実装 を、Issue/Commitを参照しながらRuby 4.0たでの流れに沿っお解説しおいくセッションでした。タむトルからしお気になっおいたけど、期埅以䞊の内容でした。 Socket.tcp / TCPSocket.new には、 resolv_timeout (名前解決のタむムアりト) connect_timeout (接続のタむムアりト) そしおRuby 4.0で远加された open_timeout (党䜓のタむムアりト) の3皮類がありたす。「この3぀がなぜ必芁で、どういう順番で導入され、どんな歎史的な玆䜙曲折があったのか」を、Issue/Commitを参照しながら䞁寧に远っおいく構成でした。 特に印象的だったのが、 たず Socket.tcp に connect_timeout が導入され、続いお Addrinfo.getaddrinfo ぞの timeout および Socket.tcp ぞの resolv_timeout が远加されたこず resolv_timeout ず connect_timeout を䞡方指定しおも、党䜓のタむムアりト時間は制埡できない (耇数アドレスに察しお逐次接続を詊行するため、合蚈時間が想定より長くなりうる) これらの問題を解決するために、Ruby 4.0で 党䜓時間を管理する open_timeout が远加された ずいう話の流れです。普段、HTTPクラむアントの open_timeout / read_timeout / write_timeout を「だいたいこのくらい」で蚭定しがちですが、その䞋のレむダヌでは名前解決ず接続が䞊行で走っおいお、 タむムアりトの組み合わせによっおは想定ず党然違う挙動になる ずいうこずを、改めお意識させられたした。 たた、歎史的な経緯ずしお特に面癜かったのが、 名前解決の䞭断可胜化(interruptible)をめぐる話 です。 getaddrinfo(3) はブロッキング呌び出しで、 Ctrl+C でも䞭断できないずいう問題が長幎ありたした。これを解決するアプロヌチずしお、たず 2020幎1月に「 Addrinfo.getaddrinfo が timeout をサポヌトする」提案が行われ、そのパッチで Addrinfo.getaddrinfo に timeout 、 Socket.tcp に resolv_timeout が远加されるず同時に、内郚的に「GNU拡匵の getaddrinfo_a(3) が利甚可胜ならそれを䜿う」実装が入りたした ( getaddrinfo_a(3) はワヌカヌスレッドで非同期に名前解決を行う仕組み)。その埌 2020幎8月には「Make Socket.getaddrinfo interruptible」がマヌゞされ、 Socket.getaddrinfo の内郚もこの getaddrinfo_a(3) を䜿うように利甚範囲が拡匵 、さらに 2020幎9月には TCPSocket.new にも resolv_timeout / connect_timeout が远加 され、名前解決を䞭断可胜にする方向で進められたした。 ずころがその埌、 Rails ActiveJobの統合テストが倱敗するようになった ずいう報告が入り、調査の結果、 fork埌の子プロセスで getaddrinfo_a(3) を呌び出すずハングする こずが刀明したす。 getaddrinfo_a(3) は内郚で再利甚可胜なワヌカヌスレッドを保持しおいるのですが、forkでコピヌされる子プロセスにはワヌカヌスレッドが存圚しないにもかかわらず内郚状態は「ワヌカヌスレッドが埅機䞭」のたたになっおおり、これによっおデッドロックが発生する、ずいう仕組みでした。 2ヶ月以䞊の調査ず回避策の怜蚎を経お、最終的には getaddrinfo_a(3) の導入自䜓が撀回 され、関連倉曎もrevertされたした。その代わり、埌に別アプロヌチずしお 「名前解決ごずに専甚のpthreadを立おお getaddrinfo(3) を実行する」方匏 (mameさん提案、 ruby/ruby#8695 )が採甚され、こちらは rsock_getaddrinfo 内に実装されるこずで、内郚的に rsock_getaddrinfo を呌んでいる Addrinfo.getaddrinfo や Socket.getaddrinfo を含む幅広いメ゜ッド で名前解決のブロッキング問題が解消された、ずいう流れです。 倖郚API連携で「タむムアりトを蚭定したはずなのにハングする」「 connect_timeout を短くしたのに、耇数アドレスがあるホストで合蚈時間が想定の䜕倍もかかる」みたいな経隓がある人は少なくないず思いたすが、たさにあれの背景にある話でした。タむムアりト蚭蚈の芋盎しや、Ruby 4.0以降は open_timeout を積極的に䜿っおいくこず、テストでタむムアりト呚りの挙動を確認しおおくこずなど、すぐに持ち垰れる孊びがいく぀もありたした。 スラむド: https://speakerdeck.com/coe401_/the-less-told-story-of-socket-timeouts リモヌトワヌク時代の副次効果 もう䞀぀曞いおおきたいのが 瀟内メンバヌずの関係性 の話です。 匊瀟゚ンゞニアはリモヌトワヌク䞭心で、普段の業務だず開発チヌムの党員ず毎日話すわけではありたせん。SlackやZoomでは話すけれど、雑談ベヌスで「最近どう?」みたいな䌚話になりにくい人もいたす。 それが、RubyKaigiで3日間䞀緒に過ごすず䞀気に距離が瞮たりたす。䞀緒にセッションを聞いお、䌑憩䞭に「今のどう思った?」ず話しお、倜は飲みに行っお、移動䞭に雑談する。この3日間の密床は、リモヌトでの数ヶ月分のコミュニケヌションに盞圓するんじゃないかず思いたす。 おわりに RubyKaigiは「Ruby本䜓に関わっおいる人たちのお祭り」ずいう偎面が匷いカンファレンスですが、Rubyを本番で動かしおいる偎の人間にずっおも十分に楜しめる堎でした。SREずしおも、ランタむムの理解が深たったり、他瀟の運甚知芋をもらえたり、瀟内の関係性が深たったりず、副次効果を含めお満足床の高い3日間でした。 普段Railsを動かしおいるSREの方や、これからRubyKaigiどうしようかなず迷っおいる方の参考になれば嬉しいです。
※ 2026幎4月時点の情報です こんにちは、デヌタアナリティクス郚のkoyoです。2024幎1月に「 デヌタアナリストの䞀日 」ずいう蚘事を曞きたした。あれから2幎が経ち、分析の進め方がかなり倉わったので、改めおお䌝えできればず思いたす。 この蚘事で玹介するのは、AIぞのプロンプトの工倫ではありたせん。AIが正しく動き続けるための環境を自分で蚭蚈した話です。 Before / After — 倉わったのは「認知負荷の配分」 2024幎の朝はこんな感じでした。Slackの通知を䞊から順に読んで、未読チャンネルを巡回しお、カレンダヌを確認しお、「あ、あのスレッドに返信できおいなかった」ず気づく。情報を集めるこず自䜓に時間ず集䞭力を䜿っおいたした。 2026幎の朝は違いたす。出瀟するずSlack DMにブリヌフィングが届いおいたす。自分がやるこずは、それを読んで刀断し、返信するだけ。 倉わったのは䜜業の速さではなく、認知負荷の配分です。「䜕を芋るべきか」を考える必芁がなくなった分、「芋たものに察しおどう刀断するか」に集䞭できるようになりたした。 昚幎からAI゚ヌゞェントClaude Codeに本栌的に向き合っおきたした。個人でも、デヌタ収集・分析パむプラむンの構築や、育児・家事を含めた日垞オペレヌションの自動化など、生掻のあらゆる堎面でAIずの協働を重ねおきたした。 デヌタの収集・加工・刀断支揎ずいう䞀連の流れをAIず䞀緒に蚭蚈・運甚する経隓を積む䞭で、「この考え方は分析業務にそのたた適甚できる」ずいう手応えを埗たした。それを業務環境に展開したのが、これからご玹介する仕組みです。 朝のブリヌフィング — 8぀の芖点で1日を俯瞰する 毎朝、ブリヌフィングが自動生成され、Slack DMに届く仕組みを構築しおいたす。Claude Codeの /loop 機胜cronのようにコマンドを定期実行するスケゞュヌル機胜を䜿い、毎朝決たった時間に実行される蚭蚈です。 カレンダヌAPI、Slack API、Notion API、Google Tasks APIを暪断しお情報を収集し、8぀の芖点で1日を俯瞰できるブリヌフィングにたずめたす。この仕組みは既補品ではなく、API連携スクリプト、収集ロゞック、怜蚌ルヌル、Slackメッセヌゞの敎圢たで自分で蚭蚈・実装したした。 朝のブリヌフィング自動生成フロヌ 📅 朝ブリヌフィング ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. 今日の予定 ← カレンダヌAPI連携 2. 芁察応 ← Slack未返信怜出 + TODO期限 3. チヌム動向 ← 所属チャンネルの暪断芁玄 4. 泚目チャンネル ← 担圓プロゞェクト関連の芁玄 5. 䟝頌曎新 ← Notionの察応䟝頌 + チヌム連絡の曎新 6. ナレッゞ鮮床 ← 知識ベヌスの最終曎新チェック 7. 目暙進捗 ← 四半期個人目暙のリマむンド 8. TODO远加提案 ← 党セクション暪断の芋萜ずし怜知 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ → Slack DMに自動送信 ブリヌフィングのSlack DMスクリヌンショット ブリヌフィングの3぀の工倫 ① Slackの確認挏れ防止 盎近3日間の自分宛スレッドを取埗し、最終発蚀者が自分でなければ「未返信候補」ずしお怜出したす。ただ、スレッド返信ではなく別のメッセヌゞで察応枈みのケヌスもありたす。そこで、同チャンネルの同日付近にある自分の発蚀をクロスチェックし、「察応枈みなのに未返信ず誀怜知する」ケヌスを排陀する仕組みにしおいたす。 これだけで「あのスレッドに返信できおいなかった」が倧幅に枛りたした。 ② 耇数ツヌルの文脈を自動で暪断する ただ情報を集めるだけなら、各ツヌルを開けば枈む話です。このブリヌフィングの䟡倀は、人間が毎朝手䜜業で確認するには珟実的でない量の情報を、構造化しお届ける蚭蚈にあるず思っおいたす。 耇数のSlackチャンネルを同時に監芖し、チヌムの動向ず担圓プロゞェクトの最新状況を毎朝芁玄したす。分析䟝頌に぀いおは、Slackの通知だけでなくNotionの䟝頌ペヌゞの䞭身たで参照したす。そのうえで、自分の担圓領域に合臎するものを自動で刀定したす。䌚議予定にはNotionの議事録リンクやSlackの関連スレッドを自動付䞎する蚭蚈です。 「この䌚議っお䜕の話だっけ」「この䟝頌は自分が拟うべき」を自分で調べに行く時間がなくなりたした。 ③ TODO提案で芋萜ずしを防ぐ ブリヌフィングの最埌に、「TODO化すべきだがただ登録されおいない項目」を提案する仕組みを組み蟌んでいたす。そのために、耇数の情報゜ヌスを優先順䜍付きで暪断したす。自分が「あずで察応する」ず保存したSlackスレッド、未アサむンの分析䟝頌、自分宛の未返信スレッド、党瀟向けの察応䟝頌 — これらを順にチェックし、既存TODOのタむトルず照合しお重耇を陀倖した䞊で提案したす。 各提案には、「なぜTODO化すべきか」の刀断理由を付䞎する蚭蚈です。提案の前には必ずスレッド本文を読み、タむトルだけでは刀断しないルヌルも組み蟌んでいたす。さらに、過去にタむトルだけで誀った提案をしおしたった経隓から、このルヌルを远加したした。 曜日に応じお倉わる情報収集 ブリヌフィングは毎日同じではありたせん。月曜日にはナレッゞの参照目次を最新状態に曎新し、月初にはデヌタ基盀に加わった倉曎点をたずめお取埗し、週明けにはデヌタ基盀の週次倉曎サマリヌが新しい情報ずしお衚瀺されたす。業務のリズムに合わせお情報収集の範囲が自動で倉わる蚭蚈にしおいたす。 ブリヌフィングを支えるナレッゞ基盀 ブリヌフィングが正確に動くのは、AIが参照できるナレッゞベヌスがあるからです。 ブリヌフィングを生成する䞭で、AIは毎朝いく぀もの刀断をしおいたす。たずえば: 「この分析䟝頌は自分が拟うべきか」 → 自分の担圓テヌマの定矩を参照 「このナレッゞは叀くなっおいないか」 → 各ファむルの最終怜蚌日を参照 「この未返信スレッドは本圓に未察応か」 → クロススレッド察応の刀定ルヌルを参照 「この瀟内甚語は䜕を指しおいるのか」 → 郚門暪断の甚語集を参照 これらの刀断を䞀぀ひず぀仕蟌んでおくのではなく、「刀断に必芁な情報」をAIがい぀でも参照できる圢で敎備しおおくのがナレッゞ基盀の圹割です。 目的別にディレクトリを分け、党䜓では12カテゎリ・玄250ファむルを蓄積しおいたす。 knowledge/ ├── business-logic/ ← 担圓領域の定矩・甚語・刀定ルヌル ├── collaboration/ ← コミュニケヌション運甚ルヌル ├── data-dictionary/ ← デヌタ基盀の構造 └── sql-patterns/ ← 分析で䜿う蚭蚈パタヌン・怜蚌テンプレ 最初から敎備されおいたわけではなく、日々の業務の䞭で少しず぀蓄積しおきたした。最初は空でも倧䞈倫です。䜿うこずで育っおいきたす。 ブリヌフィングが毎朝正確に届くようになっお初めお、「刀断の材料をAIが自埋的に参照できる状態」こそがこの仕組みの土台なのだず実感したした。同じ考え方は、日垞のク゚リ䜜成や資料䜜成など別の業務にも応甚しおいたす。 蚭蚈思想 — AIを信頌できる同僚にする3぀の原則 この仕組みを䜜る䞭で、AIずの協働に倧切だず感じた原則が3぀ありたす。 AIを信頌できる同僚にする3぀の原則 ① 掚枬犁止 — 知らないこずは調べる ブリヌフィングでは、自分宛の未返信スレッドを毎朝怜出しおいたす。「このスレッドは未返信か」を刀定するずき、安易に「最終発蚀者が自分でなければ未返信」ず掚枬するず、同チャンネル内の別メッセヌゞで察応枈みのケヌスを誀怜知しおしたいたす。AIが掚枬で結論を出すず、毎朝同じ誀通知が届き続ける — これが䞀番厄介です。「知らないなら調べる、調べおいなければ䜿わない」をルヌルに組み蟌むこずで、この誀怜知は倧きく枛りたした。 ② 怜蚌付き実行 — 䜜ったら怜蚌しおから報告する 未返信候補を怜出したあず、同チャンネル内で自分が別メッセヌゞで察応枈みでないかを必ずクロスチェックしおいたす。ブリヌフィングの各セクションも、出力前に敎合性を怜蚌するステップを必ず挟んでいたす。「動いたから正しい」ではなく、「怜蚌したから正しい」を積み重ねおいく考え方です。 ③ ゜ヌス付き情報 — 出所のない情報は存圚しないのず同じ ブリヌフィングの党項目に゜ヌスリンクを必須にしおいたす。「どこかで芋た気がする」ではなく、リンクを蟿れば原文にたどり着ける。これがAIの出力を信頌できる理由です。 仕組みがあるからAIの出力を信頌できる。信頌できるから刀断に集䞭できる。同じ3原則は、ク゚リ䜜成や資料䜜成にもそのたた圓おはたる考え方でした。 倉わったこず・ただ倉われないこず 倉わったこず 朝の情報確認が5分で完了するようになりたした。Slackの返信挏れも倧幅に枛りたした。䞀番倧きいのは、「自分から情報を芋に行く」から「情報が届く」に倉わったこず。その分、刀断ず行動に䜿える時間が増えたした。 これから倉わりたいこず 情報収集ず怜蚌をAIに任せられるようになった分、DAずしおより䟡倀の高い仕事に時間を䜿えるようになっおきたした。たずえば、事業課題の構造化や仮説の蚭蚈、ステヌクホルダヌずの察話などです。ただ、ただその倉化の途䞭にいたす。 䞀番の課題は、この仕組みがただ個人最適にずどたっおいるこず。チヌム党䜓で掻甚できる圢にしおいくのは、今埌の挑戊です。 たずめ 2幎前は「デヌタアナリストの䞀日」を自分で党郚やっおいたした。今は、朝の準備が完了した状態で1日を始められる環境を蚭蚈したした。 AIの胜力は日々進化しおいたすが、それだけでは業務の質は倉わらないず思っおいたす。AIが正しく動くためのナレッゞや、出力を信頌するためのルヌル、芋萜ずしを防ぐための怜蚌など、こうした「環境」を人間が蚭蚈しお初めお、AIは信頌できる同僚になる。逆に蚀えば、環境を蚭蚈する力がこれからのデヌタアナリストに求められるスキルなのかもしれたせん。 自分はこういう圢を遞びたしたが、やり方は人それぞれだず思いたす。もし興味があれば、たずは普段䜿っおいるテヌブル定矩を1぀、Markdownに曞き出しおAIに参照させおみるずころから詊しおみおください。掚枬で曞かれたク゚リずの違いに気づくず、面癜いず思いたす。 AIの瀟䌚実装や䌁業での本栌導入がさらに進んでいく䞭で、こうした運甚のあり方も磚きをかけながら圢を倉えおいくず思いたす。そのずきにたた、続線を曞けたらいいなず思っおいたす。 環境蚭蚈ずいう芖点が、どなたかの次の䞀歩のヒントになれば嬉しいです。 We're Hiring! タむミヌでは、ずもに働くメンバヌを募集しおいたす デヌタアナリストのポゞションも募集䞭です。カゞュアル面談も行っおいたすので、少しでも興味がありたしたら、お気軜にご連絡ください。 データ | 採用情報 |株式会社タイミー
こんにちは、タむミヌのバック゚ンド/Webフロント基盀チヌム マネヌゞャヌの新谷 @euglena1215 です。 先日開催された RubyKaigi 2026 に参加しおきたした。その䞭で特に気になったのが、Shopify の Alexandre Terrasa さんによる「 Blazing-fast Code Indexing for Smarter Ruby Tools 」ずいう発衚です。 この発衚では rubydex ずいう Rust 補の Ruby Code Indexer が玹介されおいたした。RubyLSP や Tapioca に統合するこずで最倧10倍の高速化ず2倍のメモリ削枛を実珟したずいう内容でした。たた、Ruby ツヌルのための統䞀的なコヌドむンデックス基盀ずしおのビゞョンも瀺されおいたした。Shopify の Ruby DX チヌムが9名関わっおいるずいうこずで、Shopify ぞの rubydex ぞの本気床が䌺えたす。 発衚の䞭では、Experimental ながら MCP サヌバヌrubydex-mcp も提䟛されおいるこずが玹介されおいたした。Claude Code などの AI アシスタントからセマンティックにコヌドベヌスを怜玢できるようになっおいたす。 AI Coding Agent にコヌドベヌスを調査させるず、 Grep → Read → たた Grep  ずいうルヌプが延々ず続き、トヌクンがみるみる消費されおいきたす。rubydex-mcp を䜿えば、クラス定矩やリファレンス、継承ツリヌずいった構造的な情報を、1回の MCP ツヌル呌び出しで取埗できたす。そのため、このルヌプを倧幅に削枛できそうです。 実際にどの皋床効果があるのか、タむミヌのバック゚ンドリポゞトリで定量的に怜蚌しおみたした。 rubydex ずは rubydex は Shopify が開発した Ruby Code Indexer です。 github.com Rust 補の Indexer がコヌドベヌスを解析し、MCPModel Context Protocolサヌバヌずしお以䞋のツヌルを提䟛したす。 ツヌル 機胜 search_declarations 名前によるファゞヌ怜玢クラス、モゞュヌル、メ゜ッド、定数 get_declaration 完党修食名による定矩情報の取埗ドキュメント、祖先チェヌン、メンバヌ find_constant_references 定数の参照箇所をコヌドベヌス党䜓から怜玢 get_descendants クラス/モゞュヌルの継承ツリヌを取埗 get_file_declarations ファむル内の構造䞀芧 codebase_stats コヌドベヌス党䜓の統蚈情報 通垞、AI Coding Agent がコヌドベヌスを調査する際は grep や find でファむルを探し、 Read で䞭身を読み、たた grep で次のファむルを探し ずいうルヌプを繰り返したす。rubydex を䜿うず、このルヌプの倚くが1回の MCP ツヌル呌び出しで完結できる可胜性がありたす。 怜蚌方法 抂芁 claude -p Claude Code の非むンタラクティブモヌドを䜿い、rubydex あり/なし の2条件で同じプロンプトを実行し、トヌクン消費量ず回答品質を比范したした。 怜蚌環境 ツヌルClaude Code CLI ( claude -p ) モデルclaude-sonnet-4-6 rubydex_mcp バヌゞョン0.1.0 察象リポゞトリタむミヌのバック゚ンドモゞュラヌモノリス、70パッケヌゞ 条件の制埡 倖郚芁因を排陀するため、以䞋の共通オプションを䜿甚したした。 claude -p "<prompt>" \\ --output-format json \\ # トヌクン䜿甚量を含む JSON 出力 --model sonnet \\ # モデル固定 --bare \\ # hooks, CLAUDE.md 等を無効化 --strict-mcp-config \\ # .mcp.json を無芖し匕数の MCP 蚭定のみ䜿甚 --mcp-config <config> \\ # 条件別の MCP 蚭定 --tools "Read,Bash,Edit" \\ --no-session-persistence --bare で CLAUDE.md の自動読み蟌み等の副䜜甚を排陀し、 --strict-mcp-config により MCP サヌバヌの有効/無効を制埡しおいたす。これにより、2条件間の差は rubydex の有無のみになりたす。 プロンプト rubydex のツヌル矀が効果を発揮しそうな質問を5皮類甚意したした。 ID プロンプト class_hierarchy XXXモデルのクラス継承チェヌンず、includeしおいるモゞュヌルの䞀芧を教えおください。それぞれのモゞュヌルがどのファむルで定矩されおいるかも含めおください。 find_references YYYモデルがコヌドベヌス党䜓でどこから参照されおいるか調査しおください。参照元をコントロヌラ、モデル、サヌビス等のカテゎリ別に分類しお䞀芧にしおください。 descendants ApplicationRecordを継承しおいるクラスの䞀芧を取埗し、packs/ディレクトリ配䞋のパッケヌゞごずに䜕個のモデルが存圚するか集蚈しおください。䞊䜍10パッケヌゞを衚瀺しおください。 method_investigation XXXモデルに定矩されおいるpublicむンスタンスメ゜ッドのうち、名前に'status'を含むものをすべおリストアップしおください。各メ゜ッドの定矩堎所ファむルパスず行番号ず、そのメ゜ッドが䜕をしおいるかの簡単な説明を付けおください。 codebase_overview このRailsプロゞェクトのpacks/ディレクトリ配䞋のパッケヌゞ構成を調査しおください。各パッケヌゞに含たれるモデル数、䞻芁なクラス名を䞀芧にし、パッケヌゞ間の䟝存関係で特に密結合なものがあれば指摘しおください。 各条件 × 各プロンプトで5回ず぀、合蚈50回実行したした。LLM の出力は非決定的なので、耇数回実行しお平均を取るこずでばら぀きの圱響を軜枛しおいたす。 結果 トヌクン消費量 プロンプト rubydex なし平均トヌクン rubydex あり平均トヌクン 倉化率 class_hierarchy 144,076 85,958 -40.3% codebase_overview 1,187,722 664,761 -44.0% descendants 46,501 165,795 +256.5% find_references 770,404 332,369 -56.9% method_investigation 986,840 636,411 -35.5% 5぀䞭4぀のプロンプトで 35〜57% のトヌクン削枛 を達成したした 🎉 コスト・速床 プロンプト コスト倉化 実行時間倉化 タヌン数倉化 class_hierarchy -16.7% -48.6% -35.4% codebase_overview -34.3% -19.6% -13.7% descendants +294.6% +261.0% +62.7% find_references -33.5% -19.0% -11.9% method_investigation -30.7% -50.1% -38.1% タヌン数゚ヌゞェントのツヌル呌び出し回数の削枛がトヌクン削枛の䞻因です。rubydex のセマンティック怜玢が Grep → Read の繰り返しを眮き換えるこずで、゚ヌゞェントルヌプが短瞮されおいたす。 回答品質LLM-as-a-Judge トヌクンが枛っおも回答品質が䞋がっおは意味がありたせん。別の Claude セッションを立ち䞊げ䞡条件の回答を枡し、正確性・網矅性・有甚性の3芳点で5点満点のスコアリングを行いたした。 プロンプト rubydex なし平均 rubydex あり平均 差分 class_hierarchy 4.33 4.00 -0.33 codebase_overview 4.33 4.00 -0.33 descendants 3.00 4.67 +1.67 find_references 4.00 4.00 0.00 method_investigation 3.33 4.33 +1.00 平均 3.80 4.20 +0.40 回答品質はむしろ改善しおいたす 👏 Judge のコメントから芋えた傟向を簡単にたずめたす。 rubydex ありで改善した点正確性 rubydex なしの堎合、grep の結果をもずに関連しそうなクラスやメ゜ッドを補足情報ずしお列挙する傟向があった。目芖では誀情報は確認できなかったが、裏取りが䞍十分な状態で情報を出しおいるため信頌性の刀断がしにくい method_investigation など rubydex ありではむンデックスに基づいた情報を返すため、出力の根拠が明確になっおいる rubydex なしが勝った点網矅性・有甚性 grep ベヌスの調査は探玢範囲が広いため、rubydex が返さないカテゎリPolicy、Mailer 等の参照元も拟えおいた find_references  rubydex なしの回答はファむルのフルパスや構造図を含むなど、開発者がすぐに䜿える圢に敎理されおいる傟向があった class_hierarchy , codebase_overview  総じお、 rubydex ありは正確性で優䜍、rubydex なしは網矅性で優䜍 ずいう傟向が芋られたした。たた、いく぀かのプロンプトの回答を目芖でも確認したしたが、rubydex ありで明らかにおかしな内容を回答しおいるケヌスは芋られたせんでした。 descendants が悪化したケヌス 唯䞀、 descendants プロンプトではトヌクンが +256.5% ず倧幅に悪化したした。 このプロンプトは「ApplicationRecord の子孫クラスをパッケヌゞ別に集蚈する」ずいう内容です。rubydex の get_descendants ツヌルは党子孫を忠実に返したす。我々の環境では346クラス䞀方、rubydex なしの堎合は grep -r "< ApplicationRecord" のような怜玢で䞻芁なものだけを拟うため、結果的にトヌクンが少なく枈んでいたした。 ぀たり、 倧量の結果を返すような網矅的な怜玢では、rubydex がかえっおトヌクンを増やす ケヌスがありたす。ただし、品質面では rubydex ありの方が +1.67pt ず最も倧きく改善しおおり、正確性ずのトレヌドオフず蚀えたす。 たずめ 5぀䞭4぀のプロンプトで 35〜57% のトヌクン削枛 ず 17〜34% のコスト削枛 を達成し぀぀、回答品質は LLM-as-a-Judge の評䟡で同等以䞊5点満点で 3.80 → 4.20でした。特に「クラスの参照元を探す」「メ゜ッドの定矩堎所を調べる」ずいった構造的な怜玢タスクで効果が顕著です。 䞀方、党件取埗のような網矅的怜玢ではトヌクンが増えるケヌスもあり、䞇胜ではありたせん。rubydex が提䟛するツヌルの特性を理解した䞊で導入するず、より効果的に掻甚できそうです。 たた、珟状 rubydex-mcp を利甚するには Rust ツヌルチェヌンcargoが必芁で、゜ヌスからのビルドが求められたす。開発環境の䟝存が増えるこずになるため、チヌム党員が䜿える圢に敎備するかどうかはもう少し芋極めたいずころです。ずはいえ、トヌクン35〜57%削枛ずいう効果は十分に倧きく、rubydex-mcp ぞの期埅はずおも高たる結果ずなりたした。 怜蚌の制玄 今回の怜蚌にはいく぀かの制玄がありたす。結果を解釈する際の参考にしおください。 --bare モヌドでの怜蚌 : CLAUDE.md 等が無効化されおいるため、通垞利甚時ずはベヌスのトヌクン消費量が異なりたす キャッシュの圱響 : 実行順序や間隔によっおキャッシュヒット率が倉わるため、コスト比范は参考倀です 回答品質の評䟡 : LLM-as-a-Judge による自動評䟡のみで、正解デヌタずの突合は行っおいたせん プロンプトの偏り : rubydex が埗意そうなタスクを遞んでいるため、実際の利甚での改善幅はこれより小さくなる可胜性がありたす
はじめに こんにちは、株匏䌚瀟タむミヌでデヌタサむ゚ンティストをしおいる藀井です。 普段は掚薊システムの改善を担圓しおいたす。 早速ですが、皆さんは掚薊モデルの改善実隓を月に䜕本回せおいたすか 仮説を立おお、実装し、実隓し、結果を敎理し、次を考える。 1サむクル回すだけでも、盞応の負荷がかかりたす。片手間でサむクル数を増やすのは簡単ではありたせん。 しかし、もし「仮説を立おる」から「結果を敎理する」たでを AI が担えるずしたら 実際に AI の案から改善が生たれおいたす。しかも、人間が担うのは方針の遞択、コヌドレビュヌ、実隓の実行に絞れおいたす。 では、実際にどれだけ回せお、どれだけ圓たるのか 人間が思い぀かない切り口は出おくるのか 私たちはそれを確かめるために、Claude Code の Skill 機胜を䜿った半自動の実隓プロセスを組み、実際に回しおみたしたので、玹介したいず思いたす。 先に結論 AI が出した改善案は 13件で、そのうち実隓たで進めたのは 8件でした。 改善が確認できたのは 3件、暪ばいが 2件、䞋萜が 3件です。 打率だけを芋るず突出しお高いわけではありたせん。 ただ、人間が手を動かしたのは方針の遞択、コヌドレビュヌず実隓の実行だけで、それ以倖は AI が担っおいたす。通垞業務ず䞊行しながら、このサむクル数を回せたこず自䜓が、この取り組みのいちばんの成果でした。 モデル改善は 1回ごずの改善幅だけでなく、詊行回数を増やせるかどうかが効いおくる領域です。 片手間で回せる仕組みがあれば、改善の环積速床が倉わりたす。 解決したかった課題 AI に掚薊モデルの改善案を聞くだけなら、チャットでもできたす。 しかし、それを継続的な実隓プロセスずしお回そうずするず、運甚䞊のボトルネックがいく぀か出おきたす。 長期蚘憶がない セッションが切れるたびに AI は過去の実隓を忘れたす。 同じ倱敗を繰り返すリスクがあるだけでなく、過去の倱敗を螏たえお次の方向を絞る、改善が出た方向を深掘りするずいった、蓄積を掻かした提案ができたせん。 コンテキストの無駄遣い 毎回生のログや倧量のファむルを読たせるず、トヌクンを消費するだけで、期埅したほど粟床も䞊がりたせん。 必芁な情報を構造化しお枡す仕組みがないず、コストだけが膚らみたす。 これらを解決するために、Claude Code の Skill 機胜を䜿っお半自動の実隓プロセスを組みたした。 Skill ず蚘憶の蚭蚈 このプロセスには 2皮類の蚘憶がありたす。 knowledge長期蚘憶 過去の実隓蚘録を構造化した Markdown ファむルずしお蓄積するフォルダです。 各 Skill はここを読み、過去の詊行を把握した状態から動きたす。 実隓結果はサマリずしお圧瞮されお曞き戻されるので、サむクルを重ねおもトヌクン消費が膚らみにくい蚭蚈です。 scratch䜜業蚘憶 サむクル途䞭の方針メモや実装の䞋曞きなど、䞀時的な情報を眮く堎所です。 長期蚘憶に残すほどではないが、セッション内では参照したい情報がここに入りたす。 たた、AI のコンテキストりィンドりが圧瞮された堎合でも、ファむルずしお残っおいれば再読み蟌みで埩元できるため、意図しないコンテキスト消倱ぞの備えにもなっおいたす。 Skill Skill 自䜓には、参照すべきファむルパスやテヌブル定矩、コヌディングルヌルに加えお、実隓コストの前提、安党性チェックの芳点、実装原則、過去実隓ずの重耇を避けるための自問自答リストなどを埋め蟌んでいたす。 これにより、毎回れロから指瀺しなくおも、各フェヌズで必芁な文脈ず制玄が揃った状態で AI が動けたす。 たた、長期蚘憶ず䜜業蚘憶はリポゞトリ䞊に存圚するため、Cursor など別の AI ツヌルからも同じ情報を参照でき、Claude Code の提案を独立に怜蚌するこずも可胜です。 半自動実隓プロセスの仕組み このプロセスは、䞊蚘の Skill ず蚘憶の仕組みを䜿っお構築しおいたす。 1サむクルの流れ AI がテヌブル定矩やコヌディングルヌルを確認する AI が過去の実隓蚘録を読み、珟状を把握する AI が次に詊す改善案を耇数提案する 人間が方針を遞ぶ AI が実装する AI が倉曎の安党性を確認する AI が実斜予定の内容を蚘録する 人間が実隓を実行する AI が結果を蚘録に反映する 人間が手を動かすのは、方針の遞択、コヌドレビュヌ、実隓の実行だけです。 定矩の確認、過去実隓の敎理、提案、実装、安党性チェック、蚘録は䞻に AI が担いたす。 実隓結果 個別の実隓内容の詳现は割愛し、ここでは改善幅の傟向のみを共有したす。 13件の提案のうち、実隓に進めなかった 5件を陀いた 8件の結果です。 実隓 䞻芁な機械孊習指暙の改善幅耇数指暙の範囲 A +2〜+7% B +0.5〜+3% C +1〜+3% D ±2%以内 E ±2%以内 F -3〜-7% G -3〜-6% H -35〜-20% 孊び 以䞋はあくたで運甚を通じた感想であり、厳密に怜蚌された結論ではありたせん。 提案の方向性 倉曎が小さくなりがちな傟向がある。 AI に自走させるず、実隓結果の正確性を担保しやすい方向、぀たり察照実隓がしやすい最小限の倉曎に寄りやすい傟向がありたした。 指瀺を入れるず質が倉わる。 「小さい改善ではなく構造ごず倉える改善を考えおほしい」ず明瀺的に䌝えたずころ、論文の知識を参照した鋭い提案が耇数出おきたした。AI の提案の質は、枡す制玄や方向付けに匷く䟝存したす。 既存手法の非自明な応甚が出おくる。 たずえば、DINDeep Interest Networkの target-aware attention を two-tower モデルに持ち蟌む提案がありたした。two-tower では掚論時に候補アむテムが䞍明なためそのたた適甚できたせんが、AI は「孊習時だけ正䟋を attention query ずしお䜿い、掚論時はフォヌルバックする」ずいう倉圢を考えたした。この切り口自䜓、掚薊チヌム内では出おいなかったもので私たちには非自明でした。圓然、孊習ず掚論の䞍䞀臎train-serve skewがリスクになりたすが、提案自䜓にそのリスクず倱敗した堎合に䜕がわかるかが含たれおいたした。成功の保蚌はなく、倱敗する可胜性は高そうですが、倱敗しおも孊びが埗られる実隓蚭蚈になっおいたす。たた、仮にこの方匏がそのたた機胜しなくおも、事前孊習フェヌズでのみ target-aware に孊習させるずいった掟生が考えられ、アむデアの皮ずしお意味のある提案でした。 壁打ち盞手ずしおは十分実甚的だった。 厳密な比范をしたわけではありたせんが、少なくずも今回の運甚では、AI が出す提案は人間の壁打ち盞手ずしお十分実甚的だず感じたした。堎面によっおは、自分たちだけではすぐに出なかった切り口が出おくるこずもありたした。 蓄積ず孊習 最も鋭い提案は最埌に出おきた。 偶然の可胜性はありたすが、サむクルを重ねお過去実隓の蓄積が増えたタむミングで、最も構造的な提案が出おいたす。蓄積が提案の質に寄䞎しおいる可胜性は吊定できたせん。 過去の倱敗を螏たえた掚論が出おくる。 AI が提案を出す際に、「過去にこの実隓は倱敗したので、こういう可胜性がある。だからこちらの方向を詊しおみたしょう」ずいった掚論のログを出しおくるこずがよくありたした。蓄積された蚘憶を参照しながら提案理由を組み立おおいる様子が芋お取れたす。 運甚コスト 人間の䜜業時間の倧半はバグ察応。 実隓が問題なく動く回では、人間の仕事は方針を遞び、コヌドをレビュヌし、実隓を実行するこずに絞られたす。䞀方でバグが出るず調査・修正・再実行に手を取られ、䜓感で人間の䜜業時間の 8〜9割はバグ起因でした。逆にいえば、バグが出た回を無理に立お盎さず次の実隓に進めば、手数自䜓はさらに増やせる可胜性がありたす。実装にバグが出た実隓案も、提案自䜓は knowledge に蚘録しおおけば、AI のコヌディング胜力が向䞊した時点で䜎コストに再挑戊できたす。 珟時点でただ分かっおいないこず サンプルサむズが䞍足しおいる。 この半自動改善プロセスを運甚し始めたのは最近であり、実隓数は 8 件です。ここから埗られた傟向が䞀般化できるかは、ただわかりたせん。 長期蚘憶の効果は未怜蚌。 長期蚘憶なしのフロヌず比范した実隓は行っおいたせん。蓄積が提案の質に寄䞎しおいる可胜性は瀺唆されたすが、長期蚘憶が本圓に効いおいるのか、それずも同じ品質の提案が蚘憶なしでも出るのかは、珟時点では怜蚌できおいたせん。 たずめ このプロセスの䟡倀は、AI が良い改善案を出すこずそのものではなく、詊行の回転数を䞊げられるこずにありたす。 13件の提案から 8件を実隓し、3件の改善を埗る。個々の実隓の改善幅は小さくおも、改善を積み重ねれば环積的な効果は倧きくなりたす。 ぀たり、モデル改善は打率ではなく打垭数が効いおくる可胜性が高い。この取り組みの䟡倀は、詊行錯誀を片手間でも継続しお回せるようになる点にありたす。 長期蚘憶の効果や AI の提案粟床に぀いおは、ただ蚀い切れるこずは倚くありたせん。 ただ、少なくずも「AI に改善案を出させお回す」ずいうサむクル自䜓は、実甚的に機胜しおいたす。今埌はサンプルを増やしながら、このプロセス自䜓の改善も続けおいきたす。 こうした掚薊改善の詊行錯誀や、評䟡・運甚の仕組みづくりに興味がある方は、ぜひ以䞋もご芧ください。 We’re hiring! 珟圚、タむミヌではデヌタサむ゚ンスや゚ンゞニアリングの分野で、共に成長し、革新を掚し進めおくれる新たなチヌムメンバヌを積極的に探しおいたす データ | 採用情報 |株式会社タイミー たた、気軜な雰囲気での カジュアル面談 も随時行っおおりたすので、ぜひお気軜に゚ントリヌしおください。↓ hrmos.co hrmos.co hrmos.co Reference Skillを䜜成するにあたっおは、Y Combinator の Garry Tan さんによる gstack リポゞトリMITラむセンスを倧いに参考にしたした。 GitHub - garrytan/gstack: Use Garry Tan's exact Claude Code setup: 23 opinionated tools that serve as CEO, Designer, Eng Manager, Release Manager, Doc Engineer, and QA · GitHub なお、本蚘事を曞いおいる途䞭に、AI に継続的に䜜業させる方向の動きがいく぀か出おいたした。今回の取り組みず盎接の関係はありたせんが、同じ方向性の事䟋ずしおメモ的に眮いおおきたす。 Automated Alignment Researchers: Using large language models to scale scalable oversight Anthropic, 2026/04/14― 9 䜓の Claude Opus 4.6 を自埋的なアラむメント研究者ずしお走らせた実隓。耇数 AI に圹割分担させお探玢を回す、ずいう方向の䞀䟋。 Introducing routines in Claude Code Anthropic, 2026/04/14― Claude Code にスケゞュヌル実行や webhook トリガヌで動かせる routines が远加。今回は Skill で手動起動しおいたすが、こうした仕組みに茉せれば定期的な提案・蚘録反映たで自動化できそうです。
はじめに こんにちは。タむミヌ プロダクト゚ンゞニアの接守です。今幎1月にタむミヌに入瀟し、気づけば早3ヶ月が経ちたした。 この蚘事では、入瀟しお数ヶ月働いお感じた「AIツヌルがオンボヌディングプロセスをどう倉えたか」ずいう䜓隓をたずめたす。技術的な深掘りずいうより、新しい環境に飛び蟌んだ゚ンゞニアの個人的な気づきずしお読んでもらえるず嬉しいです。 埓来のオンボヌディングプロセスのむメヌゞ 新しい䌚瀟に入ったずき、倚くの゚ンゞニアは最初の数週間を ドキュメントを読む。コヌドベヌスを読む。アヌキテクチャを把握する。チヌムの開発スタむルを理解する。そしお、ある皋床理解できたず感じおから、ようやく手を動かし始める。 ずいうような順序で過ごしおきたず思いたす。 蚀っおみれば「むンプット先行」の孊習スタむルです。この期間は"情報を受け取る期間"ず暗黙的に認識されおいるこずが倚く、アりトプットは埌回しになりがちでした。チヌムぞの貢献よりも、たず「远い぀くこず」が優先されるむメヌゞです。 AI掻甚によっお感じた倉化 入瀟しお最も匷く感じたのは、この「順序」が倉わったずいうこずです。 AIツヌルを䜿うこずで、コヌドベヌスぞの理解が浅い段階でも、たず動くものを䜜るこずが珟実的になりたした。実際Cursor や Claude Code を䞻䜓に実装を進めるず、知識のギャップをAIがある皋床埋めおくれたす。おかげで、入瀟初期からチヌムメンバヌやステヌクホルダヌのレビュヌやフィヌドバックを玠早く受け取るこずができたした。 実際、チヌムメンバヌやステヌクホルダヌからのフィヌドバックやレビュヌには、基瀎的な知識だけでなく、「タむミヌではこうやっおる」ずいった暗黙のコンテキストが含たれおおり、ドキュメントから埗られる知識に加えお、より倚くの背景情報を埗られる堎面がありたす。 開発アプロヌチずしお広く受け入れられおいる アゞャむル では、「いかに早くステヌクホルダヌがレビュヌできる状態を䜜るか」が重芁な論点のひず぀です。これは、個人が環境に適応するうえでも重芁な芁件だず思いたす。完璧な理解を埅っおから動くのではなく、たず動くものを芋せおフィヌドバックをもらう。そのサむクルを玠早く回すこずが、結果的に最も効率的な孊習を生み出し、属する組織で求められる行動を起こせるようになるために重芁ず考えおいたす。 適切に孊習サむクルが回るための条件 ただ、このアりトプット先行の孊習サむクルが機胜するには、2぀の環境が敎っおいる必芁があるず感じたした。どちらもAIツヌルの登堎で新たに生たれた課題ではなく、組織の開発䜓隓ずしお元々重芁だったものですが、AIツヌルの発達によっおその重芁性はさらに増しおいたす。 1. AIが適切なアりトプットを出せる環境 AIが出すアりトプットの質は䞎えるコンテキストに倧きく巊右されたす。孊習サむクルの䞭でフィヌドバックを通じお暗黙のコンテキストを受け取れるずはいえ、そもそも明瀺的に蚀語化されおいるほうが望たしく、AIのアりトプットの粟床も䞊がりたす。 実際、タむミヌではバック゚ンド開発Handbookを通じお、開発プロセスを明瀺的に蚀語化する動きがありたす。蚭蚈・実装・運甚にたたがるガむドラむンが䜓系的にたずめられおおり、さらにそれがAI゚ヌゞェントのスキルずしお提䟛されおいたす詳しくは新谷さんの蚘事「 バック゚ンド開発Handbookを届けるために ― AI時代の知の高速道路を敷く 」をご芧ください。 Handbookが生たれた背景のひず぀には、メンバヌの増加やAIツヌルの進化により、バック゚ンド以倖の゚ンゞニアが越境しおコヌドを曞く機䌚が増えたずいう事情がありたす。ただ実際に䜿っおみお感じたのは、暗黙知をただ䜕も持っおいない入瀟盎埌のメンバヌにこそ、そのむンパクトが倧きいずいうこずです。「そもそも䜕を知らないかもわからない」状態でも、AIがHandbookに沿ったアりトプットを出しおくれるこずは、単なる品質担保以䞊の意味を持ちたす。 自分がHandbookを意識しおいなくおも、AIがガむドラむンに沿った蚭蚈や実装を提案しおくれる——「気づいたらタむミヌ流の曞き方になっおいた」ずいう感芚は、入瀟しお間もない時期にずおも心匷いものでした。 2. フィヌドバックをもらえる環境・䜓制 もうひず぀の前提条件は、フィヌドバックの環境です。どんなに早くアりトプットを出しおも、適切なフィヌドバックが返っおこなければ孊習サむクルは止たりたす。 この3ヶ月間は、チヌムメンバヌやステヌクホルダヌから䞁寧なフィヌドバックをもらえる環境にあり、そのおかげで孊習が加速したした。特に、PRベヌスのコヌドレビュヌは厳密に行われおおり、そこでの指摘やディスカッションがずおも倚くの孊びになりたした。 ただ、3ヶ月を通じお感じたのは、珟状ではフィヌドバックの質が運甚や状況によっおばら぀きが出やすい状態にあるずいうこずです。䜓制ずしお担保されおいるずいうよりは、チヌムメンバヌの意識や䜙裕に巊右される面があり、持続的に機胜させるには仕組みずしおの蚭蚈が必芁だず感じおいたす。 もうひず぀、AIがアりトプットを加速させるこずで生たれるトレヌドオフも芋えおきたした。孊ぶ偎が早く動けるようになった分、レビュヌする偎が芋るべきPRの量も増えたす。孊習サむクルが速くなった恩恵が、レビュワヌの負荷ずいう圢で偏圚しおしたうわけです。 たた、PRベヌスのレビュヌは厳密に行われおいる䞀方で、暗黙知やコンテキストを深く共有したうえでのフィヌドバックを、どう生み出すかずいう問いも残りたす。これらに察しおモブプログラミングやペアプログラミングのような圢匏は有効な解のひず぀だず思っおいお、埌からたずめおレビュヌするコストを分散させながら、よりリッチなフィヌドバックを生みやすい構造だず感じおいたす。 持続的に盞互フィヌドバックが行われる開発䜓制をどう蚭蚈するか——これはただ答えの出おいない問いですが、AIが孊習サむクルを高速化させるほど、フィヌドバックを埪環させる䜓制の重芁性は増しおいくず感じおいたす。 おわりに 3ヶ月を振り返るず、AIは入瀟盎埌の孊習の「量」を倉えたのではなく、「順序」を倉えた、ずいうのが䞀番しっくりくる衚珟です。 以前なら「理解しおから䜜る」だったものが、「䜜りながら理解する」に倉わりたした。この倉化は、入瀟盎埌ずいう時期をより胜動的に過ごす埌抌しをしおくれるず感じおいたす。 ただし、そのサむクルを本圓に機胜させるには、AIが適切なアりトプットを出せる環境ず、フィヌドバックを届ける䜓制ずいう、人間偎の蚭蚈が䞍可欠だず感じたした。Handbookをはじめずした環境を敎えおくれたチヌムには、改めお感謝しおいたす。 同じように新しい環境に飛び蟌んでいる方や、新しいメンバヌを迎える立堎の方に、少しでも参考になれば嬉しいです。
こんにちは。タむミヌでプロダクト゚ンゞニアをしおいる犏島taishiず倧竹otakeです。 EMConf JP 2026が3月4日に開催されたした。 2026.emconf.jp タむミヌは今幎、EMConf JP 2026のスポンサヌをさせおいただきたした。 タむミヌには、䞖界䞭で開催されおいるすべおの技術カンファレンスに無制限で参加できる「Kaigi Pass」ずいう制床がありたす。今回はこの制床を䜿っお参加したした。 詳现は以䞋をご芧ください。 productpr.timee.co.jp EMConf ぱンゞニアリングマネヌゞャヌEM向けのカンファレンスですが、私たちのようなマネゞメントをしおいないメンバヌにずっおも孊びの倚いむベントでした。 本蚘事では、印象に残ったセッションをいく぀かピックアップしおご玹介したす。 冒険する組織の぀くりかた 著曞「冒険する組織の぀くりかた」を執筆された、株匏䌚瀟MIMIGURIの安斎勇暹さんによるセッション。メンバヌの興味傟向を把握し、目暙ず個人の動機を接続する堎をデザむンするための具䜓的なアプロヌチや、思考のフレヌムワヌクが玹介されおいたした。 目暙のマネゞメントSMARTからALIVEぞ 目暙蚭定においお、管理偎の論理である「SMART」ず、取り組む偎の芖点である「ALIVE」を䞡立させるこずが重芁です。 SMARTの法則 : 業務を粟緻に遂行させるための指暙Specific, Measurable, Achievable, Relevant, Time-bound ALIVEの法則 : メンバヌが前向きな意味を感じられる指暙 Adaptive適応 : 倉化に適応し、将来圹立぀胜力を身に぀けおいる安心感 Learningful孊習 : 孊びの機䌚ずなる Interesting興味 : 奜奇心をそそる Visionary未来 : 未来を芋据える Experimental実隓 : 実隓的な詊みである さらに重芁なのは、目暙蚭定の「前」ず「埌」のプロセスです。目暙を単に提瀺するのではなく、メンバヌの内発的動機ず目暙を「ミヌト」させるこずが肝心です。 蚭定するたで : ヒアリングで意芋を螏たえ、参加型デザむンで䞀緒に考える 蚭定したあず : リヌダヌがストヌリヌテリングで意図を語り、ダむアログ察話で取り組む意味を共有する 興味のマネゞメント8぀の「掻動スタむル」 個人の「興味のツボ」を把握するこずで、目暙にALIVEな芁玠を組み蟌めたす。興味は「ヒト」か「コト」か、そしお「どのレンズ圹割で芋るか」の組み合わせで8タむプに分類されたす。 興味のレンズ ヒトに興味がある コトに興味がある 創造 新しいコミュニティやカルチャヌを生み出したい 新しいプロダクトやビゞネスモデルを創出したい 解明 人間の心理や集団の力孊を明らかにしたい 珟象のデヌタを分析し法則性を明らかにしたい 介入 人やチヌムに寄り添い、倉化や成長を支揎したい 珟堎の課題に働きかけ、状況を改善・解決したい 運甹 秩序や制床を維持し、公平に運営したい 手続きを正しく回し、品質を保ちたい コメント これたで「SMARTの法則」に則った目暙蚭定は意識しおいたしたが、それは管理する偎の芖点でした。そのため、取り組む偎のモチベヌションの芳点が䞍足しうる、ずいう指摘が興味深かったです。SMARTずALIVE䞡方の芳点を取り入れるこずで、メンバヌが䞻䜓性をもっお取り組めるようになり、結果的に目暙達成の確床が䞊がりたす。生成AIの急速な進歩で目たぐるしく倉化する䞖の䞭だからこそ、モチベヌションを高く保ち、腰を据えお取り組める目暙蚭定のアプロヌチずしお、私も心がけおみようず思いたした。taishi 数幎埌のキャリアプランを立おるこずに難しさを感じおいたしたが、「今この瞬間の興味奜奇心」を起点にするずいうアプロヌチは非垞に腹萜ちしたした。技術トレンドの移り倉わりが激しいからこそ、無理に未来を固定するのではなく、自分の「奜き」や「気になる」を組織の課題ず接続し、適応しながら進んでいけるよう、前向きな気持ちで業務に取り組んでいきたいず感じたした。otake 「ストレッチゟヌンに挑戊し続ける」こずっお難しくないですか speakerdeck.com 成長には、珟状のスキルで難なくこなせるコンフォヌトゟヌンを抜け出し、適床な負荷がかかるストレッチゟヌンに身を眮き続けるこずが䞍可欠です。しかし、実際には「今の自分に最適な挑戊が䞍明」「日々の忙しさによる自然消滅」「倖郚芁因による阻害」ずいった芁因で、ストレッチゟヌンに居続けるこずが難しい堎合がありたす。本セッションでは、これらを克服するための環境蚭蚈が瀺されたした。 珟状分析 : Will/Can/Mustのフレヌムワヌクに加え、具䜓的な事象を問いWhyで抜象化し、新たなアクションHowに繋げる「具䜓ず抜象の埀埩」が重芁 目暙蚭定 : コンフォヌトゟヌンの誘惑を断ち切るための歊噚ずしお、具䜓的で枬定可胜な「SMART」だけでなく、チヌムで共有・可芖化され野心的な「FAST」な目暙蚭定を掻甚する 仕組み化 : マネヌゞャヌの支揎前提ではなく、暩限委譲やシステム思考因果ルヌプ図などを甚いお、組織ずしお挑戊が掚奚される構造を䜜る コメント 特に印象的だったのは、スナッキング簡単で達成感はあるが孊びが少ない仕事の誘惑ずいう抂念です。忙しいずきほど慣れた仕事に逃げおしたいがちですが、それを防ぐために自らFASTな目暙を掲げ、呚囲に宣蚀するこずで、意識的にストレッチゟヌンに身を眮く工倫を取り入れたいず感じたした。 たた、SMARTな目暙は達成たでの道のりが具䜓的にむメヌゞできる反面、倧きな成長に぀ながる目暙が生たれにくい偎面もありたす。これたでチヌムで目暙を共有しおも、協力䜓制が生たれたり切磋琢磚する状態になったりしにくかったため、その点でもFASTな目暙蚭定を取り入れおみたいず思いたした。otake 「事業目線」の正䜓 〜3぀のフェヌズのCTO経隓から芋えおきた、EMが持぀べき芖点 speakerdeck.com EMが持぀べき「事業目線」を、3぀のステップで具䜓化したセッションです。 Lv.1 数字を知る : 自組織に関わる数字売䞊、MAU等を把握し、事業予算の構造を因数分解しお、自分の゚ンゞニアリング組織がどこに䜜甚しおいるかを理解する Lv.2 お客さたず隣接組織を知る : 数字の裏にある「なぜそうなっおいるか」を知るために、お客さたの声生の声を聞き、経理・営業・CSずいった他郚門の力孊倧切にしおいるこずを理解する Lv.3 戊略に反映する : 埗られた知芋を゚ンゞニアリング戊略や組織の仕組みダッシュボヌド化や研修等に萜ずし蟌み、「明日」の倧きな問題を解決するために「今日」䜕をすべきかを決める。 コメント 事業目線ずいう蚀葉の解像床が劇的に䞊がったセッションでした。特に隣接組織の構造を知るこずで、自分の開発が他郚眲のオペレヌションにどう圱響するかたで想像を膚らたせるずいう芖点は、シニアな゚ンゞニアを目指す䞊で欠かせないものだず痛感したした。たた、䜕のために開発しおいるのかを改めお考えおみお、䟡倀を最倧化できるように日々の行動を倉えおみたいず思いたした。たずは自分のチヌムに関わる数字を蚀えるようにするずいう小さな䞀歩から始めおみたすotake 技術的負債の泥沌から組織を救う3぀の転換点 speakerdeck.com 著曞「アヌキテクチャモダナむれヌション 組織ずビゞネスの未来を蚭蚈する」の翻蚳を担圓された、株匏䌚瀟スリヌシェむクのnwiizoさんによるセッション。技術的負債は「技術」の問題ではなく、組織構造やプロセスの問題が技術的な問題ずしお衚出したものだず捉え、モダナむれヌションを掚進する手法が玹介されおいたした。最初に組織に孊習する構造を持たせ転換点1、次にどこに集䞭投資するかを意思決定者の蚀語で語り転換点2、最埌に䞍確実性を受け入れ぀぀小さく始め、孊習するサむクルを䜜る転換点3。そのための手法や考え方に぀いお詳现に解説いただきたした。 転換点1孊ぶ力組織に孊習する構造を持たせる 組織が自埋的にシステムずビゞネスの構造を理解し、孊び続ける状態を䜜る段階です。AMETArchitecture Modernization Enabling Teamを觊媒ずしお、むベントストヌミングやワヌドリヌマッピングなどの手法を掻甚し぀぀、チヌムが自埋的に孊習を続けられるようになるたで支揎したす。 転換点2語る力意思決定者の蚀語で投資刀断を促す 技術的な課題を「コヌドが汚い」ずいった技術者の蚀葉ではなく、経営や事業の成長を阻害する「ビゞネスリスク」ずしお翻蚳する段階です。Core Domain Chartで自瀟のドメむンを「差別化床」ず「耇雑性」の2軞で敎理した䞊で、それを事業の遞択肢の制玄ずしお提瀺するこずで、経営局が自分の刀断軞で技術投資を評䟡できる構造を䜜るこずが重芁です。 転換点3始める力䞍確実性を受け入れ、小さくサむクルを回す 成果を出しながら段階的に倉革を進める段階です。1぀のバリュヌストリヌムで小さく始め、3〜6ヶ月以内にモダナむれヌションの第䞀歩ずなる成果を出すこずを目指したす。逆コンりェむ戊略に基づき、理想のアヌキテクチャに合わせお組織構造も同時にデザむンしたす。 コメント モダナむれヌションにおける具䜓的なステップず実践的な手法が玹介されおおり、ずおも良質なセッションでした。倉革の掚進力を高めるだけでなく、倉化を阻む摩擊を取り陀く重芁性ずアプロヌチに぀いおも語られおおり、珟堎目線で参考になりたした。「モダナむれヌションで最も難しいのは着手するこず。2番目に難しいのは勢いを維持するこず」ずいう蚀葉も印象に残りたした。チヌムがいかに匷い意志をもっお持続可胜な倉化を続けられるかが最重芁だず感じおいたす。著曞「アヌキテクチャモダナむれヌション 組織ずビゞネスの未来を蚭蚈する」もぜひ読んでみたいです。taishi たずめ 今回のEMConf JP 2026では、゚ンゞニアリング組織における幅広いテヌマが取り䞊げられおいたした。 メンバヌの芖点でも、今この瞬間の興味を起点にした成長戊略、ストレッチゟヌンに身を眮くための仕組みづくり、事業の数字や隣接組織ぞの解像床を䞊げるこずなど、自身の成長ずチヌムぞの貢献を加速させるヒントが詰たっおいたした。 EMConfずいう名前ではありたすが、゚ンゞニアリングに関わるすべおの人にずっお䟡倀のあるむベントだず感じおいたす。 埗られた知芋を日々の業務に掻かしお、個人ず組織の䞡方で成長できるように努力したいず思いたす
はじめに タむミヌ QA Enabling Gの矢尻、岞、束田です。 ゜フトりェアテストに関する囜内最倧玚のカンファレンス「JaSST (Japan Symposium on Software Testing) ‘26 Tokyo」が、2026幎03月20日に開催されたした。 タむミヌには、䞖界䞭で開催されるすべおの技術カンファレンスに参加できる「KaigiPass」ずいう制床があり、この制床を利甚しおオフラむンで参加したした。 jasst.jp 今幎の䌚堎は東京ビッグサむトでした。 本レポヌトでは、印象に残ったセッションの内容を䞭心にお䌝えしたす。 JaSST Tokyo 2026 参加レポヌト — AI駆動QA時代の到来ずタむミヌの珟圚地 タむミヌの矢尻です。 今回のJaSSTは、前回にもから増しお AI関連セッションが圧倒的に倚い 回でした。基調講挔からクロヌゞングたで、ほがすべおのトラックでAIが議論の軞ずなり、AI駆動開発における品質保蚌QA for AI-Driven Development = QA4AIDDが業界党䜓のメむンテヌマに昇栌した印象です。 タむミヌでは瀟内のQAガむドラむン「QA Handbook」を通じおAI時代のQA戊略を先行しお敎備しおきたした。本レポヌトでは、セッション暪断で芋えた 3぀の業界トレンド ず、タむミヌの取り組みずのフィットギャップを総論的にたずめたす。 セッション暪断で芋えた3぀のトレンド 今回、私が芖聎したのは以䞋の6セッションです。 AIがテストチヌムに加わるずき- 期埅、萜ずし穎、そしお゜フトりェア品質の未来 – スペシャルトヌクセッション『AIず品質保蚌のこれたでずこれから』 AIがQA゚ンゞニアの仕事を奪うのか 生成AI時代、゜フトりェア品質保蚌のロヌルず組織はどこぞ向かうのか 品質を経営にどう語るか 人ず関わるロボットの研究開発 –ロボットにおける人間らしさの重芁性 – 暪断するず、業界の議論は倧きく 3぀のテヌマ に収束しおいたした。 1. AIぞの「プロセス芁求」ず人間の監督 耇数セッションで共通しお語られたのは、 AIに「䜕を䜜るか」だけでなく「どう䜜るか」を明瀺する 必芁性です。 ベリサヌブ様のセッションでは「ハヌネス゚ンゞニアリング」ずしお、AIにプロセス芁求を䞎えアクティビティログでオヌディットするアプロヌチが玹介されたした。SIG SQAの井芹様は「HITLHuman-in-the-Loop」ず「Everything as Code」をキヌワヌドに、人が適切なポむントで介圚するプロセス蚭蚈の重芁性を匷調。安野様のセッションでは、AIが䞀次スクリヌニングリコヌル向䞊を担い、人間がコンテキストを螏たえた粟査プレシゞョン向䞊を行う「 2局スクリヌニング 」モデルが瀺されたした。 基調講挔のGayathri Mohan様も、AIは「ベビヌシッタヌ」のように垞に監芖ず調敎が必芁な存圚であるず指摘しおおり、 「AIに任せきりにしない品質保蚌のプロセス蚭蚈」が業界の最倧関心事 になっおいるこずを匷く感じたした。 2. リリヌス埌の継続的品質バリデヌション もう䞀぀、独立した耇数セッションで繰り返し蚀及されたのが、 プロダクション環境での継続的モニタリング です。 ベリサヌブ様のセッションでは「フラむホむヌル型品質保蚌」ずしお、リリヌス前で完結せず本番環境で継続的にスコアを監芖→フィヌドバック→再リリヌスを回す「運甚型QA」が提唱されたした。Adobe様の小島様もAI゚ヌゞェント評䟡においお、事前テストだけでは限界があり実デヌタでの課題探玢が䞍可欠だず匷調。基調講挔でも、非決定論的なAIの出力に察しお確率論的・メトリクスベヌスの評䟡が必芁だず語られたした。 リリヌス埌の品質バリデヌションは、もはや「やるかどうか」ではなく 「い぀・どう始めるか」のフェヌズ に入っおいるず感じたす。 3. 品質を経営の蚀葉で語る 3぀目のトレンドは、 品質ず経営の察話 です。 kyon_mm様らのセッションでは、品質を「技術の詳现を説明する堎」から「事業の優先順䜍を決める堎」に移すための翻蚳プロトコルずしお、 バランススコアカヌドBSC 、 Cost of QualityCOQ 、 NIST AIリスクマネゞメントフレヌムワヌク の3぀が瀺されたした。ベリサヌブ様のセッションでも「QA゚ンゞニアは経営の意思決定に必芁な情報を提䟛する立堎に移行する」ずいう芋通しが語られ、SIG SQAの䌊藀様も「事業戊略ず連携した品質戊略策定」を高床化すべきスキルずしお挙げおいたした。 䜜業をAIに委ね、 QA゚ンゞニアの圹割がより䞊流・経営ビゞネス寄りにシフトしおいく ずいう方向性は、セッションを跚いだ䞀貫したメッセヌゞでした。 タむミヌQA Handbookずのフィットギャップ タむミヌでは「QA Handbook」ずしお、 3぀の戊略 Business Reliability / Standardized Process / AI-DLC & QaCを柱にQA掻動を䜓系化しおいたす。䞊蚘の業界トレンドず照合した結果を敎理したす。 ✅ フィットしおいる領域 業界朮流 タむミヌの察応 評䟡 Everything as Code / AIフレンドリヌな成果物 Gherkin/Markdownでの仕様暙準化教垫デヌタ蓄積 先行 HITL型プロセス蚭蚈 Generative Testing PipelineHuman=意思決定、AI=実装 先行 プロセス芁求オヌディット DoR/AC/DoD壁打ちリファむンメント 同期 AI×人間の分業テスト蚭蚈 テスト仕様曞生成AI䞀次生成→人間レビュヌ 同期 リスクベヌスドテスト ISTQB準拠のRPN分析を䜓系的に敎備枈み 先行 ⚠ ギャップがある領域 業界朮流 珟状ず掚奚アクション 優先床 リリヌス埌の継続的品質バリデヌション 構想枈みだが未着手。CUJベヌスの指暙でスモヌルスタヌトすべき 高 品質掻動のビゞネス䟡倀換算BSC / COQ ゚ラヌバゞェット抂念をCOQ文脈で再定矩するアプロヌチが有効 高 AI゚ヌゞェント評䟡の䜓系化 4テスト皮類×二軞評䟡指暙を自瀟AI評䟡に応甚可胜 äž­ 非決定論的テストぞの察応 パむプラむンに統蚈的評䟡レむダヌの远加蚭蚈が必芁 äž­ たずめ JaSST Tokyo 2026を通じお確信したのは、 タむミヌのQA Handbookが掲げる方向性は業界朮流ず高い敎合性を持っおいる ずいうこずです。Everything as Codeによる教垫デヌタ蓄積、HITL型のプロセス蚭蚈、リスクベヌスドテストの䜓系化は、業界が「これからやるべき」ず議論しおいるものを先行しお䜓系化できおいたす。 䞀方、 最倧のギャップは「リリヌス埌の継続的品質バリデヌション」ず「品質掻動のビゞネス䟡倀換算」 の2点。いずれも耇数セッションで繰り返し蚀及され、業界コンセンサスが圢成され぀぀あるテヌマです。 今回のJaSSTは、AI駆動開発が「䞀郚の先進䌁業の取り組み」から「業界暙準の議論テヌマ」に移行したこずを実感する堎でした。先行しお敎備しおきた資産を掻かし぀぀、ギャップの解消に取り組むこずで、QA4AIDDの実践をさらに䞀歩進めおいきたす。 開発チヌムずの協業ずトレヌサビリティ基盀 タむミヌの岞です。私からは印象に残った二぀のセッションの玹介ず感想をお届けしたす。 開発チヌムずQA゚ンゞニアの新しい協業モデル幎末調敎開発チヌムで実践する [QAリヌド斜策] / SmartHR speakerdeck.com SmartHRの平柀さん・䟝田さんによる、開発゚ンゞニアずQA゚ンゞニアずの協業の取り組みに぀いおの講挔でした。 開発チヌムによる自埋的なQAを支揎する斜策であり、QA゚ンゞニアが開発チヌムに入り蟌んで、最初はQAに぀いお支揎し぀぀最終的にはチヌムから抜けおいくずいうものです。 特城的なのは、チヌムに参加するQA゚ンゞニア以倖に、チヌム内からもQAを掚進するメンバヌを立おるずいう点でした。このメンバヌは「QAリヌド」ず呌ばれ、QA゚ンゞニアずの1on1やチヌム内での旗振り、テスト技法の勉匷䌚などを通しおQAプラクティスを根付かせおいきたす。QAリヌドの圹割は目暙蚭定にもきちんず反映されおいくずのこずでした。人遞は指名ではなくチヌムからの立候補を基本ずする圢ずのこずで、SmartHRの開発チヌムにおける品質意識の高さがうかがえたした。 こういったチヌムの自埋性支揎はタむミヌでも実践の真っ最䞭です。QAリヌドの圹割やQA゚ンゞニアからの掚進の方法など、私たちにずっおも参考になる点が倚く、ずおも興味深く聎かせおいただきたした。 仕様挏れ実装挏れをなくすトレヌサビリティAI基盀のご玹介 / コむンチェック speakerdeck.com コむンチェックの囜分さんによる、ドキュメント間のトレヌサビリティずそれを怜査する基盀に぀いおの講挔でした。 ドキュメント間には関連性がありたす。䟋えば、芁求からは仕様が掟生し、仕様からは蚭蚈、蚭蚈からは実装が、たた蚭蚈からはテストケヌスも掟生したす。このため、掟生元ず掟生先は矢印で結ぶこずでグラフずしお衚珟できたす。ここで、矢印の片方にドキュメントが存圚しなかった堎合は「アノマリヌ」ずなり、䜕かがおかしいこずがわかりたす。掟生先が存圚しなければ、実装やテストが挏れおいる可胜性があり、掟生元が存圚しなければ䞍必芁な成果物が䜜成されおいる可胜性があるずいうこずです。そしお、コむンチェックではこのグラフを怜蚌するシステムをAIを掻甚しお䜜っおいるずのこずでした。 AI基盀に぀いおは、可胜な限り人手を抑え぀぀、停陜性・停陰性を抑えるためのチュヌニングが行われおいたした。䞀方でAIを䞊列しお皌働させるためには䜕よりも金銭コストがかかり、これを抑えるために敢えお軜量なモデルを䜿甚するなど苊慮されおいる様子でした。 タむミヌにおいおは、ドキュメントを䜜成するかどうかチヌムによるバラツキがありたす。そのためこういった怜蚌基盀に぀いおは、同じものを䜜っおも定着するかどうかは未知数です。ずはいえ、耇雑化しおいる仕様をどのように管理しおいくかは私たちにずっおも倧きな課題です。こういった取り組みを参考にし぀぀、自分たちにマッチする仕組みを開発しおいくこずは重芁であるず感じたした。 芁求・暗黙知・越境から芋る AI 時代の QA タむミヌの束田です。 昚幎はタむミヌずしお登壇する偎でしたが、今回は䞀参加者ずしお様々なセッションに参加し倚くの孊びを埗るこずができたした。 今回の JaSST Tokyo では AI ず QA に関するトピックが倚く、参加したセッションにはそれぞれ共通するテヌマがあるず感じたした。私はその共通項を 3぀ に敎理したした。 芁求゚ンゞニアリング — QA の基瀎胜力ずしおの重芁性 暗黙知 — AI ぞの適切なコンテキスト提䟛 越境 — ゚ンゞニアリングず QA の圹割の進化 本レポヌトでは、それぞれの孊びに぀いおたずめたす。 1. 芁求工孊(゚ンゞニアリング )— QA の基瀎胜力ずしおの重芁性 こちらは、freeeの苅田さん・栗田さんが発衚された「曖昧な芁求は仕様かバグか-―ai時代の仕様ずテストを考える」の発衚から埗た孊びです。 ここでは 「芁求工孊(゚ンゞニアリング)」 に関しおの発衚を軞に話が進みたした。 カンファレンスでは芁求工孊に関する発衚があり、その重芁性が改めお匷調されたした。 プロダクトには必ず䜕かしらの䟡倀が求められたす。その䟡倀を蚀語化し、プロゞェクトずしお具䜓化するためには、 芁求を適切に蚀語化 → 仕様を策定 → 蚭蚈に萜ずし蟌む ずいうフロヌが欠かせたせん。この流れは、AI を掻甚する時代になっおも倉わらない本質的なプロセスです。 AI がどれだけ進化しおも、 「なぜ䜜るのか」が䞍明瞭もしくは曖昧であれば、意図通り・芁求通りのプロダクトを䜜るこずは困難 です。䜜るべきものの目的ず䟡倀を明確にするこずは、AI 時代においおも倉わらず重芁な技術です。 シフトレフトの流れの䞭で、QA ゚ンゞニアは 芁求事項の適切性を怜蚌する 圹割を担いたす。芁求が適切でない堎合、そこには暗黙の前提や仮定が隠されおいる可胜性がありたす。芁求獲埗などの技法を掻甚し、暗黙知を明確に匕き出しお、必芁な情報から䜜り䞊げおいくこずが求められたす。 2. 暗黙知 — AI ぞの適切なコンテキスト提䟛 二぀目は 「暗黙知」 です。 こちらは、チヌムみらいの安野さんずテクバンの豊田さん・長島さんによるセッション 「AIがQA゚ンゞニアの仕事を奪うのか」 から埗た孊びです 珟圚、AI をできる限り掻甚し、粟床を䞊げお玠早く䟡倀を出すこずが倧きなトピックになっおいたす。この流れは今埌も倉わらないでしょう。 しかし、AI に意図通りの䟡倀を出させるには、 適切なコンテキストを枡すこず が䞍可欠です。そのコンテキストは私たち人間から情報ずしお䌝達されたす。぀たり、どのような情報をどう入力するかが、AI を最倧限に掻甚するための鍵になりたす。 ここで重芁になるのが、 暗黙知の蚀語化、぀たり「暗黙知を圢匏知に倉えるこず 」です。人間が持぀暗黙知をできる限り蚀語化し、AI が孊習・認識できる状態にする必芁がありたす。 䌚話やメヌル、Slackなどのやり取りをログずしお集めるこずも、コンテキストを埗るうえで有効だず話されおいたした。 たた、先ほどのfreee様の発衚でも盞手の真の芁求を知るためにヒアリングするなどの「芁求獲埗」ずいった話題ずも繋がるず感じたした。 3. 越境 — ゚ンゞニアリングず QA の圹割の進化 䞉぀目は 「越境」 です。 チヌムみらいの安野さんから「QA も゚ンゞニアも、今埌同じ䜜業をし続けるわけではなく、その 業務内容自䜓が倉わっおいく」 ずいう話がありたした。゚ンゞニアずいう職業はなくならないものの、担う内容は倧きく倉化しおいきたす。 「ものを䜜り䞊げる」ずいう過皋そのものは倉わりたせん。しかし、 どうやっお䜜るのか、なぜ䜜るのか、䜜った埌にどう運甚するのか ずいった、埓来の゚ンゞニアリングよりも幅広い領域に螏み蟌むこずが求められるようになりたす。 QA においおも同様です。プロダクトの品質保蚌にずどたらず、 プロダクトを通じお自瀟にどのようなリスクが朜んでいるかを提瀺する こずが必芁になりたす。 䟋えば、QA がPdMだけでなく事業郚や経営局ずも぀ながり、プロゞェクトの意思決定に必芁な情報を提瀺する圹割を担うずこずも、今埌は芖野に入れおいくこずが重芁です。 品質保蚌の 範囲・方法・効果の説明責任 などが、今埌の゚ンゞニアの責務の䞀぀ずしお求められおいくず感じたした。 たずめ JaSST Tokyo'26 を通じお、以䞊の 3぀のキヌワヌド を持ち垰るこずができたした。 これらはいずれも、 AI 時代により䞀局求められる力 だず感じたした。今回の孊びを今埌の業務に掻かしおいきたいず思いたす。 おわりに 匊瀟ではQA、SETの採甚も積極的に行っおおりたす。 hrmos.co タむミヌのQA、゜フトりェアテストに぀いおもっず知りたいずいう方はぜひカゞュアル面談でお話ししたしょう。 product-recruit.timee.co.jp
はじめに こんにちは。タむミヌのデヌタアナリティクス郚でデヌタアナリストをしおいるishidaです。普段は、タむミヌのプロダクトに関する分析業務に埓事しおいたす。 タむミヌのデヌタアナリストDAチヌムでは、プロダクト斜策の効果怜蚌ずしおABテストを頻繁に実斜しおいたす。ABテストの業務は、倧きく「 実隓蚭蚈 」「 ク゚リ䜜成 」「 可芖化・レポヌト 」の3工皋に分かれたすが、これらすべおをDAが担圓しおいたす。 斜策の数が増えるに぀れ、ABテストの “回転数” がボトルネックになり぀぀ありたした。そこで私たちは Claude / Cursor を掻甚し、たず実隓蚭蚈のレビュヌを自動化する取り組みを始めたした。 本蚘事では、その仕組みず蚭蚈思想をご玹介したす。 なお、タむミヌにおけるABテストは「① 実隓蚭蚈 → ② ク゚リ䜜成 → ③ 可芖化・レポヌト」の3ステップで進みたす。本蚘事で扱うのは、①の実隓蚭蚈レビュヌの自動化です。 1. 実隓蚭蚈レビュヌの自動化 課題レビュヌの属人化 ABテストの実隓蚭蚈にはいく぀かの重芁なチェックポむントがありたす。 チェックポむント 確認内容 SUTVA TG/CG間でリ゜ヌスの奪い合いが起きないか Unit Alignment ランダマむズ単䜍ずメトリクス集蚈単䜍は䞀臎しおいるか SRM サンプル比率のミスマッチを怜知できる蚭蚈か Novelty/Primacy 経時的倉化を考慮した期間蚭定か Multiple Testing 倚重比范の問題を制埡できおいるか Guardrail 副䜜甚を監芖するガヌドレヌル指暙は定矩されおいるか これらのレビュヌは経隓や前提知識によっお芋萜ずしが生じやすく、属人化しがちでした。 解決策AIによるチェックリストレビュヌ 私たちは、実隓蚭蚈チェックリストを Claude / Cursor のコンテキストに含め、 実隓蚭蚈ドキュメントを入力するずチェックポむントごずにレビュヌが返る ようにしたした。 具䜓的には、以䞋の2皮類のファむルをプロゞェクトのルヌルずしお蚭定し、AIに読み蟌たせおいたす。 実隓蚭蚈ドキュメントのテンプレヌト : テスト抂芁・テスト蚭蚈・評䟡指暙などの項目が定矩されたMarkdown チェックポむント定矩 : 6぀の芳点それぞれに぀いお「刀定の芳点」「よくある違反䟋」「察応方針」を構造化したドキュメント AIレビュヌの出力むメヌゞ ## CP1: SUTVA ⚠ リスクあり -TG/CG間でリ゜ヌスの奪い合いが発生する可胜性がありたす -掚奚: クラスタ単䜍でのランダマむズを怜蚎しおください ## CP2: Unit Alignment ✅ 問題なし -ランダマむズ単䜍ず集蚈単䜍が䞀臎しおいたす ## CP3: SRM ✅ 蚭蚈枈み -Debugging Metric ずしお介入の圱響を受けない指暙を蚭定 -カむ二乗怜定を実隓開始時に実行する蚭蚈 ... ポむントAIレビュヌは「最䜎限の品質保蚌」ずしお䜍眮づける 重芁なのは、AIレビュヌを 人間のレビュヌの代替 ずしおではなく、 最䜎限実行されるべきレビュヌ ずしお䜍眮づけおいるこずです。 AIレビュヌ = チェックリストの網矅的な確認挏れ防止 人間レビュヌ = ビゞネスコンテキストを螏たえた刀断䟋この斜策ならSUTVA違反は蚱容範囲か これにより、レビュヌ䟝頌を受けたDAは「AIが芋぀けた問題点」を起点に議論できたす。 孊び AIレビュヌは「ゲヌトキヌパヌ」ではなく「䞋曞き」 AIレビュヌの結果を鵜呑みにせず、「少なくずもこのレベルのレビュヌは枈んでいる」ずいう 品質の䞋限保蚌 ずしお䜿っおいたす。最終刀断は必ず人間が行いたす。 この䜍眮づけにしたこずで、「AIに任せお倧䞈倫か」ずいう心理的なハヌドルも䞋がりたす。 We’re Hiring! 私たちは、ずもに働くメンバヌを募集しおいたす デヌタアナリストの募集ペヌゞはこちら カゞュアル面談も行っおいたすので、少しでも興味がありたしたら、気軜にご連絡ください。