ソフトウェア開発とは、コンピュータプログラムやアプリケーションなど、ソフトウェアを設計、実装、運用するための一連のプロセスのことです。

本記事では、ソフトウェア開発の概要や種類、開発プロセスについて解説します。ソフトウェア開発の特徴や具体的な事例、開発に関わる職種などについても分かりやすくまとめました。

新たなプロジェクトに向けてソフトウェア開発を検討している場合に

「自社が作りたいものに近い事例について知りたい」
「どういった人材や要件が必要になるのか」
「ソフトウェア開発はどのように進めるのがいい?」

といった疑問を抱えている方も多いのではないでしょうか。

そこで本記事では、2011年の創業以来、多くの企業に対してソフトウェア開発を支援してきたグッドパッチが、ソフトウェア開発の基本的な考え方やプロセスを分かりやすくご紹介します。目的に応じてスムーズなソフトウェア開発を進めるためにも、ぜひ参考にしてみてください。

監修者:大角将輝(株式会社グッドパッチ フロントエンドエンジニア)
プロダクトグロースを専門チームがサポート<事例と詳細をダウンロード>

そもそもソフトウェアとは

ソフトウェアとは、コンピュータやその他のデジタル機器が特定のタスクを実行するために使用する「命令やデータの集合体」のことです。

簡単にいえば「コンピュータに何をすべきかを指示するプログラム」であると考えると分かりやすいでしょう。また、ソフトウェアは物理的な機器である「ハードウェア」上で動作するものです。

ソフトウェア開発とは、プログラミングを含む開発プロセス

一般的にソフトウェア開発というと、「コンピュータプログラムやアプリケーションを作成するためのプロセス」のことを指します。

ソフトウェア開発は、以下のような工程を含みます。

  • 計画
  • 設計
  • プログラミング(実装)
  • テスト
  • メンテナンス

ソフトウェア開発と混同されやすいプロセスに「プログラミング」がありますが、プログラミングはソフトウェア開発のプロセスの一つで「実装」と呼ばれることもあります。

また上記の他に、製品やサービスの優れたUIを設計するためのさまざまな考え方や手法、ツールなどをまとめた取り組みである「UIデザイン」もソフトウェア開発の一工程として含まれることがあります。

【関連記事】UIデザインとは?デザイナー監修で5つのポイントと事例を紹介

システム開発・プロダクト開発との関係性

ソフトウェア開発とよく比較される言葉の一つに、「システム開発」や「プロダクト開発」があります。これらはしばしば混同して語られますが、それぞれ以下のような意味を持っています。

開発の種類 内容
システム開発 システム(ソフトウェア・ハードウェア・ネットワークなどを含む)を作成するプロセス
ソフトウェア開発 コンピュータプログラムやアプリケーションを作成するプロセス
プロダクト開発 ソフトウェアに限らない有形・無形の「製品」の開発

システムとは、ハードウェアやソフトウェア、ネットワークなどの構成全体のことを指します。つまり、システム開発のうち、特にソフトウェアを開発するプロセスのことを「ソフトウェア開発」といいます。

また、プロダクト開発は、有形・無形を問わず「製品」を開発するプロセスのことです。プロダクト開発の目的は「プロダクトを利用してもらうこと」。プロダクトを提供し、そこで何らかの価値を見出していけるかが焦点となります。

もちろん、プロダクト開発の中でソフトウェア開発が行われることもありますが、ソフトウェア開発では開発を前提として計画を進めます。そのため、設計通りに作ることに焦点が当たりやすく、「ソフトウェアをどう作るのか」が議論になりやすい点が特徴です。

補足:広義でのソフトウェア開発の重要性

一般的に、ソフトウェアを作ること自体を「ソフトウェア開発」と呼ぶ場合が多いですが、場合によっては広義で捉えることもあります。

広義で「ソフトウェア開発」を捉えた場合、単にソフトウェアを作ることにとどまらず、ソフトウェアが企画から運用・保守されるまでのすべてのプロセスを含みます。さらに、技術的な側面とビジネス的な側面を統合して含む場合もあります。

こうした考えの下、全体を俯瞰しながらソフトウェア開発に取り組むことで、単にソフトウェアを完成させるだけではなく、ビジネス目標や課題の解決につなげやすくなるでしょう。

これはソフトウェア開発に含まれる「ソフトウェアデザイン」においても同様で、例えばグッドパッチでは、デザインとエンジニアリングを一貫して捉え、ユーザーが触れるためのユーザーインターフェイスの設計だけでなく、内部のアーキテクチャの設計やプログラムの実装まで含めて「ソフトウェアデザイン」と定義しています。

Figmaなどで作成したデザインファイルなどの設計図はあくまで中間成果物であり、実装して初めてユーザーが触れるようになるからです。特に細部の使いやすさや触り心地はデザインファイルや仕様書で表現するのは難しく、実装工程での作り込みに大きく左右されます。

現代のソフトウェアでは、機能があるだけでは不十分であり、ユーザーの感情を揺さぶるような体験が必要になっています。一方で、表面上のデザインがどんなにきれいでも、バグが多かったり、処理に時間がかかりすぎたり、セキュリティ的に安全に使えないものをユーザーに使ってもらうことは難しいでしょう。

優れたソフトウェアをつくるためにはユーザーの感情や体験に向き合う“デザイン”だけでなく、システムの仕組みや性能に向き合う“エンジニアリング”の視点が欠かせません。しかし、実際の開発現場ではデザインとエンジニアリングが分離されており、品質が部分最適になりがちです。そのため、デザインとエンジニアリングを分離するのではなく、統合していくアプローチが重要になります。

もちろん、「必要な機能を備えたソフトウェアを作る」ことも大切です。しかしそれだけでなく、その後の「体験」までを考慮してアプローチすることが、ユーザーの本質的な課題解決につながるという考え方を、グッドパッチでは重視しています。

ソフトウェア開発の種類

ソフトウェア開発は、開発の対象によって以下の3つに分けられます。

  • Webアプリケーションの開発
  • ネイティブアプリケーション開発
  • 組み込みソフトウェア開発

Webアプリケーションの開発

アプリケーションとは、ユーザーが特定の作業を行いたいときに仕様するソフトウェアのことです。例えば、ExcelやOutlook、Gmailなどはすべてアプリケーションにあたります。

その中でも、Webアプリケーションは、「Webの仕組みを利用したアプリケーション」のことをいいます。ブラウザを通じてアクセスするため、ユーザーが使用しているプラットフォームに関わらず利用できます。

また、更新とメンテナンスは提供側が管理するため、ユーザーが個別に更新を行う必要がないのが特徴で、常に最新の状態で提供できる点がメリットです。開発の際には、Webの技術に精通したエンジニアを確保する必要があります。

ネイティブアプリケーション開発

ネイティブアプリケーションは、AppleやGoogle、Microsoftなどが提供している特定のプラットフォームで展開されるアプリケーションのことです。

具体的には、Appleなら「iOS」、Googleなら「Android」、Microsoftなら「Windows」などがプラットフォームとして提供されています。ネイティブアプリケーションは、それぞれ専用のプラットフォームにインストールする形で動作します。

ネイティブアプリケーションはプラットフォームに最適化されているため、高いパフォーマンスを発揮できる点がメリットです。一方で、アプリのアップデートはユーザー自身で行う必要があります。そのため、起動時にアップデートが必要かどうかを通知する機能を備えたアプリケーションが多いのが特徴です。

開発の際には、ネイティブのプラットフォーム技術に精通したエンジニアを確保する必要があります。

組み込みソフトウェア開発

組み込みソフトウェアとは、特定のハードウェアに組み込まれたソフトウェアのことです。例えば、エアコンや冷蔵庫などの家電製品、心電図などの医療機器や、自動車のエンジン制御ユニット(ECU)などに組み込まれるソフトウェアがこれに当たります。

組み込みソフトウェア開発では、ハードウェアの特性に合わせて設計・開発されるのが大きな特徴です。開発環境と動作環境が異なるため、クロス環境でのデバッグ(バグの発見と修正)が必要となります。

ソフトウェア開発の手法

ソフトウェア開発の手法は、主に以下の3つの種類に分けられます。

ソフトウェア開発の手法 特徴
アジャイル開発 開発工程を機能単位に区切り、短いサイクルで繰り返す開発手法
ウォーターフォール開発 プロジェクト全体で開発工程を順番に行う開発手法
プロトタイプ開発 試作品(プロトタイプ)を作り、ユーザーからのフィードバックを反映しながら完成させていく開発方法

アジャイル開発

「アジャイル開発」は、近年ソフトウェア開発において主流となりつつある開発手法の一つです。「計画→設計→プログラミング(実装)→テスト」の開発工程を、機能単位に区切って短いサイクルで繰り返すのが特徴です。

アジャイル開発のメリットは、状況に応じて柔軟に仕様変更がしやすい点です。一方で仕様や要件ごとに計画と実装を繰り返すため、プロジェクト全体のスケジュール管理が難しい点には注意が必要です。

ウォーターフォール開発

ウォーターフォール開発は、「計画→設計→プログラミング(実装)→テスト」の開発工程を順番に行う開発手法です。アジャイル開発のように機能単位で区切ることなく、全体の機能をまとめて、着実に一つずつの工程を終えてから次に進みます。

アジャイル開発のような細やかな修正ができないため、実装フェーズで設計の考慮漏れや実現性の問題が発生した際には、納期に大きな影響が出る可能性があります。一方で全体のスケジュールを管理しやすいため、要件・納期・予算が決まっている場合に向いていると言えます。

ウォーターフォール開発はソフトウェア開発において最も古い開発モデルであり、以下のような観点から昨今ではアジャイル開発が主流となっています。

  • 技術の進化やビジネス環境が変化しやすい状況下では、実装に着手する前に要件や仕様をすべて定義することが難しい
  • プロジェクトの後半になるまで、動作するソフトウェアが確認できない
  • 考慮漏れや仕様変更など、変化への対応が考慮されていない

プロトタイプ開発

プロトタイプ開発は、初期段階で試作品となる「プロトタイプ」を作成する開発手法です。ユーザーからのフィードバックを踏まえて開発を進めていくことが特徴です。

プロトタイプにより実際のプロダクトの価値や実現性を早い段階で検証できるのがメリットで、本格的な開発に入った際に大きな仕様変更が起こりにくく、コストオーバーや納期遅延を防げます。

一方でプロトタイプは仮説検証を目的につくるため、検証したい仮説や検証の方法があいまいな場合はプロトタイプをつくっても、結果的に示唆を得られない場合があるので注意が必要です。

【関連記事】プロトタイピングとは?事例や効果的に取り組むポイントを紹介

ソフトウェア開発に関わる職種

ソフトウェア開発には、さまざまな職種の方が関わります。

  • プログラマー
  • システムエンジニア
  • デザイナー
  • プロダクトマネージャー

会社によって業務範囲が違ったり被っていたりすることもありますが、以下では各職種の一般的な業務内容についてご紹介します。

プログラマー

プログラマーは、開発工程の中でプログラミングを担当するポジションです。決められた要件定義や設計書に従い、コードを書いて実装工程を進めます。プログラムが問題なく動くかどうかのテストを実施し、問題があれば修正するのもプログラマーの仕事です。

ECサイトなら「PHP」、業務システムなら「Java」といったように、担当者は開発で使用するプログラミング言語に精通している必要があります。

なお、開発対象ごとにプログラマーの種類を分けている企業もあります。例えばグッドパッチでは、以下のような分け方をしています。

  • フロントエンドエンジニア
  • バックエンドエンジニア
  • iOSエンジニア
  • Androidエンジニア

システムエンジニア

システムエンジニアは、プログラマーがコードを書くために必要な「要件定義書」や「仕様書」を作成します。

開発工程のうち上流部分を担当し、クライアントからソフトウェアの要件をヒアリングするのもシステムエンジニアの仕事です。要件をまとめるスキルに加え、プログラミングスキルも求められる職種です。

グッドパッチでは「テクニカルディレクター」と呼んでいます。グッドパッチのテクニカルディレクターは要件定義に加えて、デザインとエンジニアリングの連携を強化するための実現性検証、UIレビュー、開発プロセス設計も行います。

デザイナー

デザイナーは、一般的には見た目をかっこよくしたり、きれいにすることが役割という認識をされることもありますが、ソフトウェアに関わる戦略・要件・構造・骨格・表層と幅広く関わる職種です。

デザイナーの中でも、ソフトウェアをユーザーがどのように使うかをリサーチしソフトウェアとしての体験に落とし込むUXデザイナーや、実際のユーザーインターフェイスをデザインするUIデザイナー、ソフトウェアのブランドとしての価値をデザインするBXデザイナーなど、より役割を細分化し専門性を持ってソフトウェアの開発に関わることもあります。

プロダクトマネージャー

プロダクトマネージャーは、プロダクト全体を管理し成功に導く責任者です。プロダクトマネジメント全体を管理し、関係者をリードしながらプロダクトを成長させる役割を担います。

例えば社内外のステークホルダーへの働きかけや投資対効果の検討など、開発において幅広く責任を担います。

【関連記事】プロダクトマネジメントの必要性と役割、習得するべきスキルを解説

ソフトウェア開発のプロセス

ここからは、ソフトウェア開発の各工程について解説します。ソフトウェア開発には以下のようなさまざまな工程があります。

ソフトウェア開発のプロセス

これらのプロセスをスムーズに進めるには、プロダクトマネージャー(PdM)の存在が欠かせません。課題の把握や顧客の理解、開発、提供後の改善など、プロダクトそのものだけでなくビジネスの面も網羅的に把握して管理のできるプロダクトマネ―ジャーの需要が高まっています。

1.企画

まずは、クライアントに対してヒアリングを実施し、クライアントが何に困っているか、現状の事業上の課題や達成したいことを細かく聞き出します。その上で、どのようなソフトウェアを開発すれば課題を解決できるのかを企画し、双方のイメージを擦り合わせていきます。

グッドパッチでは理想とするソフトウェアの解像度を高めるために、UXリサーチを通して利用者にもヒアリングすることがあります。

【関連記事】グッドパッチのUXデザインチームで始めた「リサーチ道場」とは?【RESEARCH Conference 2024】

2.要件定義

ソフトウェアの目的や方向性が定まってきたら、要件定義を実施します。「開発するソフトウェアにどのような機能が必要なのか」「どのような品質を重視し、重視しないのか」といった仕様を細かく決め、要件定義書に落とし込みます。

開発プロセスによって要件定義のアウトプットは異なりますが、アジャイル開発の場合は必要最小限の設計書を作成し、コミュニケーションを密に行います。

一方、後戻りの難しいウォーターフォール開発の場合は、より詳細な設計書を作成します。

いずれの場合も、要件定義はこの後の工程のベースとなる重要なプロセスです。無駄な作業や出戻りを防ぐためにも、慎重に取り組む必要があります。

3.設計

設計プロセスでは、要件定義書の内容に従って設計書を作成します。

設計には、業務や機能の流れに焦点を当てた「基本設計」と、内部の構造を設計した「詳細設計」の2種類があります。

UI設計を行う場合はこのタイミングでの実施が一般的ですが、グッドパッチの場合は要件定義の前段階で大まかな設計まで済ませてしまうことが多いです。理想的なUIをプロトタイピングで探索し、大枠を把握した上で要件定義に進めるためです。

4.開発

ソフトウェアが機能するよう、開発を行います。プログラマーが要件定義書や仕様書をもとにコードを書いていきます。

ただし、ただ単に「仕様通りに動けばOK」というものでもありません。もちろん想定通り動作することは大切ですが、ソフトウェアは継続的に改善を重ねていくもの。同じプログラマーが改修を担当するとは限らないため、誰もが読みやすいコードで開発することも重要です。

実際にグッドパッチでは、保守性の高いコードを設計、実装することを重要視しています。

5.テスト

開発を終えたら、ソフトウェアが仕様通りに動作するかどうかをテストします。企業やプロジェクトによって詳細は異なりますが、一般的には以下4種類のテストを実施します。

  • 単体テスト…プログラムごとに行うテスト
  • 結合テスト…複数のプログラムを組み合わせて行うテスト
  • システムテスト…一通り開発した後に行う最終確認のテスト
  • 受け入れテスト…クライアントが受け入れの際に行うテスト

一般的にシステムテストまでは開発会社が実施しますが、最終確認となる「受け入れテスト」では、ユーザーに使ってもらうこともあるため、クライアントと開発会社が協力する必要があります。

グッドパッチでは上記の他にも、必要に応じて脆弱性診断や負荷試験などを実施しています。

6.リリース

テストの内容に問題がなければ、ソフトウェアをリリースします。

リリース後にクライアントがソフトウェアをスムーズに使えるよう、マニュアルや設計書なども合わせて納品されることが多いです。

7.運用・保守

リリース後は、運用保守の工程に移ります。

ソフトウェアは、リリースして終わりではありません。常に最適な状態を保つためには、運用・保守の実施も重要です。

トラブルが発生したときは迅速に対応し、ユーザーの満足度を下げないよう努めることが求められます。

なお、運用・保守は本来現状維持を目的としたものですが、最近のSaaSビジネスでは改修を前提としたリリースも増えています。企業によっては最小限のプロダクトをリリースしてから、継続的に機能追加や改善を行っていくケースも多くあります。

グッドパッチのソフトウェア開発事例紹介

最後に、ソフトウェア開発事例をいくつかご紹介します。

グッドパッチでは、これまでさまざまな企業のソフトウェア開発を支援してきました。その取り組みの一部をご紹介します。

サントリー食品インターナショナル株式会社

サントリー食品インターナショナル株式会社

「SUNTORY+(サントリープラス)」は、サントリー食品インターナショナルが提供する企業向けヘルスケアサービスアプリです。医療費の企業負担が増加する中、企業の「健康経営」のため、従業員の健康行動習慣化をサポートすることを目的に開発されました。

グッドパッチは事業の構想段階からデザインパートナーとしてコミットし、長期的に開発をご支援しました。

プロトタイプを通じた議論を重ねることで、実際に使用しながら必要な機能を検証。ユーザーの健康行動に対するモチベーションを支える「設計」と「演出」を行いました。さらに、リリース後もアジャイル開発を取り入れることで、継続的な改善とグロースをサポート。

ユーザー中心のデザインプロセスと継続的な改善により、「SUNTORY+(サントリープラス)」は高い継続率を達成しました。企業の健康経営を支援するツールとして機能し、従業員の健康行動習慣化を促進することに成功しています。

株式会社リンクアンドモチベーション

株式会社リンクアンドモチベーション

株式会社リンクアンドモチベーションが3,300社、79万人のデータや組織人事コンサルティングのノウハウを基に開発した、組織の改善サイクルを加速させるサービス「モチベーションクラウド」。

グッドパッチが、UI/UXデザインからソフトウェア開発までご支援した事例です。

BtoBサービスではさまざまなユーザーがプロダクトを利用するため、ユーザー理解の手法も工夫が必要でした。そこで、ユーザーのことを誰よりも理解している現場コンサルタントの視点を基に、裏側も考慮したプロダクトを設計。

プロダクトオーナーのフィードバックを受けつつ、ブランドストーリーに基づくデザインイメージの刷新も行いました。

また、核となる情報を特定して設計の中心に置くことで、拡張しやすい構造を作り上げているのも本事例の特徴。実際にリニューアル以降も、グッドパッチが継続的にご支援しています。

ソフトウェア開発の特徴を理解してより良いサービスを実現しよう

以上、ソフトウェア開発の基本的な考え方や参考事例をご紹介しました。

現代において、企業の存続には「ユーザーに必要とされるサービス」が必要であり、そのためにも、ソフトウェア開発は欠かせないプロセスの1つです。

また、ユーザーへ「価値のある体験」を届けるためには、必要な機能を備えたソフトウェアの開発はもちろん、適切なUI/UXや保守運用も見越した設計が欠かせません。

リサーチに基づいてユーザーニーズを的確に捉えることで、トライ&エラーを重ねながら「価値のある体験」を得られる理想の設計に近づけることが可能です。

グッドパッチでは、上記を踏まえたソフトウェア開発の支援を行っています。コミット力が高く、熱量のある開発パートナーをお探しの方は、ぜひグッドパッチまでご相談ください。

プロダクトグロースを専門チームがサポート

Product Growth Partnerships

UXデザインに強みを持ったPdM(プロダクトマネージャー)メンバーが、貴社のプロダクト開発現場にジョインし、課題の発掘~定義、解決に向けての伴走やグッドパッチが持つナレッジをインストールし、プロダクト開発現場に不足しているスキルをサポートするなどソリューションの詳細をご紹介します。

このような方におすすめです

    • ・事業責任者が開発責任者も兼任しており、人手も時間も足りない
    • ・直近の開発に手一杯になっており、中長期の視点でプロダクトを捉えられていない
    • ・事業視点中心の開発になっており、ユーザーの視点をうまく取り入れられていない

など、外部パートナーとしてのPdM(プロダクトマネージャー)人材のサポートが必要な組織