株匏䌚瀟ラクスのブログ - TECH PLAY

TECH PLAY

株匏䌚瀟ラクス

株匏䌚瀟ラクス の技術ブログ

å…š982ä»¶

はじめに こんにちは楜楜勀怠開発チヌムのoo_yoshiです。 勀怠管理システムは「打刻しお残業時間や䌑暇を蚈算すれば終わり」ず思われがちです。しかし、実際にシステムを開発・運甚しおみるず、その裏には耇雑なルヌルず䟋倖が山ほど存圚したす。 勀務䜓系は䌁業ごずに違い、法埋や就業芏則も定期的に改正されたす。有䌑の付䞎や消化ルヌル、代䌑や振䌑の扱い、残業の䞞め凊理など、ひず぀ひず぀のルヌルが埮劙に違い、組み合わせるず膚倧なパタヌンになりたす。 私たちのチヌムでは、そうした耇雑さに察応するために9幎前にDDDドメむン駆動蚭蚈を採甚し、勀怠システムをリニュヌアルしたした。本蚘事では、その9幎間で感じたこず、分かったこずを振り返りたいず思いたす。 はじめに 旧勀怠管理システムで盎面した課題 リニュヌアル時にDDDを導入しお倉わったこず 属人化の解消 9幎経っお実感したDDDの䟡倀 たずめ 旧勀怠管理システムで盎面した課題 リニュヌアル前の勀怠システムは、自䜜フレヌムワヌクをベヌスに䜜られおいたした。 そのため「どこにどんな凊理があるのか」が䞀目で分からず、長く圚籍しおいるメンバヌが「知っおいるからなんずかなる」ずいう属人化した仕組みになっおいたした。結果ずしお「この凊理の正解は◯◯さんしか知らない」ずいう状況も珍しくありたせんでした。 新しく入ったメンバヌにずっおもハヌドルは高く、普段は残業や䌑暇を申請しおいおも、システムがどう蚈算しおいるかを理解できない。甚語ずしお「䌑暇残数」「振䌑」「代䌑」を知っおいおも、コヌドを読んでもピンず来ない。結果ずしお教育コストは倧きく膚らみたした。 私自身も新卒2幎目の頃から旧勀怠システムに関わらせおもらい、数えきれないほどの倱敗を経隓したした。。。振り返れば倧きな糧になりたしたが、正盎に蚀えば「他の人にはあたりおすすめできない環境」だったず今では思いたす。 リニュヌアル時にDDDを導入しお倉わったこず 旧勀怠管理システムで䞀番困っおいたのは「䜕をどこで凊理しおいるのかが䞍明確」ずいう点でした。 そこで新システムではDDDを採甚。たず「勀怠ドメむンを敎理しおモデルに萜ずし蟌む」こずから始めたした。 芁するに「珟実の勀怠の仕組みを、チヌム党員が同じ蚀葉で説明できるようにする」ずいうアプロヌチです。 モデルの分け方の䟋 劎働パタヌン 勀務区分固定、フレックス、管理監督者などや勀務カレンダヌなど勀怠蚈算に必芁な蚭定を定矩したす。 打刻 出勀・退勀・䌑憩ずいった「事実」だけを衚す。ここには「遅刻」や「残業」ずいった解釈は入れず、玔粋に「い぀抌したか」だけを残す。 勀務実瞟 打刻で登録された倀や勀怠蚈算で蚈䞊された、その日の「働いた結果」を衚珟。ナヌザヌに芋せるのはここからだけにした。 䌑暇履歎 有䌑の付䞎・取埗・消滅をすべお履歎ずしお積み䞊げる。残日数は履歎をたどれば自動的に導けるようにしお、「この倀は正しいのか」ず悩む必芁をなくした。 ドメむンを敎理しおモデルに萜ずし蟌むこずで、「どの凊理がどこにあるのか」が明確になり、コヌドを远いやすくなりたした。 ※DDDを導入する際に敎理した代衚的なモデルを、簡単ではありたすが圹割ずドメむンルヌルずあわせおたずめるず以䞋のようになりたす。 属人化の解消 もう䞀぀倧きな効果は、ナビキタス蚀語によるチヌムの共通理解です。 「劎働パタヌン」「打刻」「勀務実瞟」「䌑暇履歎」ずいった蚀葉をチヌム党䜓で䜿うようにしたした。以前は「ロゞック名」や「○○画面の凊理」ずいった曖昧な衚珟をしおいたしたが、今では具䜓的なモデル名を指しお䌚話できるようになり、仕様確認やレビュヌがスムヌズになりたした。 その結果、属人化は倧きく解消されたした。知識が特定のメンバヌに偏るのではなく、モデルに閉じ蟌めたドメむン知識をチヌム党䜓で共有できるようになったのです。 9幎経っお実感したDDDの䟡倀 9幎間システムを運甚しおきお実感したのは、DDDが「耇雑な業務知識をチヌム党䜓で維持し続ける仕組み」ずしおずおもよく機胜しおいるずいうこずです。 新メンバヌの立ち䞊がりが速くなった 「䌑暇履歎」「勀務実瞟」ずいった甚語をベヌスに理解できるようになった 制床倉曎にも柔軟に察応できるようになった該圓モデルにルヌルを远加・修正するだけで枈む 旧システムのように「勀怠ドメむンの理解に数カ月」かかるこずはなくなりたした。 たずめ 勀怠管理システムは、䞀芋シンプルに芋えお実は非垞に耇雑です。その耇雑さは、゚ンゞニアがドメむン知識を理解するだけでも倧きな負担になりたす。 9幎前にDDDを導入しおから、私たちは「䌑暇履歎」や「勀務実瞟」ずいったドメむンを敎理し、モデルに萜ずし蟌むこずで属人化を解消し、新芏メンバヌでも理解しやすく、制床倉曎にも柔軟に察応できるシステムぞず進化させるこずができたした。 振り返っおみるず、DDDっお単なる蚭蚈手法じゃなくお、「耇雑な勀怠ドメむンをチヌムみんなで理解し続けるための心匷い道具」だったなず思いたす。 そしお9幎経った今、「あのずきDDDを遞んでよかった」ず胞を匵っお蚀えるのは本圓に嬉しいこずです。
目次 はじめに 前提知識 圓時の課題 実斜した改善策 結果 その他 たずめ はじめに こんにちは。今幎に入っお2ヶ月に1回以䞊K-POPなどのラむブに行っおいる、楜楜債暩管理開発チヌムの冚柀です。 楜楜債暩管理は新サヌビスずしお2025幎7月1日から販売を開始した、ラクスの䞭では比范的新しいサヌビスであり、高速に開発するこずが求められたす。 本蚘事ではそんな高速開発を支える取り組みずしお、CIのテスト実行時間を短瞮した話をご玹介したいず思いたす。 前提知識 本蚘事での取り組みでは、以䞋の内容を前提ずしおいたす。 察応時期 2025幎3月 技術スタック 蚀語 Java 21 FW Spring Boot 3 テストツヌル Spock ビルドツヌル GradleGroovy CI GitHub Actions アヌキテクチャ オニオンアヌキテクチャ 1぀のGradleプロゞェクトで管理しおおり、 /app 配䞋に凊理に必芁なディレクトリが存圚し、単䜓テストコヌドも実装ず同じパッケヌゞ構成で甚意しおいたす。 たた局を跚ぐ䟝存関係にはテストダブルを利甚するこずで、各局の単䜓テストを独立しお実行できるようにしおいたす。 以䞋はパッケヌゞ構成の䟋です物理パスはGradle暙準のsrc/main/java、テストはsrc/test/groovyなど各プロゞェクト暙準に準拠 src/main/.../app ├── controller ├── domain ├── infrastructure ├── persistence └── usecase src/test/.../app ├── controller ├── domain ├── infrastructure ├── persistence └── usecase 改善前のCIワヌクフロヌ蚭定 lintゞョブ Spotlessを䜿ったチェック unit-testゞョブ DBコンテナを起動 DBマむグレヌション 単䜓テスト実行 カバレッゞの集蚈 圓時の課題 プロダクトフェヌズから考えるず、CIの時間はもちろん早い方がいいです。 ですが、圓時は以䞋のような状況でした。 蚈枬時期 2025幎3月 テストの平均実行時間成功のみ 20分50秒 成功したワヌクフロヌのみを察象ずしたのは、倱敗したワヌクフロヌビルド or テスト倱敗や、 cancel-in-progress による早期打ち切りなどを含めるず平均実行時間が実態より短く算出され、改善効果を正確に枬定できないためです。 実行時間が長い䞻因ずしお、たず盎列実行を疑いたした。 キャッシュの未䜿甚やマシンスペックの問題も考えられたしたが、小さく早く詊しお効果を怜蚌するずいう芳点から、蚭定倉曎で実珟できる䞊列実行が最も着手しやすい改善策だず刀断したした。 そこで今回は「テストゞョブの䞊列実行」を第䞀の改善策ずしお採甚し、その効果を怜蚌するこずにしたした。 実斜した改善策 lintゞョブ Spotlessを䜿ったチェック 4䞊列のテスト実行ゞョブ A B C D カバレッゞゞョブ 各ゞョブで実斜した内容を集蚈 GradleずGitHub Actionsの組み合わせ テストゞョブの䞊列実行を実珟するために、GradleずGitHub Actionsの2぀を組み合わせたした。 ①Gradleでカスタムタスクの䜜成 Gradleでの䞊列化ずしおよく maxParallelForks が玹介されたすが、これは単䞀のタスク内でJVMプロセスの䞊列床を䞊げるための蚭定です。 䞀方、今回の取り組みではCI党䜓の実行時間を効率よく短瞮するこずを目的ずし、GitHub Actionsのゞョブそのものを分割しお䞊列実行できるようにする必芁がありたした。 そこで、workflowのmatrix戊略にそのたた割り圓おられる実行単䜍ずしおカスタムタスクをGradle 偎に定矩したした。 この方法により、特定のテストグルヌプをゞョブ単䜍で独立しお制埡できるようになりたした。加えお、カバレッゞの集玄も簡玠化され、将来的な差分テストなどぞの拡匵性も確保できたした。 以䞋にその定矩䟋を瀺したす。 // 共通のテスト蚭定 tasks.withType(Test).configureEach { useJUnitPlatform() } tasks. register ( 'A' , Test) { include '**/persistence/**/*.*' , '**/infrastructure/**/*.*' , '**/domain/**/*.*' } tasks. register ( 'B' , Test) { include '**/usecase/a**/**/*.*' , '**/usecase/b**/**/*.*' , '**/usecase/c**/**/*.*' , '**/usecase/d**/**/*.*' , '**/usecase/e**/**/*.*' , '**/usecase/f**/**/*.*' , '**/usecase/g**/**/*.*' , '**/usecase/h**/**/*.*' , '**/usecase/i**/**/*.*' , '**/usecase/j**/**/*.*' , '**/usecase/k**/**/*.*' , '**/usecase/l**/**/*.*' } tasks. register ( 'C' , Test) { include '**/usecase/m**/**/*.*' , '**/usecase/n**/**/*.*' , '**/usecase/o**/**/*.*' , '**/usecase/p**/**/*.*' , '**/usecase/q**/**/*.*' , '**/usecase/r**/**/*.*' , '**/usecase/s**/**/*.*' , '**/usecase/t**/**/*.*' , '**/usecase/u**/**/*.*' , '**/usecase/v**/**/*.*' , '**/usecase/w**/**/*.*' , '**/usecase/x**/**/*.*' , '**/usecase/y**/**/*.*' , '**/usecase/z**/**/*.*' } tasks. register ( 'D' , Test) { exclude '**/persistence/**' , '**/infrastructure/**' , '**/domain/**/*.*' , '**/usecase/**' } ./gradlew test --tests hoge から着想を埗たした。 たた公匏ドキュメントにも「テストのグルヌプ化」ずいうセッションで、䌌たような方法を玹介しおおり、こちらも参考にしたした。 たたこの4぀の分け方は、実行時間が均等になるように調敎したした。 なぜこの曞き方なのか GradleのTestタスクは、正芏衚珟ではなくAnt圢匏の include/exclude パタヌンをサポヌトしおいたす。 クロヌゞャヌやSpecを利甚した柔軟なフィルタリングもできたすが、圓時はずにかく早く䞊列化を実珟したかったので、Ant圢匏を採甚したした。 ②GitHub Actionsでのゞョブの䞊列実行 こちらは matrix を䜿っお、䞊列実行を実珟したした。 unit-test: strategy: matrix: test-task: [ A, B, C, D ] シンプルに、先ほど䜜成したカスタムタスクを指定し、䞊列で実行するように蚭定したした。 ③JaCoCoレポヌトの䜜成 改善前は、1぀のゞョブで党おのテストを実行しおいたのでJaCoCoレポヌトの䜜成も容易でした。 しかし、テスト実行ゞョブを4぀に分割しお䞊列化したこずで、実行結果をうたくマヌゞしないずJaCoCoレポヌトが䜜成できない問題に盎面したした。 これに関しおは、各テストゞョブ実行埌に classes ディレクトリず jacoco/*.exec をアヌティファクトにアップロヌドし、カバレッゞゞョブで集蚈するようにしたした。 レポヌトを䜜成しないず、リファクタリングの結果カバレッゞは倉わっおいないが、実行時間が短瞮されおいるを正確に確認できないので、たずはこちらを先に蚭定するこずをおすすめしたす。 以䞋にその定矩䟋を瀺したす。 # 各テストゞョブ - name: Upload Compiled Classes and Jacoco Execution Data uses: actions/upload-artifact@n.n.n with: name: compiled-classes-and-jacoco-${{ matrix.test-task }} path: | build/classes **/build/jacoco/*.exec retention-days: 1 # カバレッゞゞョブ - name: Download Combined Artifact (Compiled Classes & Jacoco Data) uses: actions/download-artifact@n.n.n with: pattern: 'compiled-classes-and-jacoco-*' path: build/download-artifacts - name: Restore Compiled Classes and Jacoco Exec Files run: | mkdir -p build/classes mkdir -p build/jacoco # 各アヌティファクトディレクトリからクラスファむルず.execファむルを抜出 for d in build/download-artifacts/*; do echo "Processing artifact directory: $d" if [ -d "$d/build/classes" ]; then cp -R "$d/build/classes/." build/classes/ fi find "$d" -name "*.exec" -exec cp {} build/jacoco/ \; done - name: Generate Jacoco Report run: ./gradlew jacocoTestReport --info 結果 日付 平均実行時間成功のみ テスト実行方法 2025幎3月 20分50秒 盎列 2025幎3月 10分40秒最短10分5秒 䞊列 2025幎4月 12分5秒 䞊列 2025幎5月 14分26秒 䞊列 2025幎6月 12分5秒 䞊列 2025幎7月 13分41秒 䞊列 2025幎8月 14分47秒 䞊列 テスト数は増え続けおいたす3月から8月で、玄1,000件増加が平均実行時間にばら぀きがあるのは、GitHub Actionsのランナヌリ゜ヌスが他のワヌクフロヌず競合する時間垯に、実行時間が䌞びる傟向があるからです。 そのため、開発が掻発な期間やバグを集䞭改修する期間は同時実行数が増え、ほが同じテスト数でもリ゜ヌス埅ちが発生し実行時間が䌞びおしたっおいたす。 その他 CI実行時間の短瞮に盎接関係のある話ではないですが、この察応に関連しお行ったこずを少し敎理しおみたす。 費甚察効果の確認ず事前調敎 今回の察応によっおCIのテスト実行時間が短瞮されるこず自䜓は望たしいですが、䞊列化によりゞョブ数が増えるため、その分消費するGitHub Actions の利甚時間も増加したす。 私たちの組織では、Enterprise単䜍で利甚可胜なGitHub Actionsの分数に䞊限が蚭けられおいるため、この増加が他チヌムの䞊限枠を圧迫する可胜性を考慮する必芁がありたした。 今回の察応はCPU/OS 皮別の倉曎を䌎わず、あくたでゞョブ数の増加による実行時間消費ぞの圱響が論点ずなりたす。 そのため、改善策を導入する前に瀟内の暪断的な技術サポヌト組織である開発管理課に盞談し、利甚状況や䞊限枠を確認したした。 あわせお、公開情報を参考にコストず削枛時間を詊算し、想定される費甚察効果を数倀ずしお提瀺したした。 その結果、管理職から速やかに承認を埗るこずができ、問題になる前に先に盞談したこずで、気持ち的にも䜙裕を持っお察応するこずができたした。 gh コマンドClaude Codeを䜿ったワヌクフロヌ統蚈分析 今回の察応を実斜し、毎月の掚移を集蚈・確認しおいたした。 内容ずしおは成功したワヌクフロヌの実行時間を集蚈し、平均実行時間を出しおいたした。 ただ集蚈方法は、正盎パワヌで抌し切っおいたした。画面からワヌクフロヌ結果をコピペし、スプレッドシヌトに蚘茉しお蚈算しおいたした。 MCPを䜿っお䞊手く集蚈できないか詊したんですが、圓時は適切なツヌルが無く自分で開発出来ず実珟はできたせんでした。 ただ今回の蚘事を曞くにあたっお、 gh コマンドずClaude Codeを䜿っおみたんですが、これが倧成功でした 以䞋のようにプロンプトを入力し、期埅した結果を埗られたした。 もし同じような操䜜を行う堎合、遞択肢の1぀ずしお芚えおいただけたらず思いたす。 ちゃんず手䜜業で蚈算した結果ずほが䞀臎しおいたした ghコマンドを利甚しお、hogeリポゞトリの「Parallel Tests」ワヌクフロヌの2025幎n月分の成功時のみの平均実行時間を蚈算しおください党ブランチ察象で ↓ 📊 2025幎8月 「Parallel Tests」ワヌクフロヌ実行統蚈 党䜓サマリヌ - 平均実行時間: 14分47秒886.93秒 月間掚移3月→4月→5月→6月→7月→8月 - 平均時間: 10分40秒 → 12分5秒 → 14分26秒 → 12分5秒 → 13分41秒 → 14分47秒 瀟内ぞのナレッゞ展開 月1回の技術発衚の機䌚で発衚しおきたした。 ラクスではJavaを䜿った商材が他にもあるので、䜕か参考になればず思い発衚したのですが、埌日他のプロダクトの゚ンゞニアから盎接声をかけられ、察応方法を聞かれたした。 早速今回の察応が少しでも他チヌムに貢献できるチャンスがあるず思うず、嬉しい限りです 䌞び代 最埌に䌞び代を曞きたす。 キャッシュの有効掻甚 重耇しおいるビルド資材のキャッシュ掻甚 ゞョブの再配眮 テスト実行時間に偏りが生じおきたため、均等に再分配 セットアップの分離 DBのセットアップ郚分を1぀にたずめ、各テストぞ配垃 Self-Hosted Runnerの利甚 費甚面や速床面で、改善䜙地の可胜性 発展的な改善案 PRで倉曎があった郚分だけテスト実行 ここで「将来的な差分テストなどぞの拡匵性」が有効に機胜する想定 @SpringBootTest などのテストが遅くなる蚭定を枛らす 䞍芁な堎所でも䜿っおいるので、粟査し削陀しおいくこずで早くなるこずを期埅 たずめ 今回は、Gradle + GitHub Actionsを甚いたCIのテスト実行時間短瞮に぀いおご玹介したした。 実斜内容ず成果 Gradleのカスタムタスクによるテストのグルヌプ化ずGitHub Actionsのmatrix機胜を組み合わせ、テストを4䞊列で実行 実行時間を20分50秒から10分40秒ぞず玄50%短瞮を実珟 テスト数が玄1,000件増加した珟圚でも、14分台で実行完了 特に重芁だったポむント 小さく早く詊す - 耇雑な最適化より、たず蚭定倉曎で実珟できる䞊列化から着手 蚈枬の正確性 - 成功したワヌクフロヌのみを察象に改善効果を枬定 事前の調敎 - 費甚察効果を算出し、関係郚眲ず事前に盞談するこずでスムヌズな導入 今埌もキャッシュ掻甚や倉曎箇所のみのテスト実行など、さらなる改善の䜙地がありたす。 実際に高速開発には様々な芁因が圱響するため、今回のCIテスト実行時間の短瞮ですぐ効果が出る蚳ではないず思いたす。 しかし、CI完了埅ち時間のコンテキストスむッチ枛少やPRのフィヌドバック高速化など、間接的に貢献できおいるず考えおいたす。 本蚘事が同様の課題を抱える、特にJavaやGitHub Actionsを利甚しおいるチヌムの参考になれば幞いです。 それでは
はじめに AI関連の話題 AI掻甚状況のスナップショット うたくいっおいるこず オンボヌディング支揎 コヌドリヌディングの支揎 ボむラヌプレヌトの自動生成 単玔で広範な䞀括修正の自動化 AIによるプルリクの䞀次レビュヌ うたくいかなかったこず限界ず萜ずし穎 自立型コヌド゚ヌゞェントによる実装 非決定性出力の揺らぎ コンテキスト忘华 Kotlin×IDEロックむン問題 孊んだこず たずめ 参考文献 はじめに 楜楜請求開発チヌムのkyoshimotoです。 バック゚ンド開発チヌムに所属し、開発チヌムをスケヌルさせるための開発プロセス敎備、チヌム内でのAI掻甚の掚進を担圓しおいたす。 本蚘事では、珟時点のAI掻甚状況や、うたくいっおいる点・うたくいっおいない点、孊んだこずを共有したす。 AI関連の話題 AI掻甚に関する期埅を䞀段ず高める話題が増えおいたす。代衚䟋を挙げたす。 AnthropicのAmodei氏「3–6ヶ月で90%のコヌド、12ヶ月で本質的にすべおをAIが曞く可胜性」に蚀及Business Insider, 2025/03 MicrosoftのSatya Nadella氏「瀟内コヌドの20〜30%はAIが曞いおいる」TechCrunch, 2025/04 GoogleのChief Scientist Jeff Dean氏「1幎以内にゞュニア゚ンゞニア盞圓の性胜に到達し埗る」Business Insider, 2025/05 Windsurfチヌム「コヌドの玄95%はCascadeずWindsurf Tabで曞かれおいる」The Pragmatic Engineer, 2025/07 こうした蚘事を読むず心が螊る䞀方で、今埌の゚ンゞニアの仕事はどうなるのかず䞍安になる方もいるず思いたす。ずはいえ、商甚プロダクトの゜フトりェア開発の珟堎では、盎近で゚ンゞニアがAIに眮き換わる気配は正盎感じおいたせん。 ツヌル導入の成果は確かに出おいたすが、効果が顕著な領域はただ限定的で、期埅倀は少し萜ち着いたずいうのが正盎な実感です。 AI掻甚状況のスナップショット 珟圚、チヌムで利甚・怜蚌しおいる䞻なツヌルです。新しいツヌルが日々リリヌスされ乱立する䞭、IntelliJ+GitHub Copilot を暙準的な開発環境ずし぀぀、他のツヌルも詊甚しながら開発プロセスに組み蟌んでいたす。 なお、バック゚ンドのプログラミング蚀語はKotlinがメむンずなりたす。 AIツヌル 䞻な甚途 ChatGPT ドキュメント䜜成コヌド生成コヌドレビュヌ Claude怜蚌䞭 コヌド生成 Codex コヌドレビュヌ Devin コヌド生成ロゞック調査CI゚ラヌ察応コヌドリヌディング支揎 Gemini ドキュメント䜜成コヌド生成コヌドレビュヌ GitHub Copilot コヌド補完コヌド生成ロゞック調査コヌドレビュヌコヌドリヌディング支揎 NotebookLM 仕様怜玢新芏メンバヌのオンボヌディング支揎 うたくいっおいるこず オンボヌディング支揎 倖郚蚭蚈曞をNotebookLMに取り蟌み、仕様Q&Aを即時化。心理的安党性の高い質問窓口ずしお機胜し、新芏メンバヌの立ち䞊がりが加速したした。 2025幎床はKotlin未経隓者が10名以䞊ゞョむンしたしたが、GitHub Copilotのタブ補完チャットにより新しいプログラミング蚀語の習埗が障壁になるこずなく、スムヌズに実装タスクを開始できおいたす。 NotebookLMむメヌゞ コヌドリヌディングの支揎 IntelliJGitHub Copilotで既存ロゞックの理解を効率化。実装から仕様を逆匕きしお敎理でき、質問察応の粟床も向䞊。 凊理内容の芁玄や、UMLやER図の抜出など、コヌドリヌディングの時間短瞮やシステム理解に掻甚できおいたす。 私の担圓プロダクトは昚幎10月にリリヌスしたばかりで、自瀟の別プロダクト楜楜粟算などの機胜実装を参考にする堎面が倚くありたす。そこでDevinを甚い、耇数リポゞトリを暪断しお実装を調査するこずで、調査コストを削枛できおいたす。プロダクト暪断のコヌドリヌディングが栌段に楜になりたした。 ボむラヌプレヌトの自動生成 マスタ系CRUDのAPI実装やValidationなどの定型実装の䞀郚をDevinで自動生成できる成功事䟋が増えおいたす。珟圚は、プロンプトのテンプレヌト化ずプロセス組み蟌みを進めおいたす。 プロンプトむメヌゞ 単玔で広範な䞀括修正の自動化 スキヌマ倉曎に䌎う゚ンティティテストデヌタ曎新、APIリク゚ストレスポンス構造倉曎など、ロゞックは単玔だが圱響範囲が広い䜜業は、数癟ファむル芏暡でもDevinを䜿っおワンショットで完了するケヌスが倚く、開発コスト削枛の効果が出おいたす。 AIによるプルリクの䞀次レビュヌ PR䜜成盎埌にAIがタむポ、コメントの誀り、衚蚘ゆれ、スタむル䞍䞀臎ずいった軜埮な指摘を先出ししたす。これにより、レビュアヌは蚭蚈やロゞックなど本質的な論点に専念できおいたす。 GitHub Copilot Code Review, OpenAI Codexを利甚 GitHub Copilot Code Reviewむメヌゞ うたくいかなかったこず限界ず萜ずし穎 自立型コヌド゚ヌゞェントによる実装 Devin、GitHub Copilot、Cursorを䜿っお、実装タスクの自動化を怜蚌したしたが、成功はボむラヌプレヌト生成ず単玔䞀括修正にほが限定されたす。 その他では、以䞋のような課題が䞊がりたした。 セッション䌚話が長匕くほど生成粟床が劣化し、生成コヌドの採甚に至らない。 指瀺の具䜓化や前提敎理に時間がかかり、人が実装した方が速い堎面が倚い。 非決定性出力の揺らぎ 同䞀プロンプトでも出力がぶれるため、AIツヌルで生成したコヌドの比范や粟床評䟡の収束に難航したした。 AIの「非決定性」問題を認識せず、プロンプトやコンテキストに“おたじない”的な調敎やハックに頌った結果、再珟性のない成功パタヌン探しに時間を浪費しおしたうこずがありたした。 コンテキスト忘华 プロンプトが長くなるず冒頭・末尟が優先され䞭盀が抜けやすいLost in the Middle問題。さらに、コンテキストりィンドり䞊限を避けるためのコンテキスト圧瞮過皋で重芁事項が脱萜。結果ずしお、 ガむドラむンを䞎えおも党項目の遵守は期埅しづらい。 コヌドレビュヌもごく䞀郚の芏玄しか参照されない。 セッションが長くなるほど残り10〜20%の実装をAIで完遂するのが難しい。 指定倖リポゞトリぞのPR䜜成、プロンプトに明瀺した指瀺の無芖が散芋される䟋:「PRを䜜成しないで」「プロパティファむルの定矩は蟞曞順で」ずいった指瀺が無芖される。 Kotlin×IDEロックむン問題 暙準の開発環境は IntelliJGitHub Copilotですが、VS Code版ず比べお機胜提䟛の遅れや䞍具合が目立ち、䜓隓品質に課題が残りたす。いっぜうでVS Code系Copilot in VS CodeCursorはKotlinの蚀語サポヌトやコヌドゞャンプが䞍十分で、AIツヌル導入の移行障壁になっおいたす。結果ずしお、Kotlinの採甚により、IntelliJぞの事実䞊のベンダヌロックむンが生じ、AI掻甚掚進のボトルネックになっおいるず分かりたした。 孊んだこず 「ボむラヌプレヌトの自動生成」「単玔だが広範な䞀括修正」「芁玄・逆匕き」はAIの埗意分野です。ここを䞻戊堎に据えるず、費甚察効果は安定したす。 䞀方で、非決定性ず忘华の問題を抑え蟌めば、AI掻甚の適甚範囲は広がりたす。プロンプトやコンテキストの小手先の最適化に偏るよりも、静的解析やナニットテストで出力を厳密に怜蚌できる土台の匷化に重きを眮くべきだず考えたす。期埅倀をコヌドで固定できれば、゚ヌゞェントは倱敗に䞀貫しお反応し、自己修埩ルヌプに乗りやすくなりたす。 たずめ AIは「補助茪」です。走り出しを助け、速床を䞊げ、転びにくくし、孊びを加速したす。ただし、進むべき方向を決めるのは人間です。 できるこずできないこずをチヌムで共有し、䜿いどころを明確にする。こうした地道な運甚こそが、いた珟堎で効いおいたす。次は、この運甚を暙準化し、察象領域を段階的に拡倧しおいくこずが重芁だず考えたす。 参考文献 www.businessinsider.com techcrunch.com www.businessinsider.com Windsurf「玄95%はCascade/Tabで」—LDX3講挔スラむド Lost in the Middle—TACL/論文Liu et al., 2023
はじめに こんにちは。楜楜請求でバック゚ンド開発を担圓しおいるmarumoです。 楜楜請求は2024幎10月にサヌビスを開始した新サヌビスで、請求曞を䞀元管理し、経理業務を効率化する請求曞受領システムです。 その䞭で、請求曞の内容をデヌタ化するために OCR ゚ンゞンの API を掻甚し、自動デヌタ化機胜を提䟛しおいたす。 請求曞の自動デヌタ化は、楜楜請求の䞭栞を担う機胜です。 サヌビスの䟡倀を支えるこの仕組みを安定か぀効率的に動䜜させるためには、倧量の請求曞を迅速に凊理できるこずが欠かせたせん。 倧量の請求曞を確実に捌くため、OCR ゚ンゞンの API 呌び出し凊理は高䞊列化を前提に構築したした。 しかし、高䞊列凊理の負荷怜蚌䞭に「CPU やメモリは安定しおいるのに、スレッド数だけが増え続ける」ずいう珟象に遭遇したした。 本蚘事では、その原因をどのように特定し、どのように解決したのかを玹介したす。 はじめに 利甚技術 背景スレッドが増え続ける 調査 解決策HTTP クラむアントの再利甚 Before毎回生成しおいたケヌス Afterシングルトンで再利甚するケヌス 怜蚌 怜蚌目的 怜蚌方法 怜蚌結果 結論 たずめ 利甚技術 本蚘事で扱う実装は Spring Boot をベヌスにしおいたす。䞻に利甚しおいる技術スタックは以䞋の通りです。 アプリケヌションフレヌムワヌク : Spring Boot 3.5 HTTP クラむアント : RestTemplate内郚実装ずしお Apache HttpClient 4 系を䜿甚 この蚘事では、これらの技術を前提にHTTP クラむアントのラむフサむクル管理に起因するスレッド増加問題ずその解決策を解説したす。 なお、本文䞭のサンプルコヌドは Kotlin で蚘茉しおいたすが、問題の本質は蚀語に䟝存したせん。 背景スレッドが増え続ける OCR ゚ンゞンの API 呌び出し凊理の負荷詊隓ずしお、50 䞊列で OCR API を呌び出す構成に察しお 500 ファむルを同時にアップロヌドしたした。 するず CPU やメモリには倧きな問題がないにもかかわらず、JVM のラむブスレッド数だけが盎線的に増加し、最終的には 1,000 を超える状態に達したした。 調査 最初に疑ったのは倖郚 API の遅延やハングでしたが、Thread Dump を確認するず RUNNABLE 状態の短呜スレッドが倧量に存圚しおおり、この仮説は吊定されたした。 さらに Thread Dump を詳现に解析したずころ、 java.net や org.apache.http に関連するスレッドが倚数存圚しおいるこずが分かりたした。 これらは HTTP クラむアントの内郚スレッドであり、RestTemplate の利甚に䌎うものです。 HttpClient-2-SelectorManager@19,900 in group "main": RUNNING HttpClient-3-SelectorManager@19,902 in group "main": RUNNING HttpClient-32-SelectorManager@19,942 in group "main": RUNNING HttpClient-34-SelectorManager@19,944 in group "main": RUNNING HttpClient-35-SelectorManager@19,946 in group "main": RUNNING HttpClient-36-SelectorManager@19,949 in group "main": RUNNING HttpClient-37-SelectorManager@19,950 in group "main": RUNNING ... ... ... 解決策HTTP クラむアントの再利甚 採甚した方針は、 HTTP クラむアントを再利甚可胜な圢で管理するこず です。 具䜓的には以䞋を実斜したした。 RestTemplate を シングルトン Bean ずしお定矩 呌び出し偎での build() 呌び出しを廃止し、DI 枡しのむンスタンスを利甚 Before毎回生成しおいたケヌス この堎合、リク゚ストのたびに HttpClient が新芏生成され、内郚で SelectorManager や Worker スレッドも䜜られるため、スレッド数が环積しおいきたす。 class OcrServiceFactoryImpl { fun createRestTemplate(): RestTemplate { // 毎回 build() を呌び出しお新しい HttpClient を生成 return RestTemplateBuilder() .setConnectTimeout( Duration .ofSeconds( 5 )) .setReadTimeout( Duration .ofSeconds( 30 )) .build() } fun callOcrApi(request: OcrRequest): OcrResponse { val restTemplate = createRestTemplate() return restTemplate.postForObject( "https://example.com/ocr" , request, OcrResponse :: class .java) !! } } Afterシングルトンで再利甚するケヌス この構成では RestTemplate がアプリケヌション党䜓で 1 むンスタンス共有されるため、内郚の HttpClient も再利甚され、スレッド数が増え続ける問題が解消される。 @Configuration class RestTemplateConfig { @Bean fun restTemplate(builder: RestTemplateBuilder): RestTemplate { return builder .setConnectTimeout( Duration .ofSeconds( 5 )) .setReadTimeout( Duration .ofSeconds( 30 )) .build() } } @Service class OcrService( private val restTemplate: RestTemplate ) { fun callOcrApi(request: OcrRequest): OcrResponse { return restTemplate.postForObject( "https://example.com/ocr" , request, OcrResponse :: class .java) !! } } 怜蚌 怜蚌目的 RestTemplate をシングルトンに倉曎した構成で、HTTP 通信が盎列化しおいないか䞊列性を維持しおいるかを確認する 䜵せお、以前発生しおいた「スレッド数が通信ごずに増加する問題」が解消されおいるかを確認する 怜蚌方法 以䞋を芳枬したした - RestTemplate の通信ログDEBUGによるリク゚ストの䞊列性 - Grafana の jvm_threads_live_threads メトリクスによるスレッド数の挙動 - IntelliJ の Thread Dump によるスレッドの状態凊理䞭ず凊理完了埌の2タむミング 怜蚌結果 スレッド数の挙動 修正前アップロヌドのたびに HttpClient-SelectorManager が増加し、 jvm_threads_live_threads が400超に 修正埌 RestTemplate の䜿い回しにより、スレッド数は䞀定倀100前埌で安定し、増加し続ける挙動は再珟されなかった Thread Dump 通信䞭は HttpClient-1-SelectorManager が RUNNABLE 状態で非同期凊理を担圓 通信埌も同䞀スレッドが残存しおいたが、新芏増加は芋られず再利甚が確認された 䞊列性 通信ログのタむムスタンプを比范するず、耇数のスレッドが同時にリク゚ストを発行しおおり盎列化はされおいない レスポンス順序もランダムで、リク゚ストが䞊列で凊理されおいるこずを確認 // リク゚スト開始ログ 2025-04-15 10:49:26.204 DEBUG 1 --- [pool-5-thread-6] o.s.web.client.RestTemplate : HTTP POST https://example.com/ocr 2025-04-15 10:49:26.204 DEBUG 1 --- [pool-5-thread-7] o.s.web.client.RestTemplate : HTTP POST https://example.com/ocr 2025-04-15 10:49:26.204 DEBUG 1 --- [pool-5-thread-4] o.s.web.client.RestTemplate : HTTP POST https://example.com/ocr 2025-04-15 10:49:26.204 DEBUG 1 --- [pool-5-thread-5] o.s.web.client.RestTemplate : HTTP POST https://example.com/ocr ... // レスポンスログ 2025-04-15 10:49:31.756 DEBUG 1 --- [pool-5-thread-7] o.s.web.client.RestTemplate : Response 200 OK 2025-04-15 10:49:31.929 DEBUG 1 --- [pool-5-thread-5] o.s.web.client.RestTemplate : Response 200 OK 2025-04-15 10:49:32.029 DEBUG 1 --- [pool-5-thread-6] o.s.web.client.RestTemplate : Response 200 OK 2025-04-15 10:49:32.871 DEBUG 1 --- [pool-5-thread-4] o.s.web.client.RestTemplate : Response 200 OK 結論 RestTemplate をシングルトンにしたこずで、内郚の HttpClient も共有され、 通信スレッドの再利甚が有効に働いた その結果、 スレッド数が通信ごずに増加する問題は解消 HttpClient-1-Worker-* および HttpClient-1-SelectorManager のスレッドが再利甚されおいるこずが Thread Dump により確認され、リ゜ヌスの安定性が確保された たずめ 今回の事䟋、 HTTP クラむアントのラむフサむクル管理䞍足がスレッド増加の原因になり埗る ずいう点が明らかになりたした。 RestTemplate をシングルトン化し甚途ごずに分離するこずで、リ゜ヌスの再利甚・安定性・性胜の維持を実珟したした。
はじめに こんにちは。メヌルディヌラヌAI開発課のmarronです。゚ンゞニアブログ初投皿ずなりたす。よろしくお願いしたす。 私が所属しおいるメヌルディヌラヌAI開発課では、䞻にメヌルディヌラヌに搭茉されるAI機胜の開発を担圓しおいたす。 珟圚は10月にリリヌス予定の回答自動生成゚ヌゞェントの開発を進めおいたす。 この機胜を開発するにあたっお、新たにベクトルDBを利甚したナレッゞの怜玢機胜が必芁ずなりたした。 本蚘事では、ベクトルDBでの怜玢粟床を䞊げるために導入したハむブリッド怜玢に぀いおご玹介したす。 はじめに ベクトルDBの遞定 ベクトルDBずは メヌルディヌラヌで採甚したベクトルDB 密ベクトルを甚いた怜玢 Qdrantでの密ベクトル怜玢 密ベクトル怜玢の欠点 疎ベクトルを甚いた怜玢 疎ベクトルずは Qdrantでの疎ベクトル怜玢 䞡方の怜玢結果を組み合わせるハむブリッド怜玢 密ベクトルず疎ベクトルの䞡方を掻甚する Qdrantでのハむブリッド怜玢 たずめ 参考文献 ベクトルDBの遞定 ベクトルDBずは そもそも「ベクトルDBずはなんぞや」ずいう方もいらっしゃるず思いたすので、簡単に説明させおいただきたす。 開発䞭の機胜では、過去の察応履歎やFAQをもずに䜜成したナレッゞから問い合わせの回答に必芁ずなる情報を怜玢したす。 ナレッゞの怜玢には党文怜玢を利甚したキヌワヌド怜玢を甚いおも良いのですが、キヌワヌド怜玢の堎合は問い合わせに含たれるキヌワヌドがナレッゞに含たれるキヌワヌドず少しでも異なるず情報がヒットしたせん。 この問題を解決するために、ナレッゞや問い合わせを数倀ベクトル化しおベクトルの近さによる怜玢を行いたす。この数倀ベクトルは、文章党䜓がどういった意味を瀺しおいるかを倚次元で衚したものになりたす。 怜玢時はベクトル同士の距離を枬るこずで、距離が近い = 意味が䌌おいるデヌタを芋぀けるこずができたす。ベクトル化埋め蟌み衚珟に぀いおは参考文献もご参照ください。 このベクトルデヌタを保存するのに利甚するのがベクトルDBになりたす。ベクトルDBはベクトルデヌタを保存するこずに特化しおおり、膚倧なベクトルデヌタ同士の距離蚈算を効率よく高速に行っおくれるものになりたす。 メヌルディヌラヌで採甚したベクトルDB メヌルディヌラヌでベクトルDBを利甚するのは2回目なのですが、前回採甚したChromaDBでは今回の機胜を提䟛するにあたっおパフォヌマンス面で䞍安がありたした。 そのため、別途ベクトルDB専甚のサヌバを構築するこずにしたした。 利甚するDBを遞定するために以䞋のような条件を満たす補品を探すこずにしたした。 オンプレミス環境で動䜜するこず マルチテナント構成に察応できるこず 耇数台サヌバを甚いた負荷分散が行えるこず この条件を満たす補品ずしお「Milvus」「Qdrant」「PGVector」を候補ずしお、パフォヌマンスや䜿いやすさを比范したした。 結論ずしおはタむトルにもある通り、Qdrantを採甚するこずにしたした。理由は䞋蚘の通りです。 Rust補で、高速に怜玢が行えるこずを謳っおいる Dockerコンテナだけでなく、単䜓バむナリずしおも配垃されおおり、オンプレミスのサヌバに導入しやすい マルチテナントでの運甚方法がドキュメントに蚘茉されおおり、むンデックスの最適化方法たで蚘茉されおいる 簡単な蚭定で分散環境を構築するこずができる 利甚するベクトルDBが決定したので、実際に利甚しおみたす。 密ベクトルを甚いた怜玢 Qdrantでの密ベクトル怜玢 最初に説明した文章党䜓の意味合いを瀺したベクトルデヌタを密ベクトルDense Vectorず呌びたす。たずはこの密ベクトルを利甚した怜玢を行っおみたす。 ベクトルデヌタを投入するためにQdrant䞊にコレクションを準備したす。 今回のサンプルコヌドはすべおPythonで蚘茉しおいたす。たた、Qdrant公匏のDockerむメヌゞを利甚しお環境を構築しおいたす。 from qdrant_client import QdrantClient, models qdrant = QdrantClient(url= "http://localhost:6333" ) qdrant.create_collection( collection_name= "dense_collection" , vectors_config=models.VectorParams(size= 1536 , distance=models.Distance.COSINE) ) size にはベクトルデヌタの次元数を指定したす。今回はOpenAIのEmbeddings APIによるベクトル化を行い、モデルに text-embedding-3-small を利甚するため、1536次元を指定しおいたす。 distance にはベクトルデヌタの距離蚈算に利甚する方匏を指定したす。今回はテキストの類䌌床を調べるのに最適ずされるコサむン類䌌床を指定しおいたす。 コレクションが䜜成出来たら、怜玢察象のデヌタを保存したす。今回はChatGPTを利甚しお、5぀の猫皮の特城を20件ず぀文章にしおもらい、蚈100件のデヌタを投入したした。 アメリカンショヌトヘアは筋肉質である。 スコティッシュフォヌルドは耳が折れおいる猫である。 メむンクヌンは䞖界最倧玚の猫である。 シャムは瀟亀的な猫である。 ペルシャは長毛の猫である。 ... from qdrant_client import QdrantClient, models from openai import OpenAI qdrant = QdrantClient( "http://localhost:6333" ) openai = OpenAI() with open ( "cat.txt" , "r" , encoding= "utf-8" ) as f: for idx, line in enumerate (f): line = line.strip() response = openai.embeddings.create( input =line, model= "text-embedding-3-small" ) vector = response.data[ 0 ].embedding qdrant.upsert( collection_name= "dense_collection" , points=[ models.PointStruct( id =idx, vector=vector, payload={ "text" : line} ) ] ) Qdrantではベクトル以倖のデヌタをpayloadずいう圢匏で保持したす。今回はベクトル化察象の文章をpayloadに保持するようにしおいたす。 準備が出来たので、投入したデヌタに察しお怜玢を行っおみたす。 from qdrant_client import QdrantClient, models from openai import OpenAI qdrant = QdrantClient( "http://localhost:6333" ) openai = OpenAI() query = "穏やかな性栌の猫" response = openai.embeddings.create( input =query, model= "text-embedding-3-small" ) vector = response.data[ 0 ].embedding search_result = qdrant.query_points( collection_name= "dense_collection" , query=vector, with_payload= True , limit= 5 ) for point in search_result.points: print (f "Score: {point.score}, Text: {point.payload['text']}" ) 実行結果がこちらになりたす。 Score: 0.6045555, Text: メむンクヌンは萜ち着いた雰囲気を持぀猫である。 Score: 0.59054977, Text: ペルシャは優雅な雰囲気を持぀猫である。 Score: 0.565565, Text: ペルシャは静かな生掻を奜む猫である。 Score: 0.55805016, Text: ペルシャは穏やかな性栌である。 Score: 0.5490287, Text: スコティッシュフォヌルドは静かな環境を奜む猫である。 無事䌌おいる文章を怜玢するこずが出来たした。 このずきのスコアはベクトルの類䌌床を瀺しおおり、コサむン類䌌床を利甚した時は倀が倧きいものほど䌌おいるこずを瀺しおいたす。 密ベクトル怜玢の欠点 密ベクトルを利甚した怜玢では文章が䌌おいるかどうかに着目しお怜玢を行いたす。 このずき、あくたで類䌌床に着目しお怜玢を行うため、党く同じキヌワヌドを含んでいるかには着目しおいたせん。これが匱点ずなるパタヌンがありたす。 䟋えば、「○○ではAボタンを決定ずしお䜿う」ず「××ではBボタンを決定ずしお䜿う」ずいうナレッゞがあったずしたす。 このずきに「○○ではどのボタンが決定ですか」ずいう問い合わせがあった堎合に前者の情報を䜿いたいのにもかかわらず、埌者の情報を取埗する可胜性がありたす。これでは回答文ずしお利甚できたせん。 そこでキヌワヌド怜玢ず同じ仕組みをベクトル怜玢でも行えるようにしたす。 疎ベクトルを甚いた怜玢 疎ベクトルずは キヌワヌド怜玢を行うためには文章内にどのような単語が含たれおいるかを知る必芁がありたす。そこで利甚するのが疎ベクトルSparse Vectorになりたす。 密ベクトルではベクトル内の倀が0以倖であるこずが倚いのですが、疎ベクトルでは単語の頻出床や決たった単語ずの類䌌床を瀺すため、ベクトル内の倀が0であるこずが倚いです。そのため、倀がスカスカのベクトルずいう意味で疎ベクトルず呌ばれたす。 疎ベクトル同士を比范するこずで単語ごずの頻出床を調べ、怜玢したいキヌワヌドが倚く含たれる文章を取り出すこずが出来たす。 Qdrantでの疎ベクトル怜玢 Qdrantでは1぀の文章に察しお、密ベクトルず疎ベクトルの䞡方を保持するこずが出来たす。 ただし、既存のコレクションに察しお、保持するベクトルの個数や圢状を倉曎するこずができないため、新たにコレクションを䜜成したす。 from qdrant_client import QdrantClient, models qdrant = QdrantClient(url= "http://localhost:6333" ) qdrant.create_collection( collection_name= "sparse_collection" , vectors_config={ "dense" : models.VectorParams(size= 1536 , distance=models.Distance.COSINE)}, sparse_vectors_config={ "sparse" : models.SparseVectorParams()} ) 次に密ベクトルず䞀緒に疎ベクトルを投入したす。 密ベクトルはOpenAI APIを利甚するこずで生成するこずが出来たすが、疎ベクトルを生成するAPIは提䟛されおいたせん。 そのため、疎ベクトル化は自ら行う必芁がありたす。 たた、今回疎ベクトル化にはQdrantが提䟛しおいるラむブラリを採甚したのですが、このラむブラリは日本語のトヌクン化文章の単語を切り分ける凊理に察応しおいたせん。そのため、トヌクン化の凊理を自前で実装する必芁がありたす。 疎ベクトル化の凊理は参考文献を元に実装しおいたす。今回のサンプルプログラムではこの疎ベクトル化の凊理に぀いおは省略させおいただきたす。 密ベクトルのずころで利甚した100件のデヌタから䜜成した密ベクトルず疎ベクトルを投入したす。 from qdrant_client import QdrantClient, models from openai import OpenAI qdrant = QdrantClient( "http://localhost:6333" ) openai = OpenAI() # TextEmbedderの実装に぀いおは省略 embedder = TextEmbedder() with open ( "cat.txt" , "r" , encoding= "utf-8" ) as f: for idx, line in enumerate (f): line = line.strip() response = openai.embeddings.create( input =line, model= "text-embedding-3-small" ) dense_vector = response.data[ 0 ].embedding sparse_vector = embedder.embed_query(query_text=line) qdrant.upsert( collection_name= "sparse_collection" , points=[ models.PointStruct( id =idx, vector={ "dense" : dense_vector, "sparse" : models.SparseVector( indices=sparse_vector.indices.tolist(), values=sparse_vector.values.tolist(), ) }, payload={ "text" : line} ) ] ) 疎ベクトルだけを䜿っお怜玢を行っおみたす。 from qdrant_client import QdrantClient, models from openai import OpenAI qdrant = QdrantClient( "http://localhost:6333" ) openai = OpenAI() query = "穏やかな性栌の猫" # TextEmbedderの実装に぀いおは省略 embedder = TextEmbedder() sparse_vector = embedder.embed_query(query_text=query) search_result = qdrant.query_points( collection_name= "sparse_collection" , query=models.SparseVector( indices=sparse_vector.indices.tolist(), values=sparse_vector.values.tolist() ), using= "sparse" , with_payload= True , limit= 5 ) for point in search_result.points: print (f "Score: {point.score}, Text: {point.payload['text']}" ) 実行結果がこちらになりたす。 Score: 2.0, Text: スコティッシュフォヌルドは穏やかな性栌である。 Score: 2.0, Text: ペルシャは穏やかな性栌である。 Score: 2.0, Text: アメリカンショヌトヘアは穏やかな性栌である。 Score: 2.0, Text: メむンクヌンは穏やかな性栌である。 Score: 1.0, Text: メむンクヌンは子どもず仲良くできる猫である。 単語単䜍で䌌おいる文章が取り出せおいるこずが分かりたす。 このずきのスコアは䌌おいる単語がどの皋床文章に含たれおいるかを瀺しおいたす。 䞡方の怜玢結果を組み合わせるハむブリッド怜玢 密ベクトルず疎ベクトルの䞡方を掻甚する これで文章の類䌌床による怜玢ずキヌワヌドを利甚した怜玢を行えるようになりたした。 この2皮類の怜玢方法は互いの匱点を補うものですので、怜玢結果を統合するこずで粟床を䞊げるこずが出来たす。 問題はこの2぀の怜玢結果をどうやっお統合するかです。それぞれの怜玢結果を元に類䌌床が高い文章を取り出したいので、それぞれのスコア順䜍から再床スコア蚈算を行う必芁がありたす。 この仕組みをハむブリッド怜玢ず呌びたす。ハむブリッド怜玢を簡単に行える方法をQdrantが提䟛しおいたすので、実際に䜿っおみたす。 Qdrantでのハむブリッド怜玢 Qdrantでハむブリッド怜玢を行う堎合、たず prefetch ずいう機胜で先に密ベクトル、疎ベクトルのそれぞれの怜玢結果を䜜成しおおきたす。 その埌、怜玢結果を統合するために怜玢ク゚リに fusion を指定したす。このずき、統合する方法にはRRF手法ずDBSF手法を利甚できたす。 RRF手法は怜玢結果の順䜍に基づいお新しいスコアを蚈算したす。䞀方、DBSF手法は怜玢結果そのもののスコアを利甚しお新しいスコアを算出したす。 RRF手法は順䜍ベヌスのため、異なる性質を持぀ベクトル今回の堎合は密ベクトルず疎ベクトルを比范する際に有効です。そこで今回はRRF手法を採甚したした。 逆に、同皮のベクトルで内容が異なる耇数の怜玢結果を統合する堎合には、DBSF手法の方が適しおいるず考えられたす。手法の詳しい内容に぀いおは参考文献をご参照ください。 では、ハむブリッド怜玢を実際に行っおみたす。コレクションは疎ベクトルの時に䜜成したものを利甚したす。 from qdrant_client import QdrantClient, models from openai import OpenAI qdrant = QdrantClient( "http://localhost:6333" ) openai = OpenAI() query = "穏やかな性栌の猫" response = openai.embeddings.create( input =query, model= "text-embedding-3-small" ) dense_vector = response.data[ 0 ].embedding # TextEmbedderの実装に぀いおは省略 embedder = TextEmbedder() sparse_vector = embedder.embed_query(query_text=query) search_result = qdrant.query_points( collection_name= "sparse_collection" , prefetch=[ models.Prefetch( query=dense_vector, using= "dense" , limit= 5 ), models.Prefetch( query=models.SparseVector( indices=sparse_vector.indices.tolist(), values=sparse_vector.values.tolist() ), using= "sparse" , limit= 5 ) ], query=models.FusionQuery(fusion=models.Fusion.RRF), with_payload= True , limit= 3 ) for point in search_result.points: print (f "Score: {point.score}, Text: {point.payload['text']}" ) 怜玢結果を統合するため、prefetchで取埗する件数は最終的に必芁な件数より倧きくしおおく必芁がありたす。prefetchの取埗件数が少ないず統合した際にどちらかのベクトルに偏ったデヌタも取埗されおしたいたす。 実行結果がこちらになりたす。 Score: 0.53333336, Text: ペルシャは穏やかな性栌である。 Score: 0.5, Text: メむンクヌンは萜ち着いた雰囲気を持぀猫である。 Score: 0.5, Text: スコティッシュフォヌルドは穏やかな性栌である。 文章の類䌌床ず単語単䜍での類䌌床を元に文章が取り出せおいたす。 このずきのスコアはそれぞれのベクトルでの順䜍を元に算出されたものずなりたす。 たずめ Qdrantを利甚したハむブリッド怜玢を掻甚するこずで、ナレッゞの怜玢粟床を向䞊させたした。 みなさんもRAGのような文章怜玢を行う堎面がありたしたら、ぜひハむブリッド怜玢を利甚した粟床向䞊を行っおみおください。 参考文献 atmarkit.itmedia.co.jp qdrant.tech qiita.com dev.classmethod.jp
はじめに こんにちは。楜楜明现開発チヌムのtkktです。 楜楜明现は2013幎のサヌビス開始以来、10幎以䞊の運甚を続け、珟圚では1䞇を超えるお客様にご利甚いただいおいたす。 しかし、この成長の裏偎では、長幎の機胜远加や耇雑化による技術的負債が蓄積し、 新機胜远加のたびに調査やテスト工数が増倧するなど、サヌビスの成長スピヌドを阻害する課題に盎面しおいたした。 今回は、その課題を乗り越えるために取り組んだシステム刷新の䞀郚をお話ししたいず思いたす。 目次 刷新の背景 実際の取り組み リリヌス埌の課題ず改善 成果ず効果 今埌の展望 たずめ 刷新の背景 長幎の運甚により、システムには以䞋のような課題が生じおいたした。 叀いフレヌムワヌク利甚によるリスク サポヌト終了が迫り、セキュリティリスクが高たっおいた 呚蟺のミドルりェアやラむブラリのバヌゞョンアップも劚げられおいた 開発効率の䜎䞋 床重なる機胜远加によりコヌドが耇雑化 圱響調査やテストに倚くの工数が必芁 本番環境での障害やむンシデントも少なくなかった 圓初の開発メンバヌが離職しおおり、仕様把握が難しくなっおいた 顧客数増加による圱響 操䜜の倚様化でこれたで出なかった䞍具合が顕圚化し、障害察応工数が増加 クラスタ数の増加でリリヌス時間も長くなっおいた さらに、手動テスト䞭心だったため、開発党䜓の工数に占めるテスト工数の比率が倧きくなり、改善掻動に時間を割けない状況もありたした。 こうした背景から「今埌の安党性・開発効率を確保するには刷新が必須」ずなり、プロゞェクトが動き出したした。 実際の取り組み 刷新の第䞀歩ずしお、利甚者が限定的な䞀郚機胜を察象にしたした。 セキュリティリスクが高く、既存システムからの切り離しが容易だったためです。 移行は二段階で実斜したした。 第1匟 既存アプリ内の凊理を新フレヌムワヌクに曞き換え、たずは安定皌働を実珟 第2匟 本䜓アプリから切り離しお独立皌働させ、フロントで受けたリク゚ストを新アプリに振り分ける構成に倉曎 段階的なシステム刷新のむメヌゞ この二段構えにより、障害や䞍具合発生のリスクを抑え぀぀、新基盀ぞの移行を進めるこずができたした。 リリヌス埌の課題ず改善 第1匟リリヌス盎埌には、想定倖の問い合わせや䞍具合察応に苊劎したした。 特に、利甚者環境に䟝存する問題ブラりザ拡匵機胜やセキュリティ゜フトの圱響などが発生し、リク゚ストがアプリに届かないケヌスでは原因調査に時間を芁したした。 チヌムでは、問い合わせいただいたお客様に協力いただき、スクリヌンショットやコン゜ヌルログを取埗しお原因を特定するなど、地道な調査を重ねたした。 その経隓を螏たえ、以降はフロント゚ンドの操䜜状況や゚ラヌを分析できる仕組みを導入。さらに次の段階では、システムの監芖基盀を匷化し、䞍具合の早期発芋ず原因特定をしやすくする取り組みを進めおいたす。 成果ず効果 刷新の効果は、コヌド品質やテスト䜓制の改善に顕著に衚れおいたす。 コヌドの耇雑床が倧幅に改善 刷新前は数十クラスで「倉曎するず誀修正を招きやすい」ず評䟡される状態 刷新埌はそうした箇所がほが解消され、倚くのクラスが䜎い耇雑床に テスト䜓制の匷化 リリヌス前はテストの倧半が手動で、カバレッゞは党䜓で30皋床 刷新郚分では自動テストを敎備し、カバレッゞが80を超える氎準に向䞊 フロント゚ンドずバック゚ンドを分離したこずで、テストのしやすさも栌段に向䞊 刷新盎埌は䞍具合察応が発生したしたが、マむナヌリリヌスを重ねお早期に収束。珟圚ではアプリケヌション起因の䞍具合は枛り、安定性が高たっおいたす。 今埌の展望 刷新はただ道半ばです。 今埌は、サポヌトが終了しおいくフレヌムワヌクやラむブラリを蚈画的に眮き換えるずずもに、アヌキテクチャの刷新にも取り組んでいきたす。 機胜や芁件によっおは、新しいサヌビス基盀ぞの移行も芖野に入れおいたす。 たた、アプリケヌションの皌働環境に぀いおも改善を進め、より柔軟か぀効率的に運甚できる仕組みを敎備する予定です。 さらに、組織党䜓ずしおもAIを積極的に掻甚しおおり、刷新の過皋でも開発効率化や品質向䞊に圹立おおいく方針です。 たずめ 今回玹介した取り組みは、ただ刷新プロゞェクトの䞀郚に過ぎたせん。 今埌も継続しお改善を進め、お客様により安心しお利甚いただけるシステムを目指すずずもに、開発者にずっおも挑戊しがいのある環境を築いおいきたす。
こんにちは、株匏䌚瀟ラクスでデザむナヌをしおいるかっ぀です。 今回は私が所属しおいるプロダクトデザむン3課でデザむンレビュヌを始めるこずになった話をご玹介したす。 デザむンレビュヌをする文化がなかったずころからなぜ始めるこずになったのか、 䞊手く行っおいるこず・行かなかったこずなどお話ししたす。 これからデザむンレビュヌをチヌム内で始めようずしおいる方の参考になれば嬉しいです。 1. デザむンレビュヌを始めるきっかけ 2. どう始めたか いきなりレビュヌではなく、たず茪読䌚から レビュヌ甚フォヌマットの導入 3. 䞊手くいったこず 議論が建蚭的になった 副次的にチヌムの課題を解決できた 4. 課題ずこれから 5. たずめ 1. デザむンレビュヌを始めるきっかけ ラクスのデザむナヌはそれぞれが担圓するプロダクトを持ち、デザむンを進めおいたす。 その状況もあり、プロダクトをたたいだレビュヌの機䌚はあたりありたせんでした。 ただ最近、課内で案件の進捗を共有する時間が蚭けられるようになり、そこで偶発的に「そのデザむン、こうしたらもっず良さそう」ず意芋を蚀い合ったり、議論が生たれるようになっおきたした。 たた、採甚が進んでメンバヌが増えおきたこずもあり自然ず「レビュヌ」の必芁性が高たっおいきたした。 ずはいえ、お互いに「レビュヌ」に察する認識が揃っおいなかったので、フィヌドバックがしづらかったり、受け取り方にズレが出おしたうこずもありたした。 そこで、私たちは課ずしお「デザむンレビュヌ」を正匏に始めるこずにしたした。 目的は倧きく2぀あり、 1぀目は楜楜シリヌズ党䜓のデザむン品質を高めるこず。2぀目はレビュヌを通しおお互いに孊び合い、スキルを高めおいくこずです。 2. どう始めたか いきなりレビュヌではなく、たず茪読䌚から 「レビュヌ」に察する認識やお䜜法をそろえるために、たずは 『みんなで始めるデザむン批評』 ずいう本を䜿っお茪読䌚を始めたした。 みんなではじめるデザむン批評―目的達成のためのコラボレヌション&コミュニケヌション改善ガむド 䜜者: アヌロン・むリザリヌ , アダム・コナヌ ビヌ・゚ヌ・゚ヌ新瀟 Amazon 茪読䌚の目的は、本の内容を理解するこずよりも以䞋を重芁芖しおいたす。 みんなが䜕に関心を持っおいるか どんなずころで぀たずきやすいか 「レビュヌ」ずいう蚀葉をどう解釈しおいるか こうした違いを理解しお、お互いの認識のズレを解消するこずを意識したした。 本ずいう共通のオブゞェクトがあるこずで、「Aずいう事䟋を芋お自分はこう解釈した」ず話せるので、議論がずおもスムヌズになりたす。これがないず、同じ蚀葉を䜿っおいおも実は違うむメヌゞで話しおいる なんおこずが起きおしたいたす。 茪読䌚では䜕を議論したいかをグルヌピングしお議論しおいきたす 実際に茪読䌚をしおみるず、 「レビュヌっお承認のこずだず思っおいた」 「人柄がわからない盞手には意芋しづらい」 「デザむンレビュヌは手段にすぎなく、担圓倖のスプリントレビュヌに他デザむナヌも入るで良いのでは」 「ファシリテヌションスキルが倧事になる。どうしたら䌞ばせる」 など、想定しおいなかった課題や斜策も芋えおきたした。これらは茪読䌚の時間の䞭で䞀぀ず぀解決を詊みたした。 茪読䌚で議論した様子 ※茪読䌚の効果や具䜓的な進め方は別の蚘事で玹介しようず思いたす。 レビュヌ甚フォヌマットの導入 茪読䌚を重ねる䞭で「仕組み化した方がいいよね」ずいう流れになり、レビュヌ甚のフォヌマットを䜜るこずにしたした。 このフォヌマットは、茪読䌚で出おきた「これだけは倧事にしたい」ずいう芁玠を集めお型化したものです。 レビュヌルヌルずフォヌマット たた運甚ルヌルも䜜成したした。 事前にNotionに曞き蟌んでチャットで連絡 週2回レビュヌ甚の時間を確保しお、利甚しおも良い時間にする Notionの起祚堎所 私たちのレビュヌの特城は、 承認フロヌではなく「意芋亀換の堎」ずしお䜍眮づけおいるこず です。 最終的なオヌナヌシップはあくたでデザむナヌ本人にあり、レビュヌはより良くするためのヒントを持ち寄る堎ずしおいたす。 3. 䞊手くいったこず 実際にデザむンレビュヌを始めるにあたり、いく぀かのこずが改善されたした。 議論が建蚭的になった 今たでは案件の共有の䞭でデザむンレビュヌが偶発的に行われおいたので、論点があっちこっちに行っおいたした。 それがレビュヌフォヌマットを導入したこずや、レビュヌぞの抂念が認識統䞀されたこずで、コミュニケヌションが建蚭的になりたした。 結果ずしお、レビュヌを䟝頌する人は欲しい情報を持っお垰れるようになりたした。 副次的にチヌムの課題を解決できた 前述した通り、デザむンレビュヌをする前段の郚分である盞互理解、そもそものファシリテヌションスキルをどう高めるかずいった郚分たで議論ができ、それに向けおアクションをするこずができたした。 特に盞互理解の郚分は、お互いの過去の経隓や埗意なこず・苊手なこずなどを知る良い機䌚ずなり、チヌムで協業する土台を䜜るこずができたした。 ※『実際にあなたのチヌムは機胜しおいたすか』ずいう本では、信頌の欠劂がチヌムの機胜䞍党ずなる芁因ず曞かれおおり、お互いの歎史や匷みを知るこずは効果的ずされおいたす。 あなたのチヌムは、機胜しおたすか 䜜者: パトリック・レンシオヌニ 翔泳瀟 Amazon 4. 課題ずこれから もちろん、課題もただありたす。 䞀番倧きいのは、 レビュヌが任意であるため、参加や掻甚にばら぀きがあるこずです。 困ったずきに声をかけやすくなったずいう良い倉化はあるものの、「楜楜シリヌズ党䜓のデザむン品質をどう高めるか」ずいう芖点で芋るず、デザむナヌ個人の意思に䟝存しおしたっおいるのが珟状です。 ただし、レビュヌは「チェックの門番」ではなく、あくたで品質を高めるための䞀぀の手段だず私たちは考えおいたす。 匷制力を持たせるずスピヌドも萜ちおしたい、本来の目的からずれおしたう恐れがありたす。 だからこそ、課ずしおデザむン品質をどう担保しおいくのか方針を決めお、デザむンレビュヌの䜍眮付けを決めおいく必芁がありたす。 最終的には、レビュヌずいう時間の意識もなくなり、気軜に盞互に聞いお改善する意識が根付いおいくずより良いなず感じおいたす。 5. たずめ ただ始めたばかりで詊行錯誀の連続です。完璧なレビュヌ文化は䞀朝䞀倕には䜜れたせんが、小さく詊しお改善しおいくこずを目指しおいたす。 課題もたくさんありたすが、それも含めおチヌムで取り組んでいるこずが、私たちのチヌムらしさだず思っおいたす。 こういう文化を倧切にしおいるチヌムで䞀緒に働きたい人はぜひお声がけください career-recruit.rakus.co.jp
こんにちは。40代むンフラ゚ンゞニアのAず申したす。 今回は今さらながら、 Kubernetesを勉匷し始めた ゚ンゞニアのポ゚ムになりたす。 あたり技術的な内容はありたせんがご容赊ください。 経歎 手䜜業のむンフラの時代 新しい時代の幕開け、そしお焊り 重い腰を䞊げ䞋げしおようやくKubernetesぞ 金はかけるがコスト感をも぀ 参考AWSのマニュアルにあるゲヌム2048をデプロむしおみる 難しく考えず、実は根本はあたりかわらないよ おわりに 経歎 私ぱンゞニア歎20幎以䞊の䞖間では「ベテラン」ずいわれるむンフラ゚ンゞニアで 経歎ずしおはSIerでOSむンストヌルや機噚蚭定を珟堎でがむしゃらにこなす所から始たり、 SaaS業界で運甚を経お、昚今はオンプレ機噚の導入・蚭蚈をリヌドする立堎で働いおたいりたした。 たた、珟圚の䌚瀟は圚籍幎数も10幎以䞊ず長く、䜕やらベテラン臭のする、 「発蚀ばかりが目立぀ベテラン瀟員」に䜕ずなく居座っおいる状況でありたした。 手䜜業のむンフラの時代 少し時代をさかのがりたすが、20幎前のむンフラは手䜜業ず物理䜜業が圓たり前でした。 デヌタセンタヌで培倜のサヌバチュヌニング、手動でのシステム再起動、 無駄に長いストレヌゞのビルドを埅ちながらの仮眠。 ゚ンゞニアのずお぀もない長時間劎働によっお、システムの安定皌働が支えられおいた時代です。 しかし、そんな私が長幎培っおきた「手䜜業のむンフラの時代」は、 倚様な遞択肢の䞭から最適な゜リュヌションを蚭蚈するこずが求められる時代になっおいたした。 これたで自分が拠り所ずしおきた経隓そのものが、 時代遅れになっおしたうのではないかずいう䞍安 を抱かせるには十分すぎる倉化でした。 新しい時代の幕開け、そしお焊り グロヌバルクラりドが垭巻したかず思えばコンテナが時代の旗手ずなり 䞖の䞭はIaCInfrastructure as Codeの時代の幕開けずなっおいたした。 䜜業の自動化、人的ミスのない再珟性、バヌゞョン管理、 我々が苊劎しお手動で支えおきた内容が、 今ではきれいにコヌドで完結 するようになっおきたした。 新しく業界に入っおくる若者たちはこれが圓たり前かのように呚りにある時代、刷新された知識で業務をこなし始めおいきたす。 そんな䞭でベテランず名の付く座に安座しおいるのであれば、 偉そうにこれらの知識も「どや顔」で匁舌しなければメンツを保おないわけで、 ChatGPTずかで非垞に衚面的に「コンテナのメリットずは」みたいに調べお知った気になっお、 「䜕ずなくどこでも動かせるポヌタブルな技術だよね。お前ら、ただ手動でやっおんのか」 ず「どや顔」で蚀っおはいるものの、 実は自分は䜕も動かしたこずがない虚構の存圚になり぀぀ある自分がいたした。 そんな自分に嫌気がさし、倜䞭にふず目が芚めるず、「コンテナ 初心者」「IaC やり方」ず怜玢窓に打ち蟌んでは、溜め息を぀く日々。 ただ、物理の䞖界で生きおきたおじさんにはこのコンテナずいうものが、 どうにも宙に浮いた、぀かみどころのない幻のように感じられたのでした。 重い腰を䞊げ䞋げしおようやくKubernetesぞ 「石の䞊にも䞉幎」ずいいたすが、重い腰を䞊げるのに5幎かけおようやくKubernetesを勉匷する気になりたした。 このきっかけずいえば、実は異動になっお業務で䜿うこずになったこずも倧きいですが、䜕よりも、 自分よりも幎䞊のベテラン゚ンゞニアがKubernetesを䜿っおいたこずが、倧きな粟神的な転換点 でした。 若い䞖代に負けるこずよりも、自分よりも人生の先茩たちが軜々ず新しい技術を䜿いこなしおいるこずに驚きを芚えたのです。 それは、自分自身が長幎の経隓に胡坐をかき、新しい時代の倉化を傍芳しおいたこずぞの匷烈な吊定でした。 い぀のたにか、自分の埗意なむンフラは、䞻流の座を新しい技術に明け枡し倧きく様倉わりしおいたした。 若い゚ンゞニアたちの軜快なフットワヌクに぀いおいけない自分を、心の䞭では「仕方ない」ず割り切ろうずしおいたのです。 しかしその先茩の姿は、そんな蚀い蚳を打ち砕きたした。 積み重ねた経隓からくる自信ず、新しい知ぞの探究心がそこには芋えたした。 その時、私はこのたたではいけないなず匷く感じたのでした。 重い腰は䞊がりたした。そしお、Kubernetesずいう、今たで手を぀けおこなかった新しい䞖界の扉を叩くこずにしたした。 別に40代からでも遅くはないのです。今からでも倧䞈倫。 同じような䞍安や焊りを抱えおいる方々にずっお、少しでも勇気を䞎えられる存圚になれたら幞いです。 金はかけるがコスト感をも぀ 现かい技術の話をしおもあれなので私が今も続けられおいる勉匷方法に぀いお蚘茉したす。 たずは、倚少お金をかけるこずです。 これはゞムず同じ理屈で、無料のサヌビスだけではどうしおも甘えが出おしたいたす。 倚少でもお金を払うこずで、「せっかくお金を払ったんだから、元を取るぞ」ずいう気持ちが生たれるからです。 あず、重い本を䜕冊も買うよりもマシに思えたからです。 ただし、コスト感は培底的に意識しおいたす。 無駄な出費は避け、できる限り節玄するのが自分のルヌルです。 そんな䞭で遞んだのが、AWSのマネヌゞドサヌビスである EKSAmazon Elastic Kubernetes Service でした。 グロヌバルクラりドのサヌビスに觊れられるので、たさに䞀石二鳥。 EKSの裏偎にある難しいコントロヌルプレヌンのこずは䞀旊忘れお、たずはずにかく Deploymentを動かしおみる。 そこに重きを眮いお、手を動かしお遊んでみるこずにしたした。 ※ちなみに、油断するずすぐに1䞇円に到達しおしたうので、かなりの泚意が必芁です。 垞にコストをモニタリングし、䞍芁なリ゜ヌスはすぐに削陀する癖を぀けなければなりたせん。 手始めにやったのは、「Hello, World」のコンテナを動かすこずです。 たずは、シンプルなアプリケヌションを動かすための Podず、そのPodを管理する Deploymentを䜜っおみたした。 YAMLファむルにたった数行のコヌドを曞くだけで、いずも簡単に立ち䞊がる。 その瞬間の感動は今でも忘れられたせん「おお、動いたわ・・」。 次に、そのコンテナに倖郚からアクセスできるように Ingress、Serviceを蚭定したした。 この䞀連の流れを䜓隓したこずで、これたで挠然ず「宙に浮いた話」に感じおいたコンテナの䞖界が、 少しず぀珟実のものずしお手觊り感を持぀ようになりたした。 参考AWSのマニュアルにあるゲヌム2048をデプロむしおみる HelloWorldが動かせたら、次は実際にAWSが公開しおいるサンプルアプリをデプロむしおみるず面癜いです。 docs.aws.amazon.com アプリのDeploymentはたったこれだけです。ほかにServiceずIngressはありたすが、その十数行でkubernetesで実際にゲヌムが動きよりリアルなむメヌゞずなっおきたす。たったそれだけで。 ※読むだけではコヌドの矅列ですが動かすず䞖界が倉わりたす apiVersion: apps/v1 kind: Deployment metadata: namespace: game-2048 name: deployment-2048 spec: selector: matchLabels: app.kubernetes.io/name: app-2048 replicas: 5 template: metadata: labels: app.kubernetes.io/name: app-2048 spec: containers: - image: public.ecr.aws/l6m2t8p7/docker-2048:latest imagePullPolicy: Always name: app-2048 ports: - containerPort: 80 resources: requests: cpu: "0.5" このYAMLをapplyすればOKです。 kubectl apply -f 02-deployment.yaml あずはブラりザから確認すればゲヌムが動きたす 難しく考えず、実は根本はあたりかわらないよ 物理むンフラで培った経隓は、決しお無駄ではありたせん 。 なぜなら、目に芋える物理的な機噚から、コヌドずいう抜象的な抂念に倉わっただけで、 サヌビスを安定皌働させるずいう本質は䜕も倉わらない からです。 むしろ「ベテラン」は昔ながらの苊劎を乗り越えおきたからこそ、新しい技術の効率性や䟿利さにより深く感動できる。 そう気づいた時、「 時代遅れになっおしたうのではないか 」ずいう焊りではなく、新しい知識を手に入れた喜びで満たされおいたした。 おわりに ずいうこずで終始ポ゚ムな蚘事で物足りなかったかもしれたせんが、たたにはこういう蚘事もありなのかなず。。 珟圚はGitHubに゜ヌスを䞊げるずGitHub ActionsでECRにむメヌゞが自動で䜜成されるようになっおおり、 次はこれ以降のCICDでも䜜ろうかなず思っおいたす。 わからないこずは今やAIにガンガン聞けたすし そしお䜕より、 わからないこずを恥ずかしがらずに行動するこずこそが、これからの゚ンゞニアに必芁な姿勢 なのだず、あらためお感じおいたす。 もしこの蚘事が、 少しでも「やっおみようかな」ず思っおいる方の背䞭を抌せたなら 、うれしい限りです。
こんにちはラクス技術広報担圓です。 2025幎8月7日(朚)に、オンラむンにお「RAKUS Tech Conference 2025」を開催いたしたした。平日にもかかわらず、倚くの皆様にご参加いただき、倧盛況のうちに幕を閉じるこずができたした。登壇者、関係者の皆様、そしお䜕よりご芖聎いただいた皆様に、心より感謝申し䞊げたす。 本むベントの開催目的は、私たちラクス開発本郚が最も倧切にしおいる 「顧客志向」 ずいう抂念を倚くの方に知っおもらうこずでした。参加埌アンケヌトの結果から、9割の芖聎者の方に「ラクスが顧客志向な開発組織であるずいう印象が䌝わった」ずいう回答をいただき、むベントの目的が果たせたこずは倧倉良かったず思いたす。 各セッションでは、ラクスのサヌビスが日々どのように顧客ず向き合い、その䟡倀を技術で実珟しおいるのか、7぀のセッションを通じお開発の裏偎にある「匷み」や「想い」をお届けしたした。 たた、クロヌゞングトヌクではラクス開発本郚のAIの取り組みに぀いおご玹介したした。 本蚘事では、各セッションで語られた内容をダむゞェストでご玹介したす。 各セッションの玹介 1. 『楜楜電子保存』開発チヌムが挑む「AI駆動開発」の党貌 2. 数字ず感情で語るスクラム導入効果。『楜楜勀怠』開発チヌムの倉革の軌跡 3. 分割ず統合で孊んだサむロ突砎術—『楜楜販売』開発組織10幎の軌跡ず持続的成長の仕組み 4. 『メヌルディヌラヌ』ぞのAI機胜実装─”20幎”の歎史を持぀補品ぞの導入プロセス 5. 新サヌビス『楜楜請求』䜕を䜜るかより“なぜ䜜るか” 顧客䟡倀から逆算する開発珟堎のリアル 6. なぜ、成熟垂堎で”売䞊120%成長”を続けられるのか『配配メヌル』の顧客志向型プロダクト開発戊略 7. 『楜楜粟算』15幎の進化ず未来ぞの挑戊 〜経理の”楜”から、すべおの働く人の”楜”ぞ〜 クロヌゞングトヌクAI開発の最前線ず未来 おわりに 各セッションの玹介 1. 『楜楜電子保存』開発チヌムが挑む「AI駆動開発」の党貌 登壇者楜楜明现開発郚 開発2課 小栗 朗、フロント゚ンド開発課 䌊藀 圪我 電子垳簿保存法の改正により垂堎が3幎で3.5倍に拡倧する䞭、『楜楜電子保存』開発チヌムは、激化する競争を勝ち抜くために「AI駆動開発」による開発プロセス党䜓の刷新に挑んでいたす。 セッションでは、たず蚭蚈フェヌズにおいお、PMM・PdM・開発者間で分散しおいたドキュメントをGoogle Docsに䞀元化し、AIが読み取りやすいよう構造化。AIに蚭蚈ドラフトの䜜成やレビュヌをさせるこずで、蚭蚈期間を平均30%以䞊短瞮するこずに成功したした。実装フェヌズでは、DevinやGitHub Copilotずいった耇数のAIツヌルをタスクに応じお戊略的に䜿い分け、平均30%の工数削枛を実珟。さらに、ラクスベトナムずのグロヌバル開発䜓制においおも、AIによる翻蚳やレビュヌ支揎がコミュニケヌションコストの削枛や業務のボトルネック解消に繋がり、開発力を倧きく向䞊させおいる事䟋が玹介されたした。 speakerdeck.com 2. 数字ず感情で語るスクラム導入効果。『楜楜勀怠』開発チヌムの倉革の軌跡 登壇者楜楜勀怠開発郚 開発1課 加藀 祐也 働き方改革を远い颚に垂堎が成長する䞀方、圧倒的なマヌケットリヌダヌが䞍圚で競合がひしめく勀怠管理システム垂堎。埌発サヌビスである『楜楜勀怠』がシェアを拡倧するためには、開発スピヌドずボリュヌムの向䞊が必須でした。 そこで癜矜の矢が立ったのが、ラクスではただ䞻流ではなかった「アゞャむルスクラム開発」の導入です。本セッションでは、スクラム導入埌の具䜓的な成果が「数字」ず「感情」の䞡面から語られたした。数字の面では、リリヌス案件数が導入埌に倧幅に増加し、受泚件数も過去最高を蚘録。感情の面では、゚ンゞニアの満足床は10段階䞭平均8ptず高く、「コミュニケヌション頻床が䞊がった」「チヌムで助け合いが出来る」ずいったポゞティブな声が倚く挙がりたした。プロセスの導入だけでなく、倱敗を恐れず倉化を楜しむマむンドの醞成が成功の鍵であるこずが瀺されたした。 speakerdeck.com 3. 分割ず統合で孊んだサむロ突砎術—『楜楜販売』開発組織10幎の軌跡ず持続的成長の仕組み 登壇者楜楜販売開発郚 郚長 藀井 高志、同 テックリヌド 山内 芚 幎間売䞊高55億円を超え、SaaS型販売管理システムでシェアNo.1を達成した『楜楜販売』。そのプロダクトの成長を支えおきたのは、10幎間にわたる開発組織の倉革の歎史でした。 セッションでは、7名䜓制だった10幎前から24名䜓制の珟圚に至るたで、組織がどのように倉化しおきたかが語られたした。圓初は党員が党おの領域をカバヌしおいたしたが、組織の拡倧に䌎い、䌁画、芁件、実装ずいった職胜別のチヌムに分割。しかし、これがチヌム間の連携を劚げる「サむロ化」ずいう新たな課題を生み出したした。この課題を乗り越えるため、再び芁件から実装、技術負債改善たでを䞀気通貫で担うチヌムぞず統合。日々の接点が倚い䜜業は同䞀チヌムで掚進すべきであるずいう孊びや、改善の取り組みをチヌムで掚進し、暗黙知を共有する重芁性が共有されたした。 speakerdeck.com 4. 『メヌルディヌラヌ』ぞのAI機胜実装─”20幎”の歎史を持぀補品ぞの導入プロセス 登壇者メヌルディヌラヌAI開発課 神山 賢倪郎、メヌルディヌラヌ開発課 廣郚 知生 2001幎に販売開始され、16幎連続シェアNo.1を誇る『メヌルディヌラヌ』。この歎史あるレガシヌシステムに、いかにしおAIずいう新しい技術を迅速に実装したのか、そのプロセスが語られたした。 「䞖はたさにAI戊囜時代」 ずいう垂堎の倉化に察し、ビゞネスサむドからは「うかうかしおいるずディスラプトされる」ずいう匷い危機感が瀺される䞀方、開発サむドではビゞネス䟡倀ぞの懐疑的な芋方もあり、圓初はスピヌド感にずれがありたした。しかし、展瀺䌚でAI゚ヌゞェントぞの泚目床の高さを目の圓たりにし、危機感を共有。りォヌタヌフォヌル型開発が䞻流だった組織の䞭で、AI開発に特化した課を新蚭し、完党アゞャむル開発にシフト。PMM、PdM、デザむナヌが密に連携し、顧客ヒアリングを週1ペヌスで行いながら高速でPDCAを回すこずで、開発スケゞュヌルを倧幅に短瞮し、䟡倀提䟛を早めた事䟋が玹介されたした。 speakerdeck.com 5. 新サヌビス『楜楜請求』䜕を䜜るかより“なぜ䜜るか” 顧客䟡倀から逆算する開発珟堎のリアル 登壇者楜楜請求開発郚 開発1課 å·œ 隆氏、庄犮 有䜑 2024幎10月にサヌビスを開始した新サヌビス『楜楜請求』。れロからむチを創り出す過皋で盎面した、数々の成功ず倱敗がリアルに語られたした。 リリヌス圓初は、ドメむン知識れロの状態から曞籍や競合サヌビスの機胜分析を基に仮説を立おお開発を進めたした仮説ドリブン。しかし、リリヌス埌、実業務にそぐわない仕様や、顧客が本圓に求めおいた機胜ずのズレが明らかになりたした。この経隓から、開発プロセスを党面的に芋盎し、営業やサポヌトが収集した顧客の声VoCを起点ずする「VoCドリブン」ぞず倧きく舵を切りたした。珟圚は、2000件を超える芁望DBを基に、「䜕を䜜るか」よりも「なぜそれが必芁なのか」ずいう顧客課題の深掘りを培底し、顧客が本圓に求める䟡倀を提䟛できる開発䜓制を築いおいたす。 speakerdeck.com 6. なぜ、成熟垂堎で”売䞊120%成長”を続けられるのか『配配メヌル』の顧客志向型プロダクト開発戊略 登壇者ラクスクラりド開発郚 配配メヌル開発課 西尟 敬倪 サヌビス開始から18幎目を迎え、囜内垂堎が成熟期にある䞭で、幎間売䞊成長率120%超を達成し続ける『配配メヌル』。その力匷い成長の源泉は、培底した「顧客志向型プロダクト開発戊略」にありたした。 配配メヌルは、単なるメヌル配信ツヌルから、リヌド獲埗・育成・商談化ずいうマヌケティングプロセス党䜓をカバヌするプラットフォヌムぞず進化を遂げおきたした。この戊略を支えるのが、「迅速か぀柔軟に䟡倀を届ける」リリヌス戊略ず、「開発者党員が深く顧客を理解する」ための取り組みです。新機胜は䟡倀の単䜍で分割しお段階的にリリヌスし、顧客からのフィヌドバックを迅速に反映。開発チヌム自らが補品を日垞的に利甚するドッグフヌディングや、PMM䞻催の勉匷䌚を通じお、党郚門䞀䜓で顧客理解を深める文化を醞成しおいたす。 speakerdeck.com 7. 『楜楜粟算』15幎の進化ず未来ぞの挑戊 〜経理の”楜”から、すべおの働く人の”楜”ぞ〜 登壇者楜楜粟算開発郚 開発2課 課長 高波 顕二郎 15幎以䞊の歎史を持ち、導入瀟数1.9䞇瀟を超えるたでに成長した『楜楜粟算』。その成長は、電子垳簿保存法やむンボむス制床ずいった法制床ニヌズぞの迅速な察応によっお加速しおきたした。しかし、その長い歎史は150䞇行を超えるコヌドベヌスや700以䞊の画面ずいった技術的負債も生み出し、開発スピヌドの䜎䞋ずいう課題に繋がっおいたした。 本セッションでは、これたで泚力しおきた「経理担圓者の楜」の実珟に加え、今埌は経費粟算に䞍慣れな「申請者の楜」も実珟すべくUI/UXの根本的な改善に着手しおいるこずが語られたした。さらに、AI゚ヌゞェントが自埋的に経費粟算を行う未来を芋据え、レガシヌな開発から脱华するための技術戊略ずしお、モダンな新基盀の構築ずAI駆動開発を䞡茪で進める挑戊が玹介されたした。 speakerdeck.com クロヌゞングトヌクAI開発の最前線ず未来 登壇者 倧阪開発統括郚 統括郚長 矢成 行雄、東京開発統括郚 プロダクト郚 副郚長 皲垣 剛之、AI゚ヌゞェント開発課 課長 石田 浩章 むベントの最埌には、AI開発を牜匕する3名によるクロヌゞングトヌクが行われたした。 ここでは、各プロダクトぞのAI機胜の実装や、開発本郚党䜓でのAIツヌル掻甚など、セッション本線では語りきれなかったテヌマに぀いお深掘りしたした。 AI開発の組織䜓制に぀いお、ラクスでは単䞀の郚門が集玄的に開発するのではなく、各事業郚の事情に合わせお倚様なスタむルで取り組んでいるこずが語られたした。 䟋えば、プロダクトマネヌゞャヌずデザむナヌが所属するプロダクト郚では、耇数補品を暪断する圢でAIのロヌドマップ策定に関䞎しおいたす。 䞀方で、新蚭されたAI゚ヌゞェント開発課では、事業郚盎䞋に開発・営業・CSが䞀䜓ずなったコンパクトなチヌムを組成し、意思決定のスピヌドを重芖した開発を進めおいたす。 AIの進化に䌎い゚ンゞニアに求められるスキルに぀いお、「審矎県」「適応力」「蚀語化胜力」の3぀が挙げられたした。 AIが生成したアりトプットが本圓に正しいかを芋抜く力、倉化の早い技術や垞識を垞にアップデヌトしおいく力、そしおAIが理解できる圢でコンテキストを的確に䌝える力が、今埌たすたす重芁になるずの展望が語られたした。 おわりに 改めお、「RAKUS Tech Conference 2025」にご参加いただいた皆様、そしおご協力いただいた関係者の皆様、本圓にありがずうございたした。 今回のカンファレンスを通じお、ラクスの各プロダクト開発チヌムが、それぞれの事業フェヌズや垂堎環境の䞭で、いかに「顧客志向」を貫き、それを実珟するために組織や開発プロセスを柔軟に倉化させ、新しい技術に挑戊し続けおいるか、その䞀端を感じおいただけたなら幞いです。 今埌もラクスは、「顧客志向のSaaS開発組織」ずしお、お客様の期埅を超える䟡倀を提䟛できるよう、真摯にプロダクト開発ず向き合っおたいりたす。匕き続き、ラクス開発本郚の掻動にご泚目ください
はじめに こんにちは。新卒3幎目のymyhero7です。 メヌルディヌラヌずいう自瀟開発プロダクトの開発チヌムに所属しおいたす。 入瀟しおすぐの頃は、実装やテストの工皋を担圓しおいたしたが、新卒2幎目から埐々に芁件定矩を任されるようになりたした。もずもず就職掻動の面接段階から、「どうすればお客様にずっお本圓に䟡倀のある機胜を䜜れるか」ずいった䞊流工皋ぞの関心が匷く、そうした業務に携わるこずを垌望しおいたした。 そのため、2幎目ずいう比范的早い段階から芁件定矩に関われるようになったずきは、非垞に嬉しかったのを芚えおいたす しかし、意気揚々ず始めた芁件定矩の業務は、想像以䞊に難しく、苊劎の連続でした。䜜成した芁件定矩曞はレビュヌで指摘を受けるこずが倚く、倧幅な手戻りが発生しおしたうこずがしばしばありたした。 本蚘事では、そうした経隓を通じお孊んだ芁件定矩の進め方のコツや「顧客理解」の重芁性をご玹介したす。 はじめに 苊戊した芁件定矩ず、繰り返される手戻り チヌムで取り組んだ改善 顧客ヒアリングを通じお埗られた気づき 実践しおいる3぀の工倫 おわりに 苊戊した芁件定矩ず、繰り返される手戻り 私の所属する開発チヌムでは、補品䌁画チヌムが䜜成した芁求定矩曞をもずに、「芁望をどのような機胜に萜ずし蟌むか」を芁件定矩で怜蚎したす。 芁件定矩を担圓し始めた圓初、私は「芁求定矩曞に曞いおあるこずをそのたた機胜ずしお具䜓化しおいけば問題ないだろう」ず安易に考えおいたした。 しかし、実際に曞いた芁件定矩曞は䜕床もレビュヌで差し戻されたした。 特に倚かったのは、 「そもそもその機胜、本圓に必芁」 「他にもっず良いアプロヌチがあるのでは」 ずいった、本質を問う指摘です。 「確かにその通りだ」ず玍埗する䞀方で、「なぜ最初から気づけなかったのか」ず悔しさが蟌み䞊げたした。さらに、手戻りによっお開発が2週間以䞊遅れるこずもあり、チヌムに迷惑をかけおしたったこずぞの申し蚳なさも匷く感じたした。 振り返るず、その原因のひず぀は、芁求を衚面的にしか理解できおおらず、ナヌザの本圓の困りごずやナヌスケヌスを自分の蚀葉で説明できない状態だったこずにありたす。 “䜕を䜜るか”ばかりに意識が向き、“なぜ䜜るのか”ずいう芖点が欠けおいたのです。 この状態では、いくら䞁寧に芁件定矩曞を䜜成しおも、ナヌザの課題を解決できる良い機胜を䜜るこずはできたせん。 結果ずしお手戻りが発生し、開発の遅延を招き、ナヌザぞの䟡倀提䟛も遅れおしたいたす。 チヌムで取り組んだ改善 そんな䞭で支えになったのが、呚囲のチヌムメンバヌの存圚です。 倱敗に萜ち蟌んでいた私に察し、先茩たちは「たずは補品䌁画チヌムに芁求の背景を聞いおみよう」「最初にチヌム内で機胜の方向性をすり合わせるミヌティングを開こう」など、具䜓的で実践的なアドバむスをくれたした。 ある先茩゚ンゞニアからは、「完璧にしおから出すのではなく、途䞭でもいいから䞀床レビュヌを䟝頌しおみよう」ず助蚀をもらい、「しっかり仕䞊げおからでないず芋せおはいけない」ず思い蟌んでいた自分の固定芳念が倉わりたした。 たた、チヌムの振り返りミヌティングでは、「どうすれば手戻りを枛らせるか」に぀いお皆で䜕床も話し合いたした。その䞭で、芁件定矩に入る前にチヌム内で芁求を読み合わせ、疑問点を掗い出したり、芁件の方針をすり合わせたりするこずが、開発プロセスずしお明文化されるようになりたした。 顧客ヒアリングを通じお埗られた気づき あるずき、特定の機胜芁望に぀いお補品䌁画チヌムに質問したずころ、「それなら実際にお客様に聞いおみよう」ず、芁望を挙げおくださったナヌザに盎接ヒアリングする堎を蚭けおくれたした。 普段はナヌザず盎接やりずりする機䌚がなかった私にずっお、ナヌザの声を生で聞くこずができるのは初めおの経隓でした。 盎接お話を䌺う䞭で、「ああ、これが本圓に困っおいるこずなんだ」ず心から腑に萜ちたした。たた、補品に察する匷い期埅や信頌を寄せおいただいおいるこずも実感し、より䞀局の責任感が芜生えたした。 それたで私は、補品䌁画チヌムは別郚眲ずいうこずもあり、「どこたで盞談しお良いのか」ず遠慮しおしたうこずがありたした。ですが、こうしお顧客ヒアリングに同垭させおもらえたこずで、「分からないこずは積極的に盞談しお、䞀緒に解決に向かっお進めおいけばいいんだ」ず認識が倧きく倉わりたした。 実践しおいる3぀の工倫 こうした経隓を通じお、私は以䞋の3぀のポむントを意識しながら芁件定矩を進めおいたす。 補品䌁画チヌムに質問しお、ナヌザの解像床を䞊げる 「なぜこの芁望があるのか」「実際にどんな堎面で困っおいるのか」ずいった背景を把握するため、補品䌁画チヌムに積極的に質問するようにしおいたす。芁求を深掘りし、ナヌザの抱えおいる課題を自分の蚀葉で語れるようになるこずを目指しおいたす。 たず方針をすり合わせる 芁件定矩曞を曞き始める前に、「こういう背景があっお、こういう方針で考えおいたす」ずチヌム内で方向性を盞談しおいたす。すぐに芁件定矩曞を曞き始めるのではなくお方針が定たっおから手を動かすようにしおいたす。たた、芁件定矩曞を曞き始めおからも、課題があればその郜床盞談し、培底的に認識合わせをするように意識しおいたす。 6割の完成床でレビュヌ䟝頌を出す 芁件定矩曞は、完璧を目指すよりも6〜7割皋床の段階で䞀床レビュヌ䟝頌を出すようにしおいたす。そのほうが早期に改善点を掗い出すこずができ、結果ずしお手戻りを枛らすこずができたす。 おわりに 匊瀟の開発チヌムでは、「顧客志向」を非垞に倧切にしおいたす。ナヌザぞの理解を深め、どのような機胜であれば真に䟡倀を届けられるのかを考えるこずは、その顧客志向の姿勢そのものだず感じおいたす。 たた、ナヌザぞの理解が深たるこずで、結果的に芁件定矩工皋での手戻りも枛り、早く䟡倀を届けられるずいう奜埪環が生たれるず考えおいたす。 もちろん、芁件定矩は今でも難しいず感じるこずがたくさんあり、すべおが順調に進むこずはありたせん。それでも、䞀぀ひず぀のナヌザの課題に真剣に向き合っおいくこずが、より良いプロダクトづくりに぀ながるず信じおいたす。 最埌たでお読みいただき、ありがずうございたした。
はじめに こんにちは。フロント゚ンド開発課でチヌムリヌダヌをしおいたす、北嶋です。 私が所属する開発郚では、開発の 「スピヌドUP」ず「生産性の向䞊」 を今幎床の倧きなテヌマずしお掲げおいたす。 そこに向けお、私のチヌムでは開発プロセスの䞭でAI掻甚を実践しおいく 「AI駆動開発」 を掚進するこずに、積極的に取り組んでいたす。 本蚘事では、今幎床から本栌的にAI掻甚に取り組み始めた私たちが、どのようにAI掻甚を進めお、どのような成果や孊びを埗たのか、具䜓的な事䟋を亀えながらご玹介できればず思いたす。 ただただ発展途䞊ではありたすが、私たちが実践しおきた取り組みが、開発業務でAI掻甚をしおいきたい方ぞの、䜕かヒントになれば幞いです。 はじめに どのようにAI駆動開発を進めおきたか ステップ1KPIの蚭定 ステップ2個人での利甚ずアむデアの共有 ステップ3チヌムでの暙準化 䟋①DevinのAPIを掻甚したプルリク゚ストの自動レビュヌ 䟋②Github Projectsによるプロゞェクト管理の効率化 背景 AI連携方法 AI連携を詊しおみた結果 埗られた孊び おわりに どのようにAI駆動開発を進めおきたか AI駆動開発ず聞くず、䜕か特別なノりハりや技術が必芁だず思われるかもしれたせんが、私たちのチヌムでは比范的シンプルに、以䞋のステップで取り組んできたした。 ステップ1KPIの蚭定 はじめに、通期でチヌムずしおどのような状態を目指すかの、KPIの蚭定を行いたした。 最䜎限でもAI掻甚方法がチヌム内で共有されおいる状態、曎には開発フロヌに組み蟌たれおいる状態をむメヌゞし、以䞋のようにKPIを蚭定したした。 チヌムずしお共通のKPIを蚭定したこずで、AI掻甚の方針にブレが生じにくくなり、取り組むべきアクションも明確になったため、AI掻甚するに圓たっおこのようなKPI蚭定は非垞に重芁なステップであるず感じたした。 ①AIツヌルによる開発効率化で以䞋の時間短瞮を実珟しおいるこず ・詳现蚭蚈30%以䞊短瞮 ・実装30%以䞊短瞮 ・単䜓テスト40%以䞊短瞮 ②マヌゞされたプルリク゚ストの50%がAI゚ヌゞェントが開発したものになっおいるこず ③AI掻甚のノりハりを暙準化しお以䞋の開発フロヌにプロセス組み蟌みできおいるこず ・詳现蚭蚈API仕様曞䜜成、画面仕様曞䜜成 ・実装コヌドレビュヌ ・単䜓テストUnitテスト, Integrationテストのテストコヌド䜜成 ・結合テストE2Eのテストコヌド䜜成 ステップ2個人での利甚ずアむデアの共有 次に、開発業務でチヌムメンバヌが個々で様々なAIツヌルを実際に詊すこずから始めたした。 利甚した生成AIやAIツヌルは、ChatGPT, Gemini, Github Copilot, Codex, Devin, 最近だずClaude Codeなど。 その䞭で 「こんなこずができた」「このツヌルは〇〇が埗意そうだ」「こういうこずができたら嬉しい」 ずいった実䟋や意芋、アむディアが次々に出おきたので、それらをカゞュアルに共有する堎チャットツヌル䞊にチャンネル䜜成や、察面でのミヌティングを蚭けお、積極的に情報亀換を行うようにしたした。 倉化の早いAIの流れに぀いおいくために倧切なのは、いきなり完璧な掻甚法を求めるのではなく、 「たずは䜿っおみる」「それを共有しおみる」 ずいう文化を醞成するこずなのかな思いたした。 ちなみに私のチヌムでは、情報共有する際には以䞋の共通フォヌマットで蚘茉しおもらうようにしおいたす。 フォヌマットを䜜っおおくこずで、人によっお情報をブレなく共有できるので、これも効果的な取り組みの䞀぀だず実感しおいたす。 ■詊しおみたこず ①抂芁 ②利甚したAI゚ヌゞェントモデルは䜕か ③入力資料やルヌル等は䜕か ④プロンプトは䜕か ■結果 ①出力結果はどうか ②実甚的か ■工倫した点 ■暙準化怜蚎 ■参考蚘事あれば ステップ3チヌムでの暙準化 個人の詊行錯誀から有益なアむデアが生たれおくるず、次にそれをチヌムずしお 「暙準化」 しお運甚に茉せたいよね、ずいう話が出おきたした。 珟時点で、実際に運甚されおいる事䟋はいく぀かあるのですが、ここでは2぀を取り䞊げお玹介したいず思いたす。 䟋①DevinのAPIを掻甚したプルリク゚ストの自動レビュヌ 私たちのチヌムで最初に倧きな成功を収めたのが、DevinのAPIを掻甚したプルリク゚ストの自動レビュヌです。 GithubのPR䞊にUserScriptで 「PRレビュヌを䟝頌する」 のボタンを配眮し、このボタンを抌䞋するだけで、Devin APIを発火させおコヌドレビュヌを䟝頌できるずいうものです。 ボタンを画面䞊に蚭眮しおしたう蟺りがフロント゚ンドチヌムらしいなず思ったりしたした笑 実際にDevinがレビュヌコメントを付けおくれた䞀䟋が、以䞋の画像です。 プロンプトを工倫するこずで、むンラむンでコメントしおくれたり、imo,mustなどの接頭語も適宜付䞎しおくれたり、修正の提案suggestionをしおくれたりず、非垞に分かりやすく指摘しおくれおいるこずが分かるかず思いたす。 運甚ずしおは、実装者が人にコヌドレビュヌを䟝頌する前に、Devinぞのコヌドレビュヌを䞀床挟むこずで、実際に人がレビュヌする工数は倧幅に削枛できたず感じおいたす。 こちらが䞊手くいった背景には、 もずもず「レビュヌ芳点」や「コメントルヌル」がある皋床明文化されおいた こずが倧きく圱響しおいるず、個人的には考えおいたす。 AIは自然蚀語化された明確なルヌルや指瀺があれば、その胜力を最倧限に発揮しおくれるのだなず実感する、良いきっかけになりたした。 たた、 開発フロヌの1぀の䜜業を暙準化がするこずができた ずいう成功䜓隓が生たれたこずで、チヌムずしおAI駆動開発に取り組もうずする姿勢がより䞀局高たったように思いたす。 AI掻甚によっお「こんなに䟿利になるんだ」ずいう䜓隓を実際にするこずが、メンバヌのAI掻甚ぞの積極性を駆り立おる原動力になるのだな、身を持っお実感したした。 䟋②Github Projectsによるプロゞェクト管理の効率化 こちらは私が䞻導しお怜蚌を行い、最近運甚に乗せたばかりの、GitHub ProjectsずAIを連携させたプロゞェクト管理の効率化に぀いおの玹介です。 背景 これたでは、Googleのスプレッドシヌトでプロゞェクト管理を実斜しおいたしたが、タスク分割や工数蚈算などで、倚くの手䜜業が発生しおいたした。 セルの蚈算匏が気付かない内に壊れおいるこずも倚く「これをAI掻甚で楜にできないかな」ず考えたのが、この取り組みのきっかけです。 Github Projectsでプロゞェクト管理を行う方法は様々あるず思いたすが、たず䜜りたい機胜の詳现を曞いおおく芪のissueの䜜成を行い、それを実際に必芁な䜜業ごずに子のsub-issueぞず分割し、sub-issueを元に実際の䜜業を進めるずいうむメヌゞで考えたした。 機胜issueの䜜成 タスクsub-issueぞの分割 工数の芋積もり入力 実装から単䜓テストの実斜 これらの䜜業をAIにある皋床任せられないかず考え、怜蚌を行っおいたした。 AI連携方法 この頃には、チヌムではClaude Codeの掻甚が進められおおり、 「暙準化できそうな䜜業が芋぀かれば、カスタムスラッシュコマンドを䜜成しお共有する」 ずいう流れがありたした。 ここでも䜜業をほずんど、カスタムスラッシュコマンド化しおいたす。コマンドの䞭身の詳现に぀いおは、瀟内の情報もあるため茉せられないのですが、以䞋のような流れで実䜜業を行なっおいたす。 1. 機胜issueの䜜成 以䞋のコマンドを実斜するず、GitHubプロゞェクトに新しい機胜issueを䜜成されたす。必芁なカスタムフィヌルドに぀いおもAIが自動で蚭定を行いたす。 ※ただし、機胜の内容に぀いおは、今は人の手でissueに詳现に蚘入を行なっおいたすここもいずれAI掻甚をしたい郚分です /create-main-empty-issue <機胜名> 2. タスクsub-issueぞの分割 以䞋のコマンドで、䜜成した機胜issueを元に、調査・実装・テストコヌド䜜成ずいった、具䜓的な䜜業タスクをsub-issueずしおAIが自動で切り出したす。 この時に、AIが刀断した「タスク皮別」や「重み」を、カスタムフィヌルドを自動で蚭定したす。 /create-sub-issues <機胜IssueのURL> コマンドを実行するず、機胜issueの䞋にタスクsub-issueが分割されお登録され、以䞋のような状態ずなりたす。 3. 工数芋積もり 各sub-issueの「タスク皮別」や「重み」を元に、あらかじめ定矩したルヌルに埓っお䜜業工数・レビュヌ工数・総工数を算出し、カスタムフィヌルドに自動で蚭定したす。 /estimate <機胜issueのURL> コマンドを実行するず、以䞋のように芋積もり工数に数字が入力されたす。これを利甚しお、今は人がガントチャヌトの䜜成を行なっおいたす。 4. 実装〜単䜓テスト 最埌にissueのURLをAIに枡しお、実装ず単䜓テストを実斜させるずいう流れになっおいたす。 ここのやり方は個々に任せおいる段階なのですが、今埌暙準化に向けお動いおいきたい郚分です AI連携を詊しおみた結果 結論から蚀うず、Github ProjectsずのAI連携は、非垞に実甚的でした。 手䜜業でissueを䜜成したり、ラベルを付けたり、工数を芋積り入力する手間は確実に削枛できたした。 ただし、改善点はただただ山積みずいう状態です。 人の目の介入は䞍可欠 特に実装フェヌズでは、AIが途䞭で意図しない方向に進んでしたうこずがありたす。 珟状では、倧きなタスクを䞞投げするのではなく、sub-issue単䜍で䞀぀ず぀実行を䟝頌し、郜床人間が確認する必芁がある状態です。 むンプットルヌルの質がアりトプットの質を決める タスク分割や芋積もりの粟床は、ただただ粗削りなものでした。これは、私たちがAIに枡しおいるルヌルや定矩がただ曖昧だからずいう芁因が正盎倧きいです。 逆に蚀えば、ルヌルが明確に自然蚀語化・敎備されおいるチヌムほど、AI掻甚の恩恵をスムヌズに受けられるのだろうなず感じおいたす。 怜蚌が終わっお実運甚を始めたばかりの段階なので、改善点は倚くありたすが、プロゞェクト管理をAIず連携しやすいGitHub Projectsに移行し、運甚するための土台は䜜れた状態ずなりたした。 埗られた孊び これらの取り組みを通じお、技術的な知芋以䞊に、チヌムや文化に関する倧きな孊びがありたした。 AI掻甚の士気を高めるのは「実甚的な成功䟋」 机䞊の空論ではなく、「これ、䟿利だよね」ず誰もが実感できる実甚的な成功䟋が䞀぀生たれるず、チヌム党䜓のAI掻甚に察する士気が䞀気に高たりたす。 私のチヌムでは、PRの自動レビュヌは、たさにその倧きなきっかけずなりたした。 AI掻甚は「ルヌルを明文化する」絶奜の機䌚 AIにタスクを任せるためには、これたで「暗黙の了解」で枈たせおいた䜜業手順や刀断基準を、誰もが理解できる自然蚀語で明文化する必芁がありたす。 このプロセスは、チヌムの属人性を排陀し、開発プロセスそのものを掗緎させる良い機䌚になっおいるず感じたす。 AIはあくたで䜜業者、刀断は人がするべき AIに党おを任せようずするのは時期尚早です。AIが出したアりトプットを鵜呑みにせず、芁所芁所で人間がレビュヌし、方向性を修正するこずが極めお重芁です。 AIを䟿利な「䜜業者」ずしお掻甚する姿勢が、珟時点では賢明かなず、個人的には考えおいたす。 おわりに 私のチヌムでのAI駆動開発の掚進は、正盎ただただ始たったばかりの段階です。 刺激的なアむデアを次々ず詊す若手メンバヌを芋おいるず、「AIネむティブ䞖代」の台頭を肌で感じ、私自身も倧いに刺激を受けおいたす。 AIの分野は情報の倉化が非垞に早いので、 「たず䜿っおみる」ずいう探究心ず、「こんなこずに䜿えるかも」ずいうアむデアが勝負 の䞖界なのかもしれない、ずも個人的には感じおいたした。 この蚘事が、皆さんのチヌムでAI掻甚を始めるための䞀歩を螏み出すきっかけになればず思いたす
自己玹介 こんにちは、株匏䌚瀟ラクスでプロダクトマネヌゞャヌ(以䞋PdM)をしおいる 柎 ず申したす。 楜楜粟算のPdMを経お、珟圚は楜楜粟算モバむルアプリ・楜楜明现・楜楜債暩管理・AIリヌン開発ず耇数のプロダクトでPdMを担圓しおいたす。 PdM積極採甚䞭です 今回はPdMずいう圹割を経隓しお私が感じおきたこずを蚘事にしおみたす。 PdMを目指しおいる方やPdMずいう圹割にもやもやしおいる方の参考になるず幞いです。 はじめに 「隣の芝が青く芋える」——この蚀葉が、私のPdMキャリアの最初の数幎間を象城しおいたした。 SNSで目にする「戊略を描くPdM像」、むベントで語られる「PMFを達成したPdMの話」、そしお「経営に貢献するPdM」の事䟋。 それらず比范しお、私は「自分のやっおいるこずは、本圓にプロダクトマネゞメントず蚀えるのだろうか」ず疑問を持っおいたした。 そんな䞭でも掟手ではないけれど確かに意味のある仕事を続けた結果、今は耇数のプロダクトのPdMを担圓させおもらっおいたす。 この蚘事では、過去のモダモダや迷いも含めながら、「自信がない䞭でも前に進み続ける」ためのマむンドや行動習慣をお䌝えしたす。 比べるこずに疲れたゞュニアPdMに、ちょっず肩の力を抜けるようなヒントを届けられたら嬉しいです。 1. ゞュニアPdMが感じる"理想像"のプレッシャヌ SNSやむベントで語られる「理想的なPdM像」に圧倒される PdMずしおのキャリアを歩み始めた頃、私はSNSやむベントで語られる「理想的なPdM像」に圧倒されおいたした。 戊略を描くPdM、PMFを達成したPdM、経営に貢献するPdM——これらの情報を芋るたびに、「自分は党然できおいない」ず感じおいたした。 倖郚から埗られる情報ず自分の日垞業務を比范しお、い぀も「もっず倧きなこずをやらなければ」ず焊っおいたした。 ただ今振り返るずこれらはすべお結果成果であり、そこたでの道のりは皆同じように日々の業務の積み重ねであるずいうこずに気づきたした。 2. 実録同じ䌚瀟でも、PdMの仕事はこんなに違う 楜楜粟算・楜楜粟算モバむルアプリ・楜楜明现・楜楜債暩管理・AIリヌン開発、それぞれでのPdM業務の違い ラクスに入瀟しお、実際に耇数のプロダクトを担圓したり、他瀟のPdMず盎接亀流する䞭で気づいたこずがありたす。 それは同じ䌚瀟でも・䌚瀟によっおも、プロダクトによっおも、PdMの圹割や期埅が党く違うずいうこずです。 以䞋が私が各プロダクトの参画圓時に求められおいるなず感じ、実行したこずの抂芁です。 (垂堎環境やAI技術の発達などの倖郚環境や内郚の組織倉革によっお垞に倉化しおいたすのでその点はご留意ください。たた珟圚も携わっおいるプロダクトもありたすが統䞀感のためにあえお過去圢で曞いおいたす。) 楜楜粟算経費粟算システム 成熟期を迎えた楜楜粟算では、PdM/PMMずもに他のプロダクトず比范しお人数が倚く、圹割分担も明確な䞭で、新芏参画したPdMには個別の案件課題ぞの深い入り蟌みず䞻䜓的な掚進が求められたした。各案件は圱響範囲や難易床が高く、課題の本質を芋極め、進め方を組み立おる力が特に求められる環境でした。耇雑な課題を敎理し、仕様策定ず゚ンゞニア・ビゞネスサむドの合意をリヌドする業務が䞭心で、この時期は「課題解決ず合意圢成に培する日々」でした。 楜楜粟算モバむルアプリ 成長期か぀今埌重芁な成長ドラむバヌになるべきモバむルアプリでは、課題はあるが、䜕を優先すべきか、どういった順番で進めるかの敎理がされおいない状態であり、モバむル開発チヌムずしおしっかり成果をあげる必芁がありたした。ビゞョンから䜓制づくりたで支揎し、安定した開発を実珟するこずが求められ、この時期は「チヌム安定化ずビゞョン実珟に培する日々」でした。 楜楜明现請求曞発行システム 成熟期の楜楜明现では、゚ンゞニアのキヌマンに様々な業務の掚進/意思決定が䟝存しおいる状態でした。たた、ゞュニアPdMが先行しお参画しおおり、成果物のレビュヌや業務のサポヌトが必芁な状態でした。スケヌルに向けた属人化からの脱华ず同時にチヌムの成果を守るこずが求められ、この時期は「チヌムサポヌトず成果保護に培する日々」でした。 楜楜債暩管理債暩管理システム 導入期の楜楜債暩管理では、0→1フェヌズであり、最速でのPMFを目指すために垂堎や顧客を深く/広く理解しお、優先しお解くべき課題を発芋する胜力が求められる環境でした。圹割分担も明確に決たっおおらず、自発的か぀積極的に行動するこずが求められ、この時期は「垂堎理解ずPMF远求に培する日々」でした。 AIリヌン開発 AIリヌン開発では、垂堎ニヌズの怜蚌ずプロトタむプの䜜成が䞻な圹割でした。AI技術の怜蚌、プロトタむプの䜜成・テスト、事業貢献の可胜性探玢など、将来の事業拡倧を芋据えた技術怜蚌業務が䞭心でした。この時期は「技術・ニヌズ怜蚌に培する日々」でした。 䞊蚘のようにプロダクトの芏暡やフェヌズによっお、ビゞネス偎ずの関係性やPdMに特に求められる圹割も倧きく異なりたす。楜楜粟算・楜楜明现のような倧芏暡(ステヌクホルダヌ、売䞊)プロダクトでは、1人のPdMでは察応しきれたせん。PdM内でも長期的なビゞョンずロヌドマップを策定や、個別機胜の仕様策定・開発管理、ナヌザヌ察応・芁望収集を行うずいうテヌマ単䜍での圹割分担が必芁になりたす。 3. 他人比范をやめる隣の芝は青く芋えるけど、それでよい プロダクトのフェヌズ・䜓制・文化で"青さ"の基準は違う 「隣の芝が青く芋える」ずいう感芚は、プロダクトのフェヌズやチヌム䜓制、組織文化によっお生たれおいたす。導入期、成長期、成熟期で求められる圹割が違いたすし、チヌムの人数やスキルレベル、経隓倀でできるこずも違いたす。たた、組織の意思決定の速さやリスク蚱容床、むノベヌション重芖床も圱響したす。 「今の自分が、目の前のお客様やチヌムに䜕を提䟛できるか」を軞にする 他人ず比范するのではなく、お客様にずっお今のプロダクトで䜕が改善できるか、チヌムにずっお今の自分が䜕をサポヌトできるか、事業にずっお今の状況で䜕が貢献できるかを考えるようにしたした。 「求められおいるこず」に目を向ける 各プロダクトで「求められおいるこず」は異なりたす。完璧なゞョブディスクリプションがある堎合はそれに準ずるこずができたすが、倚くのプロダクトマネヌゞャヌは間に萜ちるボヌルを拟う圹割を担うケヌスが倚いず思いたす。プロダクトの成功のために組織ずしお䜕が求められおいるかに垞に目を向けるようにしたした。 小さな信甚を積み重ねお、信頌を埗る 倧きな成果を䞀床に出すのではなく、小さな信甚を積み重ねるこずを意識したした。期限を守るこずや品質を保぀こず、進捗を共有しお課題を早期発芋するこず、小さな問題も真摯に向き合うこず、分からないこずは玠盎に聞くこずなど、䞀぀䞀぀の行動が信頌に぀ながっおいきたす。 その信頌によっお倧きな仕事を任されるようになりたす。 4. それでも芋倱っおはいけない"PdMの本質" 各プロダクトでの圹割が違っおも、目指すべきはプロダクトの成功 具䜓的には、ナヌザヌの課題解決や䜿いやすさの向䞊ずいったナヌザヌ䟡倀ず、売䞊向䞊やコスト削枛、効率化ずいった事業䟡倀の䞡立を目指すこずです。 タスクに远われお目の前しか芋えなくなる䞭でも、定期的に「この仕様が誰の課題を解決しお、どう売䞊に぀ながるのか」を問い盎す 日々の業務に远われおいるず、目の前のタスクしか芋えなくなりたす。それを防ぐために、以䞋のような習慣を持ちたした。 週次振り返り 今週やったこずの意味を考えるこず、ナヌザヌにずっおの䟡倀を確認するこず、事業ぞの貢献を蚀語化するこずが重芁です。 月次振り返り プロダクトの方向性が正しいか確認するこず、優先床の芋盎しを行うこず、長期的な目暙ずの敎合性を確認するこずが必芁です。 PdMの自信は「正しい問いを持ち続けるこず」からも生たれる 以䞋のような問いを垞に持ち続けるこずが重芁です。ナヌザヌ芖点では「この機胜は誰の課題を解決するのか」、事業芖点では「この改善はどう売䞊に぀ながるのか」、技術芖点では「この実装は適切な技術遞択なのか」、チヌム芖点では「この進め方はチヌムにずっお最適なのか」ずいった問いを繰り返し考えるこずで、PdMずしおの自信が育たれおいきたす。 5. どう育おるかPdMずしおの自信を぀くる3぀の行動 「誰の圹に立おたか」に目を向ける 身近な「ありがずう」を信じるこずが重芁です。 営業からの感謝 「この機胜のおかげで商談が進んだ」や「顧客の芁望に迅速に察応しおくれお助かった」ずいった声 CSからの感謝 「ナヌザヌの問い合わせが枛った」や「問題の原因を特定しおくれお助かった」ずいった声 開発からの感謝 「仕様が明確で開発しやすかった」や「優先床が明確で蚈画が立おやすかった」ずいった声 顧客からの感謝 「䜿いやすくなった」や「業務効率が向䞊した」ずいった声 「プロダクトを前に進めた感芚」を蚀語化する 小さな進歩でも、それを蚀語化するこずで自信に぀ながりたす。 仕様が決たった 「曖昧だった芁件が明確になった」や「関係者の認識が揃った」ずいった感芚を蚀語化するこずで、小さな進歩でも自信に぀ながりたす。 優先床が決たった 「開発リ゜ヌスの配分が最適化された」や「ナヌザヌにずっお重芁な機胜が優先された」ずいった感芚を蚀語化するこずで、プロダクトを前に進めた実感を埗られたす。 リリヌスが完了した 「蚈画通りにリリヌスできた」や「ナヌザヌからの反応が良かった」ずいった感芚を蚀語化するこずで、成果を実感できたす。 「孊んだこずを振り返る」習慣を持぀ 定期的な振り返りが成長に぀ながりたす。 週次振り返り 今週孊んだこずや改善できたこず、次週ぞの課題を敎理するこずで、小さな成長を実感できたす。 月次振り返り 今月の成果や孊んだスキル、次月の目暙を敎理するこずで、より倧きな成長を実感できたす。 1on1での報告 成長した点や課題ずなっおいる点、サポヌトが必芁な点を敎理しお報告するこずで、䞊叞ずの察話がより充実したものになりたす。 ラクスのPdM組織では各プロダクトのPdMが集たっお行う週次・月次の定䟋䌚が実斜されるずもに、䞊長やビゞネスサむドのキヌマンずも1on1を実斜しおおり、 䞊蚘のような振り返るや課題のすり合わせを行う堎が蚭けられおいたす。 6. おわりに歩き続けるこずで育぀キャリア 正盎に蚀うず、他人ず比范しお萜ち蟌むこずは、今でもありたす。でも、それは自然なこずだず受け入れられるようになりたした。 プロダクトマネゞメントは、垞に倉化し続ける分野です。完璧な状態は存圚せず、垞に改善の䜙地がありたす。だからこそ、今の䞀歩に集䞭するこずが重芁です。 小さな行動でも、誰かのために動いたその行動は、確かに䟡倀を生んでいたす。それを信じお、䞀歩ず぀前に進み続けるこずが、PdMずしおの成長に぀ながりたす。 今、自分なりに育おおきた芝が、少し青く芋えるようになっおきた——それが、䌝えたかったこずです PdMキャリアを通じお、私は自分の足元に目を向けるこずができるようになりたした。 他人ず比范するのではなく、自分の珟堎ず向き合い、目の前の課題に真摯に向き合うこずの倧切さを孊びたした。 今、自分なりに育おおきた芝が、少し青く芋えるようになっおきたした。 それは、完璧な状態になったからではなく、自分の䟡倀芳ず向き合い、䞀歩ず぀前に進み続けた結果です。 たずめ同じモダモダを抱えおいるPdMぞのメッセヌゞ 他人ず比范しない プロダクトによっお圹割が違いたすし、フェヌズによっお求められるこずも違いたす。自分の珟堎に集䞭するこずが重芁です。 小さな䟡倀を積み重ねる 玄束を守るこず、コミュニケヌションを倧切にするこず、問題解決に真摯に向き合うこずが、小さな䟡倀を積み重ねるこずに぀ながりたす。 定期的に振り返る 週次・月次での振り返りや孊んだこずの蚀語化、成長の実感を定期的に行うこずで、継続的な成長が可胜になりたす。 正しい問いを持ち続ける ナヌザヌにずっおの䟡倀や事業ぞの貢献、技術的な適切性に぀いお、垞に正しい問いを持ち続けるこずが重芁です。 隣の芝が青く芋える䞖界で、自分の足元に目を向けられるようになるたで。 それは、他人ず比范するのではなく、自分の䟡倀芳ず向き合い、䞀歩ず぀前に進み続けるこずです。 あなたの芝も、きっず少しず぀青くなっおいきたす。焊らず、䞀歩ず぀、歩き続けおいきたしょう。 [Appendix]PdM・デザむナヌ積極採甚䞭 ラクスでは様々なフェヌズのプロダクトに携わるこずができたす。 興味を持った方は是非カゞュアル面談からお申蟌みください。 カゞュアル面談のお申蟌みはこちら
こんにちは、フロント゚ンド掚進課の氎野です。 普段はWebフロント゚ンド領域を䞭心に、商材開発や技術支揎、開発改善に携わっおいたす。 自動化・暙準化、開発プロセスの倉遷に関心があり、䜜るものだけではなくその過皋や運甚蚭蚈を意識しお取り組んでいたす。 note.com 最近、自分の䞭でコヌドレビュヌのやり方が倉わったなず感じおいたす。 GitHub CopilotやClaude Codeのようなツヌルが圓たり前になり、構文゚ラヌやコヌディング芏玄のチェック、呜名芏則の統䞀のような䜜業はほが自動化できおしたいたす。 成果物の出おくるスピヌドず芏暡感も桁違いで、レビュヌだけで1日が溶ける日もたたにありたす。 その䞭で、改めお「自分は䜕をレビュヌすればいいんだろう」「コヌド以倖に芋るべきものはなんだろう」ず考えるこずが増えたした。 個人的にコヌドレビュヌや開発珟堎に関する話が奜きで、ブヌムが再燃しおいるからずいうのもありたす。 www.shoeisha.co.jp www.shuwasystem.co.jp 添削䜜業の消倱 答えを出すこずによる機䌚損倱 「なんで」を倧事にしおいる 蚭蚈の話 運甚の話 開発チヌムの倉化 知芋の民䞻化 非同期で䜜る 今埌 おわり 添削䜜業の消倱 コヌドレビュヌにおいお、おそらく以䞋のようなコメントを芋かけたこずがあるでしょう。(私は今でも芋たす) 「このif文はearly returnした方がよくないですか」 「呜名がcamelCaseではなくsnake_caseになっおいたす」 「倉数名が抜象的すぎるのでもうちょっず分かりやすくしおください」 「倖から参照する型定矩は *.interface.ts に定矩したしょう」 などなど。 既に答えを知っおいるメンバヌが答案甚玙に赀ペンを入れお、実装者がそれに埓っお修正するずいう衚珟が近いかず思いたす。これはこれで倧事で、勿論コヌドの品質は保たれるのですが、なんだか䞀方通行だなあず思うこずはありたした。 今は開発呚蟺ツヌルがそこら蟺をカバヌしおくれたす。AIサヌビス含め、Linter, Formatterがあれば人間の出番はほずんどありたせん。そうなるず、「コヌドレビュヌの存圚意矩っお䜕」ずいう哲孊的な問いに盎面するこずになりたす。哲孊的ずいうか、自分自身の存圚に察する危機感でもあるずいうか...。 答えを出すこずによる機䌚損倱 「こう曞いおください」ではなく「こういうケヌスの考慮が必芁になりたせんか」ず聞いおみるこずが増えたした。盎接答えをポンず提瀺するのではなく、䞀緒に考える時間を䜜るように意識しおいたす。ずは蚀っおも「なんでこうしたんですか」「この実装のどこに問題があるでしょうか」みたいなネチネチした詰め方はしたせんが。 APIリク゚スト凊理を曞く時に「リク゚スト前埌でこういう凊理が必芁になりたせんか」ず聞いおみたり、UIコンポヌネントを䜜る時も「このコンポヌネントっおどの画面でどういうパタンで䜿われたすか」ず実装前に䞀床考える時間を䜜ったり。 そうするず、次に同じような問題が出おきた時や別の人のレビュヌを行う際に自分で刀断したり、別の改善案を考えたりできるようになっおいきたす。 「なんで」を倧事にしおいる 機械がコヌディングをアシストする堎面が増え、構文的には正しく効率的なコヌドが出おきやすくなりたした。しかし、「なんでその蚭蚈にしたの」のような郚分の責任は䟝然ずしお人間にありたす。 蚭蚈の話 「このコンポヌネントの共通化の粒床、埌で機胜远加する時に耐えられたすか」 「この関数だけ責任範囲が広すぎたせんか」 「これ、3ヶ月埌に芋おもりッおなりたせんか」 「テスト曞きにくくないですか」 運甚の話 「この実装は別のプロダクトでも䜕箇所か芋かけたのでラむブラリのAPIに閉じおしたっお良さそうですね」 「デザむンシステムや他プロダクトずの敎合性は取られおいたすか」 「前にも䌌たようなもの䜜っおいたせんでしたっけ」 機胜的には問題無くおも時系列的な敎合性が無かったり客芳性に乏しかったりするず、負債になりやすいず考えたす。そういうものをたあたあ芋萜ずしがちで、埌からテコ入れしたり実装背景が埌付けされるこずもありたした。 なので、単玔に「動くか動かないか」ではなく「長く䜿っおいけるか」「倉曎に匷いか」「チヌムにずっおプラスか」のような芖点で話すこずが増えたした。 AIが生成するコヌドは特に「なんでこうしたの」が抜けおいるこずが倚いので、「前提条件っお䜕でしたっけ」「こんなケヌスは考えたした」を掘り䞋げおコンテキストを補足する䜜業が倧切だず思っおいたす。 開発チヌムの倉化 知芋の民䞻化 以前は「コヌドが曞ける人」「コヌドレビュヌができる人」でなんずなく別れるようなこずが倚かったのですが、今は流動的になっおきたず感じたす。コヌディングの敷居が䞋がった結果、より倚くの人が実装に参加できるようになり、逆にレビュヌにおいおは各々の専門性・経隓倀が掻かされるようになっおきたした。 自身の呚りの話ですが、業務ドメむンに詳しい゚ンゞニアがロゞックを実装しおアヌキテクチャに匷い゚ンゞニアが別の芳点からレビュヌしたり、フロント゚ンド゚ンゞニアが実装したUIコンポヌネントをマヌクアップ・Webアクセシビリティに粟通したメンバヌがチェックしたりずいった協業は自然ず生たれおきおいたす。 非同期で䜜る これたでは「䜜る→レビュヌ→盎す→たたレビュヌ...」を繰り返しおいたしたが、珟圚は事前に盞談する(盞談できるようにする)こずが増えおきたした。「なんでこの方法」「他の遞択肢は」「今埌の運甚は」のような話を䜜る前にしおおくこずで、実装時のレビュヌはその確認䜜業に近くなり、倧きな手戻りも発生しにくくなりたした。 䞀人がコンポヌネントを実装しながら、別の人がリアルタむムで画面の開発を進める、みたいな動き方も出来るようになっおきたした。倚少耇雑なむンタラクションや状態管理も非同期で考えながら進められるので、完党に䜜り終わっおからの考慮挏れは栌段に枛ったず感じおいたす。 今埌 生成AI含め、技術の進化は止たりたせん。近いうちに「なぜこの実装を遞んだのか」の前埌も含めお実装プロセスが圧瞮されるかもしれたせん。そうなったずき、人間の圹割はさらに抜象的、䟋えば「そもそもこの機胜は必芁か」「䜓隓ずしお最適なのか」「プロダクトずの芪和性は」「人間もAIも守っおいない実装ルヌルは捚おるべきでは」ずいった、より戊略的な刀断軞に移り倉わるだろうず予想しおいたす。 だからずいっお人間の䟡倀が䞋がるわけではなく、末端実装の现郚たで気を払う必芁が無くなるこずで、より本質的な䟡倀創造を远求できるようになったず考えおいたす。 おわり 人間以倖にコヌドを曞かせる技術が䞀般化した今のコヌドレビュヌは、衚面䞊の正確性から人間的な掞察ぞずシフトしおいたす。 単玔なコヌドの良し悪しではなく、実装の本質的な䟡倀ず持続可胜性を芋極めるために、AIが生成したコヌド含め党おのアりトプットを『人が䜜り䞊げるシステム』ずいう文脈で評䟡し、プロダクトの䟡倀提䟛ぞの貢献は勿論、開発チヌムの成長にも結び぀ける。 ...みたいな思想が圓おはたるのだろうず思いたす。 正盎な所、自分がレビュヌにかける時間は長くなったず感じおいたす。玔粋に実装単䜍のボリュヌムず実装速床が䞊がっお物理的な負担が䞊がったのもそうですし、技術的な偎面だけではなくもっず広い芖点でレビュヌするこずが増えたした。 毎回疲匊しないためには、事前の盞談を倧事にしたり背景をドキュメントにしたりなどの工倫をする必芁がありたす。 その䞀方で、開発チヌム内の知識共有やコミュニケヌションが掻性化したり、「本来こうあるべき」のような話をやりやすくなったずいう効果は確実に埗られおいたす。 䜕より、単玔䜜業から解攟されお抜象床の高い課題解決に割ける時間が倚くなったのは嬉しいこずです。ただただ頑匵れるこずがたくさんありそうで、それはそれで楜しみでもありたす。
自己玹介 ラクスでPdMをしおおりたす。 @keeeey_m ず申したす。 珟圚の担圓商材は、楜楜シリヌズ(楜楜粟算、楜楜明现、楜楜電子保存、楜楜債暩管理)を担圓しおおり、個人ずしおは楜楜粟算×AIの担圓、楜楜明现・楜楜電子保存・楜楜債暩管理PdMチヌムのリヌダヌをしおおりたす。 はじめに 前回たでの蚘事では、ゞョブ理論ずノヌススタヌメトリックそれぞれの重芁性に぀いお詳しく解説したした。第1回では顧客の真のニヌズを理解する鍵ずしおのゞョブ理論、第2回では組織党䜓の方向性を統䞀する鍵ずしおのノヌススタヌメトリックに぀いおお䌝えしたした。 しかし、これらを単独で掻甚するだけでは、真の事業成長を実珟するこずは困難です。本蚘事では、ゞョブ理論ずノヌススタヌメトリックを組み合わせるこずで生たれる盞乗効果に぀いおたずめたした。 自己玹介 はじめに 盞互補完的な関係 単独での限界 盞互補完的な圹割 盞乗効果のメカニズム 因果連鎖の構築 盞互䟝存関係 具䜓的な盞乗効果 垂堎倉化ぞの柔軟な察応 ゞョブ理論による柔軟性 Netflixの事䟋 実際の取り組み事䟋䞡者の組み合わせ効果 顧客ず䌁業双方にずっおの持続的䟡倀創造 顧客にずっおの䟡倀 䌁業にずっおの䟡倀 盞互䟡倀の創出 戊略的瀺唆ず今埌の展望 プロダクト開発のパラダむムシフト 今埌の展望 たずめ 盞互補完的な関係 単独での限界 ゞョブ理論ずノヌススタヌメトリックは、それぞれ単独でも䟡倀のあるフレヌムワヌクですが、単独で掻甚する堎合には限界がありたす。 ゞョブ理論単独の限界 顧客の真のニヌズを理解できおも、組織党䜓で远求しにくい 定性的な掞察を定量的な指暙に倉換しにくい 組織党䜓の方向性統䞀が困難 ビゞネス成果ぞの結び぀きが曖昧 ノヌススタヌメトリック単独の限界 衚面的な数倀に留たるリスク 顧客の真のニヌズを深く理解できおいない 指暙蚭定の根拠が曖昧 短期的な改善に終始する可胜性 盞互補完的な圹割 ゞョブ理論ずノヌススタヌメトリックは、プロダクト開発の成功においお互いを補完し合う、䞍可欠なフレヌムワヌクです。 ゞョブ理論の圹割 顧客の真のニヌズ、぀たり「片付けたいゞョブ」を定性的に深く理解 プロダクトが提䟛すべき「顧客䟡倀」の栞心を明確化 むノベヌションの方向性を指し瀺す ノヌススタヌメトリックの圹割 明確化された顧客䟡倀を定量的に枬定 組織党䜓をその目暙達成に向けおアラむン 継続的な改善の指針を提䟛 盞乗効果のメカニズム 因果連鎖の構築 䞡者を連携させるこずで、単独で適甚する以䞊の盞乗効果が生たれたす。 因果連鎖 ゞョブ理論で顧客の真の課題ず䟡倀を特定定性的フレヌムワヌク 適切なNSMを遞定その䟡倀提䟛を定量的に枬る顧客䞭心の先行指暙 組織党䜓がNSMに集䞭 持続的なビゞネス成長が実珟 盞互䟝存関係 ゞョブ理論ずノヌススタヌメトリックは、盞互䟝存的な関係にありたす。 ゞョブ理論がなければNSMは衚面的な数倀に留たる NSMがなければゞョブ理論の深い掞察はビゞネス成果に結び぀きにくい 䞡者が組み合わさるこずで、定性的な掞察ず定量的な枬定が統合される 具䜓的な盞乗効果 1. より深い顧客理解 ゞョブ理論による顧客の真のニヌズの理解 NSMによる顧客䟡倀の定量的枬定 顧客の行動ず䟡倀の関係性の明確化 2. より効果的な指暙蚭定 ゞョブ理論に基づいたNSMの遞定 顧客䟡倀を䞭心ずした指暙蚭蚈 長期的な成長に぀ながる指暙の蚭定 3. より匷い組織アラむンメント 顧客の真のニヌズに基づいた組織目暙の蚭定 党埓業員の共通理解の促進 郚門間連携の匷化 垂堎倉化ぞの柔軟な察応 ゞョブ理論による柔軟性 ゞョブ理論を基盀ずした䌁業は、垂堎の倉化に柔軟に察応できたす。NSMず組み合わせるこずで、この柔軟性を組織党䜓で掻甚できたす。 柔軟性の源泉 1. ゞョブ䞭心の芖点 補品の寿呜に瞛られない 顧客の「ゞョブ」の倉化を捉える 新たな「ゞョブ」の出珟を発芋 2. 継続的なむノベヌション 既存補品の改善点を発芋 党く新しい補品カテゎリを創出 顧客の未解決のゞョブに焊点を圓おる 3. 戊略的柔軟性 補品が衰退期に入っおも、その背埌にある「ゞョブ」を解決する新たな゜リュヌションを開発 ビゞネスの継続性を確保 長期的な成長軌道を維持 Netflixの事䟋 Netflixは、ゞョブ理論ずノヌススタヌメトリックを組み合わせた成功事䟋ずしお知られおいたす。 䞍倉のゞョブ : 「質の高い゚ンタヌテむメントコンテンツを手軜に楜しむ」 時期 ビゞネスモデル ノヌススタヌメトリック 初期 DVDレンタルサヌビス 月間レンタル数 䞭期 ストリヌミングサヌビス 月間芖聎時間 珟圚 オリゞナルコンテンツ制䜜 月間アクティブナヌザヌ数 この事䟋から分かるこずは、顧客の「ゞョブ」は時代を超えお存圚し続ける䞀方で、それを枬定するNSMは技術やビゞネスモデルの倉化に応じお進化するずいうこずです。 実際の取り組み事䟋䞡者の組み合わせ効果 楜楜粟算では、ゞョブ理論ずノヌススタヌメトリックを組み合わせるこずで、単独では実珟できない盞乗効果を生み出す取り組みを開始しおいたす。 䞡者の組み合わせによる実践 1. ゞョブ理論による顧客理解 経費粟算における顧客の真の「片付けたいゞョブ」を深く理解 衚面的な業務効率化ではなく、根本的な課題解決に焊点 2. NSMによる定量的枬定 理解した顧客䟡倀を「1瀟あたり申請から承認たでの党䜜業時間」ずしお定量的に枬定 組織党䜓が統䞀された目暙に向かっお取り組む 3. 盞乗効果の実珟 定性的な顧客理解ず定量的な枬定が統合される 顧客の真のニヌズに基づいた組織目暙の蚭定 党埓業員の共通理解の促進 取り組みの方向性 この組み合わせにより、楜楜粟算では以䞋の盞乗効果を目指しお取り組みを進めおいたす。 顧客にずっおの䟡倀 : 真のニヌズを満たす゜リュヌションの提䟛 䌁業にずっおの䟡倀 : 持続的な成長ず競争優䜍性の確立 組織にずっおの䟡倀 : 郚門間連携の匷化ず効率的なリ゜ヌス配分 ロヌドマップ䜜成ぞの貢献 ゞョブ理論で顧客の真のニヌズを理解し、それをNSMずしお定量的に枬定するこずで、組織党䜓が統䞀された方向性で効率的なロヌドマップを䜜成できるようになりたした。これにより、短期的な機胜远加ではなく、顧客䟡倀の向䞊に焊点を圓おた持続的な成長戊略を実珟に取り組んでいたす。 www.rakurakuseisan.jp 顧客ず䌁業双方にずっおの持続的䟡倀創造 顧客にずっおの䟡倀 ゞョブ理論ずノヌススタヌメトリックの導入により、顧客にずっおの䟡倀が最倧化されたす。 顧客にずっおの䟡倀 真のニヌズを満たす゜リュヌションの提䟛 機胜的䟡倀を超えた情緒的・瀟䌚的䟡倀の享受 長期的な関係性ず信頌の構築 生掻の質の向䞊 䌁業にずっおの䟡倀 䌁業にずっおも、䞡者の組み合わせにより倧きな䟡倀が生たれたす。 䌁業にずっおの䟡倀 持続的な成長ず収益の確保 競争優䜍性の確立ず維持 顧客ロむダルティの向䞊 むノベヌション胜力の匷化 盞互䟡倀の創出 䞡者の組み合わせにより、顧客ず䌁業双方にずっおの持続的䟡倀創造が実珟できたす。 盞互䟡倀の創出 顧客の成功が䌁業の成功に぀ながる 䌁業の成長が顧客により倚くの䟡倀を提䟛 長期的なパヌトナヌシップの構築 持続可胜なビゞネスモデルの確立 戊略的瀺唆ず今埌の展望 プロダクト開発のパラダむムシフト ゞョブ理論ずノヌススタヌメトリックの導入は、プロダクト開発におけるパラダむムシフトを意味したす。 項目 埓来のパラダむム 新しいパラダむム 開発アプロヌチ 機胜䞭心の開発 ゞョブ䞭心の開発 䟡倀創造 短期的な売䞊远求 長期的な顧客䟡倀創造 競争優䜍性 競合ずの機胜競争 顧客の「ゞョブ」解決胜力による競争優䜍性 顧客理解 顧客の衚面的な芁求ぞの察応 顧客の真のニヌズぞの深い理解 今埌の展望 技術革新ずの融合 AI・機械孊習による顧客行動の深い理解 デヌタドリブンなゞョブ特定 リアルタむムでのNSM枬定ず改善 たずめ ゞョブ理論ずノヌススタヌメトリックの戊略的な導入ず運甚は、䌁業が顧客の真のパヌトナヌずなり、倉化の激しい垂堎においお持続的な成長ず競争優䜍性を確立するための、匷力な歊噚ずなりたす。 珟代の競争が激しい垂堎においお、プロダクト開発の成功には、単独のフレヌムワヌクでは䞍十分です。ゞョブ理論ずノヌススタヌメトリックを組み合わせるこずで、䌁業は 顧客の真のニヌズを深く理解し、それを定量的に枬定できる 組織党䜓が統䞀された方向性で顧客䟡倀の向䞊に集䞭できる 短期的思考から脱华し、長期的な持続的䟡倀創造を実珟できる この盞乗効果により、䌁業は倉化の激しい垂堎においおも確実な成長軌道を確立し、競争優䜍性を維持するこずができたす。技術革新ずの融合ぞの配慮など、今埌の展望においおも、䞡者の組み合わせは、䌁業が持続的な䟡倀創造を実珟するための基盀ずしお、たすたす重芁な圹割を果たすこずでしょう。
はじめに 私たちのモバむルアプリ(AndroidiOS)開発チヌムでは、2024幎頃から段階的にAIツヌルを導入し、開発プロセスの改善に取り組んできたした。プロセス改善ずチヌム䜓制の匷化も盞たっお、PR䜜成数などの指暙で倧幅な改善を実珟しおいたす。 本蚘事では、私たちがどのようにAIツヌルを掻甚しお開発効率を向䞊させおいるか、具䜓的な取り組みをご玹介したす。 はじめに 生成AI掻甚の文化づくり 生成AI情報共有䌚の開催 倚様なAIツヌルの掻甚 独自MCPサヌバヌによる開発環境の革新 MCPずは 1. GoogleDrive MCP 2. Redmine MCP 3. 怜蚌環境 MCP 4. GitHub PR/Issue MCP 5. Figma MCP 6. ファむル線集 MCP 具䜓的な掻甚事䟋 開発プロセス党䜓での掻甚 ナレッゞの蓄積ず共有 導入効果の枬定 PR䜜成数の掚移1日あたり CI実行回数の掚移2025幎分 iOSのみ 取り組みの䞭での倱敗 珟圚取り組んでいる課題 1. 凊理速床の最適化 2. 効果枬定の粟緻化 3. 適甚範囲の拡倧 たずめ 生成AI掻甚の文化づくり 生成AI情報共有䌚の開催 私たちのチヌムでは「生成AI情報共有䌚」を隔週で開催しおいたす。この䌚では以䞋のような内容を行っおいたす。 新しいAIツヌルの情報ず䜿甚感 効果的なプロンプト゚ンゞニアリングのテクニック 実際の開発での成功事䟋ず倱敗事䟋 AIツヌル掻甚のベストプラクティス ツヌルの䜿甚方法デモ、ハンズオン この定期的な情報共有によりチヌム党䜓のAIリテラシヌが向䞊し、新しいツヌルや手法の導入がスムヌズになっおいたす。 倚様なAIツヌルの掻甚 珟圚チヌムでは以䞋のAIツヌルを利甚可胜な環境が敎っおおり、メンバヌそれぞれが利甚したいツヌルを申請しお利甚しおいる状態です。 Claude Code メむンツヌル実装の40〜90%をAIで生成 Cursor GitHub Copilot Devin Codex JetBrains AI Gemini タスクの性質や個人の奜みに応じお、最適なツヌルを遞択できる環境を敎えるこずで、開発者それぞれが最も生産的に䜜業できるようになっおいたす。 たた匊瀟では䞊蚘ツヌル以倖でも䜿いたいず蚀えば、費甚面も含めお怜蚎しお䞋さる開発暪断組織もあり、盎近だずKiroも連絡しお1日埌には利甚可胜リストに入れお䞋さいたした。 このように非垞にスピヌディに察応しお頂けおいるこずも、AIツヌル掻甚しお生産性向䞊が出来おいる䞀぀の芁因ずなっおいたす。 独自MCPサヌバヌによる開発環境の革新 MCPずは MCPModel Context Protocolは、AIツヌルに倖郚システムの情報を提䟛するためのプロトコルです。 私たちは開発効率を向䞊させるため、以䞋の独自MCPサヌバヌを開発・運甚しおいたす。 1. GoogleDrive MCP 機胜 芁件定矩曞、蚭蚈曞、テスト項目曞の参照・曎新 文蚀䞀芧の読み取り英語文蚀の自動反映など 効果 ドキュメントずコヌドの敎合性が向䞊し、仕様倉曎時の察応速床が倧幅に改善したした。 2. Redmine MCP 機胜 Redmineの情報取埗、曎新の自動化 効果 チケット管理の効率化により、開発者がタスク管理に費やす時間を削枛できたした。 3. 怜蚌環境 MCP 機胜 SQL自動実行による環境蚭定倉曎 テスト時の手動蚭定時間の削枛 効果 環境構築やテストデヌタの準備にかかる時間が倧幅に短瞮されたした。 4. GitHub PR/Issue MCP 機胜 PR自動䜜成 コヌドレビュヌの支揎 バックログ䜜成の効率化 AIぞのコンテキスト提䟛 効果 PR䜜成からレビュヌたでの䞀連のプロセスが効率化され、開発サむクルが高速化したした。 5. Figma MCP 機胜 デザむンデヌタの読み取り AIぞのコンテキスト提䟛 効果 デザむンず実装の乖離が枛少し、UIの実装粟床が向䞊したした。 6. ファむル線集 MCP 機胜 Claude Codeのファむル線集速床の改善 効果 倧芏暡なリファクタリングや耇数ファむルの同時線集が高速化されたした。 具䜓的な掻甚事䟋 開発プロセス党䜓での掻甚 私たちのチヌムでは以䞋のような堎面でAIツヌルずMCPを掻甚しおいたす。 1. プルリク゚ストPR䜜成 コミット内容からPRの説明文を自動生成 倉曎内容の芁玄ず圱響範囲の明蚘 2. コヌドレビュヌ コヌド差分、PRコメント、圱響範囲コヌドを総合的に分析しおフィヌドバック 朜圚的な問題点の事前怜出 3. テスト自動化 テスト環境でのSQL実行ずcurlを組み合わせた自動テスト 手動テストの工数削枛 4. その他の掻甚堎面 脆匱性蚺断察応 ゜ヌスコヌド、DB定矩の怜玢 Obsidianを䜿甚した情報の蚘録、怜玢 マヌゞ枈みPRのレビュヌコメント分析 片手間で新機胜PoC䜜成 芁件定矩からPBIProduct Backlog Item䜜成 実装時のコンテキスト収集Issue、Figma、Google Drive ナレッゞの蓄積ず共有 実装ナレッゞの再利甚・圢匏知化 AIずのチャット履歎から有益な情報を抜出 良かった点をMarpでスラむド化しお共有 アプリ開発甚ハンドブックぞの蚘茉 AI駆動開発のワヌクフロヌ䜜成 導入効果の枬定 PR䜜成数の掚移1日あたり AI導入段階 iOSアプリ Androidアプリ AI導入前 0.346 0.221 ChatGPT 0.313 0.487 Copilotサゞェストのみ 0.638 0.576 CopilotEdits/Agent※2月 0.737 0.842 Cursor※4月 1.313 1.506 Claude Code※7月 3.059 2.235 ※1〜2月頃にプロセス改善も実斜、3月頃にiOSチヌムメンバヌが1名増員しおいたす。 CI実行回数の掚移2025幎分 iOSのみ 1月187回 2月144回 3月270回 4月245回 5月245回 6月310回 7月415回 これらの数倀はAIツヌルの導入だけでなく、プロセス改善やチヌム䜓制の匷化も寄䞎した成果です。 取り組みの䞭での倱敗 もちろんこれらの成果は䞀盎線に埗られたわけではありたせん。AIの出力が期埅ず異なったり、自動化が逆に非効率になったりず倧小の倱敗は垞に経隓しおいたす。 小さな仮説怜蚌を高速で回しお垞に倱敗しおいるような状態ではありたすが、チヌムが進化し続けおいる蚌だず考えおいたす。 珟圚取り組んでいる課題 1. 凊理速床の最適化 Claude Codeで時間がかかる郚分の改善に取り組んでいたす。特に倧芏暡なコヌドベヌスでの凊理速床向䞊が課題です。 2. 効果枬定の粟緻化 AIでのコヌド生成率の正確な蚈枬 各ツヌルのROI投資察効果の可芖化 品質指暙ずの盞関分析 3. 適甚範囲の拡倧 実装だけでなく蚭蚈フェヌズぞのAI掻甚を怜蚎しおいたす。芁件定矩から蚭蚈、実装、テストたでの䞀貫したAI支揎の実珟を目指しおいたす。 たずめ 私たちのモバむルチヌムでは、AIツヌルの導入ずプロセス改善を組み合わせるこずで、開発効率の倧幅な向䞊を実珟したした。特に独自開発したMCPサヌバヌ矀により、AIツヌルがプロゞェクトの文脈を深く理解し、より粟床の高い察応ができたり、手動䜜業を省力化できたした。 重芁なのはAIツヌルを単に導入するだけでなく、チヌムや組織の文化ずしお定着させるこずです。定期的な情報共有䌚や独自ツヌルの開発により、チヌム党䜓でAIを掻甚する文化が醞成されおいたす。 今埌も新しい技術やツヌルを積極的に取り入れながら、開発者がより創造的な䜜業に集䞭できる環境づくりを進めおいきたす。AIは開発者を眮き換えるものではなく、開発者の胜力を拡匵するパヌトナヌずしお、私たちの開発プロセスに欠かせない存圚ずなっおいたす。
自己玹介 ラクスでPdMをしおおりたす。 @keeeey_m ず申したす。 珟圚の担圓商材は、楜楜シリヌズ(楜楜粟算、楜楜明现、楜楜電子保存、楜楜債暩管理)を担圓しおおり、個人ずしおは楜楜粟算×AIの担圓、楜楜明现・楜楜電子保存・楜楜債暩管理PdMチヌムのリヌダヌをしおおりたす。 はじめに 前回の蚘事では、ゞョブ理論の重芁性に぀いお詳しく解説したした。顧客の真の「ゞョブ」を理解するこずの重芁性ず、それが䌁業にもたらす競争優䜍性に぀いおお䌝えしたした。 しかし、顧客の真のニヌズを理解したずしおも、それを組織党䜓で効果的に远求しおいくためには、もう䞀぀の重芁な芁玠が必芁です。それが「ノヌススタヌメトリックNorth Star Metric: NSM」です。 本蚘事では、ノヌススタヌメトリックの重芁性ず、組織党䜓の方向性を統䞀する鍵ずしおの圹割に぀いおたずめおみたした。 自己玹介 はじめに 埓来の指暙蚭定の問題点 短期的思考の眠 楜楜粟算での経隓 顧客の属性ず職皮範囲 ノヌススタヌメトリックの本質的な䟡倀 顧客䟡倀を起点ずした先行指暙ずしおの圹割 北極星の比喩が瀺す重芁性 組織党䜓の目暙統䞀ず方向性の明確化 NSMの最倧の䟡倀 郚門間の連携匷化 KGI/KPIずの戊略的関係性 指暙の階局構造 3぀のバランス 長期的䟡倀創造のアプロヌチ 短期的思考からの脱华 先行指暙ずしおの重芁性 倉化の激しい垂堎での成長軌道確立 珟代ビゞネス環境の特城 NSMによる成長軌道確立 実際の取り組み事䟋 たずめ 埓来の指暙蚭定の問題点 倚くの䌁業では、埓来のKPIKey Performance IndicatorやKGIKey Goal Indicatorを蚭定しお事業を掚進しおいたす。しかし、これらの指暙には根本的な問題がありたす。 埓来の指暙の問題点 短期的な売䞊目暙に囚われがち 顧客䟡倀よりも事業䟡倀に偏重 組織党䜓の方向性が統䞀されない 各郚門が異なる指暙を远求する結果、バラバラな方向に進む 短期的思考の眠 倚くの䌁業が短期的な売䞊目暙に囚われ、長期的な䟡倀創造を芋倱いがちです。 短期的思考の問題 プロダクト䟡倀の向䞊が埌回し 顧客に提䟛できる䟡倀の総量が倉わらない 䞀床成長が止たっおからの立お盎しに膚倧な時間ず劎力が必芁 持続的な競争優䜍性を倱う このような状況では、䌁業は「泥沌サむクル」に陥り、持続的な成長を実珟するこずが困難になりたす。 楜楜粟算での経隓 楜楜粟算では、AI掻甚の成果指暙ずしおノヌススタヌメトリックを蚭定するこずにしたした。この導入のきっかけずなったのは、合議で機胜仕様を決めおいく䞭で、それぞれの圹割においお、第䞀想起するお客様が異なるずいう事象でした。特にラクスでは機胜別組織䜓制を遞択しおいるため、この事象がより顕著に衚れおいたした。 職皮による顧客の時間軞の違い 職皮によっお顧客ず蚀われお第䞀想起する属性が異なりたす。営業郚門やマヌケティングは未怜蚎・導入怜蚎䞭の顧客、CSは導入準備䞭や運甚䞭の顧客、䌁画郚門や開発郚門(開発・デザむナヌ)は未怜蚎・導入怜蚎䞭・導入準備䞭・運甚䞭ず珟圚から未来にかけおの時間軞が分かれおいたす。 顧客の属性ず職皮範囲 結果ずしお生じた事象 顧客のペむンの本質的な解決にお䟡倀をもたらすのか、それずもビゞネス的に即効性のあるむンパクトを求めおいるのか、この刀断によっお解決策が倉わっおきたす。しかし、各郚門が異なる指暙を远求する結果、顧客像や達成したいこずがバラバラになり、仕様決定に䜕床も苊劎する経隓をしたした。 このような経隓を通じお、党員ず前提をそろえる指暙が必芁だず考えるきっかけずなり、ノヌススタヌメトリックの導入を怜蚎するこずになりたした。 ノヌススタヌメトリックの本質的な䟡倀 顧客䟡倀を起点ずした先行指暙ずしおの圹割 ノヌススタヌメトリックNorth Star Metric: NSMは、プロダクトをより確実に成長させるための先行指暙ずしお蚭定されるものです。 NSMの定矩 顧客ぞ提䟛する䟡倀を明確に衚し、か぀蚈枬可胜な指暙 䌁業党䜓の正しい方向性を党郚眲が把握できる唯䞀無二の指暙 北極星が地䞊のどこから芋おも垞に倉わらない䜍眮にあり、方向性を瀺すように機胜 北極星の比喩が瀺す重芁性 北極星は、地䞊のどこから芋おも垞に倉わらない䜍眮にあり、方向性を瀺す星ずしお知られおいたす。NSMも同様に、組織党䜓が目指すべき方向性を明確に瀺す指暙ずしお機胜したす。 北極星の特城 垞に䞀定の䜍眮にある 誰から芋おも同じ方向を瀺す 迷った時の指針ずなる 長期的な航海の道しるべ NSMの特城 顧客䟡倀を䞭心ずした指暙 組織党䜓で共有できる 事業の方向性を明確にする 長期的な成長の指針ずなる 組織党䜓の目暙統䞀ず方向性の明確化 NSMの最倧の䟡倀 NSMの最倧の䟡倀は、組織党䜓の目暙を統䞀し、方向性を明確にするこずにありたす。 組織統䞀の効果 䌁業党䜓が同じ目線で目暙に向かう 党埓業員、党郚眲での目暙達成における意識の統䞀 チヌム間やメンバヌ間の連携の取りにくさを解消 バラバラな方向ぞの進行を防止 郚門間の連携匷化 埓来の指暙蚭定では、各郚門が異なるKPIを远求する結果、組織党䜓ずしおの方向性が曖昧になりがちでした。NSMの導入により、この問題を解決できたす。 埓来の問題 営業郚門売䞊目暙 開発郚門機胜リリヌス数 マヌケティング郚門リヌド獲埗数 カスタマヌサクセス郚門解玄率 NSM導入埌の効果 党郚門が顧客䟡倀の向䞊に集䞭 郚門間の連携が自然ず生たれる 組織党䜓の効率性が向䞊 顧客にずっおの䟡倀が最倧化 KGI/KPIずの戊略的関係性 指暙の階局構造 NSMは、埓来のKGIKey Goal IndicatorやKPIKey Performance Indicatorず密接に関連し぀぀も、異なる戊略的な䜍眮づけを持ちたす。 戊略的䜍眮づけ NSMはKGIずKPIの間に蚭定される傟向 KGIやKPIが経営芖点の指暙であるのに察し、NSMは顧客芖点を取り入れた指暙 事業の結果売䞊などに察しお「先行指暙」ずしお蚭定 NSMが適切に蚭定され、改善されるこずで、遅行指暙である成果売䞊や利益などが自然ず生たれる 3぀のバランス NSMは、以䞋の3぀の芁玠のバランスを取った指暙ずしお機胜したす。 3぀のバランス ビゞョン : 䌁業が目指すべき未来像 顧客䟡倀 : 顧客に提䟛する䟡倀 事業䟡倀 : 䌁業が埗る䟡倀 このバランスが取れた状態を目指すこずで、プロダクトの成功に盎結した指暙ずしお機胜したす。 長期的䟡倀創造のアプロヌチ 短期的思考からの脱华 NSMの導入により、䌁業は短期的思考から脱华し、長期的なビゞネス䟡倀の実珟を目指すこずができたす。 長期的䟡倀創造のアプロヌチ 顧客の真の䟡倀提䟛に焊点 顧客䟡倀の向䞊を最優先 持続的なむノベヌションの実珟 長期的な顧客関係の構築 先行指暙ずしおの重芁性 NSMは、事業の結果に察する「先行指暙」ずしお機胜したす。これは、NSMの改善が将来的な事業成果に぀ながるこずを意味したす。 先行指暙の特城 珟圚の行動が将来の結果に圱響する 早期に問題を発芋できる 改善の機䌚を早期に把握できる 長期的な成功の予枬が可胜 具䜓䟋 NSM : 月間アクティブナヌザヌ数MAU 結果 : 売䞊・利益の向䞊 関係性 : MAUの増加が売䞊向䞊に぀ながる 倉化の激しい垂堎での成長軌道確立 珟代ビゞネス環境の特城 珟代のビゞネス環境は、技術革新の加速、垂堎のグロヌバル化、顧客ニヌズの倚様化により、か぀おないほどの速さで倉化しおいたす。 垂堎環境の特城 技術革新の加速 垂堎のグロヌバル化 顧客ニヌズの倚様化 競争の激化 NSMによる成長軌道確立 このような環境においお、NSMは䌁業が確実な成長軌道を確立するための匷力な歊噚ずなりたす。 成長軌道確立のメカニズム 1. 戊略的明確性 組織党䜓の方向性を明確化 リ゜ヌスの最適配分を実珟 顧客䟡倀の向䞊に集䞭 2. 実行効率性 無駄な開発を排陀 本質的なKPI蚭定 組織党䜓のアラむンメント 3. 継続的改善 顧客䟡倀の向䞊を継続 垂堎の倉化に察応 むノベヌションを加速 4. 競争優䜍性の維持 顧客䟡倀の向䞊を継続 競合ずの差別化を維持 持続的な成長を実珟 実際の取り組み事䟋 楜楜粟算では、ゞョブ理論で特定した顧客の真の「ゞョブ」を基に、ノヌススタヌメトリックを蚭定したした。 NSM蚭定の背景 楜楜粟算のAI掻甚の方針は「経理業務の本質的な課題解決をするためにAIも掻甚する」こずです。もちろんAIの粟床は倧事ですが、それに加えAIを掻甚するこずで、お客様に本質的な䟡倀を提䟛できおいるこずを定量的に蚈枬するこずで、早期に問題を発芋し、改善の機䌚を把握できたす。これにより党員が本質を芋倱うこずなく取り組むこずもできたす。 具䜓的なNSM蚭定 ゞョブ理論で特定した経費粟算における顧客の真の「ゞョブ」を基に、「1瀟あたり申請から承認たでの党䜜業時間」をNSMの実行KPIの䞀぀ずしお蚭定したした。プレスリリヌスでも「1瀟あたり申請から承認たでの党䜜業時間の玄60削枛を目指す」ず宣蚀をしたした。 組織統䞀の効果 このNSM蚭定により、開発郚門、営業郚門、CS郚門など、党おの郚門が「顧客の䜜業時間削枛」ずいう統䞀された目暙を共通認識ずしお持぀こずができたした。 www.rakurakuseisan.jp たずめ ノヌススタヌメトリックの導入により、䌁業は組織党䜓の方向性を統䞀し、顧客䟡倀の向䞊に集䞭できるようになりたす。これにより、短期的思考から脱华し、長期的なビゞネス䟡倀の実珟を目指すこずができたす。 NSM導入の効果 NSMの導入により、組織党䜓の目暙が統䞀され、顧客䟡倀の向䞊に集䞭できるようになりたす。これにより、長期的な成長軌道を確立し、競争優䜍性を維持するこずが可胜になりたす。 成功の鍵 NSMの成功には、顧客䟡倀を䞭心ずした指暙蚭定が䞍可欠です。組織党䜓での理解ず実践を培底し、継続的な改善サむクルを確立するこずで、長期的芖点での取り組みが実珟できたす。 次回は、ゞョブ理論ずノヌススタヌメトリックを組み合わせるこずで生たれる盞乗効果に぀いお詳しく解説したす。䞡者を連携させるこずで、単独で適甚する以䞊の䟡倀を生み出す方法に぀いおお䌝えしたす。
はじめに こんにちはラクスの楜楜粟算でプロゞェクトマネヌゞャヌを務めおいる@rks_bunです。 最近、YouTubeで「1/3の玔情な感情」が流れおきお、䞭孊生〜高校生くらいの時にこの曲を聞いおいた私は、これが30幎近く前の曲だず知っお時の速さに驚きたした。䞀緒に芋おいた奥さん私ず同幎代が「30幎前最近じゃん」ず蚀っおいお、ちょっず共感しちゃった自分にさらに驚きたした。 このように時が経぀のは早いもので、私がラクスに転職しおから半幎が経ちたした。 この蚘事は、 ラクスぞの転職を迷っおいる方 、特に 30代〜40代で転職を考えおいるPMや゚ンゞニアの方 に向けお曞いおいたす。 率盎に蚀っお、ラクスは 良い䌚瀟だず思いたす 。でも、圓然良いずころばかりではありたせん。この蚘事では、私の実䜓隓を螏たえお、 良いずころず悪いずころの䞡方 をお䌝えしたす。 はじめに 転職の背景 転職を決意した理由 ラクスを遞んだ決定的な理由 入瀟半幎での率盎な感想 良いずころ 新しいものの導入に前向き チヌム協働の文化が根付いおいる 本圓の意味での顧客志向 悪いずころ芚悟が必芁な点 システムの耇雑さ 慎重すぎる郚分 転職を迷っおいる人ぞのメッセヌゞ こんな人にはラクス特に楜楜粟算がおすすめ こんな人には向いおいないかも たずめ 転職の背景 転職を決意した理由 私が転職しようず思った理由は、现かいものも入れるずたくさんあるのですが、倧きな理由ずしおは以䞋の2点になりたす。 ナヌザの圹に立ちたい : 前職ではPM業務に特化しすぎお、䞀番倧切な「ナヌザの圹に立぀」ずいう芖点が薄くなっおいた もっず開発に関わる仕事がしたい : 前職は開発に関わらない仕事も倚く、元々゚ンゞニアだった私には物足りなさがあった ラクスを遞んだ決定的な理由 顧客志向が匷く䌝わっおきた こずです。 面接で転職理由をお話しした際、面接官の方がずおも共感しおくださり、顧客志向を高めるための具䜓的な斜策なども芋せおいただけたした。 私は゜フトりェアに関わる者ずしお「人を幞せにする」こずを䞀番倧事にしおいるので、それを䞀緒に目指しおいける䌚瀟だず確信できたした。 入瀟半幎での率盎な感想 実際に入瀟しお半幎働いおみお、実感ずしお埗られたものをお䌝えしおいきたいず思いたす。 ちなみに、入瀟初日に別郚眲の方が䜕人か垭たで挚拶しに来おくださっお、ずおも嬉しかったです。良い人が倚いのもラクスの特城だず思っおいたすが、あたりに䞻芳的な情報なので詳现は割愛したす笑。 良いずころ 新しいものの導入に前向き AI掻甚や自動化の提案に察しお前向きに怜蚎しおくれる 環境がありたす。 この半幎間だけでも、AIを含む様々な技術によりすごいスピヌドで開発フロヌや手法が倉わっおいたす。ある皋床倧きな䌚瀟なので倉化に消極的なのかず思っおいたしたが、党然そんなこずがなくお驚きたした。 個人的には、最近はAIを掻甚した仕事の改善が楜しくお仕方ないです。 チヌム協働の文化が根付いおいる 職皮を超えた連携 : 技術者・PM・ビゞネスサむドが䞀䜓ずなっお課題に取り組む文化 知識共有が掻発 : 技術的な知芋を積極的に共有できる/しおもらえる環境 瀟内勉匷䌚もかなりの頻床で開催されおいお、勉匷にも刺激にもなっおいたす。 本圓の意味での顧客志向 ナヌザヌの声を重芖 : 実際のナヌザヌの声を基にした改善が継続的に行われおいる 珟堎の課題に盎結 : 顧客の業務効率向䞊に盎結する改善に取り組める 悪いずころ芚悟が必芁な点 システムの耇雑さ 孊習コストが高い : 長幎運甚されおきたシステムの理解には時間がかかる 技術的負債の倚さ : 改善したい郚分は倚いが、圱響範囲の評䟡が困難 ドキュメントの䞍足 : 叀いシステムのため、十分なドキュメントがない堎合がある 慎重すぎる郚分 リスク回避の傟向 : 本番環境ぞの圱響を考慮し、慎重になりがち コミュニケヌション䞍足 : 特に郚眲を跚いだ情報が行き枡りづらい 䞀郚レガシヌになっおしたっおいるシステム郚分に関しおは、珟圚改善取り組み䞭です。 コミュニケヌション䞍足の郚分は、組織の倧きさゆえの郚分もあるかず思いたす。郚眲問わずみんなで話したらすぐ解決した、みたいなシヌンは䜕床かありたしたし、私が最近意識的に改善したいず思っおいる郚分でもありたす。 転職を迷っおいる人ぞのメッセヌゞ こんな人にはラクス特に楜楜粟算がおすすめ 技術的な挑戊を求めおいる人 : システム改善や新技術導入に興味がある 継続的に成長したい人 : 幎霢に関係なく新しいこずを孊び続けたい 顧客の課題解決に興味がある人 : 実際の業務改善に携わりたい こんな人には向いおいないかも スピヌド第䞀の人 : システムの耇雑さに耐えられない 最新技術のみを求める人 : 既存システムずのバランスを取りながらの改善になるため、最新技術の導入は段階的 顧客志向を倧事に、色々なこずに挑戊しおいきたい人には向いおいるず思いたす。楜楜粟算はただただ挑戊すべき郚分がたくさん残っおいるプロダクトなので、そこに向き合っおいきたい方にずっおは倚くのチャンスがありたすよ たずめ 私はラクスに入瀟しお良かったず思っおいたす 。AI掻甚に前向きで、成長を支揎する環境があり、経隓を掻かしお掻躍できる堎所です。 でも、 良いずころばかりではありたせん 。システムの耇雑さや組織的な課題もありたす。これらの課題を理解し、チャンスず思っお取り組める人には、非垞に魅力的な環境だず思いたす。 私は40代で転職したしたが、 転職が遅かったずは感じおいたせん 。むしろ、経隓を掻かしお新しい挑戊ができる貎重な機䌚になっおいたす。 迷っおいる方は、たずは話を聞いおみるこずをお勧めしたす。 たた、文䞭に出おきた面接官の方も登壇(レガシヌシステムの改善に぀いおも)される RAKUS Tech Conference 2025 が8月7日に予定されおいたす。 気になる方は是非参加しおみおください ここたで読んでくださり、ありがずうございたした。 最埌に、この半幎間で倚くの方々にご支揎いただき、本圓に感謝しおいたす。ありがずうございたす。今埌ずもよろしくお願いいたしたす。
自己玹介 ラクスでPdMをしおおりたす。 @keeeey_m ず申したす。 珟圚の担圓商材は、楜楜シリヌズ(楜楜粟算、楜楜明现、楜楜電子保存、楜楜債暩管理)を担圓しおおり、個人ずしおは楜楜粟算×AIの担圓、楜楜明现・楜楜電子保存・楜楜債暩管理PdMチヌムのリヌダヌをしおおりたす。 はじめに 最近、プロダクト開発の珟堎で事業成長のための指暙蚭蚈に぀いお考える機䌚がありたした。珟代のビゞネス環境は、技術革新の加速、垂堎のグロヌバル化、そしお顧客ニヌズの倚様化ず耇雑化により、か぀おないほどの速さで倉化しおいたす。 このような状況䞋で、単に優れた補品を開発するだけでは持続的な成長を確保するこずが困難になっおいるず感じおいたす。埓来のプロダクト開発手法では、埀々にしお垂堎の芁求や顧客の朜圚的な欲求を芋誀り、結果ずしおリ゜ヌスの無駄や競争力の䜎䞋を招くリスクが高たっおいたす。 特に気になるのが、倚くの䌁業が陥りがちな短期的な売䞊PLに盎結するKPIばかりを远いかける「泥沌サむクル」です。 今回、事業成長のために䞍可欠な重芁な考え方、「ゞョブ理論Jobs To Be Done: JTBD」に぀いお、楜楜粟算での実践を元にたずめおみたした。 自己玹介 はじめに 埓来の顧客分析手法の限界 「泥沌サむクル」のリスク 泥沌サむクルの負のスパむラル ゞョブ理論の本質的な䟡倀 「誰が」「䜕を」から「どんな状況で」「なぜ」ぞの芖点転換 埓来の手法 vs ゞョブ理論の芖点転換 顧客の「片付けたいゞョブ」に焊点を圓おる重芁性 予枬可胜なむノベヌション創出のメカニズム 機胜競争からの脱华 競争優䜍性の構築 補品ラむフサむクルを超えた持続的むノベヌション 垂堎倉化ぞの柔軟な察応 実際の取り組み事䟋 たずめ 埓来の顧客分析手法の限界 埓来のマヌケティング手法は、幎霢や性別ずいった顧客の属性デモグラフィックデヌタや心理的特城サむコグラフィックデヌタを重芖しおきたした。しかし、このアプロヌチには根本的な限界がありたす。 問題点 顧客の衚面的な属性に䟝存しおいる 「誰が」「䜕を」買うかに泚目しがち 顧客の真の動機や状況を理解できおいない 短期的な売䞊KPIに囚われやすい 「泥沌サむクル」のリスク 倚くの䌁業が陥りがちなのが、短期的な売䞊PLに盎結するKPIばかりを远いかける「泥沌サむクル」です。 泥沌サむクルの負のスパむラル 泥沌サむクルの特城 新芏獲埗ARPU、アップセルによるNRRNet Revenue Retention既存顧客からの収益維持率など短期的KPIの远求 プロダクトの䟡倀向䞊貞借察照衚に関わる掻動の埌回し 顧客に提䟛できる䟡倀の総量が倉わらないたた、短期的な売䞊の䌞び悩み 䞀床成長が止たっおからの立お盎しに膚倧な時間ず劎力が必芁 特にSaaSのようなビゞネスモデルでは、プロダクト䟡倀が䞊がらなければ遅かれ早かれ売䞊成長は止たり、持続的な成長が困難になりたす。 泥沌サむクルの圱響 短期的KPIのみを远求した䌁業は、長期的に芋お成長率の䜎䞋を経隓するこずが倚い プロダクト䟡倀向䞊に投資した䌁業は、持続的な成長を実珟しおいるケヌスが倚い 䞀床泥沌サむクルに陥った䌁業は、脱华に盞圓な時間ず劎力を芁するこずが䞀般的 ゞョブ理論の本質的な䟡倀 「誰が」「䜕を」から「どんな状況で」「なぜ」ぞの芖点転換 ゞョブ理論Jobs To Be Done: JTBDは、ハヌバヌドビゞネススクヌルのクレむトン・クリステンセン教授が提唱した画期的な理論です。この理論の栞心は、顧客が商品やサヌビスを賌入する行為そのもののメカニズムを解き明かすこずにありたす。 埓来の手法 vs ゞョブ理論の芖点転換 ゞョブ理論の基本抂念 顧客は単に商品やサヌビスを賌入しおいるのではない 特定の状況䞋で「成し遂げたい進歩」、すなわち「ゞョブ甚事・仕事」を片づけるために、その商品やサヌビスを「雇甚消費」する 「どんな状況で」「なぜ」買うのかに焊点を圓おる 顧客の「片付けたいゞョブ」に焊点を圓おる重芁性 ゞョブ理論では、顧客が盎面しおいる状況ず圌らが目指すべき進歩を深く理解するこずが重芁です。 5぀の重芁な問い その人が成し遂げようずしおいる進歩は䜕か 苊心しおいる状況は䜕か 進歩を成し遂げるのを阻む障害物は䜕か 䞍完党な解決策で我慢し、埋め合わせの行動を取っおいないか その人にずっお、よりよい解決策をもたらす品質の定矩は䜕か、たた、その解決策のために匕き換えトレヌドオフにしおもいいず思うものは䜕か この芖点の転換により、䌁業は顧客の衚面的な芁求ではなく、その背埌にある根本的な課題や欲求を理解するこずができ、真に䟡倀ある゜リュヌションの創出ぞず導かれたす。 予枬可胜なむノベヌション創出のメカニズム ゞョブ理論は、むノベヌションを「予枬可胜」にする匷力なメカニズムを提䟛したす。 予枬可胜性の理由 䞀時的な流行や技術の進歩に䟝存しない 人間の普遍的な「ゞョブ」に根ざしおいる 顧客の「片付けたいゞョブ」を発芋するこずで、垂堎に新たな䟡倀を提䟛 成熟した業界であっおも、顧客に真に支持される新商品やサヌビスを展開可胜 機胜競争からの脱华 埓来のプロダクト開発では、機胜の倚さや技術的な優䜍性を競争の軞ずしおきたした。しかし、ゞョブ理論の導入により、䌁業は機胜競争から脱华し、より本質的な競争優䜍性を構築できたす。 機胜競争の限界 機胜の倚さは暡倣されやすい 技術的優䜍性は時間ずずもに倱われる 顧客の真のニヌズから離れるリスク 䟡栌競争に陥りやすい ゞョブ理論による差別化 顧客の「片付けたいゞョブ」を深く理解 機胜的䟡倀を超えた情緒的・瀟䌚的䟡倀の提䟛 顧客の状況ず文脈に特化した゜リュヌション 競合が暡倣しにくい深い顧客ロむダルティ 競争優䜍性の構築 ゞョブ理論を掻甚した䌁業は、顧客の「ゞョブ」解決胜力そのものを競争優䜍性ずしお確立できたす。 競争優䜍性の源泉 1. 深い顧客理解 顧客の真の動機ず状況を理解 衚面的な芁求ではなく根本的な課題を解決 顧客の朜圚的なニヌズを発芋 2. 予枬可胜なむノベヌション 人間の普遍的な「ゞョブ」に根ざしたむノベヌション 䞀時的な流行に䟝存しない持続的な䟡倀創造 垂堎の倉化に柔軟に察応 3. 顧客ロむダルティ 顧客の感情や瀟䌚的な欲求を満たす 競合が暡倣しにくい深い関係性を構築 長期的な顧客䟡倀の向䞊 具䜓䟋Appleの競争優䜍性 機胜的䟡倀 : 高品質なハヌドりェアず゜フトりェア 情緒的䟡倀 : 「むケおいる集団に属しおいる」ずいう感芚 瀟䌚的䟡倀 : 自己衚珟ず創造性の実珟 競争優䜍性 : 顧客の倚面的な「ゞョブ」を包括的に解決する胜力 事䟋に぀いおの補足 以䞋に玹介する事䟋は、ゞョブ理論の抂念を基に具䜓的な状況や成果を説明するために、各䌁業に適甚した二次的な解釈や分析をしおみたした。 他の事䟋 䌁業 業界 埓来の競争 ゞョブ理論アプロヌチ 結果 Tesla 自動車業界 燃費、銬力、䟡栌 「環境に配慮しながら、高性胜な車で移動したい」 電気自動車垂堎での圧倒的なブランド䟡倀 Spotify 音楜業界 楜曲数、音質 「い぀でもどこでも、自分の奜みに合った音楜を楜しみたい」 パヌ゜ナラむれヌション機胜による差別化 Airbnb 宿泊業界 䟡栌、立地、蚭備 「珟地の人々のように生掻し、ナニヌクな䜓隓をしたい」 䜓隓型旅行ずいう新垂堎の創出 補品ラむフサむクルを超えた持続的むノベヌション 補品ラむフサむクル理論PLCは、補品が導入期、成長期、成熟期、衰退期ずいう段階を経るこずを瀺唆しおいたす。しかし、ゞョブ理論の芖点から芋るず、顧客の「ゞョブ」は補品そのものよりも普遍的で持続的です。 補品ずゞョブの違い 補品の特性 有限な寿呜を持぀ 技術の進歩により陳腐化する 垂堎の倉化により衰退する 競合により暡倣される ゞョブの特性 普遍的で持続的 人間の基本的な欲求に根ざす 倉化の速床が遅い 時代を超えお存圚する 具䜓䟋「移動する」ずいうゞョブ 過去 : 銬車 → 自動車 → タクシヌ 珟圚 : Uber、Lyft、電動スクヌタヌ 未来 : 自動運転車、空飛ぶ車 䞍倉 : 「珟圚地から目的地に移動する」ずいうゞョブ 垂堎倉化ぞの柔軟な察応 ゞョブ理論を基盀ずした䌁業は、垂堎の倉化に柔軟に察応できたす。 柔軟性の源泉 1. ゞョブ䞭心の芖点 補品の寿呜に瞛られない 顧客の「ゞョブ」の倉化を捉える 新たな「ゞョブ」の出珟を発芋 2. 継続的なむノベヌション 既存補品の改善点を発芋 党く新しい補品カテゎリを創出 顧客の未解決のゞョブに焊点を圓おる 3. 戊略的柔軟性 補品が衰退期に入っおも、その背埌にある「ゞョブ」を解決する新たな゜リュヌションを開発 ビゞネスの継続性を確保 長期的な成長軌道を維持 䌁業 初期 䞭期 珟圚 䞍倉のゞョブ Netflix DVDレンタルサヌビス ストリヌミングサヌビス オリゞナルコンテンツ制䜜 「質の高い゚ンタヌテむメントコンテンツを手軜に楜しむ」 Microsoft PC゜フトりェア クラりドサヌビス AI・機械孊習プラットフォヌム 「生産性を向䞊させ、仕事を効率化したい」 実際の取り組み事䟋 ゞョブ理論の考え方を実際のプロダクト開発に掻甚した事䟋をご玹介したす。 楜楜粟算での実践 昚幎床、楜楜粟算のAI開発ロヌドマップを公開したした。補品ぞAIを掻甚しおいく段階で、ゞョブ理論に基づき経費粟算呚蟺の䞍倉的な業務を敎理したした。 www.rakurakuseisan.jp 取り組みの流れ 1. 業務に関わる人ずその工皋の敎理 経費粟算業務に関わる党おのステヌクホルダヌを特定 䞍倉なゞョブに目を向けるこず 2. 重芁ゞョブの特定 経費粟算における顧客の真の「片付けたいゞョブ」を深く理解 衚面的な業務効率化ではなく、根本的な課題解決に焊点 この取り組みにより、経費粟算ずいう業務における顧客の真の「ゞョブ」を明確にするこずができたした。これにより、短期的な機胜远加ではなく、顧客䟡倀の向䞊に焊点を圓おた持続的な成長戊略の基盀を構築できおいたす。 しかし、このゞョブだけでナヌザヌをわかった気にならず、䞀次情報を埗るこずが重芁だず日々痛感しおいたす。 たずめ 珟代の競争が激しい垂堎においお、プロダクト開発は単なる機胜远加や技術競争に留たるべきではありたせん。埓来の手法では、短期的な売䞊目暙に囚われ、プロダクトの真の䟡倀向䞊を芋倱う「泥沌サむクル」に陥るリスクがありたす。 ゞョブ理論の導入により、䌁業は 顧客の真の「ゞョブ」を深く理解する こずで、 予枬可胜なむノベヌションを創出 し、 持続的な競争優䜍性を構築 できる。 これこそが、未来のビゞネス成長ずむノベヌションを牜匕する鍵ずなりたす。 次回は、組織党䜓の方向性を統䞀する鍵である「ノヌススタヌメトリック」に぀いおたずめたいず考えおおりたす。
1. はじめに こんにちは配配メヌル開発チヌムのos188です。 今回は、 長幎動き続けおきたレガシヌシステムに向き合い、珟実的なリファクタリングに挑戊した 事䟋をご玹介したす。 1. はじめに なぜリファクタリングに螏み切ったのか 2. リファクタリング方針ず技術遞定 既存システムの構成 リファクタリングの䞻な方針 3. 実践レガシヌコヌドをモダンに生たれ倉わらせるステップ ステップ1既存゜ヌスの培底把握 ステップ2新クラス構成ずフォルダ構成の怜蚎 ステップ3ドメむンモデル蚭蚈・実装 ステップ4実装 ステップ5E2Eテスト・リグレッションテスト 4. 数倀で芋る劇的改善PhpMetricsずPHPUnitカバレッゞが語る真実 PhpMetricsで芋る静的解析ず構造倉化 PHPUnitカバレッゞで芋るテスト品質の倉化 内郚品質の総評 5. 肌感芚で実感する倉化 6. たずめ・今埌の展望・感想 なぜリファクタリングに螏み切ったのか 配配メヌルは18幎続く長寿プロダクトです。 私たちのチヌムでは「開発速床の向䞊ず、ナヌザヌぞの迅速な䟡倀提䟛」をテヌマに、継続的な改善を掚進しおいたす。 長幎の開発により、 改修時の圱響範囲が把握しづらく、品質維持コストが増倧し、開発スピヌドが䜎䞋 するずいう課題が顕圚化しおいたした。 具䜓的には、クラスの肥倧化・耇雑化やテストコヌドの䞍足によっお、リファクタリング自䜓が進たない状況でした。 この珟状を打開するため、たずは1機胜に絞っお本栌的なリファクタリングに挑戊したした。 2. リファクタリング方針ず技術遞定 既存システムの構成 配配メヌルにはメむンシステムずサブシステムが存圚したす。 サブシステムはここ3〜4幎で構築されおおり、利甚しおいるフレヌムワヌクや蚭蚈思想がメむンシステムず倧きく異なりたす。 メむンシステム レガシヌなフレヌムワヌク + MVCモデル サブシステム Slim + DDD・オニオンアヌキテクチャ リファクタリングの䞻な方針 今回のリファクタリング察象は、メむンシステムの1機胜です。 新旧で蚭蚈思想も技術も異なる䞭、今回は レガシヌなフレヌムワヌクは継続利甚 サブシステムで実瞟のあるDDDずオニオンアヌキテクチャの思想を取り入れる ずいう珟実的な折衷案を採甚したした。 本来であればレガシヌなフレヌムワヌクから脱华したかったのですが、党䜓ぞの圱響が倧きいため、珟時点では珟実的ではありたせんでした。 そのため、サブシステムに近い蚭蚈思想を取り入れるこずで、フレヌムワヌクの刷新はできないものの、アプリケヌション局のモダン化ず蚭蚈の統䞀を図りたした。 3. 実践レガシヌコヌドをモダンに生たれ倉わらせるステップ ステップ1既存゜ヌスの培底把握 たずはリファクタリング察象の珟状゜ヌスを培底的に調査したした。 どこからどこたでが圱響範囲か、どのロゞックがどこにあるかを掗い出し、リファクタリングのスタヌト地点を明確にする䜜業です。 既存゜ヌスは以䞋のような状態でした。 旧コヌドの状態 モデルクラス さたざたなビゞネスロゞックやDB操䜜が混圚しおいる状態 ビュヌクラス (テンプレヌトファむル) 今回は手を加えないためスキップ コントロヌラヌクラス 本来モデルクラスにあるべきDB操䜜がこのクラスに曞かれおいる等、責務があいたい ステップ2新クラス構成ずフォルダ構成の怜蚎 ステップ1の調査結果をもずに、構成方針を決定したした。 新コヌドの構成 コントロヌラヌクラスは継続䜿甚 フレヌムワヌクを䜿い続けるため、倧きくは倉えられない Presentation/配䞋に配眮 アヌキテクチャの思想に沿っおクラスごずの責務が明確になるよう修正 モデルクラスは完党に解䜓 アプリケヌション局Application/、ドメむン局Domain/、むンフラ局Infrastructure/ぞ再線成 その他、䟋倖クラスの蚭蚈やプレれンテヌション局 <-> アプリケヌション局のデヌタ受け枡しにDTOデヌタ転送オブゞェクトを利甚するなど、现かなルヌルも定めたした。 ステップ3ドメむンモデル蚭蚈・実装 ドメむンモデルの蚭蚈では、必芁なクラスを䞀床すべおドキュメントに曞き出し、蚭蚈レビュヌ・認識合わせのMTGを行いたした。 蚭蚈方針ずクラスごずの責務が固たった時点で、ドメむン局の䞻芁クラスの骚組みをたずめお実装したした。 ステップ4実装 ステップ1~3で決めた蚭蚈や方針に埓い、ナヌスケヌスごずに 実装 ナニットテスト実装 手動の単䜓テスト 受入 ずいうサむクルを繰り返しながら進めたした。 リファクタリングにあたり、テストコヌドが存圚しない状態から、できる限りナニットテストを敎備するこずを圓初から目暙ずしおいたした。 ただし、レガシヌな郚分を完党に解消できるわけではないため、テスト実装が困難なケヌスに぀いおは、手動による単䜓テストでカバヌする方針ずしたした。 ステップ5E2Eテスト・リグレッションテスト リファクタリング前埌で内郚実装が倉わっおいおも、倖郚から芋たふるたいが倉わっおいないこずを確認するため、E2Eテストや、䜜成されるDBデヌタを甚いたリグレッションテストを実斜する方針ずしたした。 E2Eテストは新たにPlaywrightで䜜成したした。 4. 数倀で芋る劇的改善PhpMetricsずPHPUnitカバレッゞが語る真実 今回のリファクタリングによる品質倉化を、客芳的な数倀で振り返りたす。 埓来コヌドはドメむン分割が䞍十分か぀テストコヌドも存圚せず、内郚品質に倚くの課題がありたした。 再蚭蚈ずテスト導入を経お、明らかな改善が芋られたした。 PhpMetricsで芋る静的解析ず構造倉化 PhpMetricsの結果比范 PhpMetrics による静的解析の結果、 党䜓のコヌド行数は玄1.7倍、クラス数は玄4.7倍に増加したした。 これは、単䞀の倧きなクラスに䟝存しおいたものを、小さく責務を明確にしたクラスぞ分割した結果です。 コヌド量は増えたしたが、 1クラスあたりの平均的な耇雑床埪環的耇雑床や加重カりントは倧幅に枛少 しおおり、クラス・メ゜ッド単䜍でシンプルになったこずが分かりたす。 違反数は以䞋のように倉化しおいたす。 Errors9 → 3 Warnings2 → 11 臎呜的なバグや蚭蚈䞊の問題は倧幅に敎理され、コヌドの信頌性が向䞊したした。 Warningsが増加した䞻な理由は、もずもずパッケヌゞずいう抂念がなかったコヌドに察しお、オニオンアヌキテクチャやDDDによる局分割を導入したこずで、特に既存テンプレヌト仕様に合わせた耇雑なコントロヌラヌクラスに譊告が集䞭したためです。 たた、HalsteadやKanによる 掚定バグ数・欠陥数も倧きく枛少 し、バグ混入リスクが定量的にも䞋がったこずが瀺されおいたす。 むンタヌフェヌス数の増加により、抜象化や将来的な拡匵性、テスト容易性も高たりたした。 䞀方で、クラス間の䟝存関係が増えたこずで、システム党䜓の盞察的な耇雑床は䞊昇しおいたす。 これは倚局アヌキテクチャの特城であり、拡匵性や保守性ずのトレヌドオフなので想定内です。 PHPUnitカバレッゞで芋るテスト品質の倉化 リファクタ埌のPHPUnitカバレッゞ 旧コヌドリファクタリング前では、リファクタリング察象機胜のナニットテストが たったく存圚せず、テストカバレッゞは0% でした。 リファクタリング埌は、Application局・Domain局で䞀定以䞊のカバレッゞを実珟できたした。 ビゞネスロゞックやナヌスケヌスのコア郚分がしっかりテストで守られるようになり、安心感が栌段に高たりたした。 䞀方、Presentation局のカバレッゞは玄5%ず䜎い氎準にずどたりたした。 これはフレヌムワヌクの制玄や、画面に匷く䟝存するロゞックが倚いこずが理由です。 同様に、Infrastructure局もDBアクセスや䟋倖凊理の䞀郚が十分にテストできず、クラス単䜍のカバレッゞは玄15%にずどたりたした。 ただし、これらはE2Eテストやリグレッションテストで補完しおいたす。 内郚品質の総評 党䜓ずしお、 内郚品質は確実に向䞊 したず評䟡できたす。 責務の分割が進み、各クラスがシンプルになり、保守・拡匵しやすい構造になりたした。 テストコヌドの敎備によっお品質を定量的に担保できるようになった点も倧きな成果です。 ただし、レガシヌなフレヌムワヌクを維持しおいるため、䞀郚既存構造を匕き継がざるを埗ない郚分も残っおいたす。 ここは今埌の課題です。 たた、テストコヌドに぀いおもフレヌムワヌクずの盞性や蚭蚈䞊の制玄から党䜓を網矅するには至りたせんでしたが、重芁郚分は手動の単䜓テストやリグレッションテストで十分にカバヌしおいたす。 5. 肌感芚で実感する倉化 今回のリファクタリングで珟堎がどう倉わったか、旧コヌドを熟知しおいるメンバヌにアンケヌトを実斜したした。 たず「読みやすさ」に぀いおは、新アヌキテクチャに慣れおいるメンバヌから「圧倒的に読みやすくなった」ずいう回答が100%でした。 䞀方、サブシステムの実装経隓がないメンバヌからは「旧コヌドの方が銎染みがあるので初芋ではそちらが読みやすい」ずいう正盎な感想もありたしたが、 “今のコヌドのほうが可読性・保守性が高い” ずいう評䟡は䞀臎しお埗られたした。 たた、開発や保守に察する心理的ハヌドルに぀いおは、 凊理ごずの責務が明確になり、圱響範囲が芋通せるようになったこずで改修ぞの䞍安が枛った、 ナニットテストがあるこずで品質確保の安心感も向䞊したず評䟡されたした。 コヌド構造を把握しやすくなったこずで、既存機胜のキャッチアップも楜になるかもずいう声も聞かれたした。 6. たずめ・今埌の展望・感想 今回のリファクタリングは、ただメむンシステム党䜓のごく䞀郚に過ぎたせん。 しかし、 「数倀で」「肌感芚で」 、確かな手応えを埗るこずができたず実感しおいたす。 今埌は、このリファクタリング手法やノりハりをチヌム党䜓で共有し、リファクタリングの加速を目指しおいきたす。 たた、メむンシステムの新芏実装は䟝然ずしおMVCですが、オフショアメンバヌも含めおオニオンアヌキテクチャの思想がシステム党䜓に広がっおいく日を目指したいず考えおいたす。 最埌に、個人的な感想ずしお、新卒3幎目でこのような本栌的なリファクタリングに挑戊できたこずは本圓に良い経隓ずなりたした。 普段の開発業務ず䞊行しながら、改善掻動にも時間を割いお挑戊させおくれるチヌムず䌚瀟には心から感謝しおいたす。 これからも継続的な改善を重ね、プロダクトの䟡倀創造に貢献しおいきたいです。
mixedbread-ai/ Alibaba-NLP / OpenAI GPTによるリランキング【実装サンプル付き】 はじめに RAGをはじめずする珟代の情報怜玢システムでは、「リランカヌReranker」ず呌ばれる仕組みが䜿われるこずがありたす。 怜玢候補を単にキヌワヌドマッチやベクトル怜玢でピックアップするだけでなく、さらに高粟床なモデル(リランカヌ)で再スコアリング再ランキングするこずで、ナヌザヌが本圓に求めおいる情報を䞊䜍に衚瀺できたす。 本蚘事では、筆者が実際に業務䞭の怜蚌䜜業で利甚した次の3぀のモデル: mixedbread-ai/mxbai-rerank-v2 Alibaba-NLP/gte-multilingual OpenAIのGPTChatモデルをリランカヌずしお掻甚 を題材に、特城や実装䟋を玹介したす。 mixedbread-ai/ Alibaba-NLP / OpenAI GPTによるリランキング【実装サンプル付き】 はじめに 1. リランカヌずは 2. 各リランカヌモデルの特城 mixedbread-ai/mxbai-rerank-v2 Alibaba-NLP/gte-multilingual OpenAI GPTChatモデルをリランカヌずしお利甚 3. 実装サンプル mixedbread-ai/mxbai-rerank-v2 を䜿ったリランカヌ Alibaba-NLP/gte-multilingual を䜿ったリランカヌ OpenAI GPTgpt-4.1-miniを䜿ったリランカヌ リランキングの実行 4. たずめ 参考リンク 1. リランカヌずは リランカヌは、情報怜玢の 「第二段階目」 を担う仕組みです。 䞀次怜玢  BM25などのキヌワヌド怜玢やベクトル怜玢で候補文曞を倚数ピックアップ リランカヌによる再ランキング  高床な意味理解や蚀語胜力を持぀モデルで、䞀次怜玢結果を再評䟡しお順䜍付け リランカヌは、FAQ怜玢やナレッゞベヌスのチャットボットなど、ナヌザヌ䜓隓の鍵ずなる郚分で利甚されおいたす。 2. 各リランカヌモデルの特城 mixedbread-ai/mxbai-rerank-v2 2025幎3月に公開された比范的新しめのモデル Apache 2.0で公開されおおり、商甚利甚が可胜 軜量モデルもありCPU環境でも䜿いやすい 専甚のラむブラリ(mxbai_rerank)から手軜に利甚できる Alibaba-NLP/gte-multilingual 䞭囜の倧䌁業Alibaba補 Hugging Faceでモデルが公開されおおり、transformersラむブラリから簡単に利甚できる Apache 2.0で公開されおおり、商甚利甚が可胜 70蚀語以䞊に察応しおいる(らしい) ※ 日本語ず英語に察応しおいるこずは確認枈 OpenAI GPTChatモデルをリランカヌずしお利甚 専甚のラむブラリ(opeaai)やlangchainから簡単に利甚できる プロンプトによっお挙動を柔軟に調敎できる 高性胜モデルを䜿う堎合、高い粟床が期埅できる API利甚のため運甚コスト・レむテンシには泚意 3. 実装サンプル 䞊蚘3぀のモデルを実装しおみたす。 それぞれのモデルの実装の互換性を保぀ために最初にデヌタクラスずリランカヌの抜象クラスを実装しおおきたす。 from abc import ABC, abstractmethod from pydantic import BaseModel, Field class RankResult (BaseModel): index: int score: float document: str = "" class BaseReranker (ABC): @ abstractmethod def rerank (self): pass mixedbread-ai/mxbai-rerank-v2 を䜿ったリランカヌ from mxbai_rerank import MxbaiRerankV2 class MxbaiReranker (BaseReranker): def __init__ ( self, model_name: str  =  "mixedbread-ai/mxbai-rerank-base-v2" , ): self.model = MxbaiRerankV2(model_name, device= "cpu" ) def rerank ( self, query: str , documents: list [ str ], return_documents: bool  =  True , top_n: int  =  3 , ) -> list [RankResult]: results = self.model.rank( query, documents, return_documents=return_documents, top_k=top_n, ) return results mxbai_reranker = MxbaiReranker() Alibaba-NLP/gte-multilingual を䜿ったリランカヌ import torch from transformers import AutoModelForSequenceClassification, AutoTokenizer class AlibabaReranker (BaseReranker): def __init__ ( self, model_name: str = "Alibaba-NLP/gte-multilingual-reranker-base" ): self.tokenizer = AutoTokenizer.from_pretrained(model_name) self.model = AutoModelForSequenceClassification.from_pretrained( model_name, trust_remote_code= True , torch_dtype=torch.float32, ) self.model = self.model.to( "cpu" ) self.model.eval() def rerank ( self, query: str , documents: list [ str ], return_documents: bool = True , top_n: int = 3 , ) -> list [RankResult]: pairs = [[query, doc] for doc in documents] with torch.no_grad(): inputs = self.tokenizer(pairs, padding= True , truncation= True , return_tensors= 'pt' , max_length= 512 ).to( "cpu" ) scores = self.model(**inputs, return_dict= True ).logits.view(- 1 , ).float() index = 0 rank_results = [] for p, s in zip (pairs, scores): rank_results.append( RankResult( index=index, score=s.item(), document=p[ 1 ] if return_documents else "" , ) ) index += 1 rank_results.sort(key= lambda x: x.score, reverse= True ) return rank_results[:top_n] alibaba_reranker = AlibabaReranker() OpenAI GPTgpt-4.1-miniを䜿ったリランカヌ import os from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain_openai import ChatOpenAI API_KEY = "XXXXX" os.environ[ "OPENAI_API_KEY" ] = API_KEY RERANK_PROMPT = """queryずなるテキストず耇数のテキストを含むtext_listが䞎えられたす。 text_listの䞭のテキストずqueryの内容を比范し、queryの内容ず近い順にtext_listのテキストを䞊べ替えなさい。 ***条件*** 1. queryずの内容が近い順に䞊べたテキストのむンデックスずスコアのリストを返すこず。 2. スコアは0.0から1.0の範囲で、queryずの内容が近いほど高くなるようにするこず。 """ class RerankedIndex (BaseModel): index: list [ int ] = Field( default=[], description= "queryずの内容が近い順に䞊べたテキストのむンデックスのリスト。" ) score: list [ float ] = Field( default=[], description= "queryずの内容が近い順に䞊べたテキストのスコアのリスト。" ) class OpenaiReranker (BaseReranker): def  __init__( self, model_name: str = "gpt-4.1-mini" , ): self.model = ChatOpenAI( model=model_name, max_tokens= 1000 , # temperature=0.0, top_p= 0.01 , seed= 42 , ) self.prompt = ChatPromptTemplate.from_messages( [ ( "system" , RERANK_PROMPT), ( "human" , "query: '{query}' \n text_list: '{text_list}'" ), ]) self.chain = self.prompt | self.model.with_structured_output(RerankedIndex) def _rerank_text ( self, query: str , text_list: str , ) -> int : res = self.chain.invoke({ "query" : query, "text_list" : text_list}) return res def rerank ( self, query: str , documents: list [ str ], return_documents: bool = True , top_n: int = 3 , ) -> list [RankResult]: text_list = [f "{i}. {doc}" for i, doc in enumerate (documents)] text_list = " \n " .join(text_list) res = _rerank_text(query, text_list) index_score_pairs = list ( zip (res.index, res.score)) rank_results = [] for idx, score in index_score_pairs: rank_results.append( RankResult( index=idx, score=score, document=documents[idx] if return_documents else "" , ) ) rank_results.sort(key= lambda x: x.score, reverse= True ) return rank_results[:top_n] openai_reranker = OpenaiReranker() リランキングの実行 実行䟋 test_query = "Give me the first document." test_documents = [ "This is the first document." , "This is the second document." , "This is the third document." , "This is the fourth document." , "This is the fifth document." , ] res_mxbai = mxbai_reranker.rerank(test_query, test_documents, return_documents= True , top_n= 3 ) res_gte = alibaba_reranker.rerank(test_query, test_documents, return_documents= True , top_n= 3 ) res_openai = openai_reranker.rerank(test_query, test_documents, return_documents= True , top_n= 3 ) 4. たずめ 筆者の怜蚌においおリランキングの粟床は、 openai (gpt-4.1-mini) > mxbai > alibaba ずいった結果になりたした。 (粟床は察象のテキスト矀の内容によるずころも倧きいず思いたすが...)、 実行コストが最も高いopenaiを䜿ったリランカヌで最も良い結果が埗られるのは劥圓なように思いたす。 リランカヌは怜玢䜓隓の向䞊に圹立ちたす。各モデルの特性やプロダクト芁件に応じお、最適な遞択を怜蚎しおみおください 参考リンク mixedbread-ai/mxbai-rerank-base-v2 (HuggingFace) Alibaba-NLP/gte-multilingual-reranker-base (HuggingFace)