
このたび、来栖川電算のバータイムにて、「基本設計のワークフロー共有会」が開催されました。
今回のブログでは、そこで共有された基本的な知識を共有します。
※本記事で解説するワークフローや考え方は、あくまで一般的なソフトウェア開発における基本設計の解説としてまとめたものです。来栖川電算が現在、必ずしもこの手順や考え方に従って開発を行っているわけではありません。
はじめに:なぜ今、基本設計なのか
近年、AI技術の発展により、実装(コーディング)やテストコードの作成など、開発プロセスの一部がAIによって代行される時代が来ています。
このような背景から、エンジニアが今後価値を出し続けるために必要な能力として、「設計」の技術・知識・経験が重要視されています。
AIが実装を担うようになると、人間は詳細な実装よりも、上流工程である基本設計や要件定義・AIが出してきた実装を設計や方針に従って修正指示を出す役割を担う必要が出てきます。
今回の共有会は、こうした設計の重要性が高まる中で、一般的なソフトウェア開発における基本設計の全体像と具体的な進め方についてまとめた内容を共有することを目的として開催されました。
会の対象者

この会の主な対象者は、実装はできるものの、基本設計については理解が曖昧であったり、経験がまだ少ない開発エンジニアでした。
共有された主な内容:システム開発の全体像と基本設計
システム開発のライフサイクル全体(企画から運用・保守まで)の中で、基本設計は要件定義によって決定された内容(要件)を基に、システム全体の構造や動作、振る舞いを定める工程です。
基本設計で考慮すべき主要な検討事項として、以下のものが示されました。
1. システム方式設計(システム全体に関わる設計)
システム方式設計では、システム全体に共通する設計方針や環境を決定します。
- ■システム境界の確定: 開発対象となるシステムと外部システムとの連携範囲やインターフェースを明確にします。特に外部連携するシステム側のインターフェースは容易に変更できないため、初期に確定させることが非常に重要です。
- ■ハードウェア/ソフトウェア環境の決定: 例えば開発基盤をクラウドにするか、オンプレミスにするかを決定します。この決定は、以降の設計に大きな影響を与えます。この判断は要件定義の段階で決まっていることが多いですが、基本設計においても重要な要素です。
- ■アーキテクチャ設計: システム全体で共通するアーキテクチャ(例: どのクラウドサービスを使用するか、オンラインアプリケーションやバッチ処理にどのフレームワークを採用するか)を検討し、統一します。
- ■業務ワークフローの検討: システムを利用する際の各処理がどのような順序で行われるかを明確にします。これは業務フロー図やシーケンス図などで表現されます。
- ■システム構成の検討: 業務ワークフローを実現するために、どのようなアプリケーション単位が必要か、アプリケーション間で処理やデータがどのように流れるかを検討します。
- ■インフラ設計: サーバーやネットワーク構成の設計を行います。オンプレミス開発では購入や設置に時間がかかるため、特に慎重かつ専門的な設計が必要です。性能担保のためのスケールアウト基準も検討します。
- ■開発標準の設計: 開発で使用するツール(例:Git、パッケージマネージャー)、コーディング規約など、システム開発を進める上での共通ルールを定めます。
- ■共通部品の設計: 複数のアプリケーションで共通して使用される機能(例:エラー画面、ログ出力方式、ログのフォーマットや格納場所)を設計します。
2. アプリケーションごとの設計
システム全体の方針が定まった後、個別のアプリケーション設計に入ります。
- ■インターフェース設計: アプリケーションが受け取る入力と、実行する出力(HTTP、ファイル、キューメッセージ、ログなど)を設計します。この設計を早期に行うことで、各アプリケーションが連携するルールが明確になり、並行開発が可能になります。
- 特に画面設計は、ユーザーの利便性(UX)の向上や、潜在的な要件を引き出す上で非常に重要です。ユーザー入力がある場合は、セキュリティ(例:クロスサイトスクリプティング、SQLインジェクション対策)を十分に考慮したバリデーションの設計が求められます。
- ■機能設計: アプリケーションが具体的にどのような処理を行い、状態変化を伴うかを設計します。機能設計全体が要件定義で定められた機能要件を網羅しているかを確認します。
- ■データ設計: アプリケーションが使用するデータの構造や、データベースへの永続化の方法を設計します。ER図やデータ表を作成し、データ間の関係性や、高速な検索に必要なインデックスなども検討します。データの特性(読み込み中心か、書き込み中心か)に応じて、適切なデータベースフレームワークを選定します。
3. 運用設計
システムが稼働した後の運用方法を事前に設計します。ログ監視方法、インフラ障害時のアラート発報基準、アラート受信時の運用メンバーの対応手順、エラー発生時の対処方法などを策定しておきます。
この共有会は、設計の知識や経験がまだ浅いエンジニアにとって、体系的な設計ワークフローを学ぶ良い機会となったと思います。
今後の業務において、より広い視野で設計に取り組むための基盤となる知見が持ち帰られたと考えられます。
本記事を読んだみなさまにも、よい知見をお持ち帰りいただけたならば幸いです。
ありがとうございました。