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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ryuya Ishibashi
December 25, 2023
Technology
410
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
事業譲渡されたブランドにGo言語を取り入れた話
Ryuya Ishibashi
December 25, 2023
More Decks by Ryuya Ishibashi
See All by Ryuya Ishibashi
スライドテンプレート Marp + Custom Style
ryuyaishibashi
0
2.6k
モジュラーモノリス、はじめました
ryuyaishibashi
0
200
Cursor & Devinで楽ちん!初めてのGo CLI開発 aws-s3-siggy
ryuyaishibashi
0
1.3k
slogによる構造化ログの実装とCloudWatch Logs Insightsでの利用
ryuyaishibashi
0
1.5k
事業譲渡とシステムリプレイス - 複雑な状況から最適解を見出すための事例集 -
ryuyaishibashi
0
220
Rails RESTful API開発における TDDのTIPS
ryuyaishibashi
1
520
Other Decks in Technology
See All in Technology
Amazon S3 Tablesに全部任せてみた結果——コンパクション/スナップショット管理は本当に手放せるか
shigeruoda
0
330
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
100
Backstageでつくるセルフサービスな社内開発基盤
kikunosuke75
1
230
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
0
940
APIセキュリティを組織で実現するには~注力する点と設計・実装に入れたい対策~
riiimparm
3
930
【視聴者参加型!】AWSセキュリティアンチパターンクイズ
syoshie
0
250
2026-09-04 SRE Tech Talk #15 怠惰なTerraform / Lazy Terraform
masasuzu
0
170
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
120
[RSJ26] Building a VLA Model Based on Self-Distilled Classification
keio_smilab
PRO
0
190
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
1
2.1k
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
250
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
220
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.2k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Typedesign – Prime Four
hannesfritz
42
3.2k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
Unsuck your backbone
ammeep
672
58k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
410
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
640
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
500
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
700
A Soul's Torment
seathinner
7
3.5k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
事業譲渡されたブランドに Go言語を取り入れた話 IoT系のプロダクト開発の裏側って?知られざる開発・ 運用ノウハウを2社のエンジニア6名が徹底解説! ENECHANGE × Smart Shopping
Copyright © ENECHANGE Ltd. All Rights Reserved. | 2 自己紹介
Ryuya Ishibashi SES企業にて大小様々なプロジェクトに参画 • Ruby on Rails / Vue.js / PHP / C# / .NET / Drupal / AWS / Azureなどの技術に触れてきました ↓ ENECHANGE株式会社 • 2022/04 - 2023/03 ◦ Railsエンジニアとして、電気料金シミュレーションのAPI開 発を中心にお仕事していました • 2023/04 - ←いまここ ◦ Go・インフラエンジニアとして、EV充電器のスポット情報 API開発やAWS環境構築を中心にお仕事しています (@RubyKaigi2022) X / GitHub
EVsmartブランドについて
Copyright © ENECHANGE Ltd. All Rights Reserved. | 4 EVsmartブランドについて
• EVsmartとは? ◦ いくつかのサービスの総称 (統一的なブランド名称)です ▪ EVの充電器検索、充電スタンド・スポット口コミサイト ▪ 上記のアプリ版 (iOS/Android) • 自動車メーカー様にOEM提供 ▪ 上記のAPI版 • マップサービス・カーナビ等に提供 • 事業譲渡について ◦ 2022/09、EVsmartブランドはアユダンテ社から ENECHANGE社に事業譲渡されました
Copyright © ENECHANGE Ltd. All Rights Reserved. | 5 EVsmartブランドについて
• エネルギークラウド事業部 EV Unitの守備範囲 ◦ 赤字の箇所を主に担当しています ▪ EVの充電器検索、充電スタンド・スポット口コミサイト ▪ 上記のアプリ版 (iOS/Android) • 自動車メーカー様にOEM提供 ▪ 上記のAPI版 • マップサービス・カーナビ等に提供
従来のEVsmartのアーキテクチャと課題
Copyright © ENECHANGE Ltd. All Rights Reserved. | 7 従来のEVsmartのアーキテクチャ
mobile app backend Management Console Azure vm vm DB
Copyright © ENECHANGE Ltd. All Rights Reserved. | 8 従来のEVsmartの課題
• とにかくコードが読みづらく、保守が困難 ◦ 典型的なスパゲッティコード • 杜撰なブランチ管理 ◦ master, testing, developブランチに謎の大量の差分がある • …And So On!
解決方針と新アーキテクチャ
Copyright © ENECHANGE Ltd. All Rights Reserved. | 10 解決方法(アユダンテ社)
• コード自体を一から書き直す ◦ 従来のコードを改善するのも同じくらいコストがかかる • 言語自体もPHPではなく、Goを選択する ◦ それなら、モダンで高速な静的型付け言語であるGoを採用しよう • インフラも一から作り直そう ◦ VMでなく、コンテナオーケストレーションサービスを利用しよう • クラウドサービス自体もAzureではなく、GCPを選択する ◦ それなら、今時のGKEを採用しよう
Copyright © ENECHANGE Ltd. All Rights Reserved. | 11 解決方法(ENECHANGE社)
• 基本的にはアユダンテ社の対応を踏襲するが、赤字の箇所だけ変更した • コード自体を一から書き直す ◦ 従来のコードを改善するのも同じくらいコストがかかる • 言語自体もPHPではなく、Goを選択する ◦ それなら、モダンで高速な静的型付け言語であるGoを採用しよう • インフラも一から作り直そう ◦ VMでなく、コンテナオーケストレーションサービスを利用しよう • クラウドサービスは自社で強みのあるAWSを利用しよう ◦ 既に開発運用実績のあるECS on Fargateを採用しよう
Copyright © ENECHANGE Ltd. All Rights Reserved. | 12 新しいEVsmartのアーキテクチャ
mobile app backend Management Console Azure DB Gin Web Framework fargate frontend Gin Web Framework fargate AWS fargate backend
Go言語の優れた要素
Copyright © ENECHANGE Ltd. All Rights Reserved. | 14 Go言語の優れた要素
• 高速性 ◦ 静的型付け言語で、事前コンパイルされているため、実行時の処理が速い ◦ 参考) 実際のエンドポイントを用いた実験結果
Copyright © ENECHANGE Ltd. All Rights Reserved. | 15 Go言語の優れた要素
• 表現のシンプル性 ◦ 例) ループ処理はfor文しかない ▪ Rubyのループ処理 • for, times, while, each, upto, downto, step, loop… ◦ 誰が書いても似たようなコードになり、 ▪ 保守性に優れている ▪ PRレビューも容易になりうる
Copyright © ENECHANGE Ltd. All Rights Reserved. | 16 Go言語の優れた要素
• Goroutineによる非常に軽量なスレッドの実現 ◦ 特徴 ▪ 少ないメモリ消費 ▪ 低い生成・破壊コスト ▪ M:Nモデルによる、低いコンテキストスイッチ ◦ 業務活用例 ▪ 1分毎の充電器の満空情報の更新処理に利用 ▪ 10 routinesによる同時実行により、 確実に処理が数秒で終わるようになった
Copyright © ENECHANGE Ltd. All Rights Reserved. | 17 Go言語の優れた要素
• Interfaceを利用した柔軟なDependency Injectionの実現 ◦ Interfaceを活用することで非常に簡単にDIを実装できます ◦ 業務活用例 ▪ 外部APIにリクエストするユースケースで、状況に応じて モックレスポンス ←→ 実リクエストを切り替えるようにしました type Client interface { Request(url URL, token string) ([]byte, error) } type RealClient struct{} type MockClient struct{} func NewClient() Client { cnf := config.GetConfig() if cnf.OcpiMockServer { return MockClient{} } else { return RealClient{} } } func (rc RealClient) Request(url URL, token string) ([]byte, error){ // 実際のエンドポイントに対する通常のリクエスト } func (mc MockClient) Request(url URL, token string) ([]byte, error) { switch url { case "http://mock.com/api/versions": return mc.mockVersionsResponse() case "http://mock.com/api/2.2": return mc.mockVersionDetailResponse() default: return nil, errors.New("invalid API endpoint") } }
Gin / GORMを利用するメリット
Copyright © ENECHANGE Ltd. All Rights Reserved. | 19 Gin
/ GORMを利用するメリット • 前提 ◦ Ginとは? ▪ Go言語によるWebアプリケーションフレームワーク ◦ GORMとは? ▪ Go言語によるORMライブラリ • Gin / GORMを利用するメリット ◦ 非常に簡単にMVCベースのWebアプリを構築できる ▪ MVCフレームワークに馴染みのある開発者にとって理解が容易 ▪ Rails, Laravel等を採用している企業のファーストチョイスとしては 良さそう ◦ 両者とも最もメジャーなパッケージの1つであるため、ドキュメントやコミュニ ティが充実している
まとめ
Copyright © ENECHANGE Ltd. All Rights Reserved. | 21 まとめ
Goの開発は楽しい!
Copyright © ENECHANGE Ltd. All Rights Reserved. | 22 Goエンジニアを募集しています!
We are currently hiring Go Engineers!!!