Uzabase for Engineers
https://tech.uzabase.com/
スピーダ, NewsPicksなどを開発するユーザベースのTech Blog & エンジニア採用サイト
フィード

『チーム・ジャーニー』の3つの問いでチームビルディングをやってみた
Uzabase for Engineers
はじめに こんにちは。スピーダ事業Product Teamの中嶋です。 以前の記事で1週間ごとにチームのふりかえりをしていると書きました。 tech.uzabase.com ふりかえりのファシリテーターは、基本的にはチームの外から呼んできます。 今回、私は別のチームから依頼された側でしたが、状況から考えると「ふりかえりよりも先に、チームビルディングをやったほうが良いのでは?」と思い、実際にチームビルディングのファシリをしたので、そのときの話を書こうと思います。 はじめに いつもどおりのふりかえりファシリ依頼 チーム始動直後という、いつもと違うタイミング チームビルディングで何をやるか 『チーム…
5時間前

全員がリーダーである世界へ シェアドリーダー×キリマンジャロへの挑戦
Uzabase for Engineers
リーダシップ研修としてキリマンジャロに登ってきました。 その中でユーザベースで行われている シェアドリーダーシップという取り組みの本質を肌身で体感したのでまとめます。 その前にシェアドリーダーシップ制度について解説します。 私たちのチームにはマネージャーやリーダーといったポジションがありません。「全員がリーダー」という考えの基、技術のことだけでなく、組織運営に関しても全員で意見を出し合い、採用やチーム予算の議論にもみんなが参加します。エンジニアの自主性や成長を重んじた組織づくりを行っています。 Product Teamには「ペアプログラミング」「テスト駆動開発」「レンタル移籍」「チームシャッフ…
7時間前

80万件の Contentful エントリのマイグレーション
Uzabase for Engineers
こんにちは。株式会社Uzabaseの FO/EIチーム です。 Uzabaseでは一部サービスでContentfulを使用しているのですが、今回あるコンテントタイプを 数値型から文字列型に変更する必要が出てきました。対象エントリは約80万件です。 Contentfulのマイグレーション、特に大量データのマイグレーションはあまり情報がなく、ニッチかもしれませんが、同じ課題に直面している方の参考になればと思い、今回の移行で直面した課題と解決策を共有します。 出来るだけそのままをお伝えしたほうが良いかと思うので、上手く行かなかったものも含めお話いたします。 マイグレーション概要 マイグレーションの内…
4日前

日常に溶け込んだプラクティスをふりかえる ─ テーマを絞ったふりかえりのすすめ
Uzabase for Engineers
はじめに こんにちは。スピーダ事業Product Teamの中嶋です。 今年のはじめから先月まで、大阪拠点の開発チームでお仕事をしていました。約半年ぶりに東京拠点での開発に戻り、どんなことがやれるのか少し楽しみにしている自分がいます。 さて、私たちProduct Teamでは、どこのチームでも1週間に1回ふりかえりを行っています。基本的には1週間というタイムボックスをふりかえり、その中で見つけた課題について深掘りし、アクションを立てて終わります*1。 ふりかえりのテーマはその都度その場で見つけて深掘りしていくのですが、大阪拠点の開発チームで、あえて「アジャイルのプラクティス」にテーマを絞ったふ…
11日前

関数型プログラミングのメリットって何だろう?
Uzabase for Engineers
はじめまして、2026年5月からUzabaseで働いております。清水と申します。 自分のジョインしたチームでは、関数型言語であるClojureを使って開発しています。関数型言語での開発をきっかけに、関数型プログラミングの良さについて興味を持ったので、今回社内発表をしました。 関数型デザイン【委託】 - 達人出版会 なっとく!関数型プログラミング【PDF版】 | SEshop| 翔泳社の本・電子書籍通販サイト https://www.goodreads.com/book/show/39996759-a-philosophy-of-software-design 🎓 学生の方へ | 1day イン…
11日前

遅い・重い・書きづらい Apex テストを「モック化」で作り変えた話
Uzabase for Engineers
はじめに こんにちは、株式会社ユーザベース スピーダ事業 Sales System Engineering Teamの村松(あだ名:MJ)です。 ユーザベースのSalesforceのアドミン/デベロッパーを担当しています。 SalesforceではApexを本番環境にデプロイするときはテストクラスが必須です…が、Apexのテストクラス書きづらくないですか? オブジェクトの依存関係を考慮してテストデータをインサートしないといけないですし、トリガがあったらそれはもう純粋なユニットテストではなくなってしまいます。 本記事では、テストデータと DML を モック化してレガシーな Apex テストを作り…
14日前

探索手法と量子化で見るベクトル検索
Uzabase for Engineers
はじめに 私たちはスピーダ事業のプロダクトチームで企業の検索システムを開発しているチームです。このシステムは単純な企業名などでのキーワード検索にとどまらず、企業の特色といった文章そのものを検索できることを目指しており、基盤には Elasticsearch を採用しています。 こうした「意味で探す」検索を支えているのがベクトル検索です。しかし、すべてのベクトルとの距離をまじめに計算する全探索は、実用的な規模になると現実的ではありません。そこで必要になるのが、賢く候補を絞って高速に近いものを探す ANN(近似最近傍探索) であり、代表的なアルゴリズムとして HNSW と IVF があります。 本記…
15日前

Claude CodeのスキルでSLO対応を自動化したらめちゃくちゃ楽になった
Uzabase for Engineers
こんにちは。ソーシャル経済メディア「NewsPicks」のPlatform Engineeringチームの崔(ちぇ)です。 昨今、エンジニアのやるほとんどの仕事は「それはClaudeに」というものばかりになった気がします。調査に限らず実装やPR作成、なんならChrome拡張を使えば動作確認までさっとできちゃいます。GithubのCopilotレビューなんかも、かなりいいことに気づいてくれるので日々頼りにしています。 障害調査はどうでしょう? AWS CloudWatch や New Relic といったo11y(observability)ツールのメトリクスを読んで、仮説を立てて、複数リポジト…
25日前

初夏の都に佇む遺物をAIツールで掘り返す 〜 古いOSで新しめのPythonを使いたかった
Uzabase for Engineers
こんにちは。株式会社ユーザベース スピーダ事業の酒井です。 2年前、こんな概要のブログ記事を下書き保存して、公開を忘れて寝かせ続けていました。(1年前思い出して、バージョン更新した記事を修正して再度寝かせていた) サーバを整理していたところ、その中からCentOS 6が掘り出されたため、Cloud Storage(GCS)へファイルをアップロードして終了させました。 その際Google Cloud CLIを使うために新しめのPythonを用意する必要があり、出来るだけ手間を掛けずゴニョゴニョしようという記事になります。 当時、GeminiやPerplexityなどのAIツールで調査を行ってもう…
1ヶ月前

google-adk 2.2.0 更新後に /a2aが404になってAnalysis Templateが失敗する
Uzabase for Engineers
はじめに 私たちのプロダクトチームでは、AI Agentの開発にGoogle ADK (Agent Development Kit)を利用しています。 過去に開発したエージェントを段階的に成長させる形でバージョンアップを行っていますが、その過程で少しニッチなエラーに遭遇し、デプロイがブロックされる事象が発生しました。 今回は、その原因と解決策について備忘録を兼ねてまとめます。 起きた問題:アップデート後にSmoke Testが404エラーで落ちる 私たちは Argo Rollouts を利用してデプロイを行っており、AnalysisTemplate を用いたスモークテストを自動実行しています。…
1ヶ月前

Dart の等価性を完全理解する
Uzabase for Engineers
はじめに Dart で == を使ったとき、「同じ値なのに false になる」という経験はないでしょうか。 この記事を書こうと思ったきっかけは、LinkedHashMap を Equatable パッケージで等価比較しようとしたときの出来事でした。LinkedHashMap は挿入順序を保持するデータ構造なので、当然順序も含めて比較してくれるだろうと思っていたのですが、実際には順序が無視されて等しいと判定されてしまいました。なぜこうなるのかを調べていくうちに、Dart の等価性の仕組み全体に興味を持ち、さまざまなデータ構造について網羅的に検証してみることにしました。 本記事では、クラス・コレ…
1ヶ月前

エルビス演算子の落とし穴
Uzabase for Engineers
はじめに こんにちは。株式会社ユーザベース Speeda事業でソフトウェアエンジニアをしている朝比奈です。 私は現在、データフィードチームに所属しており、主な言語としてGroovyを扱っています。その際にエルビス演算子を用いてプログラムを書き、個人的な学びがあったのでブログを執筆することにしました。 エルビス演算子とは そもそもエルビス演算子ってなに?という方向けにエルビス演算子について軽く説明します。 エルビス演算子 a ?: b は、「左側の評価結果が『使える値』であればそのまま使い、そうでなければ右側の値にフォールバックする」ための演算子です。 下記はKotlinでの実装例です。 fug…
1ヶ月前

例外の正しい扱い方 そのエラー try-catchして大丈夫?
Uzabase for Engineers
はじめに 開発の中で「例外処理」を実装しなければならないタイミングは、定期的に訪れます。 しかし私は、例外をどのように扱うべきかで度々迷ってしまいます。そして、そのたびにコードを書く手を止めて悩んでいました。 思えば、エンジニアなら誰もが日常的に書いているはずの「例外処理」ですが、なぜかチームを超えて共通化されたベストプラクティスのようなものを見かける機会が少ないように感じます。 そこで今回は、自分なりに調べて辿り着いた「例外の取り扱いに関する、現時点での解」をまとめてみます。 その例外は本当に例外か 私たちが遭遇する「例外」をじっくり分解してみると、大きく2つの性質に分かれていることに気づき…
1ヶ月前

絵しりとりでチーム内外のコミュニケーションを促進させる
Uzabase for Engineers
はじめに 株式会社ユーザベース スピーダ事業 竹澤です。 みなさんは、チーム内外のコミュニケーションを増やしたいと思った経験はありませんか? オフィスに出社しているとオンラインで働いているときよりは偶発的な会話が生まれやすいです。 一方で、出社していても同じチームのメンバーなど特定の人との会話に偏りがちだと感じています。 すでに親しい人と仲良くすることも大事です。しかし、あまりコミュニケーションを取ったことがない人と話すことで、その人の得意な分野などがわかり、質問に行きやすくなります。 コミュニケーションを増やす手段として、「おやつ神社1」がよく挙げられます(お菓子神社と呼ばれることもあるよう…
1ヶ月前

ユーザベースは第40回人工知能学会全国大会にスポンサーとして参加しています!
Uzabase for Engineers
株式会社ユーザベース スピーダ事業 機械学習エンジニアの二木です。 2026年6月8日(月)〜12日(金)にGメッセ群馬で開催される、第40回人工知能学会全国大会にゴールドスポンサーとして協賛しています。 conf.ai-gakkai.or.jp JSAI2026にスポンサーブース出展 ユーザベースの取り組み(一部) 🎓 学生の方へ | インターンイベント開催! Speeda 機械学習エンジニア サマーインターン Speeda ソフトウェアエンジニア 1day インターン JSAI2026にスポンサーブース出展 ドリンクコーナー近くの121にスポンサーブースがあります。 ブースにはユーザベース…
1ヶ月前

最古参プロダクトの認証基盤リプレースに XP とレガシーコード改善で挑む
Uzabase for Engineers
はじめに どんなプロジェクトだったか? プロジェクトのゴール チーム構成 取り組んだこと 口頭によるコミュニケーションを大事にする リプレースできる条件を定義する ログインに関連するイベントを洗い出す パスワードが更新されたとき 同一人物が複数アカウントを使い分けている際のログイン体験を考慮 契約プランの変更オペレーションへの対応 一部ログイン手段の廃止 少しずつ不確実性を下げる 頻繁にリリースする 実装できていなくても想像してみる テスタビリティの高い実装にリファクタリングする Clean Architecture を意識した設計 Usecase の実装 Presenter の実装 補足 画…
1ヶ月前

Pub/SubのPushで200系を返しているのに push リクエストが500系しか来ない
Uzabase for Engineers
はじめに プロジェクトセリングチームではAIを活用したプロダクトを開発しており、その中でIR資料を生成AIで処理して活用しています。 繁忙期に向けて資料の提出が増える時期になったので、これまで日次で行っていた手作業の運用ではなく、DBの更新があった際にリアルタイムに資料を生成AIで処理する仕組み(CDC)を作る中で問題が起きたのでまとめます。 発生したこと 資料格納DBへのデータインサートをトリガーにPub/Subにメッセージを送り、サブスクリプションから要約処理を受け持つハブAPIを呼び出す構成になっていました。 ハブAPIの中では、データを処理するためにPOSTリクエストでコアとなる生成A…
2ヶ月前

組織図はTreeじゃなかった 〜データ構造をDAGに捉え直した話〜
Uzabase for Engineers
はじめに こんにちは。株式会社ユーザベース Speeda事業の伊藤、田中、都築、濱岡です。 私たちは現在、Speeda AI Agent の開発に携わっています。本記事では、その中の「組織図」を表示する機能を開発する過程で、データ構造を「Tree」から「DAG(有向非巡回グラフ)」に捉え直した話を共有します。 組織図機能について Speeda AI Agent では、企業分析を進めるためのワークフローをいくつか提供しています。その中の一つが「重要人物を特定する」というワークフローです。 このワークフローでは、対象企業の組織構造と、その中の重要人物を関連付けて把握することができます。その中で公表…
2ヶ月前

今更ながらDPO(Direct Preference Optimization)に入門してみた
Uzabase for Engineers
はじめに DPOを利用する上での前準備 選好データセットの準備 参照モデルを準備する DPOの損失関数 どういう時にDPOを使うのが良いのか? DPOの良い面 感情制御とスタイルの高い忠実度 事実に関する正確性と堅牢性 安全性と有害コンテンツの抑制 DPOの課題 冗長性を増大させる傾向がある 多様性が失われる(Diversity Collapse) 数学・コード生成における不安定性 DPOのunslothによる実装方法 まとめ 参考文献 🎓 学生の方へ | 1day インターンイベント開催! はじめに 株式会社ユーザベース スピーダ事業のMLEチームです。今回は今更ながらDPO(Direct …
2ヶ月前

Agentをどうやって早く安く良くしたか 〜プロンプトキャッシュ・State戦略〜
Uzabase for Engineers
はじめに 企業レポートの生成を行うエージェントの作成を行う中で、レポート生成にかかる時間・費用・レポートの質の改善に取り組みました。 改善点を行う中で、Stateやプロンプトキャッシュ周りのAgent Platform(旧VertexAI)の仕様について深く知ることができたので記事にしています。 改善前の状況 企業レポートの作成を行うエージェントは以下のような流れで動いていました。 成果物はレスポンスに込め、次のエージェントにコンテキストとして渡し、エージェントは与えられたコンテキストとプロンプトを元に生成を行います。 レポートの質を高めるため、「執筆」→「レビュー」→「編集」を行うエージェン…
2ヶ月前

Vertex AI のスループット上限で 429 を踏んだ話
Uzabase for Engineers
はじめに こんにちは。株式会社ユーザベースの石井です。 gemini-3-pro-image-preview の呼び出しに対して 429 Too Many Requests が返ってくる事象に遭遇しました。 問い合わせを通じてVertexAIのスループットの上限まわりの仕様の理解が深まったため記事にしております。 背景:Speeda AI Agent と「アカウントプランを作成する β版」機能 私たちが開発している 「Speeda AI Agent」のワークフローのひとつに「アカウントプランを作成する β版」という機能があります。これは、各種開示資料の要約や課題の情報をベースに、商材の提案資料…
2ヶ月前

数式はシンプルなのに、時価総額はなぜこんなに難しいのか
Uzabase for Engineers
自己株式数・発行済株式数・取引不在の現実に向き合った数ヶ月 こんにちは。株式会社ユーザベースの相川です。 この数ヶ月、自己株式数の取得・登録と、時価総額の算出ロジックに取り組んできました。 振り返ると、やっていたのは機能追加というより、市場データの複雑さを、壊れない業務ルールに翻訳する作業でした。 時価総額の式はシンプルです。 時価総額 = (発行済株式数 - 自己株式数) × 株価 ただし実務では、この3要素が同じ時間軸で揃っていることはほとんどありません。 この「式の単純さ」と「データの複雑さ」のギャップが、実装の本質的な難しさでした。 取引がない期間が、時価総額計算を難しくする 新興市場…
2ヶ月前

「インサイドセールスだから」という境界線を引かない。AIを活用した業務変革とAIに対する想い。
Uzabase for Engineers
こんにちは。ユーザベースの細田と申します。 私は2025年にユーザベースに入社して以来、インサイドセールス(IS)としてエンタープライズ企業様をはじめとしたさまざまな企業様の深耕や開拓に従事しております。 この記事では、私がISとして取り組んでいる生成AIを活用した業務変革や、私がなぜこれほどまでに生成AIに情熱を注いでいるのか、その想いについてお話しできればと思います。 AIが単なる業務効率化に留まらず、いかにして顧客への価値提供のあり方や私たちの働き方、そして生き方を変革しうるのかをご紹介できれば幸いです。 なぜ今、インサイドセールスに生成AIが必要なのか? ISという仕事は一見シンプルに…
3ヶ月前

本番稼働中のDBにNOT NULL制約かつデフォルト値のないカラムを追加する
Uzabase for Engineers
はじめに 株式会社ユーザベース スピーダ事業 竹澤です。 この記事の内容としては、本番稼働中のAPIを止めずに、APIが参照しているDBにNOT NULL制約のあるカラムを追加する1つの方法の紹介です。 私はさまざまなSPEEDAのマイクロサービスから財務値を取得できるような、コアな財務APIの開発に携わっていました。 当初の設計では変則決算を考慮していなかったのですが、開発を進めていくうちに変則決算も必要になりました。 アプリケーションの構成 まずは、ここでこの財務APIの構成を紹介します。 本記事で不要な部分に関しては、省略しています。 ユーザーがAPIを叩くと、アプリケーションは財務AP…
3ヶ月前

CursorでSalesforce Hosted MCPに接続!スクラッチ環境構築でのエラーと解消法
Uzabase for Engineers
はじめに こんにちは。株式会社ユーザベース Speeda事業の佐藤、小原、阿波連、長岡です。 *1 2026/04/14にGAされた Salesforce Hosted MCP Servers について、スクラッチ環境への接続で一部ハマりどころがありました。 本記事では、接続方法、接続トラブルの原因とその具体的な回避策について、備忘録を兼ねて共有します。 はじめに 手順 遭遇したエラーとその回避策 MCPサーバーでできること おわりに 参考文献 🎓 学生の方へ | 1day インターンイベント開催! 手順 Cursorからスクラッチ組織のMCPサーバーに接続していきます。 スクラッチ組織の作成…
3ヶ月前

外部API呼出しにおける「Too many files open」の回避とHTTPクライアントの適切な管理
Uzabase for Engineers
こんにちは。株式会社ユーザベースの相川と申します。 今回は分散システムにおいて、一見関係のない「DBエラー」が「ファイルディスクリプタの枯渇」を引き起こし、最終的にバッチ処理全体に波及したケースがあったので、その内容をお話しします。 本記事では、実際に発生した障害事例をベースに、Java/KotlinアプリケーションでHTTPクライアントを扱う際の注意点と、コネクション管理の重要性について解説します。 1. 発生した事象 マイクロサービス構成において、以下の連鎖的な障害が発生しました。 最背後のDBエラー: Service-C のDBで外部キー制約エラーが発生し、レスポンスが遅延・エラー化。 …
3ヶ月前

A2UI — エージェントがUIを"喋る"時代
Uzabase for Engineers
はじめに こんにちは。Speeda Product Teamの板倉です。 AIエージェントに「直近3年の売上推移を教えて」と聞いたとき、こんな回答が返ってきた経験はないでしょうか。 2022年の売上は120億円で、前年比+8%の成長でした。 2023年は135億円で前年比+12.5%、2024年は128億円で前年比-5.2%となっています。 2023年に大きく伸びた要因としては…(以下、長文が続く) 数字の羅列をテキストで読まされても、傾向はすぐには掴めません。これがテーブルやチャートで返ってきたら、一目で把握できるはずです。あるいは「条件を絞り込みたい」と思っても、テキストの往復で一つずつ指…
3ヶ月前

【Skew Protection】Server Actionがクライアント-サーバー間のバージョン不一致でエラーになる問題をIstioのVirtual Serviceで解決した話
Uzabase for Engineers
はじめに みなさんこんにちは、株式会社ユーザベース エキスパートプロダクト開発チームの佐藤一徹です。 私たちのチームでは、 Speedaのエキスパート事業を支えるプロダクト群を開発しており、そのうちの一つとして社員がエキスパートを管理するための社内ツールを運用しています。 本記事では、Next.jsのServer Actionにおけるversion skew問題に対して、 Kubernetes + Istioのルーティングで「クライアントと同じバージョンのサーバーにリクエストをルーティングする」仕組みを実装した話を共有します! 問題 最近、ビジネスサイドの方からこんな問い合わせがありました。 …
3ヶ月前

シン・リスコフの置換原則 〜現代風に考えるSOLIDの原則〜
Uzabase for Engineers
speakerdeck.com SOLID原則の中でも最もイメージしづらいとされるLSPですが、実は「オープン・クローズドの原則(拡張に対して開き、修正に対して閉じる)」を守る上で、オブジェクト指向において非常に重要な概念です。 1. LSPの核心は「振る舞いの契約」 LSPを一言で表すと「サブタイプ(子)はスーパータイプ(親)の振る舞いの約束を破ってはならない」という契約です。 静的型付け言語のコンパイラは「型」が合っているかは見てくれますが、「振る舞い」が守られているかまではチェックしてくれません。そのため、これはコンパイラではなく人間が意識して守るべき契約となります。 2. 陥りがちなア…
3ヶ月前

Kotlin 2.3 × Java 25 への刷新:Maven 構成の見直しで「最新 LTS」の恩恵を最大化する
Uzabase for Engineers
こんにちは。先日、プロジェクトのビルド基盤を最新の Java 25 (LTS) と Kotlin 2.3 へと一気に引き上げ、あわせて pom.xml の大掃除を行いました。 最新の言語機能を取り入れるだけでなく、マルチモジュール構成における「設定の重複」を排除したことで、保守性が格段に向上しました。その詳細を共有します。 1. なぜやったのか(背景) Java 25 という新たな LTS(長期サポート)版が登場したことを受け、プロジェクトのランタイムを最新化することを決断しました。 これまでの課題: 設定の散乱: 各モジュールの pom.xml に似たようなコンパイラ設定が重複し、変更が漏れ…
3ヶ月前