Slide 1

Slide 1 text

© - BASE, Inc. X 知⾒のない技術スタックを プロダクション導⼊する エンジニアの導⼊戦略 . . - Japan PHP Conference @hgsgtk

Slide 2

Slide 2 text

© - BASE, Inc. 本⽇お話すること • 技術選定の意思決定の不安の⼀要因を和 らげる導⼊戦略 • 開発‧運⽤の知⾒を得て改善する、 フィードバックループをいかに回すか • テストとコード検査、監視を武器に不安 と⽴ち向かう

Slide 3

Slide 3 text

© - BASE, Inc. ※ 本⽇話す背景となる題材 • BASEにおける新規事業にて、既存サー ビスで運⽤経験のなかったプログラミン グ⾔語(Go)を⽤いたシステム開発を ⾏いました • この経験を⼀般化したため、サーバーサ イドのレイヤに焦点を当てて話します

Slide 4

Slide 4 text

© - BASE, Inc. About me BASE BANK, Inc. Dev Division Tech Lead 『みんなのPHP 現場で役⽴つ最新 ノウハウ!』共著者 (PHPにおけるユニットテスト) https://www.amazon.co.jp/ gp/product/ @hgsgtk Kazuki Higashiguchi

Slide 5

Slide 5 text

© - BASE, Inc. Agenda 実際に不安の要因に対してどう取り組ん でいくか 知⾒のない技術スタックを扱う不安にど う取り組むか テスト‧コード検査‧監視を武器に⽴ち向 かう

Slide 6

Slide 6 text

© - BASE, Inc. Agenda 実際に不安の要因に対してどう取り組ん でいくか 知⾒のない技術スタックを扱う不安にど う取り組むか テスト‧コード検査‧監視を武器に⽴ち向 かう

Slide 7

Slide 7 text

© - BASE, Inc. 学習コスト ⽋陥発⽣の抑制 プロダクション採⽤実績数 パフォーマンス エンジニアの採⽤ メンテナンス性 エンジニアのモチベーション etc チームでの運⽤実績 サービス性質との相性 技術選定をする際の様々な観点

Slide 8

Slide 8 text

© - BASE, Inc. 技術選定の判断軸 • 要件によってどの観点が重視されるかは 異なる • 考えうる判断軸で複数の選択肢を⽐較し 決断する必要がある • 結果的に、運⽤実績がない技術のほうが マッチしそうなケースもある

Slide 9

Slide 9 text

© - BASE, Inc. 運⽤実績の無さは意思決定に重くのしかかる 技術選定観点 ⾔語A ⾔語B ⾔語C パフォーマンス ○ ○ ◎ サービス性質との相性 △ ○ ◎ エンジニアの採⽤ ○ △ ○ チームでの運⽤実績 ◎ △ ×

Slide 10

Slide 10 text

知⾒のない技術スタックを プロダクション導⼊する https://unsplash.com/photos/Oh oxXi RQQ

Slide 11

Slide 11 text

© - BASE, Inc. 知⾒のない技術スタック • 例えば、運⽤実績のない⾔語‧フレーム ワーク • あるいはクラウド技術やアーキテクチャ • これらを導⼊する意思決定において、 「未知への不安」が重くのしかかる

Slide 12

Slide 12 text

© - BASE, Inc. 知⾒のない技術スタックを導⼊する不安 未知への不安、知⾒がないがゆえに尻込 みしてしまう 運⽤知⾒がないけど⼤ 丈夫か? それらしいコードが成 果物としてできるか? 不具合なくリリースで きるか? etc

Slide 13

Slide 13 text

© - BASE, Inc. 結果的に、フラットな意思決定から遠ざかってしまう 技術選定観点 ⾔語A ⾔語B ⾔語C パフォーマンス ○ ○ ◎ サービス性質との相性 △ ○ ◎ エンジニアの採⽤ ○ △ ○ チームでの運⽤実績 ◎ △ × >

Slide 14

Slide 14 text

© - BASE, Inc. この不安をさらに深堀りする 読みやすく変更しやす いコードにできる? 運⽤知⾒がないけど⼤ 丈夫か? それらしいコードが成 果物としてできるか? 不具合なくリリースで きるか? ⽋陥の少ないシステ ムにできる? etc 安定稼働するシステ ムが運⽤できるか?

Slide 15

Slide 15 text

© - BASE, Inc. この不安をさらに深堀りする 読みやすく変更しやすい システムにできる? 運⽤知⾒がないけど⼤ 丈夫か? それらしいコードが成 果物としてできるか? 不具合なくリリースで きるか? ⽋陥の少ないシステムにで きる? etc 安定して稼働するシステム が運⽤できるか? 将来の成果物の品質に対する不安

Slide 16

Slide 16 text

© - BASE, Inc. 品質の問題を分類する • 品質には外部品質と内部品質がある • 外部品質は、ユーザーから⾒える、外か ら⾒える品質‧価値 • 内部品質は、ユーザーから⾒えない、し かし⻑期のメンテナンス性に影響をもた らす

Slide 17

Slide 17 text

© - BASE, Inc. “External quality is how well the system meets the needs of its customers and users (is it functional, reliable, available, responsive, etc.), and internal quality is how well it meets the needs of its developers and administrators (is it easy to understand, easy to change, etc.).” “Freeman, Steve. Growing Object-Oriented Software, Guided by Tests” / Chapter . What Is the Point of Test-Driven Development? External and Internal Quality

Slide 18

Slide 18 text

© - BASE, Inc. 品質に対する不安を整理すると 読みやすく変更しやすい システムにできる? 運⽤知⾒がないけど⼤ 丈夫か? それらしいコードが成 果物としてできるか? 不具合なくリリースで きるか? ⽋陥の少ないシステムにで きる? etc 安定して稼働するシステム が運⽤できるか? 外部品質 内部品質

Slide 19

Slide 19 text

© - BASE, Inc. 内部品質への投資の損益分岐点 Martin Fowler “Is High Quality Software Worth the Cost?” https://martinfowler.com/articles/is-quality-worth-cost.html

Slide 20

Slide 20 text

© - BASE, Inc. 品質の不安にどう⽴ち向かう • いくらプライベートで学んだところで、 業務で開発しないとわからない壁はある • いわゆる「開発‧運⽤の知⾒」 • これらはやりながら知⾒を得てプロダク トに反映していくしか無い

Slide 21

Slide 21 text

いかに多く学び すぐに反映するか https://unsplash.com/photos/ fNmWej tAA

Slide 22

Slide 22 text

© - BASE, Inc. - Summary - 知⾒のない技術スタックを扱う不安にどう取り組むか • 不安の要因を品質問題に帰着、外部品質‧内部品 質と分けて捉える • “よりよい品質”を⽬指すための開発‧運⽤知⾒ を、動きながら学びシステムに反映する • この道筋が⾒えれば「運⽤実績の無さ」を重く捉 えすぎず、意思決定できるのではないか

Slide 23

Slide 23 text

© - BASE, Inc. Agenda 実際に不安の要因に対してどう取り組ん でいくか 知⾒のない技術スタックを扱う不安にど う取り組むか テスト‧監視‧コード検査を武器に⽴ち向 かう

Slide 24

Slide 24 text

© - BASE, Inc. このトークの舞台

Slide 25

Slide 25 text

© - BASE, Inc. Mission Payment to the People, Power to the People. ひとりひとりに眠る、想いが、感性が、才能が。 世界中の、必要な⼈に届くように。 そこから⽣まれる、作品に、アイデアに、活動に。 正当な対価を、受け取れるように。 ペイメントを、世界中の⼈へ解放する。 世界のすべての⼈に、 ⾃分の⼒を⾃由に価値へと変えて ⽣きていけるチャンスを。 あたらしい決済で、あなたらしい経済を。

Slide 26

Slide 26 text

© - BASE, Inc. Eコマースプラットフォーム「BASE」 ネットショップ作成サービス 「BASE(ベイス)」 ショッピングアプリ 「BASE(ベイス)」

Slide 27

Slide 27 text

© - BASE, Inc. ネットショップ作成サービス「BASE」 専⾨知識がなくても 無料で即座にネットショップを開設でき ます。 また個⼈でも、かんたん‧スピーディに 決済機能を導⼊できる仕組みを提供して います。 「誰でもかんたんに使える」サービスで ⾃分のネットショップを開設

Slide 28

Slide 28 text

© - BASE, Inc. 開設ショップ数の推移

Slide 29

Slide 29 text

© - BASE, Inc. オンライン決済サービス「PAY.JP」 ⽀払いのすべてをシンプルに WebαʔϏε΍ωοτγϣοϓʢ஫ʣʹΫ ϨδοτΧʔυܾࡁΛ؆୯ʹಋೖͰ͖Δ ։ൃऀ޲͚ͷΦϯϥΠϯܾࡁαʔϏεͰ ͢ɻ Θ͔Γ΍͍҆͘͢ྉۚମܥͱɺγϯϓϧͳ API΍๛෋ͳϥΠϒϥϦΛ࢖ͬͯɺεϜʔ ζʹܾࡁΛಋೖ͍͚ͨͩ·͢ɻ (注)BASEにより作成されたネットショップを除く

Slide 30

Slide 30 text

© - BASE, Inc. 資⾦調達サービス「YELL BANK」 「BASE」を利⽤するショップオー ナーが即時に資⾦調達できる⾦融サー ビス 将来債権が発⽣しないリスクや、将来 未回収リスクを「YELL BANK」が負 担するため、ショップオーナーはこれ らのリスク無く資⾦調達可能 資⾦調達をリスクなく、⼀瞬で。

Slide 31

Slide 31 text

© - BASE, Inc. 資⾦調達サービス「YELL BANK」 「BASE」を利⽤するショップオー ナーが即時に資⾦調達できる⾦融サー ビス 将来債権が発⽣しないリスクや、将来 未回収リスクを「YELL BANK」が負 担するため、ショップオーナーはこれ らのリスク無く資⾦調達可能 資⾦調達をリスクなく、⼀瞬で。 今回の題材はこちらのサービス開発

Slide 32

Slide 32 text

© - BASE, Inc. YELL BANK プロジェクト 概観 • 2018年12⽉ 初期リリース、約5ヶ⽉の開発 期間、2019年12⽉現在もサービス提供中 Director Server side engineer Designer SRE (初期リリース時の⼤まかな開発体制)

Slide 33

Slide 33 text

© - BASE, Inc. YELL BANKを取り巻く技術スタック概観 etc

Slide 34

Slide 34 text

⾛りながら学び 改善していく https://unsplash.com/photos/V UrdknDCA

Slide 35

Slide 35 text

いかに現場の知⾒を 得るか https://unsplash.com/photos/QchJkuTGxJQ

Slide 36

Slide 36 text

© - BASE, Inc. いかに現場の知⾒を得るか • 無戦略で “なんとなく” やっていても、 得られるものは少ない • 多くの知⾒を得て、サービスに反映させ るための導⼊戦略を考える

Slide 37

Slide 37 text

© - BASE, Inc. 学びのサイクル ⻄尾 泰和. エンジニアの知的⽣産術 効率的に学び、整理し、アウトプットする 第1章 新しいことを学ぶには 応⽤ 具体 抽象 情報収集 体験 実践 検証 抽象化‧モデル化‧パターンの発⾒

Slide 38

Slide 38 text

© - BASE, Inc. 学びのサイクル ⻄尾 泰和. エンジニアの知的⽣産術 効率的に学び、整理し、アウトプットする 第1章 新しいことを学ぶには 応⽤ 具体 抽象 情報収集 体験 実践 検証 抽象化‧モデル化‧パターンの発⾒ 多く学び すぐ反映

Slide 39

Slide 39 text

© - BASE, Inc. “きちんと観察すれば、いろいろ⾒ えるものだ.” https://en.wikipedia.org/wiki/Yogi_Berra - Yogi Berra -

Slide 40

Slide 40 text

© - BASE, Inc. 観察して経験から得られる気づきを増やす 外部品質 内部品質

Slide 41

Slide 41 text

© - BASE, Inc. 観察して経験から得られる気づきを増やす 外部品質 内部品質 テスト 監視 コード検査

Slide 42

Slide 42 text

© - BASE, Inc. - Summary - 実際に不安の要因に対してどう取り組んでいくか • 学びのサイクルを、⾛りながら観察し ていくことで、早めていく • 情報収集の武器として、テストとコー ド検査、監視からフィードバックを得 て、学びを反映していく

Slide 43

Slide 43 text

© - BASE, Inc. Agenda 実際に不安の要因に対してどう取り組ん でいくか 知⾒のない技術スタックを扱う不安にど う取り組むか テスト‧コード検査‧監視を武器に⽴ち向 かう

Slide 44

Slide 44 text

© - BASE, Inc. 観察して経験から得られる気づきを増やす 外部品質 内部品質 テスト 監視 コード検査

Slide 45

Slide 45 text

© - BASE, Inc. テストを⾍眼鏡として使う • コード設計のリトマス試験紙 • 勇敢なリファクタリングの盾

Slide 46

Slide 46 text

© - BASE, Inc. • コード設計のリトマス試験紙 • 勇敢なリファクタリングの盾 テストを⾍眼鏡として使う

Slide 47

Slide 47 text

© - BASE, Inc. “良い設計はテスト可能であり、テスト可 能でない設計は悪い設計である” マイケル‧C‧フェザーズ. レガシーコード改善ガイド 第10章 このメソッドをテストハーネスで動かすことができません

Slide 48

Slide 48 text

© - BASE, Inc. テストコードを書くことで気づく • 悪いコード設計をした場合、内部品質に 影響を与える • テストは⽋陥を防ぐ⽤途に⽬が向きがち だが、それだけではない • テストコードを設計道具として使う、設 計に対するフィードバックを得る

Slide 49

Slide 49 text

© - BASE, Inc. テストを書くことで気づけるフィードバック例 APIなど外部環境などに極度に依存している 過責務なモジュールとなっているコード設計 etc 依存関係を差し替え不可なコード設計 Untestableなビジネスロジック

Slide 50

Slide 50 text

© - BASE, Inc. テストを書くことで内部品質に気づく • テストコードを書くことで、コード設計の良し悪 しを体験する • その体験から、当該技術において内部品質のより ⾼いコード設計を⽬指す気づきを得る • 今回の例では、「Goにおけるテスタブルなコード 設計」を体験‧抽象化‧実践していた

Slide 51

Slide 51 text

© - BASE, Inc. @see TDDでテストを設計道具として使う https://speakerdeck.com/hgsgtk/test-driven-development-to-avoid-test-painful

Slide 52

Slide 52 text

© - BASE, Inc. • コード設計のリトマス試験紙 • 勇敢なリファクタリングの盾 テストを⾍眼鏡として使う

Slide 53

Slide 53 text

© - BASE, Inc. “リファクタリングとは、ソフトウェアの外部の振る 舞いを保ったままで、 内部の構造を改善していく作 業を指します。 ⾮常に統制された⽅法でコードを洗 練していくため、 バグの⼊り込む余地はほとんどあ りません。 リファクタリングを⾏えば、以前に書い たコードの設計が向上することになります。” MartinFowler. 新装版 リファクタリング 既存のコードを安全に改善する / はじめに

Slide 54

Slide 54 text

© - BASE, Inc. “リファクタリングを開始するとき、最初にすること は常に同じです。対象となるコードについてきちん としたテスト群を作りあげることです。” MartinFowler. 新装版 リファクタリング 既存のコードを安全に改善する / リファクタリングの第⼀歩

Slide 55

Slide 55 text

© - BASE, Inc. 勇敢なリファクタリングな盾 • 運⽤実績無い場合、メンテナンス性を本当に意 識したコードを書く機会はほぼなかったはず • ⾃分の書いたコードは、必ずリファクタリング される • テストコードを盾に、⾃分たちが経験し抽象化 したアイデアを、即座に実践して改善していく

Slide 56

Slide 56 text

© - BASE, Inc. 損益分岐点の到達はリリース前に訪れる Martin Fowler “Is High Quality Software Worth the Cost?” https://martinfowler.com/articles/is-quality-worth-cost.html

Slide 57

Slide 57 text

© - BASE, Inc. @see Goを⽤いたプロジェクトでの実例 https://speakerdeck.com/hgsgtk/building-api-server-side-architecture-for-beginners

Slide 58

Slide 58 text

© - BASE, Inc. 観察して経験から得られる気づきを増やす 外部品質 内部品質 テスト 監視 コード検査

Slide 59

Slide 59 text

© - BASE, Inc. その技術の標準的なやり⽅は? • ⾔語をプロダクションでやり始める不安 は、「XXXらしいコードになっているだ ろうか」という点 • そうなっていない場合、後続のエンジニ アが⼤いに⼾惑ってしまう可読性の悪い コードになりうる

Slide 60

Slide 60 text

© - BASE, Inc. 標準を指導する教師役 • 各⾔語、その⾔語圏での標準的な書き⽅に矯正す るコードフォーマッターやコード検査ツールがあ る • それに従うことで、その⾔語らしい書き⽅を⾝に つけ、守る • また、静的解析などを活⽤し、コードを動かさな くても分かる⽋陥を防ぐ

Slide 61

Slide 61 text

© - BASE, Inc. @see Pythonを⽤いたプロジェクトでの実例 https://speakerdeck.com/hgsgtk/python-api-ci-test

Slide 62

Slide 62 text

© - BASE, Inc. 観察して経験から得られる気づきを増やす 外部品質 内部品質 テスト 監視 コード検査

Slide 63

Slide 63 text

© - BASE, Inc. 安定運⽤への懸念事項 • 動かし続けないとわからないことがある • リリースと同時、あるいは直前から動か し始めるのでは、気がつけない落とし⽳ があるかもしれない

Slide 64

Slide 64 text

© - BASE, Inc. 動き続けることをシミュレーションするために • プロジェクト早期からデプロイする • 稼働状態を監視し続けておく • 外形監視 • メトリクス計測

Slide 65

Slide 65 text

© - BASE, Inc. 早期にデプロイすることで気がついた例 • リリース前のアプリケーションに対して外形監視 を⾏っていた • 突然、アプリケーションからデータベースへの疎 通確認が途切れる事象が⾒受けられた • Goを使った⼀般的なデータベースアクセスの⼀つ として、sql/databaseパッケージを⽤いて connection poolingを⾏う⽅法がある • 結論として、アプリケーションに与えるべき設定 が不⾜していたことがわかった

Slide 66

Slide 66 text

© - BASE, Inc. @see 詳細はこちらをご覧ください https://qiita.com/hgsgtk/items/ c f b da f

Slide 67

Slide 67 text

© - BASE, Inc. “計測する必要がありそうな箇所はたくさんあります が、⼿をつけるのに最適な場所があります。それは ユーザーです” - ⼊⾨監視 / 2章 監視のデザインパターン - https://www.oreilly.co.jp/books/ /

Slide 68

Slide 68 text

© - BASE, Inc. どこから着⼿するか • やろうと思えばいくらでも出来るが、現 実的には時間の制約がある • できるだけユーザーに近いところから監 視を始める • 最低限アプリケーションが提供可能な状 態かどうか(Readiness)

Slide 69

Slide 69 text

© - BASE, Inc. 早期にデプロイした副次効果 • 早期にデプロイしたことによって、必然的にアプ リケーションは運⽤を意識する • 監視⽅法、ログや設定情報の扱いの必要性を体験 する • ⼀般化されたパターンと⾃⾝のアプリケーション を照らし合せて実践するようになる

Slide 70

Slide 70 text

© - BASE, Inc. @see コンテナを使う場合のアプリケーション設計 https://speakerdeck.com/hgsgtk/design-considerations-for-container-based-go-application

Slide 71

Slide 71 text

© - BASE, Inc. - Summary - テスト‧コード検査‧監視を武器に⽴ち向かう • テスト‧コード検査‧監視を⾏うこと によって得られる体験‧フィードバッ クを活⽤する • 得られたフィードバックをサービスに 反映することで、⾛りながら学び改善 する

Slide 72

Slide 72 text

© - BASE, Inc. まとめ

Slide 73

Slide 73 text

© - BASE, Inc. まとめ • 知⾒のない、つまり運⽤実績のないことが、技 術選定の意思決定において、重しになりうる • 運⽤実績のないものを、いかにスピーディーに 学び品質を上げるか、⼀つの体験から得たアイ デアを説明しました

Slide 74

Slide 74 text

© - BASE, Inc. フラットな意思決定に近づけるのではないか 技術選定観点 ⾔語A ⾔語B ⾔語C パフォーマンス ○ ○ ◎ サービス性質との相性 △ ○ ◎ エンジニアの採⽤ ○ △ ○ チームでの運⽤実績 ◎ △ × <

Slide 75

Slide 75 text

© - BASE, Inc. “「たいていのチャンスのドアにはノブが無 い」と‧‧‧ ⾃分からは開けられない だれかが開けてくれたときに迷わず⾶び込んで いけるかどうか そこで⼒を出せるかどうか” - ちはやふる 23巻 第百⼆⼗⼀⾸ - https://www.amazon.co.jp/dp/B J TVQQ

Slide 76

Slide 76 text

© - BASE, Inc. Be Hopeful 楽観的でいること。 期待した未来は実現すると信じて、 勇気ある選択をしよう。 https://binc.jp/jobs - BASE ⾏動指針のひとつより -

Slide 77

Slide 77 text

© - BASE, Inc. Beyond your XXX

Slide 78

Slide 78 text

https://devblog.thebase.in/entry/ / / / アドベントカレンダーやります!

Slide 79

Slide 79 text

ブースでお待ちしています

Slide 80

Slide 80 text

© - BASE, Inc. X