Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
『毎日の移動』を支えるGoバックエンド内製開発
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
yutautsugi
October 06, 2025
Programming
1.1k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
『毎日の移動』を支えるGoバックエンド内製開発
Findy登壇資料
https://findy.connpass.com/event/366591/
yutautsugi
October 06, 2025
Other Decks in Programming
See All in Programming
TAKTでAI駆動開発の品質を設計する
j5ik2o
6
1.2k
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
260
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.2k
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
390
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.5k
スマートグラスで並列バイブコーディング
hyshu
0
130
Javaの型とAI時代に型が大事な理由 / java types and type in AI era
kishida
2
130
「なぜそう決めたのか」を残し続ける仕組み ― Notion AI カスタムエージェント × Slack連携による設計判断の自動記録 - NIKKEI Tech Talk #47
niftycorp
PRO
0
140
net-httpのHTTP/2対応について
naruse
0
480
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
270
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
Accessibility Awareness
sabderemane
1
140
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
410
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
250
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Navigating Team Friction
lara
192
16k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
540
Transcript
『毎日の移動』を支えるGoバックエンド内製開発 都市生活を豊かにする開発へ URBAN HACKS 東急線アプリチーム バックエンドエンジニア 宇都木 勇太
2 自己紹介 URBANHACKS 東急線アプリチーム バックエンドエンジニア 宇都木 勇太 • 前職はアドテク領域 •
東急線アプリ開発を担当 • 初めてのGo言語 • Goバックエンド内製開発の立ち上げから改善まで • 最近はAIを使った開発プロセス刷新にも挑戦中
3 URBAN HACKSと東急線アプリについて
4 東急線アプリについて • リニューアル日: 2022年9月29日 ~ • バックエンド技術・環境 ◦ Go
◦ Typescript / Next.js / Strapi ◦ Docker / Github ◦ Firebase / Google Cloud https://ii.tokyu.co.jp/tokyusenapuri
5 今日話すこと • 東急線アプリリニューアルのGoバックエンド内製開発の歩みと課題 • 直面した課題・改善の事例 • 今後の展望 2022/3 ~
2022/9/29 2024/10/21 現在 PJ始動 リリース TOQCOIN 新横浜線 2023/3/11 UH 誕生
6 Go導入・内製化スタート • 言語選定でGoの導入が決定 • クラウドはFirebase・Google Cloudを採用 • 選定したGoの主要ライブラリ ◦
echo ◦ gorm.io ◦ go-redis ◦ oapi-codegen ◦ go.opentelemetry.io ◦ cloud.google.com/go 当時のあれこれの一部。外部ベンダーとの結合を意識しながらの設計 2022/3 ~ 2022/9/29 2024/10/21 現在 PJ始動 リリース TOQCOIN 新横浜線 2023/3/11 UH 誕生
7 リリース • アプリバックエンドの刷新 • お知らせ配信基盤の内製化 • 内製システムと外部ベンダーシステム統合に よる価値最大化 2022/9/29
2024/10/21 現在 PJ始動 リリース TOQCOIN 新横浜線 2023/3/11 UH 誕生
8 リニューアル後すぐの試練 • 大規模なトラフィック集中 • Goのパフォーマンスへの信頼度の高まり • 交通インフラの’リアル’のダイナミズム 当時のGoogle Cloud
コンソールのキャプチャ 2024/10/21 現在 PJ始動 リリース TOQCOIN 新横浜線 2023/3/11 UH 誕生
9 発生した課題 - Push通知 (リリース前) • 非機能要件: ◦ 運行情報を即時に同時配信 ◦
100万ユーザーを想定 • 負荷試験中にでた課題 ◦ Firestore SDKのTimeout ◦ 1Documentのサイズが大きい • ソリューション ◦ encoding/binaryを使って圧縮 ◦ 駅や路線の増減は滅多にないため { “mypage” { “push_setting”: { acceptance: true, … }, “spots”: [ {“name”: “三軒茶屋駅”}, …. ], ... } import “encoding/binary” type Filter struct { VersionByte uint8 Accept uint8 DayOfWeek uint8 Hour [3]uint8 Line [2]uint8 Station [19]uint8 } buf := []byte{...} rf := new(Filter) }} if err := binary.Read(buf, binary.BigEndian, rf); err != nil { return nil, err } Firestore ドキュメント(擬似) [0, 1, 0, 0, 0, 1, 1, 1] バイナリ化(擬 似) 圧縮 Unmarshal
10 発生した課題 - 高トラフィック状態(リリース後) • 発生事象: ◦ 遅延時などのPush配信でトラフィックが スパイクする ◦
メモリ使用量が加速度的に増加 ◦ 500エラー増加 • 原因 ◦ コネクションプールを過剰作成 ▪ Redis / Firestore • ソリューション ◦ シングルトン化 ▪ 通信クライアントライブラリのみ func main() { e := echo.New() e.GET("/users/:id", func(c echo.Context) error { ctx := context.Background() id := c.Param("id") fsClient, err := firestore.NewClient(ctx) if err != nil { return err } defer fsClient.Close() doc, err := fsClient. Collection("users"). Doc(id). Get(ctx) if err != nil { return err } var ( fsOnce sync.Once fsClient *firestore.Client ) func getFirestoreClient( ctx context.Context ) (*firestore.Client, error) { fsOnce.Do(func() { fsClient, fsErr := … }) return fsClient, fsErr } func main() { e := echo.New() e.GET("/users/:id", func(c echo.Context) error { ctx := context.Background() id := c.Param("id") doc, err := fsClient. Collection("users"). Doc(id). Get(ctx) if err != nil { return err } ハンドラ処理でコネクションプール作成 ハンドラ処理外で一度だけコネクションプール作成
11 新横浜線開通対応 • 新横浜線開通と同時にアプリリリース • 司令所シミュレーターでテスト ◦ 外部ベンダーのエンジニア + 自分
+ 電鉄の方 nano bananaで生成した司令所のイメージ図です HPより: https://www.tokyu.co.jp/special/chokutsusen/ 開通前工事中の駅を視察した時の写真 2024/10/21 現在 PJ始動 リリース TOQCOIN 新横浜線 2023/3/11 UH 誕生
12 TOQCOIN新規開発 • 乗車するとポイントがたまるサービス • TOKYUIDの導入 • 基盤チーム & 新たな外部ベンダーAPIとの連携
2024/10/21 現在 PJ始動 リリース TOQCOIN 新横浜線 UH 誕生
13 TOQCOINの拡大 • キャンペーン実施 • Q SKIPとの結合(企画乗車券とポイントを交換) • Q SEATとの結合
(有料座席券とポイントを交換) • その他絶賛企画中 現在 PJ始動 リリース TOQCOIN 新横浜線 UH 誕生 Q SKIPはスマートフォン1つで電車のフリーパスや施設の入場券等が購 入できて、使えるサービスです。東急電鉄とURBAN HACKSが共創して いるサービスです。 https://www.q-skip.tokyu.co.jp/ Q SEATは、東横線と大井町線において、夕方から夜間の帰宅時間帯に運 行している急行列車のうち1両を、有料座席指定専用の車両としてご利 用いただけるサービスです。 https://www.tokyu.co.jp/railway/ticket/q-seat/
14 発生した課題 • 課題 ◦ ポイント取引処理の複雑性 ◦ 口座API、QSKIP交換API、QSEAT交換APIを使う必要があ り、それぞれ仕様や連携先(別チーム・外部ベンダー)が 異なる
◦ 将来追加される交換先を見込んだ柔軟性 • ソリューション ◦ 取引とAPI呼び出しのPackageをカプセル化 ▪ 運行情報などでも外部通信周りの処理を集約させた callerパッケージを用意している • 結合先が多様なためドメイン処理と関心を分離 internal/exchangetransaction/ ├── exchange_facade.go ├── exchanger.go ├── qseat_exchanger_test.go ├── qseat_exchanger.go ├── qskip_exchanger_test.go └── qskip_exchanger.go internal/point-api/client.go internal/qskip-api/client.go internal/qseat-api/client.go 取引先が増える ごとにファイル を分離していく 外部通信まわり の処理を集約
15 現在のGoバックエンド 実装機能抜粋 • 電車時刻表 • 列車走行位置 • バス時刻表 •
バス接近情報・走行位置 • 運行情報お知らせ・Push配信基盤 • TOKYU ID連携 • TOQCOIN(ポイントサービス)基盤 • TOQCOIN Q SKIP連携 • TOQCOIN Q SEAT連携 × 15 コンテナ × 22 コンテナ Job Web API Google Cloud Cloud Run 上で稼働 (コンテナフルマネージドサービス)
16 これから ─ AIの波 • Las Vegas出張 Google Cloud Next
• AIコーディングツールの導入 • 開発プロセス・開発体制の刷新 チームで取り組んでいる AIを使った開発プロセス改善資料の一部 Coding Agentのセッション ラスベガスの空港にて
17 最後に - URBAN HACKSで働く魅力・文化 • エンジニアによるまちづくり • ユーザー目線と技術力 •
失敗を恐れない
None