クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ユーザーストーリーの書き方

このレッスンのあとで: 受け入れ条件の付いたユーザーストーリーを、書ける。

55分のレッスンコマンド6件PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

ユーザーストーリーとは何か

ユーザーストーリーとは、使う人の望みを、1文で書いたものです。「誰が、何をしたい、なぜ」の3つを入れます。

ストーリーは短いので、そのままでは作れたかどうかを決められません。だから、完成の目印になる受け入れ条件を、ストーリーに添えます。

このレッスンでは、自習室の予約を例に、ストーリーと受け入れ条件を書いて、動くシステムで確かめます。

このレッスンのゴール

メモ

受け入れ条件の付いたユーザーストーリーを、書ける。

重要な言葉

ことばいみれい
ユーザーストーリー使う人の望みを、誰が、何を、なぜで書いた1文
受け入れ条件ストーリーが完成したと言える目印同じ時間は二重に予約できない
前提操作の前の状態
操作利用者がすること
結果操作のあとに起きること。見て確かめられる
役割システムを使う人の立場学生、職員

学生が入力するセルは、このプレビューでは空白です。

ストーリーは3つの部分でできている

型は「〈役割〉として、〈したいこと〉をしたい。なぜなら〈理由〉だから。」です。

役割には、「システム」ではなく、人の立場を書きます。理由があると、作る人は、別のやり方でも望みに応えられるか考えられます。

例: 3つの部分を見分ける

役割したいこと理由
学生空いている時間に自習室を予約したい勉強する席を確保したいから
職員部屋ごとの予約の一覧を見たい使われ方を確かめたいから
学生予約を取り消したい行けなくなった席を他の人に譲りたいから

学生が入力するセルは、このプレビューでは空白です。

受け入れ条件は前提と操作と結果で書く

受け入れ条件は、ストーリーが完成したと言える目印です。1つの条件を、3つの部分で書くと、確かめやすくなります。

前提は始めの状態、操作は利用者がすること、結果は見て確かめられる変化です。1つのストーリーに、2つから4つの条件を付けます。

例: 予約の受け入れ条件

前提操作結果
部屋Aの9時が空いている学生が、部屋Aの9時を予約する予約が1件増える
部屋Aの9時が予約済み別の学生が、同じ部屋と時間を予約する予約は断られ、件数は変わらない
部屋Aの9時が予約済み学生が、部屋Aの10時を予約する予約が1件増える

学生が入力するセルは、このプレビューでは空白です。

受け入れ条件を動くシステムで確かめる

ラボの API で、予約の表を使って確かめます。表には、同じ部屋と時間を二重に登録できない決まりを付けます。

3つの Run が、上の表の3つの条件に当たります。返ってくる番号を見て、条件が守られたかを判断します。

予約の表を作る

コマンド
PGPASSWORD=shop psql -h db -U shop -c "drop table if exists bookings; create table bookings (id serial primary key, room text not null, slot int not null, student text not null, unique (room, slot))"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

API に読み直させる

コマンド
PGPASSWORD=shop psql -h db -U shop -c "notify pgrst, 'reload schema'"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

空いている時間を予約する

コマンド
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"Study-A","slot":9,"student":"Sato"}' "http://api:3000/bookings"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

同じ部屋と時間をもう一度予約する

コマンド
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"Study-A","slot":9,"student":"Suzuki"}' "http://api:3000/bookings"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

同じ部屋の別の時間を予約する

コマンド
curl -s -o /dev/null -w "%{http_code}\n" -X POST -H "Content-Type: application/json" -d '{"room":"Study-A","slot":10,"student":"Suzuki"}' "http://api:3000/bookings"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

予約の一覧を読む

コマンド
curl -s -w "\n" "http://api:3000/bookings?order=id"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

受け入れ条件は「ちゃんと動くこと」と書けば十分だと考えがちです。これでは、誰も合格か不合格かを決められません。前提と操作と結果を、見て確かめられる言葉で書きます。

例: 動きと条件を照らし合わせる

条件Run の返事判断
空いている時間を予約すると、1件増える201守られている
同じ部屋と時間は、断られる409守られている
同じ部屋の別の時間は、予約できる201守られている

学生が入力するセルは、このプレビューでは空白です。

このラボとソースについて: PostgreSQL と PostgREST のラボ:ブラウザーで学ぶデータベースと REST API

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。