【DeNATechCon2024】Perl to Goから始まるシステム刷新

2.4K Views

February 29, 24

スライド概要

カーシェアサービス「エニカ(Anyca)」では、8年間のサービス運用に伴い複雑になったコードと硬直化したインフラを克服するべく、Perl から Go への転換、そしてインフラ刷新を目指しています。Perl 開発環境の整備と移行テストを経て、AWS コンサルや DeNA のインフラチームと協力することで Go と Perl の併用環境まで実現しました。

本登壇では、キラキラしたベストな言語移行を共有するわけではありません。限られたリソースで現状の問題を打破するためにもがきながら取り組んできて、良かったこと、苦しんでいること、そこから見えてきたノウハウなどを赤裸々に紹介します。

profile-image

DeNA が社会の技術向上に貢献するため、業務で得た知見を積極的に外部に発信する、DeNA 公式のアカウントです。DeNA エンジニアの登壇資料をお届けします。

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Perl to Goから始まるシステム刷新 DeNA SOMPO Mobility 泉川 貴洋 © DeNA Co., Ltd.

2.

泉川 貴洋 / いずみかわ たかひろ 所属 DeNA SOMPO Mobility グロース本部プロダクト開発部 担当 Anyca サーバサイドエンジニア 出⾝ ⾹川県 家族構成 妻と2歳の娘の3⼈家族 @izumix0303 © DeNA Co., Ltd. 2

3.

エニカとは 新型⾞‧⾼級⾞など1,300以上の⾞種に乗れる、 個⼈間を中⼼としたカーシェアサービス。 カーシェアを通じた理想のライフスタイルを提供 © DeNA Co., Ltd. 3

4.

本⽇の話 Anycaのサーバサイドの システム刷新 © DeNA Co., Ltd. 4

5.

本⽇の話 Anycaのサーバサイドの システム刷新 ⾔語移⾏ (Perl to Go) © DeNA Co., Ltd. 5

6.

本⽇の話 Anycaのサーバサイドの システム刷新 ⾔語移⾏ (Perl to Go) © DeNA Co., Ltd. インフラ移⾏(新 AWS環境) 6

7.

アジェンダ © DeNA Co., Ltd. 7

8.

アジェンダ 1. © DeNA Co., Ltd. Perl to Goから始まるシステム刷新 8

9.

アジェンダ © DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 9

10.

アジェンダ © DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 3. 新基盤の概要紹介 10

11.

© DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 3. 新基盤の概要紹介 11

12.

1. Perl to Goから始まるシステム刷新 Perl to Go の背景 © DeNA Co., Ltd. 12

13.

1. Perl to Goから始まるシステム刷新 Perl to Go の背景 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. 13

14.

1. Perl to Goから始まるシステム刷新 Perl to Go の背景 © DeNA Co., Ltd. 1. 2. エニカと ⾔語移⾏理由 Go を選択した 理由 14

15.

1. Perl to Goから始まるシステム刷新 Perl to Go の背景 © DeNA Co., Ltd. 1. 2. 3. エニカと ⾔語移⾏理由 Go を選択した 理由 インフラ移⾏の 理由 15

16.

1. Perl to Goから始まるシステム刷新 エニカのシステム 8年続く⻑いサービス 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. 16

17.

1. Perl to Goから始まるシステム刷新 エニカのシステム 8年続く⻑いサービス 幅広い機能 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. ‧本⼈確認、チャット、保険、決済... ‧ドライバー or オーナー ‧個⼈間、ディーラーカーシェア(法⼈)、AOSC... 17

18.

1. Perl to Goから始まるシステム刷新 エニカのシステム 8年続く⻑いサービス 幅広い機能 1. エニカと ⾔語移⾏理由 ‧本⼈確認、チャット、保険、決済... ‧ドライバー or オーナー ‧個⼈間、ディーラーカーシェア(法⼈)、AOSC... 複雑で⼤規模なコード ‧空⾏やコメントを除いて40万⾏以上 ‧仕様も残っていないことが多い ‧複雑性も増し、機能開発、改善の影響を読み切るのが⼤変 © DeNA Co., Ltd. 18

19.

1. Perl to Goから始まるシステム刷新 別⾔語に移⾏しようとした理由 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. 19

20.

1. Perl to Goから始まるシステム刷新 別⾔語に移⾏しようとした理由 Perlエンジニアは少なく、採⽤が難しい 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. 20

21.

1. Perl to Goから始まるシステム刷新 別⾔語に移⾏しようとした理由 Perlエンジニアは少なく、採⽤が難しい 今後も機能開発を活発に⾏う必要があるが... 1. エニカと ⾔語移⾏理由 © DeNA Co., Ltd. ‧運⽤保守コストも⾼く、⼈が全く⾜りていない ‧サーバサイドエンジニア(正社員3⼈ + 業務委託1⼈) 21

22.

1. Perl to Goから始まるシステム刷新 別⾔語に移⾏しようとした理由 Perlエンジニアは少なく、採⽤が難しい 今後も機能開発を活発に⾏う必要があるが... 1. エニカと ⾔語移⾏理由 ‧運⽤保守コストも⾼く、⼈が全く⾜りていない ‧サーバサイドエンジニア(正社員3⼈ + 業務委託1⼈) 遠くない将来、サービス継続が難しくなる © DeNA Co., Ltd. 22

23.

1. Perl to Goから始まるシステム刷新 2. Go を選択した 理由 © DeNA Co., Ltd. 23

24.

1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 全員が書ける or 学びやすい 2. Go を選択した 理由 © DeNA Co., Ltd. 24

25.

1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 © DeNA Co., Ltd. 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 25

26.

1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 26

27.

1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 27

28.

1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 28

29.

1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 29

30.

1. Perl to Goから始まるシステム刷新 現在のチームで開発できる ● 2. Go を選択した 理由 全員が書ける or 学びやすい 採⽤しやすい ● 利⽤エンジニアが多い⾔語 今後の開発がしやすい ● © DeNA Co., Ltd. AWS公式SDKがある、ライブラリに困らない、etc 30

31.

1. Perl to Goから始まるシステム刷新 3. インフラ移⾏の 理由 © DeNA Co., Ltd. 31

32.

1. Perl to Goから始まるシステム刷新 弊社独⾃の理由 今までインフラの運⽤管理をDeNAのインフラチームに委託 3. インフラ移⾏の 理由 © DeNA Co., Ltd. 32

33.

1. Perl to Goから始まるシステム刷新 弊社独⾃の理由 今までインフラの運⽤管理をDeNAのインフラチームに委託 普段の運⽤では、⼤きな⼯数削減 3. ⾔語移⾏時は、お互いにコミュニケーションコスト インフラ移⾏の 理由 © DeNA Co., Ltd. 33

34.

1. Perl to Goから始まるシステム刷新 弊社独⾃の理由 今までインフラの運⽤管理をDeNAのインフラチームに委託 普段の運⽤では、⼤きな⼯数削減 3. インフラ移⾏の 理由 © DeNA Co., Ltd. ⾔語移⾏時は、お互いにコミュニケーションコスト 話し合いの結果、 新AWSアカウントを作って、 まずは新旧併⽤構成から始める 34

35.

1. Perl to Goから始まるシステム刷新 © DeNA Co., Ltd. 35

36.

1. Perl to Goから始まるシステム刷新 ⾔語移⾏理由 複雑になり⽣産性低下 ⼈員不⾜ 希少なPerlエンジニア © DeNA Co., Ltd. 36

37.

1. Perl to Goから始まるシステム刷新 © DeNA Co., Ltd. ⾔語移⾏理由 Goを選択した理由 複雑になり⽣産性低下 ⼈員不⾜ 希少なPerlエンジニア 現メンバーで開発可能 採⽤のしやすさ 今後の開発のしやすさ 37

38.

1. Perl to Goから始まるシステム刷新 © DeNA Co., Ltd. ⾔語移⾏理由 Goを選択した理由 インフラ移⾏の理由 複雑になり⽣産性低下 ⼈員不⾜ 希少なPerlエンジニア 現メンバーで開発可能 採⽤のしやすさ 今後の開発のしやすさ 弊社独⾃の背景 スムーズな⾔語移⾏ 38

39.

© DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 3. 新基盤の概要紹介 39

40.

2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 40

41.

2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 41

42.

2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 42

43.

2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 43

44.

2. 失敗と学び APIサーバ WEBサーバ Perl 管理サーバ © DeNA Co., Ltd. 44

45.

2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 45

46.

2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 46

47.

2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 既存業務と並⾏してシステム刷新開始! © DeNA Co., Ltd. 47

48.

2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 既存業務と並⾏してシステム刷新開始! 既存機能の、新規開発や運⽤の優先度が上がるとすぐ⽌める © DeNA Co., Ltd. 48

49.

2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 既存業務と並⾏してシステム刷新開始! 既存機能の、新規開発や運⽤の優先度が上がるとすぐ⽌める 結果、、、 形にならない⽇々が続いた... © DeNA Co., Ltd. 49

50.

2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 CEOを巻き込んで意思決定プロジェクト化 学び © DeNA Co., Ltd. 50

51.

2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 CEOを巻き込んで意思決定プロジェクト化 私含め2⼈のエンジニアが専属でシステム刷新 学び © DeNA Co., Ltd. 51

52.

2. 失敗と学び ⽚⼿間⽴上げでお蔵⼊り危機 CEOを巻き込んで意思決定プロジェクト化 私含め2⼈のエンジニアが専属でシステム刷新 ⽴ち上げは 集中して⾏わないと形にならない 学び © DeNA Co., Ltd. 52

53.

2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 53

54.

2. 失敗と学び 価値発信できず継続危機 既存APIの移⾏からスタート © DeNA Co., Ltd. 54

55.

2. 失敗と学び 価値発信できず継続危機 既存APIの移⾏からスタート 上⼿く価値発信できない。。 このまま継続?事業的価値は? © DeNA Co., Ltd. 55

56.

2. 失敗と学び 価値発信できず継続危機 既存APIの移⾏からスタート 上⼿く価値発信できない。。 このまま継続?事業的価値は? 結果、、、 3か⽉後、新サービス開発(WEB)の話が浮上 プロジェクト停⽌の危機 © DeNA Co., Ltd. 56

57.

2. 失敗と学び 価値発信できず継続危機 新基盤でWEBも構築し、 新サービスも新基盤で開発! 学び © DeNA Co., Ltd. 57

58.

2. 失敗と学び 価値発信できず継続危機 新基盤でWEBも構築し、 新サービスも新基盤で開発! ⼤変ではあるが、事業的価値が明確になり、 「みんなに応援されるプロジェクト」になった! 学び © DeNA Co., Ltd. 58

59.

2. 失敗と学び 価値発信できず継続危機 新基盤でWEBも構築し、 新サービスも新基盤で開発! ⼤変ではあるが、事業的価値が明確になり、 「みんなに応援されるプロジェクト」になった! 学び システム刷新継続のためには、 事業的価値の発信が必要 © DeNA Co., Ltd. 59

60.

2. 失敗と学び 価値発信できず継続危機 注意点 新機能開発の優先順位が上がりすぎる... © DeNA Co., Ltd. 60

61.

2. 失敗と学び 価値発信できず継続危機 注意点 新機能開発の優先順位が上がりすぎる... 新機能開発に関連する機能を 移⾏対象にしよう! © DeNA Co., Ltd. 61

62.

2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 62

63.

2. 失敗と学び スキル不⾜で迷⾛危機 インフラ、サーバ、WEBフロント、要件定義、機能開発... 2⼈で全部やらなければならない... © DeNA Co., Ltd. 63

64.

2. 失敗と学び スキル不⾜で迷⾛危機 インフラ、サーバ、WEBフロント、要件定義、機能開発... 2⼈で全部やらなければならない... 2つのAWSアカウントをTransit Gatewayで繋いで、 APIもWEBも同⼀ドメインで運⽤... AWSの構成がイレギュラー過ぎて ⾃信が持てない...「本当にこれで良いのか?」 © DeNA Co., Ltd. 64

65.

2. 失敗と学び スキル不⾜で迷⾛危機 インフラ、サーバ、WEBフロント、要件定義、機能開発... 2⼈で全部やらなければならない... 2つのAWSアカウントをTransit Gatewayで繋いで、 APIもWEBも同⼀ドメインで運⽤... AWSの構成がイレギュラー過ぎて ⾃信が持てない...「本当にこれで良いのか?」 結果、、、 迷⾛してしまった... © DeNA Co., Ltd. 65

66.

2. 失敗と学び スキル不⾜で迷⾛危機 AWSソリューションアーキテクトに相談 学び © DeNA Co., Ltd. 66

67.

2. 失敗と学び スキル不⾜で迷⾛危機 AWSソリューションアーキテクトに相談 毎週のように相談して、新環境の利⽤技術、 新旧併⽤環境のインフラ構成を壁打ち 学び © DeNA Co., Ltd. 67

68.

2. 失敗と学び スキル不⾜で迷⾛危機 AWSソリューションアーキテクトに相談 毎週のように相談して、新環境の利⽤技術、 新旧併⽤環境のインフラ構成を壁打ち 学び 専⾨家に頼ることが⼤事! © DeNA Co., Ltd. 68

69.

2. 失敗と学び 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 © DeNA Co., Ltd. 69

70.

2. 失敗と学び ⼯数不⾜でリリース危機 ⼯数不⾜、スケジュールは遅延 © DeNA Co., Ltd. 70

71.

2. 失敗と学び ⼯数不⾜でリリース危機 ⼯数不⾜、スケジュールは遅延 新基盤の構築と並⾏しての 新サービスリリース、、間に合わない。。 社内にヘルプお願いできる先もない... © DeNA Co., Ltd. 71

72.

2. 失敗と学び ⼯数不⾜でリリース危機 ⼯数不⾜、スケジュールは遅延 新基盤の構築と並⾏しての 新サービスリリース、、間に合わない。。 社内にヘルプお願いできる先もない... 結果、、、 インフラ構築を⼀部諦めるしかない。。 © DeNA Co., Ltd. 72

73.

2. 失敗と学び ⼯数不⾜でリリース危機 DeNAのインフラチームから1ヶ⽉間ヘルプ 学び © DeNA Co., Ltd. 73

74.

2. 失敗と学び ⼯数不⾜でリリース危機 DeNAのインフラチームから1ヶ⽉間ヘルプ 結果、API、WEBともに新旧併⽤環境を 構築しつつ、新サービスのリリースも達成! 学び © DeNA Co., Ltd. 74

75.

2. 失敗と学び ⼯数不⾜でリリース危機 DeNAのインフラチームから1ヶ⽉間ヘルプ 結果、API、WEBともに新旧併⽤環境を 構築しつつ、新サービスのリリースも達成! 学び 忙しいからきっと無理、と決めつけず、 仲間に頼ることが⼤事! © DeNA Co., Ltd. 75

76.

2. 失敗と学び © DeNA Co., Ltd. 76

77.

2. 失敗と学び ⽴ち上げは 集中的に! 1. ⽚⼿間⽴上げで お蔵⼊り危機 © DeNA Co., Ltd. 77

78.

2. 失敗と学び ⽴ち上げは 集中的に! © DeNA Co., Ltd. 事業的価値を 継続的に発信しよう 1. 2. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 78

79.

2. 失敗と学び ⽴ち上げは 集中的に! © DeNA Co., Ltd. 事業的価値を 継続的に発信しよう 専⾨家に 頼ろう! 1. 2. 3. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 79

80.

2. 失敗と学び ⽴ち上げは 集中的に! © DeNA Co., Ltd. 事業的価値を 継続的に発信しよう 専⾨家に 頼ろう! 思い込みせず、 仲間に頼ろう! 1. 2. 3. 4. ⽚⼿間⽴上げで お蔵⼊り危機 価値発信できず 継続危機 スキル不⾜で 迷⾛危機 ⼯数不⾜で リリース危機 80

81.

© DeNA Co., Ltd. 1. Perl to Goから始まるシステム刷新 2. 失敗と学び 3. 新基盤の概要紹介 81

82.

3. 新基盤の概要紹介 新基盤API概要 © DeNA Co., Ltd. 82

83.

3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 © DeNA Co., Ltd. 83

84.

3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 ‧新基盤ALBでリクエストを受けて、 パスベースルーティング © DeNA Co., Ltd. 84

85.

3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 ‧新基盤ALBでリクエストを受けて、 パスベースルーティング ‧新基盤はECS(Fargate) ‧Auto Scalling ‧CI はCircleCI、CD は CodePipeline ‧Blue/Green デプロイ © DeNA Co., Ltd. 85

86.

3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 ‧新基盤ALBでリクエストを受けて、 パスベースルーティング ‧新基盤はECS(Fargate) ‧Auto Scalling ‧CI はCircleCI、CD は CodePipeline ‧Blue/Green デプロイ ‧DBは旧環境のものを利⽤ © DeNA Co., Ltd. 86

87.

3. 新基盤の概要紹介 新基盤API概要 ‧2つの環境はTransit Gateway経由で接続 ‧新基盤ALBでリクエストを受けて、 パスベースルーティング ‧新基盤はECS(Fargate) ‧Auto Scalling ‧CI はCircleCI、CD は CodePipeline ‧Blue/Green デプロイ ‧DBは旧環境のものを利⽤ ‧新基盤のインフラはTerraformで管理 © DeNA Co., Ltd. 87

88.

3. 新基盤の概要紹介 新基盤WEB概要 © DeNA Co., Ltd. 88

89.

3. 新基盤の概要紹介 新基盤WEB概要 ‧新環境CFでリクエストを受けて、 v2 パスと既存パスでオリジン切り替え © DeNA Co., Ltd. 89

90.

3. 新基盤の概要紹介 新基盤WEB概要 ‧新環境CFでリクエストを受けて、 v2 パスと既存パスでオリジン切り替え ‧新基盤は Amplify Hosting © DeNA Co., Ltd. 90

91.

3. 新基盤の概要紹介 新基盤WEB概要 ‧新環境CFでリクエストを受けて、 v2 パスと既存パスでオリジン切り替え ‧新基盤は Amplify Hosting ‧Amplify CF に直接接続できないよう Basic認証を付与 ‧旧環境 ALB に直接接続できないように Nginx の server_name を設定 © DeNA Co., Ltd. 91

92.

3. 新基盤の概要紹介 新基盤WEB概要 ‧新環境CFでリクエストを受けて、 v2 パスと既存パスでオリジン切り替え ‧新基盤は Amplify Hosting ‧Amplify CF に直接接続できないよう Basic認証を付与 ‧旧環境 ALB に直接接続できないように Nginx の server_name を設定 ‧旧基盤のWEBでも端末IPを取得できるように CF Functions で true-client-ip をヘッダ付与 © DeNA Co., Ltd. 92

93.

3. 新基盤の概要紹介 その他 https://speakerdeck.com/izumix03/shi-ishe-teapinosusume © DeNA Co., Ltd. 93

94.

システム刷新をしたい、 絶対やりきりたい、 その思いが何より⼤切です。 諦めなければ絶対に達成できるので、 諦めなくても良いように.. 道のりを楽しんで、⼀緒に頑張りましょう! © DeNA Co., Ltd. 94