519 Views
June 18, 19
スライド概要
Developers Boost KANSAIという関西のU30エンジニアが集うイベントで発表したスライドです。
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
モダンであり続けるために︕ レガシーコードに⽴ち向かう︕ 2019年6⽉15⽇ ⼭崎 好洋 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
⼭崎 好洋 情報系専⾨学校4年制 卒 2018年 新卒⼊社 Yahoo!天気・災害 • 防災速報Android • Webページの モダン環境移⾏ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 2
学⽣時代 • 5⼈のチーム開発でリーダーを担当 マネージメントや技術選定 • 設計やチーム開発に興味を持ち勉強 • ドメイン駆動設計 • リーダブルコード • 1on1の実施 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 3
現在 Yahoo!天気・災害のWebページ(FE)を モダン環境に移⾏する業務を担当 設計から開発まで担当しています Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 4
学⽣時代との違い 学⽣時代は、動けば良かった 社会⼈は、動かし続けないといけない • レスポンスn秒まで • 可⽤性99.99% Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 5
レガシーと⽴ち向かう Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 6
レガシーとは︖ 作成者の意図が理解できない物 意図が理解できないため変更が困難で 更にレガシー化していく Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 7
レガシーは実在する 全てがモダンな環境ではなく 所々レガシーが存在する • 3000⾏の巨⼤なActivity • ロジックが⼤量に含まれたViewファイル • ⽤途が読み取れない変数名 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 8
レガシーが⽣まれるのは仕⽅がない システムはそもそも複雑 それを作る組織も複雑 誰でも意図が理解出来るように 作成する事が難しい Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 9
⾔葉が⼤事 モダン化の業務をしていて ⼀番苦労したのは、⾔葉の不⼀致 サービス内では〇〇 ドキュメントでは△△ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 10
⾔葉が⼤事 • ドキュメントの⾔葉と違うので 検索に引っかからない • 調べた物が同じ物なのか 確信が持てない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 11
レガシーの影響 • 理解に時間がかかる • 開発に時間がかかる サービスの成⻑が遅くなってしまう Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 12
レガシーは 絶対悪ではない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 13
レガシーは絶対悪ではない レガシーは全て悪い︕ 駆逐すべき悪だ︕ではないって事 Webページで表⽰する マスターデータの管理構成での気づき Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
レガシーは絶対悪ではない 現⾏ Webサーバー側のプログラム から制御出来ない 定期的にローカルにDL なぜこんな事を? Data.json Webサーバー Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 15
レガシーは絶対悪ではない こうすると Webサーバー側のプログラム から制御できるのに… 必要な時に取りに⾏く CDN/BFF Data.json Webサーバー Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 16
レガシーは絶対悪ではない データが取れないので表⽰できない CDN/BFF Data.json Webサーバー Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 17
レガシーは絶対悪ではない 現⾏ ローカルにあるので表⽰が出来る 何かしらの考えがあって そういう仕組みになっている • ⼤量のアクセスを捌くため Data.json • 他のサーバーが落ちても 表⽰できる様に • など Webサーバー Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 18
とは⾔え、前に進むためには モダン化しないといけない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 19
モダンとは︖ これらの事をやることが モダンという事ではない︕ • マイクロサービス︖ • ドメイン駆動設計︖ • モブプログラミング︖ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 20
モダンとは︖ 他の⼈が意図を理解しやすいもの • 対象を⼩さく => マイクロサービス • 対象を整理整頓 => ドメイン駆動設計 • 意図を共有する => モブプログラミング Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 21
モダンな⽅法 = 先⼈の知恵 先⼈達が課題を解決するために 試⾏錯誤した結果が⾔語化された物 それぞれに解決したい課題や メリデメが存在する Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 22
モダンな⽅法は 銀の弾丸ではない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 23
モダンな⽅法は銀の弾丸ではない モダンな⽅法を盲信すると 考慮漏れや運⽤コストの増加する場合が オーバーテクノロジーにならない様に 気をつけないといけない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 24
モダンな⽅法は銀の弾丸ではない FEの設計にドメイン駆動設計を 取り⼊れようとした時 上司︓ FEにはドメイン知識は あまりないんじゃない︖ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 25
ドメイン駆動設計でやった場合 利点︓ 複雑なドメインロジックを表現しやすい 難点︓ クラス数やディレクトリ構造が 複雑になってしまう Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 26
モダンな⽅法は銀の弾丸ではない 本当にやりたかった事は ViewとModelの分離、MVCで事⾜りる 守るためには設計以外の部分も 考えないといけない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 27
モダンな⽅法は銀の弾丸ではない 危うく多くのコストを掛けただけで 思った成果が出ない結果に 解決する事、メリット・デメリットを しっかり考え、⾒極める必要がある Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 28
レガシーからモダンへ Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 29
レガシーからモダンへ モダンとレガシーにはギャップがある モダン Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. レガシー 30
レガシーからモダンへ 1.レガシーを知る 課題 こだわり モダン レガシー 利点 背景 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 31
レガシーを知る⽅法 • ドキュメント・コードを読む • 上司や先輩に話を聞く Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 32
レガシーを知る 共通の処理で⼤量のif⽂が… 課題︓ どういう時、どの処理が 適応されるのかを把握するのが難しい Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 33
レガシーを知る 背景︓ 仕様追加や変更による、 コントローラーやアクション毎に 差分が⽣まれた Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 34
レガシーを知る 利点︓ スピーディに共通処理を追加できる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 35
レガシーからモダンへ 1.レガシーを知る 課題 こだわり モダン レガシー 利点 背景 Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 36
レガシーからモダンへ 2.モダンを知る 解決できる課題 モダン レガシー 思想 デメリット Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 37
モダンを知る⽅法 • 本や記事を読む • コミュニティでディスカション • 先輩や上司に聞く • Twitterで識者をフォローする Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 38
モダンを知る オープン・クローズドの原則(OCP) SOLID原則の⼀つ ソフトウェアの構成要素は 拡張のために開いていて 修正のために閉じていなければならない Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 39
モダンを知る 追加要件が来た際に 既存のコードに⼿を加えることなく 要件を追加できるようにする Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 40
モダンを知る Strategy パターン デザインパターンの⼀つ 共通のインタフェースを持たせることで 分岐を減らす事ができる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 41
レガシーからモダンへ 3.ギャップを埋める 課題 解決できる課題 モダン こだわり レガシー 思想 利点 デメリット Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 背景 42
ギャップの埋め⽅ 1. モダンな⽅法の概要を知る 2. レガシーの課題を知る 3. 解決できそうなモダンな⽅法の 詳細を調べる 4. 試してみる Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 43
モダンで あり続けるために Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 44
モダンであり続けるために モダンもすぐレガシー化していくので より意図が理解しやすくなるように “新陳代謝”を繰り返し続ける Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 45
モダンであり続けるために 他の⼈にも意図を理解してもらえるよう 思いやりの⼼を忘れずに Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 46
まとめ • レガシーは存在する • レガシーは悪、モダンは善ではない • モダンとレガシーのギャップを埋める • 新陳代謝を繰り返していく Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved. 47