Tech Blog

AIエージェント開発におけるトリレンマの解決アプローチ (エージェントと責務の分離)

はじめに Google ADKを使ったPPTXスライド生成エージェントを開発している中で、トリレンマに遭遇したのでその内容と解決方法をまとめます。 開発しているエージェントには、ユーザーの指示を受けてスライドを生成する/runエンドポイントがあります。 しかし…

Clojureのmapに1項目追加したら順番が変わる PersistentArrayMapとPersistentHashMap

はじめに こんにちは。Product Teamの渡邉です。 私が所属するチームではアカウントプランを自動で作成してPPTXに書き出す機能を開発しています。 Clojureで、mapの内容を順番にスライドへ変換する処理を修正していました。 もともとの対象は8スライド作成済…

ADKとA2Aで動くエージェントで出力形式を切り替える

はじめに こんにちは、Speeda Product Teamの横山です。 Speeda AI Agentでは、多数のAgentがA2Aプロトコルを用いて連携しています。 各Agentは基本的にマークダウン形式のテキストで出力を返します。Agentや人間が読む場合はこれでも良いのですが、プログラ…

AI時代のスピード開発を支える「生きた仕様書」— E2E×Gaugeでドキュメントの風化を防ぐ

はじめに 現代のソフトウェア開発において、Claude CodeやCodexといった最先端のAIツールの導入は、エンジニアの生産性を劇的に向上させています。 私たちが開発スピードの向上を追い求める本質的な理由は、 一刻も早くリリースしてフィードバック(FB)サ…

事業部の手作業を自動化したら、データ分析まで自走できるようになった話

はじめに こんにちは。ソーシャル経済メディア「NewsPicks」のPlatform Engineeringチームのカトマサです。 以前、新卒エンジニアとしての成長記録を書いてから約1年半、動画配信や記事編成システム周りを中心に開発を続けてきました。 今回は、広告動画制作…

非エンジニアがSFDC開発チームに"兼務"して見えたもの ―受注管理業務設計と開発、両方の視点を持つことの価値―

皆さんこんにちは。 株式会社ユーザベース スピーダ事業Business Process Management(以下BPMと称する)チームのLeeと申します。 チームのR&Rとしては、UBグループ全体の受注以降の販売プロセスの企画・設計を通して販売/契約管理の安定運用の実現とガバナ…

GitでCRLFを含むファイルを管理したい!

はじめに こんにちは!株式会社ユーザベース スピーダ事業でソフトウェアエンジニアをしている阿波連、内山、撰、知念です。 私達は現在、データの取り込み業務を行っており、様々なファイルの読み込み、Speedaに取り込んでいます。 その中で、ファイルの改…

ペアプロ未経験が2ヶ月間ペアプロしてみての感想

XPをやっているチームに入って2ヶ月が経ちました。Product Teamで、私はここで初めてXPを経験し、多くのギャップを感じました。 今まで自分が「良い仕事の仕方」だと信じていたものが、このチームではだいたい逆だったからです。 分からないことは、調べる前…

RAGエージェントの評価指標を評価する

はじめに こんにちは! 株式会社ユーザベース スピーダ事業・プロダクトチームのドメイン特化モデルチームの飯田です。 今四半期、Gemini 2.5 Flashを使っていたエージェントの生成モデルをGemma 4に置き換え、プロダクションに導入しました。本記事では、そ…

AIによるSQL生成に潜む罠と対策 〜本番データ更新におけるAIとの正しい付き合い方〜

プロダクトチームの小林です。 弊社では、エンジニアの技術力向上および自主的な挑戦を推奨する取り組みとして「ひとりプロジェクト」を実施しています。これは、通常行っているペアプログラミング環境から一度離れ、1ヶ月程度で企画・設計・実装・リリース…

1on1 コーチングの奥義 なにもしないテクニック

プロダクトチームでは週1回程度にメンバー同士でコーチングを行っています。 コーチを担当するとやったことのないコーチングに難しさを感じることがあります。 「どうやって気づきを与える質問をしたらよいかわからない」 「何を話していいのかわからない」 …

Kubernetes上の通信がなぜか15分で途切れてしまう謎を解明した話

はじめに はじめまして、スピーダ事業Product Teamの清水です。 私たちのチームではKubernetesを利用してアプリケーションの運用をしております。 今回はKubernetesのあまり知られていない設定により詰まる経験をしたので、供養のため記事にしたいと思います…

セッション管理から共有ストアを消す — 暗号化 cookie に状態を持たせる

課題:短命なデータのために共有ストアを運用する手間 株式会社ユーザベースでSpeedaのソフトウェアエンジニアをしている塚田です。 今回は新しい画面の開発でOIDCでログイン機能を実装したときの学びについて書きます。 我々のアプリは複数台のレプリカ構成…

『チーム・ジャーニー』の3つの問いでチームビルディングをやってみた

はじめに こんにちは。スピーダ事業Product Teamの中嶋です。 以前の記事で1週間ごとにチームのふりかえりをしていると書きました。 tech.uzabase.com ふりかえりのファシリテーターは、基本的にはチームの外から呼んできます。 今回、私は別のチームから依…

全員がリーダーである世界へ シェアドリーダー×キリマンジャロへの挑戦

リーダシップ研修としてキリマンジャロに登ってきました。 その中でユーザベースで行われている シェアドリーダーシップという取り組みの本質を肌身で体感したのでまとめます。 その前にシェアドリーダーシップ制度について解説します。 私たちのチームには…

80万件の Contentful エントリのマイグレーション

こんにちは。株式会社Uzabaseの FO/EIチーム です。 Uzabaseでは一部サービスでContentfulを使用しているのですが、今回あるコンテントタイプを 数値型から文字列型に変更する必要が出てきました。対象エントリは約80万件です。 Contentfulのマイグレーショ…

日常に溶け込んだプラクティスをふりかえる ─ テーマを絞ったふりかえりのすすめ

はじめに こんにちは。スピーダ事業Product Teamの中嶋です。 今年のはじめから先月まで、大阪拠点の開発チームでお仕事をしていました。約半年ぶりに東京拠点での開発に戻り、どんなことがやれるのか少し楽しみにしている自分がいます。 さて、私たちProduc…

関数型プログラミングのメリットって何だろう?

はじめまして、2026年5月からUzabaseで働いております。清水と申します。 自分のジョインしたチームでは、関数型言語であるClojureを使って開発しています。関数型言語での開発をきっかけに、関数型プログラミングの良さについて興味を持ったので、今回社内…

遅い・重い・書きづらい Apex テストを「モック化」で作り変えた話

はじめに こんにちは、株式会社ユーザベース スピーダ事業 Sales System Engineering Teamの村松(あだ名:MJ)です。 ユーザベースのSalesforceのアドミン/デベロッパーを担当しています。 SalesforceではApexを本番環境にデプロイするときはテストクラスが…

探索手法と量子化で見るベクトル検索

はじめに 私たちはスピーダ事業のプロダクトチームで企業の検索システムを開発しているチームです。このシステムは単純な企業名などでのキーワード検索にとどまらず、企業の特色といった文章そのものを検索できることを目指しており、基盤には Elasticsearch…

Claude CodeのスキルでSLO対応を自動化したらめちゃくちゃ楽になった

こんにちは。ソーシャル経済メディア「NewsPicks」のPlatform Engineeringチームの崔(ちぇ)です。 昨今、エンジニアのやるほとんどの仕事は「それはClaudeに」というものばかりになった気がします。調査に限らず実装やPR作成、なんならChrome拡張を使えば…

初夏の都に佇む遺物をAIツールで掘り返す 〜 古いOSで新しめのPythonを使いたかった

こんにちは。株式会社ユーザベース スピーダ事業の酒井です。 2年前、こんな概要のブログ記事を下書き保存して、公開を忘れて寝かせ続けていました。(1年前思い出して、バージョン更新した記事を修正して再度寝かせていた) サーバを整理していたところ、…

google-adk 2.2.0 更新後に /a2aが404になってAnalysis Templateが失敗する

はじめに 私たちのプロダクトチームでは、AI Agentの開発にGoogle ADK (Agent Development Kit)を利用しています。 過去に開発したエージェントを段階的に成長させる形でバージョンアップを行っていますが、その過程で少しニッチなエラーに遭遇し、デプロイ…

Dart の等価性を完全理解する

はじめに Dart で == を使ったとき、「同じ値なのに false になる」という経験はないでしょうか。 この記事を書こうと思ったきっかけは、LinkedHashMap を Equatable パッケージで等価比較しようとしたときの出来事でした。LinkedHashMap は挿入順序を保持す…

エルビス演算子の落とし穴

はじめに こんにちは。株式会社ユーザベース Speeda事業でソフトウェアエンジニアをしている朝比奈です。 私は現在、データフィードチームに所属しており、主な言語としてGroovyを扱っています。その際にエルビス演算子を用いてプログラムを書き、個人的な学…

例外の正しい扱い方 そのエラー try-catchして大丈夫?

はじめに 開発の中で「例外処理」を実装しなければならないタイミングは、定期的に訪れます。 しかし私は、例外をどのように扱うべきかで度々迷ってしまいます。そして、そのたびにコードを書く手を止めて悩んでいました。 思えば、エンジニアなら誰もが日常…

絵しりとりでチーム内外のコミュニケーションを促進させる

はじめに 株式会社ユーザベース スピーダ事業 竹澤です。 みなさんは、チーム内外のコミュニケーションを増やしたいと思った経験はありませんか? オフィスに出社しているとオンラインで働いているときよりは偶発的な会話が生まれやすいです。 一方で、出社…

ユーザベースは第40回人工知能学会全国大会にスポンサーとして参加しています!

株式会社ユーザベース スピーダ事業 機械学習エンジニアの二木です。 2026年6月8日(月)〜12日(金)にGメッセ群馬で開催される、第40回人工知能学会全国大会にゴールドスポンサーとして協賛しています。 conf.ai-gakkai.or.jp JSAI2026にスポンサーブース出展 …

最古参プロダクトの認証基盤リプレースに XP とレガシーコード改善で挑む

はじめに どんなプロジェクトだったか? プロジェクトのゴール チーム構成 取り組んだこと 口頭によるコミュニケーションを大事にする リプレースできる条件を定義する ログインに関連するイベントを洗い出す パスワードが更新されたとき 同一人物が複数アカ…

Pub/SubのPushで200系を返しているのに push リクエストが500系しか来ない

はじめに プロジェクトセリングチームではAIを活用したプロダクトを開発しており、その中でIR資料を生成AIで処理して活用しています。 繁忙期に向けて資料の提出が増える時期になったので、これまで日次で行っていた手作業の運用ではなく、DBの更新があった…

組織図はTreeじゃなかった 〜データ構造をDAGに捉え直した話〜

はじめに こんにちは。株式会社ユーザベース Speeda事業の伊藤、田中、都築、濱岡です。 私たちは現在、Speeda AI Agent の開発に携わっています。本記事では、その中の「組織図」を表示する機能を開発する過程で、データ構造を「Tree」から「DAG(有向非巡…

今更ながらDPO(Direct Preference Optimization)に入門してみた

はじめに DPOを利用する上での前準備 選好データセットの準備 参照モデルを準備する DPOの損失関数 どういう時にDPOを使うのが良いのか? DPOの良い面 感情制御とスタイルの高い忠実度 事実に関する正確性と堅牢性 安全性と有害コンテンツの抑制 DPOの課題 …

Agentをどうやって早く安く良くしたか 〜プロンプトキャッシュ・State戦略〜

はじめに 企業レポートの生成を行うエージェントの作成を行う中で、レポート生成にかかる時間・費用・レポートの質の改善に取り組みました。 改善点を行う中で、Stateやプロンプトキャッシュ周りのAgent Platform(旧VertexAI)の仕様について深く知ることが…

Vertex AI のスループット上限で 429 を踏んだ話

はじめに こんにちは。株式会社ユーザベースの石井です。 gemini-3-pro-image-preview の呼び出しに対して 429 Too Many Requests が返ってくる事象に遭遇しました。 問い合わせを通じてVertexAIのスループットの上限まわりの仕様の理解が深まったため記事に…

数式はシンプルなのに、時価総額はなぜこんなに難しいのか

自己株式数・発行済株式数・取引不在の現実に向き合った数ヶ月 こんにちは。株式会社ユーザベースの相川です。 この数ヶ月、自己株式数の取得・登録と、時価総額の算出ロジックに取り組んできました。 振り返ると、やっていたのは機能追加というより、市場デ…

「インサイドセールスだから」という境界線を引かない。AIを活用した業務変革とAIに対する想い。

こんにちは。ユーザベースの細田と申します。 私は2025年にユーザベースに入社して以来、インサイドセールス(IS)としてエンタープライズ企業様をはじめとしたさまざまな企業様の深耕や開拓に従事しております。 この記事では、私がISとして取り組んでいる…

本番稼働中のDBにNOT NULL制約かつデフォルト値のないカラムを追加する

はじめに 株式会社ユーザベース スピーダ事業 竹澤です。 この記事の内容としては、本番稼働中のAPIを止めずに、APIが参照しているDBにNOT NULL制約のあるカラムを追加する1つの方法の紹介です。 私はさまざまなSPEEDAのマイクロサービスから財務値を取得で…

CursorでSalesforce Hosted MCPに接続!スクラッチ環境構築でのエラーと解消法

はじめに こんにちは。株式会社ユーザベース Speeda事業の佐藤、小原、阿波連、長岡です。 *1 2026/04/14にGAされた Salesforce Hosted MCP Servers について、スクラッチ環境への接続で一部ハマりどころがありました。 本記事では、接続方法、接続トラブル…

外部API呼出しにおける「Too many files open」の回避とHTTPクライアントの適切な管理

こんにちは。株式会社ユーザベースの相川と申します。 今回は分散システムにおいて、一見関係のない「DBエラー」が「ファイルディスクリプタの枯渇」を引き起こし、最終的にバッチ処理全体に波及したケースがあったので、その内容をお話しします。 本記事で…

A2UI — エージェントがUIを"喋る"時代

はじめに こんにちは。Speeda Product Teamの板倉です。 AIエージェントに「直近3年の売上推移を教えて」と聞いたとき、こんな回答が返ってきた経験はないでしょうか。 2022年の売上は120億円で、前年比+8%の成長でした。 2023年は135億円で前年比+12.5%、20…

【Skew Protection】Server Actionがクライアント-サーバー間のバージョン不一致でエラーになる問題をIstioのVirtual Serviceで解決した話

はじめに みなさんこんにちは、株式会社ユーザベース エキスパートプロダクト開発チームの佐藤一徹です。 私たちのチームでは、 Speedaのエキスパート事業を支えるプロダクト群を開発しており、そのうちの一つとして社員がエキスパートを管理するための社内…

シン・リスコフの置換原則 〜現代風に考えるSOLIDの原則〜

speakerdeck.com SOLID原則の中でも最もイメージしづらいとされるLSPですが、実は「オープン・クローズドの原則(拡張に対して開き、修正に対して閉じる)」を守る上で、オブジェクト指向において非常に重要な概念です。 1. LSPの核心は「振る舞いの契約」 L…

Kotlin 2.3 × Java 25 への刷新:Maven 構成の見直しで「最新 LTS」の恩恵を最大化する

こんにちは。先日、プロジェクトのビルド基盤を最新の Java 25 (LTS) と Kotlin 2.3 へと一気に引き上げ、あわせて pom.xml の大掃除を行いました。 最新の言語機能を取り入れるだけでなく、マルチモジュール構成における「設定の重複」を排除したことで、保…

Salesforce 開発を 組織駆動 から ソース駆動 に移行してみた

はじめに こんにちは、ユーザベース Sales System Engineering Teamの竹本(あだ名:たけたけ)です! 前回の記事 では、僕たちユーザベースのSalesforce構成をご紹介しました。 その中で、スクラッチOrgを用いたソース駆動開発へ転換を目指す…と締めくくり…

脱JSON色付け職人!フロントエンドにおける「ドメイン」の考え方

この記事は社内のLTで発表したものです。 フロントエンドにおけるドメインモデリングについてあまり記事がないため2つのパートにわけて解説をしました。 今回はフロントエンドとサーバーサイドのドメインの違いにフォーカスして解説しています。 参考文献 WE…

ソフトウェアを 「道具」にする技術 〜OOUIとAIが交差するフロントエンドのドメインモデリング〜

この記事は社内LTで発表したものです。 AI時代においてこれまで銀の弾丸とされていたOOUIでないUIが多く現れています。 この中でどのようにソフトウェアとしての価値を生み出せばよいのかを解説します。 前回の発表でフロントエンドのドメインモデリングは「…

「思考停止」から「意志駆動」へ — AIサークルで見つけた「向き合い方」の力

はじめに はじめまして。ユーザベースのOperation組織で業務効率化やAIカルチャーの浸透を推進している久保田です。 Operation領域では生成AIの影響力が急速に大きくなっています。異常検知や事務作業の自動化、問い合わせへの自動回答など効率化できる白地…

「顧客理解」を仕組み化する。AIとの壁打ちが生む「腹落ち」した提案と、『UB仮説作るくん』開発の裏側

プレイヤーとして、イネーブルメントとして感じた「CSの課題」 まず簡単に自己紹介ができればと思います。ユーザベースの谷内(やち)と申します。 私は2020年にユーザベースに入社以来、インサイドセールスやフィールドセールスのプレイヤー、実務イネーブル…

Salesforce トリガーの開発・メンテナンスを楽にするためのフレームワークの設計と実装

はじめに こんにちは、株式会社ユーザベース スピーダ事業 Sales System Engineering Teamの村松(あだ名:MJ)です。 ユーザベースのSalesforceのアドミン/デベロッパーを担当しています。 今回は私たちのチームで用いているトリガーフレームワークについて…

AIを使い倒して気づいた、人間の役割の変化 — コパイロットからメインパイロットになるのか?

こんにちは。ユーザベースでアナリストとしてレポート執筆をしている堀籠です。 アナリスト業務でも、生成AIはここ1~2年で欠かせないツールになってきています。企業や業界の下調査、フレームワークに沿った分析など、ハルシネーションには常に注意しながら…

Page top