スクラッチ開発
スクラッチ開発とは
スクラッチ開発とは、システム開発の一種で、既存のソフトウェアやフレームワークを使用せずに、全てをゼロから開発する方法を指します。
スクラッチ開発の種類
スクラッチ開発は、基本的には全てをゼロから開発する方法を指しますが、その範囲や深度によっていくつかの種類に分けることができます。
フルスクラッチ開発
全ての要素をゼロから開発する方法を指します。ソフトウェアの設計、コーディング、テスト、デプロイメントなど、全てのプロセスを自分で行います。この方法は高い技術力と時間が必要ですが、最も自由度が高く、特定の要件に最適化したソフトウェアを作成することが可能です。
ハーフスクラッチ開発
一部の要素を既存のソフトウェアやフレームワークを利用しながら、残りの部分をゼロから開発する方法を指します。例えば、データベースやミドルウェアなどの一部の機能を既存のソフトウェアを利用し、ビジネスロジックやユーザーインターフェースなどをゼロから開発する場合などです。フルスクラッチ開発に比べて開発時間を短縮することが可能です。
ライブラリやフレームワークを利用したスクラッチ開発
特定のライブラリやフレームワークを利用しながら、その上でソフトウェアをゼロから開発する方法を指します。例えば、Webアプリケーション開発であれば、ReactやVue.jsなどのフレームワークを利用しながら、その上で独自のアプリケーションを開発する場合などです。これにより、開発効率を向上させつつ、自由度も保つことが可能です。
プロジェクトの要件や開発者のスキルレベル、時間、コストなどを考慮して、最適な開発方法を選択することが重要です。
スクラッチ開発のステップ
スクラッチ開発における実行ステップは以下になります。
- 要件定義
開発するシステムの業務領域に応じ、業務プロセスの再定義、ソフトウェアの機能や性能などの要件を詳細に定義します。 - 設計
基本設計、詳細設計に分けて実施します。
基本設計では、システムのアーキテクチャーやデータベースの設計、UI/UXの設計などを行います。また、他システムとの連携が必要な場合、システム間のIF設計も含まれます。
詳細設計では、個々のプログラムの詳細な振る舞いについて、定義します。 - 開発
設計に基づき、プログラムのコードを書きます。
開発はシステムの規模によって、機能領域に分けて推進されます。 - テスト
開発されたシステムが想定通りに動作するか、バグが無いか確認します。
テストは以下の種類に分類されます。単体テスト:プログラムごとに動作を確認します。
結合テスト:プログラム間の連携および動作を確認します。
システムテスト:システム全体が想定したシナリオで動作するか確認します。
ユーザー受入テスト:実際の利用者が業務執行を想定して動作を確認します。 - デプロイメント
テストが完了したプログラムを実際の実行環境へ配置し、システム利用を開始します。
スクラッチ開発とパッケージ適用の違い
スクラッチ開発と対比されるシステム開発手法として、パッケージ適用が挙げられます。
スクラッチ開発とパッケージ適用の違いについて説明します。
業務要件への適合性
- スクラッチ開発
業務要件に合わせて機能定義を行うため、適合性の高いシステム構築が可能です。
- パッケージ適用
パッケージ仕様に業務プロセスを合わせる必要があります。
システムの拡張性
- スクラッチ開発
ゼロから構築するため、将来の拡張を意識した柔軟な対応が可能です。
- パッケージ適用
システムの拡張性は、パッケージベンダーのロードマップに依存し、パッケージの機能を超える対応は困難なことが多いです。 -
システム開発の体制規模
- スクラッチ開発
ベンダー体制、自社体制ともに要件定義に相応の規模が必要です。
- パッケージ適用
パッケージ標準に要件を合わせることで、スクラッチ開発に比較して小さい体制での推進が可能です。 -
開発費用
- スクラッチ開発
ゼロから構築するため高額になりやすく、見積査定にも知見が必要です。
- パッケージ適用
パッケージ標準部分は費用が固定化されるため、開発費用を抑えられます。 -
開発期間
- スクラッチ開発
企画・要件定義・設計・開発・テストをゼロから行うため、長期間にわたる可能性があります。
- パッケージ適用
パッケージ標準部の開発は不要なため、スクラッチ開発に比べ短期間で構築が可能です。
スクラッチ開発のメリット・デメリット
メリット
- システムの全体像を理解しやすいため、問題が発生した際のデバッグが容易です。
- 特定の要件に合わせて最適化されたシステムを作成できるため、パフォーマンスが高いシステムを作成することが可能です。
- 既存のソフトウェアやフレームワークの制約に縛られず、自由な設計が可能です。
デメリット
- 開発に時間がかかる可能性があります。
- 既存のソフトウェアやフレームワークを使用する場合に比べて、開発者のスキルレベルが高くなければならない場合があります。
- 既存のソフトウェアやフレームワークが提供するセキュリティ対策やバグ修正などを自分で行う必要があります。