HERPエンジニアが2026年に取り組んでいる重要技術課題8選

はじめに

こんにちは、HERPで開発組織の責任者をしている佐々木 id:taketo957 です。

2025年に公開した HERPで技術責任者になってから1年半を振り返る では、組織を「守り」から「攻め」へと移してきた話を書きました。あれから半年強。HERPの技術組織は、守りを一定形にしつつ、いまは「攻めを可能にする組織能力の向上」に重心が移っています。

このフェーズの転換は、これまでで一番面白く、そして難しい局面だと感じています。「やらなきゃいけない」を片付けるフェーズから、「どこに賭けるか」を組織として一緒に考えるフェーズへの移行。その途中で見えてきた課題を、ここで一度整理しておきたい、というのが本記事の動機です。

本記事では、いま取り組んでいる重要技術課題を8つと、それらを貫く立場表明(AI時代のマニフェスト)を紹介します。スマートバンクさんの Technological Challenges 2026 を参考にしました。


本記事の構成

8つの課題は、3つのパートに分けて整理しました。

  • 【Part 1】データとAIを武器にする — AI時代における「攻め」の実装
  • 【Part 2】ドメインとプロダクトを支える設計 — その「攻め」を支える土台
  • 【Part 3】守りと攻めの両立 — 両方を持続させる仕組み

前回記事で書いた「守り→攻め」の延長線で、いまHERPがどこに賭けているか・その賭けはどんな土台の上に立っているか・両者をどう両立させていくか——という視点で並べています。


HERPがいま立っている場所

技術課題の話に入る前に、HERPがどんな立ち位置でこれらに向き合っているかを整理しておきます。

HERPはミッション「採用を変え、日本を強く。」、ビジョン「すべての採用における意思決定を、その次の挑戦を生み出すものに。」を掲げています。これらを実現するための手段として、現在、以下の2軸のアプローチで5つの事業を走らせています。

  • 採用管理SaaSとして、企業の採用業務を効率化する(HERP Hire / HERP AI Recruiter)
  • マッチングプラットフォームとして、企業と求職者をつなぐ(ジョブミル / HERP Career / 面談オファー)

そしてこの2つを横断するレイヤーとして、データ基盤を含むプラットフォームがあります。この基盤の上で、採用ドメインのデータを活用して新しい価値を生み出すことに、いま試行錯誤しています。

開発組織(PDT、約30名)の正式な構成は下図のとおりです。

HERP開発組織組織図

製品事業を担う Company 系列(HERP Hire / HERP AI Recruiter)と Matching 系列(HERP Career / ジョブミル など)、横断基盤を担う Platform 系列(開発生産性の DevPlatform、データ基盤の DataPlatform)、そして組織戦略・技術戦略を担う Engineering(他社でいう CTO 室にあたる役割)で構成されています。各章で言及する「取り組んでいる人」のチーム名は、この組織構造のいずれかに属しています(セキュリティ・コンプライアンスは Platform 系列を中心に横断的に動くファンクションです)。

そしてこれらの事業群と組織は、HERPがこれまで採用ドメインに向き合い続けてきた中で形になってきたものです。HERP Hire の累計3,000社以上の導入で蓄積されてきた採用ドメインの知識、それを実装し改善し続けてきたメンバー、すでに複数プロダクトを同時に走らせている事業ポジション——これらが土台にあるからこそ、AI時代に新しい価値を生む仕事に踏み込めるのだと感じています。

これらの交点で立ち上がる課題を、「採用を自分ごとにできる開発組織」で解きに行きます。これがHERPで働く面白さだと思っています。

『採用を自分ごとにできる』とは、エンジニアが採用ドメインを自分の仕事の核として理解し、設計し、意思決定できる状態を指します。詳しくは記事末尾のマニフェストで書きますが、これがHERPの組織像の中核にあります。本記事の8課題は、すべてこの交点から出てきたものです。


【Part 1】データとAIを武器にする

1. マッチング精度を進化させるデータ基盤を構築する

取り組んでいる人: DataPlatform、マッチング系プロダクトチーム

HERP Hire は累計3,000社以上の採用企業に導入されており、求人を中心とした、さまざまな採用アセットが蓄積されています。これらをプロダクト横断で活かし、マッチング精度につなげること。これが今期の最重要テーマのひとつです。

具体的に動いているのは、

  • プロダクト横断での、求人を中心とした採用アセットの共通化(共通アセット化)
  • マッチング系プロダクト(HERP Career / ジョブミル)で、意味ベクトル検索(pgvector + Cohere embed-v4)と BM25+ ベースの独自エンジン という異なる技術スタックでマッチングを実装中。これらのレイヤをどのように他の事業に活かすかという検討が進行中。
  • アセットを横断的に活かすための権限設計やプライバシー設計

スキーマ設計・権限設計・プライバシー設計・モデル管理が一筋に絡み合い、ひとつの設計判断が事業の上限を左右します。データに関するエンジニアリングが事業構造の設計に直結する段階に、HERPのマッチングプラットフォームはいま入りつつあります。


2. 生成AIを採用プロダクトに組み込む

取り組んでいる人: HERP AI Recruiterチーム、各プロダクトチーム

採用領域には、履歴書・職務経歴書・面接の会話ログ・評価コメントなど、従来のシステムでは構造化しづらい非構造データが大量にあります。HERPの各プロダクトでは、生成AIを使ってここに切り込んでいく取り組みが進んでいます。

中心となっているのが HERP AI Recruiter で、面接の文字起こしとAI要約、AIチャットによる対話型アシスタント、ワークフローに沿った自動処理(トリガー)など、採用業務のあちこちで生成AIが動いています。これに加えて、HERP Hire やマッチング系プロダクトでも、それぞれの業務文脈に合わせた生成AIの組み込みが個別に進行しています。

ここでは、HERP AI Recruiter で実装している技術的なチャレンジを中心に紹介します。

  • 構造化出力の型強制:LLMの出力を機械検証可能なスキーマで縛り、形式に合わないものは下流に流さない設計
  • ツール呼び出しによる工夫:候補者・面接・求人といったエンティティをLLMに直接書かせず、内部API経由で取得した実データを根拠にだけ生成させる
  • LLMは Amazon Bedrock 上の Claude を中心に、面談周辺は音声認識・ミーティングボットなど複数の外部基盤を組み合わせて実装
  • プロンプト・評価データの継続改善サイクル
  • 人のフィードバックを #1 のデータ基盤に還して、マッチング精度向上につなげる仕組みなどは模索中

LLMを用いての出力に関して、なぜその出力が正しいと言えるのかという部分には、業界全体でまだ確立途上の方法論しかないと思ってます。HERP AI Recruiter はここに、採用という説明責任の重い領域から向き合っています。


3. 開発プロセスそのものをAIで変える

取り組んでいる人: DevPlatform、全エンジニア

HERPでは、社外向けにAIプロダクトを作るだけでなく、社内の開発プロセスにもAIエージェントを組み込んでいくことを組織方針として掲げています。

狙いは、開発プロセスそのものを「改善可能な対象」として扱い、改善のフィードバックサイクルを高速に回すことです。既存のプロセスを固定の制約として受け入れるのではなく、プロセス自体を書き換えながら開発できるようにする、というスタンスです。

  • Cursor / Devin / Claude Code などのAIツールを業務に組み込み、各自が試した活用パターンを共有している
  • Linear を中心に既存事業の業務プロセスの型を整え、AIが動ける土台を作る
  • AIがコードレビューなどに参加できる仕組みを検討中
  • 今後は、開発業務に閉じないAI活用(採用オペレーション / データ分析 / 意思決定支援)へ広げていく

「社外向けAIプロダクト(HERP AI Recruiter)」と「社内向けAI運用」が連続していること、これがHERPの強みになります。社内で得た知見がプロダクトに、プロダクトの学びが社内に還ります。この循環を回していきたいです。


【Part 2】ドメインとプロダクトを支える設計

4. HRドメインの複雑性を技術で解く

取り組んでいる人: 各プロダクトチーム

採用管理システムは、外から見ると定型化された業務システムでは?と思われがちですが、実際にコードを書きはじめると、ドメインモデリングの腕がそのまま試される領域だと思います。

  • 標準業務フローが存在せず、企業ごとに選考ステップ・評価軸・オペレーションが大きく違う
  • 法的制約(個人情報保護 / 職業安定法 / 労働関連法)や景気動向といった外部要因が変わる
  • 求人票・履歴書・職務経歴書・面接ログなど、扱う情報の中心が非構造データ
  • 採用企業(人事 / 現場採用担当) / 求職者 / エージェントと、ステークホルダーが多い

加えて、採用管理SaaS(HERP Hire / HERP AI Recruiter)はN=1の候補者体験を重視するプロダクト思想で設計されてきました。一人ひとりの候補者にとって最適なフローを届けるため、データスキーマもフロー設計も柔軟性を最大化する方向で組まれています。一方、マッチング系のプロダクト(HERP Career / ジョブミル / 面談オファー)では、求職者と求人を意味的に近づけるための別軸のドメイン課題が立ち上がります。同じHRドメインでも、向き合う複雑性のかたちは段違いです。

「パターンにはまらないことがパターン」という逆説的な世界観だと思っています。ここに対して、ドメイン駆動設計と、生成AIを活用して「非構造データを構造化して扱う」アプローチを組み合わせて向き合っています。「どこを変動する点として残すか」を設計判断で決め続けるこの仕事は、ステークホルダーが多くドメインが変動し続ける採用領域のSaaSの面白さのひとつだと思っています。

そして、SaaS逆風と言われるこの時代こそ、HRドメインのように複雑性が高くAIだけでは構造化しきれない領域では、SaaSの役割はむしろ広がっていくと考えています。業務の型を提供するだけのプロダクトから、業務のなかで生まれる非構造データを構造化して資産化する基盤、そしてAI時代の意思決定を支える基盤へと変わっていきます。HERPはこの可能性を、HRドメインで形にしていきたいと思っています。


5. マルチプロダクト戦略におけるアーキテクチャ

取り組んでいる人: Platform / 各プロダクトチーム

HERP Hire / ジョブミル / HERP Career / HERP AI Recruiter / 面談オファーと、いま複数のプロダクトが同時に走っています。マルチプロダクト戦略には独特のアーキテクチャに関連する課題があります。

  • 扱うドメインがプロダクト間で一部重複している(求職者・求人は最終的にどのプロダクトでも出てくるなど)
  • 新規事業を最短で立ち上げるための共通基盤が必要(開発運用 / 認証などの共通部分など)
  • 共通化と機動力のトレードオフ

具体的には、開発運用基盤の構築・共通認証基盤検討・求人アセットの切り出し・データ基盤の構築・マッチングシステムの整備が動いています。特徴的なのが LandingZone と呼んでいる新規事業立ち上げ用の仕組みです。新サービスを始めるときに必要な AWS アカウント・Datadog・CD などの初期セットを、まとめて1パッケージで立ち上げられるようにしたもので、事業が増えていくことを見越して整備してきました。

「ガバナンスと自由度のバランス」というありふれた言葉の裏には、どのレイヤを共通化し、どのレイヤを各事業に任せるかという設計判断が無数にあります。マルチプロダクトのSaaS企業に普遍的なこの設計問題に、HERPは事業の最前線で向き合い続けています。


6. コンポーネント境界を引き直す — HERP Hireの分散モノリス解消

取り組んでいる人: HERP Hireチーム

長く運用してきたプロダクトで何度も向き合うことになるのが、コンポーネント境界の引き直しです。HERPでもこの設計仕事は複数のテーマで並走していますが、いま中心になっているのが HERP Hire の分散モノリス解消です。

HERP Hire は、長年の進化のなかでマイクロサービス的に分割されてきましたが、結果的に分散モノリスになっています。

  • 認証をはじめとする基盤コンポーネントが Haskell で書かれている
  • 複数サービス間の依存が絡み合い、独立デプロイがしづらい
  • デリバリ速度を上げるには、Haskell資産を活かしながら、複雑化したコンポーネントの境界と依存関係を引き直す必要がある

経緯と現状認識は、HERP Hireチームの reimaru が書いた以下の記事に詳しいです。

reimaru.hatenablog.com

このほかにも、散在した通知・イベントコンポーネントの整理など、同じ構造の「境界引き直し」課題が並走しています。マイクロサービスの分割粒度をめぐる「分けすぎた / 足りなかった」は、いまや業界全体の論点です。それに対して、自分たちで答えを出していく仕事が、HERP Hire ではいま動いています。

そしてこの仕事の成果は、後述する #8 の Four Keys 指標をはじめ、#1 のデータ基盤など様々な部分に効いてきます。


【Part 3】守りと攻めの両立

7. マルチテナントSaaSのセキュリティと日常的コンプライアンス運用

取り組んでいる人: Securityチーム、DevPlatform

採用情報は、究極に機微な個人情報(PII)です。HERPはこれをマルチテナントのSaaSで扱っているからこそ、セキュリティとコンプライアンスを「後から追加するもの」ではなく「設計段階から組み込むもの」として運用しています。

  • PII暗号化・保管期間ポリシーなどの日常運用の徹底
  • ISO27001 / 27017 取得済。準拠のプロセスを開発フローに組み込み年単位で改善している
  • 外部の専門ベンダーによる脆弱性診断の定期実施
  • 法務・セキュリティを開発の早い段階から巻き込む体制を模索中。とくにデータの扱いについては、機能要件・設計の段階から法務と協働する開発フローを作っていきたい

漏洩は即、事業終了レベルのリスクです。守りを開発スピードとの両立前提で実装できているかが、そのままプロダクトや会社の信頼につながると考えています。採用情報という重要なPIIを扱う事業特性のため、地味に見える運用の積み重ねが、HERPの事業継続性を支えています。

ブログに書ける範囲は限られていますが、普段の開発で実践している運用は多くあります。気になる方は、ぜひカジュアル面談で質問してください。


8. 開発生産性の可視化と、事業責任者との目線合わせ

取り組んでいる人: DevPlatform、全プロダクト開発チーム

前回記事でも触れた DORA / Four Keys の取り組みは、全事業で「数字が出せない状態」から「数字が出せる状態」までは一通り持ってこれました。次のフェーズは、出てきた数字の中身を良くしていくことです。「計測」から「意思決定への接続」へ進んでいます。

  • 全事業(HERP Hire / ジョブミル / HERP Career / HERP AI Recruiter / 面談オファー)で Four Keys(デプロイ頻度 / リードタイム / 変更失敗率 / MTTR)を可視化
  • 事業責任者と開発チームが同じ指標で議論できる文化づくり
  • 直近は HERP Hire の指標改善に集中投資(#6 のアーキテクチャ刷新で、HERP Hireの数字改善などの成果が出てきている)
  • Cursor / Devin / Claude Code などAI投資の効果を、生産性指標で確認する

HERP Hire では、DevPlatform と HERP Hireチームが連携して始めた「プロジェクト管理ツールを睨む会」を起点に、Linear でプロジェクト粒度・マイルストーン・非機能要件チェックリストを整備し、Four Keysのデプロイ頻度を1ヶ月で2倍まで伸ばしました。その経緯は azoson が以下の記事にまとめています。

ttmmjm.hatenablog.com

もうひとつ大事なのが、HERP Hireチームが日々積み重ねている技術的負債の返却が指標に効いてきていることです。プロセス改善と地道なコード改善、その両輪を回すことで実際に数字が動いています。

次は計測すること自体ではなく、計測を意思決定につなげる文化を育てていることを目指しています。


【マニフェスト】AI時代に、HERPが選ぶ立ち位置

ここまで8つの技術課題を並べてきました。最後にひとつ、課題ではなく立場表明として書いておきたいことがあります。

AIによって、コードを書く・設計する・レビューするといったエンジニアリングの基礎動作は、急速にコモディティ化していくと考えています。一定水準のアウトプットを誰でも出せる時代に、ソフトウェア企業の差別化要因はどこに残るのでしょうか。

現状のHERPなりの答えは、「ドメイン理解の深さ × 組織の自律性」です。AI時代に何で勝つのか——開発組織の責任者になってから考えてきた問いに対する、現在の答えがこれです。

採用ドメインはAIで構造化しきれないほど複雑で、企業ごとの違いも外部要因の変動も大きい領域です。ここで勝ち続けるには、採用ドメインを深く理解しているエンジニアが、自律的に意思決定し続けられる組織であり続けるしかありません。この組織像を、私たちは「採用を自分ごとにできる開発組織」と呼んでいます。

そしてこの組織像は、組織側の取り組みだけでは実現できないと考えています。エンジニアが自律的に意思決定し続けるためには、ドメイン理解を深める時間、意思決定を高速に検証できる開発環境、計測と判断を結びつける指標などの基盤——それらを可能にする技術的な土台が必要になります。だからこそ私たちは、これを「組織投資の対象であり、同時に技術投資の対象」だと捉えています。

これはHERPがAI時代に勝つための戦略上の中核だと思っています。具体的には、以下のような実装を進めています。

  • エンジニアが事業や市場・ユーザーの課題を肌で感じる機会としての採用関与(ノルマではなく、価値創出の活動として設計する)
  • エンジニアの面接で「その求人で解決したい問題を抽象化した環境や設定」をつくるなど、実際の課題に基づいた選考体験の設計
  • 自分たちの採用業務を、自分たちのプロダクト(HERP Hire / HERP AI Recruiter など)で実行する。ドッグフーディングそのものが、プロダクト品質と採用成果を両立させる仕組みになっている

技術投資と組織投資を分けて考えるのではなく、技術投資によって組織の行動様式を変えていく試みだと思ってます。AIが書けるコードの量は増え続けます。それでも残るもの——ドメインへの深い理解と、組織として自分の頭で意思決定し続ける力——を、HERPは技術で支え続けたいです。

ここまで並べた8つの技術課題は、すべてこのマニフェストにつながる実装だと思っています。


おわりに

ここで紹介した8つの課題は、それぞれ独立して見えても、根底には「採用を自分ごとにできる開発組織」という組織像があり、互いに絡み合っています。ひとつ解いて終わり、という性質のものではありません。

だからこそ、HERPで活躍するエンジニアには、コードを書く力に加えて、ドメインを設計する力、事業とつなぐ力、組織を動かす力が同時に求められます。逆にいえば、それらを総合的に伸ばしたい方にとっては、よい環境だと思っています。個人的にも、いま採用というドメインで、この組織と仕事できていることが、純粋に楽しいです。

ここまで読んでくださってありがとうございました。 8つの課題のなかで、ひとつでも「もう少し詳しく聞いてみたい」と引っかかるものがあれば、ぜひ以下のHERPのエンジニアとカジュアル面談からお気軽にご連絡ください!

herp.careers

HERPで技術責任者になってから1年半を振り返る:SREから技術組織の舵取りまで

はじめに

こんにちは、HERPのエンジニア組織責任者のid:taketo957です。

2024年3月1日に技術責任者に就任してから、早いもので1年半が経過しました。この記事では、SREから技術責任者への転身、そしてHERP技術組織の変革について振り返ります。HERPは創業から7年間、技術責任者を置かずに事業を運営してきた少し珍しい会社です。そんな環境で、身の丈を超える役割に試行錯誤してきた道のりが、誰かの参考になれば、またHERPに興味を持っていただくきっかけになれば嬉しいです。

HERP技術組織発足までの流れは、以前のインタビュー記事にまとめていただいているので、ご興味のある方はぜひご一読ください。

note.herp.co.jp

SREから技術責任者への転身:課題意識の芽生え

SREとして働く中で、技術的な方針がエンジニア主体で決まらない状況に強い課題感を抱いていました。技術的負債の蓄積や開発プロセスの非効率性が、障害の頻発やリリースまでのリードタイムの長期化といった形で顕在化し、それらを解決する意思決定がなされない組織的な課題も大きいと感じるようになりました。

エンジニア組織の課題を議論する場で経営陣も同様の課題意識を持っていることが分かり、ボトムアップの課題感とトップダウンの意思が合致したタイミングで、技術責任者への転身が決まったと記憶しています。

変革の軌跡:プロダクトの成長と共に歩んだ1年半

就任からの1年半は、プロダクトの成長と共に組織課題も変化し、それに合わせて打ち手を変えていく道のりでした。ここでは、「守り」の基盤整備から「攻め」に向けての組織能力向上へと移行していった組織のフェーズを2つに分けて振り返ります。

Phase 1: 「守りの投資」による基盤整備

就任当初のミッションは、まず既存の中核事業である「HERP Hire」が抱える技術的な課題を解決し、安定した開発体制を築くことへ向かうことでした。

最初の一歩として、エンジニアリングリソースの投入先と課題の依存関係を可視化することから着手しました。システム思考のアプローチ(社内では「課題マップ」と呼んでいました)を用いて組織全体の課題を構造化しました。その結果、技術的負債の返済や中長期的な改善といった「守りの投資」が不足していること、そして「技術選定」「技術的負債への対応」が多くの問題の根源にあることが明らかになりました。課題マップが完成し、作成に参加したメンバーそれぞれが感じていた課題感が一つの絵として繋がった時、『これなら前に進める』と、責任者として初めて確かな手応えを感じた瞬間でした。

当時の課題マップ

技術選定の原則化

当時のHERPでは、技術的なトラブルシュートや、マイナー技術の採用による車輪の再発明に多くの時間が割かれていました。そこで、各チームで振り返りを行い、技術選定の原則を定めました。

採用のしやすさやオンボーディングコストを重視し、「ユーザーの多い技術」を優先すること。そして、事業の競争力に直結しない技術への投資は控え、トラブルシューティングにリソースを奪われないようにすること。この方針に基づき、黎明期から採用していたHaskell、OCaml、Cycle.jsといった技術の新規採用を段階的に停止しました。もちろん、HERPが長年慣れ親しんだ技術をすぐに変えることには私自身の中に抵抗もありました。実際に開発にあたっているメンバーの中に埋まっている声を振り返りを通じて取り出して方向性に反映していくということを意識していたのを覚えています。

振り返りの様子

技術的負債への体系的アプローチ

技術的負債の返済を仕組み化するため、「ICU*1」という週次で一定時間を確保し、障害の再発防止や負債返済に取り組む時間を設けました。まずは週に1時間から半日程度の小さな取り組みでしたが、エンジニアが効果を実感することで、徐々に大きな動きへと繋がっていきました。

特に課題感の強かったHERP Hireチームでは、自発的にスコープを絞った課題マップが作成され、ついには四半期目標に「技術的負債の返済」が明記されるまでになりました。結果として、Cycle.jsからの撤退やマイクロサービスの統廃合が進むなど、着実な成果が生まれています。

まずは課題を徹底的に可視化し、小さな成功体験を積み重ねることが、大きな変革への信頼を醸成する第一歩となるということを学びました。

Phase 2: 「大胆な攻め」を可能にする組織能力向上

次に組織は新たな挑戦のフェーズへと移行しました。エージェント向け新規事業「ジョブミル」の立ち上げが本格化し、複数のプロダクトを開発・運営していく必要が出てきたのです。 単一プロダクトからマルチプロダクトへ。会社全体の方針もSaaS単体だけでなく求職者と企業をつなぐマッチングプラットフォームの構築へ。この変化は、組織全体に新たな課題をもたらしました。事業の拡大スピードを支える「大胆な攻め」を可能にするため、より戦略的な技術投資と組織づくりが必要になったのです。ここでは、重点的に取り組んできた課題と現在地を紹介します。

1. エンジニア採用の強化

常に課題となっていたエンジニア不足に対応するため、エンジニア自身が採用活動に積極的に関与する体制を構築しました。HRや広報と連携し、イベント企画やブログ発信を継続的に行うことで、採用成果も少しずつ出始めています。HERPエンジニアによる発信は以下にまとまっているので、ぜひご覧ください。

tech-hub.herp.co.jp

2. 開発生産性の可視化

HERP Hireの資産を活用してマッチングに参入する上で、開発の速度と安定性は重要な鍵でした。そこで、事業責任者と開発チームの目線合わせを行うため、開発生産性指標である「Four Keys」を導入しました。数ある指標の中からFour Keysを選んだのは、事業サイドにも分かりやすく、かつ技術的な健全性も示せるバランスの良さが理由です。有限のリソースを技術的な課題に充てることを考える際に、出口を意識しながら議論ができる組織を目指しています。実際に、アーキテクチャ刷新を進めたフロントエンドにおいて変更のリードタイムが短縮するなど、具体的な成果も見え始めています。導入にあたった基盤チームメンバーがこの件について記事を書いてくれているので、興味があればぜひ読んでみてください。

ttmmjm.hatenablog.com

3. 標準技術の整備と投資

TechRadarを参考に全社で利用技術を管理し、標準技術スタックを定義。それに基づいたプロジェクトテンプレートを作成しました。現在では、新規事業を迅速に立ち上げるための統合基盤の整備を進めており、事業間で学びを共有できる状態を目指しています。TypeScript中心の技術スタックという大方針のもと、ジョブミルでEffectを採用するなど、挑戦と安定のバランスを取りながら技術ポートフォリオを育てています。

4. AI活用の推進

専用の検討体制を設け、全社的にAIツールの知見を蓄積しています。現在はCursor、Devin、Claude Codeなどを中心に各チームで活用方法を試し、その知見をPlaybookとして集約しています。今後は開発業務に留まらないAI活用も模索していきたいと考えています。この辺りの話はまた別の機会で発信できたらと考えています。

5. フルサイクル開発の推進

デリゲーションポーカーなどを通じて権限に対する期待を明確化し、開発チームが自律的に開発を進められるよう、権限移譲を進めました。またテストやQAなどの自動化基盤を整備することで、開発の各フェーズにチームが主体的に関われる体制を整えています。

権限移譲に関するワークショップ

6. EM制度の導入と組織構造の変化

人事制度の導入に合わせ、EM(エンジニアリングマネージャー)を設置し、組織に明確な構造が導入されました。これにより、コミュニケーションパスの複雑さによる意思決定の遅延といった課題は一定解消されたように思います。一方で、事業方針に寄り添う安定した意思決定が増えた結果、大胆な攻めの技術的な意思決定がされずらくなり「良くも悪くも丸くなった」という声も聞かれます。この変化は新たな課題であると捉えています。

今後の展望:HERPを取り巻く現状とこれからの挑戦

現在HERPは、中核事業である「HERP Hire」をプラットフォーム展開の基盤と捉え直し、そこから得られる求人などのデータを活用してマッチング事業へと展開していく大きな転換期にあります。

この戦略を実現するため、技術組織としては、

  1. データの活用を最大化するアーキテクチャの設計

  2. 求職者向け(toC)サービスで成功するための開発文化の醸成

この2つが大きなテーマとなります。HERPはマーケットインでの堅実なものづくりが得意だと思っていますが、今後はよりプロダクトアウト的な発想で市場に驚きを与えられるような組織へと進化していく必要があります。その第一歩として、エンジニアがより積極的に採用プロセスに関わり、事業やユーザーへの理解を深める仕組みを強化していきたいです。

私自身の変化と学び

事業視点の獲得

この1年半で最も大きな変化は、自分に「事業視点」が備わり始めたことだと思います(十分だとは感じていません)。当初はSREとしての経験などから、いわゆる守りを重視した施策ばかりを考えていたなと振り返っています。

転機となったのは、社内勉強会「戦略筋トレ塾」です。特に課題図書であった『ストーリーとしての競争戦略』から、競合や市場環境を意識した戦略、そしてそれを支える「組織能力」という概念を学びました。エンジニア組織を単なる開発部隊ではなく、事業戦略を実現するための「組織能力」として捉える視点は、私にとって大きな発見でした。

トレードオフの面白さ

限られたリソースの中で何を選び、何を捨てるか。このトレードオフの連続に、難しさと同時に面白さを感じるようになりました。これは趣味である登山のパッキングに似ています。快適さを求めて装備を重くするか、速さを求めて軽量化するか。事業や組織における意思決定も、まさにこの選択の連続だと感じています。

おわりに

技術責任者として駆け抜けた1年半。技術的負債への対応に始まり、開発生産性の可視化、AI活用、そして組織能力の向上まで、多岐にわたる変化にエンジニア組織で取り組んできました。

まだまだ課題は山積みですが、事業に貢献できる技術組織としての土台は着実に整いつつあると感じています。今後も、技術と事業の両輪で価値を創造できる組織を目指し、改善を続けていきたいです。

最後に、HERPは今、まさに変革の面白いフェーズにあります。少しでも興味を持っていただけたら、ぜひ一度お話ししましょう!

  • Hireの資産を活かすアーキテクチャに興味がある方
  • データを活用したマッチングに挑戦したい方
  • TypeScript中心の技術スタックを育てていきたい方
  • 新規事業の立ち上げに情熱を燃やせる方
  • 組織全体の開発生産性向上をリードしたい方
  • 採用業界を生成AIで変革したい

このような仲間を心からお待ちしています!

herp.careers


この記事が、技術組織の変革に取り組む方々の参考になれば幸いです。ご質問やご意見がございましたら、ぜひお聞かせください。

*1:集中治療室から名前を取りました、障害再発防止策を集中して実施するイメージからきてます

aws-cdkを用いた開発事例の紹介

これははてなエンジニアAdvent Calendar 201812月7日の記事です。

昨日はid:susisuさんの「分割」できる疑似乱数生成器でした。

こんにちは。はてなでSREとして働いているid:taketo957です。

現在、所属しているチームにてAWSのプロビジョニングを行う際に、aws-cdkを試験的に利用しています。

本記事では、aws-cdkについて簡単に紹介し、はてなで実際にどのように利用しているかを紹介します。

はじめに

aws-cdkについて簡単に説明します。aws-cdkは、2018年8月に開発者プレビューとして紹介されました。これによると、

AWS CDK はソフトウェア開発のフレームワークであり、クラウドのインフラストラクチャをコードで定義して CloudFormation でプロビジョニングできます。CDK は AWS のサービスと統合され、高レベルかつオブジェクト指向の抽象概念を使ってAWS リソースを定義できます。

とあります。aws-cdkを用いることによって、CloudFormationによるAWSのリソース定義を、ある程度のベストプラクティスが内包された高レベルなライブラリ群によって扱うことができるようになります。

2018年12月の執筆時点での対応言語は、TypeScript、JavaScript、.NET、Javaとなっており、今後はPythonのサポートが予定されているみたいです。 (https://github.com/awslabs/jsii によるとRubyも期待できそう?)

aws-cdkの構造

aws-cdkの構造を理解するには、以下の図がわかりやすいです。(下記のIssueより引用)

github.com

f:id:taketo957:20181206230900p:plain
CDKのアーキテクチャ

  • L2: aws-cdk内でConstruct Libraryとして提供されている部分で、デフォルト設定やベストプラクティスなどが内包されたライブラリ群です。
  • L1: aws-cdk内でcloudformation libraryとして提供されている部分で、CloudFormationのリソース定義から自動生成されているようです。

これらを利用して定義したものを、AWS CDK Toolkitを通じて、CloudFormationのtemplateに変換したり、stackをdeployしたり、deployされたstackとの差分を確認したりできます。

はてなでの利用例

aws-cdkについて簡単に説明したところで、実際にはてなにおいてどのように利用しているかの一例を紹介します。

はてなでは、開発中のbranchを展開し、それを外部から参照できるようにする開発環境のことをdevhostと読んでいます。 具体的には、{branchname}.test.comようなドメインで外部からそのbranchのアプリケーションを参照できる環境です。

今回は、ECSを用いてdevhostの仕組みを構築しました。 このECSを用いたdevhostをaws-cdkを用いて構築した事例を紹介します。

今回のECSを用いたdevhostの要件としては以下のようなものがありました。

  • branchごとに外部から参照できる環境を容易に作成したり、削除できたりできること
  • 上述の環境を管理できるUI(構成図の下部に構成だけ載せていますが今回の記事では触れません)

devhostの仕組みを実現するための、全体の構成は以下のような感じです。

f:id:taketo957:20181207114428p:plain
devhost構成図

リクエストを受ける部分(図上部)は非常に単純です。 Route53を用いて開発用のドメインのHostedZoneとRecordSetを管理し、ALBを用いてbranchごとの環境を展開したECSのServiceに振り分けています。

以下がaws-cdkを用いた具体的な例です。

gist.github.com

上記の両方の要件を満たすためのポイントは、branch名に応じて動的に作成する部分(上記の例では EcsServiceStack )を独立したstack定義として切り出すことです。(かなり省略していたり、簡単のための単一のファイルにまとめたりしていますが雰囲気だけでも伝われば幸いです)

タスク定義に用いるコンテナのimageにはあらかじめ、branch名に対応するtagを付与してあります。 また、ALBではHostヘッダによるtargetの振り分けを行っています。このホスト名はbranch名から生成していますが、あらかじめbranch名をURLで用いることができる形に正規化しておいてあげる必要があります。ListenerにTargetGroupを追加する際に、ListenerのRuleのPriorityの値が被らないように制御してあげる必要がある点もポイントの一つです。

肝心のbranch名に関しては、aws-cdkのcontextという機能を用いて実行時に受け渡しています。

Passing in External Values to Your AWS CDK App — AWS Cloud Development Kit

これまでの定義を用いて、例えば以下のコマンドを実行することで hoge.example.com というドメインから、 hoge ブランチの内容を確認できる環境を立ち上げたりしています。

$ cdk synth EcsService -c 'devhost:branchname=hoge'
$ cdk deploy EcsService -c 'devhost:branchname=hoge'

終わりに

今回は開発者プレビュー版のaws-cdkを用いて実際に開発環境を構築した事例を紹介させていただきました。

aws-cdkを用いることでアプリケーションエンジニアにも構成管理を積極的に行ってもらえるようになったりと、チーム内でポジティブな変化を日々感じています。

一方で、開発者プレビュー段階であることは事実で日常的にbreaking changeと付き合っていく覚悟は必要になってきます。 実際に所属しているチームでは、日常的にaws-cdkに対してPRを送るなどしてコミットしたりしています。

とはいえ、プログラミング言語を通じてAWSのリソース管理を行うことで、CloudFormationを素で利用するよりも柔軟にリソース管理を行うことができると感じています。(例えば、aws-cdk自体もnodeのアプリケーションであるので、Lambdaで動かして何かを行うといったことも可能だと思います)

これからどんどんコミュニティが活性化してくといいですね!

はてなエンジニアAdvent Calendar 2018、明日はid:wtatsuruさんです!

10ms以下のレスポンスタイムを支える継続的負荷テスト

この記事は、はてなエンジニアアドベントカレンダー2016の12月18日の記事です。

はてなエンジニアアドベントカレンダー2016を始めます - Hatena Developer Blog

昨日はid:ikesyoさんの「オープンソース活動への取り組み方」でした。

オープンソース活動への取り組み方 - Hatena Developer Blog

こんにちは。はてなでWebオペレーションエンジニアとして働いているid:taketo957です。
2016年の4月に新卒として入社してからは、社内の仮想化基盤のリソース最適化に取り組んでみたり、

speakerdeck.com

社内の広告配信システムの刷新プロジェクトに関わってきました。

speakerdeck.com

本記事では広告配信システムの刷新を行う中で取り組んだ負荷試験環境を構築する際に考えたことと「継続的にパフォーマンス改善を行うためにはどうすれば良いか」という問題意識の元で取り組んでいることを紹介します。

はじめに

はてなにおける広告配信システムとは何かについて簡単に説明します。 はてなブックマークなどのサービスにはPRタグが付与された広告枠が複数存在しています。 これら複数の広告枠のどこに、どの広告を、いつからいつまで掲載するかを管理し、それらに基づいて適切に配信を行うのがはてなにおける広告配信システムです。

広告配信システムに求められるもの

広告配信システムに対する要求には、以下のようなものが存在します。

  • 高可用性…広告配信は何があっても止めてはいけない。はてなブックマークなどサービスのPV数に比例するリクエストを受けても落ちないようにする。

  • 低レイテンシ…ユーザ体験を維持するために広告表示部分で時間をとってはならない。広告要求リクエストに対して、高速でレスポンスを返却する必要がある。

  • 配信結果の保存…ユーザに広告が表示された、ユーザに広告がクリックされたといった情報の根拠になるログは欠損してはならない。

本記事では、上記3つの要求のうち「低レイテンシ」を実現するために行った取り組みと、それを継続的に行うために取り組んでいることについて紹介します。

低レイテンシを実現するために

低レイテンシを実現するためには、広告配信を行うアプリケーションサーバの性能を最大限に引き出す必要があります。
アプリケーションサーバの性能を最大限に引き出す…」
短絡的ですが、ここから新卒の私は「要するにISUCONできる環境をつくれば良いのか」という結論に至りました。

ISUCONができる環境を言語化すると、以下のものが必要になります。

  • 配信システムに負荷をかけられるもの
  • 負荷をかけた結果をチームの全員で確認できるもの

これらを実現するために、負荷試験ツールのgatlingを用いました。 「広告を表示してからクリックする」などユーザの行動を柔軟に記述できるものである点、ScalaベースのDSLでシナリオを記述することができ、 固有の設定ファイルの記述方法を覚えなくて良くて開発チームにScalaを書ける人がいたという点、負荷試験の実行結果を詳細なHTMLレポートで出力してくれる点という3点からgatlingを選択しました。

負荷試験環境

負荷試験を行うにあたって、本番環境と同等のstaging環境、gatling用のサーバを準備しました。 また、gatlingは負荷試験を実行した結果をHTMLとして吐き出してくれるので、Nginxを通して結果を閲覧できるようにしました。 以下の図で全体のアーキテクチャと併せて今回の環境を示しています。

f:id:taketo957:20161218180108p:plain

負荷試験のシナリオについて

実際の負荷試験において検証したパターンの一部を以下で紹介します。

  • ユーザの行動
    • 配信OKの広告を表示、広告をクリックしない
    • 配信OKの広告を表示、広告クリックする
    • 配信NGの広告に対して表示要求
  • アクセス数のパターン(上記ユーザの行動に対して定義)
    • ピークタイムに耐えられることを確認するために、現状の広告配信システムのピーク値を再現、短い時間実行
    • 長期的に動作した際に異常が発生しないことを確認するために、現状の広告配信システムの平均的な値を再現、長時間実行
    • 配信サーバ1台あたりの限界値を見極めるために、負荷を徐々に増加させていく

上記の環境とシナリオを用いて、負荷試験を行い、アプリケーションプロファイラを用いつつアプリケーションエンジニアとボトルネック改善を行っていきました。
改善内容の概要については、はてなのサーバ/インフラを支える技術〜2016年新卒編〜 / OSC Tokyo 2016 Fall // Speaker Deckで紹介しています。 印象的だったものの一つに、DBへの都度接続を行っていたのですがシステムコールやアプリケーションプロファイラから、この部分のコストが馬鹿にならないことが判明したために常時接続方式に変更したというものがあります。
DBへの接続方式に関しては、Webシステムにおけるデータベース接続アーキテクチャ概論 - ゆううきブログ が詳しいです。

結果

入念に負荷試験を行った結果、現状本番環境において99%ile 10ms以内での応答を実現しており、非常に安定して稼働しています。

開発チーム内でパフォーマンス改善を意識し続けるために

これまで、リリース前に取り組んだことを紹介してきました。 アプリケーションには継続的に変更が加わり続けるわけですが、そのような状況でもパフォーマンスを維持し続け、 パフォーマンスに影響する変更を本番に投入する前に検知するにはどうすれば良いのでしょうか。 先程も述べたように、広告配信は絶対に止めたくないので、デプロイしてからロールバックという選択肢は基本的にはありません。 一般的に言われていることですが、パフォーマンス改善は計測することから始まります。 この計測のプロセスを継続的に自動で行う仕組みがあれば良いと考え、CIのプロセスに負荷試験を取り込むということに取り組んでいます。

概要を以下の図に示します。

f:id:taketo957:20161218193345p:plain

イデアとしては非常に単純で、Jenkinsでビルドとテストが成功した場合にstaging環境へデプロイし、 その後で負荷試験用のシナリオをgatlingサーバにデプロイして負荷試験を実行し、実行結果画面のURLをSlackを通じて開発メンバーに通知するというものです。

負荷試験をCIに組み込むために

負荷試験をCIプロセスに取り込む際に考えられる障壁には以下のようなものが考えられます。

  • エンドポイントの一覧が必要になる

    今回取り組んだ広告配信システムの特性の一つに、一般的なWebアプリケーションと比較してエンドポイントが少ないという特性がありました。 一般的なWebアプリケーションに取り込むことを考える場合には、エンドポイントの一覧を自動で生成するといった仕組みや、重い処理を行う部分に絞って負荷試験を行うというような回避策が考えられます。 現状取り組んでいる中での工夫点として、アプリケーションの変更に追従してエンドポイントの一覧を更新するという作業をしたくないので、 アプリケーション側で「データ生成とそれに対応するエンドポイントを返却するエンドポイント」を実装してもらい、 gatlingのJSON feeders という機能を使ってこの部分の自動化を試みています。

  • シナリオ記述のためのユーザの行動パターンの列挙

    上記に関連しますが、エンドポイントの数が少ないために予想されるリクエストのパターンが非常に少ないという特性も存在しました。 そのため、予想されるリクエストのパターンを列挙し、シナリオを記述するということが可能になっているのだと思います。
    また、負荷試験をCIに組み込むためにはアプリケーションの変化に追従して負荷試験用のシナリオもメンテナンスしていく必要があります。 今回の広告配信システムにおいては、上述の通り「広告を表示してからクリックする」というようなレスポンスに基づいて次のリクエストを組み立てるということを実現したかったのでgatlingを選択しました。 その為シナリオを記述するという作業が発生してしまいますが、単純にエンドポイントを一覧するだけで負荷試験を実施できるvegetaなど他にも様々な負荷試験ツールが存在するので、 Webアプリケーションに合わせて負荷試験ツールを選択することも重要です。

おわりに

はてなの広告配信サーバの性能を維持し続けるために、負荷試験を行いそれを継続的に行うための取り組みについて紹介しました。 負荷試験をリリースサイクルに組み込むことで、最新版のソースコードを本番環境のトラフィックにさらしても大丈夫かというテストが自動的にできることに非常に魅力を感じました。 不安を抱えながら祈るようにデプロイするのではなく、これなら大丈夫と安心してデプロイできるような環境を作っていきたいですね。

今回は仕組みの面にフォーカスして紹介させていただきましたが、またの機会に実際にどのようにしてチューニングをしていったかについても触れていきたいですね!

明日のアドベントカレンダーid:masayoshiです!

株式会社はてなに入社しました

こんにちは、id:taketo957です。

2016年4月より株式会社はてなでWebオペレーションエンジニアとして働くことになりました。

自分は2014年の12月から同じ部署でアルバイトをしていました。元々大学の研究や趣味でアプリケーションを書いてはいたのですが、インターンなどを通じてもっと下のレイヤーについて知りたくなったので応募したのがきっかけです。アルバイト採用直後にいきなり「ISUCONの過去問をやって」と言われて面食らったのは今となってはいい思い出です。

同期が優秀で、しかもパワフルな方が多いので切磋琢磨しながらも負けないように頑張っていきたいと思います。

入社するにあたって当面の目標として、

  • 先輩社員のようにどんどんアウトプットできるようになる
  • 応用的な内容にとどまらずその基礎となることも一緒に身につける

の2点を特に意識していこうと思います。

はてなには、日々自己研鑽を欠かさない方が多いだけでなく、本当に良いものを良いと言い合える素晴らしい雰囲気が漂っていると思います。また、良い意味で変わった方が非常に多いと思います。自分はそんな空気が大好きではてなで働くことを決めました。技術的にはまだまだ未熟ですが、しっかりとWebサービスを支えられるように力をつけていきたいと思っています。

これからもよろしくお願いいたします。