Slide 1

Slide 1 text

スピード狂エンジニアたちの開発 速度を保つインフラとは Bank,Inc 高橋 拓也

Slide 2

Slide 2 text

自己紹介 - 高橋拓也 - サーバサイドとクラウドインフラ - Kubernetes が好き - 糖質制限中

Slide 3

Slide 3 text

本日の内容 とある取り組みをベースに, 手が速い人達を押さえつけない ための学びを教えます

Slide 4

Slide 4 text

開発チーム この1年で一気に エンジニアが増えた

Slide 5

Slide 5 text

開発チーム 初期リリース時: 数人

Slide 6

Slide 6 text

開発チーム 現在: 15 ~ 20人くらい

Slide 7

Slide 7 text

開発チーム 昔ながらの開発フローが だんだん通用しなくなる

Slide 8

Slide 8 text

開発チーム 数人 ~ 10人時代

Slide 9

Slide 9 text

開発チーム どうやって開発していたか?

Slide 10

Slide 10 text

開発チーム どうやって開発していたか? Staging 環境

Slide 11

Slide 11 text

開発チーム ステージング API ローカル ローカル ローカル

Slide 12

Slide 12 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル

Slide 13

Slide 13 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル

Slide 14

Slide 14 text

開発チーム ステージング API ローカル ローカル ローカル

Slide 15

Slide 15 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル ステージングで 動作試したい!

Slide 16

Slide 16 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル ステージングで 動作試したい!

Slide 17

Slide 17 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル ステージングで 動作試したい!

Slide 18

Slide 18 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル ステージングで 動作試したい! 優しい世界

Slide 19

Slide 19 text

開発チーム 数人ならこれでもよかった

Slide 20

Slide 20 text

開発チーム 人数が増えてくると

Slide 21

Slide 21 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル

Slide 22

Slide 22 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい!

Slide 23

Slide 23 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージング 戦国時代

Slide 24

Slide 24 text

開発チーム そこで作成された

Slide 25

Slide 25 text

開発チーム そこで作成された Staging2

Slide 26

Slide 26 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージング API

Slide 27

Slide 27 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージング API なんとかなった

Slide 28

Slide 28 text

開発チーム ぼくがバンクに入った頃 (5月)

Slide 29

Slide 29 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい!

Slide 30

Slide 30 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! どうにもならない

Slide 31

Slide 31 text

開発チーム ステージング API ローカル 一人ひとりの専用APIを

Slide 32

Slide 32 text

開発チーム ステージング API ローカル 無限に スケールできるように ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル

Slide 33

Slide 33 text

開発チーム ステージング API ローカル 無限ステージング ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル

Slide 34

Slide 34 text

開発チーム 昼会で熱望されていた ローカル ほしい

Slide 35

Slide 35 text

開発チーム 入社2週目ぼく 「つくれそう」

Slide 36

Slide 36 text

開発チーム 入社2週目ぼく 「つくれそう」 つくった

Slide 37

Slide 37 text

開発チーム 機能提供を とにかく急いだ

Slide 38

Slide 38 text

開発チーム 1. CI が通ったら自動デプロイ 2. プルリク番号の名前がつく 3. pr-100-api.domain.com でアクセス

Slide 39

Slide 39 text

開発チーム 良くない構成も 混じった

Slide 40

Slide 40 text

開発チーム 1. ひとつのDBインスタンスを共有 2. スクリプトは .circleci/config.yaml

Slide 41

Slide 41 text

開発チーム 良くない構成も 混じったけど 動く

Slide 42

Slide 42 text

開発チーム ステージング API ローカル ねんがんの むげんすてーじんぐを てにいれた! ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル

Slide 43

Slide 43 text

開発チーム リリースから 1ヶ月後

Slide 44

Slide 44 text

開発チーム みんなの開発は どうなったか?

Slide 45

Slide 45 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! むげん

Slide 46

Slide 46 text

開発チーム ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! ステージング API ローカル ローカル ローカル ローカル ローカル ローカル ローカル ステージングで 動作試したい! ステージングで 動作試したい! ステージングで 動作試したい! 無限ステージング 使われない問題

Slide 47

Slide 47 text

開発チーム なんでみんな 使ってくれないの

Slide 48

Slide 48 text

開発チーム 使い勝手がよくなかった

Slide 49

Slide 49 text

開発チーム 今まで

Slide 50

Slide 50 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル

Slide 51

Slide 51 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル 1ステップ

Slide 52

Slide 52 text

開発チーム ステージングで 動作試したい! ステージング API ローカル ローカル ローカル 1分

Slide 53

Slide 53 text

開発チーム 無限ステージング

Slide 54

Slide 54 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する

Slide 55

Slide 55 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 手順が多い

Slide 56

Slide 56 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する

Slide 57

Slide 57 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する CI 完了を待たないといけない

Slide 58

Slide 58 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 自分の使いたいタイミングで 使えない

Slide 59

Slide 59 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する

Slide 60

Slide 60 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 5分

Slide 61

Slide 61 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 5分

Slide 62

Slide 62 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 10分

Slide 63

Slide 63 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 合計20分

Slide 64

Slide 64 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する APIが使えるようになるまで めちゃめちゃ時間がかかる

Slide 65

Slide 65 text

開発チーム うちのチームは スピード命

Slide 66

Slide 66 text

開発チーム コレじゃ使われない...

Slide 67

Slide 67 text

開発チーム 直そう

Slide 68

Slide 68 text

開発チーム ステージング API ローカル 無限ステージング改 ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル

Slide 69

Slide 69 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 5分

Slide 70

Slide 70 text

開発チーム CI 完了を待たないといけない問題

Slide 71

Slide 71 text

開発チーム 既存のデプロイフローに 載せた

Slide 72

Slide 72 text

開発チーム ステージングデプロイ プロダクションデプロイ

Slide 73

Slide 73 text

開発チーム 無限ステージング

Slide 74

Slide 74 text

開発チーム https://watashino-api.domain.com 任意の名前で作成可能にした

Slide 75

Slide 75 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 5分

Slide 76

Slide 76 text

開発チーム アプリをビルドしないと いけない問題

Slide 77

Slide 77 text

開発チーム URL を配信するエンドポイントを 作って

Slide 78

Slide 78 text

開発チーム ベータ版に参照機能を 作ってもらった

Slide 79

Slide 79 text

開発チーム ベータ版に参照機能を 作ってもらった アプリビルドが不要に!

Slide 80

Slide 80 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する 10分

Slide 81

Slide 81 text

開発チーム そもそも UP が 遅すぎる問題

Slide 82

Slide 82 text

インフラ構成で頑張って 10分から10秒にした 開発チーム

Slide 83

Slide 83 text

開発チーム 詳しくは Google Cloud Next ‘18 in Tokyo の 発表を見てください (スライド32Pあたり) https://speakerdeck.com/bankinc220/cash-wozhi-eru-google-kubernetes-engine https://www.youtube.com/watch?v=b2tq_f3ZWdE

Slide 84

Slide 84 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する

Slide 85

Slide 85 text

開発チーム ブランチをGitHubにプッシュして,プルリ クを発行して,CircleCI が通りきるまで 待って,CircleCIがきちんと通ったか確認 して,プルリク番号を確かめて,APIが使 えるようになるまで待って,アプリのエン ドポイントを書き換えて,アプリをビルドし て,動作確認する デメリットすべて解決 ♀

Slide 86

Slide 86 text

開発チーム だんだんと みんな使ってくれるようになった

Slide 87

Slide 87 text

開発チーム この作業で学んだこと

Slide 88

Slide 88 text

開発チーム 開発作業が 遅くなるのは悪

Slide 89

Slide 89 text

開発チーム 最初のままだったら きっと誰も使ってくれなかった

Slide 90

Slide 90 text

開発チーム この作業で学んだこと

Slide 91

Slide 91 text

開発チーム ユーザーに選択肢を残す

Slide 92

Slide 92 text

開発チーム ユーザーに選択肢を残す

Slide 93

Slide 93 text

開発チーム ユーザーに選択肢を残す 実は昔のステージングは まだまだ現役

Slide 94

Slide 94 text

開発チーム ホントは捨てたい

Slide 95

Slide 95 text

開発チーム でも,使っているユーザーがいる

Slide 96

Slide 96 text

開発チーム 共有ステージングの方が 開発速度が速い人がいる

Slide 97

Slide 97 text

開発チーム 多様性

Slide 98

Slide 98 text

開発チーム ステージング API ローカル 全力で シェアは奪いに行く ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル ステージング API ローカル

Slide 99

Slide 99 text

開発チーム この作業で学んだこと

Slide 100

Slide 100 text

開発チーム 他人のワークフローを 無理やり変えない

Slide 101

Slide 101 text

開発チーム だって嫌だもん

Slide 102

Slide 102 text

開発チーム 無限ステージング利用を 強制することもできた

Slide 103

Slide 103 text

開発チーム 使われない理由が わかっているか?

Slide 104

Slide 104 text

開発チーム 使われるようになる努力を 怠ってるんじゃないか?

Slide 105

Slide 105 text

開発チーム 常に自分に 問いかけよう

Slide 106

Slide 106 text

開発チーム まとめ

Slide 107

Slide 107 text

開発チーム インフラは あくまで裏方

Slide 108

Slide 108 text

開発チーム 開発者の気持ちになって サポートに徹する!

Slide 109

Slide 109 text

開発チーム (個人的意見です)

Slide 110

Slide 110 text

おしまい