1
2
Railsで機能追加するときの
開発の進め方を話します
3
自己紹介
名前: 神速
GitHub: @sinsoku (アイコン右上)
Twitter: @sinsoku_listy (アイコン右下)
Rails歴: それなり
仕事: Railsエンジニア スクラムマスター
4
!
仕事の進め方
1. 要望を聞く
2. 仕様を考える
3. 提案する
4. 実装して、動作確認する
5
1. 要望を聞く
6
!"
要望の例
架空の名刺管理サービスSevenで、上司が挙げた要望を例にして
話します。
•
⭐
管理している名刺データをcsvでダウンロードしたい
•
⭐
自分が渡した名刺を登録したユーザーを探したい
•
⭐
名刺を役職で検索したい
• ...etc
7
「なぜ?」を聞いて目的を探る
8
なぜcsvでダウンロードしたいのか?
• PCにもバックアップを残しておきたい
• 他社サービスへのデータ移行が簡単になる
• え、退会しやすくするの?
!
• スプレッドシートでデータ分析できる
• データ分析するユーザーって何%います?
9
なぜcsvでダウンロードしたいのか?
•
!
PCにもバックアップを残しておきたい
•
"
他社サービスへのデータ移行が簡単になる
• え、退会しやすくするの?
#
•
"
スプレッドシートでデータ分析できる
• データ分析するユーザーって何%います?
10
2. 仕様を考える
11
ざっくりした流れ
1. 目的を満たす機能を考える
• 目的: PCにもバックアップを残しておきたい
2. 画面イメージを作る
3. URL設計を考える
4. モデルとDBの設計をする
12
雑な画面イメージA(デモ)
13
雑な実装イメージA
class BusinessCardsController < ApplicationController
def index
respond_to do |format|
format.html { ... }
format.csv { ... } # こんなので実装できそう
end
end
end
14
名刺が多いと遅くなりそう
15
雑な画面イメージB(デモ)
16
雑な実装イメージB
class CardExportingsController < ApplicationController
def index
@card_exports = current_user.card_exportings.all
end
def create
@card_export = CardExporting.new(card_exporting_params)
@card_export.user_id = current_user.id
if @card_export.save
# 非同期処理でcsvのダウンロード準備をする
CardExportingJob.perform_later(@card_export)
redirect_to card_exporting_path(@card_export)
else
render :new
end
end
end
17
雑な非同期処理B
class CardExportingJob < ApplicationJob
def perform(card_export)
data = card_export.to_csv
client = Aws::S3::Client.new
status = client.upload(data) ? :success : :failed
card_export.update(status: status)
end
end
18
目的: PCにもバックアップを残しておきたい
19
AWS S3に保存する方が楽?☁
20
雑なイメージC(デモ)
21
3. 提案する
22
顧客と交渉する
1. AWS S3に保存する案
2. csvのダウンロード(遅)
3. csvのダウンロード(速)
開発の大変さやプロダクトの状況、相手の期待値を考慮して交渉
する。
23
顧客と交渉する
1. AWS S3に保存する案
2. csvのダウンロード(遅)
3. csvのダウンロード(速)
全ての提案を見せるのが最善とは限らない。
24
4. 実装して、動作確認する
25
簡単なので省略✂
26
結論
仕様を決める >> コードを書く
ご静聴ありがとうございました
27

ENGINEER WORK!!