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
リリース済にも関わらず何のドキュメントもなかったシステムの仕様書を書いてみた話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
ken
January 14, 2022
Programming
120
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
リリース済にも関わらず何のドキュメントもなかったシステムの仕様書を書いてみた話
ken
January 14, 2022
More Decks by ken
See All by ken
Accessibilityに興味が出てきた話
segamiken
0
110
Laravelに入門してみた
segamiken
0
110
Other Decks in Programming
See All in Programming
ふつうのFeature Flag実践入門
irof
8
4.2k
Creating Composable Callables in Contemporary C++
rollbear
0
170
IBM Bobを活用したレガシーアプリの最新化
oniak3ibm
PRO
1
220
エンジニア向け会社紹介/Findy Company Profile
findyinc
6
350k
Inside Stream API
skrb
1
800
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
220
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
110
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
140
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.6k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.4k
act1-costs.pdf
sumedhbala
0
120
Featured
See All Featured
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
The Limits of Empathy - UXLibs8
cassininazir
1
370
New Earth Scene 8
popppiees
3
2.4k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
790
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
The Curious Case for Waylosing
cassininazir
1
410
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
620
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
Claude Code のすすめ
schroneko
67
230k
Transcript
リリース済にも関わらず何のドキュメントもなかったシステムの 仕様書を書いてみた話 segami ken
今回のプレゼンで言う仕様書とは、 開発前の設計書というより、開発後運用フェーズにいく前に用意しておいたほうがよいドキュメントと いう位置づけ。
先月のある日 とあるアプリの追加機能の作成依頼が営業職の方から届いた。 追加機能は難しいものではなく、「多分そんなに日数がかからずにできると思います」と 返した。
とは言ったものの... 最近、そのアプリ全然触ってないなあ。 継続的に使っていただいているから、大きなバグは無さそうだけどどうやって実装したっ け?
なんとなく覚えていること • フロントエンド ◦ エンドユーザー向けの画面が存在する ▪ csvをアップロードする機能など • バックエンド ◦
画面に必要な情報を返すためのバックエンド APIが存在する ▪ アップロードされたcsvの名前やユーザーの名前を返す機能など • その他 ◦ アップロードされたcsvの内容を元にスクレイピングが実行されるところが別レポジトリに存在する
そもそも最近いつアプリのアップデートしたっけ...? ECRにpushした日付 (現在2022年1月) GitHubにpushした日付
何も覚えていない.... システムを作成した張本人なのにどうしよう... 今回は1人で作成したので自分しか覚えていない..
要件定義、基本設計、詳細設計のフェーズはチャットでのやり取りは残していたが、 開発後 正式な仕様書として何も残していなかった..
とりあえずローカル環境で動かしてみたり、 コードを読んでみよう..!
ローカル環境での動かし方もあまり覚えていない... コードも多くて読み解くのに時間がかかる...
システムに関する仕様書がないことのデメリット • ゴールが分からない問題 ◦ 誰のどんな課題を解決するためのシステムなのかが時間と共に忘れてしまう • チームメンバーの増減に対応できない問題 ◦ システムの使い方を忘れていたり、ローカル環境での動作手順がパッと分からず時間がかかる ◦
新しいメンバーが増えた時にも 1から説明しないといけなくなる • 追加機能やバグ修正に対応しづらい問題 ◦ システムの具体的な仕様を忘れていて、新たに機能を追加しようとする際に元々の仕様を無視して しまう恐れがある ◦ インフラの構成、DB構成、手動の場合のデプロイの方法などが分からずエラー原因の調査等に時 間がかかる
デメリット大きすぎる... 何はともあれ、 開発者向けに仕様書を書いてみました!
記載した項目 (読み手は開発者を想定) • システムが目指す姿 ◦ このシステムで解決したい課題 ◦ システムの目指すべきゴール ◦ このシステムでは対応しない問題
• システムの概要 ◦ 満たしている要件 ◦ 詳細な仕様 • 開発者に必要な情報 ◦ ローカル環境での動作手順 ◦ DBのテーブル構成図 (ER図) ◦ AWSの構成図 ◦ デプロイの手順 ◦ 現状残っている開発上の課題
要件?仕様?それぞれの定義は?
こちらのスライドを参照させていただきました。 https://speakerdeck.com/yasuoyasuo/enziniafalsetamefalsedokiyumentoli-ji-chu-jiang-zuo?slide=15
とはいえ文章の書き方も仕様書に記載した項目も自己流.. これで本当に良いのか?
まずビジネス文章の書き方を調べてみる
Google テクニカルライティングが参考になる > Every engineer is also a writer. という記述が印象的。
https://developers.google.com/tech-writing
文章の書き方の重要なポイント • 誰が読んでもただ一つの解釈にしかならないような文章の作成 ◦ 冗長な表現はできるだけ避けて、簡潔な文章を作成 ◦ コンテクストの擦り合わせ (必要に応じて必要な前提知識や背景を書き加える ) •
表記統一 ◦ 例えば 「読者」と「読み手」を統一する ◦ 箇条書きの際に文末に句点をつけるかどうかの統一 ◦ である調、ですます調の統一 • 文章の構造化 ◦ 見出し、段落、箇条書きを使用して文章全体の構造を一目で把握できるようにする • 結論ファースト • 事実と意見を分ける
テキスト校正くんを使ってみる テキスト校正くんというVisual Studio CodeのExtensionがある。 実際に使ってみると、たくさんの指摘をしてくれました。便利!
次に仕様書に記載すべき項目を調べてみる
の前に... そもそもシステムを作る際に必要なドキュメント(設計段階含めて) の全体像を理解したい
どうやら理想はこんな感じのよう • 要件定義 ◦ 要件定義書 • 基本設計 (外部設計) ◦ 業務フロー
◦ システム構成図 ◦ ER図、テーブル定義書 ◦ 機能一覧表 • 詳細設計 (内部設計) ◦ 画面遷移図 ◦ 詳細設計書 • プログラミング ◦ 補足でコメントを書く • 単体テスト ◦ 単体テスト仕様書 • 結合テスト ◦ 結合テスト仕様書
IPAのページを見てみる 要件定義の際に作るべきドキュメントのサンプル集 https://www.ipa.go.jp/sec/softwareengineering/tool/ep/ep2.html
数人で小規模のアプリを作るフェーズだと ドキュメント書き過ぎても費用対効果低そう.. (主観)
3人チームぐらいでソフトウェア開発する際の良さそうな塩梅 (仮説) • システムの目的、ゴールは最低限まとめる • Figmaでデザイン作る • ER図、インフラ構成は設計段階から図にして共有しておく (Draw.ioなど) ◦
変更があった場合、どうやって変更していく習慣、仕組みを作るかが課題 • API仕様の文章化にSwaggerを使用する、テスト書く ◦ 新規機能追加をする PRを作る際にテストの追加とドキュメントの更新もされていれば Approveする ルールにするなどにすることで、変更の仕組みも作りやすい ▪ Laravelを使用してバックエンド作る際に便利そうなライブラリ https://github.com/DarkaOnLine/L5-Swagger ◦ これらを書くことで機能の詳細ロジックや機能一覧を細かくドキュメントに記載する必要がなくなる
本題に戻る。仕様書に記載すべき項目を調べてみる
記載した項目を振り返ってみる 追記した項目を黄色文字で記載したが、元々のでも最低限は書けていたみたい リリースまで何のドキュメントがないという最悪の状態からでも、とりあえず以下の項目を書けば少しでも将来の自分を救うことができた。 そして仕様書を作成後、無事スムーズに追加機能の実装とリリースができた。 • システムが目指す姿 ◦ このシステムで解決したい課題 ◦ システムの目指すべきゴール
◦ このシステムでは対応しない問題 • システムの概要 ◦ 満たしている要件 ◦ 詳細な仕様 = 機能ごとの説明 ◦ 画面遷移図 • 開発者に必要な情報 ◦ ローカル環境での動作手順 ◦ DBのテーブル構成図 (ER図) ◦ AWSの構成図 ◦ デプロイの手順 ◦ 現状残っている開発上の課題
参考にした資料 仕様書の書き方 https://qiita.com/ko1/items/9f5f1a2683ea54f12362 design-doc-template https://github.com/mercari/production-readiness-checklist/blob/master/docs/refere nces/design-doc-template.md
その他
秘密情報の管理 ローカルで動作確認する時に環境変数やcredentialファイルが必要なケースがあった 環境変数はAWS Systems Managerのパラメータストアで管理し、仕様書にはパラメータスト アのURLを記載するようにした その他GitHubにあげたくないが動作確認に必要なcredentialファイルなどは、Googleドライ ブで特定の事業部の人のみがアクセスできるフォルダにファイルを置いた。 仕様書にはそのフォルダへのURLを記載するようにした
ご静聴ありがとうございました