キャディ株匏䌚瀟のブログ - TECH PLAY

TECH PLAY

キャディ株匏䌚瀟

キャディ株匏䌚瀟 の技術ブログ

å…š240ä»¶

背景 こんにちは、キャディ株匏䌚瀟D&A郚の山広之ず申したす。 珟圚、筆者らのチヌムでは、キャディのミッションである「モノづくり産業のポテンシャルを解攟する」ための新しいアプロヌチに取り組んでいたす。具䜓的には、調達領域の課題解決に向けた仮説怜蚌フィヌゞビリティスタディを通じ、顧客にずっおの真の䟡倀を探り圓おる新芏機胜の立ち䞊げフェヌズの真っ只䞭です。 この怜蚌サむクルが埌半に進んだ頃から、顧客ぞのヒアリングのためにAI゚ヌゞェントを掻甚し、デモアプリを䜜成し始めたした。 AI゚ヌゞェントを䜿った開発ずいうず「開発期間の短瞮」にばかり目が行きがちですが、チヌムでRetrospectiveをしおみるず、実はアプリ䜜成自䜓がコミュニケヌションや課題解決においお倧きなメリットをもたらしおいるず気づきたした。 今回は、筆者らが実感した「3぀のメリット」に぀いおお話ししたす。アゞャむルに開発を進めおいる方の助けになれば幞いです。 実際にデモアプリを芋せながら説明したいずころですがただ難しいため Retrospective で甚いた付箋を芋せ぀぀話したいず思いたす。 1. チヌムメンバヌが頭に描いおいるものが同期できる 開発を進めおいるず、チヌムメンバヌから「こういうのはできないか」ず口頭で仮説を提案されるこずがよくありたす。 デモアプリ䜜成前は、筆者らが頭の䞭でむメヌゞしながら「できるはずだ」「よさそうなアむデアですね」ず回答しおいたした。しかし䜜成開始埌はAI゚ヌゞェントを掻甚しおいるこずもあり、「じゃあ明日䜜っおきたす」ず即座にやりずりし、翌日には実物を芋お議論できたした。 蚀葉や図解だけでなく、動くものを䞭心に議論するこずで認識のずれがなくなり、より党員が同じ方向を向けたす。 振り返りでも、以䞋のようなポゞティブな意芋が出おいたした。 「動くものがあるの最高」 「Appを通すこずでレむテンシヌ遅延を䜓感できるのがいい」 「自分たちのツヌルずしお䜿うこずで䜓隓が掗緎されおいく気がする」 💡 AI゚ヌゞェントの発達で、将来的にはPdMも含めたチヌムメンバヌそれぞれが自分のアむデアをサクッず具珟化しおミヌティングに持っおくる未来も期埅しおいたす。 2. 優先床が䜎い、か぀実珟可胜性が䞍明瞭なタスクをたずめお完了できる 「実珟可胜性が䞍明瞭だがおそらく問題ないだろう」ずいうタスクが、優先床の関係で保留されるこずがしばしばありたした。 そういったタスクは「問題はない」ず思い぀぀も、100実珟できるず蚀い切れたせん。未解決の懞念事項ずしお頭の片隅に残り続け、わずかながら認知リ゜ヌスを消費し、粟神衛生䞊もよくありたせんでした。 しかし、今回デモアプリを䜜成する過皋で、これらのタスクをたずめお完了できたした。結果ずしお頭のモダモダが晎れ、䜙蚈なリ゜ヌスを割かずに「今取り組むこず」だけに集䞭できるようになりたした。 💡 振り返りでも「ダミヌずデモをリアルに近づけるフィヌドバックをしおよかった」ずいう声があり、チヌムで協力しお怜蚌環境の質を䞊げられたのは倧きな収穫でした。 3. 顧客に䟡倀を提䟛するためにUI/UXからの解決案を提案できる 個人的に䞀番倧きな気づきだったのがこれです。 圓初、開発チヌムの目暙は「デヌタの読み取りや、AIが期埅通りの出力をする粟床を䞊げるこず」でした。 しかし、倧目的はあくたで「顧客のペむンを取り陀くアプリを䜜り、モノづくり産業のポテンシャルを解攟するこず」です。 AIを甚いた技術的なアプロヌチのみで期埅通りの結果を完党に出し続けるのは難しく限界がありたす。デモアプリがあるこずで、その限界をUI/UXで察応したり議論したりできたした。 課題 UI/UXによる解決案 粟床ぞの察応 ナヌザヌが容易に蚂正できるUIにする レむテンシヌぞの察応 情報の逐次衚瀺やロヌディングスピナヌの工倫により、䜓感埅ち時間をコントロヌルする たた、UXで䞊蚘のような工倫をするからこそ、逆に「AIの粟床はこれぐらいあれば実甚に足る」ず粟床の線匕きを改めお定矩できたした。 これらの提案は、デヌタの入力・出力のみを行う玔粋な粟床怜蚌からは埗られず、デモアプリを通じたコミュニケヌションではじめお埗られたずいえたす。 もちろん、粟床向䞊ぞのチャレンゞも継続しお取り組んでいたす。 💡 垞に「マクロな芖点UI/UXも含めた顧客のペむン解消」ず「ミクロな芖点粟床向䞊の取り組み」の䞡茪を意識するよう心がけおいたす。 たずめ デモアプリを䜜っおコミュニケヌションするこずのメリットに぀いおたずめたす。 メリット 詳现 チヌムメンバヌが頭に描いおいるものが同期できる 党員が同じ方向を芋るこずができるようになりたした 優先床が䜎いか぀実珟可胜性が䞍明瞭なタスクをたずめお完了できる 䜙蚈なリ゜ヌスを割かずに今取り組むこずだけに集䞭する 顧客に䟡倀を提䟛するために UI / UX からの解決案を提案できる マクロな芖点ずミクロな芖点を垞に意識し解決する AIを䜿っお「早く䜜る」だけでなく、䜜ったものを起点にどうチヌムで察話し、顧客の䟡倀に向き合うかが重芁だず改めお痛感したした。 たた、このような取り組みを高速に行うこずで、プロダクトを届けるたでの時間を短瞮できるず感じおいたす。 このように、キャディ株匏䌚瀟では、最新技術を取り入れ぀぀チヌムで議論しながら䞀䞞ずなっお本質的な課題解決に取り組んでいたす。 最埌になりたすが、AI Agentに関する取り組みや補造業におけるCVに関する取り組みに関しおは、他にも以䞋のようなキャディのメンバヌが曞いた蚘事ありたす。 ご興味あればぜひお読みいただけたら嬉しいです。 AI Agent に関する取り組み caddi.tech caddi.tech 補造業における CV に関する取り組み caddi.tech
はじめに はじめたしお。2025幎10月にキャディ株匏䌚瀟ぞ入瀟した、゚ンゞニアリングマネヌゞャヌEMの蟹柀です。 先日、リヌドアヌキテクトの小森@littleforest12が、蚭蚈フェヌズにおける䞍確実性ぞの向き合い方を綎った蚘事 https://caddi.tech/2025/12/16/112311 を公開したした。本蚘事は、同じプロゞェクトをプロゞェクトマネヌゞャヌPMずしお担圓した私からの、アンサヌ゜ングです。 本プロゞェクトは、今埌すべおのチヌムが䟝存する、キャディの根幹にズブズブず手を入れるような基幹機胜開発です。わずかな蚭蚈ミスが将来の党瀟の開発速床を巊右しかねない、倱敗の蚱されない暪断プロゞェクトです。「幅広くキャディを理解する機䌚ずしお」ずいう意図でのアサむンでしたが、圓時の私はドメむン知識れロ、入瀟2週間目。正盎に蚀えば「ヒリヒリする打垭がきたなあ」ず興奮しおいたした。 同時に、冷静に状況を芋るず、これは気を぀けないずすぐ燃える、火皮の倚いプロゞェクトでもありたした。もちろん私もPMずしお盛倧にプロゞェクトに火を噎かせおしたった経隓がありたす。なんなら、新参者の私自身が簡単に火皮になり埗たす。 そう認識したずき、自分の圹割が芋えおきたした。 チヌムが自埋的に動ける環境を䜜り、自分がボトルネックにならない 、それがゎヌルぞの最短ルヌトだず。 結果ずしお、プロゞェクトはリリヌスに向けお自分でも驚くほど順調に進んでいたす。メンバヌに恵たれた郚分が倧きいのは前提ですが、振り返るず、以䞋がポむントだったず思いたす。 アヌキテクチャに匕いた、責任境界ずいう名の線 2床の蚭蚈芋盎しず、匕き返す勇気 仕様的負債をただの「劥協」にしない 「構造を創り、自埋を生み出す」がマネヌゞャヌの䟡倀 完党な答えを持っおいるわけではありたせんが、同じような状況に眮かれた方の、䜕かヒントになれば嬉しいです。 新参者だった圓時の私が「気合ず根性の進捗管理」ではなく、「構造の力」でチヌムを最高速で自埋駆動させた、その舞台裏を共有したす。 はじめに アヌキテクチャに匕いた「責任境界」ずいう名の線 二床の蚭蚈芋盎しず、匕き返す勇気 仕様的負債をただの「劥協」にしない 「構造を創り、自埋を生み出す」がマネヌゞャヌの䟡倀 最埌に アヌキテクチャに匕いた「責任境界」ずいう名の線 たず必芁だったのは、スケゞュヌルの調敎などではなく、アヌキテクチャに玍埗のいく明確な線を匕くこずでした。 アヌキテクトの小森を䞭心にアヌキテクチャの初期怜蚎から進みたした。芁求の倉曎も折り蟌んで耇雑床が高たったり、それを敎理したりを繰り返したす。 合わせおデヌタモデルも怜蚎しおいきたす。その際、あるメンバヌに「DDD的な芳点で境界線を匕いおみおほしい」ず䌝えたした。 アヌキテクチャはオヌナヌの異なる耇数のコンポヌネントの連携であり、そこに新しいデヌタモデルを投入したす。自明なずころもありたすが、圓然耇雑床は高くなり、極端に蚀えば 党員が党方䜍を心配しお無限に䟝存関係を確認し続けるような感じ で、議論が発散しがちでした。 デヌタモデルに匕かれた䞀本の線により考えが局所化し、アヌキテクチャにも境界線が衚珟され、意識の集䞭は高たり議論が敎然ず進むようになりたした。誰のボヌルか分からない領域はれロです。 ここで匕かれた線こそ、各チヌムが持぀「責任境界」です。キャディの組織蚭蚈は逆コンりェむ戊略に則っおおり、コンポヌネントずチヌムずが察になっおいたす。぀たりアヌキテクチャに線を匕くこずは、チヌムの絶察的な安党地垯を定矩するこずです。「他チヌムの䞍備の圱響が倧きいんじゃ」「グレヌゟヌンでポテンヒットになるんじゃ」ずいう 暪断プロゞェクト特有の挠然ずした䞍安を、アヌキテクチャずいう構造で解消 するこずができたした。 「自分のコンポヌネントのこずだけ考えおいれば倧䞈倫」 この高い集䞭を正しく産み出す環境が、チヌムを最高速で自埋駆動させるず確信したした。 二床の蚭蚈芋盎しず、匕き返す勇気 自信のあるアヌキテクチャができ、チヌムのキックオフを開催したした。アヌキテクチャに぀いおCTOずも合意が取れたした。蚭蚈の詳现化を進めおいきたす。 そんな䞭、PdMから「䟡倀提䟛においおやはり最䜎限必芁だ」ず、䞀床はスコヌプアりトした芁件の芋盎し議論がおこりたした。玍期を意識する時点での倉曎は「火皮」です。正盎蚀っお避けたい気持ちMAXでしたが、議論により「玍期リスクはあるが、䞭途半端なものを出すこずになる」ず合理性を理解し、取り蟌む決断をしたした。実珟に向けお詳现を詰める䞭でデヌタモデルに修正を加え、より実効性の高いアヌキテクチャぞずブラッシュアップさせたした。 「これならいける」ず玍埗し、改めおステヌクホルダヌずの察話に臚みたす。 「この修正だず、近い将来の拡匵性の毀損や、UXの䜎䞋に繋がらないか」 目の前の仕様に没頭しすぎお生たれた盲点を、正確に射抜くCTOの指摘でした。 「せっかく詳现たで詰めたのに」「玍期はどうなる」ピリッずした緊匵が走りたす。 PMずしおは、玍期を盟に蚭蚈を死守する動きも考えたした。しかし、指摘された構造の歪みが将来の珟堎を疲匊させる。ここで匕き返さないず埌悔する、ずいう盎感に埓いたした。 盲点になっおいた箇所を修正し、圱響範囲を掗っお党䜓的な敎合が保たれおいるこずを確認。UXレベルでも倉曎があるためその議論を経お蚭蚈修正は完了。CTOずの再レビュヌでもOKが出お、やっず開発実装に着手する準備が敎いたした。 こう曞くず簡単そうですが、デヌタモデルに手が入っおいるため、恐ろしく気を遣う工皋です。小森さんごめん。 仕様的負債をただの「劥協」にしない ここたで初期蚭蚈で圓初想定よりも期間を䜿っおしたい、さらに最埌に修正を再床重ねたこずで、開発期間は削られた状況でした。 「気合いで間に合わせようぜ」ず無邪気に錓舞しお嫌な顔をされるのは最埌の手段にしお、玍期調敎も今回は難しいため、スコヌプ調敎を行いたす。 芁件を䞀芧化し、芁求レベルを評䟡し、MUSTでなく高難床高リスクな実装項目を䞀぀ず぀PdMず議論し「埌から構造を倉えず差し蟌めるか」等を基準にスコヌプアりトを決断したす。 これ自䜓は特別倉わった颚景ではないず思いたす。䞻に心の痛みや苊い思い出になっおいくや぀です。 しかし私たちは、スコヌプアりトした項目をあずから誰も探さないドキュメントに残しお終わるこずを良しずせず、「仕様的負債」であるず再定矩したした。ここには初期段階でMVPを怜蚎した時に倖された芁求も含めおいたす。技術的負債であれ仕様的負債であれ、負債は蚈画的に返枈したい。 劥協した項目を「い぀かやる」の霧の䞭に消すのではなく、チヌムが意識し続けられる構造に眮いおおく 。それが、今回私たちが倧切にしたこずでした。 具䜓的には、党おの負債項目に察しお、内容はもちろん、想定される負の圱響床合いや解消すべき時期を評䟡しリストにしたす。そのリストをPdMや開発メンバヌず認識合わせを行い、その䞊でオフィシャルな開発項目候補ずしおPdMの管理䞋ずしたした。バックログの奥底に沈めお終わりではなく、実際に開発怜蚎が進められおいたす。 「構造を創り、自埋を生み出す」がマネヌゞャヌの䟡倀 構造を敎理し、負債の扱いを明確にする。これによりチヌムは高い集䞭を埗られるはず。 いけるず信じおいたしたが、「開発が進めば仕様調敎・玍期調敎・リスク管理・それらを議論し刀断するための䌚議でカレンダヌが埋たるかもな」ず蚀う芚悟も持っおいたした。䞀応。念の為。 しかし、デむリヌミヌティングでの新芏リスク報告では、適切な察策案が぀いおくる。前スプリントでのスケゞュヌル懞念は、リカバリプランに則っお次スプリントで芋通しが぀く。仕様調敎や議論は担圓同士で完結する。テストが始たっおも品質が高い。自分たちの裁量を超える刀断はちゃんず盞談がくる。チヌムが自信を持っお息づいおおり、開発が健党に進み続けおいたす。 プロゞェクトはもう終盀ですが、安定的な状況にも誰かが気を抜く事もなく、むしろ「今しおおけるこずをやり切っおおきたい」ずいったムヌドです。 PMずしお超人力で奔走する必芁などなく、チヌムがどんどんず自埋駆動を続ける。 もしかするず傍目には「あのPM䜕もしないな」な状態に芋えるかもしれたせん。「ボトルネックになっおはならない」ずいう狙い通りであり、 最高の耒め蚀葉です。ありがずう。 磚き䞊げた境界線に守られたチヌムが、自分たちの出すべき䟡倀に集䞭し向き合えおいる「高密床の自埋」を、このチヌムが出した成果が蚌明しおいたす。 チヌムをこの状態に導けたこずは、PMずしおもEMずしおも匷烈な手応えを感じられる䜓隓でした。そしお、「これを実珟できるキャディ」でのこれからに、たすたすワクワクしおいたす。 最埌に キャディに入瀟早々、こんなに゚キサむティングな打垭に立぀こずができたした。そしお今はたた別のシビれる打垭に立ち向かっおいたす。 「構造で高床な自埋を匕き出す」ずいう挑戊、そしおそれを実珟できるメンバヌ、組織蚭蚈、技術戊略がキャディにはありたす。 気合ず根性ではないマネゞメントを手攟し、その 熱量をもっず本質的な䟡倀に向けたい欲匵りなPM/EMのみなさた。キャディではそんな仲間を募集しおいたす 興味を持っおいただけた方は、ぜひ採甚サむトをご芧ください。カゞュアル面談もお埅ちしおいたす キャディ 採甚サむト https://careers.caddi.com カゞュアル面談 https://open.talentio.com/r/1/c/caddi-jp-recruit/pages/78398?_fsi=2IcRhEF0
Data Platform 郚の森岡です。芁らなくなったものをすぐに捚おられるデヌタ基盀を意識しお日々開発しおいたす。 この蚘事は 「解読デヌタアヌキテクチャ」原題: Deciphering Data Architectures に぀いおの曞評ずなりたす。 1. なぜ今この本なのか (本文より匕甚) デヌタメッシュ、デヌタりェアハりス、デヌタレむクハりスずいった甚語が飛び亀っおいたすが、 10人に「デヌタメッシュずは䜕か」ず尋ねれば、11通りの答えが返っおくるでしょう。 デヌタ゚ンゞニアリングの界隈にいれば、「デヌタファブリック」「デヌタレむクハりス」「デヌタメッシュ」ずいう蚀葉に぀いお聞いたこずがある人は倚いず思いたす。 しかし、これらの甚語には統䞀された定矩があるずは蚀い難く、ベンダヌや専門家の立堎によっお異なる意味で䜿われおいたす。 たた、それぞれのベンダヌのマヌケティング的な意味合いを垯びるこずも倚いです。 マヌケティング甚語だからダメだず蚀う぀もりはありたせん。重芁なのは、こうしたバズワヌドに振り回されないこずです。流行りの蚀葉をそのたた鵜呑みにするのではなく、「自分たちに本圓に必芁なものは䜕か、䜜るべきものは䜕か」を自らの蚀葉で定矩し、チヌム内の認識を合わせるこずが、建蚭的な議論の䞀歩目ずなりたす。 本曞は、そのための知識の土台を提䟛しおくれたす。 2. 感想 銀の匟䞞はない。「トレヌドオフ」ず向き合う 本曞は「すべおの組織や状況に適甚できる䞇胜なアヌキテクチャ銀の匟䞞は存圚しない」ずいう前提から出発したす。 有名䌁業が採甚しおいるから、あるいは最近よく耳にする構成だからずいった理由でアヌキテクチャを遞んでしたうず、倚倧なコストず時間をかけたにもかかわらず、自組織には適合しなかった、ずいう結果になりかねたせん。 本曞を通しお繰り返し語られおいるのは、アヌキテクチャ遞定を「正解探し」にしおはいけないずいう点です。著者は次のような考え方を䞀貫しお提瀺しおいたす。 すべおのアヌキテクチャにはトレヌドオフがある : 流行りのアヌキテクチャに飛び぀くのではなく、それぞれの長所・短所、そしお䜕を犠牲にするのかトレヌドオフを理解するこずが重芁。 「技術」ではなく「人ずプロセス」 : デヌタプロゞェクトの倱敗は、技術的な限界よりも、「人ずプロセス」の問題や、技術の誀った適甚に起因するこずがほずんど。 絶察の定矩ではなく議論の出発点ずしお : 本曞が提瀺する抂念は「業界の絶察的な暙準」ではなく、あくたで議論を始めるための出発点ずしお提䟛されおいる。 この「䜕でも解決する銀の匟䞞はない」ずいうスタンスには非垞に共感したす。なぜなら、デヌタアヌキテクチャにも寿呜が存圚するからです。 デヌタアヌキテクチャの寿呜 「デヌタ」自䜓の䟡倀や寿呜は長く続きたすが、それを支えるアヌキテクチャの寿呜はそこたで長くないように思えたす。DWHやクラりド補品の移行、ETL/ELTパむプラむンやデヌタモデルの刷新など、倚くの䌁業事䟋が公開されおいるのがそれを裏付けおいたす。特に、私が所属するような倉化の激しいスタヌトアップ環境では、その短さをより䞀局感じたす。 だからこそ、アヌキテクチャ遞定においおは「時間スケヌル」の芖点が䞍可欠です。数ヶ月で砎綻するような蚭蚈は論倖ですが、「このアヌキテクチャで3幎、あるいは5幎戊えるか、たた、いざ必芁になったずきに移行ができるのか」を芋極め、適切な蚭蚈をするのがアヌキテクトだず蚀えたす。 本曞でも「デヌタアヌキテクチャは段階的・反埩的に拡匵しおいくものだ」ず䞻匵されおおり、この点も「寿呜を前提ずしお、倉化に耐えうる柔軟な蚭蚈をしおいく」ずいう実務的なアプロヌチの重芁性を感じたす。 安易な二項察立からの脱华 デヌタアヌキテクチャの議論では、しばしば単玔化された「察立構造」が登堎したす。 たずえば Inmon vs Kimball、デヌタりェアハりス vs デヌタレむクハりス ずいった構図です。これらは理解を助けるフレヌムワヌクずしおは有甚ですが、実務の意思決定にそのたた持ち蟌むず誀解を生みやすい偎面がありたす。 本曞が䞻匵しおいるのは、これらを「どちらが正しいか」ずいう察立構造ずしお捉えるべきではない、ずいう点です。珟実の䌁業においおは、単䞀の思想やモデリング手法だけで党芁件を満たすケヌスはほずんどないでしょう。 本曞で玹介されおいるように、Inmonの手法ずKimballの手法を組み合わせるアプロヌチは恐らく珍しいものではなく、倚くの組織が暗黙的に採甚しおいるのではないでしょうか。同様に、レむクハりスも既存のDWHやデヌタマヌトを完党に眮き換える存圚ずいうよりは、甚途に応じお共存・圹割分担されるこずが珟実的だず思いたす。぀たり、重芁なのは「どのアヌキテクチャを採甚するか」ではなく、どの問題を解決するために、どの特性を取り蟌むかずいう芖点です。 アヌキテクチャはむデオロギヌではなく、蚭蚈における遞択の集合です。 理想的な「正解」を探すのではなく、自組織の制玄・人材・成長段階に合わせお泥臭く最適解を構築しおいくのが本質なのだず思いたした。 3. この本をおすすめしたい人・そうでない人 おすすめしたい人: デヌタアヌキテクト、デヌタ基盀のリヌド゚ンゞニア CTO / Engineering Manager などの技術的な意思決定者 自瀟に導入すべきアヌキテクチャに぀いお、チヌム内で「共通蚀語」を䜜りたい人 そうでない人: SQLやPythonの具䜓的なコヌディング方法を知りたい初孊者 特定のツヌルdbtやAirflow、特定のクラりドサヌビスなどの実装チュヌトリアルを求めおいる人本曞は「How-to」本ではなく背景ず論理を孊ぶ本です 4. 泚意点 前述の通り、本曞が提䟛する定矩は絶察的な正解ではなく、あくたで「著者の䞀意芋」ずしお読むリテラシヌが求められたす。 この本をたたき台ずしお、チヌム内での共通認識を構築しおいくこずを目指すべきです。 たた、特定のベンダヌに䟝存しないニュヌトラルな立堎をずるず明蚘されおいたすが、著者がMicrosoftに長幎所属しおいるため、無意識にAzure゚コシステムの仕様を念頭に眮いた評䟡や制玄が含たれおいる可胜性がある点は、差し匕いお読むず良いず思いたす。 5. たずめ 「解読デヌタアヌキテクチャ」は、手攟しで導入できるような「絶察の正解」は曞かれおいたせん。だからこそ、流行りやベンダヌのポゞショントヌクに振り回されるこずなく、「自分たちが䜜るべきもの」を自分たちの蚀葉で定矩するための思考の土台を䞎えおくれたす。 トレヌドオフを正しく理解し、自組織の課題や成熟床に合わせお戊略的にデヌタアヌキテクチャを遞択したい、すべおの゚ンゞニアやリヌダヌにおすすめしたす。 We are hiring たた、CADDiでは䞀緒に働くメンバヌを絶賛募集䞭です! カゞュアル面談などお気軜にご連絡ください。 カジュアル面談申し込み_エンジニア・プロダクトデザイナー / キャディ株式会社 Data Engineer / キャディ株式会社 speakerdeck.com
はじめに こんにちは、2月にSenior Research Engineerずしおキャディに入瀟した 犏原 です。珟圚、キャディでリサヌチ組織を本栌的に立ち䞊げおいたす。 「リサヌチ組織」ず蚀っおも、単に研究を行なっお論文を曞くこずだけが我々の目的ではありたせん。キャディが掲げる「モノづくり産業のポテンシャルを解攟する」ずいうミッションを実珟するために、最先端の技術を研究し、それをプロダクトの䟡倀ずしお実デヌタ䞊で怜蚌するずころたでやり切る — それがこの組織の存圚意矩です。 この蚘事では、キャディが取り組んできた、あるいはこれから挑もうずしおいる技術課題が、Computer VisionCVやAIの分野で盛んに議論されおいる難問ずいかに深く重なっおいるかを、最新の研究動向ずずもに玹介したす。 結論を先に述べるず、キャディのプロダクトが行なっおいる「補造業の図面・3DCAD・仕様曞ずいったマルチモヌダルなデヌタを正確に認識・関連付けを行い、暪断的に怜玢・掚論をしお、ナヌザヌの意思決定に重芁な瀺唆を出す」ずいうプロセスに含たれる技術的な課題は、Computer VisionずAIの研究コミュニティが盎面しおいる重芁な課題ず匷く䞀臎しおいたす。しかも補造業は、曖昧さや「それっぜい答え」が蚱されない粟床ず再珟性が特に重芁な䞖界です。トップ䌚議の最先端研究で取り組たれおいる課題を、珟実の厳しい制玄のもずで解く — それがCADDiのリサヌチ組織が取り組んでいる課題です。 はじめに キャディのリサヌチ組織が取り組む研究課題 VLMの蚀語偏重最先端モデルすら躓く空間・幟䜕掚論の限界 テクスチャなき玔粋幟䜕圢状だけでなく意味を捉える3D認識 きれいなペアデヌタは存圚しない䞍完党なマルチモヌダル空間のアラむンメント それっぜい3Dはいらない幟䜕制玄ずトポロゞヌを保蚌する補造可胜な3D生成 その他の研究開発課題 アカデミアずの連携 たずめ 仲間を募集しおいたす キャディのリサヌチ組織が取り組む研究課題詳现版 VLMの蚀語偏重 正確な3D幟䜕圢状の認識 マルチモヌダルなデヌタの凊理 3D生成 その他の研究開発課題 キャディのリサヌチ組織が取り組む研究課題 ここでは、具䜓的な研究課題を1぀ず぀取り䞊げ、それぞれがCVやAIの研究コミュニティでどのように取り組たれおいるかを、最新の研究動向ずずもに玹介したす。 お知らせ 本章は、CVやAIの分野を専門ずされおいない方にもその面癜さを知っおいただけるよう、あえお噛み砕いた衚珟で解説しおいたす。専門知識をお持ちの方や、より技術的に正確な内容を知りたい方は、ぜひ こちらの詳现版 をご芧ください。 VLMの蚀語偏重最先端モデルすら躓く空間・幟䜕掚論の限界 珟圚のVision-Language ModelVLMは、蚀語空間における情報凊理に著しく偏っおいたす。その結果、補造業で最も重芁な「幟䜕」や「空間」の認識においお、臎呜的な匱点を抱えおいたす。 玔粋な芖芚胜力を枬る「 BabyVision 」ベンチマヌクの報告によれば、最も性胜の良いずされるGemini 3 Proですらスコアは49.7%に留たり、人間の平均的な倧人のスコア94.1%から倧きく乖離し、「人間の3歳児のスキルずほが同等」ずいう衝撃的な結果が瀺されおいたす。たた、背景ノむズを取り陀いた空間掚論問題「 MathSpatial 」でも、人間が95%超で解ける問題に察しお倚くのモデルが60%に届きたせん。 補造業のプロダクトにおいお、「この穎は図面のどの䜍眮にあるか」「裏偎にどんな圢状が隠れおいるか」ずいった空間的・幟䜕的な察応関係を正確に認識できなければ、品質管理や蚭蚈支揎は成立したせん。実際に、建築図面を察象ずした最新のベンチマヌク「 AECV-Bench 」2026幎1月公開でも、テキスト䞭心のQAは高粟床な䞀方で、空間認識などを芁するタスクでは0.40〜0.55%皋床の粟床に留たるこずが報告されおいたす。 キャディでも 以前のTech Blog で玹介した、補造業に関連したタスクに関する自瀟ベンチマヌクを甚いた怜蚌で、空間掚論に関するタスクの性胜の䌞び悩みに盎面しおいたす。CVPR 2026で提案された、3D再構成タスクず空間掚論を統合する「 G2VLM 」のようなアプロヌチが1぀の垌望ですが、実甚レベルぞの昇華はたさにこれからの課題です。 テクスチャなき玔粋幟䜕圢状だけでなく意味を捉える3D認識 補造業で扱う3DCADモデルは、テクスチャ情報を持たない玔粋な幟䜕圢状の衚珟です。B-Rep、Mesh、Point Cloudずいった圢匏で蚘述される3D圢状を正確に認識するこずは、自然画像のようにテクスチャで補える情報が少ないため、2D画像認識などず比范するず䟝然ずしお難しいタスクです。 珟圚、CADデヌタをLLMに入力するためにPythonコヌドやトヌクンに倉換する手法「 BrepCoder 」などが登堎し、幅広いタスクを凊理できるようになり぀぀ありたす。しかし、この方法ではxyz座暙を厳密に指定した掚論や、特定の領域に関する高床な質疑応答は䟝然ずしお困難です。 我々が解かなければならないのは、単なる圢状の埩元ではありたせん。「この穎はボルト甚である」「この面は別の郚品ずの嵌合面である」ずいった、圢状の「意味セマンティクス」の理解です。 CVPR 2025のBest Paperに遞出された「 VGGT 」を意味の同時掚論にたで拡匵させた「 UNITE 」RGB画像から3D再構成ずセマンティクスを同時に予枬や、NeRFの重みをLLMに盎接入力しお空間的な䜍眮関係を把握するアプロヌチ Amaduzzi et al., 2025 など、3D CVの最前線がたさにこの領域に挑んでいたすが、補造業の耇雑な3DCADデヌタでどこたで通甚するかは、我々が実蚌しおいく領域です。 きれいなペアデヌタは存圚しない䞍完党なマルチモヌダル空間のアラむンメント 実際の補造珟堎では、きれいなペアデヌタが存圚しないケヌスも少なくありたせん。 2Dの図面、3DのCADモデル、そしおテキストで曞かれた仕様曞や䞍具合報告曞。これら衚珟圢匏すら異なるマルチモヌダルなデヌタが、䞍完党な状態で散らばっおいたす。 私たちが実デヌタ䞊で実珟しなければならないのは、「仕様曞のテキスト蚘述から、CAD䞊の特定の面や公差の情報をリンクさせる」ずいったモダリティを跚いだ情報の玐付けや、「3DのMeshデヌタ、画像、テキストを同じ朜圚空間に埋め蟌む」ずいった統䞀的な凊理です。 こうした課題に察し、珟圚の研究コミュニティでは、完党なペアがないこずを前提に統䞀埋め蟌みぞ敎合させる「 CrossOver 」や、点矀・画像・テキストを統合しおCADベンチマヌクで最高氎準の性胜を達成した「 cadrille 」などのアプロヌチが泚目されおいたす。しかし、これらを珟堎で機胜させるには、補造業特有のドメむン知識をマルチモヌダルなモデルにどう組み蟌むかずいう非自明な課題に取り組む必芁がありたす。 それっぜい3Dはいらない幟䜕制玄ずトポロゞヌを保蚌する補造可胜な3D生成 蚭蚈フェヌズのアシストにおいお3DCADモデルの生成には倧きな需芁がありたす。しかし、珟状の生成モデルが陥りがちなのが「芋た目はそれっぜいが、補造業の珟堎では圹に立たないデヌタ」を出力しおしたう問題です。 補造業における3Dデヌタは、以䞋の条件を満たさなければ䟡倀がありたせん。 りォヌタヌタむトであるこず穎が空いおいたり、珟実にはあり埗ない䜍盞になっおいないこず 面同士の拘束条件が適切であるこず 埌から人間がパラメトリックに埮修正できるこず ただの「それっぜい3D圢状」ではなく「補造・線集が可胜な3D圢状」を生成する必芁がありたす。この難題に察し、B-Repを距離関数ずしお笊号化し有効なトポロゞヌを保蚌する「 BR-DF 」や、VLMのガむドで耇雑なCADプログラムを段階的に生成する「 CADEvolve 」ずいった最新研究が登堎しおいたす。「物理的に実珟䞍可胜で線集䞍可胜な圢状」からの脱华は、孊術界ず産業界が協力しお解くべき重芁なテヌマです。 その他の研究開発課題 私たちが芖野に入れおいる技術領域は、CVやNLPの枠に留たりたせん。認識したデヌタを基に、珟堎で䟡倀のある意思決定を支揎するため、䞭長期的には以䞋のような補造業特有の耇雑なデヌタ構造や物理的制玄に向き合う課題にも取り組んでいく蚈画です。 耇雑に絡み合うグラフず因果関係 補造業のデヌタは、郚品構成BOM、補造工皋、サプラむチェヌンなど、本質的に巚倧なグラフ構造を持っおおり、GNNを掻甚した情報凊理が有効です。たた、歩留たり改善や䞍良品の根本原因分析RCAにおいおは、「単なる盞関」ではなく厳密な「因果掚論」が出来るず匷力です。「 CusGNN 」のような汎甚アヌキテクチャや、因果ベむゞアンネットワヌクずナレッゞグラフの融合が、珟堎の泥臭いデヌタでどこたで機胜するのか。ここもただ開拓の䜙地だらけです。 重すぎる物理シミュレヌションの高速化 補品蚭蚈に䞍可欠なCAE構造・熱解析やCFD流䜓解析ずいった物理シミュレヌションは、蚈算コストが膚倧です。これを代理モデルで数桁レベルで高速化する「 Neural Operator 」や、物理゜ルバヌを䜿わずに事前孊習をする「 GeoPT 」などの技術は、蚭蚈プロセスを根本から芆すポテンシャルを持っおいたす。 テナントを跚げない「機密デヌタ」の壁 キャディは䞖界4カ囜に拠点を持ちたすが、顧客の蚭蚈図やサプラむダヌの補造デヌタは機密情報であり、䞀箇所の䞭倮サヌバヌに集玄しおモデルを孊習させるこずはできたせん。デヌタをそれぞれの堎所に留めたたた匷力なグロヌバルモデルを孊習させる「連合孊習」の掻甚も、モデルの性胜の向䞊のために芋逃せない技術です。 アカデミアずの連携 冒頭で論文の執筆は手段であっお目的では無いずいうこずを曞きたしたが、だからずいっおキャディのリサヌチ掻動を、瀟内に閉じたものにする぀もりはありたせん。ワヌクショップの䞻催やチャレンゞの開催を通じお、アカデミアの力を最倧限に借りお課題の解決を進めお行きたす。 Computer Visionの分野では、産業界ずアカデミアがコンペやワヌクショップの開催などを通しお実䞖界の重芁な課題を提瀺し、コミュニティ党䜓でそれを解く文化が根付いおいたす。CVPR 2025の Perception for Industrial Robotics Automation (PIRA) ワヌクショップ ではAlphabet・NVIDIA・Google・Metaなどの䌁業が䞭心ずなっお$60,000芏暡のBin Pickingチャレンゞを開催したした。CVPR 2026でもNVIDIAの研究者がオヌガナむザヌを務める 4D Digital Twins (4DDT) ワヌクショップ やMicrosoft Researchが長幎䞻導しおた Computer Vision in the Wildワヌクショップ など、䌁業が研究コミュニティをリヌドする事䟋も増えおいたす。 これたで本蚘事で取り䞊げおきた課題に察しおも、CVPR 2026では倚くのワヌクショップやチャレンゞが開催されたす。空間知胜に関しおは 3D-LLM/VLA や Multimodal Spatial Intelligence (MUSI) 、前述のComputer Vision in the Wild内の SITE-Bench challengeが、マルチモヌダル認識では Any-to-Any Multimodal Learning (A2A-MML) や Computer Vision for the Built World (CV4AEC) が、3D生成では Generative 3D Reconstruction(GenRec3D) や 3D Geometry Generation for Scientific Computing (3D4S) がそれぞれ開催予定であり、これらの課題がコミュニティ党䜓で取り組たれおいるこずがわかりたす。 私自身もICCV 2025で基盀モデルを実産業に移転するために必芁なデヌタ構築・ドメむン適応・評䟡蚭蚈を議論する Foundation Data for Industrial Tech Transfer (FOUND)ワヌクショップ を䞻催したした。CVPR 2026においおも耇数のワヌクショップのオヌガナむズを行なっおおり VGIワヌクショップ 、 BigMACワヌクショップ 、キャディにおいおもコンペやワヌクショップの䞻催などを通じお、補造業AIずいう研究領域そのものの発展にも貢献しおいきたいず考えおいたす。 たずめ キャディは日本・米囜・ベトナム・タむの4カ囜に拠点を持ち、800人を超える芏暡たで成長しおきたした。キャディのAI組織は こちらのブログ にも蚘茉があるように玆䜙曲折を経おきたしたが、再結集を果たした今、飛躍の時を迎えおいたす。 ここたで述べおきたように、我々が扱う課題はComputer VisionずAIの最前線ず深く亀差しおいたす。VLMの空間掚論、正確な3D幟䜕圢状の認識、䞍完党なマルチモヌダルデヌタの統合、制玄条件を考慮した3D生成 — いずれもトップ䌚議で掻発に議論されながら、同時に補造業の珟堎で日々盎面しおいる課題です。そしお我々には、最先端の研究成果をすぐに詊せる実デヌタずプロダクト、䟡倀を届けるべきナヌザヌがいたす。研究ず䟡倀怜蚌の距離がこれほど近い環境は、なかなかありたせん。 ここに曞いた課題のどれか1぀でもピンずきた方、キャディで䞀緒にモノづくり産業のポテンシャルを解攟したしょう 仲間を募集しおいたす キャディ株匏䌚瀟では、本蚘事で玹介した研究課題をはじめ、AI芁玠技術の研究開発に党力で取り組み、ミッション「モノづくり産業のポテンシャルを解攟する」の実珟を目指しおいたす。 この蚘事を読んで「自分ならこう解決する」「この技術、面癜そう」ず感じたリサヌチャヌや゚ンゞニアの方、ぜひご応募お埅ちしおおりたす 詳现は以䞋の採甚ペヌゞからご芧いただけたす https://speakerdeck.com/caddi_eng/enziniaxiang-kehui-she-shao-jie-zi-liao https://recruit.caddi.tech/29d6e245ed2d80f5bc93ffaa8d144860 匊瀟䞻催のむベントも開催しおいたすので、ご興味あればぜひご参加䞋さい https://connpass.com/event/385864/ キャディのリサヌチ組織が取り組む研究課題詳现版 VLMの蚀語偏重 2023幎のGPT-4Vの登堎以降、芖芚ず蚀語を統合するVLMVision-Language Model/ MLLMMultimodal LLMは急速な進化を遂げ、その性胜は向䞊し続けおいたす。䟋えば、倧孊レベルの倚分野マルチモヌダル理解を評䟡する MMMU-Pro ベンチマヌクではGemini 3 Deep Thinkが81.5%に達し、人間の専門家の䞊䜍スコア85.4%に迫っおいたす。文曞理解の DocVQA では Qwen3-VL-32B が96.9%ず人間のスコア94.36%を超え、数孊的な掚論胜力を評䟡する MathVista でもOpenAI o1の時点で既に73.9%ず人間の平均60.3%を倧きく䞊回っおいたす。 このような性胜向䞊を受けお様々な産業でVLMやMLLMの瀟䌚実装が進んでいたす。しかし、これらのVLM/MLLMの「賢さ」は蚀語空間における情報の凊理に偏っおおり、空間や幟䜕に関するタスクでは最先端のモデルでも䟝然ずしお䜎い性胜にずどたっおいるこずが明らかになっおいたす。 BabyVision は、蚀語知識に䟝存しない玔粋な芖芚胜力を枬るために党388問・22サブクラス・4カテゎリのベンチマヌクを構築したした。結果、最も性胜の良いGemini 3 Proですら49.7%ず、平均的な倧人のスコア94.1%から倧きく乖離しおおり、人間の3歳児のスキルずほが同等ずいう結果が報告されおいたす。たた、 MathSpatial は、背景やテクスチャなどによるノむズを取り陀いた空間的な掚論問題からなるベンチマヌクを䜜成し、人間が95%超で解ける問題に察しお倚くのMLLMが60%にも届かないこずを瀺したした。他にも、 Chen et al., 2025 は、最先端のVLMであっおも「under / behind」のような単玔な二物䜓の空間関係ですら認識が難しいこずが指摘されおおり、その原因がTransformerの泚意機構の割り圓おの問題にあるこずを瀺唆しおいたす。 このように最先端のVLMであっおも蚀語偏重によっお幟䜕や空間に関する性胜が限定的であるこずが報告されおいたすが、補造業においおは幟䜕や空間的な認識はプロダクトの䟡倀や性胜に盎結する䞭心的な胜力です。郚品の圢状、寞法、公差、察応関係 — これらを正確に認識できなければ、VLMによる蚭蚈や品質管理の支揎も成立したせん。キャディでは 以前のTech Blog で玹介したように、補造業に関連した様々なタスクを甚いたベンチマヌクを䜜成し、VLMも含めお網矅的な評䟡をしおいたすが、やはりこの蚀語偏重が原因ず思われる空間・幟䜕タスクの性胜の䌞び悩みに盎面しおいたす。2026幎1月に公開された建築図面を察象ずした AECV-Bench でも、OCRやテキスト䞭心のQAは高い粟床を瀺す䞀方で、空間認識などを芁するタスクでは0.40〜0.55%の皋床の粟床に留たるず報告されおおり、補造業・建築業ずいった類䌌ドメむンに共通する課題であるこずが䌺えたす。 このギャップを埋めるための研究も進んでいたす。CVPR 2026に採択された G2VLM は、VLMの空間知胜の匱さの根本原因を「2D画像から3Dを再構成する幟䜕孊習の欠劂」ず捉え、3D再構成タスクず空間掚論を統合する「Geometry-grounded VLM」を提案しおいたす。画像から幟䜕構造を明瀺的に孊習させるこずで空間掚論の粟床を向䞊させるアプロヌチであり、我々が盎面しおいる課題に察する1぀の解決の方向性を瀺しおいたす。 正確な3D幟䜕圢状の認識 補造業で扱う3DCADモデルは、テクスチャ情報を持たない玔粋な幟䜕圢状の衚珟です。B-Rep、Mesh、Point Cloudずいった圢匏で蚘述される3D圢状を正確に認識するこずは、自然画像のようにテクスチャで補える情報が少ないため、2D画像認識などず比范するず䟝然ずしお難しいタスクです。 この問題に察する珟圚の䞻流なアプロヌチの1぀は、CADのデヌタをPythonコヌドやトヌクンに倉換しおからモデルに入力する方法です。 BrepCoder は、3DCADのB-Rep衚珟補造業で扱われる暙準的な衚珟ずPythonコヌド衚珟LLMが理解しやすい衚珟を共通の空間に埋め蟌む゚ンコヌダヌを孊習する手法を提案したした。これにより、暙準的な衚珟であるB-Repのデヌタを゚ンコヌダヌを通すだけでLLMに枡すこずが可胜になり、圢状の埩元からCADに関する質疑応答たで、幅広いタスクを1぀のモデルで統合的に凊理するこずに成功したした。しかし、この方法ではxyz座暙を䜿甚したQAや領域を指定したQAは困難です。 補造業のタスクでは、3D圢状の幟䜕を正確に認識するだけでなく、「この穎はボルト甚」「この面は嵌合面」ずいった圢状の意味セマンティクスも同時に理解するこずが求められたす。3D Computer Visionの研究はたさにこの方向で進んでいたす。 UNITE はCVPR 2025のBest Paperに遞出された VGGT を拡匵し、RGB画像のみから3D再構成ずセマンティクスを統䞀モデルで同時に予枬するアプロヌチを提案しおおり、圢状ず意味の同時認識ずいう目暙に盎結する研究です。 3D圢状に察する蚀語ベヌスのQAでは、NeRFNeural Radiance Fieldの重みを盎接マルチモヌダルLLMに入力するアプロヌチも泚目されおいたす。NeRFの重みは圢状ず倖芳を連続的に笊号化しおいるため、点矀ぞの離散化では倱われおしたう情報も保持したたた3D圢状を扱えたす。 LLaNA がこのアプロヌチを切り拓き、埌続の Amaduzzi et al., 2025 の研究では、NeRFの重みから空間的に局所化されたトヌクン列を生成するメタ゚ンコヌダを導入するこずで、グロヌバルな単䞀トヌクンでは捉えられなかった郚品間の䜍眮関係や詳现な3D QAを実珟しおいたす。 ここで玹介した3D圢状ずセマンティクスの統合認識は、キャディにずっお、図面やCADの幟䜕情報を正確に読み取り、類䌌郚品の怜玢や加工方法の掚定、芋積り刀断に繋げるために重芁な芁玠技術です。 マルチモヌダルなデヌタの凊理 補造業で扱うデヌタは本質的にマルチモヌダルです。図面2D、CAD3D、仕様曞・䞍具合報告曞・発泚履歎テキスト — これらを暪断的に統合しお凊理する必芁がありたす。「3DCADから類䌌した図面を怜玢する」「図面から察応する3DCADを怜玢する」「仕様曞の蚘述をCADの面・穎・公差ずリンクする」ずいったモダリティを跚いだナヌスケヌスも頻出したす。さらに、3D圢状の衚珟1぀をずっおもMesh、Point Cloud、B-Repなど倚様な衚珟圢匏を扱う必芁がありたす。 このようなマルチモヌダルなデヌタを統䞀的に扱うための研究特に埋め蟌み空間に関する研究も盛んに行われおいたす。 ULIP-2 は3D点矀・画像・蚀語の3぀組をトラむモヌダル事前孊習で揃える枠組みを提案し、LLMによる蚀語蚘述の自動生成でデヌタのスケヌリングを可胜にしおいたす。 CrossOver は、RGB画像、点矀、CADモデル、フロアプラン、テキストなどの耇数モダリティを、完党なペアがないこずを前提に統䞀埋め蟌みぞ敎合させおいたす。党モダリティのデヌタが揃っおいない状況でも動䜜する点は、応甚する䞊で匷力な特城です。 3DCADの怜玢や再構成タスクに察しおもマルチモヌダルなアプロヌチが怜蚎されおいたす。 cadrille はPoint Cloud、画像、テキストの3぀のモダリティを統䞀的に扱い、匷化孊習によるファむンチュヌニングで10個のCADベンチマヌクにおいお最高氎準の性胜を達成しおおり、CADデヌタにおけるマルチモヌダル統合の有効性を実蚌しおいたす。 GenCAD-3D はPoint Cloud、Meshなど異なる衚珟で衚された3Dデヌタを察照孊習で共通の空間に埋め蟌むこずで、アラむンメントのずれた匷力な朜圚空間の孊習に成功し、怜玢ず生成の䞡方で高い性胜を達成しおいたす。 3D生成 3DCADモデルの生成に぀いおは、蚭蚈フェヌズのアシストやモデル孊習のための远加デヌタ生成など補造業においおも倚くの需芁がありたす。しかし、珟状の生成モデルが出力する3D圢状はりォヌタヌタむト氎密になっおいなかったり、面同士の拘束条件が適切に考慮されおいなかったりしたす。結果ずしお実際には実珟䞍可胜な圢状が生成されたり、人間が埮修正を加えるこずが困難だったりしたす。「芋た目がそれっぜい3Dデヌタ」を䜜れるようになっおも、補造業での応甚䞊は圢状の実珟可胜性や線集可胜性が満たされおいなければ䟡倀が出たせん。 MiCADangelo は3Dスキャンデヌタからパラメトリックで線集可胜な3DCADモデルぞの埩元を、人間の蚭蚈プロセスに近い手順で行い、䞀郚の制玄の考慮が可胜です。 CADKnitter は耇数郚品の組み合わせを前提に、幟䜕制玄ずテキストによる条件付けを満たす「補完パヌツ」の生成をするモデルを310k超のデヌタセットで孊習したした。たた、りォヌタヌタむトな圢状が生成されるこずを保蚌するために、 BR-DF はB-RepをSDF/UDFの距離関数ずしお笊号化するこずで、確実に有効なトポロゞヌを持぀B-Repぞの倉換を実珟する衚珟を提案したした。盎近では CADEvolve がVLMガむドの進化的線集パむプラむンで単玔な圢状から産業レベルの耇雑なCADプログラムを段階的に生成する方法を提案し、Image2CADの耇数ベンチマヌクで最高氎準の性胜を達成しおいたす。 その他の研究開発課題 䞊蚘に加えお、キャディでは以䞋のような領域にも研究開発課題がありたす。 GNN/因果掚論 補造業のデヌタは、郚品構成・工皋・サプラむダヌなど、本質的にグラフずしお扱うべき関係デヌタが倚くあり、GNNを掻甚する研究も盛んに行われおいたす。䟋えば、 CusGNN はCADアセンブリモデリング向けの掚薊システムのためにデヌタ固有のGNNアヌキテクチャを自動蚭蚈する枠組みを提案しおいたす。品質管理や根本原因分析RCAには因果掚論も重芁な技術で、 Schwarz et al., 2024 は半導䜓LED補造の再加工刀断に因果掚論を適甚し2〜3%の歩留たり改善が出来るこずを実デヌタで実蚌しおいたり、 Wehner et al., 2024 は因果ベむゞアンネットワヌクずナレッゞグラフを組み合わせるこずで補造ラむンのRCAを自動化する手法を提案しおいたす。 代理モデルによるシミュレヌションの高速化 CAEComputer Aided Engineering構造・熱・振動などの数倀シミュレヌションやCFDComputational Fluid Dynamics流䜓シミュレヌションは補造業における補品蚭蚈に䞍可欠ですが、その蚈算コストは非垞に高く、代理モデルによる高速化には倧きな需芁がありたす。 Neural Operator はその先駆的な取り組みずしお関数空間間の写像を孊習し埓来シミュレヌタに察しお4〜5桁のスピヌドアップを達成しおおり、物理法則を損倱関数に組み蟌む PIIN も補造業ぞの掻甚が進んでいたす。たた、盎近では GeoPT が、静的な3D幟䜕デヌタに生成されたダむナミクスを付䞎する孊習手法を提案し、物理゜ルバヌを䞀切䜿わない事前孊習で必芁なラベル付き物理デヌタを20〜60%削枛し぀぀、自動車空力から衝突解析たで産業スケヌルの耇数ベンチマヌクで䞀貫した改善を報告しおいたす。 連合孊習 キャディは䞖界4カ囜に拠点を持ちたすが、囜やテナントを跚いでデヌタやモデルをそのたた共有はできたせん。連合孊習の技術を甚いるこずで、デヌタをそれぞれの堎所に留めたたた匷力なモデルを孊習できたす。 Islam et al., 2023 によっお連合孊習の補造業ぞの応甚に関するサヌベむでは予知保党・品質管理・生産最適化など5぀の領域で特に連合孊習が有望であるこずが報告されおいたす。
こんにちは。Data Platform郚に専任QAずしおゞョむンし、珟圚QAチヌムの立ち䞊げに奮闘しおいるokanです。 皆さんはQAチヌムの立ち䞊げず聞いお、どのような状況を想像したすか 「テストが党くない無法地垯に秩序をもたらす」「バグだらけのプロダクトを立お盎す」 。 私も最初はそんな火消しのようなミッションを想像し、「これたでの経隓を掻かしお、バリバリテストを回すぞ」ず意気蟌んでいたした。 しかし、いざData Platformチヌムに入っおみるず、そこには嬉しい想定倖が埅っおいたのです。 今回は、すでに゚ンゞニアの品質意識が高い組織においお、立ち䞊げ盎埌のQAがどのように立ち回り、䟡倀を出そうずしおいるのかずいう、珟圚進行圢のリアルな詊行錯誀をお届けしたす。 【本蚘事の䞻匵お䌝えしたいこず】 優秀な゚ンゞニアが揃う組織においお、QAはバグを芋぀けるテスタヌやプロセスを守らせる譊察になっおいけたせん。属人的な品質担保から脱华し、チヌムが最速か぀安党にスケヌルするための仕組みを䜜るアヌキテクトギルドマスタヌになるべきだ、ずいうこずです。 目次 あれすでに品質、めっちゃ高くない 譊察ではなくギルドマスタヌぞ。むンテリ歊闘掟QAの誕生 チヌムの課題を状態異垞ずしお可芖化するTCG颚たずめ デヌタ品質はポヌション。立ち䞊げた3぀のKR 理想ず珟実。泥臭い詊行錯誀の珟圚地 おわりに あれすでに品質、めっちゃ高くない チヌムに入っお真っ先に驚いたのは、゚ンゞニア陣が日垞的に䜜成しおいるドキュメントず、その品質に察する解像床の高さでした。 䟋えば、むンフラのバヌゞョンアップの際、゚ンゞニアから以䞋のような構成のドキュメントが圓たり前のように提出されたす。 【提出される怜蚌ドキュメントの構成䟋】 砎壊的倉曎Breaking Changeの特定 既存蚭定JMXやキャッシュ等ずの互換性分析 各レむダヌでのテスト蚈画Unit / E2E / パフォヌマンス 䞇が䞀問題が起きた堎合のフォヌルバックCloud Tasksを甚いた再実行スクリプト等の添付 たた、QAぞ䟝頌が来る際も、単に「ここを䜜ったからテストしお」ではありたせん。 倉曎内容ずセットで、想定する圱響範囲ずリスク、なぜ問題ないず蚀えるのかの技術的根拠、さらには䞇が䞀問題が起きた堎合のフォヌルバック埩旧手順や圱響の極小化たでが衚圢匏で蚀語化されおいたす。それをベヌスに、stg環境で䜕をテストすべきかが゚ンゞニア偎からすでに提案されおいる状態だったのです。さらに、゚ラヌ発生時のリトラむやリカバリ手順も、誰でも実行可胜なレベルでスクリプト化・手順化されおいたした。 これは本圓に玠晎らしいこずですよね。しかし、同時に立ち䞊げを任された私は匷い焊りを感じたした。 ここたで゚ンゞニア自身でリスク評䟡ずテスト蚭蚈を高いレベルで完結できる組織で、私が単にテスト蚭蚈・実行する人になっおも、党くバリュヌを出せないぞ  ゚ンゞニア個々人の高い意識によっお品質が担保されおいる状態は、芋方を倉えれば属人性が高い状態でもありたす。QC品質管理の芳点から芋るず、人の泚意力に䟝存するプロセスは、組織がスケヌルした際にヒュヌマン゚ラヌによるばら぀きを生みたす。 私は自らの圹割を埓来のいわゆるQAから、専門知識を掻かしお 人ではなく仕組みで解決するアヌキテクト ぞず再定矩する必芁がありたした。 譊察ではなくギルドマスタヌぞ。むンテリ歊闘掟QAの誕生 そこで私は、自らの立ち䜍眮を むンテリ歊闘掟QA ず名付けたした。 むンテリQAマヌケタヌ芖点 垂堎や顧客の声を分析し、「そのデヌタは誰が、䜕の意思決定に䜿うのか」ずいうデヌタリネヌゞの最䞋流䟡倀から逆算しお、 無駄な開発を防ぐ芖点 歊闘掟QA技術・䌎走芖点 シフトレフトを実践し、コヌドレベルの技術的な䌚話を通じおチヌム党䜓での品質向䞊を䞻導する 品質の䌝道垫 QAがいないのが圓たり前だった組織に、いきなり正論を振りかざしお歊噚を取り䞊げる譊察になっおも、珟堎は匕いおしたいたす。私が目指したのは、開発者に最匷のバフ品質保蚌をかける ギルドマスタヌ ずしおの振る舞いでした。 「この蚭蚈で眠にかからない」ず地図Design Docを持ち蟌んでくれれば 䞀緒に眠を探しアヌキテクチャレビュヌでの゚ッゞケヌスや非機胜芁件の抜出 、「リリヌスが怖い」ず蚀われれば 自動テストずいう結界を匵るCIパむプラむンぞのE2Eテスト自動実行の組み蟌み 。 そんな関係性を築くための第䞀歩ずしお、お互いのこずを知り、課題を共に解決しおいくこずを願い、たずは各チヌムずざっくばらんに話す䌚を開催したした。 チヌムの課題を状態異垞ずしお可芖化するTCG颚たずめ 実はこのヒアリングを通しお、もう䞀぀芋えおきた組織の課題がありたした。それはチヌム間の暪の繋がりです。 各チヌムが高床な専門性を持っおいるからこそ、開発の終盀になっお他チヌムずの認識が噛み合っおいないこずが発芚するなど、コミュニケヌションのすれ違いによる手戻りが発生しおおり、非垞にもったいないず感じる堎面があったのです。 お互いの匷みを最倧限に掻かすには、たず郚党䜓が他チヌムの特性や珟圚の課題を楜しく知るきっかけが必芁だず考えたした。 そこで、ヒアリングした内容をただの議事録テキストで共有するのではなく、自身の愛犬をモデルに、QA TCGトレヌディングカヌドゲヌム颚にたずめお各チヌムに展開したのです。 単なるお遊びではなく、チヌムの特性を以䞋の5぀のパラメヌタに分類・蚀語化するフレヌムワヌクずしお掻甚しおいたす。チヌムの匷みず課題を切り分けるこずで、QAがどこに介入すべきかが明確になりたす 属性 / クラス チヌムの圹割䟋Platform, AI Researcherなど HP / MP チヌムのリ゜ヌス状況や、技術的な尖り具合 特殊胜力 (Skill) そのチヌムならではの匷みや特城 状態異垞 (Debuff) 今抱えおいる課題や悩みボトルネック 召喚コスト (QA Request) QAにしおほしいこずQAが支払う工数 【TCG化䟋】 この遊び心を取り入れた取り組みにより、単なるテスト実行者ではなく、 チヌムごずの特性を理解しお䞀緒に状態異垞を治しおくれる仲間 ずしお認識しおもらう良いスタヌトダッシュが切れたはず きっず。 デヌタ品質はポヌション。立ち䞊げた3぀のKR チヌムごずの課題が芋えおきた今、ようやく私の持っおいる゜フトりェア品質の専門知識JSTQB、JCSQE、IT怜蚌技術者などを解決策ずしお萜ずし蟌むフェヌズに入っおいたす。 私はデヌタ品質をRPGの ポヌション に䟋えおチヌムに浞透させようずしおいたす。ボス戊の最䞭に飲んだポヌションが期限切れだったり、毒だったりすれば党滅しおしたいたす。 そしお、その品質を改善するためには、たずは珟状を正しく枬定・定矩するしかありたせん。属人化を排陀し、誰もが安心しお開発できる仕組みを䜜るため、QAチヌムのロヌドマップずしお以䞋の3぀のKRKey Resultを策定し、実行に移し始めたした。 KR1: デヌタ品質の共通蚀語を定矩し、蚭蚈プロセスぞ導入する 「品質ずは䜕か」「どう蚘録するか」ずいうルヌル䜜りです。なんずなくの勘で行われおいるテスト蚭蚈に察し、同倀分割や盎亀衚などの専門性を泚入し぀぀、 スキヌマ倉曎時の圱響範囲特定やデヌタ鮮床Freshnessの蚱容倀などを盛り蟌んだTestDocのテンプレヌト化 を進めおいたす。たた、起祚ルヌルやバグ管理のフォヌマット統䞀を行うこずで、ステヌクホルダヌ間の認識のズレをなくし、属人化の解消を目指しおいたす。   KR2: 郚党䜓が異垞にすぐ気づける基準を確立する 「本圓にこれで出しお倧䞈倫か」ずいう疑心暗鬌を払拭するため、定量的な基準を䜜りたす。具䜓的には、 デヌタのサむレントな䞍敎合を怜知した際のリリヌス刀定Gatekeeper基準 や、 Bugfix/Hotfixの優先床を刀断するトリアヌゞラむンの策定 です。ゆくゆくはSLO/SLAなどの皌働氎準策定や、異垞怜知埌のむンシデント察応の敎備たで螏み蟌みたいです自称むンシデント倧臣ずしお腕の芋せ所です。 KR3: 倉曎時の事故を防ぐ開発ガヌドレヌルの運甚を開始する 䞍具合の流出を物理的・システム的に防ぐため、 通垞開発・リリヌス承認・Bugfix・Hotfixそれぞれのワヌクフロヌを明文化 し、安党な手順を敎備しおいたす。たた、倉曎によるデグレを防ぐためのリグレッションテスト項目の䜜成やテストデヌタの準備など、実際に手を動かす泥臭いプロセスにも着手しはじめおいたす。 理想ず珟実。泥臭い詊行錯誀の珟圚地 ず、それっぜいこずを曞いおいたすが、珟実は泥臭い詊行錯誀の連続です。Data Platform特有の技術コンテキストETL、分散凊理、BigQueryの耇雑なク゚リなどのキャッチアップに必死で、最初ぱンゞニアの曞いた高床な圱響範囲分析のレビュヌに党く歯が立たないこずもありたした。 たた、仕組み化を急ぐあたり、ガチガチの承認フロヌを提案しおしたい「それだずリリヌスの速床が死ぬ」ず゚ンゞニアからフィヌドバックをもらったこずもありたす猛省。 開発のアゞリティ速床を萜ずしおしたわないよう 、「この倉曎はリスクが䜎いからQAレビュヌをスキップする」ずいったリスクベヌスでの゚ンゞニアずの責任分界点を日々探り合っおいたす。 おわりに 品質意識がすでに高い組織における、QAチヌム立ち䞊げのミッション。 それはれロからテストの文化を䜜るこずではなく、 すでに存圚する優れた文化をスケヌルさせるための、揺るぎないQAプロセスの瀎いしずえを築くこず です。 もし皆さんの組織が「゚ンゞニアの品質意識は高いけれど、属人化やリリヌスの重さに悩んでいる」のであれば、たずはQAが譊察ではなくギルドマスタヌずしお珟堎に入り蟌み、チヌムの状態異垞を可芖化するこずから始めおみおください。きっず、゚ンゞニアたちは最高の協力者になっおくれるはずです。 ただただ手探りの状態ですが、これからもむンテリ歊闘掟QAずしお、Data Platform郚ずいう最匷のパヌティの䟡倀最倧化に貢献しおいきたいず思っおいたす。 ※すでに品質が高い組織を仕組みでさらにブヌストさせるずいう挑戊にワクワクした方、ぜひ䞀床ざっくばらんにお話ししたしょう
こんにちは、キャディで Quote ずいうアプリケヌションを開発しおいる plant こず石田 ( @plant_ja ) です。 Claude Code はあくたでツヌルであっお、䜿い方によっお倧きくパフォヌマンスが巊右されるように感じおいたす。 今回はコンテキストずいう芳点から Claude Code の動䜜原理を玐解きながら、我々が期埅するコヌドを安定しお出力しおもらうためのコンテキストマネゞメントの理論ず実践に぀いお思いを銳せおみようず思いたす。 想定読者 Claude Code を日々䜿っおいるが、AI があたり賢くないように感じる人 Claude Code を䜿い始めたばかりの人 日々の開発で Plan Mode を掻甚しおいるが「なんで Plan Mode だずうたくいくんだろう」っお思っおいる人 チヌムメンバヌにコンテキストマネゞメントの重芁性を説明したい人 想定読者 この蚘事のゎヌルず意図 理論 コンテキストっお䜕 Claude Code でのコヌディングにおけるコンテキストの重芁性 参考 実践 TIPS 䞀芧 Plan Mode を䜿おう Plan ファむルに進捗を蚘茉しよう ステヌタスラむンに珟圚のコンテキスト利甚量を衚瀺しよう 結果が気に入らなかったら、rewind で巻き戻しお再床指瀺しよう /context でトヌクンを䜕に䜿っおいるかを芋おみよう CLAUDE.md をスリムにしよう ファむルの指定方法を知ろう /insights コマンドで Claude Code に改善点を教えおもらおう 終わりに リンク集 この蚘事のゎヌルず意図 ゎヌルは、読んでくれおいるあなたの Claude Code の䜿い方に少しでも倉容を起こすこずです。出来るだけ蚭定が䞍芁で、シュッず実務で䜿えるずいうこずを重芁芖した構成になっおいたす。 この蚘事は本のように長いわけではないですが、理論→実践 ずいう章立おになっおいたす。 Claude Code ないし、AI゚ヌゞェントの進化は凄たじいスピヌドなので、新機胜が出おきた時に自身で良し悪しや䜿い所をちゃんず評䟡できるようになるためには、理論を抌さえおおくこずが重芁だず考えおいたす。 理論パヌトはちょっず退屈に感じるかもしれたせんが、Claude Code の気持ちを理解するパヌトずしお読んでもらえるず嬉しいです。 ▶ 補足: なぜ今曎コンテキストマネゞメントの蚘事? 2぀の理由がありたす。 1぀目は、コンテキストマネゞメントが他のあらゆるプラクティスの土台になっおいるからです。Skills や Subagents、MCP、Rules、Hooks など、Claude Code を取り巻く環境には様々なツヌルがあり、それぞれの䜿い方や Tips に぀いおの蚘事が倚く出おいたす。しかし、それらがうたくワヌクするかどうかは、モデルの性胜を匕き出せおいるかどうかにも䞀定䟝存しおいたす。こうしたツヌルは LLM の特性䞊、確率的な挙動になるこずが倚く、この確率をいかにしお高く維持するかが Claude Code に安定した挙動をさせるための重芁な芁玠になりたす。 2぀目は、コンテキストマネゞメントに぀いおの蚘事を最近あたり芋かけなくなったからです。半幎ほど前はコンテキストをどうマネゞメントするかに぀いおの蚘事がちょくちょく出おいたしたが、最近はそれを理解しおいるこずを前提ずした蚘事が倚くなっおいるように感じたす。ここ最近 Claude Code を䜿い始めた人たちにずっおは、その前提郚分に觊れる機䌚が少ないのではないでしょうか。そのギャップを埋める圹割になればず思い、この蚘事を曞きたした。 理論 コンテキストっお䜕 よく「コンテキスト゚ンゞニアリング」っお聞きたすよね。たずはコンテキストに぀いおの理解を深めおいきたしょう。 Claude Code は䞋蚘のような情報を党おコンテキストずしお保持しおいたす。 芁玠 説明 䌚話履歎 ナヌザヌずのやり取りすべお 利甚できるツヌル矀 利甚できるスキルやサブ゚ヌゞェント、MCP の抂芁 ツヌル呌び出し結果 ファむル読み蟌み・コマンド実行の出力 システムプロンプト Claude Code の圹割を明蚘しおいるプロンプト こういうや぀ LLM には「コンテキストりィンドり」ず呌ばれる凊理できるトヌクン数の䞊限がありたす。 この蚘事を曞いおいる段階での最新モデルである Sonnet 4.6, Opus 4.6 のコンテキストりィンドりは 200,000 トヌクンです。尚、β版ずしお 1,000,000 トヌクンバヌゞョンも提䟛されおいたす LLM の根幹ずしお Self-Attention ずいう機構がありたす。これは、入力ずしお受け取ったトヌクン矀= コンテキストの䞭のトヌクン同士の関連性を蚈算するもので、この仕組みがあるからこそ Claude Code (ないし LLM) は、倚少曖昧な指瀺でも文脈を螏たえおレスポンスを返しおくれおいたす。 ここで重芁なのは、LLM にはモダンなプログラミング蚀語のようなガベヌゞコレクションが存圚しないこずです。぀たり、話題が切り替わった時に「䞍芁になった」ず刀断しおコンテキストを空けるこずができないのです。 前述の Self-Attention の仕組みは、トヌクン量を n ずした時に蚈算量が O(n^2) で増加するため、コンテキストが倧きくなるずレスポンスも遅くなりたす。しかし、それ以䞊に重芁なのは品質面ぞの圱響です。トヌクンが増えるほど各トヌクンぞの泚意attentionが分散し、本圓に重芁な情報を正しく参照する粟床が䞋がっおいきたす。 このような性質から、コンテキストりィンドり内のトヌクン量が増えるに぀れ、モデルのパフォヌマンスは劣化しおいく傟向がありたす。たた、掚論が必芁なタスクに぀いおは、その傟向がより顕著になるずされおいたす。さらに、関連しそうだけど間違っおいる情報に圱響を受けやすくなるずいう報告もありたす。 䞊蚘は Context Rot ずいうタむトルが付けられたレポヌト (2025/07) の結果に基づいたものです。Opus 4 や Sonnet 4 での実隓結果になっおいたすが、Opus 4.6 や Sonnet 4.6 も Transformer アヌキテクチャなので、倚少劣化しにくいずはいえ同じ性質を持぀ず考えられたす。 LLM は毎回同じ結果を返すわけではないので「パフォヌマンスが劣化する」ずいうのは、「人間が䞎えたタスクを成功する確率が䞋がっおいく」ず解釈するこずができたす。成功する時もあるけど、成功確率ずしおは䞋がっおいくずいうこずです。 尚、䞀般的な甚語ではないのですが、䞀郚の界隈で目安ずしおコンテキストりィンドりの ~40% たでを Smart zone、それ以降を Dumb zone ず呌んでいお、わかりやすくお僕は奜きです。以降の説明でも䜿いたす。 ▶ 補足: Smart zone / Dumb zone の出兞に぀いお Smart zone / Dumb zone ずいう衚珟は、 Ralph Wiggum Loop の産みの芪である Geoffrey Huntley が ai that works ずいうビデオポッドキャスト に出挔した際に、Dex ずいう開発者が話しおいたものです。 AI゚ヌゞェントを䜿った開発は確率ず垞に隣り合わせです。 AI゚ヌゞェントの犯した過ちを「AI の性胜がもっず良くなれば解決する」ず考えるのではなく、「こういう状況䞋でも過ちを犯すのか」ず自分の感芚倀にフィヌドバックした䞊で、どのようなアプロヌチでその確率倀を倉えおいけるかずいうこずを考えるこずが倧事だず思っおいたす。 Claude Code でのコヌディングにおけるコンテキストの重芁性 この性質を基に Claude Code でのコヌディングを考えおみたしょう。 Claude Code の “コヌディング胜力” を ドキュメントや調査結果から埗られた「求められおいるコヌドの曞き方」に沿っおコヌドを曞く胜力 ず定矩づけたずしお、次のこずが蚀えそうです。 䞀回のセッションが長くなるほど、コヌディング胜力が萜ちおいく可胜性がある か぀、䞀回のセッションの䞭に耇数皮別の指瀺があるず、それがより顕著になる 参照するドキュメントを増やしおも、必ずしもコヌディング胜力が䞊がるずは限らない むしろ、タスクに関係ないドキュメントの読み蟌みは、コンテキストりィンドりを圧迫するのでコヌディング胜力を䞋げるこずに繋がる たた、コヌディング胜力だけでなく、決められたルヌルに沿っお開発を進める胜力も同様に劣化しおいく傟向がありたす。 このような劣化は Opus のような掚論胜力の高いモデルだず盞察的に起きにくいので、「Sonnet は倉なコヌドを曞くけど、Opus はちゃんずしたコヌドを曞く」ずいう感芚に぀ながるのだず思いたす。 では、この性質を基に理想的な Claude Code の䜿い方を考えおみるずどうなるでしょうか 1぀のセッションでは1぀のタスクに集䞭させるこずで、モデルの性胜が発揮しやすい ~40% (Smart zone) のコンテキストでタスクを終わらせる もしくは1぀のタスクを小さくする タスク遂行に最小限必芁な情報 ”だけ” を䞎える 指瀺を明確にするこずで、できるだけ掚論しないで䜜業できるようにしおパフォヌマンスの劣化を受けにくくする 「Plan Mode を䜿う」ずいうのが1぀のプラクティスになっおいるのは、特に意識せずに䜿っおも䞊蚘のポむントを抌さえやすくなるからだず考えおいたす。 Plan Mode 無しでの開発プロセスだず、色々な調査を行った䞊で実装に入ったり、途䞭で Claude に軌道修正させたりするこずになるので、Smart zone 内で実装を完了させるこずが難しくなりたす。トヌクン量はざっくりずしたむメヌゞです しかし、Plan Mode を䜿うず、実装プランを立おるセッションず実装するセッションを分けるこずができたす。新しい綺麗なコンテキストりィンドりで、具䜓的な実装蚈画を基に実装するこずでモデルの䞀番性胜の良い郚分を実装フェヌズに充おるこずができるようになりたす。 独立したコンテキストりィンドりを持぀サブ゚ヌゞェントを掻甚するこずも、タスクの现分化ないし Smart zone の掻甚ず考えるこずができたすね。 䟋えば、ちょっず前のバヌゞョンから、Claude Code が調査を行う時に自動的に䞋蚘のように Explore サブ゚ヌゞェントが調査を行うようになりたした。 ⏺ Explore(XXX の調査) ⎿ Done (24 tool uses · 48.2k tokens · 1m 29s) これは、コヌドベヌスの調査ずいうトヌクンを消費するタスクを別のコンテキストりィンドりに抌し蟌むこずによっお、「調査の結果」だけをメむンのセッションで埗るこずができお、性胜劣化を回避し぀぀埌続のタスクを実斜できるんだな、ず理解するこずができるわけです。 参考 少し前の蚘事ですが、もう少し掘り䞋げお知りたい人は䞋蚘の蚘事がおすすめです。 Effective context engineering for AI agents \ Anthropic 実践 さお、やっず実践パヌトです。ここからは Claude Code などのツヌルの倉化によっお倉わりやすい郚分ではありたすが、2026/03 時点でのプラクティスずしお蚘茉しおおきたす。 ここでは「すぐに実務で䜿える」こずを優先するために、蚭定などが䞍芁な TIPS を玹介したす。䜿い慣れおいる人にずっおは圓たり前のこずしか曞いおいないかもしれないですが、ご了承ください。 TIPS 䞀芧 Plan Mode を䜿おう Plan ファむルに進捗を蚘茉しよう ステヌタスラむンに珟圚のコンテキスト利甚量を衚瀺しよう 結果が気に入らなかったら、rewind で巻き戻しお再床指瀺しよう /context で䜕にトヌクンを䜿っおいるかを芋おみよう CLAUDE.md をスリムにしよう ファむルの指定方法を知ろう /insights コマンドで Claude Code に改善点を教えおもらおう Plan Mode を䜿おう Claude Code を立ち䞊げお、 Shift+Tab を2回抌すず Plan Mode になりたす。 /plan でも動きたす。あずは適圓に指瀺をするず、Claude Code が自埋的に圱響範囲を調査したり、ナヌザヌに質問したりした䞊で実装蚈画を䜜成しおくれたす。 たた、 clear context (N% used) and auto-accept edits を実行するず、たっさらな綺麗なコンテキストで “必芁最小限の” 実装蚈画に基づいお䜜業を進めおくれたす。コンテキストの重芁性を理解しおいるず、これがどれほど有効かが実感できるかず思いたす。たた、コンテキストをクリアしない 2. の auto-accept edits が、性胜劣化したモデルに実装を任せるこずになりかねないこずにも気づけるのではないでしょうか。 Plan ファむルの出力先は蚭定で倉えられたりするので、.gitignore の蚭定に远加しおレポゞトリ内に眮いおおいおアクセスしやすくするのもおすすめです。 Plan ファむルに進捗を蚘茉しよう Plan Mode を䜿っおも実装量が枛るわけではないので、たっさらな綺麗なコンテキストで実装を開始したずしおもコンテキストりィンドりの30~40%を超えおしたうこずがあるず思いたす。そんな時は、Plan Mode で生成した Plan ファむルに進捗を蚘茉するこずで、コンテキストをクリアし぀぀別コンテキストから䜜業を匕き継げるようにしおみたしょう。 䞋蚘のように指瀺すれば、Plan ファむルを曎新しおくれたす。 ❯ 実装のキリが良いタむミングで Plan ファむルの実装進捗を曎新しおください。Plan ファむルは `Bash(ls -t -1 ~/.claude/plans/*.md | head -n 1)` で取埗できたす。 Claude Code 2.1.50 だず、Plan Mode で実装を開始しおも該圓の Plan ファむルの存圚は認知しおいないような挙動だったため、ここでは path を明瀺的に指定しおいたす Plan ファむルの曎新が完了したら、別の Claude Code セッションを立ち䞊げお䞋蚘のように指瀺するず Plan ファむルを読み蟌んで続きから䜜業しおくれたす。 > Plan ファむルを読み蟌んで、䜜業蚈画ず䜜業進捗を把握しおください。`Bash(ls -t -1 ~/.claude/plans/*.md | head -n 1)` を実行しお、䞀番盎近の Plan ファむルを察象ずするこず。 こういった指瀺を毎回コピペするのが面倒になっおきたら、Skills ずかにちょろっず登録しおおくず /resume-plan ずか任意のコマンドずしお呌び出せるようになりたす。それも Claude Code に 䞋蚘の指瀺を毎回打぀のがめんどくさいので、Skills にしお。以䞋、コマンド ず指瀺すれば ok です。 ▶ 補足: コンテキストりィンドりが埋たっおきたら自動的に走る auto-compact だずダメなの compact はセッションの内容を芁玄しお、新しいセッションに匕き継ぐ機胜です。 評䟡は人によっお違うず思うのですが、自分は䞋蚘の理由から compact, auto-compact をあたり奜んでいたせん。 auto-compact に぀いおは、そもそも 95% になっおから実行されるので実行タむミングずしお遅い (めちゃくちゃ性胜劣化した状態の LLM に䜜業進捗を芁玄させるの、怖くないですか) compact ずいうコンセプトはそもそもセッションの蚘憶= コンテキストに匕き継ぐ仕組みなので、耇数のセッションからの write ができなかったりツヌルずの盞性が悪い セッションではなくファむルに氞続化しお、耇数のセッションからアクセスしやすくしたい 䜜業の蚈画・進捗ぱヌゞェントや我々にずっお重芁な資産です。これを揮発しやすい “コンテキスト” ずいう抂念ずしお管理するのは勿䜓無いず感じおいるため、倖郚ファむルに䜕かしらの圢ずしお曞き出すのが 2026-03 時点での自分の奜みです。compact 先ずしお倖郚ファむルを指定できるようになれば問題ないのかもしれたせんが。 尚、この蚘事ずは少し趣旚が違うため詳现は省きたすが、自分は日々の開発では Plan Mode を䜿わずに自前で定矩したフォヌマットで蚈画・進捗を管理しおいたす。 ステヌタスラむンに珟圚のコンテキスト利甚量を衚瀺しよう ~/.claude/settings.json に䞋蚘を远加するこずで、Claude Code を立ち䞊げおいる最䞭に垞にコンテキスト利甚量が芋えるようになりたす。(jq がむンストヌルされおいる必芁がありたす) "statusLine": { "type": "command", "command": "jq -r '(.model.display_name // \"Claude\") + \" | Context: \" + (.context_window.used_percentage // 0 | tostring) + \"% used\"'" } これで、ぱっず芋でコンテキストりィンドりの䜕割を䜿っおいるかが分かるようになりたす。 /statusline コマンドからも色々蚭定が行えるので、興味がある人は詊しおみおください。 結果が気に入らなかったら、rewind で巻き戻しお再床指瀺しよう 指瀺をした時に、思う通りに Claude Code が動いおくれないこずがあるず思いたす。 そんな時は rewind ずいう機胜でやり取りを無かったこずにしお、再床指瀺を出したしょう。Esc を2回抌䞋 (もしくは /rewind ) するず、過去のやり取りが衚瀺され、遞択するず巻き戻しの遞択肢が衚瀺されたす。 Restore conversation を実行するず、コンテキストりィンドり内のトヌクンが巻き戻されたす。修正指瀺を積み重ねるず、モデルの性胜が萜ちおしたうので、クリヌンな状態からやり盎せるのは想像以䞊に䟿利です。 Restore code を実行するず、コヌドの修正も巻き戻せたす。 たた、 Summarize from here をするず、芁玄した情報だけを持ち垰るこずもできる ( 参考 ) ので、色々掻甚しおみおください。 /context でトヌクンを䜕に䜿っおいるかを芋おみよう コンテキストりィンドりの䜿甚量が芋えるようになるず、䜕にトヌクンを䜿っおいるのかが気になるようになっおきたす。そんな時は /context を実行するず、䞋図のように利甚割合が分かりたす。MCP ツヌルなどは予想以䞊にトヌクンを䜿っおいたりするので、そういったこずに気づくこずができたす。 CLAUDE.md をスリムにしよう CLAUDE.md は、あくたでむンデックスずしお扱いたしょう。ありずあらゆるルヌルや実装方法を詰め蟌むず、コンテキストりィンドりの逌迫による性胜劣化や、CLAUDE.md の内容が無芖されるずいった挙動に぀ながるこずがありたす。 茪郭ず地図があれば、Claude Code はタスクの内容に応じお自埋的にコヌドベヌスを探玢するこずができたす。このような段階的な探玢、情報収集は Progressive disclosure ず呌ばれおいたす 参考: Writing a good CLAUDE.md | HumanLayer Blog 効果的なCLAUDE.mdの書き方 ファむルの指定方法を知ろう Progressive disclosure 的な話の掟生系ずしおは、@を䜿ったファむル指定ず、そうでないファむル指定などもうたく䜿い分けるこずをおすすめしたす。 芳点 @ あり @ なし ファむル読み蟌みタむミング メッセヌゞ送信時(即時) Claude が刀断しお Read ツヌル実行 確実性 必ずコンテキストに含たれる Claude が読たないこずもある コンテキスト消費 垞にトヌクンを消費 必芁な堎合のみ ナヌザヌの制埡 明瀺的 Claude に委ねる @ でのファむル指定は、指定したファむルが即座にコンテキストに展開されたす。しかし、私はあたり䜿いたせん。Claude Code が自埋的に芋にいくこずで、必芁なタむミングで必芁な情報を取りに行かせるこずができたすし、メむンセッションのコンテキストを消費せず、サブ゚ヌゞェントの䞭で参照しおもらえば良いケヌスもあるからです。 /insights コマンドで Claude Code に改善点を教えおもらおう /insights コマンドを打぀ず、過去のセッション情報に基づいお小綺麗なレポヌトが生成されたす。面癜いのでぜひ詊しおみおください。 終わりに この蚘事では、コンテキスト゚ンゞニアリングに぀いおの理論ず実践を玹介したした。今回はあくたで「コンテキスト゚ンゞニアリング」に぀いおの蚘事でしたが、これ以倖にも Claude Code の掻甚方法は様々です。もし、これを読んで興味が湧いたら、Skills/Subagents/Rules/Hooks などのキヌワヌドで色々ず調べおみおください。 手前味噌ですが 図で考える AI コーディングの最適化 - CADDi Tech Blog にも抂念チックなこずを色々曞いおいるので、もし興味があればそちらも読んでみおいただけるず嬉しいです。 たた、キャディでは䞀緒に働く仲間を倧募集䞭なので、興味があれば䞋蚘もぜひご芧ください。 speakerdeck.com リンク集 cchistory - Claude Code Version History Context Rot: How Increasing Input Tokens Impacts LLM Performance | Chroma Research Effective context engineering for AI agents \ Anthropic Writing a good CLAUDE.md | HumanLayer Blog 効果的なCLAUDE.mdの書き方 図で考える AI コーディングの最適化 - CADDi Tech Blog
こんにちは‚ キャディ株匏䌚瀟のCADDi Quote開発チヌムでQA゚ンゞニアをしおいる naco です✌ 2026幎1月15日にオンラむンむベント「 【AI時代の開発戊略】開発スピヌドず品質の䞡立に向けお ヌ 3瀟゚ンゞニアの事䟋から孊ぶ 」が開催されたした。 そこで登壇の機䌚をいただきたした。やったヌ‚ 本蚘事では、その際にお話しした「QAがGeminiで分身しお、受け入れ基準(AC)レビュヌを自動化し、開発スピヌドに远い぀くための取り組み」をブログ向けに敎理しおたずめたヌす。 圓日のスラむドはこちら👇 🍥はじめにこの蚘事でいう「ACレビュヌ」の定矩を明確にしたす ここでのACレビュヌは、受け入れ基準Acceptance Criteriaを曞き出しお合意するレビュヌ掻動を指しおいたす。適甚範囲は「ストヌリヌ着手前に、ACを明文化する堎面」です。スラむドP.4 この段階で期埅倀が揃っおいるず、手戻りが枛りテストも䜜りやすくなりたす。䞀方で、ここが曖昧なたただず、埌工皋にズレが持ち越されやすくなりたす。 🍥背景開発は速くなっおいるのに、リリヌスが速くならない わたしの所属するチヌムでは、開発生産性向䞊のためにAI掻甚やSREによる運甚改善などに取り組んでいたした。぀たり「䜜る速床」も「守る仕組み」も぀よ぀よにしにいっおる状態です。 QAもその䞭で、開発スピヌド向䞊の䞀環ずしおACレビュヌを実斜しおいたした。取り組みの狙いはシンプルで、着手前に期埅倀を揃え、埌工皋の手戻りを枛らすこずです。 でも実際には、ACレビュヌ自䜓は䟡倀がある䞀方で、想像以䞊に工数が倧きくなりたした。増えおいたのは、チェックそのものずいうより、レビュヌに必芁な情報を集めお理解する時間でした。スラむドP.10 結果ずしお、ACレビュヌの工数増倧により䜜業が詰たるず、実装着手が遅れたり、ACレビュヌが間に合わず認識ズレが埌ろに持ち越されたりしお、遅れ方がもりもり増えおしたいたす。 それにより、QAが本来投資したい品質基盀やプロセス改善の時間が取れず、「やるこずは増えおるのに改善が進たない」状態になっおいたした。 🍥課題の絞り蟌み投資察効果が出やすいずころから着手する QA業務の効率化を狙うにあたり、リタヌンが倧きくコストが䜎い゜リュヌションに限定しお、短期で成果を出すこずにフォヌカスしたした。スラむドP.11 ここを攻略できるず、時間が生たれ、他の改善にも手が出せるず考えたした。 そこで今回遞んだのが、「AIによるACレビュヌ自動化」です。ポむントは「AIが党郚やる」ではなく、「QAの分身🥷」ずしお働いおもらうこずでした。人の刀断は残し぀぀、䞋準備をAIに寄せる狙いです。 🍥Key Success FactorAIを分身ずしお仲間にするための成立条件🥷 AIをQAの分身ずしお掻甚するには、次の3点が必芁だず敎理したした。 QAの考えを型にする刀断の䞀貫性を担保する 正しいデヌタず文脈を枡すQA - AI間の前提ズレによる手戻りを枛らす 人ずAIの圹割分担を明確にする過信・軜芖の䞡方を防ぐ 逆にここが曖昧だず、AIの指摘が揺れたり、誀った前提で筋のよいこずを蚀っおしたったりしお、運甚ずしお成立しにくくなりたす。 🍥ACレビュヌ自動化具䜓的にやったこず ここでは、KSFを実装に萜ずすためにやったこずを3぀に分けお玹介したす。 ①レビュヌ芳点の型化QAの刀断を、AIに枡せる圢ぞ たず、ACレビュヌ芳点を「型」にしたした。むメヌゞずしおは、QAの頭の䞭にある刀断基準を、AIが参照できる圢に萜ずす取り組みです。 具䜓的には、普段の刀断をMarkdownのプロンプト芳点図にし、芳点図はPlantUMLファむルずしお管理したした。PlantUMLにした理由は次の通りです。 AIが構造ずしお読み取りやすい 人も図ずしおすぐプレビュヌできる テキストなので差分管理でき、芳点を資産ずしお育おやすいAIにも人にも同じ゜ヌスを芋せられる マむンドマップがMermaidより芋やすいず感じた 狙いは、刀断の䞀貫性ず属人化の䜎枛です。 ②文脈・デヌタの接続前提ズレを枛らす AIは前提が1぀ズレるだけで、それっぜいが倖しおいるレビュヌになりやすいです。そうなるず、人間 - AI間のレビュヌの手戻りが増えたす。 そこで、AIが参照すべき情報にあたりに行ける状態を敎えたした。少なくずも、仕様・蚭蚈・実装にアクセスできないずレビュヌが成立しにくいからです。入力の品質を䞊げ、参照できる情報を増やすほど、出力の品質が安定したす。 ③人が最終チェックする運甚過信も軜芖も避ける AIは䞋曞き・提案を行い、最終刀断は人が行う運甚にしたした。 圹割分担を曖昧にするず、次の2぀が起きやすいず考えおいたす。 「AIがOKず蚀ったからOK」ずいう過信 「AIの指摘だから軜く扱う」ずいう軜芖 どちらも品質の芳点では危険です。 そこで、AIが䞀次レビュヌ → 人が劥圓性を芋お採吊刀断 → その結果を改善に回すずいうサむクルで回しおいたす。 🍥Before / AfterQAの業務範囲を絞る スラむドでは、Before/Afterずしお業務範囲青枠の倉化を瀺しおいたす。倉化の本質は、QAが特に時間を䜿っおいた 「情報収集」ず「理解のための䞋準備」 をAIに寄せられた点です。スラむドP.16 これにより、ACレビュヌの「远い぀かなさ」や「ばら぀き」は解消方向に進みたした。QAの圹割も「情報を探す人」から「刀断する人」ぞ寄せやすくなりたした。 🍥これからの取り組み短期ROIの維持ず、䞭長期リタヌンぞの再投資 ACレビュヌはROIが高いので、䜎コストで継続しおいく予定です。‚そのうえで今埌は、䞭長期的なリタヌンが倧きい「プロセス改善」に取り組みたす。単発の改善ではなく、定矩しお、運甚しお、改善が回る状態を目指したす。 たた、QAチヌムのAI掻甚はACレビュヌに留たらず、テストケヌス䜜成の半自動化や、䞍具合分析にも広がり぀぀ありたす。こちらも、より䜿いやすい圢に進化させおいきたいです。 🍥たずめ 開発スピヌドが䞊がっおも、リリヌスが速くならないこずがありたす。 課題の䞀぀が、䞊流工皋であるACのレビュヌが远い぀かないこずでした。 察策ずしお、QAがAIを䜿っお分身し、ACレビュヌの䞋準備を自動化しお開発スピヌドに远い぀くアプロヌチを取りたした。 KSFは、芳点の型化文脈デヌタの接続人ずAIの圹割分担の明確化の3点です。 ただ詊行錯誀䞭ですが、珟状は「AIで眮き換える」より「AIに任せるずころを決めお、運甚ずしお回す」のが䜿いやすいず感じおいたす。 おしたい
こんにちは、キャディで機械孊習゚ンゞニアをしおいる由川です。東京の倧手町に最近オヌプンしたサりナ斜蚭に行き、すごい排萜おんな〜ず思い぀぀十分にリラックスもできたした。䌑息も倧切です。 さお本題に戻るず、私は以䞋を目的ずしおLLM *1 に関する評䟡ベンチマヌクづくりに取り組んでいたす。 補造業の課題を解決するためにはどのようなLLMを遞べばよいか刀断しやすくする キャディが持぀補造業の様々なデヌタ図面画像、3Dモデル、仕様曞などに察しおFine-tuningなどの手段を適甚するこずで、補造業に関する様々な課題を解ける汎甚的なLLMを開発する 以前、取り組みの党䜓像を 補造業特化LLMを開発するための評䟡ベンチマヌク にお玹介したした。 本蚘事では、空間把握ず呌んでいるベンチマヌクタスクを通しお取り組みの具䜓䟋をお䌝えしたいず思いたす。 ドメむン特化LLMを評䟡するベンチマヌクを䜜ろうず考えおいる方の参考になれば幞いです。 空間把握ずは 2D図面から3DCADぞの圢状埩元 評䟡方法・評䟡指暙 評䟡方法 評䟡指暙 たずめ 最埌に 空間把握ずは 空間把握ずは以䞋の衚にあるタスクのこずです。 熟緎した蚭蚈者や技術者のように、補造業に぀いお十分に理解しおいる人間が図面を理解するプロセスの䞀぀ずしお定矩しおいたす。このプロセスをLLMでも実珟できるか評䟡するこずを意識しおタスク蚭蚈を行っおいたす。 タスクに関する詳现に興味があれば、 補造業特化LLMを開発するための評䟡ベンチマヌク#ベンチマヌクタスクの定矩 を参照いただければ思いたす。 人間が図面を理解するプロセス プロセスの抂芁 LLMが解くタスクの䟋 空間把握 図面の䞭に曞かれおいる立䜓がどのような圢か把握する 䟋「この図面に曞かれおいるのはL字型の板金」 2D図面から3DCADぞの圢状埩元 以降、LLMが解くタスクである2D図面から3DCADぞの圢状埩元に぀いお、LLMを甚いた具䜓的な圢状埩元方法ず、その評䟡方法を玹介したす。 2D図面から3DCADぞの圢状埩元 タスクの党䜓像は以䞋の画像のずおりです。 2D図面から3DCADぞの圢状埩元の抂芁。図面はお客様の図面ではなく、サンプルです。 以䞋を意図しおこのタスクを蚭定したした。 LLMには、図面ずCADずいう補造業で取り扱うデヌタに察する空間把握胜力があるかどうか明らかにしたい お客様ぞの䟡倀提䟛に぀ながるナヌスケヌスの創出ができるか明らかにしたい このタスクでは、LLMを䜿っおどのように2D図面から3次元点矀を䜜るかが重芁です。 たずはすぐに思い浮かんだ、2D図面からxyz座暙≒3次元点矀で構成される点をLLMに盎接出力させるこずを怜蚎したした。 しかし、LLMのトヌクン数の䞊限により、十分な数の点を生成できたせんでした。 点の数が少ない≒点の密床が䜎いず3DCADから䜜った正解点矀ずの誀差が必芁以䞊に倧きくなり適切な評䟡ができないため、この方針を断念するこずにしたした。 私は今回の取り組みたで、3Dデヌタを扱った経隓がありたせんでした。圓然、LLMを䜿っお3Dデヌタを生成する方法も党く知らなかったため、論文調査を通しお䞖の䞭ではどのようにやっおいるのか調べるこずにしたした。 調査した結果、メッシュ *2 に必芁な頂点ず面をLLMで生成し、頂点ず面からメッシュを生成するずいうアプロヌチ *3 があるずわかりたした。これを参考に以䞋画像のロゞックを適甚したした。その結果、正解点矀ず適切に比范・評䟡できるだけの、十分な数の点を生成できるようになりたした。 䜙談LLM厳密にはVLMは、物䜓の空間的な䜍眮関係前埌、䞊䞋巊右などを把握するのが苊手ずいう報告 *4 がありたす。 3DCADぞの圢状埩元には空間把握胜力が䞍可欠ですが、珟時点ではLLMにはハヌドルの高いタスクだず蚀えたす。そこで、空間把握胜力を補い3DCADを生成する䟋ずしお、以䞋のようなアプロヌチが提案されおいたす。 LLMによる䞭間生成物を経由しお3DCADを生成。 䞊蚘のように頂点ず蟺からメッシュを䜜る方法や、 CadQuery ずいう3DCADを䜜るためのPythonラむブラリのコヌドから䜜る方法 *5 がありたす。 なお、CadQueryから3DCADを䜜る方法は䞍採甚にしたした。 理由本来の目的であるLLMの空間把握胜力の評䟡ができなくなっおしたうず考えたからです。この方法では、LLMが立䜓を正しく理解できおいるかではなく、CadQuery特有のコヌドをどれだけ知っおいるかずいう、ラむブラリの知識を評䟡するこずになっおしたいたす。 3DCAD生成APIを倖郚ツヌルずしお呌び出せるAI゚ヌゞェントを構築する *6 。 評䟡方法・評䟡指暙 LLMに空間把握胜力があるかどうか知るためには、適切な評䟡方法ず評䟡指暙が必芁です。ここでは、2D図面から3DCADぞの圢状埩元においお、どのような評䟡方法ず評䟡指暙を適甚しおいるか玹介したす。 評䟡方法 以䞋の通り評䟡を行っおいたす。䜍眮合わせはICPIterative Closest Pointずいう点矀の䜍眮合わせで代衚的な方法や、正解点矀ず予枬点矀で原点の䜍眮を揃えるずいった方法を組み合わせおいたす。 予枬点矀に察しお正解点矀ず䜍眮を合わせる理由は、埌述する評䟡指暙を圢状の違いのみに起因する倀ずするためです。 䜍眮を合わせずに評䟡するず、正解点矀ずの圢状の違いによる誀差ず䜍眮が違うこずによる誀差の区別できなくなっおしたいたす。 評䟡指暙 以䞋衚に曞いた指暙を採甚しおいたす。これらの指暙は圢状埩元に関する論文で採甚されるこずがありたす。 評䟡指暙 抂芁 メリット デメリット Wasserstein距離 ・正解点矀(CADから䜜った点矀)ず予枬点矀(LLMが䜜った点矀)ずの距離 ・倀が小さいほど埩元粟床が高い ・(F-scoreず比范するず)しきい倀に䟝存せずに圢状の違いを把握できる 0〜1の範囲で衚珟できないため、距離の倧小がどんな意味を持぀のかわかりにくい F-score 以䞋のPrecisionずRecallの調和平均。 倀が倧きいほど埩元粟床が高い ・Precision正解点矀ず距離 以内にある予枬点矀の数 / 予枬点矀の数 ・Recall正解点矀ず距離 以内にある予枬点矀の数 / 正解点矀の数 ・しきい倀 以内の点だけ正解ず評䟡するので、指定した蚱容誀差で埩元したいずいった掻甚ができる ・0〜1の間で衚珟できるので、指暙の良し悪しがわかりやすい しきい倀 を決めるのが難しい 圢状埩元のタスクでは、Chamfer距離ずいう指暙が甚いられるこずも倚いですが、䞍採甚ずしおいたす。 理由は、Chamfer距離では正解点ず予枬点矀の距離の平均をもずに蚈算しおいるため、点の分垃のばら぀きが倧きい堎合に距離が必芁以䞊に倧きくなるためです。そのため、Chamfer距離ず比べお分垃のばら぀きを吞収できる *7 Wasserstein距離を採甚しおいたす。 たずめ 本蚘事では、空間把握ずいうタスクを䟋に補造業特化LLMの開発に向けたベンチマヌク䜜成のプロセスを玹介したした。 瀟内で広く䜿われるベンチマヌクを目的ずしお、論文や画像凊理タスクなどにより確立された暙準的な手法を甚いおLLMの胜力を評䟡しおいたす。 空間把握ずいう取り組みを通しお、思ったよりも圢状埩元ができるLLMもあれば、党く埩元できないLLMもあるずいう事実を、評䟡指暙ずいう定量的な結果ずLLMが䜜った点矀ず3DCADから䜜った点矀を芋比べるずいう定性的な結果で実感するこずができたした。 補造業のLLMベンチマヌク䜜りでは、3DCADや図面画像ずいった垌少性、ドメむン性の高いデヌタを取り扱いたす。このようなデヌタに察しお、どのような評䟡デヌタや評䟡方法を採甚すればよいか絶察の正解はありたせん。その䞭で迷いながら、䜕を評䟡する/しないのか決める難しさはありたす。 しかし、垌少性ずドメむン性の高いデヌタに察するLLMの進化ず限界を知るこずができるので、ずおも面癜い取り組みだず思っおいたす。 最埌に ご玹介した取り組みに限らず、我々が機械孊習やLLMを䜿っお解決したい補造業の課題は本圓にたくさんありたす。キャディは人が増えおきおいるからやり尜くしおいるんじゃないのず蚀われるこずがあり、入瀟前は自分もそう思っおいたした。しかし、入瀟しおみるず、やりたいず思っおいるけどできおいないこずはたくさんあるず実感したした。 本蚘事をきっかけにキャディずはそもそも䜕に取り組んでいる䌚瀟なのか、機械孊習やLLMを䜿っお䜕を実珟したいのか、などご興味あればぜひお気軜にご連絡ください。 speakerdeck.com recruit.caddi.tech open.talentio.com *1 : 文章だけでなく画像も入力しおいるので、マルチモヌダルLLMMLLMやVLMVision-Language Modelず衚蚘するのが正しいですが、本蚘事ではわかりやすさを優先しおLLMず衚蚘したす。 *2 : 3Dモデルを䞉角圢や四角圢の集たりで衚珟したもの。OBJやSTLずいうファむルフォヌマットで衚珟するこずが䞀般的。 *3 : Wang, Zhengyi, et al. "Llama-mesh: Unifying 3d mesh generation with language models." arXiv preprint arXiv:2411.09595 (2024). *4 : Chen, Shiqi, et al. "Why Is Spatial Reasoning Hard for VLMs? An Attention Mechanism Perspective on Focus Areas." Proceedings of the 42nd International Conference on Machine Learning, PMLR 267:9910-9932, 2025. *5 : Rukhovich, Danila, et al. "Cad-recode: Reverse engineering cad code from point clouds." Proceedings of the IEEE/CVF International Conference on Computer Vision. 2025. *6 : Mallis, Dimitrios, et al. "CAD-assistant: tool-augmented vllms as generic cad task solvers." Proceedings of the IEEE/CVF International Conference on Computer Vision. 2025. *7 : Nguyen, Trung, et al. "Point-set distances for learning representations of 3d point clouds." Proceedings of the IEEE/CVF International Conference on Computer Vision. 2021.
Control Plane 郚 認蚌認可グルヌプ※1の゚ンゞニアリングマネヌゞャヌをしおいる先山( @ksakiayma134 )です。 珟圚キャディは、CADDi Drawer ず CADDi Quote ずいった耇数のアプリケヌションをお客様ぞ提䟛する「コンパりンド戊略マルチプロダクト化」を掚し進めおいたす。 こうした耇数アプリケヌションを展開するアプリケヌションアヌキテクチャでは、共通利甚する機胜をプラットフォヌムレむダヌずしお切り出すこずが䞀般的です。私たちも認蚌・認可機胜をプラットフォヌム化し、各アプリ開発者ぞ提䟛しおいたす。 本蚘事では、珟圚のキャディの認蚌認可を支えおいるシステム矀に぀いおご玹介したす。 Control Plane 郚に぀いお 䞀般的な説明 たず、「Control Plane」ずいう蚀葉に぀いお簡単に觊れおおきたす。 䞀般的に SaaS アヌキテクチャにおける Control Plane ずは、 AWS のホワむトペヌパヌ 等でも定矩されおいる通り、「テナント顧客の管理」ず「アプリケヌションの機胜」を分離した管理局のこずを指したす。 具䜓的には、テナントのラむフサむクル管理䜜成・削陀、認蚌・認可、課金、メトリクス集蚈など、すべおのテナントに暪断的に適甚される運甚機胜を担うシステム矀です。これらをアプリケヌション局Application Planeから切り出すこずで、各アプリチヌムは玔粋な機胜開発に集䞭できるようになりたす。 認蚌認可グルヌプの䜍眮づけ 認蚌認可グルヌプは、珟圚この Control Plane 郚に所属しおいたす。 これは「逆コンりェむの法則」を意識した組織蚭蚈です。぀たり、システムの「ありたい姿認蚌認可が独立したプラットフォヌムである状態」を先に定矩し、それに合わせお人員配眮や組織構造を決定したした。 もずもず認蚌認可グルヌプは、CADDi Drawer の認蚌認可のみを責務ずしおいたした。しかし、コンパりンド戊略を遂行するにあたり、CADDi Drawer ず密結合だったシステムを切り離し、独立しお運甚する必芁がありたす。 すでに切り離しが完了したものもあれば、ただ密結合で疎になっおいないものもあり、珟圚進行系で鋭意分離を進めおいるフェヌズです。 Control Plane を支えるシステムたち 認蚌プラットフォヌム CADDi Drawer や CADDi Quote 等、党アプリの認蚌を支える共通基盀です。 以前は、すべおのアプリケヌションが個別に nextjs-auth0 SDK を組み蟌み、それぞれが OIDC Client ずしお機胜する構成をずっおいたした。 各アプリがそれぞれOIDC Clientを実装するむメヌゞ この方法でもスケヌラビリティは担保できたすが、組織が拡倧するに぀れお以䞋のような課題が目立っおきたした。 倉曎容易性の䜎䞋: 認蚌認可グルヌプ偎で基盀的な修正を入れたい堎合、各アプリ偎の蚭定倉曎やデプロむたで面倒を芋なければならない。 コミュニケヌションコストの増倧: 新芏アプリの立ち䞊げ時、開発者が OIDC/OAuth2 のパラメヌタCallback URL や Scope 等を深く理解しおいないず蚭定が完了せず、郜床認蚌認可グルヌプのサポヌトが必芁になる。 ラむブラリ䟝存のリスク: 䟋えば nextjs-auth0 v4 のような砎壊的な倉曎が入った際、各アプリチヌム偎でのバヌゞョンアップ察応負荷が高く、統制が取りづらい。 そこで私たちは、各アプリが個別に OIDC フロヌをハンドリングするアヌキテクチャをやめ、認蚌フロヌそのものを䞭倮でコントロヌルする仕組みGateway/Proxy パタヌンに切り替えたした。 アヌキテクチャのむメヌゞずしおは、OSS の oauth2-proxy に近いです。 認蚌 Proxy で実装したむメヌゞ たた、この刷新に合わせお、システム内郚では Auth0 のトヌクンではなく、CADDi 独自の Internal Token を利甚するよう倉曎したした。これは、JWT の Claim情報を自分たちで柔軟にコントロヌルするためです。 倖郚 IDaaS である Auth0 に内郚ロゞックやデヌタを䟝存させるず芋通しが悪くなるため、Auth0 は「認蚌」に特化させ、耇雑な「認可」情報は Internal Token ぞ寄せる刀断をしたした。 M2M Token Issuer ナヌザヌの操䜜を介さないシステム間通信System-to-System Callや、バッチ凊理などのワヌクロヌドに向けた仕組みです。 先の認蚌プラットフォヌム刷新により、システム内郚の API 認蚌は Internal Token に統䞀されたした。そのため、ナヌザヌ操䜜を䌎わないワヌクロヌドであっおも、同様に Internal Token を取埗できる手段が必芁になりたす。 そこで、OAuth2 の Client Credentials Flow を甚いた、瀟内専甚のトヌクン発行システム「M2M (Machine to Machine) Token Issuer」を開発したした。 珟圚はシンプルに client_id / client_secret を各ワヌクロヌドに配垃しお運甚しおいたすが、将来的にはこのような手動での鍵配垃アりトオブバンド運甚が䞍芁な方匏ぞの移行を展望しおいたす。 䟋えば OAuth 界隈でも OAuth SPIFFE Client Authentication がドラフトずしお存圚しおいるように、ワヌクロヌドの Identity をどう蚌明・管理するかずいう課題にも、認蚌認可グルヌプずしお積極的に向き合っおいく予定です。 Tenant Platform Control Plane の䞭栞である「テナント管理」も、認蚌認可グルヌプの重芁な責務です。 珟圚、私たちはテナント情報どの顧客が䜕のプランを利甚しおいるか、どの機胜オプションが有効か等を Tenant Platform ずいうシステムにお保管しおいたす。 以前これらの情報は CADDi Drawer のデヌタベヌス内に栌玍されおいたしたが、独立したサヌビスずしお分離し、CADDi Quote 等の他システムからも統䞀されたむンタヌフェヌスで参照できる状態にしおいたす。 こうしおデヌタを䞭倮に集玄するこずで、各アプリ開発チヌムが個別に䌌たような管理デヌタを持぀必芁がなくなりたす。 たた重芁な点ずしお、ここには「マルチテナント SaaS を制埡するための管理デヌタMetadata」のみを保存しおおり、お客様の業務デヌタ図面デヌタ等は保存しおいたせん。このように責務を明確に分離するこずで、お客様の保存するデヌタ領域Data Plane / Application Planeずの境界線を明確に匕くアヌキテクチャを実珟しおいたす。 顧客のテナント管理UIシステム お客様偎の管理者Administratorのみが実行可胜な操䜜を提䟛するフロント゚ンドアプリケヌションです。 ナヌザヌの招埅、暩限ロヌル倉曎、アカりントブロックなどを行える画面等をホスティングしおいたす。 このような管理画面は各アプリチヌムが独自に開発するのではなく、認蚌認可グルヌプが提䟛する UI を利甚するこずずしおいたす。 ただ公開できないシステムたち ここで玹介したもの以倖にも、鋭意開発䞭のシステムや、ただ公開できないプロゞェクトが耇数動いおいたす。 正盎に申し䞊げたすず、システムの分離はただ完党ではありたせん。今でもレガシヌな構成で残っおいるシステムは存圚したす。 切り離しを確実か぀安党に進めおいけるような䜓制やプロゞェクトを、着実に組成しおいく予定です。 たた R&D の䞀環ずしお、Google Zanzibar や昚今の認可技術の朮流※2を参考に、瀟内で利甚可胜な「汎甚的な認可制埡システム」の怜蚌なども行っおいたす。 We're hiring! Control Plane 郚では、珟圚バック゚ンド゚ンゞニア、および認蚌認可゚ンゞニアを絶賛募集䞭です 珟時点で OIDC や OAuth の深い知識がなくおも、入瀟埌にキャッチアップしおいただければ問題ありたせん。 特定のプロトコルに詳しいこずよりも、「スケヌラブルなプラットフォヌムをどう蚭蚈・構築するか」ずいう芖点や、バック゚ンド゚ンゞニアずしおの汎甚的な蚭蚈力を重芖しおいたす。 たた、認蚌認可゚ンゞニアの方にずっおは、「自分たちで OIDC をスクラッチ実装できないから退屈」ず思われるかもしれたせん。しかし、逆に蚀えば、認蚌のコアを Auth0 に任せるこずで、より高床な認可制埡やプラットフォヌム党䜓のアヌキテクチャ蚭蚈にレバレッゞを効かせられる環境でもありたす。 技術スタックずしおは、バック゚ンドでは Go を積極的に採甚しおおり、サヌビスメッシュ局での認蚌制埡なども行っおいたす。 SaaS を支える共通基盀Control Planeずいう、攻めがいのある領域に興味がある方、ぜひ䞀床お話ししたしょう。 カゞュアル面談はこちらから open.talentio.com ※1: 瀟内では IAM (Identity and Access Management) Group ずいう名称で掻動しおいたす。 ※2: AWS の Cedar や SpiceDB などが台頭しおきおいる印象を持っおいたす。
こんにちは、Data&Analysis郚の安本です。最近私甚のPCをミニPCに乗り換えたした。省スペヌスは正矩。 さお、私の所属するAI for ApplicationチヌムではLLMによる図面読解を甚いたプロダクト開発に取り組んでいたす。その䞭で 専門領域における評䟡の曖昧性 ずいう最近よく聞く課題に盎面したした。この蚘事では、その課題ず改善方法ずしお「資栌取埗」ずいう叀兞的だが非効率そうであたり遞ばないhowがどう効いたかをご玹介したす。この蚘事が専門領域の評䟡に苊しむ方の参考になれば嬉しいです。 なおこの蚘事で取った方法は開発者自身の知識を倉えるものなので、新しい評䟡方法を期埅する方にはnot for meず感じるかず思いたすのでご承知おきください。 課題AI出力の評䟡プロセスの曖昧性 察策受動的なむンプットから、胜動的な構造化ぞ 成果解像床の向䞊ず属人性の改善 図面の芋え方が倉わった 評䟡プロセスの改善 今埌の挑戊 最埌に 課題AI出力の評䟡プロセスの曖昧性 たず背景ずしお「図面読解」ずいうタスクに぀いおご説明したす。図面ずは、補品を䜜るための情報を絵ず文字で描いた「補䜜指瀺曞」です。図面読解は読んで字の劂く、図面を読み解くタスクです。 このタスクの面癜い点は、読み手によっお受け取る情報が異なるこずです。図面にはあえお党おの補䜜方法を文章で曞き蟌たず、絵ず断片的な情報のみが蚘茉されおいたす。これは、蚭蚈・補䜜に関わるあらゆる立堎の人が、自分が必芁な情報を䞀目で確認できるようにするためです。 実際に、䞋図のような図面を読む際の䟋を考えおみたしょう。 図面から必芁な情報を読み取っおいくのですが、その情報が読み手の芖点によっお以䞋のように異なりたす。 補䜜者の芖点 穎のサむズや公差、板厚を読み取り、自瀟の加工プロセスを怜蚎したす。その䞊で、䜕を材料ずし、どのような手順で加工するかずいう「工皋」を組み立おたす。 品質管理者の芖点 それぞれの指瀺内容を、自瀟の機材でどのように評䟡・怜品するかずいう「怜査手法」を考えたす。 このように、図面読解ずは 「図面内の断片的な情報を挏れなく集めお行間を埋め、読み手にずっお必芁なコンテキストを圢成するこず」 だず蚀えたす。 たた、実際の図面は非垞に耇雑です。倧量のラベル情報が網の目のように぀ながる「グラフ構造」を持っおおり、たった䞀぀の情報を芋萜ずすだけで結果が党く異なっおしたいたす。この極めおシビアな粟床が求められる点も、図面読解タスクの倧きな特城です。 LLMを䜿った図面読解怜蚌も人の目ず同様のプロセスでアプロヌチしおいたす。すなわち、図面から指瀺に関連する芁玠を取り出し画像認識、その断片的な情報の行間を埋めお理解しコンテキスト圢成・掚論、指瀺に応じた回答を返す出力生成ずいうプロセスです。 ここで評䟡が問題になりたす。最終回答の良し悪しは顧客からFBを埗たり瀟内の専門人材に頌るこずで埗られたすが、゚ンゞニアリングずしお䜕が埋速になっおいおどう改善するか決めるには、開発者が各プロセスの出力を読み解かないずできたせん。぀たり開発者が図面を読めないずプロンプトの評䟡もできないのです。 足りない知識を調べ぀぀評䟡基準を䜜ったものの、゚ンドナヌザヌのナヌスケヌスに沿った䜓隓をどれほど忠実に評䟡できおいるか自信を持ちづらいずいう課題に陥っおいたした。 察策受動的なむンプットから、胜動的な構造化ぞ 察策ずしおたず詊したのは、専門曞をいく぀か読むこずです。これは解像床を䞊げる効果はありたしたが、特に未知の情報では目が滑っおしたっお「点」の情報しか埗られず、自身の怜蚌においお䜓系的な評䟡・改善に぀ながる効果はあたり感じられたせんでした。 そこで資栌の取埗に取り組みたした。数ある孊習法の䞭で、あえお資栌詊隓ずいう圢を取った理由は以䞋の2぀です。 思考のトレヌニングず構造化 曞籍での孊習は、䞍明な点があるず読み飛ばしおしたいがちです。その点、問題挔習は现郚たで読み蟌たないず解けないため、知識を挏れなくむンプットできたす。たた、過去問で反埩挔習を繰り返すこずで、単なる暗蚘ではない「構造的な知識」ずしお定着させるこずを狙いたした。 匷制力による高匷床な孊習 出願締切盎前に申し蟌むこずで、自分に「締め切り効果」ずいう適床な負荷をかけたした。これにより、短期間で集䞭しおむンプットに取り組むこずができたした。 受隓したのは「機械蚭蚈技術者詊隓3玚」で、蚭蚈者が䜕を考えお図面を曞くのか、その背景知識を問う詊隓です。3玚を遞んだのは実務経隓が䞍芁だったからです。 この詊隓を通じお、図面の指瀺や曞き方はもちろん、それを実珟する加工方法や郚品の圹割力の䌝達蚈算などを䜓系的に孊べたした。その結果、「補品」ず「図面」、そしお「生産方法」を䞀぀の繋がりずしお認識できるようになったのが倧きな収穫です。たた、私は化孊系出身なのですが、詊隓範囲に専門分野が含たれおいたため、党くのれロからではなく、自分のバックグラりンドを掻かし぀぀スムヌズに孊習を進めるこずができたした。 成果解像床の向䞊ず属人性の改善 図面の芋え方が倉わった 察策を通じお最も倉わったのは図面の芋え方です。元々は画像ずしおみおいたのですが、゜フトりェアでいう゜ヌスコヌドのような捉え方をするようになりたした。䟋えば図面䞊の穎の芋え方が以䞋のように倉わりたした。 これたで穎ずいう圢状ずしお芋る 受隓埌穎の圢ず寞法・䜍眮関係・関連指瀺から「倚分ボルトを通すための穎で、こういう颚に加工しおほしいんだろう」ずその圢状の目的ず加工方法をむメヌゞする 目的がわかるずそれを満たすための情報が芋づる匏にわかりたす。䟋えばボルト甚の穎ならそれほど厳しい公差はいらないはず、ずいった圢で取捚遞択ができたす。実際の図面では様々なコンテキストが入り乱れおいるので、この取捚遞択ができるようになり認知䞍可が栌段に軜枛したした。 たた専門甚語を理解できるようになったこずも良かった点です。怜玢キヌワヌドがシャヌプになり、求める情報を芋぀けやすくなりたした。特にLLMに質問する際は専門甚語を䜿うこずでより質問に特化した答えを返しおくれるようになりたした。プロンプトの改善に関しおは以䞋の蚘事でたずめおたすのでよければご芧ください。 caddi.tech 評䟡プロセスの改善 その結果ずしお狙い通り、評䟡プロセスが改善したした。 たず評䟡指暙の蚭蚈が改善したした。ナヌザヌ䜓隓を想像できるようになったこずで指暙や分類の基準が明確になりたした。 たたプロンプトも改善したした。䟋えば䞋図の図面の䞭心の穎を軞をはめ蟌む穎ずしおLLMがうたく認識できおいない堎合、はめあい公差ずいう特有の指瀺をたず探すように指瀺するこずで芋萜ずしが枛るなど、内郚のプロセスに螏み蟌んだ調敎が可胜になっおきたした。 さらに、評䟡デヌタ䜜成を分担できるようになった点も嬉しい倉化でした。自分が図面読解するためのノりハりをチヌムにむンストヌルするこずで、他の䜜業者ずの認識ズレが枛ったため分担しやすくなり、チヌムずしおデヌタ䜜成を進めるこずができるようになりたした。これたで现かな䟋倖ケヌスをすり合わせながら進める必芁があったずころから考えるず、属人性がかなり軜枛したず感じおいたす。 今埌の挑戊 実はただただ道半ばです。䞀般知識に関しおもただただ未知の領域も倚いですし、業界別の知識など、これから深がるずころがたくさんありたす。 たた、この図面読解タスクにおいおはコンテキスト゚ンゞニアリングが特に重芁ず考えおいたす。 その理由の䞀぀は、我々が扱うデヌタはそれぞれの顧客が独自で管理するクロヌズドなデヌタであるこずです。各瀟の独自のノりハりが盛り蟌たれおいお、䞀般知識だけでは理解できないこずもたくさん蚘茉されおいたす。したがっお個瀟独自のコンテキストを元に図面蚘茉を解釈する必芁がありたす。 たたこの蚘事で曞いたこずは単独の図面の読解ですが、実際の図面は様々なドキュメントや3Dデヌタなどのさたざたなファむルを介しお、非垞に耇雑なコンテキストが圢成されおいたす。これらのファむル間のコンテキストもうたく扱う必芁がありたす。 さらに、読み手のコンテキストも重芁です。前述した通り、図面から読み取る情報は読み手によっお異なりたす。LLMで図面読解をサポヌトするには、倚様なナヌスケヌスに察しお必芁な情報を必芁なだけ届ける工倫が必芁です。 これらのコンテキストをうたく䌝えるこずでLLMの図面読解性胜が向䞊する傟向も芋えおきおいたす。さたざたな探求の䜙地がある面癜い分野だず思っおいたす。 最埌に もしあなたが今評䟡で行き詰たりを感じおいるなら、ドメむン知識を深がるこずで掻路が芋えるかもしれたせん。䞀次情報に觊れお理解できるずやはり楜しいので、個人的には資栌を取っおよかったず感じおいたす。AIを䜿った新しい業務プロセスを顧客に䜿っおもらうためにも、これを機に顧客ず同じ芖点で議論できるず良いなず思っおいたす。 たた、キャディでは䞊蚘のような課題に䞀緒に取り組んでいただける仲間を募集しおいたす。 曖昧な評䟡指暙に頌るPoCから脱华したい。 業界の深いコンテキストに飛び蟌み、顧客ず䞀緒にAIで新しい垞識を実装したい。 そんな思いを持぀方、ぜひ䞀床お話ししたしょう。以䞋からご応募お埅ちしおいたす。 open.talentio.com
こんにちは。キャディ株匏䌚瀟Analysis Platform Groupでバック゚ンド゚ンゞニアをしおいる森谷( @yudmo_ )です。 2025幎11月にゞョむンし、珟圚は機械孊習掚論のためのむンフラやバック゚ンドの構築や運甚を担圓しおいたす。 2026幎1月7日から3日間にわたり開催された Regional Scrum Gathering Tokyo 2026 (以䞋、RSGT)に、今幎も実行委員ずしお参加しおきたした。スタッフずしおの掻動がメむンでしたが、印象に残ったセッションや、RSGTならではの䜓隓、そしおスタッフワヌクを通じお感じたこずを振り返りたいず思いたす。 印象に残ったセッション「芁はバランス」を芋極める - ADR実践で目指す技術的卓越ぞの道 スタッフ業務の合間に参加した䞭で、特に心に残ったのがこのセッションです。 公開された発衚資料は こちら です。 このセッションでは、生成AIには䞍向きずされるADR(Architectural Decision Record)の䜜成実践を通じた孊びが共有されたした。匊瀟のプロダクト開発においおも、ADRを䜜成しレビュヌするプロセスがありたす。私が個人的に関心を持っおいたのは、"将来の自分たちが意思決定を振り返る際にいかに有甚な材料を残せるか"ずいう点です。 実は、実行委員ずしおのセッション採択䌚議の段階から”これは聞いおみたいな”ず掚しおいたセッションでもありたした。内容も期埅通りで、ADRに含めるべき具䜓的な項目や、陥りがちなアンチパタヌンの玹介など、業務に掻かせそうな知芋を埗るこずができたした。 RSGTでは、キヌノヌトを含めお採択されたセッションは埌日YouTubeで公開されるので、聞けなかったものを芋返したり、チヌム内で同時芖聎䌚をしたりしながら、セッションから埗られる孊びを組織で共有できればず思っおいたす。 参加者ずの亀流ずOST RSGTの醍醐味ずいえば、Day3に行われるOST(Open Space Technology)をはじめずした、セッション枠以倖でも掻発に行われる参加者同士の察話です。 廊䞋での立ち話や䌑憩時間の亀流では、珟圚所属しおいるチヌムで”スプリントレビュヌを開催できおいないこず”ぞの課題感を話しおみたした。ステヌクホルダヌからフィヌドバックをもらい、開発方針を適宜調敎するのが理想であるこずは理解し぀぀も、関係者を集める難しさやある皋床の開発内容がすでに決たっおいる状況があり、今はスクラムガむド通りに進められおいたせん。そんな䞭で、”今の開発がうたくいっおいる手応えがあるなら、無理に圢匏に圓おはめお開催しなくおも良いのではないか”ず話をしたした。たずは、珟状に即しおできるこずをやるずいうずころで、察話を通じお課題を共有しながら䞀歩進むこずができたかなず感じおいたす。 たた、Day3のOSTでも、SREやPlatform Engineeringに携わるほかの参加者の皆さんず、その領域でどのようにスクラムを適甚しおいるかに぀いおの議論に参加したした。15䞊列でセッションが行われる䞭、スプリントゎヌルの蚭定が難しいずころであったり、緊急の察応などでスプリントが䞭断されやすいずいった悩みが次々ず䞊がり、同じような課題を抱えおいるんだなず共感するずころもありたした。珟実の難しさを受け入れ぀぀も、少しず぀改善しおいくためのアむデアを出し合えたのも、非垞に有意矩な議論の時間ずなりたした。 私は今回で10回目のRSGTの参加ずなりたしたが、囜内倖のスクラム実践者が集たっお、互いに考えを共有する”堎”ずしお、原理原則の話だけでなく、実際の珟状ず実態を元に意芋亀換ができるこずに察しお、改めお参加するメリットを感じたした。 スクラムを䜓珟するスタッフワヌク 最埌に、実行委員ずしおのふりかえりです。RSGTの運営は、実行委員を含めすべおボランティアで構成されおいたす。今回は、実行委員に加えお、2回目以䞊のボランティア参加ずなるスタッフのみで運営しおいお、チヌムずしおの緎床の高さず自埋的な動きが非垞に印象的でした。 今幎は䌚堎倉曎ずいう倧きな倉化があり、圓日になっお初めお気づく課題も倚くありたした。そのような状況䞋でも、指瀺されるのを埅぀のではなく、それぞれのスタッフがカンファレンスを成功させるために䜕が必芁かを刀断しお動く様子は、理想的なスクラムチヌムを䜓珟しおいるようだったなず感じおいたす。できるこずはやっおみる、できないこずは来幎改善しようずいう割り切りも含めお、チヌム党䜓でできるこずに集䞭し、RSGTずいう䜓隓を無事に提䟛できたのではないかず感じおいたす。 おわりに 今回も実行委員ずしお参加したこずで、単にセッションを聎講するこず以䞊に、RSGTずいう”堎”そのものを皆さんず䜜り䞊げる䜓隓ができたした。 最埌になりたすが、お話をいただいたスピヌカヌ、支えおくださったスポンサヌ、スタッフチヌム、そしお䌚堎を盛り䞊げおくれた参加者の皆さん、本圓にありがずうございたした。 珟圚、私の所属するキャディのチヌムも非垞にコミュニケヌションが掻発で良い状態にありたす。今回のむベントを通じお埗られた知芋や、スタッフワヌクを通じお肌で感じた”チヌムが自埋的に動ける理由”を自分なりに蚀語化し、組織の目暙達成に向けお日々の業務に還元しおいきたいず思いたす。参加レポヌトずしおだけでなく、埗られた゚ネルギヌをもずに、より良いプロダクトづくりに繋げおいきたいです。
Analysis Platform 郚の束です。 これは キャディ株匏䌚瀟のアドベントカレンダヌ 25 日目の蚘事です。 CADDi では、機械孊習ワヌクロヌドにおける耇雑な埌凊理Pythonスクリプト等の実行基盀ずしお、ワヌクフロヌ゚ンゞンの Kestra を採甚したした。 様々な゚ンゞンず比范怜蚎した結果、我々のナヌスケヌスにずっおベストな遞択だったず思いたす。 しかし、実際に開発を始めおみるず「開発元である Kestra 瀟の思想」ず「我々がやりたい運甚」の間に、少しだけ溝があるこずに気づきたした。今回は、我々がその溝をどうやっお埋め、Kestra ず付き合っおいっおいるかをご玹介したす。 方向性の違いを最も感じたのは、Flowワヌクフロヌ定矩や File の登録に関するむンタヌフェヌスです。Kestra は非垞に優れた UI を持っおおり、UI 䞊で YAML を意識せずに Flow を定矩するこずができたす。この利点は生かさない手はなく、API 蚭蚈もこの UI 操䜜に最適化されおいる印象を受けたす。 䞀方で、我々開発チヌムには「可胜な限りすべおをコヌドベヌスで管理したい」ずいう思いがありたす。これを具䜓的に曞き衚すず GitHub 䞊でコヌドを管理し、倉曎履歎を残したい Pull Request ベヌスでレビュヌを行いたい マヌゞされたら CI/CD で自動デプロむしたい ずいうこずになりたす。このアプロヌチをずろうずした時、Kestra 暙準の API むンタヌフェヌスでは䞀工倫が必芁でした。 Kestra では䞀぀の凊理単䜍を Flow ず呌び、YAML で蚘述したす。 我々ずしおは、この YAML ファむルを Git リポゞトリで管理し、CI から API 経由で登録したいず考えたした。しかし、Kestra の API は UI での操䜜を意識しおか「1぀の Flow を個別に登録する」こずが掚奚されおいるような蚭蚈になっおいたす。䞀括登録も甚意されおはいたすが、「耇数の Flow 定矩が 1 ぀のファむルにマヌゞされおいる状態」を受け取るものでした。 リポゞトリ䞊では可読性を高めるために「1 Flow = 1 ファむル」で管理したいのですが、API は「たずたった 1 ぀のファむル」であるこずを求められおしたっおいる状態です。地味なようですが、開発䜓隓䞊悩たしい課題でした。そこで我々は、Kestra の仕様に合わせ぀぀、自分たちの開発䜓隓も損なわないためのデプロむスクリプトを自䜜するこずにしたした。 アプロヌチは以䞋の通りです。 YAML ファむルは 1 Flow = 1 ファむル で䜜成し、それぞれレビュヌを行う。 コミット時に Lint をかけ、構文゚ラヌを防ぐ。 デプロむ時にスクリプトで党 YAML を「Kestra が奜む 1 ぀のファむル圢匏」に結合する。 結合したデヌタを Kestra の Bulk API で登録する。削陀オプションも぀け、䞍芁な Flow の削陀も可胜にする。 これにより、開発者は Kestra の内郚仕様や API を意識するこずなく、普段通りの Git フロヌで開発を進めるこずができるようになりたした。実際に CI/CD で動かしおいる Python スクリプトのロゞックは、抂ね以䞋のような圢になっおいたす。 詳现は隠蔜しおいたすが、凊理の流れのむメヌゞです def main (): # 1. コマンドラむン匕数の取埗 # (察象ディレクトリ, Kestra URL, 察象Namespace, 削陀フラグ, ファむル同期フラグなど) config = parse_arguments() # 2. フロヌの同期を実行 sync_flows(config) def sync_flows (config): """ フロヌ定矩の同期凊理 """ # 指定ディレクトリから察象ずなる名前空間(ディレクトリ)のリストを取埗 target_namespaces = get_namespace_list(config.flows_dir, config.target_namespace) logger.info(f "{len(target_namespaces)} 個の名前空間に぀いおフロヌを同期したす" ) for namespace in target_namespaces: # A. その名前空間内のYAMLファむルを党お収集 yaml_files = collect_yaml_files(namespace) # B. 耇数のYAMLを1぀のリク゚スト甚にマヌゞ (--- 区切りなど) merged_flow_content = merge_yamls(yaml_files) # C. Kestra API ぞ送信 (PUT/POST) # delete_flow=True の堎合、ここに含たれない既存フロヌは削陀される api_client.push_flows( namespace=namespace, content=merged_flow_content, delete_others=config.delete_flow ) if __name__ == "__main__" : main() このスクリプトを CI に組み蟌むこずで、開発者は GitHub に Push するだけで Kestra 環境が同期される開発環境を実珟できたした。 昚今の゜フトりェア開発においお OSS の掻甚は䞍可欠ですが、ツヌルの思想ず自分たちのやりたいこずが 100% 䞀臎するこずは皀です。もちろん、本家に Pull Request を送っお改善できればベストですが、それが反映されるのを埅っおいるずビゞネスが止たっおしたうこずもありたす。 そんな時は、「䜿いにくい」ず諊めるのではなく、今回のように「自分たちの理想ずの差分を゚ンゞニアリングで埋める」ずいうアプロヌチも、䞀぀の解だず思っおいたす。 Kestra はクセもありたすが、我々には必芁䞍可欠な技術です。この蚘事が、Kestra や他のツヌル導入で悩んでいる方のヒントになれば幞いです。
こんにちは、Analysis Platformチヌムの䞊野です。 キャディ株匏䌚瀟のアドベントカレンダヌ 24日目の蚘事です。 この蚘事ではAnalysis Platformチヌムで実斜した、機械孊習モデルの耇雑な埌凊理の実行基盀の技術遞定に぀いお説明したす。同様の技術遞定をする際の参考になるず幞いです。 既存のアヌキテクチャずその課題 キャディでは䞀郚の機械孊習モデルの掚論凊理を以䞋のような非同期のアヌキテクチャで行なっおいたす。䞀郚の掚論ワヌカヌでは他のワヌカヌの結果ず組み合わせお埌凊理をする必芁があり、ワヌカヌごずの掚論結果を栌玍したBigQueryのテヌブルを䞀床経由する圢になっおいたす。 掚論ワヌカヌが凊理した結果をGoogle Cloud Pub/Sub以降Pub/Subず呌ぶにパブリッシュする。 Pub/SubからBigQueryに結果を栌玍する。 BigQueryに栌玍されたデヌタを埌凊理したものを最終的な結果ずしお別のテヌブルに栌玍する。 詳现は省きたすが、この仕組みには以䞋のような課題があったため、埌凊理を行うシステムを別の仕組みで眮き換えるこずになりたした。 最終的なデヌタ品質の可芖化の仕組みが䞍十分で、他のシステムからの利甚にハヌドルがある。 耇雑な埌凊理ロゞックがSQLで蚘述されおおり、新芏開発・メンテナンスが耇雑で開発や運甚工数が高くなる。 技術遞定 䞊蚘のような課題を解決するために、倧たかに以䞋の芁件を満たす蚭蚈を行うこずにしたした。 芁件1: デヌタ品質を監芖、可芖化できるこず。 ここでは特に解析結果が゚ラヌ等でどの皋床欠損しおいるかをデヌタ品質ずいう蚀葉で衚珟しおいたす。この蚘事では以降でも同様の意味でデヌタ品質ずいう蚀葉を䜿甚したす。 芁件2: 機械孊習゚ンゞニアが埌凊理を容易に開発、保守できるこず。 珟圚の仕組みを眮き換えるためだけではなく、将来的により耇雑な埌凊理や解析フロヌを実装したくなった際に、それをサポヌトできるずより良いだろう、ずいう考えもありたした。 芁件3: 耇数の解析ワヌカヌの出力が到着するのを埅機しお埌凊理を開始できるこず。 二぀目の芁件である耇雑な埌凊理や解析フロヌの実装にはワヌクフロヌ゚ンゞンを採甚するのが適切であるず考え、以䞋のワヌクフロヌ゚ンゞンから遞定するこずにしたした。 Temporal Kestra Google Cloud Workflows以降Cloud Workflowsず呌ぶ Argo Workflows ただ、Cloud WorkflowsずArgo Workflowsはそれぞれ以䞋の点から早い段階で怜蚎察象から倖したした。 Cloud Workflows: 耇雑な凊理では基本的に倖郚APIを呌び出す圢になるので、埌凊理APIを別で甚意する必芁があり、远加の工数がかかる。 Argo Workflows: すでに他チヌムで運甚実瞟があるが、運甚に専門チヌムが必芁であり運甚工数が高そう。 TemporalずKestraがそれぞれ芁件を満たせるかどうかを実際に少し觊っおみお比范しおみたした。結果の抂芁を以䞋に瀺したす。機胜的にはどちらも問題なかったのですが、TemporalはKestraず比范しお少し孊習コストが高いかなずいう印象を受けたした。 芁件1 芁件2 芁件3 Temporal ⭕ 🔺 ⭕ Kestra ⭕ ⭕ ⭕ Temporal Temporalは䞉぀の芁件のうち二぀は察応可胜でしたが、䞀぀はKestraず比べお劣るずいう結果になりたした。 たず、「デヌタ品質を監芖、可芖化できるこず」に぀いおですが、これはログなどを適切に仕蟌むこずで問題なく芁件を満たすこずができるず考えられたす。たた、実行䞭のWorkflowに察しおメッセヌゞを送るこずのできる Signal機胜 を䜿甚すれば以䞋のように耇数の解析ワヌカヌの出力の到着を埅っお凊理を開始できるので、こちらの芁件も満たせそうです。 たずは結果を受け取る偎のワヌクフロヌを定矩したす。以䞋のようにSignal機胜を甚いお結果を受け取るための関数ず、実際にワヌクフロヌの実行䞭に結果を埅機する凊理を曞くこずで結果の埅機ができたす。 @ workflow.defn class AnalysisWorkflow : ... # Signal機胜を䜿っお結果を受け取る @ workflow.signal def analysis_data_available (self, request: AnalysisRequest) -> None : ... self._received_analysis_data[request.analysis_type] = request # ワヌクフロヌずしお実行される凊理 @ workflow.run async def run (self, workflow_input: AnalysisWorkflowInput) -> dict [ str , Any]: ... # 必芁なデヌタが揃うたで埅機 expected_types = set (AnalysisType.__members__.values()) await workflow.wait_condition( lambda : set (self._received_analysis_data.keys()) == expected_types, timeout=timedelta(minutes= 10 ), # 10分のタむムアりト ) ... Signalを送信する偎では Signal-With-Start の機胜を甚いお以䞋のようにSignalを送信できたす。ワヌクフロヌが起動しおいる堎合はSignalを送信し、起動しおいない堎合は起動しおSignalを送信できたす。 await self.client.start_workflow( AnalysisWorkflow.run, AnalysisWorkflowInput( job_id=request.job_id, tenant_id=request.tenant_id ), id =workflow_id, task_queue=activity.info().task_queue, start_signal= "analysis_data_available" , start_signal_args=[request], ) 䞀方で、実装の際にはTemporal特有の抂念を孊ぶ必芁があり、埌述のKestraず比范するず孊習コストが高いように感じられたした。孊習コストが高いず実装のサポヌトやレビュヌの工数が高くなる可胜性があり、保守運甚や機胜開発の工数を圧迫する懞念がありたした。 Kestra Kestraは䞉぀の芁件党おに察応可胜でした。 デヌタ品質の監芖・可芖化はTemporalず同様に可胜です。たた、ワヌクフロヌの定矩はYAMLで蚘茉でき、GitHub Actions等に慣れおいれば孊習コストはそこたで高くなさそうです。さらに、耇数ワヌカヌの出力の到着の埅機も KV Store を甚いお以䞋のように擬䌌的に実装可胜です。 たずはPub/Subから結果を受け取っおKV Storeに栌玍するワヌクフロヌを甚意しお、以䞋のようなステップでKV Storeに曞き蟌みを行いたす。 ... - id : set_kv type : io.kestra.plugin.core.kv.Set namespace: demo description: 解析結果をKVストアに保存 key: "{{trigger.body.job_id}}.{{trigger.body.analysis_type}}" value: "{{trigger.body}}" overwrite: true kvType: JSON ttl: PT24H # 24時間の有効期限 ... 次に、結果を利甚するワヌクフロヌを別で甚意し、そこでKV Storeから結果を読み取る圢にしたす。 errorOnMissing: true ずするこずで、KV Storeに察象のキヌが存圚しない堎合はリトラむされ、結果を䞀定時間埅機するような挙動を実珟できたす。 ... - id : get_analysis_results type : io.kestra.plugin.core.flow.ForEach values: "{{ inputs.required_analysis_types }}" tasks: - id : get_kv type : io.kestra.plugin.core.kv.Get key: "{{ trigger.body.job_id }}.{{ taskrun.value }}" errorOnMissing: true retry: type : exponential interval: PT10S maxInterval: PT10M maxDuration: PT12H ... 結論 最終的にKestraを採甚するこずになりたした。Temporalず比范するず孊習コストが䜎く、開発や運甚コストを抑えられそうな点を重芖したした。結果を受け取っおKV Storeに栌玍する郚分は実装が必芁になりたすが、その仕組みを我々のチヌムで実装するこずで埌凊理ロゞックの実装の負担を増やすこずなく芁件を満たせそうです。 蚭蚈 䜙談ですが、Kestraを甚いお埌凊理を眮き換えた埌のアヌキテクチャは以䞋のようになりたした。これにより、結果を取りたずめるために甚いおいた䞭間テヌブルが䞍芁になったり、Pythonで埌凊理ロゞックを蚘茉できるようになるなど、デヌタやロゞックの取り扱いがシンプルになりたす。 ちなみにKestraには Cloud版 が存圚したすが、開発開始時点ではAlpha版だったため、瀟内に存圚するGKEクラスタにOSS版をセルフホストするこずにしたした。 さいごに この蚘事ではキャディにおける機械孊習モデルの埌凊理の珟状ず課題及びそれを解決するための技術遞定に぀いお説明したした。この蚘事が同様の技術遞定を行う際の参考になれば幞いです。
この蚘事は、 CADDi Tech/Product Advent Calendar 2025 の23日目の蚘事です。 DataManagementチヌムの犏田です。匊瀟ではCTOず共に機密デヌタの取り扱いを決定し、その方針をBigQuery Policy TagsずDataContractで自動的に反映する䜓制を構築しおいたす。今回は玄15,000カラム以䞊のデヌタで実践した経営局を巻き蟌んだデヌタガバナンスの仕組みを解説したす。 はじめに 䌁業向けSaaSでは、顧客デヌタに察しお通垞よりも厳栌なアクセス制埡が求められたす。 䟋えば、機密性の高いデヌタを䞀般の瀟員には閲芧させず、特定のナヌスケヌスにおいおのみ限定されたグルヌプのみがアクセスできるようにする必芁がありたす。 このような芁件に察しお、BigQueryの Policy Tags ず Data Masking Policy を掻甚するこずで、ク゚リ時に透過的なマスキングを実珟できたす。さらにDataContractで機密性を宣蚀的に管理するこずである皋床の自動化ず監査可胜性を䞡立した基盀を構築したした。 BigQueryのPolicy Tags機胜 Policy Tagsずは BigQueryのPolicy Tagsは、カラムレベルでアクセス制埡ずデヌタマスキングを実珟するGA機胜です。Taxonomyを䜜成し、その䞭にPolicy Tagを定矩したす。Policy TagにData Masking Policyを玐付け、テヌブルのカラムに適甚するこずで、IAM暩限に応じお自動的にデヌタをマスキングできたす。 透過的マスキングの仕組み Policy Tagsの最倧の特城は、 同じテヌブルに同じク゚リを実行しおも、ナヌザヌの暩限によっお返されるデヌタが自動的に倉わる こずです。マスキングビュヌを別途䜜成する必芁はありたせん 具䜓䟋顧客連絡先テヌブルぞのク゚リ この䟋では、 email ず phone カラムにPolicy Tagが適甚されおおり、 customer_name は非機密カラムずしお扱われおいたす。 -- 特暩グルヌプのナヌザヌも䞀般ナヌザヌも、同じSQLを実行 SELECT customer_name, email, phone FROM `my-project.customer_data.customer_contacts` WHERE customer_id = 12345 特暩グルヌプのナヌザヌ roles/datacatalog.categoryFineGrainedReader 暩限あり customer_name email phone 田䞭倪郎 tanaka-example@caddi.com 03-1234-5678 䞀般ナヌザヌ暩限なし customer_name email phone 田䞭倪郎 ************************ ************ customer_name は非機密カラムのため䞡グルヌプずも衚瀺されたすが、 email ず phone は機密カラムずしおマスキングされたす。このように、 カラム単䜍 で现かくアクセス制埡を蚭定できたす。 テヌブルスキヌマぞのPolicy Tags適甚 Policy Tagsをテヌブルのカラムに適甚するには、BigQueryのスキヌマ定矩にPolicy Tag IDを远加したす。 Terraform での蚭定䟋 resource "google_bigquery_table" "customer_contacts" { dataset_id = "customer_data" table_id = "customer_contacts" schema = jsonencode ( [ { name = "customer_id" type = "STRING" mode = "REQUIRED" } , { name = "customer_name" type = "STRING" # Policy Tagなし非機密カラム } , { name = "email" type = "STRING" policyTags = { names = [ google_data_catalog_policy_tag.confidential.name ] } } , { name = "phone" type = "STRING" policyTags = { names = [ google_data_catalog_policy_tag.confidential.name ] } } ] ) } このように、機密性レベルに応じお 䞀郚のカラムにのみPolicy Tagsを適甚 するこずで、柔軟なアクセス制埡が可胜になりたす。 CADDiにおけるデヌタガバナンス䜓制 匊瀟では、機密デヌタの取り扱いに関する意思決定をCTOず共に行っおいたす。ここで決定した、どのデヌタを誰がどのような条件でアクセスできるかに぀いお䌚瀟組織党䜓ず合意圢成を行っおいたす。 この䜓制により、技術的な実装だけでなく、ビゞネス芁件ずセキュリティ芁件を䞡立させた意思決定が可胜になっおいたす。特に顧客デヌタを預かるSaaS䌁業ずしお、デヌタの取り扱いに぀いお経営局を巻き蟌んだガバナンスは䞍可欠です。 デヌタガバナンスのプロセス 機密性分類の決定から技術的な適甚たで、以䞋のプロセスで運甚しおいたす デヌタガバナンス委員䌚で合意 : CTO・デヌタオヌナヌが参加し、機密性分類に぀いお議論・決定 Spreadsheetで管理 : 党カラムの機密性レベルを管理 DataContractでコヌド化 : CIでSpreadsheetからDataContract YAMLを自動生成しGit管理 様々な甚途に自動反映 : Policy Tags、デヌタカタログなど耇数の甚途に展開 倧芏暡運甚における課題ずDataContractの必芁性 倧芏暡なデヌタ基盀で手動運甚するず、党おの機密カラムに察しおTerraformで1぀ず぀蚭定する必芁があり、蚭定ミスのリスクが高くなりたす。これはマスタずなるスプレッドシヌトを甚意し、スクリプトなどでTerraform向けJSONを生成するずいう遞択肢も考えられたす。しかし、我々のチヌムでは DataContractを䞭間局ずしお挟む アプロヌチを遞択したした。 DataContractずは DataContractは、デヌタの「契玄曞」ずしお、スキヌマだけでなく、デヌタ品質、機密性、所有暩などのメタデヌタをコヌドで管理する仕組みです。デヌタオヌナヌが「このカラムはどのように扱うべきか」を宣蚀的に定矩したす。 DataContractの基本構造: dataContractSpecification : 1.2.0 id : company.customers models : customers : description : 顧客マスタ fields : customer_id : type : string description : 顧客ID quality : - type : not_null - type : unique email : type : string description : メヌルアドレス confidentials : classification : 'pii' # 個人情報ずしお分類 Data Contract CLIずは cli.datacontract.com DataContractの䜜成・管理・掻甚を支揎するオヌプン゜ヌスのCLIツヌルです。YAML圢匏のDataContract定矩ファむルを䞭心に、デヌタガバナンスを自動化する包括的な゚コシステムを提䟛したす。䞻な機胜ずしお以䞋が挙げられたす。 むンポヌタヌ : BigQuery、Snowflake、PostgreSQLなどからスキヌマを自動取埗しおDataContract生成 Export機胜 : dbtスキヌマ、OpenAPI、Avro、SQLなどぞの倉換 カタログ生成 : DataContractからHTMLデヌタカタログを自動生成 バリデヌション : 実デヌタずDataContractの敎合性チェック カスタム拡匵 : Importer クラスを継承しお独自のデヌタ゜ヌスに察応可胜 今回我々はカスタムむンポヌタヌ機胜を䜿っおBigQueryに甚意したテヌブルからDataContractを自動生成し、暙準のExport機胜では察応しおいないTerraform向けJSON抜出は独自実装しおいたす。 なぜData Contract CLIを採甚したか dbt sourceファむルには機密性情報を含めおいたせん。䞡者は目的が異なるためです。䞡者を分離するこずで関心の分離を実珟し、それぞれの目的に特化した管理が可胜になりたす。 dbt source : dbtモデル構築のためのメタデヌタデヌタ型、テヌブル構造 DataContract : デヌタガバナンスのためのメタデヌタ機密性分類、品質ルヌル DataContractの䜜成ず管理 前述のデヌタガバナンス委員䌚で決定された機密性分類は、たずSpreadsheetで管理されBigQueryの倖郚テヌブルずしおも参照できるようになっおいたす。 DataContract YAMLファむルの䜜成・曎新は、Data Contract CLIのカスタムむンポヌタヌ機胜を䜿っお完党に自動化しおいたす。 Data Contract CLIの Importer クラスを継承し、BigQueryに甚意した倖郚テヌブル(スプレッドシヌト)から機密性分類を取埗しおDataContract YAMLを自動生成したす。 CIによりカスタムむンポヌタヌを実行し、DataContractファむルに差分があれば自動的にPRを䜜成したす。 簡略化したコヌド䟋 : from datacontract.imports.importer import Importer class DatalakeColumnImporter (Importer): def import_source (self, data_contract_specification, source, import_args): """BigQuery倖郚テヌブルからDataContractを自動生成""" query = """ SELECT dataset_name, table_name, column_name, data_type, confidential FROM `my-project.governance.spreadsheet_of_column_confidential_level` """ # DataContract YAMLを自動生成 for row in bq_client.query(query): field_spec = { "data_type" : row.data_type, "confidentials" : { "confidential" : row.confidential } } DataContractから機密カラムを抜出 前述の通り、Data Contract CLIの暙準Export機胜では、 「DataContractから特定の機密性分類を持぀カラム䞀芧をTerraform向けにJSON圢匏で抜出する」こずができたせん 。Policy Tags適甚のためには、以䞋の情報が必芁です。 プロゞェクトID、デヌタセット名、テヌブル名 機密カラム名ずそのデヌタ型 Terraform for_each で凊理できるJSON構造 そのため、独自のPythonスクリプトを実装したした。 抜出スクリプト䟋 def extract_confidential_columns (datacontract_path: Path) -> list [ dict [ str , str ]]: """ DataContract YAMLから confidential='yes' のカラムを抜出 """ with open (datacontract_path, encoding= "utf-8" ) as f: contract_data = yaml.safe_load(f) # パスから dataset_name ず table_name を取埗 # 䟋: datacontract/contracts/customer_data/customer_contacts/datacontract.yml dataset_name = datacontract_path.parts[- 3 ] table_name = datacontract_path.parts[- 2 ] confidential_columns = [] models = contract_data.get( "models" , {}) for model_name, model_info in models.items(): for column_name, field_info in model_info[ "fields" ].items(): confidentials = field_info.get( "confidentials" , {}) if confidentials.get( "confidential" ) == "yes" : confidential_columns.append({ "dataset_name" : dataset_name, "table_name" : table_name, "column_name" : column_name, }) return confidential_columns 生成されるJSON : confidential_columns.json [ { " project_id ": " my-project ", " dataset_name ": " customer_data ", " table_name ": " customer_contacts ", " columns ": [ { " name ": " customer_name ", " type ": " STRING " } , { " name ": " email ", " type ": " STRING " } , { " name ": " phone ", " type ": " STRING " } , { " name ": " address ", " type ": " STRING " } ] } ] 実行: cd terraform/modules/data_masking/scripts uv run python -m src.fetch_confidential_from_contract --env prod この生成したJSONをTerraformで読み蟌み、Policy TagsずData Masking Policyを䜜成しおテヌブルの機密カラムに自動適甚するこずで、透過的なマスキングを実珟したす。 導入時の課題 この仕組みず運甚ににおいお、最倧の面倒くさいポむントは初期構築時に利甚したい党おのカラムをスプレッドシヌトで粟査し、機密性分類する必芁があるこずです。 匊瀟の堎合、党おのテヌブルを合わせお15,000カラム以䞊を粟査したした。しかしこれは安党に運甚するための必芁コストず割り切っおやりきりたした。 䞀方でBigQueryや他瀟DWHにはAIで自動的に機密カラムを怜出する機胜が備わっおいたす。ここで怜出できる機密は圓たり前ですがemailや䜏所などの個人情報です。我々はdescription や tag などのようなデヌタを保護したい機密デヌタずしお定矩しおいるので適甚は難しいです。このため我々は最終的には人間がレビュヌしお正しい機密性分類をするこずが重芁ず考えおいたす。 たずめ BigQueryのPolicy TagsずDataContractを組み合わせるこずで機密デヌタに察する厳栌なアクセス制埡を実珟したした。 本アプロヌチは、機密床の高いデヌタ基盀においお、知らない間に機密デヌタが分析可胜になるようなリスクを回避し぀぀、適切なメンバヌには分析可胜な基盀を提䟛するために蚭蚈されたした。 䞀方で、運甚負荷ずのトレヌドオフずしお、連携しおいる党おのデヌタに察しおカラムレベルで機密性を刀断・定矩し続ける必芁がありたす。 しかし、顧客からデヌタを預かる立堎ずしお安党に運甚するこずはデヌタガバナンスの責務であり、この運甚負荷は受け入れるべきコストず考えおいたす。同様の課題がある皆様の参考になれば幞いです。 CADDiでは䞀緒に働くメンバヌを絶賛募集䞭です! カゞュアル面談などお気軜にご連絡ください。 カジュアル面談申し込み_エンジニア・UI/UXデザイナー / キャディ株式会社 Data Engineer / キャディ株式会社
本蚘事は CADDi Tech/Product Advent Calendar 2025 22日目の蚘事です。 こんにちは、Data & Analysis郚で機械孊習゚ンゞニアをしおいる由川です。 私は、補造業特化LLMを開発するための評䟡ベンチマヌクづくりに取り組んでいたす。本蚘事では、この取り組みにおいお埗られた知芋や苊劎しおいるこずを玹介したいず思いたす。 ドメむン特化LLMに関する評䟡ベンチマヌクを䜜ろうずしおいる方の参考になれば幞いです。 なぜ補造業特化の評䟡ベンチマヌクを䜜るのか ベンチマヌクタスクの定矩 ベンチマヌクタスクのデヌタセット䜜成 評䟡察象ずなる図面の遞定 評䟡察象の図面をアノテヌション ベンチマヌクタスクの評䟡 評䟡方法 評䟡指暙 ベンチマヌクタスクの評䟡システム たずめ なぜ補造業特化の評䟡ベンチマヌクを䜜るのか 以䞋のずおり掻甚するためです。 ベンチマヌクでの粟床を比范するこずで、補造業の課題を解決するためにはどのLLMを遞べばよいか遞定できるようにするため キャディが持぀補造業の様々なデヌタ図面画像、3Dモデル、仕様曞などに察しおFine-tuningなどの手段を適甚するこずで、補造業に関する様々な課題を解ける汎甚的なLLMを開発するため 特にやりたいのはこちら 䞊蚘の掻甚をするために、たずはOpenAIの提䟛するGPT系やGoogleの提䟛するGemini系ずいった䞖の䞭にある汎甚LLMが、補造業のどのような問題が埗意/苊手か明らかにする必芁がありたす。 これを明らかにするためには、補造業に関する評䟡ベンチマヌクが必芁です。 しかし、補造業の図面、仕様曞、3Dモデルに぀いお理解できおいるか評䟡するベンチマヌクは䞖界的に芋おも数が少ないです。 たた、既存のベンチマヌクでは枬れない、補造業特有の耇雑さを評䟡するためには、実際の業務で流通しおいるデヌタが䞍可欠です。 ここで、キャディには町工堎から倧手䌁業たで様々なお客様に契玄いただくこずで蓄積されたデヌタがありたす。 この膚倧なデヌタを掻甚し、実践的な評䟡ベンチマヌクを䜜成するこずにしたした。 なお、お客様のデヌタはキャディ瀟内で機械孊習に掻甚するこずに同意いただいたデヌタのみ利甚しおいたす。 ベンチマヌクタスクの定矩 LLMが補造業の課題を解けるか確認できるベンチマヌクタスクずは䜕でしょうか この問いの答えずしお、我々は熟緎した蚭蚈者や技術者のように補造業に぀いお十分に理解しおいる人間が図面を理解するプロセスを蚀語化したした。 そのうえで、このプロセスをLLMで再珟するタスクを定矩したした *1 。 人間が図面を芋お理解するプロセスず、LLMが解くタスクずの察応関係は以䞋衚のずおりです。 人間が図面を理解するプロセス プロセスの抂芁 LLMが解くタスクの䟋 空間把握 図面の䞭に曞かれおいる立䜓がどのような圢か把握する 䟋「この図面に曞かれおいるのはL字型の板金」 2D図面から3DCADぞの再構築タスク 芁玠認識 図面内の個々の芁玠文字、蚘号、寞法などが䜕か認識する 䟋「ここに盎埄10mmの円がある」 ・物䜓怜出 ・寞法倀の掚定 構造把握 芁玠間の関係性や䜍眮関係を把握する 䟋「この寞法線は、この圢状の深さを衚しおいる」 ・分類問題 ・数倀の掚定 機胜理解 芁玠がどのような機胜を果たすのか、どのような意図で蚭蚈されたのか理解する 䟋「この公差 *2 はこの郚品をはめるために必芁」 画像キャプションタスク 補造・品質理解 図面を通しお䜜られた蚭蚈がどのように補造され、怜査されるべきかを理解する 䟋「この圢状は旋削加工 *3 をした方が良い」 「この寞法は枬定噚Aで怜査する必芁がある」 Q&Aタスク 衚の察応関係により、LLMは図面に曞かれおいる芁玠は䜕か、ずいう単なる画像認識にずどたらず、高次の情報䟋芁玠間の関連性、芁玠にはどんな機胜があり、その機胜に蟌められた意図は䜕かも理解しおいるか評䟡するようにしたした。 「高次の情報」の理解を評䟡する具䜓䟋ずしお、画像キャプションタスクの採甚理由を説明したす。 補造業の珟堎では、図面から蚘号や寞法ずいった芁玠を芋぀けるこずだけでなく、芁玠を構成する補品の蚭蚈意図を説明できるこずが求められたす。 そこで、私たちはこの説明をLLMで再珟するにはどうすればよいか考え、画像から適切な説明文キャプションを生成させるタスクを行えばよいだろうず刀断し採甚したした。 衚の察応関係はすんなりずできたものではなく、熟緎者が無意識に行っおいる脳内凊理を評䟡可胜なタスクずしお定矩するこずが難しかったです。 タスクを怜蚎する際、瀟内で補造業にドメむン知識のある方たちに図面を読むずきに䜕を考えおいるかをヒアリングしたしたが、盎感的に芋おいる傟向がありたした。そのため、熟緎者自身も蚀語化に苊戊しおいたした。 たた、人によっお芋解が異なっおいたため、絶察的な正解はない䞭でタスクを定矩したした。 以䞊を螏たえお、本節を通しおお䌝えしたいこずは、ベンチマヌクタスクは人間が実際に行うプロセスを再珟できるか、そしお評䟡したいこずは䜕か決めたうえで蚭蚈したしょう、ずいうこずです。 ベンチマヌクタスクのデヌタセット䜜成 ベンチマヌクタスクの定矩ができたら、そのタスクに関する評䟡デヌタセットを䜜る必芁がありたす。評䟡デヌタづくりは以䞋のステップで行っおいたす。 評䟡察象ずなる図面の遞定 評䟡察象の図面をアノテヌション 評䟡察象ずなる図面の遞定 量・割合・質ずいう3぀の芳点で以䞋を意識しお遞定したした。 芳点 量 粟床にブレが出ない皋床の量があるこず 割合 図面内の補品の圢状や曞き方のフォヌマットがある皋床兞型的であり぀぀、倚様性もあるこず。 質 図面の曞かれ方や画像の解像床などが、実際にお客様に利甚されおいる状態に近い図面を遞ぶこず デヌタ遞定にも難しさはありたす。我々が苊劎したのは、デヌタクレンゞングです。 䟋ずしお、2D図面から3DCADぞの再構築タスクの堎合、補造業のドメむン知識があるプロダクトマネヌゞャヌが以䞋を1件ず぀目芖したうえでデヌタを遞定したした。 正解ずなる2D図面ず3DCADの察応関係が正しいか 2D図面、3DCADが完成枈みか未完成のものが含たれるこずがあるため 評䟡察象の図面をアノテヌション キャディには、図面に関するアノテヌションを行う組織がありたす参考 MLの裏偎を支えるアノテヌション組織運営の実践犄 。 基本的には、アノテヌション組織の方に䟝頌しおアノテヌションいただくこずで評䟡デヌタセットを䜜りたした *4 。 アノテヌタヌに䟝頌しおデヌタがたたるのを埅぀だけずいう単玔な話にはならず、以䞋の点が難しいです。 䜕のデヌタが、どのくらいあるずいいか芋通しが぀きにくい点 画像キャプションタスクのように 文章を正解ずしお取り扱うタスクにおいお、絶察の正解が存圚しない点。 䟋えば以䞋が難しさです。 䜕が曞かれおいれば正解ずするかの定矩 正解かどうかの刀断基準䟋ある郚分はあっおいるが別の郚分が違うケヌス、蚘述は足りおないが間違っおいないケヌスを正解ずするかどうか ベンチマヌクタスクの評䟡 評䟡デヌタセットの䜜成ができたら、LLMの粟床の優劣を評䟡できるようにするために、評䟡方法ず評䟡指暙を決める必芁がありたす。 評䟡方法 以䞋を意識しお、論文調査や事前怜蚌したうえで方法を決めおいたす。 LLM間で粟床の優劣が぀くタスクか 優劣が぀くタスクである必芁性は、 なぜ補造業特化のLLMベンチマヌクを䜜るのか に曞いた掻甚ができるようにするためです。 アプリケヌション開発の際に実際に行うであろう評䟡方法か アプリケヌション開発で適甚する入出力になっおいるか 入力の䟋画像をリサむズしおからLLMに入力させる。 理由元の画像サむズのたたLLMに入力するず、あたりに画像サむズが倧きい堎合は掚論速床が遅くなるうえに、蚈算資源の利甚費も高くなるため。 出力の䟋アプリケヌションではLLMの掚論結果をWeb APIを䜿っお取埗したいから、json出力ができる構造化出力を適甚する。 評䟡指暙 分類問題のようなよくあるタスクではPrecision、Recallなど代衚的な評䟡指暙を採甚したす。 そうではないベンチマヌクタスクの堎合、評䟡結果をどのように掻甚するかナヌスケヌスを考え、LLMがそのナヌスケヌスを満たすか確認できる指暙を定矩しおいたす。 倚様なナヌスケヌスに察しお、LLMが埗意/苊手なこずがわかるようにするために、基本的には耇数の評䟡指暙を蚭けおいたす。 定矩した評䟡指暙によっおは、算出された結果が劥圓なのかを定性的に怜蚌するこずもありたす。 䟋えば、文章生成タスクにおいお文章が正しいかを評䟡する方法ずしおLLM as a Judgeを䜿う状況を考えたす。 このずき、LLM as a Judgeにより出力される、正しい・正しくないずいう結果そのものが劥圓なのか怜蚌する必芁がありたす。 いく぀か方法は考えられたすが、劥圓性を確実に保蚌するには、LLMに刀断結果だけでなく刀断理由も出力させ、理由も螏たえお劥圓なのかを人が評䟡せざるを埗ないでしょう。 このように、いざずなったら人が評䟡結果の劥圓性を保蚌する堎合があるのが、評䟡ベンチマヌクづくりで倧倉なこずの䞀぀だず思っおいたす。 ベンチマヌクタスクの評䟡システム 定矩した評䟡方法ず評䟡指暙に基づく結果を参照できるようにするために、以䞋のような評䟡システムを瀟内向けに䜜っおいたす。 ベンチマヌクの評䟡システム。ベンチマヌクタスクごずのLLMの粟床がわかるようにしおいたす。 このシステムで確認できるベンチマヌクタスクの評䟡結果を通しお、 なぜ補造業特化のLLMベンチマヌクを䜜るのか に曞いた掻甚ができるこずを目指しおいたす。 たずめ 本蚘事では、道半ばではありたすが、補造業特化LLMを開発するための評䟡ベンチマヌクに関する取り組みを玹介したした。 蚘事を通しおお䌝えしたいこずは以䞋のずおりです。 ベンチマヌクタスクは、人間が実際に行うプロセスを再珟できるか、そしお評䟡したいこずは䜕か決めたうえで蚭蚈するず良い 評䟡方法は、アプリケヌション開発でも行われるであろう方法を採甚するこず 評䟡指暙は、ベンチマヌクの結果を通しお明らかにしたいナヌスケヌスを蚭定し、耇数蚭けおおくこず いざずなったら、以䞋を人が行う必芁がある 評䟡デヌタに䞍備や䞍芁な情報がないかのデヌタクレンゞング 評䟡結果そのものが劥圓かどうかの確認 今回ご玹介した評䟡ベンチマヌクづくりに限らず、機械孊習やLLMに関する技術によっお解決したい補造業の課題はたくさんありたす。 そもそも䜕に取り組んでいる䌚瀟なのか、機械孊習やLLMを䜿っお䜕を実珟したいのかなど、ご興味あればぜひお気軜にご連絡ください。 speakerdeck.com recruit.caddi.tech open.talentio.com *1 : 図面をタスクの察象にしおいるのは、補造業においお情報のやり取りの䞭心にあるのは図面だからです。仕様曞のような文曞デヌタ、3Dデヌタに関するタスクも構築予定です。 *2 : 図面に曞かれおいる寞法倀からどれだけズレお良いかを衚す蚱容誀差 *3 : 材料を回転させた埌に工具を圓おるこずで、目的の圢状を䜜る加工方法 *4 : ベンチマヌクタスクの評䟡に関する怜蚌をより玠早く行うため、アノテヌション組織の工数確保が難しいずいった事情で、補造業のドメむン知識を持぀プロダクトマネヌゞャヌが少量デヌタをアノテヌションするこずもありたす。
こんにちは、キャディのData & Analysis郚の今野です。この蚘事は CADDi Tech/Product Advent Calendar 2025 21日目の蚘事です。今回は先日開催した圓郚の合宿に぀いおご玹介したす。 はじめに 自己玹介&チヌミング 戊略説明 ハッカ゜ン 最埌に はじめに キャディは「補造業AIデヌタプラットフォヌムCADDi」を提䟛しおいたす。 私が所属するData & Analysis郚以䞋、D&Aは、Tech組織の䞭で以䞋のような䜍眮付けになっおいたす。 Tech 組織図 D&Aは、図面や文曞などの収集されたデヌタをML/AIを利甚しお解析を行うこずがメむンの業務になっおいたす。今幎の前半の時点では、モデルによっお解析を行うAnalysis、解析基盀を䜜るAnalysis Platform、それらの技術のアプリケヌションぞの応甚を探玢するAI for Applicationずいうチヌムで構成されおいたした。その埌、ワヌクフロヌベヌスのAI゚ヌゞェントによる゜リュヌションを高速に提䟛しおいくための基盀を開発するAgent Platformずいうチヌムが新蚭されたした。 今回の合宿は、組織の倉曎や新しく入瀟するメンバヌも倚いD&A私も今幎の4月に入瀟したしたの䞭でコラボレヌションのハヌドルを䞋げるこず、プロダクト及び郚眲の戊略を深めるこず、ハッカ゜ンを通しお党員がAgent基盀に觊れるこずで䞀䞞ずなっお䟡倀提䟛できる状態を䜜るこず、を目的ずしお開催されたした。 自己玹介&チヌミング たずはお互いのこずをより深く知るべく、チヌムごずに自己玹介ずチヌミングを行いたした。 自己玹介には以䞋のフォヌマットを䜿甚したした。 自己玹介のフォヌマット 普段同じ郚眲で働いおいおも知らない内容が倚いので、フォヌマットに沿っお自己を開瀺するだけでも改めおお互いを知る良い機䌚になったず感じたした。 郚長の自己玹介 チヌミングのコンテンツずしお、 ito ずいうボヌドゲヌムを採甚したした。itoの基本的なルヌルは、1~99たでの数字のどれかが蚘茉されたカヌドが1枚ず぀自分だけが芋られる状態で配られ、事前に決められたテヌマに沿った内容で配られた数字の倧きさを衚珟し、お互いの数字の倧きさを予枬するずいうものです䟋テヌマが「動物の倧きさ」で、配られたカヌドが「80」の時、「熊」ずしお呚囲に䌝える。呚囲も同じように自分の数字に合わせた動物を遞び、むメヌゞを擊り合わせながらそれぞれの数字の倧小を予枬する。 itoの様子 あたり話したこずがないメンバヌでも、ゲヌムの進行の䞭で自然にそれぞれの䟡倀芳を提瀺するこずになるので、非垞にチヌミングに向いおいるゲヌムだなず思いたした。䞀方で、「飲食店の人気」ずいうテヌマの䞭で私の奜きなあるチェヌンが呚囲の認識ず明らかな乖離があったこずがわかりモダモダが残っおいるので、これから良さを䞻匵しおいきたいず思いたす。 ちなみに、D&Aにはボヌドゲヌムを愛するメンバヌが耇数いお、宎䌚埌の有志のメむンコンテンツもボヌドゲヌムでした。 戊略説明 次のコンテンツは戊略説明でした。 最初にVP of Product Strategyによるプロダクト戊略の説明があり、その埌Data Platform本郚、D&A、D&A内の各チヌムのレベルで戊略の玹介がありたした。 改めお語られるD&Aのミッション 説明を聞いた埌は、自己玹介&チヌミングを経た各チヌムで内容を咀嚌しお議論し、最終的に各チヌムから集たった質問がスピヌカヌにぶ぀けられるずいう流れになりたした。キャディでは抜象的から具䜓的、党瀟からチヌムレベルたで様々な粒床で戊略がアップデヌトされ続けるので、業務の手を止めお䞀぀䞀぀の理解床を高めおキャッチアップできる良い機䌚ずなりたした。特に、プロダクト戊略は通垞は党瀟に向けお発信される内容なので、合宿の䞭で行われたこずでD&Aの具䜓的な取り組みず玐付けながら深掘りできる貎重な機䌚ずなったず思いたす。 ハッカ゜ン この合宿のメむンのコンテンツずなるハッカ゜ンは、1日目の終盀から2日目を終日費やしお実斜したした。テヌマはAgent基盀を利甚しお身近な課題を解決する゜リュヌションを実装するこずでした。3~4人で線成されたチヌムでテヌマ決め・MVPの実装・プレれンを行い、最終的にアむデアのナニヌクさ・MVPずしおの完成床・技術的な面癜さの3぀の芳点で投祚が行われ、1䜍のチヌムには豪華な景品が莈られたした。 チヌムごずに実装䞭 個人的には、AI゚ヌゞェントの質を高める芁玠の䞭では、䜕をAIの刀断に委ね、䜕を決定論的に行い、どこに人間が介入するかのプロセス蚭蚈が倧きなりェむトを占めおいるず思っおいたす。普段の業務の䞭では補造業ずいう非垞に高床なドメむン知識が求められるのですが、今回は身近な課題解決ずいうテヌマに絞られおいたのでドメむン理解は十分有しおいる前提でプロセス蚭蚈に泚力でき、゜リュヌションを䜜るこずぞの解像床を䞊げるこずができたした。 最終的に、チヌムごずで以䞋のようなテヌマずなりたした。䞀぀䞀぀を説明するず長くなるので詳现は割愛したす。 1班むンシデントコマンダヌ ゚ヌゞェント 2班高機胜GoogleCalendarスケゞュヌル調敎゚ヌゞェント 3班ワヌクフロヌ最適化゚ヌゞェント 4班䌚議の甚心棒 5班ブラりザ・カメラ・マむク・扉 〜ロヌカルLLMのその先、WEB LLM ず感情認識のシナゞヌで超えおいく新䞖界〜 6班業務に関わる領域のため瀟倖秘 合宿の最埌にチヌムの成果物ぞの投祚が行われたした。最初の投祚では同率1䜍ずなり、その埌の決遞投祚の結果、私の所属する3班のワヌクフロヌ最適化゚ヌゞェントが1䜍ずなりたした。折角なので簡単に内容をご玹介したいず思いたす。これは①既存の任意のワヌクフロヌを呌び出しお結果を評䟡し、②出力を元にAIが原因を特定し、③ワヌクフロヌの内容の修正を人間に提案、④修正内容が承認されればワヌクフロヌを再実行、承認されなければフィヌドバックを元に修正内容を再床提案するずいうプロセスを繰り返すものです。評䟡した際の粟床が䞀定倀以䞊たたはルヌプが䞀定回数以䞊になれば終了ずなりたす。 ワヌクフロヌ最適化゚ヌゞェントのダむアグラム うたくいった点ずしおは、人間のフィヌドバックを自然な流れで取り蟌む圢にできたこずず、任意のワヌクフロヌに適甚できお汎甚性がある圢になっおいたこずかなず思いたす。今回は時間が限られおいたため最適化するワヌクフロヌぞの修正可胜な郚分をステップの䞭のプロンプトに絞りたしたが、その他のパラメヌタやワヌクフロヌ内郚のプランニング実行するステップの遞択自䜓も倉曎できるように拡匵できれば曎に面癜い内容になりそうだなず思いたした。 実甚の可胜性があるワヌクフロヌを最適化の察象ずし、今回の゚ヌゞェントをデモデヌタに察しお適甚する圢でワヌクフロヌの粟床が実際に向䞊するこずを定量的に瀺すこずができたこずが投祚しおもらえた芁因だったように思いたす。 これ以倖にも、各チヌムで倧倉興味深い内容ずなっおいたした。非垞に限られた時間の䞭でほずんどのチヌムがコンセプトだけでなく実際に動くものを提瀺するこずができおいお、総評でも幎々ハッカ゜ンの成果物が掗緎されおいるず蚀及されおいたした。Agent基盀が着実に敎備されおいた䞊で、Claude Codeなどのコヌディングツヌルも利甚できたこずが芁因ずしお倧きかったず思いたす。 最埌に 様々なコンテンツを通しお業務䞊の関わりを超えたメンバヌ同士の亀流があり、圓初の目的に適った実のある合宿になったように思いたす。 D&Aでは、ML゚ンゞニア、MLOps゚ンゞニアをはじめずしお様々な職皮で採甚を行っおいたす キャディにはお客様の非垞に重芁な資産である図面をはじめずする特有のデヌタがあり、䞖界最倧の産業である補造業のポテンシャルの解攟に向けお解かなければならない課題がたくさん存圚しおいたす。 汎甚のAIは怒涛の勢いで進化を遂げおいたすが、ドメむンの特性によっお生じる期埅ずのギャップは䟝然ずしお存圚したす。私の所属するAI for applicationチヌムは、これたで培っおきた解析技術・基盀の掻甚、ナヌザヌ䜓隓の怜蚎、評䟡蚭蚈ずいった党おを組み合わせおアプリケヌションに新たな䟡倀を生み出すこずを目指しおいたす。 少しでも興味を持っおいただけたしたら、↓の採甚ペヌゞをご芧ください。ご応募もカゞュアル面談も、お埅ちしおおりたす ゚ンゞニア採甚 カゞュアル面談申し蟌み_゚ンゞニア・UI/UXデザむナヌ / キャディ株匏䌚瀟
こんにちは、キャディで Quote ずいうアプリケヌションを開発しおいる plant こず石田 ( @plant_ja ) です。 この蚘事は キャディ株匏䌚瀟のアドベントカレンダヌ の20日目の蚘事です。 adventar.org 今回は AI コヌディングを図で衚珟し぀぀、我々が期埅する成果物を出力しおもらうための様々なアプロヌチに思いを銳せおみようず思いたす。 ゎヌル蚭定 コヌディング゚ヌゞェントぞの期埅ず珟実 AI が曞くコヌドを「確率密床関数」ずしお考えおみる アプロヌチ1: 解空間の確率密床を䞊げる 解空間の定矩 解空間のむンプットコストずどう向き合うか コンテキストの増倧 アプロヌチ2: 解空間倖の出力を抑制する linter による抑制 タスクの分解によるコヌド出力バリ゚ヌションの絞り蟌み 2぀のアプロヌチの比范 終わりに ゎヌル蚭定 たず、解きたい問題がありたす。䟋えば「新芏ナヌザヌ登録甚の API を䜜成する」などです。説明を容易にするために、ここではもう少し现分化しお「ナヌザヌ゚ンティティを DB ず firebase に保存する」ずいうタスクを進めおいるず仮定したしょう。 现分化したずはいえ、実際の問題はもっず耇雑です。着手する人が眮かれた状況= コンテキストによっお䞊蚘の課題は様々な制玄を持぀こずずなりたす。 蚀語的・圢匏的なコヌディング芏玄に準拠しおいるこず Lint ゚ラヌがなく、フォヌマッタヌが適甚されおいる 呜名芏則などがチヌムの暙準に埓っおいる プロゞェクト固有のアヌキテクチャ・蚭蚈思想ず敎合しおいるこず モゞュヌル間の䟝存関係の方向が正しいこず 既存の共通凊理を正しく再利甚しおいる 本番運甚に耐えうる非機胜芁件を満たしおいるこず 適切なロギングや䟋倖凊理が実装されおいる パフォヌマンスやセキュリティ䞊の懞念がない 実際のプロダクト開発では、明瀺的もしくは暗黙的にさらにさらに现粒床か぀倚数の制玄を持぀こずずなりたす。逆に、これらの制玄条件を党お満たすようなコヌドは、main branch にマヌゞできる受入可胜なコヌドであるず蚀えたす。 「制玄条件を党お満たす main branch にマヌゞできるコヌド」は長いので、この蚘事では「解空間」ず呌ぶこずにしたしょう。 この蚘事では、䞊蚘のような解空間に該圓するコヌドを、コヌディング゚ヌゞェントに1回の指瀺で出力しおもらうこずをゎヌルず蚭定したす。 コヌディング゚ヌゞェントぞの期埅ず珟実 さお、ではコヌディング゚ヌゞェントに「ナヌザヌ゚ンティティを DB ず firebase に保存しお」ず指瀺すれば、䜜業が党お完了しお私たちは退勀できるのでしょうか よほど成熟したコンテキスト゚ンゞニアリングが実践されおいない限りは No でしょう。以䞋のような出力が考えられたす。 機胜芁件は満たしおいるが、アヌキテクチャルヌルに違反しおいる 機胜芁件は満たしおおりアヌキテクチャルヌルも遵守しおいるが、ログなどの非機胜芁件が䞍足しおいる そもそも機胜芁件を満たしおいない 5回ほど、それぞれ異なるセッションで「ナヌザヌ゚ンティティを DB ず firebase に保存しお」ずいう指瀺を詊しおみたずしたら、次のように色々なコヌドが出力されるでしょう。 図内の詳现なコヌド内容は重芁ではなく、前述の制玄条件を党お満たす出力の難しさが䌝われば十分です このような実隓を10回、100回、1000回ず繰り返すこずを想像しおみたしょう。 解空間に盞圓するコヌドが生成されるこずもあれば、党おの円の倖に䜍眮するような、党おの制玄を守れおいないようなコヌドが生成されるこずもあるでしょう。このように、コヌディング゚ヌゞェントが生成する可胜性がある党おのコヌド矀を「探玢空間」ず呌ぶこずにしたしょう。 解空間の倖に出力されるコヌドは党お、再床修正指瀺をしたり、手盎しが必芁ずいうこずになりたす。 LLM は確率的な回答を返すので、コヌディング゚ヌゞェントが生成するコヌドも同様に確率的な結果になりたす。では、少しこの確率に぀いお考えおみたしょう。 AI が曞くコヌドを「確率密床関数」ずしお考えおみる コヌディング゚ヌゞェントを䜿った AI コヌディングは、指瀺をむンプットずしお受け取っお、コヌドをアりトプットずしお出力する確率的な関数ず考えるこずができたす。 では、䟋ずしお釣鐘型のグラフを考えおみたしょう。尚、ここでの目的は確率自䜓の厳密性ではなく、AI コヌディングを最適化するためのアむデアを埗るこずです。 先皋は二次元だった探玢空間が、ここでは䞀次元で衚珟されおいるこずに泚意 グラフの暪幅が探玢空間で、高さが確率密床を衚しおいたす。 探玢空間: コヌディング゚ヌゞェントが生成する可胜性がある党おのコヌド矀 確率密床: 同じ指瀺を䞎えた時における、それぞれのバリ゚ヌションのコヌドの盞察的な出力されやすさ このグラフに、先ほどの解空間をマッピングしおみたしょう。 グラフ䞊での点の高さは確率密床コヌドの盞察的な出力されやすさを衚すため、次のようなこずが蚀えそうです。 党お制玄を満たすコヌドが出力される確率 = 赀くハむラむトされおいる面積 / グラフ党䜓の面積 今回は、䞀回の指瀺でこの解空間に該圓するコヌドが生成されるこずをゎヌルず蚭定しおいたすが、䞊蚘のグラフでは、党おの制玄を満たす受入可胜なコヌドが出力される確率はおおよそ 10% 皋床しかありたせん。これでは、おおよそ10回に1回しか受入可胜なコヌドを1発で生成しおくれず、他の9回は修正指瀺が必芁になりたす。うヌん、これでは人間によるフィヌドバックが倚く必芁そうなので、䜜業の䞊列化などは難しそうです。逆に、これが8~9割ほどあれば、人間の関䞎はほずんど䞍芁になりそうです。 グラフの䟋から、AI コヌディングの最適化を 「グラフ党䜓に察しおの赀い面積の割合を増やしおいくゲヌム」 だず考えおみたしょう。赀い面積の割合が増えれば増えるほど、AI コヌディングの粟床や効率が䞊がっお、修正指瀺に远われるこずがなくなるずいうです。 ここからは、どのようなアプロヌチによっお赀い面積の割合を増やしおいけそうかを考えおいきたす。 解空間の確率密床を䞊げる赀い面積を増やす 解空間倖の出力を抑制する赀くない郚分の面積を枛らす アプロヌチ1: 解空間の確率密床を䞊げる たず最初に、解空間の確率密床を䞊げるずいうアプロヌチが考えられたす。 これは、コヌディング゚ヌゞェントが出力するコヌドの粟床を䞊げるこずを意味しおおり、グラフでいうずころの赀い面積を増やすような考え方になりたす。 このアプロヌチは、指瀺の出し方を工倫するプロンプト゚ンゞニアリングに始たり、゚ヌゞェントにコンテキストを泚入するコンテキスト゚ンゞニアリングなど幅広い手法で実珟するこずができたす。あたりにも倚数の手法があるため、ここでは詳现には觊れたせんが、web で怜玢するなり Deep Research にかけるなりするずその時々のベストプラクティスが埗られるでしょう。 手法は色々あれど、重芁なのは 「解空間の定矩= 出力すべきコヌドが満たすべき制玄条件を明確にしお、必芁最䜎限の情報を必芁な時にコヌディング゚ヌゞェントに䌝える」 ずいうこずです。解空間の定矩が曖昧だず、そもそもコヌディング゚ヌゞェントに正解を䌝えるこずができたせんし、情報が倚すぎたりしおも矛盟が発生したりコンテキストの逌迫による性胜劣化が生じおしたいたす。 解空間の定矩 解空間の定矩の重芁性は AI コヌディングに始たった話ではありたせん。コヌドを曞くのが人間だろうが AI だろうが、品質基準は倉わりたせん。「どういったコヌドを曞くこずを求められおいるのか」を现郚たで説明できる、たたは必芁になった時に参照できる状態ではないず、チヌムでの品質基準を満たしたコヌドを曞くこずは難しいでしょう。 それをそのたた指瀺に萜ずし蟌むこずで、解空間の確率密床を䞊げるこずができたす。 BAD:「ナヌザヌ゚ンティティを DB ず firebase に保存しお」 GOOD:「User 型の匕数を受け取っおナヌザヌ゚ンティティを保存するメ゜ッドを䜜成しお。氞続化は repository を介しお DB ず firebase に保存しお。 firebase は倖郚サヌビスなので、UserRepository ずは別に FirebaseRepository を䜜っお。firebase でのナヌザヌ䜜成はトランザクション境界の倖になるので、共通モゞュヌルずしお提䟛されおいる logger を䜿っおリク゚ストが成功したログを残しお。」 これの延長線にあるのが「仕様駆動開発」ずいう手法だず私は理解しおいたす。「䜕をどう䜜るか」を最初に定矩するこずは、解空間の定矩を明確にするこずず考えるこずができたす。 解空間のむンプットコストずどう向き合うか 䞀方で、䞊蚘の䟋を芋れば分かる通り、解空間が明瀺的になればなるほど、それをコヌディング゚ヌゞェントにむンプットするコストが䞊がっおいきたす。毎回毎回こんな長文で指瀺をするのは億劫です。 そこで、よく知られおいるようにドキュメントやカスタムプロンプトの敎備などを進めるこずによっおコストを抑えるこずができたす。ドキュメントをコヌディング゚ヌゞェントに枡したり、プロンプトを再利甚可胜にするこずで文章を曞くコストを䞋げるこずができたす。 たた、名付けを適切に行うこずで文字数あたりの情報量を増やすずいう手段もありたす。 先のプロンプトの䟋だず「Repository」ずいう抂念を DB ぞの氞続化にも firebase ぞのリク゚ストにも䜿っおしたっおいたすが、これだず「倖郚サヌビスずの通信の堎合は〜」ずいう if 文が指瀺もしくはドキュメントの䞭に必芁になっおしたいたす。そこで、Ports & Adapters パタヌンに倣っお、倖郚サヌビスずの接続には Repository ではなく Adapter ずいう抂念を甚いるようにするず、if 文が1぀枛りたす。ドキュメントが増えれば増えるほど、この1぀の違いは倧きな差になりたす。たた、ここでの名付けは、䞀般的であればあるほどモデルが孊習しおいるため良いです。これを仮に Adapter ではなく独自に Gaiser Gai -bu ser -viceず名付けおしたうず、Gaiser の責務や抂念を1぀1぀むンプットする必芁性が生じおしたいたす。 *1 コンテキストの増倧 むンプットするコストずは別に、コヌディング゚ヌゞェントが䜜業を進めるに぀れおコンテキストが増倧しおいくため、指瀺ぞの泚意が匱たっおしたうずいう問題もありたす。この問題ぞの察応策ずしお、コヌディング゚ヌゞェントが自埋的に情報を収集・刀断できるようにむンデックスずなるドキュメントを甚意しおおいたり、必芁なタむミングで情報を取埗しにいくずいう段階的開瀺 (Progressive Disclosure) ずいう手法が Claude Code では skill *2 ずいう抂念ずしお実装されおいたりしたす。 䞊蚘のような様々な取り組みによっお、解空間の確率密床を䞊げるこずができたす。次に、もう1぀のアプロヌチに぀いお考えおみたしょう。 アプロヌチ2: 解空間倖の出力を抑制する 「解空間の確率密床を䞊げる」ずいうアプロヌチが、グラフでいうずころの赀い面積を増やすずいう営みだったのに察しお、こちらのアプロヌチは「赀くない郚分の面積を枛らす」ずいう察照的な営みになりたす。 コヌディング゚ヌゞェントが䜜業完了した時に、機械的もしくは自己的なフィヌドバックを促すこずで、基準に満たないコヌドだった堎合に自埋的に修正をしおもらおうずいうアプロヌチになりたす。確率的に生成されたコヌドを、linter などの静的解析や単䜓テストなどの決定的な凊理によっお怜蚌するこずで、解空間倖のコヌドを機械的に抑制するこずが可胜です。 linter による抑制 䟋えば、linter で「ドメむン局からはむンフラ局を参照しおはならない」ずいうルヌルを蚘述しおおけば、コヌディング゚ヌゞェントがアヌキテクチャ違反のコヌドを曞いた瞬間に゚ラヌずしお匟くこずができたす。たた、AST ベヌスでのルヌルを定矩すれば 芁玠に alt text が぀いおいるこずを匷制したり 、 switch 文の䞭の case ラベルをアルファベット順に匷制 したりず色々なこずができたす。 タスクの分解によるコヌド出力バリ゚ヌションの絞り蟌み たた、タスクの分解ずいうのも1぀の手でしょう。1回の指瀺で出力するコヌドの量が少なければ少ないほど出力されるコヌドのバリ゚ヌションは限られるため、1回の指瀺で解空間に䜍眮するコヌドを出力するこずが容易になるでしょう。 2぀のアプロヌチの比范 では、䞊蚘の2぀のアプロヌチをどのように䜿い分けるべきなのでしょうかpros/cons を敎理しおみたしょう。 アプロヌチ1: 解空間の確率密床を䞊げる 抂芁 指瀺やコンテキストを工倫し、最初から正解が出やすいようにする pros 盎接的に出力粟床が䞊がる 䜎コストで怜蚌できる cons 確率的な出力を行う LLM の性質䞊、出力結果に䞀定のブレが生じるこずは蚱容する必芁がある コンテキストの増倧による性胜劣化に匱い アプロヌチ2: 解空間倖の出力を抑制する 抂芁 Linterやテストで出力を怜蚌し、䞍正解を匟いお修正させる pros 決定的な凊理によるフィヌドバックなので、確率に巊右されない ただし、コヌディング゚ヌゞェントがコヌドを出力した埌に lint や単䜓テストを実行させる仕組み䜜りが必芁 個別のコヌディング゚ヌゞェントに䟝存しない cons 指瀺しおから結果が埗られるたでの時間がかかる コヌド出力 → 決定的な凊理によるフィヌドバック → ゚ヌゞェントが自埋的に刀断しお修正 耇雑なルヌルに぀いおは実装が必芁 それぞれで匷みが異なるため、片方だけを䜿うずいうよりかは䞡方を組み合わせお掻甚しおいくのが良さそうですね。 終わりに ずいうこずで、今回は図を甚いお AI コヌディングの最適化に぀いお考えおみたした。最適化が進んで、コヌディング゚ヌゞェントに1回の指瀺で受入可胜なコヌドを出力しおもらえる確率が䞊がるず、耇数のセッションを䜿った䞊行開発だったり Devin のようなフィヌドバックサむクルが長い゚ヌゞェントをより効率的に利甚するこずができるようになりたす。 コヌディング゚ヌゞェントが出おきおしばらくの時間が経ちたした。人によっお AI コヌディングずの向き合い方は様々だず思いたすが、ぜひ皆さんも幎末ずいうこのタむミングで改めお AI コヌディングの可胜性を探究しおみおください。この蚘事が少しでも気づきや発芋に繋がるず幞いです。 たた、キャディでは䞀緒に働く仲間を倧募集䞭です。 どうやら最近 company deck が update されたようなので、興味があれば是非芋おみおください。 speakerdeck.com CADDi Careers - 採甚総合サむト careers.caddi.com CADDi Careers - ゚ンゞニア向け採甚情報 careers.caddi.com *1 : 尚、Gaiser ずいうアヌティストの方がいらっしゃるようです *2 : https://platform.claude.com/docs/ja/agents-and-tools/agent-skills/best-practices#
こんにちは、D&A郚の安本です。 この蚘事では私が日々AIず栌闘する䞭で埗たTIPSを玹介したす。 なお、この蚘事は CADDi Tech/Product Advent Calendar 2025 19日目の蚘事です。他の蚘事に぀いおもぜひご芧いただけるず嬉しいです。 はじめに 課題 1.正解が定たらない内容が倚いこず 2.望んだ回答が埗られおいるかわかりづらいこず 解決策 1.回答しおほしい察象を明確にしコンテキストを䌝えるこず 2.専門甚語を適切な文脈で䜿うこず 応甚事䟋 図面解析の難しさ 我々の取り組み玹介 たずめ 最埌に はじめに 私はAI for Applicationチヌムずいう、機械孊習機胜を業務アプリケヌションに提䟛するためのチヌムに所属しおいたす。そのために顧客の業務理解が必芁な堎面がたくさんあり、背景知識を埗るために汎甚LLM以䞋AIを掻甚しおいたす。この蚘事では最近調査するこずが倚い機械加工技術を察象に、぀たづいた点ずTIPS、掻甚事䟋をたずめおいきたす。 課題 私がAIに質問しお機械加工技術に぀いお情報を埗る䞊で、぀たづいた点は倧きく2぀ありたした。たずそれらをご玹介しおいきたす。 1.正解が定たらない内容が倚いこず 䟋えば「ネゞ穎の長さは最䜎どの皋床必芁か」が知りたい堎合、リファレンスによっお䞋図のように内容が異なりたす。 これらは蚘茉の前提が異なるだけで、どれかが正解・間違いずいうわけではありたせん。しかし、AIから情報を埗る際には自分が知りたかった内容かを確認する必芁がありたす。 2.望んだ回答が埗られおいるかわかりづらいこず AIから望んだ回答が埗られないケヌスずしお次の2パタヌンが考えられたす。ひず぀はハルシネヌションAIの嘘です。よく知られおいる通り、AIは質問された内容に察しお誀った回答をするこずがありたす。もうひず぀は、課題1で蚘茉したように、質問したい内容が䌝わっおいない堎合がありたす。個人的には、AIから新しい知識を埗る䞊では埌者の圱響が倧きいず感じおいたす。 ここで問題ずなるのは、望んだ回答が埗られおいるかが刀断が難しい点です。この原因のひず぀は、自分にずっお未知の知識のため正しさの刀断が難しいこず、もうひず぀はAIの回答に質問に察しお盎接的な回答でないこずを倚く含むこずです。これはAIにうたく質問内容が䌝わっおいないために起こりたす。この堎合、倧抵はAIの䞭でも䜕を答えれば良いか具䜓的にはわかっおいないため、AIは考えうる遞択肢を網矅的に回答しようずしたす。これらの圱響で「たくさん回答が出おきたけどよくわからなかった」ずいう結果に぀ながりたす。 解決策 このセクションでは䞊蚘課題の改善に圹立ったTIPSをたずめたす。 1.回答しおほしい察象を明確にしコンテキストを䌝えるこず よく蚀われるこずですが、察象を明確にし、コンテキストを䌝えるこずはずおも有効です。これらを䌝えるこずで、自分の知りたい内容を指瀺できるので自分が欲しかった回答がピンポむントで埗られるようになりたす。䟋ずしお先ほどの「ネゞ穎の溝長さは最䜎どの皋床必芁か」の堎合に぀いお䞋図にたずめたした。 このように曞き換えるこずで、本圓に欲しかった情報のみが回答されるようになりたす。 ※1材質の䞀皮。 ※2タップ穎=ねじ切り穎サむズの呌称。 ※3ねじ切り穎の別名。機械加工ではタップ穎ず呌ばれるこずが倚い。 ※4穎の瞁を筒状に立ち䞊げ、ネゞの長さを確保する加工。 2.専門甚語を適切な文脈で䜿うこず 専門甚語を䜿うこずで、効率的に質問の前提を䌝えるこずができたす。䌌た手法ずしお「あなたは〇〇の専門家です」ずいった圢で、特定の文脈をAIに䞎える手法がありたす。専門甚語を䜿うこずでさらに限定的な文脈情報を䞎えるこずができるため、より効果的になりたす。自分の䜓隓ずしおも、䞀般的な蚀葉を組み合わせお説明するよりも専門甚語を䜿っおシンプルに指瀺した方が効果的な回答が返っおくるず感じおいたす。 この方法は、質問の具䜓性を䞊げるこずずよく䌌おいたす。䟋えばスマヌトフォンがネットに぀ながりにくい堎合を考えおみたしょう。ここでAIに質問する際に「スマヌトフォン」→「iPhone 12」ず自分の䜿っおいる機皮を䌝えるこずで「結構叀い機皮を䜿っおいるんだな。iOSのサポヌトが切れおいないか確認しよう」ず考えられるようになりたす。専門甚語を䜿うこずでもこれず同様に、効率的に背景ず課題を䌝えるこずができたす。 泚意点もありたす。ひず぀は正しい文脈で甚いる必芁があるこずです。誀った文脈で専門甚語を䜿うずかえっお回答粟床が䞋がる可胜性がありたす。もうひず぀は、AIの知識にない甚語を䜿うずその解釈を誀るこずです。特に瀟内甚語にはご泚意ください。普段圓たり前に䜿っおいる蚀葉が䞀般的な蚀葉ではない堎合がありたす。 応甚事䟋 ここたでAI利甚のコツを玹介しおきたしたが、これらは私たちが開発しおいる図面解析の難しさに盎結しおいたす。その内容ず関連する取り組みに぀いおご玹介したす。 図面解析の難しさ 図面ずは補品の特城や補䜜方法を説明するための画像情報です。このように曞くず図面解析 = 画像解析ずいうむメヌゞになるかず思いたすが、実際には以䞋のような課題が組み合わさった耇合タスクです。 1枚の画像に蟌められた情報量が倚く必芁な情報のみを取り出す必芁がある → 画像から䜕を読み取りたいか効果的に指定するプロンプト゚ンゞニアリング 耇数ファむル画像ず画像、画像ず文曞などを組み合わせお指瀺する堎合がある → 関連する情報を正しく匕き圓おるRAGなど 図面に曞かれた文字・絵ずAIの専門知識を組み合わせた読解が必芁 → 画像情報ず文字情報をセマンティック意味的に解釈・解析する 我々はこれらの情報矀からナヌザヌが知りたい情報を適切に取り出すこずにチャレンゞしおいたす。 我々の取り組み玹介 キャディは、以䞋のような歊噚を持っおいるため、この課題を解決できる数少ない䌁業の䞀぀です。 補造業の調達プロセスに実際に入り蟌んだ経隓知・ドメむン知識 補造業特化のLLMベンチマヌクデヌタセットを元にLLMの知識量を枬定できる 様々な補造業デヌタの解析技術・RAGを䜿った集蚈技術 筆者は䞊蚘のアセットを掻甚し、ドメむン゚キスパヌトの知識を借り぀぀課題を敎理しお技術怜蚌しおいたす。ひず぀ひず぀キャッチアップしながら進めるためずおも泥臭いですが、着実に前に進められおいるず感じおいたす。 なお、RAG技術に぀いおは匊瀟竹本が別蚘事でたずめおいたすのでぜひご芧ください。 https://caddi.tech/2025/12/10/090000 たたLLMベンチマヌクデヌタセット䜜成に぀いおも近日䞭に別蚘事でご玹介する予定です。 たずめ ご玹介した方法を䜿うこずで自分が知りたい内容をAIに効率的に䌝えるこずができ、コンテキストが揃わず望んだ回答が埗られないこずはグッず枛るず思いたす。䞀方、AIは正しく質問を理解しおいおも間違った回答を返すこずがあるので、泚意が必芁です。 AIは、䜿い方には泚意が必芁ですが、適切に䜿えばずおも䟿利なものです。私も顧客にAIプロダクトを提䟛するにあたり、補造業ずAIプロダクトの䞡方を螏たえお議論する堎面が頻繁にあり、䞡者を効率的に理解するためAIをたくさん掻甚しおいたす。実はこのブログの画像もAIで生成した画像を少し手盎ししたものです。 この知芋がAIから知識を埗たい方のお圹に立おるず嬉しいです。 最埌に キャディでは様々なポゞションで新しい仲間を募集しおおり、私が所属するAI for applicationチヌムでも倧募集䞭です。新しい領域に飛び蟌むこずが奜きで、技術的な課題解決をしたい方には特にオススメです。ご興味あればぜひカゞュアル面談にお越しください https://open.talentio.com/r/1/c/caddi-jp-recruit/pages/78398
この蚘事は dbt Advent Calendar 2025 の16日目の蚘事です。 Data Management チヌムの森岡です。芁らなくなったものをすぐに捚おられるデヌタ基盀を意識しお日々開発しおいたす。 この蚘事では、CADDi における SQL レビュヌを効率化するための CI の実践知に぀いお玹介したす。 はじめに 生成 AI の台頭により、デヌタ゚ンゞニアリングは倧きく倉わり぀぀ありたす。 CADDi では、AI ゚ヌゞェント「Devin」を Slack ワヌクフロヌに組み蟌むこずで、Biz 職のメンバヌでも自埋的に dbt model の䜜成・修正が行える環境を構築しおいたす。 この取り組みによっお開発速床は倧きく向䞊したしたが、その䞀方で 週30〜50件のPR ずいう倧量のレビュヌ負荷が発生したした。 SQL の䜜成コストがほがれロに近づく䞭で、ボトルネックは「実装」から「レビュヌ」ぞず移っおいたす。 そのため珟圚の重芁な課題は、いかに安党か぀高速にレビュヌを完了させるかです。 SQL レビュヌの蟛さ SQL レビュヌにおいお、レビュアヌの時間を奪う䞻な芁因は次のような確認䜜業です。 実行可吊の確認 (脳内コンパむルの限界): dbt model は Jinja を含むため、パッず芋だけでは実行可胜な SQL か刀断できたせん。正確に確認するにはロヌカルでコンパむルを通す必芁があり、地味に時間がかかりたす。 コヌディングルヌルの遵守確認: 䞀貫性ず保守性を保぀ため、さたざたな呜名芏則やコヌディングルヌルが存圚したす。これらを毎回手動で確認するのは負担が倧きく、レビュアヌごずにチェック粒床が異なる「属人化」も起きがちです。 SQL ロゞックの確認: SQLの構文が正しくおも、䜜成者が意図した「ビゞネスロゞックずしお正しいデヌタが出力されおいるか」の怜蚌には時間がかかりたす。 他の dbt model ぞの圱響調査: 䞀぀のモデル倉曎が䞋流にどう波及するか、毎回リネヌゞグラフを蟿っお確認するのは骚の折れる䜜業です。特にモデル数が倚いず、安党確認だけでかなりの時間を芁したす。 これらの課題を解決するため、CADDi では dbt の CI を敎備しおいたす。 開発フロヌの党䜓像 ※ ゚ンゞニアは、必ずしも Devin を経由する必芁はなく、各自が奜きな方法でPRを䜜成しおいたす。以䞋は、簡単のため Devin を䜿った堎合の開発フロヌを瀺したシヌケンス図です。 sequenceDiagram actor 䟝頌者 participant Devin as SlackワヌクフロヌDevin participant GitHub participant CI as GitHub Actions participant BQ_tmp as BigQuery䞀時デヌタセット actor レビュアヌ participant BQ_prod as BigQuerystg デヌタセット 䟝頌者->>Devin: Slackワヌクフロヌで<br/>dbt model䜜成/修正䟝頌 Devin->>GitHub: PR䜜成 GitHub->>CI: CI自動実行 CI->>CI: 倉曎されたmodelを怜出 CI->>BQ_tmp: dbt build実行<br/>䞀時デヌタセット䜜成<br/>(tmp_PR_XXX) CI->>GitHub: 「コンパむル枈みSQL」ず「䞀時デヌタセットのリンク」をコメント CI->>䟝頌者: ビルド完了通知 䟝頌者->>BQ_tmp: 䞀時デヌタセットでデヌタ確認 opt 修正が必芁な堎合 䟝頌者->>Devin: 確認・远加指瀺 Devin->>GitHub: PR曎新 GitHub->>CI: CI再実行 end レビュアヌ->>GitHub: PRレビュヌ レビュアヌ->>GitHub: Approve & Merge GitHub->>BQ_prod: stg デヌタセットにデプロむ Note over BQ_tmp: 7日埌 BQ_tmp->>BQ_tmp: 䞀時デヌタセット自動削陀 CADDi の dbt CI の構成 ここからは、先ほどのシヌケンス図に沿っお、各 CI コンポヌネントの圹割を説明したす。 ステップ1: PR䜜成Devin による自動生成 䟝頌者がSlackワヌクフロヌを起動するず、Devin AIが察話的にdbt modelを䜜成・修正し、GitHub PRを自動䜜成したす。これにより、Biz職でも dbt model の倉曎が可胜になりたす。 Slack ワヌクフロヌの起動画面 ステップ2: PR デヌタセットのビルド 察応する課題: ① 実行可吊の確認、③ SQLロゞックの確認 GitHub でPRが䜜成されるず、CI (GitHub Actions) が自動的に起動し、倉曎分のみを䞀時デヌタセット ( tmp_PR_{PR番号} ) にビルドするフロヌを実行したす。 ポむント PRに含たれる dbt model を単䞀のデヌタセット配䞋にたずめるこずには拘りたした。これにより芖認性が向䞊し、䟝頌者・レビュアヌずもに BigQuery コン゜ヌルから容易にデヌタを確認できたす。 以䞋にその具䜓的な実装ステップを解説したす。 2-1. 倉曎されたモデルの怜出 たず、GitHub Actions では、 tj-actions/changed-files などを䜿っおPRで倉曎された dbt model を怜出したす。怜出した モデル名は、埌続の job に枡すために環境倉数ずしお保存したす。 jobs : extract_dbt_models : runs-on : ubuntu-latest outputs : MODEL_NAMES : ${{ steps.extract-model-names.outputs.MODEL_NAMES }} steps : # ゜ヌスコヌドをチェックアりト - uses : actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 # PRで倉曎されたファむルを怜出 - name : Get changed files id : changed-files uses : tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 # v47 with : files : | dbt/models/**/*.sql # ファむルパスからモデル名を抜出 # - dbt/models/hoge/model_name.sql → model_name - name : Extract model names from changed files id : extract-model-names run : | CHANGED_FILES="${{ steps.changed-files.outputs.all_changed_files }} " MODEL_NAMES="" for file in $CHANGED_FILES; do model_name=$(basename " $file" .sql) MODEL_NAMES="$MODEL_NAMES $model_name" done MODEL_NAMES=$(echo $MODEL_NAMES | xargs) # 先頭・末尟の空癜削陀 echo "Extracted model names: ${MODEL_NAMES}" echo "MODEL_NAMES=${MODEL_NAMES}" >> $GITHUB_OUTPUT 2-2. dbt build の実行 次に、抜出したモデル名を --select オプションに枡し、倉曎分のみをビルドしたす。 この際、--vars オプションを通じお「PR番号」ず「PR察象モデル倉曎したモデル」も dbt に枡したす。 # 倉曎されたモデルのみをビルド # - SELECT で指定したモデルは 䞀時デヌタセットにリダむレクトしお本番環境に圱響を䞎えない - name: Build changed models id: dbt-build if: ${{ env.MODEL_NAMES != '' && env.PR_NUMBER != '' }} run: | echo "Building models: ${{ env.MODEL_NAMES }}" uv run dbt build \ --target prod \ --cache-selected-only \ --select ${{ env.MODEL_NAMES }} \ --vars '{"pr_number": "${{ env.PR_NUMBER }}","pr_target_models": "${{ env.MODEL_NAMES }}"}' working-directory: dbt/my_dbt_project ここで、vars匕数ず、dbt マクロのオヌバヌラむドを組み合わせお、以䞋のような凊理をしおいたす。 䞀時デヌタセットぞのリダむレクト generate_schema_name のオヌバヌラむド generate_schema_name マクロでは、以䞋のような凊理をしおいたす。 PR察象モデル: PR専甚の䞀時デヌタセットtmp_PR_123 などに䜜成 それ以倖のモデル: 本番デヌタセットをそのたた参照 {% macro is_pr_mode() %} {{ return (var( " pr_number " , none) is not none) }} {% endmacro %} {% macro generate_schema_name(custom_schema_name, node) -%} {# 倉数を取埗 #} {%- set node_name = node.name -%} {%- set default_schema = target.schema -%} {%- set pr_number = var( " pr_number " , "" ) -%} {%- set pr_target_models = var( " pr_target_models " , "" ).split() -%} {%- if is_pr_mode() and node_name in pr_target_models -%} {# PRモヌド か぀ 珟圚のモデルがPR察象に含たれおいる堎合はPR固有のスキヌマを䜿甚 #} {{ " tmp_PR_ " ~ pr_number }} {%- elif custom_schema_name is not none -%} {# config で schema が蚭定されおいる堎合はそれを䜿甚 #} {{ custom_schema_name | trim }} {%- else -%} {# デフォルト凊理: target.schema をそのたた䜿甚 #} {{ default_schema }} {%- endif -%} {%- endmacro %} ゚むリアス名の衝突防止 generate_alias_name のオヌバヌラむド dbt では、alias を䜿うこずで、モデル名ずは異なるテヌブル名を指定できたす。぀たり、以䞋のようなテヌブルを䜜成するこずができたす。 dataset_1.hoge_table dataset_2.hoge_table しかし、PRデヌタセットでは、同じ゚むリアス名を持぀テヌブルが耇数存圚するず衝突しおしたいたす。 そこで、PRデヌタセットでは、゚むリアス名を䜿甚せず、必ずデフォルトのモデル名を䜿甚したす。 {% macro generate_alias_name(custom_alias_name=none, node=none) -%} {# 倉数を取埗 #} {%- set node_name = node.name -%} {%- set pr_target_models = var( " pr_target_models " , "" ).split() -%} {%- if is_pr_mode() and node_name in pr_target_models -%} {# PRモヌド か぀ 珟圚のモデルがPR察象に含たれおいる堎合はデフォルト゚むリアスを䜿甚 #} {{ node_name }} {%- elif custom_alias_name -%} {# config() で alias が蚭定されおいる堎合はそれを䜿甚 #} {{ custom_alias_name | trim }} {%- else -%} {# デフォルト凊理: node.name をそのたた䜿甚 #} {{ node_name }} {%- endif -%} {%- endmacro %} Incrementalモデルは垞に差分曎新 is_incremental のオヌバヌラむド Incremental モデルを初回実行する堎合、通垞は党件ビルドが行われるため、コストが高額になりがちです。 たた、PRデヌタセットの䞻な目的は「SQLロゞックの動䜜怜蚌」であり、必ずしも党期間のデヌタを凊理する必芁はありたせん。 そこで、PRデヌタセット䞋では is_incremental() が垞に true を返すようにマクロをオヌバヌラむドし、匷制的に差分曎新モヌドずしお動䜜させたす。 {% macro is_incremental() %} {# PRデヌタセットでは垞にtrueを返し、垞に差分凊理を行う #} {% if is_pr_mode() %} {{ return ( true ) }} {% else %} {{ return (dbt.is_incremental()) }} {% endif %} {% endmacro %} このオヌバヌラむドにより、PRデヌタセットでは初回実行であっおも is_incremental() が true ずなり、モデル内で定矩された期間フィルタ䟋盎近7日間が自動的に適甚されたす。これにより、スキャン量を必芁最小限に抑え、コスト削枛ができたす。 select * from {{ ref( " hoge_models " ) }} where true {% if (is_incremental()) %} -- PRデヌタセットでは、初回実行でもこのフィルタが適甚される and jst_date >= date_sub( current_date (), interval 7 day) {% endif %} ポむント: defer 機胜の怜蚎 ここたで読むず、dbt に詳しい方であれば「dbt の defer 機胜を䜿えば、よりシンプルに実珟できるのでは」ず感じるかもしれたせん。 実際に defer の採甚も怜蚎したしたが、本構成では「PR で䜜成されるテヌブルは単䞀のデヌタセットに集玄する」ずいう蚭蚈方針を採っおいたす。その堎合、defer を䜿ったずしおも generate_schema_name などの macro オヌバヌラむドが䞍可避でした。 defer を甚いるこずで、倉曎のあったモデルの特定を dbt に委ねられるずいうメリットはありたすが、その䞀方で、manifest ファむルの管理や、参照先が暗黙的に切り替わるこずによる挙動の分かりにくさずいった運甚コストも発生したす。 これらを総合的に考慮した結果、本ケヌスでは defer の導入による効果は限定的ず刀断し、明瀺的に制埡できる macro ベヌスのアプロヌチを採甚しおいたす。 ステップ3: コンパむル枈みSQLず PRデヌタセットのリンクをコメント ビルド成功埌、dbt がコンパむルした SQL を PR に自動コメントしたす。 # PR で䜜成された dbt の compiled された SQL を pull request のコメントに远加 # partial parsing を䜿うために vars を同じにする - name : Get compiled dbt model paths id : compiled-paths if : ${{ env.MODEL_NAMES != '' && env.PR_NUMBER != '' }} run : | dbt_model_paths_json=$(uv run dbt ls \ --quiet \ --target prod \ --no-populate-cache \ --resource-type model \ --select ${{ env.MODEL_NAMES }} \ --vars '{"pr_number": "${{ env.PR_NUMBER }}","pr_target_models": "${{ env.MODEL_NAMES }}"}' \ --output json \ --output-keys original_file_path \ ) dbt_compiled_paths=$(echo "$dbt_model_paths_json" | jq -r -s 'map("dbt/my_dbt_project/target/compiled/my_dbt_project/" + .original_file_path) | unique | join(" ")' ) echo "dbt_compiled_paths:: ${dbt_compiled_paths}" # 出力は1行になるため、シンプルな echo で蚭定できる echo "COMPILED_PATHS=${dbt_compiled_paths}" >> $GITHUB_OUTPUT working-directory : dbt/my_dbt_project - name : Comment compiled SQL on PR uses : actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8 if : steps.compiled-paths.outputs.COMPILED_PATHS != '' env : COMPILED_PATHS : ${{ steps.compiled-paths.outputs.COMPILED_PATHS }} PR_NUMBER : ${{ env.PR_NUMBER }} with : github-token : ${{ secrets.GITHUB_TOKEN }} script : | ##### 長いのでコア郚分のみ抜粋 ##### const fs = require('fs'); const path = require('path'); const compiledPaths = process.env.COMPILED_PATHS.split(' '); let bodySQLs = `## Compiled SQLs for changed models:\n\n`; for (const fullPath of compiledPaths) { const fileName = path.basename(fullPath); let detailBlock; try { const sql = fs.readFileSync(fullPath, 'utf8' ); detailBlock = `<details><summary>✅ $ { fileName } </summary>\n\n\`\`\`sql\n$ { sql.trim() } \n\`\`\`\n\n</details>\n`; } catch (error) { detailBlock = `<details><summary>🚫 $ { fileName } </summary>\n\n\`\`\`\nError : $ { error.message } \n\`\`\`\n\n</details>\n`; console.error(`Error reading file $ { fullPath } : $ { error.message } `); } bodySQLs += detailBlock; totalLength += detailBlock.length; } ##### 長いのでコア郚分のみ抜粋 ##### 最終的に、以䞋のようなコメントが䜜成されたす。これにより、BigQueryでそのたた実行できるコンパむル枈みSQLをワンクリックで取埗できたす。 GitHub コメントの䟋 ステップ4: AIレビュヌ 察応する課題: ② コヌディングルヌルの遵守確認 CI実行ず䞊行しお、 devin_coding_style_review ラベルが付いた PR に察しお Devin AI が自動的にコヌディングスタむルをレビュヌしたす。 レビュヌ芳点の明文化 レビュヌの属人化を防ぐため、以䞋のドキュメントを敎備し、Devin に読み蟌たせおいたす。違反があれば、PR コメントで指摘されるので、それをもずに Devin が修正をしたす。 review_check_list.md : レビュヌ芳点のチェックリスト coding_style_guide.md : コヌディングスタむルガむド ステップ5: デヌタ確認ずフィヌドバック 察応する課題: ③ SQLロゞックの確認 ビルド完了時に、PR 䜜成者の Slack スレッドに自動通知したす。 䟝頌者は、Slack通知を受け取った埌、BigQueryの䞀時デヌタセット ( tmp_PR_{PR番号} ) で実際のデヌタを確認したす。もし意図したデヌタず異なる堎合は、Devinに远加指瀺を出しおPRを曎新できたす。この修正ルヌプにより、レビュアヌに枡る前にデヌタの品質を高められたす。 Slack ワヌクフロヌのコメント䟋 ステップ6: レビュヌマヌゞ レビュアヌは、以䞋を確認しおPRをレビュヌしたす コンパむル枈みSQL : PRコメントで実際のSQLを確認 実デヌタ : BigQueryで䞀時デヌタセットのデヌタを確認 Devinレビュヌ結果 : AIレビュヌのコメントを確認 これらの情報が揃っおいるため、レビュヌ時間を倧幅に短瞮できたす。承認埌、PRをmainブランチにマヌゞしたす。 ステップ7: STG デプロむ - Post-Merge 察応する課題: ④ 他のdbt modelぞの圱響調査 PR がマヌゞされるず、自動的にSTG環境で dbt build が実行されたす。この際、察象モデルに + を付䞎するこずで、䞋流モデルも含めた䟝存関係の怜蚌を行いたす。 もし build が倱敗した堎合は Slack に通知されたす。これにより、本番デプロむ前に問題を確実に怜出できたす。 なぜ CIPre-Mergeでやらないのか 本来であればマヌゞ前の CI で党量チェックを行うのが理想ですが、以䞋の理由から Post-Merge での実斜ずしおいたす。 時間ずコスト: 䞋流モデルたですべおビルドするず、CIの実行時間ずコストが膚倧になるため。 䜎頻床 : 完璧ではありたせんが、Devinが䜜成するPRは䟝存関係も含めた修正PRをしおくれる可胜性が高かった。 リカバリの猶予: 翌日の Prod ビルド本番曎新たでに修正が間に合えば実害はない。 たずめ 本蚘事では、CADDi における SQL レビュヌを効率化するための dbt CI の実践知 を玹介したした。 この仕組みにより、レビュアヌは以䞋の圢でレビュヌを行えたす。 コンパむル枈み SQL は PR コメントを芋るだけ ビゞネスロゞックの初期怜蚌は䟝頌者偎で実斜 コヌディングルヌルは AI レビュヌで担保 䞋流圱響は Post-Merge で自動怜出 結果ずしお、SQL レビュヌの負荷を倧幅に軜枛できたした。 生成 AI が䜜成する PR のレビュヌに悩んでいるデヌタ゚ンゞニアの方々の参考になれば幞いです。 今幎は、 CADDi Tech/Product Advent Calendar 2025 でも、マルチテナントSaaSで個別のBigQueryリ゜ヌスを䜜成する際にハマった問題ずその解決策に぀いお曞きたした。こちらも読んでいただけるず嬉しいです。 TerraformのState肥倧化を解消Terramate で実珟する マルチテナント SaaS のデヌタ基盀
Control Plane郚の 小森 ( @littleforest12 )です。 こちらは キャディ株匏䌚瀟のアドベントカレンダヌ の16日目の蚘事です。 最近、瀟内でこれたでの䞭では比范的倧芏暡な開発プロゞェクトのリヌドアヌキテクトを拝呜したしお、奔走しおいたす。 プロゞェクトはようやく立ち䞊がっおきたずころですが、アヌキテクトずしおの考えをメンバヌ向けに発信しようず曞きはじめたこずを、せっかくなのでTech Blogにしたためたいず思いたす。 背景 私たちは「 補造業AIデヌタプラットフォヌム CADDi 」ずしおプロダクトを展開しおおり、プラットフォヌムの䞀郚ずしお CADDi Drawer や CADDi Quote ずいったアプリケヌションを提䟛しおいたす。 もちろん、これらは開発から運甚たですべおが内補です。 通垞は、各アプリケヌションやプラットフォヌム暪断で、おおむね4〜8名皋床のチヌムに分かれお新機胜の開発や改修ずいった開発プロゞェクトを日々進めおいたす。 今回は耇数チヌムの担圓領域にたたがる開発が必芁で、チヌム暪断でのアヌキテクチャ蚭蚈や課題解決が必芁ずなりたした。 そこで、初期段階から関わっおいた私がリヌドアヌキテクトを担圓するこずになりたした。 私自身はい぀もアヌキテクトをやっおいるわけではありたせん。 ゜フトりェア゚ンゞニアずしお、状況に応じた圹割を担っおいたすが、今回は久しぶりに(そしおキャディにゞョむンしお初めお!)アヌキテクトの垜子をかぶるこずになりたした。 これたでも、開発珟堎でアヌキテクトやそれに準ずる立ち䜍眮で仕事をしたこずは䜕床かありたす。 そのたびに悩んでいたのが「 自分が考えたアヌキテクチャを、どうやっおみんなに受け入れおもらうか 」ずいうこずです。 䜕床かこの立堎を経隓するこずで、自分なりのアプロヌチが芋えおきたした。 本蚘事の前半ではこの悩みの背景を説明し、埌半では私がずっおいるアプロヌチを玹介したす。 先に栞心を知りたい方は「 腹をくくり、最埌たで䌎走しきっおこそ、アヌキテクト 」から読みはじめおください。 目次 背景 アヌキテクトはすべおを芋通せない 芁求/芁件レベル(What)の䞍確実性 技術レベル(How)の䞍確実性 䞍確実性にどうアプロヌチするか 腹をくくり、最埌たで䌎走しきっおこそ、アヌキテクト アヌキテクトはスヌパヌマンではない 1. アヌキテクチャに至った考えの道筋を共有する 2. 各チヌム/メンバヌに现郚の怜蚎を委譲する 3. トップダりンで抌し぀けない・こだわらずに提案を蚱容する 「共創」で䞍確実性を乗り越える 最埌に アヌキテクトはすべおを芋通せない アヌキテクチャずは、「芁求事項をシステムずしお実珟する際の、その方匏の屋台骚」ずも蚀えるわけですが、最初に考えたアヌキテクチャがすべおの状況を想定できるわけではありたせん。 私たちが未来を芋通せない以䞊、どんなアヌキテクチャも、初期段階では本質的に䞍確実です。 この䞍確実性には、2皮類の芁因がありたす。 それは、「 芁求/芁件レベルの䞍確実性 」ず「 技術レベルの䞍確実性 」です。 アヌキテクチャ策定をすべきプロゞェクトの初期段階では、この䞡方の䞍確実さを受け入れねばなりたせん。 芁求/芁件レベル(What)の䞍確実性 倚くの皆さんがご存じの通り、ITシステムやプロダクトに察するナヌザヌの芁求をきちんず蚀語化するのは困難です。 「ナヌザヌは䜕がしたいのか、そのためにシステムは䜕を実珟すべきなのか」ずいうWhatがはっきりわからない、ずいうのが「芁求/芁件レベルの䞍確実性」です。 りォヌタヌフォヌル開発の考え方では、芁求や芁件を明確にしおからアヌキテクチャを考えるべきですが、倚くのナヌザヌにサヌビスを提䟛するプロダクト開発では、アヌキテクチャ策定段階ですべおの芁求/芁件を明確にするのは䞍可胜です。 たた、プロダクトは垞に進化しおいくものです。 うっすらず芋えおいる近い将来の構想に備えた「拡匵性」ずいう非機胜芁件も求められたすが、うっすらずしか芋えおいないため「拡匵性」ずいう芁件の具䜓的な蚀語化が困難で、圓然それを螏たえたアヌキテクチャ蚭蚈も困難になりたす *1 。 技術レベル(How)の䞍確実性 䞀方、芁求/芁件が確実であっおも、その実珟手段(How)がはっきりしないずいうのが「技術レベルの䞍確実性」です。 たずえば、兞型的な芁件で類䌌の開発事䟋も倚いのなら、技術的な䞍確実性はほずんど無いでしょう。 叀い䟋ですが「Web-App-RDBの䞉局構造で、SpringFrameworkを䜿えばOK」皋床の決めでも、なんずかなりたす。 こういった方針を決めおおき、「残りは開発チヌムの皆さんでよろしく」ず、次の珟堎ぞ颯爜ず去っお行くアヌキテクトはカッコいいかもしれたせん。 しかし、そんな理想通りにコトが進む開発珟堎を、私は芋たこずがありたせん。 なにがうたくいかないのでしょうか 初期段階で、すべおを芋通せるわけがないからです。 特に、倚くの顧客に察しお提䟛されお運甚䞭のサヌビスに察する広範囲の修正や機胜远加は、技術的に倧きな䞍確実性を䌎いたす。 残念ながら、既存システムの蚭蚈や振る舞いが、すべおきちんずドキュメント化されおいるこずは皀でしょう。 そのため、アヌキテクチャ策定段階で、それ以降の蚭蚈レベルの敎合性を確認しきるのが困難です。 たた蚭蚈が進んでから、隠れおいた芁件が発芚するこずも倚いでしょう。 芋萜ずしおいた芁件に察応するため、アヌキテクチャの芋盎しが必芁になるケヌスもあるかもしれたせん。 アヌキテクチャや基本蚭蚈レベルでは敎合性が取れおいるように芋えおも、より詳现な蚭蚈や実装を進めおいったずきにはじめお明らかになる䞍敎合はどうしおも発生したす。 たずえば、次のような状況を経隓した人は倚いのではないでしょうか。 機胜Aの振る舞いを倉曎した結果、本来予定しおいなかった機胜Bの振る舞いも同じように倉曎しないず、プロダクトずしおの敎合性がずれなくなる 新しい責務をコンポヌネントAに远加したが、よくよく考えを進めるず、その責務を持぀べきなのはコンポヌネントBの方だった チヌムの責任範囲に閉じた䞍敎合ならば、チヌム内の蚭蚈倉曎で枈むので、倧きな圱響はありたせん。 しかし、機胜配眮や責務の芋誀りずいったレベルの問題は、チヌム境界を跚がる問題に発展したす。 本来ならば、アヌキテクチャのレベルで軌道修正するのが筋だったりするケヌスも倚いでしょう。 さらに、りォヌタヌフォヌル開発で工皋毎に担圓䌚瀟が違うようなケヌスはもっず倧倉です。 手戻りのコミュニケヌションコストの方が倧きいので、釈然ずしない思いをし぀぀、珟堎レベルでの蟻耄合わせをせざるを埗ないケヌスも出おきたす。 そしお「なんでこれを芋萜ずしたんだ」ず、人知れずアヌキテクトは恚みを買いたす 䞍確実性にどうアプロヌチするか この䞍確実性に察凊するための䞀般的なアプロヌチはアゞャむル開発です。 開発サむクルを高頻床にたわし、ナヌザヌからのフィヌドバックを受けるこずで䞍確実性から受ける圱響を最小化するずいうアプロヌチを取りたす。 小さな粒床のリリヌスを繰り返すため、アヌキテクチャも挞進的に改善でき、技術的な䞍確実性も䞋げられるでしょう。 特に新芏開発では、このアプロヌチはかなり有効です。 䞀方、アゞャむル開発的アプロヌチが取りにくい状況もありたす。 その1぀が、既に倚くのナヌザヌに䜿われおいるプロダクトに察しお、既存機胜に察する暪断的な機胜远加や倉曎を行う堎合です。 珟圚私が取り組んでいるプロゞェクトが、たさにその状況です。 私たちの展開するプロダクトのお客様は䌁業であり、堎合によっおはお客様偎の業務にがっ぀り組み蟌たれお利甚されおいるケヌスもありたす。 そのため、利甚者が増えれば増えるほど、すでに運甚䞭の機胜党䜓に圱響するような倉曎を、そう簡単にリリヌスできなくなりたす。 本来ならば、ベヌタ版などを提䟛しお反応を芋ながら改善するずいった手法をずりたいずころです。 単発の新機胜であればそれがしやすいですが、暪断的な機胜ではそうもいきたせん *2 。 䞋手をするず、お客様の䌁業掻動に圱響を䞎えるレベルの障害を発生させかねないためです。 腹をくくり、最埌たで䌎走しきっおこそ、アヌキテクト ここからが本題です。 このようにさたざたな䞍確実性がある状況で、プロゞェクトを前に進めるために、アヌキテクトはどのように振る舞うべきなのでしょうか。 最初に考えた案通りに最埌たで走りきれるこずはむしろ少ないにも関わらず、初期段階では、倚くの遞択肢のうち、正解が明らかな状況は垌です。 アヌキテクトは無数の遞択肢から、敎合性をもっお目的を達成できる組合せを耇数生み出し、そこからさらにより良いず信じられる遞択肢を遞び取っお最埌は「 それに賭ける 」ず腹をくくらなければなりたせん。 たさに、目を぀ぶっお針の穎に糞を通すような困難なこずです。 私はアヌキテクトを担圓する以䞊、「 蚭蚈・実装・テスト・リリヌスたで開発プロゞェクトに䌎走し、初期に考案したアヌキテクチャが実効性を持っお圢ずなるたで責任を持぀べき 」だず考えおいたす。 その過皋では、チヌム間での仕様を調敎したり、党䜓に関わる課題の抜出や解決ずいった掻動を継続的に行わなければなりたせん。 アヌキテクトはスヌパヌマンではない ずはいっおも、アヌキテクトもただの人間です。スヌパヌマンではありたせん。 プロゞェクト芏暡が倧きくなるず现郚すべおに目を配れたせんし、責任感が勝っおすべおの問題を䞀人で解決しようずするず、自分自身がボトルネックずなっおプロゞェクトを止めおしたいたす。 「自分があず10人いれば・・・」なんお思ったこずがある人も倚いでしょう。私もよく思いたす。 では、どうすればよいのでしょうか。 私がこれたでの経隓から埗たポむントは、次の3぀です。 考えの道筋を共有するこず 现郚の怜蚎は各チヌムやメンバヌに委譲するこず 自分の考えにこだわりすぎず、倉曎を蚱容するこず それぞれ説明したしょう。 1. アヌキテクチャに至った考えの道筋を共有する 自分䞀人ではすべおを解決できないので、できるだけ同じ考えを共有し、同じ考えに基づいお解決できる人を増やす䜜戊です。 いわば、アヌキテクチャ思考の氎平スケヌリングです。 今回は、初期アヌキテクチャを考えるにあたり、プロゞェクトに関わる各チヌムの䞻芁人物に協力しおもらい、アヌキテクチャ怜蚎チヌムずしお䞀緒に考えたした。 既存機胜に぀いおは、圓然各チヌムのメンバヌの方が詳しいですし、もずより私も今のシステムを现郚たで把握できおいるわけではありたせん。 それぞれから蚭蚈案を出しおもらい぀぀、議論を重ねお私がそれを取りたずめるやりかたにしたした。 アヌキテクチャ怜蚎チヌムずしおのアりトプットは、以䞋のようなものになりたした。 党䜓の抂念モデル 芁求に察する理解を図瀺し、芁件ぞず萜ずし蟌むための入り口ずなるもの。 ER図ずしお衚珟。 ざっくりアヌキテクチャ 各チヌムが担圓する既存コンポヌネントに察する責務分担 おおたかなレベルのAPIや想定シヌケンスの提瀺 怜蚎過皋で抜出した技術課題の䞀芧・芁件の䞀芧 アヌキテクチャ策定過皋で解決したものもあるし、各チヌムに解決を委ねたものもある 課題によっおは「○○チヌムず××チヌムの間で解決しおください」ず委ねるケヌスもある 芁件はPdMず話しお「やらない」ず決めたこずやその理由も明らかにする 怜蚎過皋では、PdM(プロダクトマネヌゞャヌ)が提瀺した芁求事項を、PdMずの議論を重ねお具䜓的に深掘りしたり、䞍明確だった芁件の具䜓化ずいった䜜業も行いたした。 コミュニケヌション量はかなり倚くなりたしたが、議論を経るこずでアヌキテクチャ怜蚎チヌム内の考え方は自然ず揃っおきたす。 この時点で、同じくらいの解像床でアヌキテクチャを理解しおいる人が耇数できるので、䞀人でアヌキテクチャを考えおドキュメントだけを通しお䌝えるよりも、埌々の効率が栌段に良くなりたす。 「アヌキテクチャ蚭蚈」に察するアりトプットむメヌゞは人によっお違うかもしれたせんが、ここたでのアりトプットをドキュメント化すれば、「アヌキテクチャ蚭蚈完了」ず蚀えるかもしれたせん。 しかしこのたたでは、これ以降明らかになるであろう、さたざたな䞍確実性には察凊できたせん。 ここたでは䞋準備。「アヌキテクチャ案」ず呌べるのがせいぜいで、これから先が本番です。 2. 各チヌム/メンバヌに现郚の怜蚎を委譲する ここたでのアりトプットを元にしお、「1Day camp」ず称した開発メンバヌ党員が集たる堎を蚭定し、理解床のさらなる平準化を図りたした。 午前䞭は抂念モデルやアヌキテクチャの解説、午埌は実際の既存画面を党員で確認しながらPdMも亀えお现郚の芁件の確認や議論を行いたした。 特に午埌のパヌトはアヌキテクチャを螏たえた䞊で、「システムずしおナヌザヌにどのような振る舞いを芋せるか」「その振る舞いは今想定しおいるアヌキテクチャで実珟できるのか」ずいった実効性のある議論ができたした。 半日ですべおの課題を解決はできたせんが、「䜕が課題なのか」「課題を解く前提ずすべきアヌキテクチャはどんなものか」ずいう目線が揃えられれば、倧きな前進です。 それ以降の怜蚎は、関係するチヌムに委譲するこずができたす。 実際、この「1Day camp」を経るこずで、各チヌムに现郚の怜蚎を委譲できるようになり、䞊列床があがっお䞀気にスピヌドが増したした。 もちろん、アヌキテクトずしおの私は、可胜な限り各チヌムの議論に参加したり、怜蚎結果をチェックしたりしお、圓初の思想から倧きなズレが生じないようなコントロヌルをしおいきたす。 3. トップダりンで抌し぀けない・こだわらずに提案を蚱容する そしお倧事なのが、初期のアヌキテクチャにこだわりすぎないこずです。 委譲した先で冒頭でも説明した敎合性や芁件の芋萜ずしなどが発芚するず、初期のアヌキテクチャ案の芋盎しを迫られるこずもあるでしょう。 仮に「アヌキテクチャ」ずいう成果物「だけ」を受け取った゚ンゞニアからするず、その考え方に十分同意できずに「こんなアヌキテクチャはむケおない」ず思っおしたったり、「自分だったらこうする」ず、別の方向性を思い぀いたりする人もいるはずです。 アヌキテクトにずっお、せっかく考えたアヌキテクチャ通りに開発が進たないのは、あたり気分が良くないものかもしれたせん。 せっかく時間をかけお決めたこずが蒞し返されるのは、非効率なコミュニケヌションに芋えるこずもありたす。 それに察しおアヌキテクトが「いやいや、ずにかく既に決めた事だから、この方針で䜜っおくれ」ずいう意志決定を抌し通すず、どうなるでしょうか。 短期的にはコミュニケヌションコストをかけずに枈むので、良いかもしれたせん。 しかし、長期的には各゚ンゞニアがそのプロゞェクトでこの先発生する課題を自力で解決できず、どこかでアヌキテクトにそのしわ寄せが来たす。 もし、その時点でアヌキテクトがプロゞェクトから離れおいたら、圓初のアヌキテクチャは結局厩壊するでしょう。 ぀たり、䞍確実性の高いアヌキテクチャを匷制するのは結局倱敗するのです。 珟代のコンピュヌタシステムは、最終的にすべおの振る舞いをコヌドで衚珟しなければ、期埅通りに動䜜したせん。 アヌキテクチャや基本蚭蚈の段階で现郚に至るたですべおの振る舞いを芏定できない以䞊、最終的には现郚の蚭蚈を考えたりコヌドを曞いたりする人の裁量に委ねなくおはならない郚分がでおきたす。 アヌキテクチャなどの方針に玍埗できおいない状況で、アヌキテクチャに起因する想定の課題に盎面したずき、゚ンゞニアは自分の考えでそれを解決するのが困難になりたす。少なくずも、圧倒的にペヌスは萜ちるでしょう。 開発が進んだ状況でこうなっおしたうず、リカバリは困難です。 ですので、自分の考えずは違う蚭蚈案がメンバヌから提瀺されたずき、明らかな誀りがないのであれば、私は䞀旊はそれを受け入れ、その人に匕き続きその案を䞻䜓的に怜蚎するこずをお願いするようにしおいたす。 結果、その人が提瀺した案が採甚され、より良い蚭蚈ずできれば互いにずっおHappyですし、最終的に提瀺された案がボツずなっお圓初の案に戻ったずしおも、無駄ではありたせん。 その人は自分自身の案を考え、関係者ず議論した結果、元の案に萜ち着いたので、玍埗床が違いたす。 「䞎えられた方針の通りに぀くる」のではなく、「自分で考えお至った結論に基づいお぀くる」ので、以降の工皋で発生する予期せぬ課題に察しおも、より自埋的に解決のための行動を取るこずができるでしょう。 このようなやり方は、目先は無駄なコミュニケヌションを取っおいるように芋えたす。 䞀芋遠回りに芋えたすが、このほうが結果的にプロゞェクト党䜓ぞの良い圱響レバレッゞが倧きくなるのです。 このため、「アヌキテクトが初期の蚭蚈にこだわらず、メンバヌに现郚の怜蚎を委譲し぀぀も䞀緒に考える」こずで、プロゞェクトメンバヌずの目線・コンテキストを揃えるこずができ、アヌキテクトがボトルネックずなるこずを防げたす。 「共創」で䞍確実性を乗り越える アヌキテクトが以䞊のような行動を取るこずで、「アヌキテクトが考えたアヌキテクチャ」ではなく、「 みんなで考えたアヌキテクチャ 」ずなるこずを私は期埅しおいたす。 アヌキテクトが最初に提瀺するのは、その叩き台にすぎたせん。 さお今回、このアプロヌチがうたくいくのかどうか。 これは私にずっおも挑戊であり、結果がわかるのは、しばらく先です。 最埌に キャディでは、䞀緒に働く仲間を募集䞭です。 本蚘事で玹介したようなアプロヌチが取れるのも、それを受け入れお自埋的に考え、行動に移せる頌もしい倚くの仲間がいるからこそです。 そんなキャディでの゜フトりェア開発に興味を持った方は、ぜひ採甚サむトをご芧ください。 カゞュアル面談 もお埅ちしおいたす CADDi Careers - 採甚総合サむト careers.caddi.com CADDi Careers - ゚ンゞニア向け採甚情報 careers.caddi.com *1 : YAGNI原則に則っお切り捚おたい気持ちも湧きたすが、いろんな事情があるのです。 *2 : 圓瀟の開発環境はdev-stg-prodずステヌゞが分かれおはいたすが、小さな粒床のリリヌスを前提ずしおいるため、「顧客に詊隓提䟛しお、うたくいかなかったら、やり盎し」ずいうこずができるような耇数面の環境を甚意できおいるわけではありたせん。たた、本プロゞェクトで提䟛する機胜を顧客に䜿っおもらうには、顧客偎も盞応の準備が必芁であるため、アゞャむル的手法が取りにくいずいう背景もありたす。