$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ひとつの開発環境
Search
Shia
November 26, 2025
Technology
0
15
ひとつの開発環境
Shia
November 26, 2025
Tweet
Share
More Decks by Shia
See All by Shia
Conquering Massive Traffic Spikes in Ruby Applications with Pitchfork
riseshia
0
200
スパイクアクセス対策としての pitchfork 導入
riseshia
0
730
NewEngineering 2024 - 繋がっていくサービスを支える開発環境作り
riseshia
0
1.4k
Hotspot on Coverage
riseshia
0
240
差分ベースで効率的にテストを実行してみる
riseshia
1
750
Cookpad internship 2020 summer - web
riseshia
0
7.6k
マイクロサービス化を支える継続的切り替え術
riseshia
0
650
Cleaning up a huge ruby application
riseshia
3
12k
Find out potential dead codes from diff
riseshia
0
7.1k
Other Decks in Technology
See All in Technology
adk-samples に学ぶデータ分析 LLM エージェント開発
na0
3
900
事業部のプロジェクト進行と開発チームの改善の “時間軸" のすり合わせ
konifar
5
740
TypeScript×CASLでつくるSaaSの認可 / Authz with CASL
saka2jp
2
160
type-challenges を全問解いたのでエッセンスと推し問題を紹介してみる
kworkdev
PRO
0
130
Bedrock のコスト監視設計
fohte
2
250
ブラウザ拡張のセキュリティの話 / Browser Extension Security
flatt_security
0
210
組織の“見えない壁”を越えよ!エンタープライズシフトに必須な3つのPMの「在り方」変革 #pmconf2025
masakazu178
1
1k
DDD x Microservice Architecture : Findy Architecture Conf 2025
syobochim
13
6.5k
グローバルなコンパウンド戦略を支えるモジュラーモノリスとドメイン駆動設計
kawauso
3
10k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
970
学術的根拠から読み解くNotebookLMの音声活用法
shukob
0
500
変わるもの、変わらないもの :OSSアーキテクチャで実現する持続可能なシステム
gree_tech
PRO
0
1.2k
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
225
10k
GraphQLとの向き合い方2022年版
quramy
49
14k
Designing for Performance
lara
610
69k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
How STYLIGHT went responsive
nonsquared
100
5.9k
Faster Mobile Websites
deanohume
310
31k
Fireside Chat
paigeccino
41
3.7k
Facilitating Awesome Meetings
lara
57
6.6k
Unsuck your backbone
ammeep
671
58k
The Language of Interfaces
destraynor
162
25k
How to Think Like a Performance Engineer
csswizardry
28
2.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.1k
Transcript
ひとつの開発環境 shia テクノロジー部門 /技術推進本部 /Platform Engineeringチーム
自己紹介 Shia - 技術推進本部 - 入社4年目 - インフラや共通基盤とかを担当
What Would You Do? 本日のテーマ
STORES 「STORESさえあれば、 店舗のフロント業務を全てできる」
STORES
いっぱい出しているが単に出すだけでは 十分ではない STORES
全てのサービスが密に連携され一つの サービスのように使えて欲しい STORES
具体例:ロイヤリティ お店もネットショップも、まとめてポイント導入
具体例:統合管理画面
これら全部と付き合っていく必要がある
What Would You Do? 「このような状況の中、 開発環境はどうあるべきでしょうか?」
繋がる前の時代
個別開発の時代
事業者向け 環境のバラつき エンドユーザ向け & API サーバ
API サーバ エンドユーザ 向け reverse proxy 環境のバラつき 事業者 向け
これらを管理するためのレポ API サーバ エンドユーザ 向け reverse proxy 環境のバラつき 事業者 向け
All in one 環境のバラつき
環境のバラつき …
環境のバラつき チームを跨ぐと全く異なる環境
連携の時代 幕開け
連携の時代 事業者情報の統一
連携の時代 => 事業者 IdP
連携の時代 サービス間連携の本格化
連携の時代 サービス間連携の本格化 API Gateway
連携の時代 サービス間連携の本格化 Event Repository API Gateway
サービスが繋がり始まる 連携の時代
連携の時代 => 開発時に動かすべき サービスの数が増えてきた
お約束を決める
- リポジトリごとにセットアップ方法が違う - ポートが被りを避けたい - 慣れてない言語・実装は大変 大変と思うもの
- `make xxx`でインターフェース統一 - 開発サーバは基本コンテナ&コンテナネットワークの中で動 かしましょう - 基盤系はあるものを使う - 面倒事は
STORES-compose に投げよう お約束を決める
STORES を手元で開発するときに 必要な開発環境ツール群を提供するのリポジトリ STORES-composeとは?
開発環境の様子 api gateway dummy authorizer ローカル netshop リモート .local.example.com への全リクエスト
イベント ブローカー Event Repository 予約 リクエスト イベント送信 認証認可 イベント受信 STORES アカウント gateway 組織管理 API イベント ブローカー 注:発表で話してないものをもろもろ省略してます
開発環境の様子 api gateway dummy authorizer ローカル netshop リモート .local.example.com への全リクエスト
イベント ブローカー Event Repository 予約 STORES アカウント gateway イベント ブローカー リクエスト イベント送信 認証認可 イベント受信 注:発表で話てないものをもろもろ省略してます
開発環境の様子 api gateway dummy authorizer ローカル netshop リモート .local.example.com への全リクエスト
イベント ブローカー Event Repository 予約 STORES アカウント gateway イベント ブローカー リクエスト イベント送信 認証認可 イベント受信 注:発表で話てないものをもろもろ省略してます
開発したいサービスを動かすためのあらゆるもの: - HTTPS エンドポイント - リモート開発環境の接続周りの土管 - … STORES-compose が提供していたもの
- STORES-composeと必要なあらゆるリポジトリを git clone - STORES-compose で make dev -
必要なあらゆるリポジトリで make dev - 開発開始! 開発の流れ
現在
組織の変化 - サービス別チーム → 機能別チームへ再編 - 以前: 「自分はネットショップだけ担当」 - 現在:
「この機能のために必要な全サービスを触る」 - 一人が複数のサービスを触ることが当たり前に - 「ロイヤリティ」開発にはネットショップと BA を触らなきゃ
課題が見つかる1 揃ってるように見えて揃ってないものが多い - 「このサービス、どうやって起動するんだっけ?」 - 「環境変数はどこで設定するの?」 - 「依存性がたりてない〜」
これらを管理するためのレポ <- ここ API サーバ エンドユーザ 向け reverse proxy make
dev どこで実行する? 事業者 向け
課題が見つかる1 揃ってるように見えて揃ってないものが多い - 「このサービス、どうやって起動するんだっけ?」 - 「環境変数はどこで設定するの?」 - 「依存性がたりてない〜」
共通基盤のリモート環境連携が足を引っ張る: 開発中に指している共通基盤側のサービスをリモート環境からローカル へ切り替えることが増えた - リモート環境とローカルでデータ不整合っぽい挙動 - リモート環境でリクエスト元がローカルかリモート環境かとい う謎分岐が生まれてた 課題が見つかる2
開発サーバ in コンテナが辛い - binding.irb するのが大変 - npm install 終わらんですけーど
- 壊れたときの復旧が大変さは別に変わらない? 課題が見つかる3
開発そのものに集中しづらい環境になりつつあった 課題が見つかる
STORESは一つのプロダクトである 振り返ってみる
なら、開発環境も一つであるべきでは? 振り返ってみる
ひとつの開発環境
- 揃ってるように見えて揃ってないものが多い - 共通基盤のリモート環境連携が足を引っ張る - 開発サーバ in コンテナが辛い 感じてる課題まとめ
1. 管理方式の統一 - パス構造の統一 - ツール管理の統一 - 環境変数管理の統一 2. すべてローカルで動かす
- ローカルで全てを完結させる - 開発サーバはホストで動かす 方針
mise-en-placeに全て任せる 「The front-end to your dev env」 詳細なやり方
詳細なやり方 mise-en-placeに全て任せる - 言語バージョン管理(Ruby, Node.js, Python...) - CLIツール管理(AWS CLI, ecspressoなど)
- 足りんものに関しては brew \w Brewfile でがんばる - 環境変数管理 - タスク管理(makeの代替)
mise-en-placeに全て任せる メリット: - 開発環境の設定や使い方が集約でできる - 判断コストが下げられる 詳細なやり方
リポジトリパスを統一する - “$GHQ_ROOT/github.com/[org]/[repository]” 詳細なやり方
リポジトリパスを統一する メリット: - 自動化の幅が広がる - e.g.グローバルコマンドで便利な操作が可能に - 全リポジトリ一括pull - 全開発サーバーを一括起動
詳細なやり方
リポジトリパスを統一する 気づき: - Googleは1リポジトリでpartial checkoutらしい - パスを強制するのは、実質それに似た試みではないか? - → 実質、巨大なモノレポなのでは?
詳細なやり方
手元で全て動かす(リモート開発環境に繋げない) 支給 MBPを使い倒す! 詳細なやり方
手元で全て動かす(リモート開発環境に繋げない) メリット: - ローカルで完結するのでいろいろデバッグしやすい - データ整合性が壊れにくくなる(はず 詳細なやり方
開発サーバはコンテナではなくホストで メリット: - パフォーマンス最高 - トラブルシューティングが楽 詳細なやり方
DB / キャッシュなどは STORES-compose で担保 - 同じDBエンジンを使う場合、同じバージョンなら共有する - 例:MySQL 8を3リポジトリで使う場合
- → 1つのMySQLインスタンスで、データベースだけ分け る - Localstack も一つ起動すれば十分 詳細なやり方
DB / キャッシュなどは STORES-compose で担保 メリット: - リソース節約 - 開発サーバー再起動時にこれらが邪魔しない
- アプリはアプリだけに関心を持てば良い 詳細なやり方
開発ビルドイメージ(devbuild)を提供(予定) ソースコードを修正しないサービスは、ビルド済みイメージをpull して動かすだけ。 詳細なやり方
決済 ひとつの開発環境 api gateway dummy authorizer ローカル Event Repository 予約
正常リクエスト イベント送信 イベント受信 STORES アカウント gateway STORES サービス 認証認可 ネット ショップ … MO 統合管理 注:発表で話てないものをもろもろ省略してます システム間通信
- STORES-composeをclone - `mise run up` → ミドルウェア起動 - `mise
run all:up` → 全サービスをバックグラウンドで起動 - 開発したいサービスは `mise run dev` すると開発サーバに 切り替わる 開発の流れ
そして未来へ
いるいろある 欲しいもの
リモート検証環境(~= PR staging) 欲しいもの
リモート検証環境(~= PR staging) 複数リポジトリ環境だと実現が辛い 欲しいもの
今目指してる環境なら - 一発で全てが起動する - 単一サーバで完結できる - インターフェースが統一されている -> 環境セットアップは自動化できる 振り返ってみる
利用の流れ - どっかで環境をリクエストする - 勝手にサーバが起動する - ドメインが振られる - 起動後 git
clone STORES-compose & mise run up & mise run all:up - 準備できたら url を伝える あとはよしなにブランチなどを切り替えながら使うだけ リモート検証環境
えーあいーってやつで もっと生産性をあげたい 時は 2025年、大AI時代
複数リポジトリってあまり AI 向きではない - セットアップ方法が色々あると AI は混乱する - そもそも適切な指示がないと複数のリポジトリを跨って仕事 することができない
- 手元で AI 環境用意するのがめんどくさい 注:2025/11の最新 LLM 基準です 時は 2025年、大AI時代
複数リポジトリってあまり AI 向きではない - セットアップ方法が色々あると AI は混乱する - 統一した -
そもそも適切な指示がないと複数のリポジトリを跨って仕事 することができない - 手元で AI 環境用意するのがめんどくさい 時は 2025年、大AI時代
複数リポジトリってあまり AI 向きではない - セットアップ方法が色々あると AI は混乱する - 統一した -
そもそも適切な指示がないと複数のリポジトリを跨って仕事 することができない - 頑張る - 手元で AI 環境用意するのがめんどくさい 時は 2025年、大AI時代
複数リポジトリってあまり AI 向きではない - セットアップ方法が色々あると AI は混乱する - 統一した -
そもそも適切な指示がないと複数のリポジトリを跨って仕事 することができない - 頑張る - 手元で AI 環境用意するのがめんどくさい - 手元じゃなければ? 時は 2025年、大AI時代
エージェント on リモート検証環境 リモート検証環境 feat. Agent
メリット: - AI開発がスケールする - 開発者の検証が楽 リモート検証環境 feat. Agent
流れ: 1. 開発者「この機能作って」 2. AI「わかりました」 3. 作業環境を起動 4. AI が実装
→ テスト → PR作成 5. 開発者が動作確認 6. 問題なければマージ 7. デプロイ リモート検証環境 feat. Agent
What would you do?
What Would You Do? 「このような状況の中、 開発環境はどうあるべきでしょうか?」
STORES の答え 私たちは 「ひとつの開発環境」を作りました
- ひとつだけ - 手元で全て動く - 統一された管理方法 - 誰でも動かせる STORES の答え
STORES の答え これが正解かはわからない
STORES の答え これが正解かはわからない けど方向性は正しいと信じてる
いろんな開発環境があり、 それらを経験してきたあなたなら 違う答えを持ってるかも あなたなら、どうしますか?
ひとつの開発環境 shia
None
None
None
None
None
タイトル