Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OOC 2020 メディアドゥ スポンサーセッション/ooc_2020_mediado
Search
kent-hamaguchi
February 16, 2020
Technology
0
580
OOC 2020 メディアドゥ スポンサーセッション/ooc_2020_mediado
OOC 2020にてスポンサーセッションにて登壇した内容です。
kent-hamaguchi
February 16, 2020
Tweet
Share
More Decks by kent-hamaguchi
See All by kent-hamaguchi
メディアドゥ Go Conference 2021 スポンサーセッション/gocon-2021-mediado
kenthamaguchi
1
12k
メディアドゥ Amazon Personalize in AWS メディアセミナー Q1/mediado-amazon-personalize-aws-media
kenthamaguchi
0
1.5k
MediaDo DynamoDB活用事例/mediado-dynamodb-usecase
kenthamaguchi
0
1.3k
MediaDo.go #2 Clean Architectureとの付き合い方/mediado-go-2-clean-architecture
kenthamaguchi
2
1.9k
Infra Study Meetup #5 メディアドゥスポンサーセッション/infra-study-meetup-5-mediado
kenthamaguchi
0
860
JAWS DAYS 2020 メディアドゥスポンサーセッション/jaws-days-2020-mediado
kenthamaguchi
1
1.9k
MediaDo.go #1 レガシーに立ち向かう / mediado-go-1-vs-legacy
kenthamaguchi
0
1.3k
MediaDo.go #1 GopherCon 2019 参加レポート / mediado-go-1-gophercon-2019
kenthamaguchi
1
1.3k
Go conf 2019 spring, sponsor session "Go初導入の組織で、社内外へ貢献していくために実施した、2つのこと" / go-conf-2019-spring-sponsor-session-mediado
kenthamaguchi
1
540
Other Decks in Technology
See All in Technology
QuickSight SPICE の効果的な運用戦略~S3 + Athena 構成での実践ノウハウ~/quicksight-spice-s3-athena-best-practices
emiki
0
290
[SRE NEXT 2025] すみずみまで暖かく照らすあなたの太陽でありたい
carnappopper
2
470
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
3
18k
「Chatwork」のEKS環境を支えるhelmfileを使用したマニフェスト管理術
hanayo04
1
400
OpenTelemetryセマンティック規約の恩恵とMackerel APMにおける活用例 / SRE NEXT 2025
mackerelio
3
2k
本当にわかりやすいAIエージェント入門
segavvy
1
400
Amazon SNSサブスクリプションの誤解除を防ぐ
y_sakata
3
190
Talk to Someone At Delta Airlines™️ USA Contact Numbers
travelcarecenter
0
160
Bill One 開発エンジニア 紹介資料
sansan33
PRO
4
13k
LLM拡張解体新書/llm-extension-deep-dive
oracle4engineer
PRO
23
6.3k
三視点LLMによる複数観点レビュー
mhlyc
0
230
How Do I Contact Jetblue Airlines® Reservation Number: Fast Support Guide
thejetblueairhelpsupport
0
150
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
54
11k
A better future with KSS
kneath
238
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
For a Future-Friendly Web
brad_frost
179
9.8k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
108
19k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Scaling GitHub
holman
460
140k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
29
1.8k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.9k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
830
Transcript
メディアドゥ スポンサーセッション OOC 2020
メディアドゥについて
株式会社 メディアドゥ • 電子書籍の取次事業の シェア 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 ひとつでも多くのコンテンツを、ひとりでも多くの人へ
情報発信 Twitter https://twitter.com/mediado_dev エンジニアブログ https://techdo.mediado.jp/
We’re Hiring ! • Engineer • Engineering Manager • Product
Owner https://www.mediado.jp/mediado/recruit/
None