OOC 2020にてスポンサーセッションにて登壇した内容です。
メディアドゥスポンサーセッションOOC 2020
View Slide
メディアドゥについて
株式会社メディアドゥ● 電子書籍の取次事業のシェア No1● 東証一部上場○ メディアドゥホールディングスが東証一部上場企業● エンジニアは約70名
株式会社メディアドゥ最先端のテクノロジーにより電子書籍の流通事業を推進し、電子書籍市場、ひいては出版市場の拡大を目指しています。
5作者電子書店読者情報の集積出版社電子書籍の取次事業
自己紹介
濱口賢人● 2012年 メディアドゥ新卒入社● 担当業務○ 基幹システムの開発と保守● 開発チーム(6人程)のリーダー
濱口賢人● 開発手法○ スクラム○ Clean Architecture, DDD● 技術スタック○ C, Java, PHP, Go, Python○ クラウド, 主にAWS○ オンプレミス運用, 監視など○ バックエンド、フロントエンド● 趣味○ システム開発, ギター, ゲーム
濱口賢人組織・事業の拡大に伴い、電子書店を運用するための自社システム(Java, PHP)をAWSとGoを中心に改善中。
セッション内容について
プロット● オブジェクトの定義をしよう● システムそのものもオブジェクトである● 設計は仮説提唱、コーディングは証明作業● 苦しまない開発を
オブジェクトって何?モデル?● そもそもオブジェクトとは!?○ 振る舞い か○ 構成 か○ はたまた hogehoge か● 本セッションでは オブジェクト ≠ プログラム※アラン・ケイ Smalltalkメッセージに対してどのように振る舞うかが重要
オブジェクトを使う目的
オブジェクトを使う目的今回は● 唯一の振る舞いであり、それを支えるための洗練された構成を持つこと○ と定義をしてみる● 例えば・・・○ 用途が同じ製品でも、よりユニークで使いやすいものが支持される○ 用途が同じ製品でも、低コストで広く波及できる製品が残る○ etc...
各レイヤーのオブジェクト● 経営観点● 組織観点● プロダクト観点● システム観点● インフラ観点● ソフトウェア観点● etc...
各レイヤーのオブジェクト● 経営観点● 組織観点● プロダクト観点● システム観点● インフラ観点● ソフトウェア観点● etc...目的・達成定義が伝わっているか目的に合うように作られているか
各レイヤーのオブジェクト● 経営観点● 組織観点● プロダクト観点● システム観点● インフラ観点● ソフトウェア観点● etc...各種レイヤーで考えられる目的達成の手段・モデルはそれぞれ個別のオブジェクトと考えられる
各レイヤーのオブジェクト● 組織もオブジェクト○ メディアドゥという会社は電子書籍の取次事業をするオブジェクト● システムもオブジェクト○ 電子書籍の配信システムも一つのオブジェクト○ 書店運用のためのシステムも一つのオブジェクト● システムを支えるプログラムもオブジェクト○ データ入出力を取り扱うオブジェクト○ 操作の入出力を取り扱うオブジェクト○ ビジネスロジックを取り扱うオブジェクト
各レイヤーのオブジェクト経営組織プロダクトシステムインフラソフトウェアより具体的な層のHow Toは任せる達成に向けたアウトプット社会への影響
オブジェクトを支える
オブジェクトを支える● 上位レイヤーのオブジェクトは下位レイヤーのオブジェクトへ仮説を提供● 下位レイヤーのオブジェクトにより上位レイヤーの仮説を証明
オブジェクトを支える経営組織プロダクトシステムインフラソフトウェア論理性が破綻していると作れない・伝わらない成果物が目的に成り立たず破綻する
オブジェクトを支える● 仮説○ 目的への達成方法を、論理設計する■ ソフトウェア開発は論理的なコンピュータを扱う (勿論、物理の世界も論理である )■ 故に論理的に成り立っているべきである● 証明○ 仮説を結果へ導くように成果物を作成し、実証する■ 論理的・数学的に成り立つものであれば、実装できるべきである
オブジェクトを支える● 仮説 -> 実証 の流れをアジャイル・スクラムで回していくが・・・○ コーディングに入った途端にわからなくなる○ ゴールを見失う● 振る舞いはなんとか担保できても、内部構造が破綻してしまう○ 継続的な改善ができない○ そもそも後から理解できない
オブジェクトを支える● トップダウンでゴールや方法を決めてもNG○ 内部構造がそれに見合う形になっていなければ、揮発的なプロダクトとして終わる○ もしくは続く運用・改善に大きな打撃が訪れる● ボトムアップで成果物ベースで流動的になるのもNG○ 今ある成果物が表現できるものは、プロダクトを求めている側が望む一部だけとなりうる○ 一度限りの開発で完了するソフトウェアは限られ、改善・拡張はつきもの
オブジェクトを支える人が使うものを、人が作り、人が運用する。ソフトウェア開発はコンピュータを道具として扱う。それがどのような恩恵を与えるのかは人が判断する。提供者にしても利用者にしても、それぞれが感じた結果がソフトウェアの価値を決定する。
事実に基づく
事実に基づく● 仮説はどの程度の信憑性があるのか○ 定量的な数値に基づいているのか○ 論理性はあるのか○ 事実の一部だけを切り取っていないか
事実に基づく● 同じテーマ、同じ言葉を使っていても、全く認識が異なるパターン○ DDDのユビキタス言語の策定の際にハードルとなりうる○ ヒンドゥー教の象の話● 組織間・チーム間のコミュニケーションロス○ 仮説の認識がずれる○ ゴールがずれる○ 成果物が正しく作られない○ 手戻りが出る○ デスマーチが始まる
ヒンドゥー教の象の話
これは象?
確かに象の一部だが、全てが揃ってやっと象
事実に基づく● オブジェクト指向は現実をモデリングして、設計/コードへ・・・○ とよく言われたりするのは、全体を捉えないと一部だけでは成り立たないと取れると言える● 事実に基づいた信憑性のある仮設を立て、合意すること● 実際の成果物による結果に対しても、現実を直視することオブジェクトの振る舞い・構成が正しさは、結果として現実で正しいと証明された時に分かる
事実に基づくオブジェクトが達成するゴールを決めずにコードベース、ソフトウェアベースで発信するとその結果の妥当性がわからないままとなる。仮設を立てた中から、事実に基づき正しいふるまいのオブジェクトを蒸留する。蒸留したオブジェクトの構成を最適化する。
反面、直感を大事にする
直感を大事にする● いくら現実に基づいて仮設を立てても、最終的には机上の空論でしかない● 直感を検証なしにこねて、大きい仮説へ持っていくと失敗に繋がる故に、直感はすぐに検証し、それが事実か確かめること。
直感を大事にする● X であれば、 Y である、という仮説が出た時点で、その単位で実証する○ 複合的な条件・結果は結果の要因分析を曇らせる● 真と証明された結果のみを組み合わせて、複合的なオブジェクトへ昇華する○ 元から複雑なものを作ろうとすると、取り回しが難しく失敗しやすくなる
ここまでの話を開発に落とし込む
開発への落とし込み● オブジェクトを使う目的○ 個人にしても組織にしても、社会に対して何を提供し恩恵を出すのかが源泉○ 最終的には人が価値を判断する、そのレベルにオブジェクトのバランスが保たれるべき■ 関心事の分離、ドメイン、コンテキスト● オブジェクトを支える○ オブジェクトが期待される振る舞いを続けられる構造を保つ○ ゴールに沿った論理設計を行い、コードはそれを素直に表現できること■ ソフトウェアアーキテクチャや実装パターンが役立つ
開発への落とし込み● 事実に基づく○ 有益なコードのみを残し、不要なコードは排除する■ 継続的なリファクタリングとテスト○ コンポーネントは小さく保つ■ 参照透過性、パッケージ粒度 (凝集度)
開発への落とし込み組織やソフトウェア(広義には”物作り”)は課題解決のために作られる。課題は大抵複雑であり、小さく作られても時を経て肥大化しがち。常にシンプルに保つには、組織ゴールから設計への落とし込みが徹底的に必要。論理性があり、実現可能性が見えている状態から、コードを書き始めるべき。しかし、直感からコードベースで細かく実証実験することを怠らない。
開発への落とし込み開発者は常に、いかなる設計・コードが正しいかを迷う。その答えは本でもレビューでもなく、実際に使われることが近道かもしれない。クラスの定義や、インターフェース・継承で詰まったら、上位レイヤーのオブジェクトのことを考えてみると、納得できるかもしれない。
オブジェクト指向で豊かなシステムを創ろう!
メディアドゥの紹介
MISSION著作物の健全なる創造サイクルの実現VISIONひとつでも多くのコンテンツを、ひとりでも多くの人へ
情報発信Twitterhttps://twitter.com/mediado_devエンジニアブログhttps://techdo.mediado.jp/
We’re Hiring !● Engineer● Engineering Manager● Product Ownerhttps://www.mediado.jp/mediado/recruit/