パッケージシステムでは「思ったような開発ができない」という問題に直面することがあります。そこで、独自性の高い開発手段を探す企業におすすめな方法の1つが「スクラッチ開発」です。
スクラッチ開発にしかない特徴やメリットがあり、それらを知ることでシステム開発の方法の選択肢を増やすことができます。
本記事は、スクラッチ開発の定義や他の開発手段との違い、開発時のメリット・デメリット、活用事例、大まかな開発の流れなどを解説します。
目次
1.スクラッチ開発とは
スクラッチ開発は、パッケージシステムや製品、既存のコードに頼らず、独自にシステムを開発する手法のことです。
スクラッチの意味と用法
「スクラッチ(scratch)」という言葉には、「引っ掻く」という意味もありますが、「start from scratch」のように「1から始める」という使い方もできます。
ITビジネス分野ではこの用法で「初めから」「1から」という意味で使っています。そのため、スクラッチ開発は「オーダーメード」や「オリジナル開発」と同義です。
スクラッチとフルスクラッチに違いはある?
フルスクラッチは、スクラッチに「フル」と付いており「すべて」「全部」の意味を加えた用語です。しかし、スクラッチ開発の基本は、独自開発で1からすべて開発することが基本のため両者は同じ言葉です。
しかし、言葉で開発の独自性を強調する、他の開発方法と比較しやすいようにするために「フルスクラッチ」と呼ぶことがあるのです。したがって、わずかなニュアンスの違いがあるだけで、明確な定義上の違いはありません。
2.スクラッチ開発は時代遅れか?開発手法の違い
さまざまな開発手法が登場する昨今、スクラッチ開発が「時代遅れではないのか?」という疑問を持つ方もいます。2020年以降、パッケージシステムやノーコード、ローコードを使用する企業もあるでしょう。
そこで、これらの違いについて以下に解説します。
パッケージシステムとの違い
パッケージシステムは、スクラッチ開発と真逆の開発手法です。開発時に既製品(パッケージシステム)を利用してシステムを構築します。
製品を選び、自社に導入してベンダーがそれを管理します。そのため、軽くカスタマイズする場合でも開発の期間は長くありませんし、費用が大きく膨らむことはありません。開発中の問題も起こりにくいのです。それらの点で、スクラッチ開発とは対照的です。
ノーコードやローコードとの違い
ノーコードやローコードは、視覚的なプラットフォームを利用して直感的にシステム構築ができる手法のことです。
ノーコードでは、一切コードを使用せずにブロックなどの視覚的な方法とマウス操作で開発します。ローコードは、最小限のコードのみで作成し、他はノーコードと同じように視覚的なマウス操作で組み上げることができます。
一方、スクラッチ開発では、基本的に組み上がったコードやテンプレートを使用せずに開発するため、ノーコードやローコードを使用しない開発手法です。
そのため、ノーコードやローコードは、スクラッチ開発には含まれません。ただし、ノーコードやローコードでスクラッチ開発に限りなく近い独自のシステム構築やユニークなアプリ開発はできます。
アジャイル開発との違い
アジャイル開発は、機能単位で開発する手法のことです。システム全体を通して開発するのではなく、機能ごとに集中して開発するため、開発工程がスピーディで回転が早い特徴があります。
途中で仕様を変更しても対応がしやすいため、全体の修正で足止めされるなどのよくある問題を避けることができます。
そしてスクラッチ開発は、アジャイル開発やウォーターフォール開発などの手法を含みます。つまり、異なる手法ではなく、開発工程を進めるために必要となる「スクラッチ開発をアジャイル開発で進める」というような入れ子構造の関係にあります。
スクラッチ開発は外注か内製か
開発手法に関連して、スクラッチ開発は外注と内製があります。外注は、ベンダーを選定して依頼する方法です。そこの技術者やその下請け会社が開発を担います。要件定義を出すなど、要望を伝えてそれをもとにシステムを構築する流れです。
外注が基本のスクラッチ開発は他の開発手段よりも費用がかかりやすく、外部の手を借りることで企業間関係の悪化から保守管理のリスクが生じるなど欠点があります。費用と時間をかけて、あえて内製を選ぶかどうかはその会社次第です。
しかし、自社にエンジニアが少ない場合やまったくいない場合は内製が難しく、新たに人材を採用して体制を構築するのは大きな労力とコストがかかります。そのため、外注が基本となります。自社で開発できる企業の場合でも、その手間やコストから内製を避けることも珍しくありません。
3.スクラッチ開発の4つのメリット
スクラッチ開発はその特徴に見合ったメリットがあります。
メリット1.独自開発ができる
1つ目のメリットは、既存のフレームワークやコードを使用しないため、独自性を強めた開発ができることです。開発の自由度が高く、ライブラリやフレームワークに依存しません。スクラッチ開発にできない開発はないほどです。
例えば、デザインにこだわったり、他社製品にはない機能を盛り込んで独特のシステムを組み入れたりすることが容易です。
メリット2.カスタマイズがしやすい
2つ目のメリットは、カスタマイズが容易なことです。パッケージシステムや既製品ではカスタマイズができないか、できてもその範囲は限られており、自由に追加や変更ができません。
しかし、スクラッチ開発は仕様変更やカスタマイズを柔軟に行えるため、制限を受けにくい特徴があります。
メリット3.長期的な利用に適している
3つ目のメリットは、長期的な利用に向いていることです。スクラッチ開発には、製品のサポートが終了して利用ができなくなるなどの問題が起こりにくいのです。
製品のバージョンアップがされなくなり、継続利用できなくなると短期的にシステムを変える必要が出てきます。その点、スクラッチ開発はベンダーにシステムの維持を依存してしまうことがありません。
ただし、長期的に同じシステムを使うことについては、ベンダー側の担当エンジニアがいなくなることでブラックボックス化のリスクもあります。このメリットを求める場合は注意が必要です。
メリット4.競争優位性を築ける
4つ目のメリットは、他社に対して競争の優位性を築けることです。独自に開発したシステムは、他社に頼らなくても、自社のシステムでまかなうことができます。そのため、そのシステムが優れているほど、他者にはできないことを可能にし、利益の最大化を図ることが可能です。
また、スクラッチ開発でBtoB製品の開発を進めた場合、パッケージ製品との類似性を避けて市場で競合他社の優位に立つことも可能です。開発したシステム次第では、製品提供などを通じて、長期的な需要につながることもあります。
4.スクラッチ開発の4つのデメリット
スクラッチ開発には、次のようなデメリットもあります。
デメリット1.開発コストが高くなりがち
1つ目のデメリットは、数ある開発手法の中でもコストがかかりやすいことです。既製品を導入するのとは違い、最初から最後まで開発作業に人件費がかかります。
外部に任せるなら利益を含む開発費用を請求されます。そのため、開発工程のコストを大きく抑えるのが難しい開発手法です。
デメリット2.開発期間が長い
2つ目のデメリットは、開発に時間がかかる方法なことです。システムを1から独自に開発することは、エンジニアが企業の求めに応じたオリジナルのシステムを作り出す必要があります。
開発がスムーズにいかないケースもあり、途中で仕様変更があればそれに対応する時間やコストも必要です。システムの規模が大きくなるほど開発期間も長くなります。
無理に開発時間を短くすると、致命的なエラーやバグが発生することもあるため、期間の大幅短縮もできません。要望に見合ったシステム開発ができるようにするためには、どうしても開発時間がかかるのです。
デメリット3.開発内容に合わせたベンダー選び
3つ目のデメリットは、開発内容に合わせたベンダー選びが必要になることです。
費用を支払って本格的なシステムを開発したいときほど、慎重にベンダーを探す必要が出てきます。思いつきで気軽に決めることはできません。
特に、開発要件にあった会社を選ぶのは大変です。担当エンジニアが技術を持っていることが求められます。しかし、外から専門の高い技術を持っているか確かめるのは難しいものです。
また、開発して終わりではなく、それを保守管理するエンジニアが専門知識を持つことも必須です。その技術やサポートの質も見極める必要があります。最終的には見積もりや提案書、実績を踏まえて判断することが重要です。
デメリット4.専門的な知識・スキルが必要
4つ目のデメリットは、スクラッチ開発を実現するためには、企画・開発する自社の担当者やエンジニアに専門的な知識・スキルが必要となることです。パッケージ等の利用をせず、ノーコードやローコードも使わないため、特にプログラミングの高度な知識やスキルは不可欠となります。
このデメリットを踏まえてスクラッチ開発を進める場合は、自社SEや依頼先のベンダーに開発に足る知識やスキルの有無を確認することが重要です。
5.スクラッチ開発を活用した事例
ここでは、スクラッチ開発によってシステム開発する場合の3つの活用できる事例について取り上げます。
アプリ・ゲーム開発
スクラッチ開発では、アプリやゲームの開発に利用されることがよくあります。アプリとはアプリケーションのことです。
WEBアプリ
ネイティブアプリ
ハイブリッドアプリ
アプリには以上の3つの種類があります。
「WEBアプリ」は、WEB上で動くアプリのことです。「ネイティブアプリ」はOSにインストールしてWEB環境がなくても起動できるアプリのことを指します。そして、これらを組み合わせたのが「ハイブリッドアプリ」です。
アプリ開発ではこれらの種類を決めて開発を始めますが、スクラッチ開発ではこの全てに対応できます。その上で、アプリやゲームを開発する際に、細かい設定やサーバーを含む大規模開発、オリジナルアプリの開発が可能です。
ゲーム開発は近年、ノーコードやローコードで個人開発もできるようになったため、1から作る必要がなくなっています。しかし、仕様を大きくは変えられませんし、作れるゲームの自由度にも制限が付くでしょう。スクラッチ開発はこのような制約を受けないため、機能や自由度にこだわったゲームを作るのに向いています。
基幹システムの開発
スクラッチ開発は、基幹システムの開発にも使うことができます。基幹システムは、社内の主要業務を支える重要なシステムです。
その開発の際に、システムを「会社内の閉じたものにしたい」という要望にもスクラッチ開発は対応できます。企業がクラウド利用を検討する際にある要望で、パッケージではなくスクラッチ開発を選択する理由となるのです。
したがって、セキュリティに力を入れたいときやランニングコストの負担を抑えたいとき、使い勝手を高めたいときなどで企業の味方になります。
管理システムの開発
企業は通常、業務に何かしらの管理システムを採用しています。ECなら物流管理や受注管理システム、在庫管理システムなどが代表的です。主に、業務効率化や企業が抱える悩み・課題を解決する方法としてシステムが導入されています。そのシステムを導入する際に、スクラッチ開発をすることがあります。
業務用管理システムは、企業に共通するシステムが製品化されているため、パッケージシステムのほうが導入されやすい傾向にあるのです。しかし、企業によっては管理システムが既存の業務と共通しない特殊なものや、機能が求めているものとは違うものもあります。そこで、管理システムの開発にスクラッチ開発を活用するのです。
6.スクラッチ開発の手順や流れ
ここでは、スクラッチ開発の大まかな5つの工程について解説します。
要件定義
まず、スクラッチ開発を進めるためには、要件定義を作成する必要があります。要件定義とは、システム開発の具体的な機能や性能を決めるために、必要となる要件をまとめたものです。システムにどのような機能を搭載して、どういった性能を持たせるか、決めるために必要なものです。
システム設計
次に、スクラッチ開発では、システム設計を行います。設計の工程には「方式設計」「基本設計(外部設計)」「詳細設計(内部設計)」があります。
まず「方式設計」では、ハードウェア・ソフトウェアの構成、ネットワークの構成、外部I/F、アプリケーションアーキテクチャなどの定義を決定します。その後、外側の「基本設計」、ユーザーからは見えない内部の「詳細設計」の順で、機能を設計します。
実装
設計の工程を終えたら、次はプログラミングによる実装です。ベンダーに外注した場合、依頼した会社は実装に口をだすことはなく、開発側に任せるのが一般的です。
そのため、内製の場合はプログラマやエンジニアに作業を任せますが、外注で進める場合は進捗を聞きながら実装の完了を待つことになります。
テストの実施
開発したシステムが正しく稼働して、希望した機能や性能、仕様を有しているか確認する工程です。問題があれば前の工程まで戻って修正となりますし、問題なければ実際の運用準備に入ります。バグが見つかるのは、この段階が一般的です。
ただし、要望とは大きく異なったシステムが確認された場合は、その場の判断が求められます。選択肢としては、費用と時間をかけてでも最初から作り直すか、そのままの機能で運用を開始するかです。
特にスクラッチ開発では、最初の要望通りにシステムが作られるケースは稀のため、許容範囲を事前に決めておくことが大切です。
運用の開始
テストをクリアしたら、最後の工程は運用です。自社のシステムならデータ切り替えとシステム整備の後に社内公開、製品ならリリースとなります。
スクラッチ開発の場合、運用開始後も問題なく利用が続けられるためのメンテナンスや保守管理が必要です。会社によっては、バージョンアップや機能拡張を追加するケースもあります。
7.スクラッチ開発する際の注意点
スクラッチ開発にはさまざまなメリットがあり、企業にとってはシステム開発の大きな手助けとなります。しかし、スクラッチ開発は、準備段階において以下のような注意点にも気をつける必要があります。
予算と期間が十分にあることの確認
スクラッチ開発はトータルで多くの費用と時間が必要になります。しかし、企業は製品開発のゴールとなる時期や、開発に投資できる予算が決まっています。
事前に予算と期間を確認し、その上で予定時期を過ぎないように管理することが求められるのです。その際は、大きく予算をオーバーしない工夫が必要です。特に、仕様変更や拡張、カスタマイズなどの作業が途中で追加された場合に、予算がかさむことになるため気をつけましょう。
また、スクラッチ開発ですべてが予定通りに行くことは稀のため、余裕を持った計画を立てます。途中、遅れが出ないように進捗管理も大事です。
スクラッチ開発以外の開発も検討する
スクラッチ開発は自由度の高いシステム開発です。しかし、開発の手段は1つではないため、スクラッチ開発以外も選択肢に入れます。なぜなら、パッケージ開発やローコード、ノーコードなど、スクラッチ開発にはないメリットをそれぞれが持っているからです。
例えば、業務システムを作る際に、開発時の自由度はさほど必要なく、既製品や既存コードで対応できる場合は、無理にスクラッチ開発する必要はありません。既製品と同じようなものをただ作ることは、時間とお金を無駄にするだけです。
スクラッチ開発でなければできない開発や、有利になる開発にはスクラッチ開発を優先すべきとなります。しかし、それ以外は別の選択肢も検討した上で開発方法を決めることが大事です。
要件定義を明確にする
要件定義を作成するときに、定義内容を明確にすることも注意点の1つです。要件定義は、開発の設計や機能の実装をするときのベースとなる情報です。
その要件定義が曖昧で不十分だと、ベンダーに要望が正確に伝わらず、全工程のやり直しや進行の遅れが出ます。費用や期間を無駄にしないためにも、要件定義はしっかりと決めておくことです。
関連記事
要件定義と要求定義の違いは?進め方と注意するべきポイントなどを徹底解説!
パッケージシステムって?基本的な仕組みは?メリット・デメリットや導入手順を解説
8.スクラッチ開発のよくある質問
ここでは、スクラッチ開発に対するよくある質問に回答します。
スクラッチ開発は英語?
スクラッチ開発は「scratch」という単語が使われている英語表現です。ただし、フルスクラッチの場合は、プラモデル業界で使われている和製英語です。正確には英語で「start from scratch」のところを、和製の「フル」+「スクラッチ」で表現しています。
スクラッチ開発を通じてスキルアップする方法は?
スクラッチ開発はプロジェクト規模の大小もさまざまです。そのため、プログラミングを学習しているエンジニアの社員が、自社開発に携わることでスキルアップが可能となります。
ただし、外注依頼してベンダーに任せる場合は、社員が開発に携わることがないため、スキルアップはできません。企業としても外注は、自社にスキルが蓄積しないという欠点があります。
向いている開発、向いていない開発は?
スクラッチ開発に向いているのは、コア業務に使う基幹システムの開発やカスタマイズを自由にしたい拡張性重視の開発です。一方で、スクラッチ開発に向いていないのは、予算が少なく期間が短い開発、コア業務に使わないシステム開発などです。
関連記事
リバースエンジニアリングとは?活用メリット、活用分野、違法性を含む関連知識を解説
9.まとめ
今回は、スクラッチ開発が他の開発手法と違う点やメリット・デメリット、事例、開発工程を解説しました。スクラッチ開発は、独自の開発を得意としており、パッケージシステムのようなカスタマイズや仕様変更に制限のある開発とは対照的な開発手段です。
そのため、開発自由度の高さから期間や費用が膨らみやすいのがデメリットです。また、テストの段階で要望との乖離が大きくなりすぎないように注意が必要です。
以上を参考に、自社システムのスクラッチ開発を検討しましょう。
本記事が皆様にとって少しでもお役に立てますと幸いです。