Slide 1

Slide 1 text

サービスを壊さずにリリースする ~ 当たり前にリリースしていくために必要なこと ~ Classi社様 新卒研修 第1回 そーだい塾

Slide 2

Slide 2 text

リリースは怖い
 
 
 What is it?

Slide 3

Slide 3 text

なぜなら、リリースすると
 
 サービスに影響がでる
 What is it?

Slide 4

Slide 4 text

良い影響ならいいけど…
 
 もしバグが出たら…
 
 サービスが壊れたら…
 
 What is it?

Slide 5

Slide 5 text

だから壊さないための
 
 工夫が大事
 What is it?

Slide 6

Slide 6 text

これを知ってたら
 
 あの事故は防げたって話をします
 What is it?

Slide 7

Slide 7 text

1. 自己紹介
 2. コードの遊びと余裕
 3. 監視と早期発見
 4. 素早く元に戻す
 5. まとめ
 あじぇんだ

Slide 8

Slide 8 text

1. 自己紹介
 2. コードの遊びと余裕
 3. 監視と早期発見
 4. 素早く元に戻す
 5. まとめ
 あじぇんだ

Slide 9

Slide 9 text

自己紹介
 曽根 壮大(36歳)
 Have Fun Tech LLC 代表社員
 
 そ  ね   たけ とも
 ● 日本PostgreSQLユーザ会 勉強会分科会 担当
 ● 3人の子供がいます(長女、次女、長男)
 ● 技術的にはWeb/LL言語/RDBMSが好きです
 ● コミュニティが好き

Slide 10

Slide 10 text

1. 自己紹介
 2. コードの遊びと余裕
 3. 監視と早期発見
 4. 素早く元に戻す
 5. まとめ
 あじぇんだ

Slide 11

Slide 11 text

遊びと余裕
 
 
 コードの遊びと余裕

Slide 12

Slide 12 text

遊びは仕組み 遊びの仕組みの活用例が右の 図、橋の結合部の隙間。 橋は夏などの気温が高いときに熱 膨張する。このときの熱膨張分の 隙間が最初から用意されている。 wikipedia: 熱膨張から引用

Slide 13

Slide 13 text

コードの遊び
 
 
 コードの遊びと余裕

Slide 14

Slide 14 text

コードの遊び
 ↓
 コードの変更(膨張)を受け入れる場所
 コードの遊びと余裕

Slide 15

Slide 15 text

Decoratorパターン
 
 
 コードの遊びと余裕

Slide 16

Slide 16 text

Decoratorパターン
 
 
 コードの遊びと余裕 継承ではなく、委譲で機能を追加していくパターン。 そーだいさんはDo You PHP で育ったので今日はそこから引用して説明する。 みんな @shimooka さんに感謝して読むんだぞ!

Slide 17

Slide 17 text

Decoratorパターン
 
 http://shimooka.hateblo.jp/entry/20141217/1418788239 コードの遊びと余裕

Slide 18

Slide 18 text

textString; } public function setText($str) { $this->textString = $str; } } 文字列を扱うクラス。 これに大文字するメソッドを追 加したい場合は? Decoratorパターン

Slide 19

Slide 19 text

textString; } public function setText($str) { $this->textString = $str; } // 現場で一番良く見る実装 public function upperCaseGetText($str) { return mb_strtoupper($this->getText()); } } 仕様追加のたびにPlainTextク ラスが大きくなる。 小文字にしたい場合など、どん どんこのクラスが大きくなって いくことが目に見えている。 getText()にifを追加するのは もっとダメ。 Decoratorパターン

Slide 20

Slide 20 text

Slide 21

Slide 21 text

textString; } public function setText($str) { $this->textString = $str; } } 先程のクラスと一緒。 インターフェイスに対する 実装クラスになった。 Decoratorパターン

Slide 22

Slide 22 text

text = $target; } public function getText() { return $this->text->getText(); } public function setText($str) { $this->text->setText($str); } } Decoratorクラスを作る。 コードの遊び部分になる。 Decoratorパターン

Slide 23

Slide 23 text

Slide 24

Slide 24 text

Slide 25

Slide 25 text

$text_object = new PlainText(); $text_object->setText($text); $double_text_object = new DoubleByteText($text_object); $double_text_object->getText(); 使い方 Decoratorパターン

Slide 26

Slide 26 text

コードの遊びから生まれる余裕
 ● 遠回りをしているように見えるが結果はシンプル
 ○ シンプルとイージーは違う
 ● 影響範囲、スコープを極小化できる
 ● シンプルが機能追加のためのコードに余裕を与える
 コードの遊びと余裕

Slide 27

Slide 27 text

他にも色んなテクニックがある
 
 知識と経験が『知恵』を生む
 コードの遊びと余裕

Slide 28

Slide 28 text

スコープは小さく
 
 新たな複雑を導入しない
 コードの遊びと余裕

Slide 29

Slide 29 text

1. 自己紹介
 2. コードの遊びと余裕
 3. 監視と早期発見
 4. 素早く元に戻す
 5. まとめ
 あじぇんだ

Slide 30

Slide 30 text

リリースが成功したことを
 
 どうやって判断する?
 監視と早期発見

Slide 31

Slide 31 text

監視と早期発見

Slide 32

Slide 32 text

リリースを監視する
 
 
 監視と早期発見

Slide 33

Slide 33 text

リリースを監視する
 ↓
 どうやって?
 監視と早期発見

Slide 34

Slide 34 text

“アプリケーションの監視は、 いわゆるインフラエンジニアより、 アプリケーションを一番理解している人が 監視を一番良くできる”
 
 -- id:Songmu
 監視と早期発見

Slide 35

Slide 35 text

サービスの振る舞いを監視する
 
 
 監視と早期発見

Slide 36

Slide 36 text

監視と早期発見 https://soudai.hatenablog.com/entry/webservice-monitoring

Slide 37

Slide 37 text

監視と早期発見

Slide 38

Slide 38 text

監視と早期発見

Slide 39

Slide 39 text

資料を見てくれ!
 
 https://speakerdeck.com/soudai/phper-monitoring 監視と早期発見

Slide 40

Slide 40 text

サービスを監視して早く問題に気付く
 
 
 監視と早期発見

Slide 41

Slide 41 text

サービスを監視して早く問題に気付く
 ↓
 問題を認知しないと解決はできない
 監視と早期発見 体重計に乗らなければ、ダイエットが上手く行っているかわからない

Slide 42

Slide 42 text

1. 自己紹介
 2. コードの遊びと余裕
 3. 監視と早期発見
 4. 素早く元に戻す
 5. まとめ
 あじぇんだ

Slide 43

Slide 43 text

リリースして、問題に気付いたら?
 
 
 素早く元に戻す

Slide 44

Slide 44 text

リリースして、問題に気付いたら?
 ↓
 素早く元に戻す
 素早く元に戻す

Slide 45

Slide 45 text

つまり、元に戻せるように作る
 
 
 素早く元に戻す

Slide 46

Slide 46 text

元に戻せるように作る
 ● 破壊的な変更をしない
 ○ DBのUPDATEやDELETEは破壊的
 ● ロールバックできるかどうか
 ○ リリース前も後も等しく動く
 素早く元に戻す

Slide 47

Slide 47 text

具体的なテクニックがについては
 
 次回の実践編でやります
 素早く元に戻す

Slide 48

Slide 48 text

元に戻せるようにリリースするコツ
 
 
 素早く元に戻す

Slide 49

Slide 49 text

元に戻せるようにリリースするコツ
 ↓
 部分的にリリースする(スコープを絞る)
 素早く元に戻す

Slide 50

Slide 50 text

部分的リリース 1
 ● ModelとViewのリリースを分ける
 ○ Modelのリリースで既存の状態で動く
 ○ つまり元に戻せる
 ● 同じようにControllerとModelを分けるなどがある
 素早く元に戻す

Slide 51

Slide 51 text

部分的リリース 2
 ● Viewをユーザに見せない
 ○ ?hoge=trueがあるときだけ表示、とか
 ○ 本番データで確認してOKならユーザに公開する
 ○ 新ページなら導線を公開しないなどもある
 素早く元に戻す

Slide 52

Slide 52 text

部分的リリース 3
 ● 他にも色々ある
 ○ カナリアリリース
 ○ ABテスト
 ○ DBの変更だけ先にリリースする
 素早く元に戻す

Slide 53

Slide 53 text

リリースに絶対大丈夫は無い
 
 だから、元に戻せることは大事
 素早く元に戻す

Slide 54

Slide 54 text

1. 自己紹介
 2. コードの遊びと余裕
 3. 監視と早期発見
 4. 素早く元に戻す
 5. まとめ
 あじぇんだ

Slide 55

Slide 55 text

事故を未然に防げる仕組み
 
 事故から復旧できる仕組み
 まとめ

Slide 56

Slide 56 text

事故は起こるべくして起こるし、
 
 起きた過去より、未来のほうが大事
 まとめ

Slide 57

Slide 57 text

どうしても破壊的な変更が必要なら
 
 その決断は本当に必要か考える
 まとめ いい方法が思い浮かばないときは時期早々 (技術的な観点では)

Slide 58

Slide 58 text

手を動かしたものだけが世界を変える
 
 -- id:onishi
 まとめ

Slide 59

Slide 59 text

さぁリリースをしよう
 
 
 まとめ

Slide 60

Slide 60 text

ご清聴ありがとうございました
 
 
 まとめ