PHPカンファレンス2019にて発表する資料です。知見のない技術スタックを扱おうと検討した際に重くのしかかる「運用実績のない」という事実にどう向き合うかという説明をしています。
© - BASE, Inc. X知⾒のない技術スタックをプロダクション導⼊するエンジニアの導⼊戦略. . - Japan PHP Conference@hgsgtk
View Slide
© - BASE, Inc.本⽇お話すること• 技術選定の意思決定の不安の⼀要因を和らげる導⼊戦略• 開発‧運⽤の知⾒を得て改善する、フィードバックループをいかに回すか• テストとコード検査、監視を武器に不安と⽴ち向かう
© - BASE, Inc.※ 本⽇話す背景となる題材• BASEにおける新規事業にて、既存サービスで運⽤経験のなかったプログラミング⾔語(Go)を⽤いたシステム開発を⾏いました• この経験を⼀般化したため、サーバーサイドのレイヤに焦点を当てて話します
© - BASE, Inc.About meBASE BANK, Inc. Dev DivisionTech Lead『みんなのPHP 現場で役⽴つ最新ノウハウ!』共著者(PHPにおけるユニットテスト) https://www.amazon.co.jp/gp/product/@hgsgtkKazuki Higashiguchi
© - BASE, Inc.Agenda実際に不安の要因に対してどう取り組んでいくか知⾒のない技術スタックを扱う不安にどう取り組むかテスト‧コード検査‧監視を武器に⽴ち向かう
© - BASE, Inc.学習コスト⽋陥発⽣の抑制プロダクション採⽤実績数パフォーマンスエンジニアの採⽤メンテナンス性エンジニアのモチベーションetcチームでの運⽤実績サービス性質との相性技術選定をする際の様々な観点
© - BASE, Inc.技術選定の判断軸• 要件によってどの観点が重視されるかは異なる• 考えうる判断軸で複数の選択肢を⽐較し決断する必要がある• 結果的に、運⽤実績がない技術のほうがマッチしそうなケースもある
© - BASE, Inc.運⽤実績の無さは意思決定に重くのしかかる技術選定観点 ⾔語A ⾔語B ⾔語Cパフォーマンス○ ○ ◎サービス性質との相性△ ○ ◎エンジニアの採⽤○ △ ○チームでの運⽤実績◎ △ ×
知⾒のない技術スタックをプロダクション導⼊するhttps://unsplash.com/photos/Oh oxXi RQQ
© - BASE, Inc.知⾒のない技術スタック• 例えば、運⽤実績のない⾔語‧フレームワーク• あるいはクラウド技術やアーキテクチャ• これらを導⼊する意思決定において、「未知への不安」が重くのしかかる
© - BASE, Inc.知⾒のない技術スタックを導⼊する不安未知への不安、知⾒がないがゆえに尻込みしてしまう運⽤知⾒がないけど⼤丈夫か?それらしいコードが成果物としてできるか?不具合なくリリースできるか?etc
© - BASE, Inc.結果的に、フラットな意思決定から遠ざかってしまう技術選定観点 ⾔語A ⾔語B ⾔語Cパフォーマンス○ ○ ◎サービス性質との相性△ ○ ◎エンジニアの採⽤○ △ ○チームでの運⽤実績◎ △ ×>
© - BASE, Inc.この不安をさらに深堀りする読みやすく変更しやすいコードにできる?運⽤知⾒がないけど⼤丈夫か?それらしいコードが成果物としてできるか?不具合なくリリースできるか?⽋陥の少ないシステムにできる?etc安定稼働するシステムが運⽤できるか?
© - BASE, Inc.この不安をさらに深堀りする読みやすく変更しやすいシステムにできる?運⽤知⾒がないけど⼤丈夫か?それらしいコードが成果物としてできるか?不具合なくリリースできるか?⽋陥の少ないシステムにできる?etc安定して稼働するシステムが運⽤できるか?将来の成果物の品質に対する不安
© - BASE, Inc.品質の問題を分類する• 品質には外部品質と内部品質がある• 外部品質は、ユーザーから⾒える、外から⾒える品質‧価値• 内部品質は、ユーザーから⾒えない、しかし⻑期のメンテナンス性に影響をもたらす
© - BASE, Inc.“External quality is how well the system meets theneeds of its customers and users (is it functional,reliable, available, responsive, etc.),and internal quality is how well it meets the needs of itsdevelopers 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
© - BASE, Inc.品質に対する不安を整理すると読みやすく変更しやすいシステムにできる?運⽤知⾒がないけど⼤丈夫か?それらしいコードが成果物としてできるか?不具合なくリリースできるか?⽋陥の少ないシステムにできる?etc安定して稼働するシステムが運⽤できるか?外部品質内部品質
© - BASE, Inc.内部品質への投資の損益分岐点Martin Fowler “Is High Quality Software Worth the Cost?”https://martinfowler.com/articles/is-quality-worth-cost.html
© - BASE, Inc.品質の不安にどう⽴ち向かう• いくらプライベートで学んだところで、業務で開発しないとわからない壁はある• いわゆる「開発‧運⽤の知⾒」• これらはやりながら知⾒を得てプロダクトに反映していくしか無い
いかに多く学びすぐに反映するかhttps://unsplash.com/photos/ fNmWej tAA
© - BASE, Inc.- Summary -知⾒のない技術スタックを扱う不安にどう取り組むか• 不安の要因を品質問題に帰着、外部品質‧内部品質と分けて捉える• “よりよい品質”を⽬指すための開発‧運⽤知⾒を、動きながら学びシステムに反映する• この道筋が⾒えれば「運⽤実績の無さ」を重く捉えすぎず、意思決定できるのではないか
© - BASE, Inc.Agenda実際に不安の要因に対してどう取り組んでいくか知⾒のない技術スタックを扱う不安にどう取り組むかテスト‧監視‧コード検査を武器に⽴ち向かう
© - BASE, Inc.このトークの舞台
© - BASE, Inc.MissionPayment to the People,Power to the People.ひとりひとりに眠る、想いが、感性が、才能が。世界中の、必要な⼈に届くように。そこから⽣まれる、作品に、アイデアに、活動に。正当な対価を、受け取れるように。ペイメントを、世界中の⼈へ解放する。世界のすべての⼈に、⾃分の⼒を⾃由に価値へと変えて⽣きていけるチャンスを。あたらしい決済で、あなたらしい経済を。
© - BASE, Inc.Eコマースプラットフォーム「BASE」ネットショップ作成サービス「BASE(ベイス)」ショッピングアプリ「BASE(ベイス)」
© - BASE, Inc.ネットショップ作成サービス「BASE」専⾨知識がなくても無料で即座にネットショップを開設できます。また個⼈でも、かんたん‧スピーディに決済機能を導⼊できる仕組みを提供しています。「誰でもかんたんに使える」サービスで⾃分のネットショップを開設
© - BASE, Inc.開設ショップ数の推移
© - BASE, Inc.オンライン決済サービス「PAY.JP」⽀払いのすべてをシンプルにWebαʔϏεωοτγϣοϓʢʣʹΫϨδοτΧʔυܾࡁΛ؆୯ʹಋೖͰ͖Δ։ൃऀ͚ͷΦϯϥΠϯܾࡁαʔϏεͰ͢ɻΘ͔Γ͍҆͘͢ྉۚମܥͱɺγϯϓϧͳAPI๛ͳϥΠϒϥϦΛͬͯɺεϜʔζʹܾࡁΛಋೖ͍͚ͨͩ·͢ɻ(注)BASEにより作成されたネットショップを除く
© - BASE, Inc.資⾦調達サービス「YELL BANK」「BASE」を利⽤するショップオーナーが即時に資⾦調達できる⾦融サービス将来債権が発⽣しないリスクや、将来未回収リスクを「YELL BANK」が負担するため、ショップオーナーはこれらのリスク無く資⾦調達可能資⾦調達をリスクなく、⼀瞬で。
© - BASE, Inc.資⾦調達サービス「YELL BANK」「BASE」を利⽤するショップオーナーが即時に資⾦調達できる⾦融サービス将来債権が発⽣しないリスクや、将来未回収リスクを「YELL BANK」が負担するため、ショップオーナーはこれらのリスク無く資⾦調達可能資⾦調達をリスクなく、⼀瞬で。今回の題材はこちらのサービス開発
© - BASE, Inc.YELL BANK プロジェクト 概観• 2018年12⽉ 初期リリース、約5ヶ⽉の開発期間、2019年12⽉現在もサービス提供中DirectorServer side engineerDesignerSRE(初期リリース時の⼤まかな開発体制)
© - BASE, Inc.YELL BANKを取り巻く技術スタック概観etc
⾛りながら学び改善していくhttps://unsplash.com/photos/V UrdknDCA
いかに現場の知⾒を得るかhttps://unsplash.com/photos/QchJkuTGxJQ
© - BASE, Inc.いかに現場の知⾒を得るか• 無戦略で “なんとなく” やっていても、得られるものは少ない• 多くの知⾒を得て、サービスに反映させるための導⼊戦略を考える
© - BASE, Inc.学びのサイクル⻄尾 泰和. エンジニアの知的⽣産術 効率的に学び、整理し、アウトプットする第1章 新しいことを学ぶには応⽤ 具体抽象情報収集体験実践検証抽象化‧モデル化‧パターンの発⾒
© - BASE, Inc.学びのサイクル⻄尾 泰和. エンジニアの知的⽣産術 効率的に学び、整理し、アウトプットする第1章 新しいことを学ぶには応⽤ 具体抽象情報収集体験実践検証抽象化‧モデル化‧パターンの発⾒多く学びすぐ反映
© - BASE, Inc.“きちんと観察すれば、いろいろ⾒えるものだ.”https://en.wikipedia.org/wiki/Yogi_Berra- Yogi Berra -
© - BASE, Inc.観察して経験から得られる気づきを増やす外部品質内部品質
© - BASE, Inc.観察して経験から得られる気づきを増やす外部品質内部品質テスト監視コード検査
© - BASE, Inc.- Summary -実際に不安の要因に対してどう取り組んでいくか• 学びのサイクルを、⾛りながら観察していくことで、早めていく• 情報収集の武器として、テストとコード検査、監視からフィードバックを得て、学びを反映していく
© - BASE, Inc.テストを⾍眼鏡として使う• コード設計のリトマス試験紙• 勇敢なリファクタリングの盾
© - BASE, Inc.• コード設計のリトマス試験紙• 勇敢なリファクタリングの盾テストを⾍眼鏡として使う
© - BASE, Inc.“良い設計はテスト可能であり、テスト可能でない設計は悪い設計である”マイケル‧C‧フェザーズ. レガシーコード改善ガイド第10章 このメソッドをテストハーネスで動かすことができません
© - BASE, Inc.テストコードを書くことで気づく• 悪いコード設計をした場合、内部品質に影響を与える• テストは⽋陥を防ぐ⽤途に⽬が向きがちだが、それだけではない• テストコードを設計道具として使う、設計に対するフィードバックを得る
© - BASE, Inc.テストを書くことで気づけるフィードバック例APIなど外部環境などに極度に依存している過責務なモジュールとなっているコード設計etc依存関係を差し替え不可なコード設計Untestableなビジネスロジック
© - BASE, Inc.テストを書くことで内部品質に気づく• テストコードを書くことで、コード設計の良し悪しを体験する• その体験から、当該技術において内部品質のより⾼いコード設計を⽬指す気づきを得る• 今回の例では、「Goにおけるテスタブルなコード設計」を体験‧抽象化‧実践していた
© - BASE, Inc.@see TDDでテストを設計道具として使うhttps://speakerdeck.com/hgsgtk/test-driven-development-to-avoid-test-painful
© - BASE, Inc.“リファクタリングとは、ソフトウェアの外部の振る舞いを保ったままで、 内部の構造を改善していく作業を指します。 ⾮常に統制された⽅法でコードを洗練していくため、 バグの⼊り込む余地はほとんどありません。 リファクタリングを⾏えば、以前に書いたコードの設計が向上することになります。”MartinFowler. 新装版 リファクタリング 既存のコードを安全に改善する/ はじめに
© - BASE, Inc.“リファクタリングを開始するとき、最初にすることは常に同じです。対象となるコードについてきちんとしたテスト群を作りあげることです。”MartinFowler. 新装版 リファクタリング 既存のコードを安全に改善する/ リファクタリングの第⼀歩
© - BASE, Inc.勇敢なリファクタリングな盾• 運⽤実績無い場合、メンテナンス性を本当に意識したコードを書く機会はほぼなかったはず• ⾃分の書いたコードは、必ずリファクタリングされる• テストコードを盾に、⾃分たちが経験し抽象化したアイデアを、即座に実践して改善していく
© - BASE, Inc.損益分岐点の到達はリリース前に訪れるMartin Fowler “Is High Quality Software Worth the Cost?”https://martinfowler.com/articles/is-quality-worth-cost.html
© - BASE, Inc.@see Goを⽤いたプロジェクトでの実例https://speakerdeck.com/hgsgtk/building-api-server-side-architecture-for-beginners
© - BASE, Inc.その技術の標準的なやり⽅は?• ⾔語をプロダクションでやり始める不安は、「XXXらしいコードになっているだろうか」という点• そうなっていない場合、後続のエンジニアが⼤いに⼾惑ってしまう可読性の悪いコードになりうる
© - BASE, Inc.標準を指導する教師役• 各⾔語、その⾔語圏での標準的な書き⽅に矯正するコードフォーマッターやコード検査ツールがある• それに従うことで、その⾔語らしい書き⽅を⾝につけ、守る• また、静的解析などを活⽤し、コードを動かさなくても分かる⽋陥を防ぐ
© - BASE, Inc.@see Pythonを⽤いたプロジェクトでの実例https://speakerdeck.com/hgsgtk/python-api-ci-test
© - BASE, Inc.安定運⽤への懸念事項• 動かし続けないとわからないことがある• リリースと同時、あるいは直前から動かし始めるのでは、気がつけない落とし⽳があるかもしれない
© - BASE, Inc.動き続けることをシミュレーションするために• プロジェクト早期からデプロイする• 稼働状態を監視し続けておく• 外形監視• メトリクス計測
© - BASE, Inc.早期にデプロイすることで気がついた例• リリース前のアプリケーションに対して外形監視を⾏っていた• 突然、アプリケーションからデータベースへの疎通確認が途切れる事象が⾒受けられた• Goを使った⼀般的なデータベースアクセスの⼀つとして、sql/databaseパッケージを⽤いてconnection poolingを⾏う⽅法がある• 結論として、アプリケーションに与えるべき設定が不⾜していたことがわかった
© - BASE, Inc.@see 詳細はこちらをご覧くださいhttps://qiita.com/hgsgtk/items/ c f b da f
© - BASE, Inc.“計測する必要がありそうな箇所はたくさんありますが、⼿をつけるのに最適な場所があります。それはユーザーです”- ⼊⾨監視 / 2章 監視のデザインパターン -https://www.oreilly.co.jp/books/ /
© - BASE, Inc.どこから着⼿するか• やろうと思えばいくらでも出来るが、現実的には時間の制約がある• できるだけユーザーに近いところから監視を始める• 最低限アプリケーションが提供可能な状態かどうか(Readiness)
© - BASE, Inc.早期にデプロイした副次効果• 早期にデプロイしたことによって、必然的にアプリケーションは運⽤を意識する• 監視⽅法、ログや設定情報の扱いの必要性を体験する• ⼀般化されたパターンと⾃⾝のアプリケーションを照らし合せて実践するようになる
© - BASE, Inc.@see コンテナを使う場合のアプリケーション設計https://speakerdeck.com/hgsgtk/design-considerations-for-container-based-go-application
© - BASE, Inc.- Summary -テスト‧コード検査‧監視を武器に⽴ち向かう• テスト‧コード検査‧監視を⾏うことによって得られる体験‧フィードバックを活⽤する• 得られたフィードバックをサービスに反映することで、⾛りながら学び改善する
© - BASE, Inc.まとめ
© - BASE, Inc.まとめ• 知⾒のない、つまり運⽤実績のないことが、技術選定の意思決定において、重しになりうる• 運⽤実績のないものを、いかにスピーディーに学び品質を上げるか、⼀つの体験から得たアイデアを説明しました
© - BASE, Inc.フラットな意思決定に近づけるのではないか技術選定観点 ⾔語A ⾔語B ⾔語Cパフォーマンス○ ○ ◎サービス性質との相性△ ○ ◎エンジニアの採⽤○ △ ○チームでの運⽤実績◎ △ ×<
© - BASE, Inc.“「たいていのチャンスのドアにはノブが無い」と‧‧‧⾃分からは開けられないだれかが開けてくれたときに迷わず⾶び込んでいけるかどうかそこで⼒を出せるかどうか”- ちはやふる 23巻 第百⼆⼗⼀⾸ -https://www.amazon.co.jp/dp/B J TVQQ
© - BASE, Inc.Be Hopeful楽観的でいること。期待した未来は実現すると信じて、勇気ある選択をしよう。https://binc.jp/jobs- BASE ⾏動指針のひとつより -
© - BASE, Inc.Beyond your XXX
https://devblog.thebase.in/entry/ / / /アドベントカレンダーやります!
ブースでお待ちしています
© - BASE, Inc. X