AWS_Lambda_にCustom_Runtimeで_PHPを導入したシステムに改修を加えて_UT導入まで行った話.pdf

 AWS_Lambda_にCustom_Runtimeで_PHPを導入したシステムに改修を加えて_UT導入まで行った話.pdf

188fa094614c1d9ec7dd01d4c568e4ca?s=128

mashirou1234

February 10, 2020
Tweet

Transcript

  1. AWS Lambda にCustom Runtimeで PHPを導入したシステムに改修を加えて UT導入まで行った話 PHPerKaigi 2020 しろぐちゆうま (@yu_mashirou)

  2. Ajenda • 自己紹介 • 本題 • まとめ

  3. You are ? • 代口勇真(Shiroguchi Yuma) • Twitter:柚口ましろう(@yu_mashirou) • エンジニア歴

    : 5年(だと思う) • PHP歴 : 5年(だった気がする) • Android Java歴 : 半年 • Swift歴 : 3ヶ月 • 株式会社C-Garden • エンタメ向けコンテンツ制作を主力にイベント 運営等 • シナリオライティングやイラスト制作を中心に • 役割はCTOとか情報系全般 • 現在新規プロダクト進行中(何か作っていま す)
  4. お詫び

  5. お詫び 今回お話に出てくるプロダクトは ペンディングになりました (2020 2/16:現時点)

  6. 実質フィクション

  7. 懺悔します

  8. 懺悔 設計ミス

  9. 懺悔 設計ミス • アーキテクチャの理解が甘くて中途半端な実装をさせてしまった

  10. 懺悔 レベル感を間違えた

  11. 懺悔 レベル感を間違えた • 「アーキテクチャ」という文化が根づいていない(なんか聞いたことある程度の知識感)

  12. 懺悔 レベル感を間違えた • 「アーキテクチャ」という文化が根づいていない(なんか聞いたことある程度の知識感)

  13. 懺悔 レベル感を間違えた • 「アーキテクチャ」という文化が根づいていない(なんか聞いたことある程度の知識感)

  14. 実装を見る

  15. 実装を見る • ぱっと見た感じ問題無さそう ……?

  16. 実装を見る • AWSUseCase……

  17. 実装を見る • UseCaseの意味が正確でない ◦ AWSUseCaseでは「AWSに接続するための ユースケース網羅」になってしまう

  18. 実装を見る • UseCaseの意味が正確でない ◦ AWSUseCaseでは「AWSに接続するための ユースケース網羅」になってしまう ▪ 触れないようにレイヤーの深いとこ ろで処理の移譲をしておきたい

  19. 実装を見る • 最上層で処理が行われている ◦ 処理の分岐を上層から行うので可読性が下 がる ◦ UseCaseへ処理を移譲するための Controller (移譲選別)が必要になる

  20. 実装を見る • 最上層で処理が行われている ◦ 処理の分岐を上層から行うので可読性が下 がる ◦ UseCaseへ処理を移譲するための Controller (移譲選別)が必要になる

    • テスト時の観点が洗い出しにくい(洗い出せて いない) ◦ 結果こそ全て、全は一(?)
  21. 本当のやりたいこと • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) • 追加改修

    • Lambdaオリジナルを標準化に落とし直す
  22. 本当のやりたいこと • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) • 追加改修

    • bootstrapをテストできるようにする
  23. 本当のやりたいこと • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) • 追加改修

    • bootstrapをテストできるようにする
  24. 本当のやりたいこと • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) • 追加改修

    • bootstrapをテストできるようにする
  25. 本当のやりたいこと • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) • 追加改修

    • bootstrapをテストできるようにする
  26. 本当のやりたいこと • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) • 追加改修

    • bootstrapをテストできるようにする
  27. 本当のやりたいこと • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) • 追加改修

    • bootstrapをテストできるようにする
  28. 本当のやりたいこと 現実 • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) •

    追加改修 • bootstrapをテストできるようにする
  29. 本当のやりたいこと 現実 • 関心事の分離 • アーキテクチャ層の展開 • index.phpの役割を最低限まで削る(処理を Application層に移譲する) •

    追加改修 • bootstrapをテストできるようにする _人人人人人人人_ > 予算が無い <  ̄Y^Y^Y^Y^Y^Y ̄
  30. 現実は厳しい

  31. 改修 • 計算機能の拡張

  32. 改修 • 計算機能の拡張 • 改修箇所のテスト

  33. 改修 • 計算機能の拡張 • 改修箇所のテスト

  34. 課題 テストが無い

  35. テストがない • 当時はリリース直前まで改修していた

  36. テストがない • 当時はリリース直前まで改修していた ◦ 結果的に開発環境( Dev)に直接デプロイ (SAM)して確認するやり方になっていた ◦ ほぼモンキーテスト

  37. 改修+UT実装 • 計算機能の拡張 • UT実装をする

  38. 課題 UT実行環境どう作る?

  39. UT実装 • UT実装をする ◦ DockerでLambdaモドキを作る

  40. UT実装 • UT実装をする ◦ DockerでLambdaモドキを作る

  41. UT実装 • UT実装をする ◦ DockerでLambdaモドキを作る

  42. UT実装 • UT実装をする ◦ DockerでLambdaモドキを作る

  43. 実際にビルドしてみよう

  44. UT実装 • UT実装をする ◦ DockerでLambdaモドキを作る ◦ UTデータの作成

  45. UT実装 • UT実装をする ◦ DockerでLambdaモドキを作る ◦ UTデータの作成

  46. とりあえず 完成

  47. 残作業 • クラス図作っておこう ◦ 作っておくとあとで継承や実装の相関が取 りやすい

  48. 残作業 • クラス図作っておこう ◦ 作っておくとあとで継承や実装の相関が取 りやすい

  49. やばい Interfaceの意味とは

  50. ここでペンディング連絡……

  51. • 使われていないInterfaceの整理 ◦ 実際の利用方法に適した実装に作り直す必 要がある • 責務に合わせた処理の分割 ◦ マイクロサービス化する可能性があった ◦

    機能としてパッケージ化すれば他プロジェク トに転用できるため • UnitTestの全処理実装 残った課題
  52. 続きは……?

  53. 続きは……?

  54. 新作あります

  55. 新作あります

  56. よかったら来てください

  57. EOF