エンジニアリングマネージャーの加藤です。2024年10月からの3ヶ月で開発チームで取り組んできたことを紹介していきます。
今回の記事から STRACT の開発チームがどんな開発に取り組んでいるのか、チームの雰囲気がどうなのかを知ってもらいたいです。
目次
PLUGキープ機能の開発
キャッシュバック適用の拡張完結機能
価格比較機能の連携ショップ拡充
ライブラリアップデート と renovate の導入
OpenSearch の導入
Amazon S3のコスト削減
開発オンボーディングのアップデート
Slack チャンネルの整理
まとめ
PLUGキープ機能の開発
PLUG の新しい機能の PLUGキープの実装をしました!
※ 現在(2025年1月8日)は一部のユーザーにのみ公開しています
STRACTの過去と現在、そしてPLUGというインタフェースが創る未来|Hikaru Ito | STRACT, Inc. でも紹介した機能で、インターネット上のあらゆる商品をワンタップで「キープ」できる仕組みです。現在は対応サイトは数サイトに限られていますが、徐々に増やしていく予定です。
そのキープ機能を実現するために僕達はレシピというDOM処理エンジンを独自に実装をしました!イメージとしては以下で、レシピについて詳しく話すとこの記事の主旨とずれるので次の機会に。
※Recipe の処理イメージ
キャッシュバック適用の拡張完結機能
今まではキャッシュバックを適用する際に拡張機能からアプリに遷移をする必要がありましたが、拡張機能上で完結できるように改善しました。それにより面倒な画面のチラツキ無しでキャッシュバックを適用できる状態になりました!
※PLUG拡張機能のみでキャッシュバック適用をしているデモ
価格比較機能の連携ショップ拡充
価格比較結果一覧に表示されるショップが拡充されました。今後もショップを増やしていきたいため、効率よくショップを増やしていく仕組みを検討中です。
※PLUG拡張機能での価格比較のデモ
ライブラリアップデート と renovate の導入
“dependabot”を導入していましたが、ライブラリアップデートが進まず、セキュリティリスクの高いものが放置された状態でした。セキュリティ対応は早急に解決したかったため、このタイミングで一括して対応を進めました。
また、STRACT はモノレポ構成のため、”dependabot”では1つのライブラリアップデートでも、そのライブラリを利用する各packageで同様のPRが個別に作成され、それぞれでマージ対応が必要となり非効率でした。そこで新たに”renovate”を導入し、packageごとの差分をまとめてPR作成できるようにしました。さらに、@typesライブラリのバージョンを対応するライブラリのバージョンと自動的に同期する仕組みを追加して運用を開始しました。
OpenSearch の導入
"OpenSearch”は以前から導入していたのですが利用箇所はとても限定的でした。今回はユーザーへの商品レコメンド処理に”OpenSearch”を導入しました。STRACTは様々なショップの商品データを数億レコード 保有しており、今回はその商品データを"OpenSearch"に insert して利用しています。
”OpenSearch”を採用した背景は、STRACTが持っているデータには商品名のゆらぎや、価格レンジの違いなど、クエリを微調整をしつつ最適化させていく必要がありました。既存のレコメンドエンジンではクエリの変更容易性が低かったため、 クエリを柔軟に調整するために"OpenSearch"を採用しました。
Amazon S3のコスト削減
STRACTでは各サイトから商品データを取得して、その保存先に”S3”を利用しています。ただ保存するデータ量がサービスの成長とともに指数関数的に増えていたので、コスト削減の対応を行いました。やったことは、不要なオブジェクト削除やオブジェクトごとにストレージクラスを調整する対応をしました。
※2024年11月時点で S3 だけで $2,000 かかっていた
開発オンボーディングのアップデート
直近3ヶ月で5名のメンバーが開発チームに加わりました 🎉
ただ、前回のブログで書いたようにSTRACTの開発環境はモノレポ構成やプロダクトの複雑性、ドメインの難しさなどからオンボーディングコストが高いです。
※参照:開発組織でやっていきたいこと - 2024年11月|STRACT, Inc.
そのため、少しずつですが新規メンバーからフィードバックをもらい改善を進めています。
直近改善したことだと以下などがあります。
- 開発の .env の整理
- 開発環境構築ドキュメントの改善
- 新規メンバー用に発行するアカウントの整理
- Working Agreement の作成
- キックオフMTGの実施とアジェンダの改善
- good first issue のストック
- 振り返り 1on1 の実施
今後はドメインをキャッチアップしやすいようにドキュメントの拡充や、動画の作成などを検討しています 💭
Slack チャンネルの整理
今までは開発メンバーも少なく問題なかったのですが、Slack チャンネル名が統一されておらず、どこで何を話してよいか?どのチャンネルを見るとよいのか?など新規メンバー視点で迷うことが増えました。もっとメンバーが増えたタイミングで確実にコミュニケーションロスが発生しそうだったため、プレフィックスの整理や既存のチャンネル名の更新、新規チャンネル作成を行いコミュニケーションインタフェース整理を行いました。
現状は開発チームのみに提供しているが、仕組みを全社にも展開をして進める予定です。
チャンネル名のプレフィックスのルール
Slack チャンネル名を決めるときに GitHub の PR を利用して、RFC 形式でコメントをもらいながら合意形成をしました。
RFCでメンバー間で同意形成をしている様子
まとめ
チーム改善は基礎が整いつつあるので今後さらにブラッシュアップしていきます。直近はドメインキャッチアップをどのようにしていくかを改善したいと思っています。
今は新機能の実装後にチーム内で勉強会おこなったりしています
レシピ機能の勉強会後のRetrospectiveの付箋の抜粋
開発は効率を上げる改善に取り組みます。CI時間の改善やコードレビューやQA・リリースフローを改善予定です。引き続きスケール前の成長段階のチームという状況です。
実際には紹介した内容以外にも開発や改善をおこなっています。今回の記事から STRACT の開発チームのことを少しでも知ってもらえたら嬉しいです。
P.S.
STRACTに入社してから出社するようになり、4年ぶりにメンバーとランチをするのを楽しんでいるのです!会社の近くにある “和食とワインの店 田んぼとぶどう" がとても美味しくてリピートしまくっています。STRACTに遊びに来たタイミングで一緒に行きましょう。