プログラミング

【2022年最新】サービス開発のプロセスを解説(失敗しない方法)

サービス開発のプロセスをわかりやすく解説

・サービス開発はなにからすればいいの?

・どうやって作れば失敗しないか知りたい

・他の人がどう作ってるのか知りたい

本記事は、こういった人に向けた記事です。

プログラミングを学び、サービス開発したい人は
参考にしてみてください。

疑問

どうやってwebサービスを作ればいいかわからない…

パロット

サービス開発は、手順が決まってます!

手順を公開します

エンジニアになりたい人だけに向けた記事

【未経験でも失敗しない】バックエンドエンジニア求人と探し方を解説

※転職や就職で失敗したくない人は、どうぞ

本記事の結論

5ステップでサービスは作れる

詳しく解説

サービス開発のプロセス:5ステップ

サービス開発のステップは、こちらです。

サービス開発のプロセスの図
サービス開発のプロセスの図
パロット

多そうですが、簡単!

順番に具体的に解説します!

サービス開発の5プロセス

・プロセス1 … 要件定義( = なにを作るか決める)

・プロセス2 … 外部設計( = どう作るかザックリ決める)

・プロセス3 … 内部設計( = どう作るか細かく決める)

・プロセス4 … 実装  ( = 作っていく)

・プロセス5 … デプロイ( = 作ったものをサーバに置く)

それぞれのステップを解説していきます。

その前に覚えておいて欲しいのは、こちらのこと!

プロのエンジニアは、すべての作業ができる必要がある

最初はどれか1つでもOK

たくさん数をこなすとできるようになるので挑戦していきましょう!

良本もあるので参考にどうぞ

お金をドブに捨てないシステム開発の教科書 ~なぜ、要件定義がうまくいっても使えないシステムができてしまうのか?

さっそく、具体的に見ていきましょう!

プロセス1 … 要件定義

パロット

要件定義は、

なにを作るのかを決めることだよ!

要件定義は『機能要件』と『非機能要件』があります。

要件定義でやること

 1.機能要件を決める
  (ページ構成とか、ログインやいいね機能とか)

 2.非機能要件を決める
  (セキュリティとか、監視とか)

機能要件(作ってほしい機能)

機能要件とは、システムで作ってほしい機能のことを指します。

機能要件でやること

 1. 実装する機能を一覧で書く

 2. ページごとに機能を分ける

 3. 異常時に、どのような操作をするか決める

Twitterを例にして考えていきましょう。

Twitterの機能要件

・トップページには、呟き一覧が表示されている

・非会員はメールアドレスとパスワードで会員登録できる

・ログインができる

・ログイン後は、ユーザは呟くことができる

・ログイン前は、呟くことはできない

サービスの要件定義のコツは、ページごとに機能を書き分けることです。

機能を羅列すると、どのページに機能を実装するべきかわかりにくいです。

ページごとに実装するべき機能を分けましょう。

また異常時にどのような機能をするかということを決めるのも重要です。

Twitterの機能要件(異常のとき)

・ログイン失敗したら、エラー画面を出す

・呟きに失敗した際は、下書きに保存する

・DB障害時、ユーザにはエラー画面を見せる

非機能要件(機能ではないけど守ってほしいこと)

非機能要件とは、実装する機能ではないけど守ってほしいことです。

非機能要件でやること
1. セキュリティ対策は、どうするのか
2. システムの監視や通知は、どのように行うか
3. システムの運用は、どう行うのか
4. SLA, SLOは、どうするのか

(1)セキュリティ対策は、どうするのか?

セキュリティ対策の要件では、どのようなセキュリティ対策をどこで行うかを決めます

サービス開発において、セキュリティ対策は必ず行う必要があります。

どこにセキュリティホールがあるのか、どのようなリスクがあるのかを判断し、セキュリティ対策を行わないといけません。

Twitterのセキュリティ対策

・存在するIDに対してパスワードエラーが複数回起きたら、
一定時間アクセス禁止にする

・ツイートの投稿フォームは、SQLインジェクションできないようにする

・ロボットが登録できないように画像内の文字読み取りを行う

(2)システムの監視や通知は、どのように行うのか

システムの監視・通知要件では、監視項目や異常時の通知方法を決めます

エラーが起きたとき、管理者は対応する必要があります。

Twitterのシステムエラーの監視

・ユーザが呟いたけど、DBが落ちていてエラー

・ほかサイトのAPIを利用しているが、APIが繋がらない

・不正ユーザが不正ログインしようとした際、複数回エラー

TwitterのCPUなどに関する監視

・CPUやメモリの利用率は問題ないか

・セッションのスループットは上がっていないか

・レイテンシに問題はないか

サーバに問題がないかということも把握する必要があります。

(3)システムの運用はどう行うのか?

システム運用の要件定義では、システムの運用者はどのような手順でシステムを利用するのか、誰が運用するのかということを決めます

システム運用設計は、CtoCのサービスではあまり見ませんが、業務を楽にする支援系システムでは定義を行う必要があります。

運用設計の例

・業務ツールのアカウントは誰が発行するのか?

・入稿物のチェックはどういうフローで行うのか?

(4)SLA, SLOはどうするのか?

SLA, SLOとは、サービスが守るべき基準を定めたものです。

SLAはユーザとの約束です。

守るべきルールが書いてあり、守れなかった場合にユーザに迷惑がかかる基準を決めています。

SLA, SLOの例

・10分以上連続でアクセスができない状態にしない

・1日以上会員登録機能が落ちてはいけない

要件定義でやることのまとめ
  1. 要件定義には『機能要件』と『非機能要件』がある
  2. 機能要件は、作る機能のことを定義している
  3. 非機能要件は、作る機能ではないがサービスとして守ってほしいことを定義している

プロセス2 … 外部設計

パロット

外部設計は、

どう作るのかザックリ決めることだよ!

外部設計では、こちらのことをやります。

外部設計でやること

 1.画面設計を決める

 2.システム構成を決める

 3.DB設計を決める

(1)画面設計

画面設計では、画面フロー図や画面の構成図を作成します。

画面フロー図とは、画面と画面の関係を線で繋いだもので、
どの画面とどの画面が繋がっているかということを記載しています。

画面の構成図は、各画面はどのようなUIで作成されているかを記載しています。

(2)システム構成図(システム設計)

システム構成図の作成では、システム全体はどのように繋がっているかということを作成していきます。

例えば『フロントエンドサーバ』と『バックエンドサーバ』と『DB』で構築されていて、それぞれは直列に繋がっている『三層構造』は有名なシステム設計と言えます。

(3)DB設計

DB設計では、DBはどのようなカラムを持っているかということを作成していきます。

この時、DB設計では下記の2点を決めていきます。

1 … DBカラムの論理名 … 人間がわかる言語で記したカラムの意味
(名前, 年齢, 性別, 生年月日など)

2 … DBカラムの物理名 … DB内の実際のカラム名
(name, age, gender, birthdayなど)

外部設計でやることのまとめ
  1. 外部設計には画面設計、システム設計、DB設計がある
  2. 画面設計は、画面の構成図と画面フロー図を作成すること
  3. システム設計は、システム全体がどのように構成しているか考えること。どのように繋がっているか考えること
  4. DB設計は、DBがどのようなカラムを持っているか考えること。論理名と物理名を考えること

プロセス3 … 内部設計

パロット

内部設計は、

どう作るのか細かく決めることだよ!

内部設計では、こちらのことを決めていきます

内部設計でやること

 1.クラス図の作成

 2.インターフェースの設計

 3.シーケンス図の作成

 4.フローチャートの作成

(1)クラス図の作成

クラス図の作成では、外部設計で作成した機能をもとに必要なクラス図を分割していきます。

クラス図の作成の流れ
1. 必要なクラスを作成する
2. クラスを線で結ぶ

クラス図を作成するために必要なこと
・クラス名
・クラスの変数
・クラスのメソッド

クラス図を決める上で重要なことは、完璧なクラス図を作成しようとしないことです。全ての想定通りの完璧なクラス図を作成しようとすると、時間がかかる上に要件が変わった時に対応しにくいというデメリットがあります。

そのため、完璧なものではなく徐々に要件に合わせていくという心構えで作成しましょう。

(2)インターフェースの設計

インターフェース設計とは、クラスやメソッドがどのように呼び出されるのかということを記載していくことです。

インターフェース設計を行うことで、インプットとアウトプットが明確になり、実装を分割することができます。

(3)シーケンス図の作成

シーケンス図の作成とは、ユーザやシステムの機能が入力を受けてから一連の動作が完了するまでの時系列の流れを作成することです。

シーケンス図の作成を行うことで、内部の処理が明らかになり、曖昧な設計の場合は気がつくことができます。

できる限りシーケンス図の作成は行いましょう!

(4)フローチャートの作成

フローチャートの作成とは、ユーザやシステムの機能が処理を開始してから終了するまでの条件分岐を含むロジックを作成することです。

一見すると、シーケンス図の作成と似ているようですが、シーケンス図では条件分岐や繰り返しなど論理構造をわかりやすく伝える役割があります。

そのため、下記のようにシーケンス図とフローチャートを使い分けると良いでしょう。

シーケンス図とフローチャートの使い分け

時系列データの流れを正常系のみ書きたい場合
→ シーケンス図

条件分岐や繰り返しなど分岐を含む処理を書きたい時
→ フローチャート

内部設計でやることのまとめ
  1. 内部設計では、クラス図の作成と、インターフェースの設計と、シーケンス図の作成と、フローチャートの作成を行う
  2. クラス図の作成は、必要なクラス全て記載する
  3. インターフェース設計は、クラスやメソッドがどのように呼び出されるか記載する
  4. シーケンス図の作成は、ロジックを時系列データとともに作成する
  5. フローチャートは、条件分岐や繰り返しなど分岐を含む処理を記載する

プロセス4 … 実装

パロット

実装は、

プログラミングして作っていく工程だよ!

実装では、内部設計で作成したクラスやインターフェースを作成したり、フローチャートで作成したロジックをプログラムに落とし込みます。

実装はこちらのステップで行うことをお勧めします。

実装のステップ

 1.正常系の実装

 2.異常系の実装(例外処理)

 3.監視や通知など異常検知の実装

(1)正常系の実装

正常系の実装では、クラス図やシーケンス図で作成したロジックをプログラムに落とし込みます

正常系の実装で行わないことの例
・ログインが失敗したときの実装
・APIのコールの失敗時の処理
・処理の結果、0件だったときの処理

正常系の実装では、常にうまくいったときの処理を記載していきましょう。

(2)異常系の実装(例外処理)

異常系の実装では、正常系の実装の過程で例外を出すメソッドや、障害時の処理を記載していきます。

異常系の実装で行わないことの例
・異常が起きた際に、携帯に電話
(通知系は別作業にする)

異常系の処理は例外処理とも呼ばれることから、通常はおき得ないことの対処を行うため少し難しいですが、慣れると型化できるため意識しましょう。

(3)監視や通知などの異常検知の実装

監視や通知などの異常検知の実装では、異常系の実装で捕捉した例外があった際に通知する処理を記載していきます。

こちらは、異常系の実装はすでに行われているため簡単に実装することはできます。

実装でやることのまとめ
  1. 実装では、正常系の実装と、異常系の実装と、監視系の実装を行う
  2. 正常系の実装では、全てうまくいった想定で実装を行い、途中でエラーになることは考えない
  3. 異常系の実装では、動作の途中でエラーになったことを想定して実装を進める
  4. 監視系の実装では、異常系の実装で捕捉した例外を必要に応じて電話やメールやslackなどのシステムの管理者がわかるように実装する

プロセス5 … デプロイ

パロット

外部設計は、

サーバにアプリを置くことだよ!

デプロイとは、作成したアプリケーションを動作する場所(サーバ)に配置することです。

例えば、Herokuを利用したアプリケーションであればHerokuにpushすることをデプロイとも呼びますし、AWSを利用したアプリケーションであればAWSにアプリケーションを配置することをデプロイと言います。

デプロイの例

  • Heroku環境にpushすること
  • AWS環境にアプリケーションを配置すること
  • firebase functionsにデプロイコマンドを叩く

開発環境によって、言葉の使い分けましょう

デプロイでやることのまとめ
  1. デプロイは、サーバにアプリケーションを配置すること
  2. herokuであればheroku push、AWSであればAWSにアプリを配置することがデプロイ
  3. 自動デプロイができると、手動で配置する作業が自動化できて手間が少ない