Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ユースケースシナリオのススメ
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
男爵
March 26, 2021
Programming
11k
11
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ユースケースシナリオのススメ
PHPerKaigi2021の登壇資料です。
補足資料はこちら
https://dnskimox.hateblo.jp/entry/2020/12/19/184101
男爵
March 26, 2021
More Decks by 男爵
See All by 男爵
デッドロックを回避するリポジトリ実装の勘所
dnskimo
3
630
Scalaで始める表明プログラミング
dnskimo
3
1.1k
分析・設計・テストで活きる ユースケースシナリオの書き方と使い方
dnskimo
5
11k
JIRAとGASで半自動化!カンバンメトリクス
dnskimo
3
1.4k
PHPではじめるCQRSっぽいやつ
dnskimo
9
3.1k
PofEAAで考えるSaaSバックエンドの作り方
dnskimo
3
7.5k
契約による設計事始め
dnskimo
19
8.6k
PHPではじめるCQRS
dnskimo
5
3.9k
PofEAAで読み解くDoctrine2
dnskimo
3
2.1k
Other Decks in Programming
See All in Programming
手動確認はもう限界 〜XCUITestでCustom URL Schemeの遷移を起動種別ごとに自動テストする〜 / Testing Custom URL Schemes with XCUITest
otouto
0
390
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
130
Agents on Rails - Rails at Scale 2026
irinanazarova
0
330
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.1k
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
900
FreeBSDでZabbixを動かす
kenkino
0
350
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
310
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
340
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
550
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
13
6.5k
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
340
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
160
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.2k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
770
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Into the Great Unknown - MozCon
thekraken
41
2.8k
A Modern Web Designer's Workflow
chriscoyier
699
190k
Code Reviewing Like a Champion
maltzj
528
40k
Chasing Engaging Ingredients in Design
codingconduct
0
340
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
920
The Pragmatic Product Professional
lauravandoore
37
7.5k
Transcript
ユースケースシナリオの ススメ 2021/03/26 PHPerKaigi 2021 @dnskimox
自己紹介 男爵 Twitter:@dnskimox 所属:Alp,Inc. / Scalebase PHP歴:PHP4〜PHP7 業務経験:イラストSNS、C2Cショップ作成サービス、ソシャゲバックエンド、 サブスクリプション管理SaaS 好きな話題:OOP、DDD、開発プロセス
ユースケースシナリオのススメ ▸ ドメインモデルに足りないもの ▸ ユースケースとはなにか? ▸ ユースケースシナリオの書き方 ▸ シナリオからコードへ ▸
結論
1. ドメインモデルに足り ないもの モデルに妥当性を与える ものは何か?
ショッピングカートのドメインモデル
この手のモデルから何が わかるの? これから作るべきソフトウェアについて、何を語ってい て、何を語っていないのか……。
ドメインモデルは ソフトウェアの静的な 構造を表現する 概念の名前、依存関係、関連、多重度、集約関 係、etc...
静的な構造 概念の名前、依存関 係、関連、多重度、集 約関係、etc... ソフトウェアが持つふたつの側面 動的なふるまい 情報を表示する、入力 を受け付ける、入力値 を検証する、計算をす る、データを保存する、
外部と通信する、etc...
“ ユーザーの立場で見ると、ソフトウェアを外部の世界 から区別するようなシステムの境界があります。自分 のタスクをソフトウェアがどのようにサポートしてくれる のかということを通して、ユーザーはソフトウェアを理 解します。このタスク指向の視点は、一連の記述、す なわちユースケースによって説明できます。 ――『オブジェクトデザイン』(p.59)
2. ユースケースとはな にか? UMLが教えてくれない 大事なこと
ユースケースと聞いて多くの人が想像する であろう「図」
“ これはあくまで各ユースケースの相互関係を示す ものです。しかしユースケースの価値はほぼすべ てがその内容のほうにあり、ダイアグラムはわず かな意味を持つだけです。 ――『UMLモデリングのエッセンス 第3版』(p.100)
UMLの父 イヴァー・ヤコブソン スウェーデンのコンピュータ科 学者。グラディ・ブーチ、ジェー ムズ・ランボーらと共にUMLの 最初の版を策定した。ユース ケース、シーケンス図、ロバスト ネス分析などを考案。 https://twitter.com/ivarjacobson
“ [将来のシステムのユーザによって]開始されるイ ベントと[ユーザと]システムの間のインタラクショ ンの完全な記述 ――『オブジェクト指向入門 第2版 方法論・実践』(p.100) で引用されているヤコブソンの言葉
None
“ 形式的手法、形式言語、形式的体系などに現れ る「形式的」は、「数学や論理学に基礎を置いた、 よく定義されて曖昧性が少ない」といった意味で 使っていると思う。 ―― 「形式的」とは何だろう
“ 各ユースケースは、何らかの目的・目標/機能に関する 台本(シナリオ)での主体(アクター)と呼ぶ利用者とシス テムのやりとりを描いている。(中略)ユースケースでは 技術専門用語をなるべく使わず、エンドユーザーやその ビジネスの専門家に分かり易い用語を用いる。ユース ケースの作成は、ビジネスアナリストとエンドユーザーが 共同で行う。 ―― ユースケース
- Wikipedia
ソフトウェアの動的な ふるまいについて合意 を形成する 可能な操作、入力値検証、計算、データ保存、検索、 システムからの応答、エラー処理、etc...
3. ユースケース シナリオの書き方 形式的な文書にするた めに欠かせない3カ条
1. 目的レベルを揃える
1. 目的レベルを揃える
『ユースケース実践ガイド』( p. 80)
2. シナリオテンプレートに従う ユースケース名:XXXをXXXする 事前条件 - XXXであること 主成功シナリオ 1. アクターは〜する 2.
システムは〜する 3. アクターは〜する 4. システムは〜する 拡張 2a. XXXがXXXの場合: システムは〜する アクターは〜する 1に戻る 事後条件 - XXXであること 晴れの日のシナリオ 雨の日のシナリオ
2. シナリオテンプレートに従う ユースケース名:ショッピングカートに商品を追加する 事前条件 - 対象の商品が公開中であること 主成功シナリオ 1. 買い物客は商品と購入数を選択する 2.
システムは商品の在庫状況を確認する 3. システムはショッピングカートにカート品目を追加する 4. システムは「ショッピングカート」画面に遷移する 5. 買い物客はショッピングカートの中身を確認する 拡張 2a. 商品の在庫が購入数未満だった場合: システムは「在庫が足りません」というエラーを表示する ユースケースを終了する 事後条件 - カート品目が一件増えていること - 対象の商品の在庫はまだ減っていないこと
ここでいう「システム」ってどこか らどこまでのこと? バックエンドAPIだけなのか、フロントエンドも含むのか、 DBはどうなのか、連携しているSaaSは……。
3. 設計スコープを定義する 主アクター 支援アクター
4. シナリオからコードへ 道はひとつではない
ICONIXプロセス 『ユースケース駆動設計実践ガイド』 今日はこの話はしません
CRCカードワークショップ https://slideplayer.com/slide/10494736/
CRCカード(表面) 『オブジェクトデザイン』( P. 145)
CRCカード(裏面) 『オブジェクトデザイン』( P. 146) Responsibility Class(Candidate) Collaboration
CRCカードで用意するもの 1. 情報カード 2. 鉛筆 3. 消しゴム Amazon | コレクト
情報カード 5×3 補助 6ミリ罫 C-532 | 文房具・オフィス用品 | 文房具・オフィス用品
CRCカードの手順 1. 参加者はクラスの候補をカードに記入する a. 表面にはクラスの概要や不変条件を自由に書く 2. 裏面に責務とコラボレーターを書く a. 書ききれない責務は別のクラスを作って移譲する 3.
コンピュータになったつもりで、カードをオブジェクトに見立て てシナリオを実行してみる(ウォークスルー) a. オブジェクトは自身の責務以外のことはできない b. オブジェクトはコラボレーター以外と対話できない 4. 最後のステップに到達したら、事後条件を達成しているかど うかを確認する 5. 最後のステップまで到達できなかったり、事後条件を達成で きなかった場合、1に戻って考え直す
この手順に従うとクラスの数が どんどん増えるんだけど? たくさんのクラスの間を飛び回らないと読み解け無い難 しいコードになりそう……。
“ それでも、私のようなオブジェクト偏愛者は分散制御を選 びます。良い設計を実現する条件のひとつは、変更によ る影響を局所化することです。データとそれを評価する振 る舞いは、一緒に変更されることが多いものです。 ―― 『UMLモデリングのエッセンス 第3版』(P. 56)
“ 実は、この変化こそ、オブジェクト指向のパラダイムシフト の中心部分です。これは、教えるのが非常に難しい部分 です。(中略)一度理解できると、脳内の配線が変わり、実 際には分散制御のほうが簡単であると考えるようになりま す。 ―― 『UMLモデリングのエッセンス 第3版』(P. 56)
最初に記述するクラスの 候補はどこからくるの? ユースケースからクラス名を抽出するのか、他の源泉が あるのか、あるとしたらそれは何なのか……。
“ ユースケースはクラスを見つけるのに最適の道具ではな い。(中略)優秀なオブジェクト指向分析者および設計者 は、「システムはaを実行し、次にbを実行する」という形式 に見られる性質に注目しないように心がけている。代わり に、「抽象Aのインスタンスに許される操作は何か、それら の操作に対する制限は何か」を問う。 ―― 『オブジェクト指向入門 第2版
方法論・実践』(P. 101)
“ ユースケースは分析ツールではなくむしろ確認 (validation)ツールである。(中略)提示された分析モデ ルあるいは試験的な設計に欠けている属性があるかどう かを検査する方法としてユースケースは有効なツールだろ う。 ―― 『オブジェクト指向入門 第2版 方法論・実践』(P.
102)
最初のドメインモデル はシナリオよりも先に つくる 顧客へのヒアリング、要求文書、対象ドメインの専門用語、チー ム内の会話、デザインパターン、etc...
オススメの 設計プロセス (ドラフト版)ドメインモデル ユースケースシナリオ CRCカード
結論 ユースケースを 有効活用するには 覚えて帰ってほしい 3つのこと
ユースケースは図ではない 大事なのはシステムのふるまいを示すシナリオ クラスの候補をシナリオで検証 ウォークスルーを通じてオブジェクト同士の連携を観察 ふるまいについて合意形成する 文書そのものより、記述中に発生するコミュニケーション
現場でユースケースシナリオを 書いてみよう! ご清聴ありがとうございました You can find me at @dnskimox &
https://dnskimox.hateblo.jp/
参考文献 ▸ 『オブジェクトデザイン』 ▸ 『UMLモデリングのエッセンス 第3版』 ▸ 『ユースケース実践ガイド』 ▸ 『ユースケース駆動開発実践ガイド』
▸ 『オブジェクト指向入門 第2版 方法論・実践』 ▸ ユースケース - Wikipedia ▸ イヴァー・ヤコブソン - Wikipedia ▸ CRCカードでチームが協働して設計する ▸ 「形式的」とは何だろう