Upgrade to Pro — share decks privately, control downloads, hide ads and more …

知見のない技術スタックをプロダクション導入するエンジニアの導入戦略 / A strategy ...

知見のない技術スタックをプロダクション導入するエンジニアの導入戦略 / A strategy to choice no knowledge technology

PHPカンファレンス2019にて発表する資料です。知見のない技術スタックを扱おうと検討した際に重くのしかかる「運用実績のない」という事実にどう向き合うかという説明をしています。

Kazuki Higashiguchi

December 01, 2019
Tweet

More Decks by Kazuki Higashiguchi

Other Decks in Technology

Transcript

  1. © - BASE, Inc. 本⽇お話すること • 技術選定の意思決定の不安の⼀要因を和 らげる導⼊戦略 • 開発‧運⽤の知⾒を得て改善する、

    フィードバックループをいかに回すか • テストとコード検査、監視を武器に不安 と⽴ち向かう
  2. © - BASE, Inc. About me BASE BANK, Inc. Dev

    Division Tech Lead 『みんなのPHP 現場で役⽴つ最新 ノウハウ!』共著者 (PHPにおけるユニットテスト) https://www.amazon.co.jp/ gp/product/ @hgsgtk Kazuki Higashiguchi
  3. © - BASE, Inc. 学習コスト ⽋陥発⽣の抑制 プロダクション採⽤実績数 パフォーマンス エンジニアの採⽤ メンテナンス性

    エンジニアのモチベーション etc チームでの運⽤実績 サービス性質との相性 技術選定をする際の様々な観点
  4. © - BASE, Inc. 技術選定の判断軸 • 要件によってどの観点が重視されるかは 異なる • 考えうる判断軸で複数の選択肢を⽐較し

    決断する必要がある • 結果的に、運⽤実績がない技術のほうが マッチしそうなケースもある
  5. © - BASE, Inc. 運⽤実績の無さは意思決定に重くのしかかる 技術選定観点 ⾔語A ⾔語B ⾔語C パフォーマンス

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

    ◦ ◦ ◎ サービス性質との相性 △ ◦ ◎ エンジニアの採⽤ ◦ △ ◦ チームでの運⽤実績 ◎ △ × >
  7. © - BASE, Inc. この不安をさらに深堀りする 読みやすく変更しやす いコードにできる? 運⽤知⾒がないけど⼤ 丈夫か? それらしいコードが成

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

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

    果物としてできるか? 不具合なくリリースで きるか? ⽋陥の少ないシステムにで きる? etc 安定して稼働するシステム が運⽤できるか? 外部品質 内部品質
  11. © - BASE, Inc. 内部品質への投資の損益分岐点 Martin Fowler “Is High Quality

    Software Worth the Cost?” https://martinfowler.com/articles/is-quality-worth-cost.html
  12. © - BASE, Inc. - Summary - 知⾒のない技術スタックを扱う不安にどう取り組むか • 不安の要因を品質問題に帰着、外部品質‧内部品

    質と分けて捉える • “よりよい品質”を⽬指すための開発‧運⽤知⾒ を、動きながら学びシステムに反映する • この道筋が⾒えれば「運⽤実績の無さ」を重く捉 えすぎず、意思決定できるのではないか
  13. © - BASE, Inc. Mission Payment to the People, Power

    to the People. ひとりひとりに眠る、想いが、感性が、才能が。 世界中の、必要な⼈に届くように。 そこから⽣まれる、作品に、アイデアに、活動に。 正当な対価を、受け取れるように。 ペイメントを、世界中の⼈へ解放する。 世界のすべての⼈に、 ⾃分の⼒を⾃由に価値へと変えて ⽣きていけるチャンスを。 あたらしい決済で、あなたらしい経済を。
  14. © - BASE, Inc. オンライン決済サービス「PAY.JP」 ⽀払いのすべてをシンプルに WebαʔϏε΍ωοτγϣοϓʢ஫ʣʹΫ ϨδοτΧʔυܾࡁΛ؆୯ʹಋೖͰ͖Δ ։ൃऀ޲͚ͷΦϯϥΠϯܾࡁαʔϏεͰ ͢ɻ

    Θ͔Γ΍͍҆͘͢ྉۚମܥͱɺγϯϓϧͳ API΍๛෋ͳϥΠϒϥϦΛ࢖ͬͯɺεϜʔ ζʹܾࡁΛಋೖ͍͚ͨͩ·͢ɻ (注)BASEにより作成されたネットショップを除く
  15. © - BASE, Inc. 資⾦調達サービス「YELL BANK」 「BASE」を利⽤するショップオー ナーが即時に資⾦調達できる⾦融サー ビス 将来債権が発⽣しないリスクや、将来

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

    未回収リスクを「YELL BANK」が負 担するため、ショップオーナーはこれ らのリスク無く資⾦調達可能 資⾦調達をリスクなく、⼀瞬で。 今回の題材はこちらのサービス開発
  17. © - BASE, Inc. YELL BANK プロジェクト 概観 • 2018年12⽉

    初期リリース、約5ヶ⽉の開発 期間、2019年12⽉現在もサービス提供中 Director Server side engineer Designer SRE (初期リリース時の⼤まかな開発体制)
  18. © - BASE, Inc. いかに現場の知⾒を得るか • 無戦略で “なんとなく” やっていても、 得られるものは少ない

    • 多くの知⾒を得て、サービスに反映させ るための導⼊戦略を考える
  19. © - BASE, Inc. 学びのサイクル ⻄尾 泰和. エンジニアの知的⽣産術 効率的に学び、整理し、アウトプットする 第1章

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

    新しいことを学ぶには 応⽤ 具体 抽象 情報収集 体験 実践 検証 抽象化‧モデル化‧パターンの発⾒ 多く学び すぐ反映
  21. © - BASE, Inc. - Summary - 実際に不安の要因に対してどう取り組んでいくか • 学びのサイクルを、⾛りながら観察し

    ていくことで、早めていく • 情報収集の武器として、テストとコー ド検査、監視からフィードバックを得 て、学びを反映していく
  22. © - BASE, Inc. テストコードを書くことで気づく • 悪いコード設計をした場合、内部品質に 影響を与える • テストは⽋陥を防ぐ⽤途に⽬が向きがち

    だが、それだけではない • テストコードを設計道具として使う、設 計に対するフィードバックを得る
  23. © - BASE, Inc. テストを書くことで内部品質に気づく • テストコードを書くことで、コード設計の良し悪 しを体験する • その体験から、当該技術において内部品質のより

    ⾼いコード設計を⽬指す気づきを得る • 今回の例では、「Goにおけるテスタブルなコード 設計」を体験‧抽象化‧実践していた
  24. © - BASE, Inc. “リファクタリングとは、ソフトウェアの外部の振る 舞いを保ったままで、 内部の構造を改善していく作 業を指します。 ⾮常に統制された⽅法でコードを洗 練していくため、

    バグの⼊り込む余地はほとんどあ りません。 リファクタリングを⾏えば、以前に書い たコードの設計が向上することになります。” MartinFowler. 新装版 リファクタリング 既存のコードを安全に改善する / はじめに
  25. © - BASE, Inc. 損益分岐点の到達はリリース前に訪れる Martin Fowler “Is High Quality

    Software Worth the Cost?” https://martinfowler.com/articles/is-quality-worth-cost.html
  26. © - BASE, Inc. その技術の標準的なやり⽅は? • ⾔語をプロダクションでやり始める不安 は、「XXXらしいコードになっているだ ろうか」という点 •

    そうなっていない場合、後続のエンジニ アが⼤いに⼾惑ってしまう可読性の悪い コードになりうる
  27. © - BASE, Inc. 標準を指導する教師役 • 各⾔語、その⾔語圏での標準的な書き⽅に矯正す るコードフォーマッターやコード検査ツールがあ る •

    それに従うことで、その⾔語らしい書き⽅を⾝に つけ、守る • また、静的解析などを活⽤し、コードを動かさな くても分かる⽋陥を防ぐ
  28. © - BASE, Inc. 早期にデプロイすることで気がついた例 • リリース前のアプリケーションに対して外形監視 を⾏っていた • 突然、アプリケーションからデータベースへの疎

    通確認が途切れる事象が⾒受けられた • Goを使った⼀般的なデータベースアクセスの⼀つ として、sql/databaseパッケージを⽤いて connection poolingを⾏う⽅法がある • 結論として、アプリケーションに与えるべき設定 が不⾜していたことがわかった
  29. © - BASE, Inc. - Summary - テスト‧コード検査‧監視を武器に⽴ち向かう • テスト‧コード検査‧監視を⾏うこと

    によって得られる体験‧フィードバッ クを活⽤する • 得られたフィードバックをサービスに 反映することで、⾛りながら学び改善 する
  30. © - BASE, Inc. フラットな意思決定に近づけるのではないか 技術選定観点 ⾔語A ⾔語B ⾔語C パフォーマンス

    ◦ ◦ ◎ サービス性質との相性 △ ◦ ◎ エンジニアの採⽤ ◦ △ ◦ チームでの運⽤実績 ◎ △ × <