ACES エンジニアブログ

ACESのエンジニアブログです。

ACES Meet流MVP開発の進め方

こんにちは、株式会社ACES でテックリードをしている福澤 (@fuku_tech) です!

最近、新車を購入し、遂に昨日納車されました!しばらくはノー残業で早く帰宅して、たっぷりと新車を楽しもうと心に決めた今日この頃です。

1. はじめに

ACES Meet は商談や会議内容を可視化し、営業組織の強化を支援する 営業DX×AI SaaS です。音声書き起こしや対話分析など、多様な AI アルゴリズムを活用し、営業の生産性向上をサポートしています。

現在、ACES Meet は PMF(Product Market Fit)に向けて試行錯誤を続けている段階にあり、市場のニーズを捉え、素早く仮説検証を繰り返すことが不可欠です。

そのため、私たちは MVP(Minimum Viable Product)の考え方を取り入れ、ユーザーのフィードバックをもとにプロダクトを進化させる戦略を採っています。

本記事では、ACES Meet のプロダクト開発戦略を以下の MVP - not "bike to car" の記事の内容を踏まえながら、私たちがどのように MVP を考え、どのようにプロダクトを成長させているのかを具体的に紹介していきます。

www.linkedin.com

また、本記事は以前公開した以下の記事の内容をさらに掘り下げたものです。併せて読んでいただくことで、ACES Meet の開発戦略についてより深く理解していただけると思います。

tech.acesinc.co.jp

2. MVP - not "bike to car" の記事における主張

MVP - not "bike to car" の記事で筆者は、MVP開発において異なる製品を段階的に発展させるのではなく、最初から最終製品の形を意識しながら試作と改良を重ねることが適しているのではないか、という考えを主張しています。

ここで、説明しやすいように以降の文章では、下図の中段の絵のことを「キックボードから作る絵」と呼称し、下段の絵を「手押し車から作る絵」と呼称します。

MVP - not "bike to car"

MVPについて語る時、キックボードから作る絵のように「キックボード → 自転車 → バイク → 車」といった形で、段階的に進化させることがMVPのあり方とされることが多い*1ですが、筆者はこのアプローチが部分的にしか正しくないと指摘しています。MVPでは、最初から最終製品の形を意識しつつ、必要最低限の機能を備えたものを開発し、そこから改良を重ねる方法も有効なのではないか、というのが筆者の主張です。

例えば、車を開発する場合、キックボードから始めるのではなく、最初から「最低限の車」として試作し、テストを繰り返す方が目的に合っているのではないかと述べています。

また、筆者はユーザー体験(UX)の視点も重要だと指摘しており、初期のプロトタイプでは技術的な要素を最小限に抑えながら、ユーザー体験を検証する方法が有効であるとも考えています。

具体的には、手押し車から作る絵のように、初手はエンジンを搭載せず、ボランティアが車を押して動きを再現することで、技術的な負担を抑えつつ、ユーザーの反応を確かめることができるのではないかと提案しています。

このように、筆者は段階的な製品の進化ではなく、最初から本来目指す形を模索しながら改良を重ねるアプローチがより実用的ではないかと主張しています。

3. ACES Meet における「手押し車から作る絵」の解釈

以降、手押し車から作る絵の各フェーズのことをそれぞれ以下の名称で表現します。

  • STEP1: 手押し車
  • STEP2: 簡易トラック
  • STEP3: 試作車
  • STEP4: 完成車

ACES Meet の開発チームでは、プロダクト戦略として手押し車から作る絵を意識しながら開発を進めています。さらに、手押し車 → 簡易トラック → 試作車の進化と、試作車 → 完成車の進化には本質的な違いがあるのではないか? という独自の解釈を入れています。

この違いを端的に言うと、手押し車 → 簡易トラック → 試作車のフェーズは少しずつ形状が変化しながら進化しているのに対し、試作車 → 完成車のフェーズではタイヤ・エンジンの厚み・ライト・ボディ・塗装が一気にアップデートされていることが挙げられます。つまり、試作車 → 完成車のフェーズでは、それまで積み上げた知見やデータをもとに、プロダクトを抜本的に刷新するフェーズに入るのではないか? という仮説を持って解釈しています。*2

この考え方をもとにすると、手押し車 → 簡易トラック → 試作車は、試行錯誤を重ねながらロジカルに改善を積み重ねることで進化するフェーズであり、試作車 → 完成車は、それまでの知見をもとにプロダクト全体を再構築する大規模な転換フェーズであると捉えることができます。

この認識を持つことで、開発チームとしては、手押し車 → 簡易トラック → 試作車を「実験フェーズ」と割り切り、過度に時間をかけないようにする一方、試作車 → 完成車でスクラップ & ビルドしやすい形になっていれば多少の荒削りな部分があっても許容できる、という意思決定がしやすくなります。

4. ACES Meet の開発への適用

ACES Meet では、最初から最終製品の形を意識しつつ、最低限の機能を備えたMVPを市場に投入し、ユーザーのフィードバックをもとに進化させるというアプローチを採用しています。特に、第3章で述べたように、手押し車 → 簡易トラック → 試作車は実験フェーズ、試作車 → 完成車はプロダクトを抜本的に刷新するフェーズと捉えており、開発の進め方もこれに合わせて調整しています。

各フェーズでは、プロダクトの本質的な価値を見極め、開発リソースを適切に投下することが重要になります。

そのため、何を開発するかだけでなく、何を開発しないかを明確にすることも常に意識し、「やらないことを増やす」という方針を持ちながら取捨選択を進めています。

4-1. 実験フェーズでは本質的な価値を優先

手押し車 → 簡易トラック → 試作車のフェーズでは、ユーザーが求める本質的な価値を最小限の形で提供し、試行錯誤を重ねながら改善を続けることを重視しています。すべての機能を網羅するのではなく、仮説を立てながら最もインパクトの大きい機能に優先的にリソースを投下することで、スピードと価値提供のバランスを取っています。

4-1-1. ユーザーが価値を感じる部分を優先する

このフェーズでは、ユーザーが「業務プロセスの改善に繋がった」と実感できる体験や機能を最小限の形で提供することを最優先としています。そのため、すべての機能を作り込むのではなく、利用頻度やフィードバックをもとに、本当に求められている機能に集中し、優先的に開発を進めています。

仮説の精度を高めるために、ワークショップやユーザーインタビューを定期的に実施し、ユーザーの実際の課題やニーズを深掘りしています。こうした検証を繰り返しながら開発を進めることで、限られたリソースの中で最大の価値を生み出せるよう努めています。

ワークショップやインタビューの具体的な進め方については、また別の記事で詳しくご紹介する予定です。

4-1-2. 試行錯誤を前提にしつつ、拡張性を担保する

MVP開発では、試行錯誤を恐れず、素早く価値を届けることが重要です。初期段階では何が正解か分からないため、細かい仕様にこだわりすぎず、ユーザーに少しでも価値を提供できるのであれば試す、という柔軟なスタンスで進めています。

ただし、試行錯誤を重ねるからこそ、拡張性の確保も欠かせません。すべての機能を作り込むのではなく、将来的な変更や追加がしやすいように設計の柔軟性を持たせます。そのため、どこまで作り込むべきかは事前にチームで議論しながら進めています。

MVPとして開発を進める際、今後の拡張性をどこまで考慮するかはケースバイケースです。「とりあえず動けば良い」と割り切るのか、ある程度の変更を見越して設計しておくのかは、プロダクトの状況や開発の優先度に応じて判断する必要があります。

こうした判断に迷った際には、以下のフローチャートを指針の一つとし、「今回はどこまでやるか・何を捨てるか」を議論しながら進めています。

このように、ACES Meet の開発チームでは、試行錯誤を前提にしつつ、将来的な変更や拡張にも対応できる形を維持することで、スピードと継続的な進化のバランスを取ることを意識しています。

4-1-3. スピードと品質を両立するための開発方針

MVP開発ではスピードを優先する一方で、品質をおろそかにすると後のフェーズで修正コストが膨らみ、結果的に開発スピードを損なうリスクがあります。そのため、「スピードと質はトレードオフではない」という前提をチームで共有し、両立を前提とした開発を行うこと を重視しています。*3

たとえば、データモデルの設計やAPIのインターフェースなどの後からの変更が難しい部分は、序盤から適切に設計し最低限の拡張性を確保します。一方で、後から調整しやすい部分はスピードを優先し、短期間での改善が可能な範囲で進めることで、過度な作り込みを避けながらも品質を維持しています。

また、単一責任の原則を守ることで、コードの修正や拡張を容易にし、不必要なリファクタを減らすことを意識しています。責務を明確に分割することで、変更の影響範囲を最小限に抑え、開発のスピードを損なわない仕組みを構築しています。

加えて、チーム内では「スピードを維持しつつ、無駄な負債を抱え込まない方法」を学ぶ機会を設け、コードレビューやペアプログラミングを通じてナレッジを共有しています。さらに、判断に迷った際には、4-1-2で示したフローチャートを指針とし、意思決定の基準を統一することで、開発のスピードと持続可能性の両立を図っています。

4-1-4. 中長期的な借入(技術的負債)を「借入メモ」で管理する

ACES Meet の開発チームでは、Nealle さんの ソフトウェア開発における「借入」との上手な付き合い方 を参考にしながら、借入メモを活用した技術的負債の管理を試験運用しています。

「借入メモ」は、技術的負債を記録し、適切なタイミングで解消するための仕組みです。設計・実装時に「ここはスピードを優先する」と判断した場合、その背景や課題、関連URL、解決案をドキュメント化し、該当コードには以下のようなコメントを残しています。

# TODO: DEBT {日付} {ドキュメントのURL}

借入はリリース後できるだけ早く返済することを基本としつつ、優先度を見極めながら管理します。また、次回そのコードを触る際には、boyscout 的に改善を加えることも推奨し、負債の放置を防いでいます。

このように、MVP開発のスピードを維持しながら技術的負債を計画的にコントロールすることで、プロダクトの健全性を保つことを意識しています。

4-2. 試作車を完成車までアップデートするかどうかの意思決定

試作車 → 完成車では、試行錯誤を経た上でプロダクトのコアになり得るものを厳選し、完成形へと昇華させるフェーズに入ります。すべての機能を一律にアップデートするのではなく、ユーザーが本当に価値を感じているコア機能とその周辺に限定して取り組むことが重要です。

プロダクトを抜本的に刷新する試作車 → 完成車のフェーズはそれなりに時間とリソースを無駄を使う工程になるため、どこまでをアップデート対象とするかはユーザーの利用データやフィードバックをもとに慎重に判断する必要があります。

また、このフェーズでは、従来の延長線上での改良ではなく、抜本的な変革が求められる場合も多くあります。そのため、スクラップ & ビルドの必要性を受け入れ、開発チーム外の関係者(経営層・ビジネスチーム)とも事前に合意を取ることが重要です。

ここでの決断はプロダクトの中長期的な成長を左右するため、単なる技術的な判断ではなく、事業戦略の観点を含めて慎重に検討する必要があります。

5. おわりに

本記事では、MVP 開発における「手押し車から作る絵」の考え方をもとに、ACES Meet の開発方針を紹介しました。

手押し車 → 簡易トラック → 試作車のフェーズでは、本質的な価値にフォーカスし、スピードと品質の両立を意識しながら試行錯誤を重ねることが重要です。仮説検証を繰り返しつつ、拡張性を考慮し、技術的負債の管理を徹底することで、後のフェーズへの負担を最小限に抑えています。

試作車 → 完成車のフェーズでは、プロダクトのコアになり得るものを厳選し、必要に応じて抜本的な再設計を行うことで、最終製品に向けた進化を加速させます。従来の延長線上の改善にこだわらず、スクラップ & ビルドも視野に入れながら開発を進めています。

MVP 開発では、単に早く作るだけではなく、「何を開発し、何を開発しないか」を明確にし、適切な投資判断を行うことが重要です。

今後もこのアプローチを磨きながら、プロダクトの成長を支えていきます。

本記事を通して、ACES に少しでも興味を持っていただけた方は、ぜひカジュアル面談のお申し込みをお待ちしております!

ACES の採用情報はこちら↓

youtrust.jp

youtrust.jp

*1:https://blog.crisp.se/2016/01/25/henrikkniberg/making-sense-of-mvp

*2:MVP - not "bike to car" ではそこまでは語られていないため、あくまでも私たちの独自の解釈です。

*3:id:t-wada さんの質とスピードの内容に大いに影響を受けています。

まさにコストカット祭り - GPUサーバー代を約30%削減した話 -

こんにちは!ACES でソフトウェアエンジニアをしている西川(@kotosearch)です。

今回は「まさにコストカット祭り - GPUサーバー代を約30%削減した話 -」と題して、高くつきがちな GPU サーバーに焦点をあてて、実際に私たちがコストカットに成功した Tips を皆さんにご紹介したいと思います。

前提として ACES は上場を目指しており、事業の健全性や採算性が求められる中で、予実の達成は不可避です。喫緊の課題として原価通信費(サーバー代など)の増大が上がっており、こちらを削減することが至上命題でした。

1年ほど前の話にはなりますが、2024年2-3月ごろにかけて行ったコスト削減の取り組みについて語って行きます。

そもそも GPU サーバーって高いの?

私たちのプロダクト ACES Meet では、録画・録音した会議データを解析し、文字起こしやサマリー、スタッツ等をユーザーに提供する Web アプリケーションです。

音声や動画の解析はプロダクトのコアバリューなのですが、音声・動画解析は非常に高負荷なタスクであり、CPU に比べて並列計算が高速な GPU を使う方法が主流です。

しかし、GPU インスタンスは CPU インスタンスに比べて利用料金が高いので、「必要な時に必要なリソースだけ使う」という観点を持たずに運用していると、あっという間に月々の費用が跳ね上がってしまいます。

EC2 インスタンスのオンデマンド料金(東京リージョン)で比較すると、同じスペックでも GPU インスタンスの方が2倍ほど高い料金設定となっています。

抱えていた課題

前提として、ACES Meet では AWS Batch を使って GPU インスタンスを起動し、推論処理を実行します。

AWS Batch は「インスタンスの起動 ⇒ コンテナの起動・実行・停止 ⇒ インスタンスの停止」を自動でやってくれるサービスで、インスタンスの起動時間に応じて課金されます。

推論に使う重みファイルは Docker イメージに含まれており、ECR から都度 docker pull してインスタンスを起動していました。

そしてこの仕組みで運用していると、次第に以下のような課題に直面しました。

  • docker イメージにモデルの重みファイルや pytorch のような重いライブラリなどを含んでおり、docker pull に 10分 以上かかる
  • docker pull が長いせいでインスタンスの起動時間が伸びてしまい、コストが高くなる
  • 実行環境を隔離するため1つのEC2インスタンスに1コンテナだけ起動するようにしているので、イメージキャッシュが非常に使いづらい

特に docker pull 時間が伸びることで、コストとユーザー体験の両面で悪い影響を与えていたので、なんとか GPU サーバーの起動時間を短くできないか模索していました。

解決法

結論からお話しすると、コストカットで効果的だったアプローチは以下の2つでした。

  1. コンテナイメージの容量を削減する
  2. ボリュームの I/O 性能を上げる

詳しく解説していきます。

1. コンテナイメージの容量を削減する

重みファイルを Docker イメージではなく S3 に配置

AIを活用していると学習済みモデル(重みファイル)の容量が大きくなるケースが多々あります。

従来はこれらのファイルをコンテナイメージに直接含めていましたが、イメージサイズが増えて docker pull が非常に遅くなることで、起動も遅くなるしコストも増えるという問題がありました。

重みファイルは切り離し可能だったので、こちらは AWS S3 に配置し、コンテナ起動後にダウンロードする方式に変更しました。

重みファイルを剥がしたことでコンテナ自体が軽量化し、プル時間の削減によってGPUサーバー代を15%削減できました。

こちらはシンプルな方法ですが、運用している以外と盲点になっていて気づかなかったので、ちょっとした労力で大きくコスト削減できた例でした。

2. ボリュームの I/O 性能を上げる

EBS ボリュームを gp2 から gp3 に変更

GPU サーバーとは直接関係ないですが、まずはボリュームタイプを gp3 へアップグレードしました。

理由は「シンプルに安い」のとスループットを上げられる」こと。同じ容量でも実は gp3 の方が20%安く、また IOPS やスループットなども gp2 に比べて大幅に引き上げ可能です。

後述するスループット向上」のためにアップグレードしたかったのですが、ストレージを変えるだけで単価も下がるのはラッキーということで、すぐさま gp3 に移行しました。

docs.aws.amazon.com

EBS ボリュームのスループットを上げる

まず用語の解説からです。ボリュームの I/O 性能を表す指標には次の2つがあります。

  • IOPS: 1秒間にストレージへ読み書きできる回数
  • スループット: 1秒間にストレージへ読み書きできる容量

docker イメージはモデルや推論関連のライブラリなど重いものが入っていると、スループット性能を上げることで docker pull が早まる可能性があるのです。

解説に入る前に、docker pull について少し掘り下げます。

Docker イメージは複数のレイヤーで構成されており、レイヤーの実態は圧縮された tar アーカイブファイルです。

docker pull を実行すると、各レイヤーをリモートレジストリから並列でダウンロードし、ダウンロードできたレイヤーから順次展開(解凍)していきます。

% docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
f7ec5a41d630: Pull complete
aa1efa14b3bf: Extracting  2.654MB/26.58MB  # 展開中
b78b95af9b17: Download complete
c7d6bca2b8dc: Download complete
cf16cd8e71e0: Download complete
0241c68333ef: Download complete

dockerlabs.collabnix.com

docker pull に時間がかかっていた原因をよく調べると、ダウンロードより解凍に時間がかかっていることがわかりました。

ということは、ストレージのI/O性能を上げて解凍を早めれば良いのでは?ということで、やってみました。

重いイメージを素早く解凍する必要があるので、IOPS ではなくスループットを上げて検証してみることにしました。(スループット: 1秒間にストレージへ読み書きできる容量)

前提として、GPU サーバーのコスト推移は以下のように計算します。概算を知りたいので、細部は省略しています。

段階的にスループットを上げて検証し、インスタンス起動時間とコスト削減幅をプロットしていった結果、スループット275MB/s にすると最も ROI が高いことがわかりました。

結果的にインスタンス起動時間は4分短縮。GPUサーバー代をさらに18%削減できました。

当然ユースケースによりますが、docker pull 時間が長い場合はI/O性能を上げてやると、起動時間の短縮 & コストカットにつながるかもしれません。

(余談)コストカットはお祭りである

もちろん粛々とコストカットに取り組むことは大切ですが、同時に周りを巻き込んでお祭りムードでやることも大事でした。

みんなで肩組んで、どこがボトルネックなのか?どこを潰せばこれだけ減らせるか?を取り組むメンバー全員で向き合って話し、一致団結することで士気も高まって次々とアイデアが浮かんできました。

コストカットは前に進むというより後ろを振り返るような業務ですが、

  • やったらやった分だけすぐに数字に出る
  • 開発だけではなく、会社全体がハッピーになる

のようにいいこと尽くしなので、むしろやっていて楽しいしお祭りなんです。

ちなみに、「芸術は爆発だ」ならぬ「コストカットはお祭りだ」というお話は、こちらでも語られているのでぜひ👇

youtu.be

まとめ

クラウドサーバーは「インスタンス起動時間 + インスタンスの稼働時間」で課金されるので、この両面でコストカットしてくことが重要です。

今回は推論処理そのものの見直しではなく、アプリケーションレイヤーだけで解決可能な「インスタンス起動時間」にフォーカスしてコストカットを行いました。私個人としては、I/O性能を見直すことで docker pull が早くなるというのはかなり意外な発見でした。

GPU サーバーは優れたパフォーマンスを持つ一方で、運用を誤るとコスト面で大きなデメリットを生むので、今回ご紹介したような小さな工夫を積み重ねて、コストカットの参考にしていただければと思います!

半年でライブラリを最新化!スタートアップが実践する継続的メンテナンス

こんにちは、株式会社ACES でテックリードをしている奥田(@masaya_okuda)です。

リポジトリで利用するライブラリを適宜バージョンアップするのは、現場によっては当たり前かもしれません。しかし、プロダクトを前に進めるため日々機能開発を行うスタートアップにおいて、継続してバージョンアップを実施するのは容易ではありません。

本記事では、入社後半年で全てのライブラリを最新にバージョンアップし、2024年1月からこの状態を保ち続けている取り組みについてご紹介します!

なぜライブラリのバージョンアップを継続的に行うのか?

ライブラリのバージョンアップを継続的に行うことで、以下のような状況が起こりにくくなると考えています。

  • EOLの前後で、慌てて開発ロードマップの変更を余儀なくされる
  • ビッグバンバージョンアップによるインシデントリスク
  • 機能開発を止める、もしくはバージョンアップ担当者とのコンフリクトに常に気を使う
  • メンテナンスされてないリポジトリだから手を抜いてもいいという割れ窓の力学

グラフはフロントエンドのリポジトリにおいて、dependabotが作成したバージョンアップPR数です。

2024年にdependabotが作成したバージョンアップPR数

近年フロントエンドの変化は大分安定したように思います。ですが気を抜くとすぐにバージョンが離れてしまうため、コツコツと対応していくことが重要です。ACES Meetのフロントエンドリポジトリでは日次でバージョンアップを行っています。

入社時は責任者が曖昧な状態

私が入社した当時、正社員のフロントエンドエンジニアは他におらず、業務委託の方が片手間でメンテナンスを行っている状況でした。TypeScriptをはじめとする主要なライブラリもメジャーバージョンから大きく離れており、セキュリティアップデートも滞っている状態でした。

これまで携わったプロジェクトにおいても、メジャーバージョンレベルのアップグレードが後回しにされる傾向があり、それが技術的負債の蓄積につながる場面を目にしてきました。技術的負債が蓄積されると、最終的には大規模なリファクタリングやシステムのリプレイスが必要となり、事業運営にまで影響を及ぼす可能性があります。

ちょうどNext.jsのメジャーバージョンアップが行われた直後でもあったため、「これ以上バージョンの遅れを放置することは避けたい」という思いから、まずは私がリポジトリオーナーとしてメンテナンスを主導することを決めました。

入社後半年で全てのライブラリを最新に

特に主要ライブラリのメジャーバージョンが2つ以上離れた場合のビッグバンバージョンアップを懸念し、下記の順で対応しました。

  1. セキュリティアップデートで対応可能なものを全てバージョンアップする
  2. Next.jsのメジャーバージョンなど、離れすぎると破壊的変更の対応が困難になるものを優先的にあげる
  3. dependabotを導入し自動でバージョンアップPRを作成
  4. その他のライブラリも順次最新化

特に2は破壊的変更に対する広範囲の修正が必要、関連ライブラリも上げないと壊れるなど、泣きそうになりながら気合いで乗り切ったのは良い思い出です(笑)

CIで守りながら毎日自動でバージョンアップ

dependabotがライブラリのバージョンアップ時に自動でPRを作成してくれるものの、都度確認してマージするコストが高い状況でした。そこでGitHub Actionsを整備し、パッチバージョンの場合は自動マージされるようにしてから格段に運用しやすくなりました!

バージョンアップPRのマージを安心して行える背景には以下の防波堤があるためです。

  • ユニットテストが厚く影響のある変更はCIでちゃんと落ちる
  • ユーザーにMUSTで保証したいシナリオがリグレッションテストで定義されており、リリース前に必ず動作確認される

余談ですがリグレッションテストの自動化も進めており、今後はより高頻度なリリースを目指しています!

ライブラリバージョン以外もメンテナンスする

バージョンアップ以外にも適宜メンテナンスしています。その際にもほとんどのライブラリが最新のため、「TypeScriptやReactのバージョンがネックで新しい技術を導入できない」などはありません。

  • Recoil → Jotai
  • ESLint & Prettier → Biome
  • Popper → Floating UI
  • Node.jsのLTSに追従

Recoilは以前からずっと開発停止していましたが2025年始に遂にアーカイブとなりました。ACES Meetでは半年以上前からJotaiに移行しており緊急対応を回避できました。

github.com

破壊的変更を伴うメジャーバージョンアップや別ライブラリへのリプレイスには、一定の工数が必要です。これまでは以下のような方法で対応してきました。

一方で、Next.jsのApp Routerへの移行のように1ヶ月単位で工数が必要な大玉はなかなか着手できない状況でした。残業での対応は長続きせず品質の担保も難しいため、今期からは組織目標に組み込みきちんとリソース確保できるようにしました。

技術ロードマップの策定

テックリードの福澤と共に、DORA Core Modelに基づいて技術戦略を整理しロードマップを策定しました。ロードマップには技術負債解消の項目もありますが、あくまでも事業成長をゴールとし、商業的な成功やチームの満足度など、組織が目指す最終的な結果である成果(Outcomes)から逆算して注力すべき領域を定めました。

詳しくは福澤のテックブログでご紹介していますので、こちらもぜひご覧ください!

tech.acesinc.co.jp

策定の背景には、ACES Meetの開発チームが機能開発において高い生産性を維持し、経営層やBizチームからの信頼を積み重ねてきたことも大きいです。

tech.acesinc.co.jp

ACESはBizもエンジニアも「プロダクトをより安定させ、より遠くへ進めるためには?」と、同じ方向を向いて議論できる土壌があります。

また、経営層との合意ももちろん大切ですが、1エンジニアとして現代の開発プロセスにマッチした新しい技術や方法を通して、メンバーが開発を楽しめるようにしていきたいとも考えています!

Takepepeさんを技術顧問に迎え、Next.js App Routerへ移行!

フロントエンド領域におけるロードマップの第一弾として、Next.js v15へのメジャーバージョンアップとApp Routerへの移行を2025年1月に完了しました!工数の確保に加え、『実践 Next.js ― App Routerで進化するWebアプリ開発』の著者であるTakepepeさんを技術顧問に迎え、移行プロセスや移行後の設計について議論を重ねました。

約70画面の移行を、機能開発を止めることなくダウンタイム0で達成でき胸を撫で下ろしています。移行後の新しいディレクトリ設計に早くも「より開発しやすくなった」「どこに何を作るか迷わなくなった」という声も上がっており、生産性の改善に繋がりそうです。

App Router移行とその後の活用に関しては、また個別記事でご紹介できればと思います!

おわりに

今回はライブラリのバージョンアップの取り組みを中心に、ACES Meet開発チームの技術負債への向き合い方についてご紹介しました。フロントエンド領域に限らず以下の観点を大事にしています。

  • ライブラリのバージョンアップやメンテナンスはコツコツ継続的に実施する
  • 目的や重要性を含めてマネジメント・経営と合意し、ロードマップとして可視化する

今後も機能拡張と安定した技術基盤構築の両方を妥協することなく推進していきます!

最後に、私たちと一緒に事業と技術の両面で力を発揮いただける方を募集しています!ACESに少しでも興味をお持ちいただけましたら、ぜひカジュアル面談でお話ししましょう!

ACESの採用情報はこちら↓

youtrust.jp

youtrust.jp

夜間作業からの脱却!日中リリースのすすめ

1. はじめに

こんにちは、株式会社ACESでソフトウェアエンジニアをしている豊森です。

最近、家のエアコンの効きが今ひとつで、リモートだと寒さを感じることが増えました。オフィスは暖房が効いて快適なので、出社のありがたみを実感しています。

さて、多くの開発現場では、プロダクトのリリース作業をユーザーの利用が少ない夜間に行うことが一般的です。私自身も、前職では毎週複数回の夜間リリースを実施している時期もあり、生活リズムが乱れることに悩まされました。次第に開発効率に影響が出てきたため、リリース頻度を隔週に落とした経験もあります。

一方、ACES Meetの開発チームではフィードバックサイクルを速くするために、リリース頻度を隔週から週次に増やす取り組みをしてきました。

フィードバックサイクルについては以下の記事もご覧ください。

tech.acesinc.co.jp

持続可能な週次リリースを実現するために、リリース作業を昼間に行うようにしました。その結果、リリース作業の負荷が軽減され、プロダクト開発にも良い影響を与えています。

この記事では、私たちのチームが日中リリースを実現するために取り組んだ内容についてご紹介します。

2. 日中リリースがもたらすメリット

夜間リリースはエンジニアの生活リズムを乱し、心身に大きな負担をかけます。日中リリースに切り替えたことで、夜間作業が不要になり、健康的な働き方が実現できました。この負担軽減により、開発業務に集中しやすくなり、プロダクト全体の品質向上にもつながっています。

さらに、日中リリースによりリリース頻度を増やすことが可能になります。私たちのチームでは隔週リリースから毎週リリースにしましたが、作業が昼間になったこととリリース作業自体を圧縮したことで、無理なく継続できています。これにより、開発した機能を素早くユーザーに提供することができており、フィードバックサイクルを短縮できました。

また、昼間であれば他のメンバーや責任者も稼働していることもメリットの1つです。もし、リリース作業中に予期せぬ問題が起きた場合でも、必要があればすぐにチーム全体で連携して対応することができます。

3. 日中リリースの技術的課題と克服方法

具体的に日中リリースをするための技術的な課題とその克服について見ていきます。

3-1. サービスを止めないリリース手法

Blue/Greenデプロイを使ってダウンタイムを発生させないことは前提ですが、動作しているアプリケーションに影響を与えないためのアプローチが重要です。そのために、変更を段階的に実施する工夫が求められます。

3-2. デプロイ順序の工夫

ACES Meetでは、フロントエンドのSPAと、そこから呼び出されるバックエンドのAPIが、それぞれ独立した構成になっています。

フロントエンドを変更して新しいAPIを呼び出す場合には、バックエンドを先にデプロイする必要があります。逆に、不要になった機能をオミットする場合は、フロントエンドからの呼び出しがなくなるまでは、バックエンドのAPIを残しておく必要があります。

私たちの場合は、Webアプリケーション部分について以下の順序でデプロイしています。

  1. DBマイグレーション
  2. バックエンドデプロイ
  3. フロントエンドデプロイ

そのため、新しい機能を追加する場合、新規のAPIを用意してフロントエンドから呼び出すだけなら特別な考慮は必要ありません。もし、機能をオミットする場合には、最初にフロントエンドからAPI呼び出しの導線を削除し、APIエンドポイントの削除は翌週のリリースで行うといった分割が必要になってきます。

3-3. DBマイグレーションの工夫

DBへの大きな変更はサービス停止に繋がる可能性があるため、日中リリースにおいてDBマイグレーションは特に注意が必要です。ACES Meetの開発では、新機能の実装や既存機能のアップデートに伴うDBのマイグレーションは頻繁に発生します。そのため、マイグレーションのパターンごとに、DBへの影響を整理し、ダウンタイムやパフォーマンスの低下を防ぐために入念な計画を立てています。

例えば、新規のリソースを追加するためにテーブルの作成を行うマイグレーションは比較的安全です。稼働中のアプリケーションからは参照されていないため、マイグレーションを行っても問題は起きません。

一方、既存のリソースを削除または変更するマイグレーションは、慎重な対応が求められます。例えば、不要になったテーブルを削除する際には、アプリケーションコードから影響箇所を全て削除してからマイグレーションを実行する必要があります。このような場合、影響を最小限に抑えるため、アプリケーションコードの削除とテーブル削除でデプロイを複数回に分けることも検討します。

3-4. 後方互換性を保つ

動作中のアプリケーションに影響を与えないためには、後方互換性を意識した設計が不可欠です。

例えば、APIに新しいリクエストパラメータとして user_type を追加する場合、既存のフロントエンドが user_type なしでリクエストを送る可能性があります。このような場合、サーバー側で user_type を必須にせず、デフォルト値や存在チェックを用意することで、既存の動作に影響を与えないように対応します。

そのため、設計段階でも後方互換性について、古いデータやリクエストが新しい仕様で意図しない挙動を引き起こさないかを、チェック項目として確認を徹底しています。

3-5. インパクトのある変更は夜間リリースも選択肢

もちろん、どうしてもサービス停止が発生するインフラの変更や、DBの大きな変更は夜間に実施します。日中リリースにこだわらず、ユーザー影響を最小限に抑えるために夜間リリースを実施することは選択肢の一つです。

4. 高頻度リリースを支える日中リリース以外の工夫

日中リリースを導入した後も、毎回のリリースを無理なく実現するための改善を行いました。

4-1. デプロイ作業の簡略化

リリース回数が増えるため、煩雑だったリリース手順を見直しました。

まず、デプロイ前の準備や確認に時間がかかっていた工程をプルリクエストを作成するだけで済むように運用を改善しました。

さらに、属人的になりつつあったデプロイのスクリプトを簡易な手順で実行できるようにCDを整備しました。前述のプルリクエストをマージするだけでデプロイできるようにしています。

現在は、正社員メンバー全員がデプロイできるようになり、ローテーションでペアを組んでデプロイを担当しています。1回のデプロイ時間は準備からデプロイ結果の検証まで1~2時間かかっていたものが、今は30分程度で済んでいます。現在も改善を続けており、さらなる高速化に取り組んでいます。

4-2. リグレッションテストの効率化

リグレッションテストの効率化も重要な取り組みであり、私たちのチームでは本番リリース時の網羅的なテストはやめることにしました。 本番リリース前には以下のテスト工程によって、プロダクトの品質を担保しています。

本番環境では環境差分などポイントを絞った確認だけにすることで、リリース時の検証工程を大幅に短縮することができました。

また、ステージング環境でのリグレッションテストにおいても、外注することで開発チームの負担を軽減しています。

5. 日中リリースを実現したプロセスと成功の鍵

具体的な導入プロセスの事例と、その成功の鍵についてご紹介します。

5-1. 導入プロセス

以下のステップで段階的に導入しました

  • 8月中旬
    • リリース頻度を隔週から毎週リリースに変更
    • ステージング環境のリグレッションテストを外注
  • 9月初旬
    • リリースを夜間リリースから日中リリースに変更
  • 10月中旬
    • CD改善によるリリース手順の簡易化
    • 本番環境でのリグレッションテストを縮小

現在は安定した週次リリースの運用ができています。

5-2. 成功を支えた要因

日中リリースの取り組みは、エンジニアリングマネージャーの提案から始まりました。 エンジニアリングマネージャーの取り組みは以下の記事に詳しく書かれているのでご覧ください。

tech.acesinc.co.jp

その提案に対し、どう実現するかをチームで議論し、具体的な解決策に1つ1つ取り組んできました。改善を推進しようとする積極的な姿勢や、変化を柔軟に受け入れる文化がチーム全体に根付いていたことも大きな要因です。この文化があったからこそ、新しい試みに前向きに挑戦し、たった2ヶ月で持続可能な日中リリースを実現できました。

6. まとめとこれからの展望

日中リリースへの移行によって、エンジニアの負担軽減、リリース頻度の向上といった、多くの成果を得られました。この取り組みにより、私たちは持続可能な週次リリースを実現し、プロダクトの品質向上とフィードバックサイクルの短縮を達成しています。

次の目標は、さらにリリース頻度を高めることで、ユーザーにより迅速に価値を届けることです。そのために、以下の施策を進めています。

  • 自動テストを強化してE2EテストをCIに組み込む
  • リリース作業手順簡略化の推進
  • Featureフラグの活用による影響範囲の最小化

私たちのチームでは一緒に改善に取り組むメンバーを募集しています!少しでも興味を持っていただけた方は、ぜひカジュアル面談のお申し込みをお待ちしております!

youtrust.jp

youtrust.jp

メンバーの考え方を変えて背中を押したら、半年間でチームのPullRequest数が1.5倍になった話

どうもエンジニアリングマネージャーのkobaanです。

オフィスが湯島ということで、初詣は湯島天神に行ってきました!中高生の娘たち用に学業御守りを購入して手渡したら、若干訝しげな顔をしておりました・・・。 勉学を頑張るのだ若人よ、これは中年からの警告だ。などとは言ってませんがそう言う思いで渡しています(笑)

エンジニアリングマネージャーとしてACES Meet事業で行ってきたこと

今回は、ACES Meet事業にて私が入社してから実施した取り組みと成果についてお話しできればと思っています。 もちろんこれを当たり前に行っている組織も多分にあると思いますが、困っているマネジメントレイヤの方たちの少しでも助力になれば幸いです。

まず、背景とフォーカスしているポイントをご説明します。

小林が入社・選考当時の背景

これは私も聞いている限りになりますが、私が入社する1年ほど前(なので今からで言うと1.5年以上前)から利用者が増加していましたが、複数の障害が重なったこともあり開発計画が立たない状況まで陥ったことがあったとのことです。

ただし、その障壁を乗り越えるべく、事業責任者と当時のエンジニアリングマネージャーが開発・リリースプロセスを整備し、基盤を構築し、開発は安定的に行える状態にまで状態は回復したそうです。

また、開発チームの中に運用・保守に関する観点が根付くまで、教育目的も含めて多少効率が悪い開発になっていたとしても、安全にリリースを行うためのフローを整備することに注力していました。これらの一連の流れは今回の話の礎になっていますので、この事を頭に入れて読んでいただけると嬉しいです。

ここまで読んでいただいた段階で、結構改善してるんじゃないかと思われますが、それでも入社した当初は以下の課題が残っていました。

  • インシデントに対する強い緊張感
  • プロダクトの機能追加に対する過剰な慎重さ

入社後に感じたこと

入社前から開発に対する足腰の強さみたいなものは感じていましたが、入社後には開発に対するナイーブさや、品質重視によるチャレンジしにくい空気を強く感じました。

この空気感を変えることが私の最初のミッションだなと感じたことを当時を振り返って思い出します。

何にフォーカスしようとしたのか

まずは、SaaSのようなプロダクトの特性と、我々はPMFに向けてどう言った試合運びをすべきかと言うのを

の流れを汲みながら、プロダクト価値の考え方として以下のような整理をしていました。

(実はもっと幅広に考えていますが、今回は一部だけ抜粋させていただきました。また別記事でお話しできればと思っています。)

そこから目指す戦略を整理し、以下の2つの視点でチームの改善を行いました。

  1. フィードバックサイクルを起点としたワーキングアグリーメントの策定と浸透
  2. リリース頻度の短縮

これらの対応はエンジニアチームだけでなく、Biz(セールス、CSなど)のチームにも思想を共有し、うまく巻き込むことで組織全体の文化として根付かせることを目指しました。 それは事業全体を支える文化であることが重要だと考えていたためです。

また、色々と検討していた中で、この2点にこだわった理由としては先述した通り、開発としての足腰が強かったので何か自分から手を加えるというよりも、エンジニアが自律して行動できるきっかけ作りであれば良い、それだけでもっと前に進めると考えたからです。

ワーキングアグリーメントの策定

心理的安全性を確保しながら、不確実性の高いソフトウェア開発を効率化するために、以下のような方針を整理しています。

  • HRT(Humility, Respect, Trust)
  • Feedback is Gift
  • Disagree and Commit

これらを含めた8つのワーキングアグリーメントを設定し、Weeklyで今週のフォーカスしたいアグリーメントを決めたり、振り返りの時に今週のアグリーメントを意識して行なったことなどを確認することで、徐々にチームに浸透させて行った結果、全員が無意識的に認知できるようになったと感じています。

リリース頻度

リリース頻度はDORAの4Keysでも謳われているように、開発生産性としてもプロダクトのフィードバックサイクルを指し示す指標としても重要なファクターです。

ACES MeetはAIによる解析機能などもありますが、表側はシンプルなWebアプリケーションでありながら、2週間ごとの夜間リリースという極力リスクヘッジしたリリースプロセスとなっていました。

まずは毎週リリース、徐々に日次リリースにしましょう!という方針をチームに示したところ、毎週夜間は流石にしんどいですと言う意見が出てきたのを覚えています。 (余談ですが実は最近新しいワザを覚えまして、帰納的に考えるのではなく演繹的に考えるというテクを使えるようになっていたので、それを今回は使いましたw)

じゃあお昼リリースにできるにはどうしたら良い?と言う語りかけをしたところ、「難しいですね」じゃなく「なるほど、どう実現しましょうね・・・!一緒に考えましょう!」という前向きな思考になっていただけました。

もちろん前述したワーキングアグリーメントのおかげもあるかもしれませんが、大きくはACES Meetのエンジニアが素直かつ前向きに考えられる性質があり、これがチームの強みだからこそ噛み合って実現できたのだと思っています。

今では、むしろ週次リリースに満足せず、日次リリースに向けて更なる基盤検討を進めているところです。

結果どうだったか

何かツールを入れたり、具体的なプラクティスを導入したりではなく、割と抽象度の高いメンバーを応援するような方針を打ち出すことで様々な施策が生まれた結果、7-9月と、今回の方針が効き始めた10-12月とで比較したときの改善成果としてエンジニアの人数はほぼ変化なしに対して、PR数が1.5倍になりました。

特に、エンジニアがプロダクトに積極的にコミットする雰囲気が醸成され、チーム全体のパフォーマンスが向上したと思っており、定性であってもエンジニアが生き生きとしている組織であることが一番の成果だったなと思っていますし、自分自身が嬉しかったなと思えているところです。

実際PR数に関しては過去記事にもあるように、フィードバックサイクルを重要視する文化を土壌として複数のエンジニアからの自律的な施策が産んだ成果であると思っています。

tech.acesinc.co.jp tech.acesinc.co.jp tech.acesinc.co.jp

また冒頭に述べたように、開発の基礎力があることで取り組みや施策がスムーズに進んだことは間違いなく、そこは私だけの成果ではないと思っています。

今後

さらにフィードバックサイクルを高めるべく以下のような施策を考えながら邁進しています。

などなど、まだまだ進化し続ける伸び代たっぷりです。

最後に、こんな成長過程のチームで、一緒に働きませんか?

youtrust.jp

youtrust.jp

ACES Meet開発におけるテックリードのミッションについて

はじめに

こんにちは、株式会社ACES でテックリードをしている福澤 (@fuku_tech) です。

テックリードという役割は、一言で説明するのが難しいポジションだとよく感じます。企業やチームによってその役割やミッションは大きく異なり、「ACES Meet開発では、テックリードは具体的にどんなことをしているの?」といった質問をカジュアル面談などでいただく機会も多くあります。

そこで本記事では、ACES Meetの開発チームにおけるテックリードとしての役割や、日々取り組んでいる課題、戦略、具体的なアクションについてお伝えします。テックリードというポジションに興味がある方や、ACES Meetの開発に関心をお持ちの方にとって、この記事が少しでも参考になり、興味を深めるきっかけになれば嬉しいです。

ACES Meetの状況と課題

ACES Meetは、まだ完全にPMF(プロダクトマーケットフィット)を達成していない段階にあります。このフェーズでは、開発チームとして以下の課題を克服していく必要があります。

  • 市場の不確実性: 顧客の課題やニーズがまだ明確に定まっておらず、仮説の精度を上げるために多くの試行錯誤が求められます。その過程で、どの仮説を優先的に検証すべきかを判断する難しさが課題となっています。
  • フィードバックの速度と質の確保: 仮説検証と市場対応を迅速に進めるためには、プロダクトの改善や新機能をスピーディにリリースできる体制が必要です。そのため、開発プロセスを効率化し、フィードバックサイクルを高速化することが重要です。また、得られたフィードバックを最大限効率的にプロダクトへ反映させるためのチーム内の連携強化も欠かせません。

こうした課題に対応するため、ACES Meetでは、DevOps Research and Assessment (DORA) の調査結果を参考に戦略を検討しました。特に、フィードバックサイクルの高速化を実現するためにどの指標に注力すべきかを考える中で、「変更のリードタイム」と「デプロイ頻度」の改善が現状では最も重要だと判断しました。

DORA Core Modelに基づいたACES Meetの技術戦略

DORA Core Modelは、ソフトウェア開発における組織の成功を成果(Outcomes)に結び付けるための構造を示しています。このモデルでは、以下の3つの要素が連携して成果を導きます。

  1. 基盤能力(Capabilities): 開発組織が持つスキルやプロセス、技術的な基盤。
  2. パフォーマンス指標(Performance): ソフトウェアデリバリーや信頼性を評価するための指標(4keysなど)。
  3. 成果(Outcomes): 商業的な成功やチームの満足度など、組織が目指す最終的な結果。

DORA Core model v2.0.0

(引用元: https://dora.dev/research/?view=detail)

ACES Meetでは、このモデルを参考にしながら、「変更のリードタイム」と「デプロイ頻度」の向上に注力することが、仮説検証のスピードを上げ、プロダクトの成長を支える重要な手段だと考えています。この2つの指標は、上記のモデルが示す商業的成功において重要な役割を果たすと捉えています。

そして、「変更のリードタイム」と「デプロイ頻度」を本質的に改善するために、直近1年は以下のCapabilitiesを優先的に強化する方針を採用しています。

  • コード保守性(Code Maintainability): 安定したコードベースを維持し、将来的な変更や拡張が容易な状態を保つことで、フィードバックサイクルの持続性を確保。
  • 継続的デリバリー(Continuous Delivery): 自動化されたデプロイメントパイプラインを活用し、安全で迅速なリリースを実現。
  • 小さな単位での作業(Working in Small Batches): 作業を細分化し、迅速なフィードバックを得られるようにすることで、仮説検証のサイクルを短縮。

なお、デプロイメント自動化(Deployment automation)、継続的インテグレーション(Continuous integration)、テスト自動化(Test automation)といった項目も、「変更のリードタイム」と「デプロイ頻度」の向上に重要な役割を果たしますが、これらは過去の取り組みによって一定の改善がなされ、現在ではCIが5分以内に完了する仕組みが整備されるなど、フィードバックサイクルの高速化を支える基盤となっています。この成果を土台に、現時点では新たな注力領域にリソースを集中させています。

ACES Meet開発におけるテックリードのミッション

ACES Meet開発におけるテックリードとしての役割は、ACES MeetがPMFを達成し、継続的に価値を提供できる組織となるために、まさに上記で記載したような技術戦略を立案し、それを実行しきる責任を担うことです。*1

これまでの章で述べたように、ACES Meetが現状直面している課題を克服し、仮説検証のスピードを上げるためには、以下の2つの軸で改善施策を進める必要があります。

  1. 開発文化と仕組みの変革
  2. 成果に繋がる技術的基盤の強化

具体的な取り組み

ここまでの章で述べた通り、ACES MeetがPMFを達成し、商業的成功を目指すためには、技術戦略を具体的な行動に落とし込む必要があります。その一環として、チーム全体で議論を重ね、技術ロードマップを策定しました。このロードマップでは、以下の2つの軸に沿って取り組みを進めています。

開発文化と仕組みの変革

開発チーム全体が仮説検証のスピードを上げ、プロダクトの成長を支える組織として機能するためには、技術的な基盤だけでなく、開発文化や仕組みを進化させることも重要です。これを実現するため、以下の取り組みを進めています。

小さな単位での作業(Working in Small Batches)の徹底

タスクを細分化し、小さな粒度でPull Request (PR) を作成することで、早期のレビューやフィードバックを可能にしています。この取り組みにより、変更のリードタイムが短縮され、迅速な価値提供が実現しています。

さらに、PRが小さいことで障害発生率が低下し、リリースの安定性が向上しました。障害対応の時間も短縮され、開発チーム全体の生産性向上に繋がっています。

詳細については、以下の記事もご覧ください。

tech.acesinc.co.jp

レビュー最優先の文化醸成

レビューのスピードを重視し、2〜3営業時間以内に1次返信を行うことをチームのルールとして徹底しています。これにより、PRの滞留を防ぎ、変更のリードタイムをさらに短縮しています。このルールを守ることで、チーム全体のコミュニケーションがスムーズになり、開発フローの効率が向上しています。

積極的なペアプロ・モブプロの活用

ペアプログラミングペアプロ)やモブプログラミング(モブプロ)を積極的に取り入れ、次のような効果を得ています。

  • 知識共有の促進: チームメンバー間での知識伝達をスムーズにし、属人化を防ぐ。
  • オンボーディングの強化: 新規メンバーが早期にプロジェクトに慣れることをサポート。
  • 設計の合意形成: 懸念事項を洗い出しやすくし、合意形成を迅速化。
  • レビューのスムーズ化: 事前に設計や実装方針が共有されていることで、PRレビューの時間が短縮。

一方、ペアプロ・モブプロのやり方については、まだこれだという形が固まっておらず、書籍や外部の記事を参考に、現在進行形でより良いプラクティスを取り入れるべく試行錯誤している段階です。

AIをフル活用した開発

ACESでは、開発プロセスの各段階でAIをフル活用する文化を推奨しています。GitHub CopilotChatGPT Teamを導入し、チーム全体の生産性を向上させています。

これらのツールを、ユーザーストーリー作成、要件定義、設計、実装、レビュー、テストといった全ての工程で、思考の整理や開発効率化のために活用しています。ただし、現在はまだ試行錯誤の段階であり、テックリードを中心に改善を重ねようとしているところです。今後、知見が蓄積され次第、整理して記事として発信できればと考えています。

成果に繋がる技術的基盤の強化

仮説検証を高速で繰り返し、プロダクトを迅速に成長させるためには、堅牢で柔軟な技術基盤が欠かせません。この技術基盤の強化において、ACES Meetでは以下の2つの柱に注力しています。

コード保守性(Code Maintainability)の向上

コードベースの保守性を高めることは、開発者が効率よく作業し、仮説検証を迅速に繰り返すための重要な取り組みです。これを実現するため、以下の改善に注力しています。

  • 技術負債の解消:
    • 新旧の記述が混在し、可読性が低下している箇所を統一的なスタイルへ移行。
    • 複雑度が高く、開発者がコードリーディングや機能拡張時に余計な時間を費やしてしまう箇所を重点的に改善。
  • コーディングルールの明確化とアップデート:
    • 設計や実装時に迷いが生じやすい箇所について、コーディングルールを明確化し、ガイドラインをアップデート。
  • デザインシステム準拠の汎用UI整備:

継続的デリバリー(Continuous Delivery)の推進

継続的デリバリーの実現は、「変更のリードタイム」と「デプロイ頻度」を向上させるための重要な鍵です。現在の週次デプロイから、より頻繁な日次デプロイを実現することを目指し、以下の取り組みを進めています。

  • デプロイ時の安全性の担保:
  • Feature Flagの導入:
    • フィーチャーフラグシステムとしてDevCycleを導入することで、リリースとデプロイの分離を可能とし、段階的なリリースやA/Bテストを容易にする。(中長期的には、トランクベース開発への移行を視野に入れています。)
  • リグレッションテストの自動化:
    • 現在手動で行われているリリース前のリグレッションテストの自動化を進めることで、リリースプロセスを効率化し、信頼性を向上させる。

これらの取り組みを通じて、ACES Meetは現状、「変更のリードタイム」と「デプロイ頻度」の改善に注力し、仮説検証のスピードを高めることを目指しています。この戦略を基盤に、PMF達成とプロダクトの成長に向けて着実な前進を続けています。

なお、本章で挙げた具体例は、ACES Meet開発における取り組みの一部に過ぎません。特に効果が伝わりやすいものを選んで記載していますが、これら以外にも多くの施策を並行して進めています。

また、フィードバックサイクルの高速化に関連する詳細な取り組みについては、以下の記事でも紹介していますので、併せてご覧ください。

tech.acesinc.co.jp

おわりに

ACES Meetの開発チームは、顧客の課題を解決し、価値を提供するために挑戦を続けています。その中で、テックリードとして私が特に意識しているのは、日々の業務をこなすだけに留まらず、チームの文化や技術的基盤を進化させ、フィードバックサイクルを高速化し、得られるフィードバックを最大限に活用する体制を築くことです。

この記事でご紹介した内容は、テックリードとしての業務の一部ではありますが、本記事を通じてその一端をお伝えできていれば幸いです。

本記事を通じて、ACESに少しでも興味をお持ちいただけましたら、ぜひカジュアル面談でお話ししましょう!

ACESの採用情報はこちら↓ youtrust.jp

*1:これは現時点でのミッションであり、事業やプロダクトの状況に応じて見直しが必要になる場合があります。

5年間ソフトウェアエンジニアをやっていた僕がCREを始めた理由

あいさつ


はじめまして、ACESでソフトウェアエンジニアをしている村上 (@d_murakami_0816) です。

2024年8月からCREとしての活動も開始しました。本記事では僕がなぜCREになったかについて書いていこうと思います。

CREに興味はあるけどどんな感じなのかわからないという方の参考になれば幸いです!

CREとは


Customer Reliability Engineering の略です。2016年にGoogleによって発表されました

(参考: https://cloudplatform-jp.googleblog.com/2016/09/Google-Cloud-Platform-sets-a-course-for-new-horizons.html )

顧客との信頼関係の構築をミッションとする職種となっています。

CSE (Customer Success Engineer) と近い部分がある (この後紹介する業務内容にもどちらかというとCSEに近いものがある) のですが、本記事では以降全てCREに呼称を統一して記載します。

僕はどんなエンジニアだったか


僕は前職を含めて5年半ソフトウェアエンジニアとして働いてきました。

前職

Rails, Reactを使ったWebサービス開発

  • そこそこの規模の新機能を1から実装
    • サーバー・フロントの両方に関わる
    • 2-3ヶ月のスケジュールを引いてスケジュールに沿って進行
  • 問い合わせのあった不具合の調査・対応

現職 (ACES)

Django, Reactを使ったWebサービス開発

  • ACES Meetを初期段階から実装
    • サーバー・フロントの両方に関わる
    • インフラは既存実装を参考にterraformをちょっといじる程度
    • 初期は開発予定の機能について、仕様策定・スケジュール管理まで行っていた
  • 問い合わせのあった不具合の調査・対応

前職・現職のどちらでもサーバー・フロント (一部インフラ) の実装には関わっていました。

前職で関わっていたサービスは僕が入った時点でリリースから2年ほど経過していましたが、現職ではリリース前の段階から開発に関わっていたので、前職よりも初期の仕様や実装を把握できていたと思います。

また、CREになる前から問い合わせ調査などは一定受け持っていました。

なぜCREになったか


上に書いた通り僕は前職を含めて5年半ソフトウェアエンジニアとして働き、仕様策定から運用まで幅広く関わってきたのですが、以下の理由から将来のキャリアについて悩んでいました。

  • 技術そのものに対してあまり興味を持てず頭打ちを感じていた
  • 機能を作るより、その機能がユーザーや社内の人にどう役立つかに興味があった

このような話をEMと1on1で話していたところ、CREというものがあるよという話を聞きました。

調べてみたところCREの業務は通常のエンジニアと比べて特にユーザーの活動に寄り添う部分が強く、そこが自分に合っていると思い興味を持つようになりました。

それからしばらくCREのような活動をやりつつ開発を続けていたのですが、今年の7月以降社内で開発の体制変更があり、そのタイミングで正式にCREとして活動していくことになりました。

CREはどんなことをするか


CREという職種が具体的にどのような仕事をしているのか、まだあまり知られていないと思います。そこで、他社のCREがどのような役割を担っているのかを紹介し、それを踏まえて自社ではどんな取り組みをしているのかを紹介しようと思います。

他社のCREはどのような役割を持っているか

2016年のGoogleの発表ではCREの役割について以下のように記載しています。

CRE は、私たちとお客様のパートナーシップを深めることを目的としており、Google のエンジニアが担当します。担当エンジニアはお客様の運用チームと連携し、基幹クラウド アプリケーションの信頼性に関する責任を共有します。

また、国内で早期にCREの組織を立ち上げたMackerelはテックブログの中で以下のように記載しています。 (参考: https://developer.hatenastaff.com/entry/2020/10/30/093000 )

エンジニアがユーザーの動向をくまなく観察し、実際にコミュニケーションすることで、ユーザーの目的を正しく把握し、目的にあった正しい使い方をユーザーに促し、ときにはプロダクトオーナーや開発者としてプロダクト自体の改善も行う。 そしてまた改善されたプロダクトをユーザーに届け、新たなフィードバックを得る。 このサイクルを素早く継続的に回していくことで、ユーザーとプロダクトが健全に関わり合いながら、ユーザーに価値を提供し続けていくことができます。 組織の中のこういった活動に輪郭を持たせ、文化として根付かせ、より加速させることが、CREを職種やチームとして立ち上げる意義なのではないかと考えています。

自社でのCREはどのような役割を持つか

僕は上に挙げた2社の考えを参考にしつつ、自社の状況を踏まえてCREとして以下をやっていこうと考えています。

  1. 顧客の現状を把握できるようにする

    顧客は何に困っていてサービスを利用しようとしているのか、サービスを使って実現できているのか、実現できていないとしたらどこに原因があるのかを実際の利用データを分析し、誰でも見れる状態に整形します。

  2. 顧客の問題を取り除き、やりたいことを実現できるようにする

    1で顧客の状況を把握できたらその問題点を解消します。解消するために必要なことは機能開発にとどまらず、既存機能の動線修正やオペレーション変更の提言など幅広く行います。

  3. CS業務を効率化し、顧客に向き合える時間を増やす

    弊社ではCS組織は立ち上がったばかりであり、まだまだ効率化できてない業務がたくさんあります。エンジニア視点で自動化できるものは積極的に自動化を進め、CSの工数削減を目指します。

この4-5ヶ月はこの3つの内容についてまずは土台作りから進めていました。その中でもうまくいったこと、いかなかったこと、学びになったことなどいろいろあるのでそれについてはまた次の機会に紹介したいと思います!

どんな人がCREに向いているか


CREとしての活動を初めてすでに4-5ヶ月たちましたが、個人的にはCREをやってよかったなと思っています。

それはなぜだろうと今回の記事を書くにあたって考えていたのですが、以下のような理由があったのではないかなと考えています。

  1. サーバー・フロントを始め、いろんな領域に幅広く関わっていた

    CREは顧客にサービスを利用してもらうために様々な施策を考える必要があります。この時に特定の領域に絞らず幅広く関わってきたことが活きているなと感じています。

    また、サービスに関して問い合わせを受けることがありますが、このときも複数の領域にまたがって問題を考えることができるのでよかったなと思っています。

    複数の分野に知見があると、それらを掛け合わせることでより幅広く改善策を出すことができるのでより活躍の幅が広がるのかなと思いました。

  2. データに向き合って分析することが好きだったから

    僕は数字を見るのがとても好きで、大学時代には研究で数値分析をよく行っていました。その経験もあって、ユーザーの利用状況などを分析する作業も楽しく取り組めていると感じています。

    僕は元々出てきた数字に対して他の見方をした時にどうなるかを色々考えたくなるタイプだったので、そういった部分も分析をより深めるのに役立っている気がしています。

    ある種大学での研究に近い部分もあるので研究が好きだった方は向いているかもしれないです。

  3. 自分の関心が機能ではなく、ユーザー (やCS) を支えることに向いていたから

    CREになるとやはり自分で機能を開発する機会は減ります。コードを書く機会もそれに伴って減ったと思います。

    もともとコードを書くことが好きだったので、その点では少し寂しさを感じる部分もありました。しかし、その一方で、さまざまな改善対応を行う中で感謝される機会が増えたことはとても嬉しかったです。

    CREは、誰かの役に立てたと実感しやすい仕事だと思います。なので「誰かの役に立ちたい」という気持ちがある人には、とても向いている職種だと思います。

個人の感想なので人によっては違う感じ方をする方もいるかもしれませんが、もしこれを見て向いているかもと思った方はCREとしてのキャリアを考えてみてもいいと思います。

最後に


本記事では僕がソフトウェアエンジニアからCREになったきっかけなどを通じてどのような方がCREに向いているのかについて書いてみました。

CREはまだ人数が少なく未知の部分が多い職種ですが、少しでも興味を持った方は、ぜひ挑戦してみてください!

ACESは顧客のために一緒に頑張れる方を募集しています。少しでも興味を持っていただけた方は、ぜひカジュアル面談のお申し込みをお待ちしております!

ACESの採用情報はこちら↓ youtrust.jp

youtrust.jp