設計をサボると穴ができる!プログラム開発の「要件定義」「基本設計」

設計をサボると穴ができる!プログラム開発の「要件定義」「基本設計」

しょごたん

しょごたん

こんにちは、しょごです。
アニメ「灰と幻想のグリムガル」が良すぎました、絶賛メリィ推しです。

さて、この連載では簡単なWebサービス(掲示板)を構築しながら、バックエンド技術をイチから学んでいきます。

前回の「サーバーの運用編」では、レンタルサーバーへファイルをアップする方法をご紹介しました。今回からは実際に動作するプログラムを作っていきましょう!

と言っても、いきなりプログラミングが始まるわけではありません。プログラムにおいて超重要な「設計」についてお伝えします。

「設計」は、プログラム開発のキモ

プログラミングをする流れはざっとこんな感じです。

プログラム

今回の記事では、ひとつめの「設計」を扱います。

設計はプログラムをおこなう上で一番重要なところで、ここがへっぽこだと何も作れません。実際、プログラミングにかける工数の半分以上は設計が占めると言ってもいいと思います。大規模プロジェクトになると設計だけで一ヶ月以上かけた経験があるくらい、重要なところです。

やりたいことを仕様にまとめる「要件定義」

まずは作りたいものの範囲を決め、やるべきことの仕様をまとめましょう。

どんな掲示板を作る?

今回のゴールは掲示板を作ることですが、掲示板といってもさまざまです。投稿された文章が時系列で表示されるものもあれば、タイトルだけがツリー上になっているものもありますし、画像を登録できるものもあります。

そのため、今回作る掲示板はどのような仕様にするのかを細かく落とし込んでいきます。クライアントがいる場合であれば、どのようなものを作りたいのかをヒアリングし、その詳細を文章化する作業です。これを怠ると、成果物がクライアントの意にそぐわないものになってしまいますからね。

掲示板の機能要件をまとめると…

今回作る掲示板の機能要件を以下でまとめてみました。

投稿者情報
  • 匿名は禁止
  • 連絡先を任意で記入可能
表示件数 新しいものを100件まで表示する
編集・削除
  • 権限をもつ人物を限定する
  • 編集・削除機能を表に出さない
管理者モード
  • パスワード入力で管理者モードに切り替えられる
  • 専用のログイン画面を用意する
  • 投稿の編集・削除が可能

仕様を元に必要事項を考案する「基本設計」

つづいて、上の要件定義をより具体化する「基本設計」に入ります。どのような機能が必要で、どのような画面で展開するのか、詳細なルールをまとめていきましょう。

基本設計のなかでもいくつか工程がわかれるため、「方式設計」「機能設計」「その他の設計」にわけてお伝えします。

プラットフォームを設計する「方式設計」

ハードウェア・ソフトウェアの構造や実装方針を設計します。

主に、インフラ・ミドルウェア、プラットフォーム、フレームワークなどの実行環境を設計します。また、アプリケーション全体の構造を設計したり、開発基準やテスト方式を決定します。

今回は以下の要件とします。

  • 前回用意したレンタルサーバーを利用
  • PHP5系にて構築(フレームワークは利用しない)
  • データベースはMySQL5系を利用

PHPとデータベースは、レンタルサーバーによって使えるバージョンが異なります。今回は大体のレンタルサーバーが対応している5系を選びました。

機能ごとに細かい仕様を決める「機能設計」

実際に組むシステムを機能ごとに分類して細かい仕様を設計します。

  • どのようなUIにするか決定する画面設計
  • データベーステーブル構造を決定するデータベース設計
  • 基本ルーチンに加えて、別途実行させる処理を決定するバッチ設計

などをおこないます。

今回作る掲示板では画面設計を省略し、下記の機能要件を満たすものを構築します。

  • 名前、メールアドレスをセットにした文章を投稿できる。
  • 名前と文章のみ必須項目で、メールアドレスが付与された場合は名前にリンク付与される。
  • 投稿データはデータベースに保存される。
  • 投稿は時系列的に最新順で表示される。表示数は最大100件まで。
  • 100件以降の投稿は表示されない。
  • 管理者モードが存在し、パスワードを入力すると切り替えられる。
  • 専用のログイン画面にパスワードを入力すると、管理者モードへログインすることができる。
  • 管理者モードでは投稿の編集・削除をすることができる。

投稿データはデータベースに保存し読み書きをおこないます。
必要なテーブルとして、

投稿テーブル[post]
  • 投稿ID[id](int 6 auto_increment)
  • 名前[name](varchar 100)
  • メールアドレス[email](varchar 256)
  • 文章[body](varchar 5000)
  • 作成日時
    (datetime)
  • 更新日時[updated_at](timestamp)
  • 削除日時[deleted_at](timestamp)

としましょう。
上記の[]内はテーブルやカラム名称。()は識別とします。投稿IDは、セルが追加されるタイミングに自動で値を振り分けるため、auto incrementを適用させます。

その他の設計

今回はおこないませんが、セキュリティ設計や運用設計をおこなったり、各機能をどのように構築すれば性能を満たせるのかを決定したりする「詳細設計」などがあります。

システムの規模が大きくなればなるほど、設計すべき項目は多岐にわたります。必要に応じて正しく設計をおこなってください。

まとめ

ものづくりにおける「設計」は、理想的なカタチにするために必要な道筋を整えたものです。家屋やプラモデルも、何もない状態から作ることはできません。それぞれ構造を形成するための設計図があって、初めてカタチとなります。

設計をおろそかにすると、出来上がったモノに穴があったり思わぬところで正しく動かなかったりしまいますので、最初の設計をしっかりおこないましょう。

次回は、上記設計を元に掲示板を開発いたします。

ほんならまたなー。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

しょごたん
しょごたん バックエンドエンジニア / 徳山 翔悟

エンジニアのしょごです。昼はシステム開発に奮闘し、夜は女冒険者として剣とか魔法とか扱ったり、たまにバンドでライブとか、イベントでコスプレしたりしてます。

このメンバーの記事をもっと読む
バックエンドへの道 | 58 articles