Slide 1

Slide 1 text

多様な最適化サービス開発をスケールさせる 共通基盤とチーム構成 アーキテクチャカンファレンス 2025 藤原 秀平

Slide 2

Slide 2 text

藤原 秀平 ● ソフトウェアエンジニア(プラットフォームチーム) ● ALGO ARTIS ⼊社以前は機械学習屋 ○ データサイエンティスト‧MLOps エンジニア ● 学⽣時代は数理最適化が専⾨ ● Google Developer Expert (Machine Learning, Google Cloud) ⾃⼰紹介

Slide 3

Slide 3 text

● 会社紹介 ● ALGO ARTIS のプラットフォーム ○ Platform によって何を共通化したか ○ Platform によって開発‧運⽤はどう変わったか ● プラットフォーム開発の難しいところ ⽬次

Slide 4

Slide 4 text

会社概要

Slide 5

Slide 5 text

株式会社 ALGO ARTIS

Slide 6

Slide 6 text

計画策定における課題 計画を⽴てるのは⾮常に複雑なパズルを解くようなもの 多⼤な時間がかかるうえ、⼤量の制約条件を考慮しつつ効率の良い計画を⽴てるのは困難 海外から国内の発電所に向けて ⽯炭を船で運ぶ計画を⽴てる ⽬的 制約条件 (⼀例) 船着き場の数 ⽯炭購⼊⽇契約 ⽯炭在庫量 船の隻数 評価指標 (⼀例) 船の積載量 運賃‧滞船料 ⽯炭価格 航路距離 極めて複雑な組合せ最適化問題

Slide 7

Slide 7 text

ALGO ARTIS の事業領域 配船計画 輸送/配送計画 プロセス系 ⽣産計画 資源/燃料貯蔵計画 組⽴系 ⽣産計画 運⾏/保守計画 サプライチェーンのさまざまな計画業務が対象

Slide 8

Slide 8 text

ALGO ARTIS が提供するサービスの例(⼯場の⽣産計画) 計画を⾃動⽣成する最適化機能 ⼈⼿で計画を修正しやすい Web UI

Slide 9

Slide 9 text

事例 現場で便利に活⽤され続けることにこだわったものづくり

Slide 10

Slide 10 text

ALGO ARTIS のプラットフォーム

Slide 11

Slide 11 text

受託に近いビジネスモデルでは異なる⼩さなサービスをたくさん作ることになるので ● サイロ化して開発がスケールしない ○ 運⽤も属⼈化する ● そもそも⼗分な数の案件(テナント)に対応するだけの開発者を揃えることが困難 ○ 採⽤が追いつかない ● 運⽤開始後のサービスに継続的な改善を届けることが難しい ○ 作りっぱなしになりがち 事業をスケールさせることの難しさ

Slide 12

Slide 12 text

⼀定は仕⽅がないのでは…? ● 完全に異なるサービスを複数作るのであればおそらくそう ● ALGO ARTIS の事業の範囲は広いが、計画の最適化という軸は共通 → 共通化できる部分があるはず 事業をスケールさせることの難しさ

Slide 13

Slide 13 text

とは⾔ったものの、簡単ではない ● 最適な計画を作るサービスといっても分野は様々 ○ 資材を運ぶための配船計画 ○ ⼯場の⽣産計画 ● それぞれ顧客の業務に合わせた細かい作り込みが必須 ○ 最適化システムは開発をスケールさせるのが難しいと⾔われる所以 それでもチャレンジするという決断をした結果のプラットフォーム 事業をスケールさせることの難しさ

Slide 14

Slide 14 text

データ永続化 最適化システムの典型的な構成 顧客に合わせた作り込みが重要になるのはどこか? Frontend Cloud Run Backend Cloud Run Algorithm Vertex AI Cloud Pub/Sub Database Cloud Firestore Cloud Storage ● 個社別の作り込みが必須になるのはアルゴリズムとフロントエンド ● 共通化が⾒込めそうなのはそれ以外 ○ バックエンド‧インフラ‧認証認可‧etc...

Slide 15

Slide 15 text

アルゴリズム ● 領域が違えば作りたい計画も 最適化アルゴリズムも全く異なる フロントエンド ● アルゴリズムと同様の理由 ● 計画を⾃動で作ることとと同じくらい ⼿動で作りやすいことも重要 個別の作り込みの重要性

Slide 16

Slide 16 text

図が書けている時点で、ある程度は最適化システムの型というものが存在している ● どの案件でもクラウドインフラのレベルでのアーキテクチャは⼤差ない ○ バックエンドに要求される機能も同様 ● 認証‧認可やセキュリティ⾯の対応を集約できる恩恵は⼤きい ○ 社内全体で⽔準を合わせなければならないポイント 共通化の恩恵 データ永続化 Frontend Cloud Run Backend Cloud Run Algorithm Vertex AI Cloud Pub/Sub Database Cloud Firestore Cloud Storage ● プラットフォームのアップデートを 各テナントに継続的に届けられる ● 監視‧運⽤を集約できる

Slide 17

Slide 17 text

アーキテクチャ Frontend Cloud Run Backend Cloud Run Algorithm Vertex AI Cloud Pub/Sub Database Cloud Firestore Algorithm Image Container Registry Input / Output Cloud Storage Frontend Code Cloud Storage ● アルゴリズムは Docker イメージ単位で差し替え ● ⼊出⼒のスキーマが揃っていれば何でも OK Auth0 ● テナントごとの UI を Cloud Storage 経由で配信 ● データアクセスの I/F とローカル開発ツールも提供 ● 社内では Frontend Addon と呼ばれる機能

Slide 18

Slide 18 text

個別案件の開発がアルゴリズムエンジニアと フロントエンドエンジニアで完結する体制へ ● 個別案件 ○ アルゴリズムエンジニア: 1~2 ⼈ ○ フロントエンドエンジニア: 1~2 ⼈ ● プラットフォーム ○ 現在は 6 ⼈ + 業務委託メンバー プラットフォームを活⽤するチーム構成 個別案件 アルゴリズム フロントエンド バックエンド プラットフォームチーム インフラ 個別案件チーム アルゴリズム フロントエンド フロントエンド バックエンド インフラ 案件が増えるほど効率が良くなっていく構成に!

Slide 19

Slide 19 text

プラットフォームの開発の難しいところ

Slide 20

Slide 20 text

プラットフォームを作るならプラットフォームチームが必要 ● 何を当たり前のことを…? ● なぜ必要なのか、どのタイミングで必要なのか⾔語化できますか? 実は ALGO ARTIS にはプラットフォームはあるけどチームは無い時期が存在していた プラットフォームチームができるまで

Slide 21

Slide 21 text

正確にはプラットフォームそのものに責任を持つオーナーがいないと破綻します ● 機能を追加する⼈はいるが、追加しない意思決定をする⼈が不在になる ● 案件を成功させたい担当者とプラットフォームを必要⼗分に保ちたいオーナーで 適切に綱引きをしないといけない ○ ここ意思決定が⾟いのはプラットフォーム永遠の悩み チームがないとプラットフォーム作りは破綻します Platform 案件 A に必要な機能を ⾜します 案件 B に必要な機能を ⾜します いいよ ダメです

Slide 22

Slide 22 text

案件をこなして知⾒を得ないと適切なプラットフォームの設計は難しいが… ● プラットフォームなしで個別に作るほどサイロ化は進む ○ 後でプラットフォームに載せ替えよう、というのはかなり⼤変 ○ プラットフォーム化が早すぎると必要な機能を読み違える おそらく完璧なタイミングというのは存在しない(と思う) ● どのタイミングでも「早すぎた」か「遅すぎた」のどちらかで後悔する ● その⼆択で⾔うなら ALGO ARTIS は「早すぎた」寄り ○ 初期の数案件を除いてほとんどがプラットフォーム上で提供している プラットフォーム化に踏み切るタイミング

Slide 23

Slide 23 text

当初の想定 ● 計画の最適化‧評価は時間がかかるケースもあるので⾮同期ジョブが適切 ● クライアント側で重い処理をやらせるべきではない ● UI 実装とアルゴリズム実装を極⼒疎結合に 初期設計から変化したこと Backend Cloud Run Algorithm Vertex AI Cloud Pub/Sub 計画の最適化‧評価を実⾏すると ⾮同期のジョブが発⾏される 評価はレスポンスが命なのでクライアントで実⾏したい ● 最近のアルゴリズムエンジニアは TypeScript 書けちゃうのでフロントで実装 ● Wasm によるクライアントでの評価実⾏を促進 最適化‧評価の実⾏環境は適切に選択できるのが理想

Slide 24

Slide 24 text

External Service 当初の想定 ● 外部とのデータ連携をコンテナジョブに切り離す ● 社内で Connect Addon と呼ばれる機能 初期設計から変化したこと Backend Cloud Run Cloud Pub/Sub Connect Addon Cloud Run Jobs Email Input / Output Cloud Storage 実際の使われ⽅ ● 任意の処理をコンテナジョブに切り離す ● プラットフォームのコア部分を変えずに機能追加 ○ 実装を各案件に委ねやすい ○ 後戻りしやすい機能追加の仕組みを実現 Scheduled Trigger Cloud Scheduler External System

Slide 25

Slide 25 text

必要な機能が固まり切ってない中で案件とプラットフォーム開発を並⾏するのは無茶も伴う ● 後から考えた⼯夫‧拡張で乗り越える場⾯も多い ○ 汎⽤的に設計しているので対応⼒があるとも捉えられる ○ 「こう使って欲しい」という強いコンセプト性が⾜りないとも捉えられる プラットフォーム化をもう少し待てば楽をできたか? ● そういうわけではない ● 今でもシングルテナントの管理‧運⽤は⼤変 ○ 機能追加も個別にやっている プラットフォーム化のタイミングを振り返って

Slide 26

Slide 26 text

ログやデータが⼀箇所に集約されて管理しやすいように思える? ● 複数テナントのログが混在するので権限管理が煩雑になる ● 特に ALGO ARTIS は担当案件以外の情報が⾒えてはいけないので⾮常に気を遣う ログ‧データの管理の課題 Log Collection Cloud Logging Log Streaming Cloud Pub/Sub Database Cloud Firestore On-Call Datadog Dashboard Looker Studio Tenant 1 Raw Logs BigQuery Table Backend Cloud Run Tenant 2 Tenant 3 Frontend Cloud Run Logs (Tenant1) BigQuery View Logs (Tenant2) BigQuery View Logs (Tenant3) BigQuery View

Slide 27

Slide 27 text

多様な領域をまとめて扱う以上ここは避けられない ● 領域を絞れば SaaS 化できそうなものはある → 化学⽣産の領域では SaaS として Planium を提供 ● UI を統⼀してアルゴリズムは簡易的なもので共通化 結局アルゴリズムと UI 開発がボトルネックになるのでは

Slide 28

Slide 28 text

Optium, Planium の 2 種類のプランを顧客に合わせて提供 ● Optium: UI とアルゴリズムを個別に作り込む従来の形 ● Planium: SaaS として同じサービスを複数顧客に提供 いずれもプラットフォーム上で開発 Optium, Planium Platform Tenant (Optium) Planium Tenant Tenant (Optium) Tenant (Optium) Tenant Tenant

Slide 29

Slide 29 text

まとめ

Slide 30

Slide 30 text

● プラットフォームによってフロントとアルゴリズムの開発で案件が完結する体制を整えた ○ 開発‧運⽤の⼯数を⼤幅に圧縮 ● フロントエンドとアルゴリズムの開発で案件をこなせるように ○ それに合わせたチーム構成‧アサイン ● 共通化の難しさには今も向き合い続けている ● 質問‧議論歓迎です ○ ぜひブースまで来てください!! まとめ

Slide 31

Slide 31 text

質問‧議論など歓迎です。 ぜひブースまでお越しください! ブース番号は ブースの宣伝 12

Slide 32

Slide 32 text

No content