
エンジニアをしていると、プロジェクトという言葉は日常的に使われます。プロジェクトという言葉は様々な分野・業界で使われているとても利便性の高いものです。逆に言えば、「プロジェクトという言葉は様々な意味があるため、正しく使い分けられるか否かは、エンジニアとして重要である」ということなのです。
プロジェクトとは?一般的な意味と特徴
一般的に、プロジェクトとは「特定の目的を達成するための、一時的な活動」を指します。プロジェクトの特徴として、以下のような点が挙げられます。
- 目的が明確である - プロジェクトには、達成すべき目標が定められています。
- 期限がある - プロジェクトには開始と終了が設定されており、無期限ではありません。
- リソースが限られている - 予算、人員、時間などの制約の中で実施されます。
- 独自のプロセスを持つ - 通常の業務とは異なる計画・実行・評価の流れが存在します。
例えば、新商品の開発、建設プロジェクト、企業のシステム導入などが、一般的なプロジェクトの例として挙げられます。
本来の組織とは別に、目的を達成するために臨時で構成される組織やその業務のこと。コンピューターシステムの開発において、大規模な開発では、プロジェクトを組む場合が多い。 引用元:ASCII.jpデジタル用語辞典
つまり、ソフトウェア開発におけるプロジェクトとは、自身が所属する組織、または外部のエンジニア等複数人で構成され、特定の目的を達成するための業務を指します。
通常、内部or外部を問わずエンジニアとしてプロジェクトに参画する場合、既に計画立案済みの作業を割り当てられることになります。この割り当てられた作業を「タスク」と呼びます。
プロジェクト管理とは?
プロジェクトを成功させるためには、多くのリソースを計画的に管理し、推進する必要があります。そしてこの役割を担うのが「プロジェクトマネージャー(PM)」です。
プロジェクトの「構成要素」は、一般に「リソース」と呼ばれる「ヒト・モノ・カネ」が中心です。PMはプロジェクトにおける「構成要素(ヒト・カネ・モノ)」を全体的に管理します。
プロジェクトの規模に応じて、「PMの配下にプロジェクトリーダー(PL)」を配置し、さらにその配下へ「サブリーダー(SL)」配置することもあります。
「プロジェクト」という言葉は、日常的にもビジネスシーンでも広く使われています。しかし、ソフトウェア開発における「プロジェクト」は、一般的な意味とは異なり、特有の管理手法や運営ルールが存在します。
本記事では、プロジェクトの基本的な定義から、ソフトウェア開発におけるプロジェクトの特徴、最新の管理手法について詳しく解説します。
タスクとは?
プロジェクトに含まれる「タスク(Task)」とは、プロジェクトを推進する上で行われるべき「作業」を意味しています。「プロジェクトという、全体的な業務を成すために、複数の部分的なタスクがある」わけです。
昨今は、システムの高機能化(複雑化)に合わせて、作業タスクの量も膨大に膨れ上がる傾向にあります。そのため、ある一定タスクの集団を「作業フェーズ(工程)」という範囲で区分けすることが一般的になってきました。
実際の開発現場で例えると下記の関係になります。
プロジェクトとタスクの関係
- 〇〇システム開発プロジェクト
- 上流工程
- Ph.0:戦略策定
- タスク・・各フェーズ配下にも様々な「タスク」がある
- Ph.1:システム化計画
- Ph.2:要件定義
- Ph.3:基本設計
- Ph.0:戦略策定
- 下流工程
- Ph.4:詳細設計
- Ph.5:プログラミング・テスト
- Ph.6:結合テスト
- Ph.7:システムテスト
- Ph.8:業務運用
- Ph.9:総括
- 上流工程
少し紛らわしいのですが、各フェーズは「上流工程」と「下流工程」から成っています。
上流工程とは
「上流工程」とは、下記の工程までを指しています。
上流工程
- Ph.0:戦略策定
ユーザーの意思と環境認識に基づく重要なリソースの傾斜配分方法の決定 - Ph.1:システム化計画
経営戦略に基づく方向性の検討、事業戦略の検討、ITインフラの検討、計画立案 - Ph.2:要件定義
業務の分割と分担の確認、業務内容の確認、実施方法のイメージ確認 - Ph.3:基本設計
事務手順の設計、人と機械の分担検討、外部使用の検討
「下流工程」との違いは、成果物の内容が「発注者側(指示者)」の目線であるか否かの違いです。つまり「上流工程」における成果物は「発注者側」の意見を元に、仕様を書面化したものとなります。
下流工程とは
「下流工程」は、上流工程の逆で「受注者側(制作者)」目線で進めていく工程になります。
下流工程
- Ph.4:詳細設計
内部仕様の検討、危機感の分担の検討 - Ph.5:プログラミング・テスト
プログラム開発と単体テストの実施 - Ph.6:結合テスト
プログラム間(機器間)連携を検証するテストの実施 - Ph.7:システムテスト
本番環境での稼働テスト、拠点への展開、業務移行 - Ph.8:業務運用
システム及び、プロジェクトの評価、次期投資の検討
「上流工程」で作成された仕様書をインプットとして、設計書を作成していきます。「下流工程」からは「発注者側(指示者)」の意見は入りません。この段階で「発注者側(指示者)」の意見が入る様では、いつまでたっても仕様が固まらずプロジェクトは崩壊します。
ソフトウェア開発におけるプロジェクトとは?
ソフトウェア開発におけるプロジェクトは、単に「システムを作る」というだけではなく、開発プロセス全体を管理するものです。特に、次のような特徴があります。
- 要件が変化しやすい - 開発途中で機能追加や仕様変更が発生することが多い。
- 複数の工程がある - 計画、設計、実装、テスト、運用などのフェーズを経る。
- 多様な関係者が関与 - クライアント、エンジニア、デザイナー、テスターなどが協力して進める。
- 進捗管理が重要 - 遅延を防ぐために、適切なタスク管理が求められる。
ソフトウェア開発におけるプロジェクト管理手法
従来のソフトウェア開発では、ウォーターフォールモデルが主流でした。しかし、近年ではアジャイル開発が広まり、より柔軟なプロジェクト管理が求められています。
ウォーターフォールモデル
ウォーターフォールモデルは、要件定義から運用までの各フェーズを順番に進める開発手法です。開発の流れが明確で管理しやすい一方、途中での仕様変更が難しいという課題があります。
アジャイル開発
アジャイル開発では、短期間(スプリント)ごとに開発とテストを繰り返し、仕様変更に柔軟に対応できるようにします。特に、スクラムやKanbanといったフレームワークが一般的に使用されています。
アジャイル開発手法とは
- アジャイルにおける設計の考え方
- 「設計は最初にすべて決めるもの」という考え方が変わり、スプリントごとに柔軟に設計を更新する形になっている。
- 設計のドキュメント化も、従来の詳細な設計書ではなく、「軽量ドキュメント(Confluence・Notion・Wiki)」などの活用が増えている。
- 設計・アーキテクトの役割の変化
- 以前は、システムの全体設計を一括で行う「アーキテクト」が主導する形が多かったが、アジャイルでは開発チーム全員で設計を改善していく文化がある。
- 「エンタープライズアーキテクチャ」や「マイクロサービスアーキテクチャ」のように、設計の柔軟性が求められるようになった。
- アジャイルにおける設計の課題と解決策
- アーキテクチャ設計は最初にどこまで決めるべきか?(Big Design Up Front vs. Evolutionary Design)
- 「アーキテクチャの負債」を防ぐには?(技術的負債の管理)
- アジャイル開発でも詳細設計は必要なのか?(コードとドキュメントのバランス)
プロジェクト管理ツールの活用
現代のソフトウェア開発では、プロジェクト管理ツールを活用することで、タスクの可視化や進捗管理が容易になります。代表的なツールとして、以下のものがあります。
- JIRA - アジャイル開発向けのタスク・プロジェクト管理ツール
- Trello - シンプルなボード管理が可能なツール
- Redmine - オープンソースのプロジェクト管理システム
- Azure DevOps - Microsoft製のCI/CDと統合された管理ツール
リモートワーク時代のプロジェクト管理
近年、リモートワークの普及に伴い、オンラインでのプロジェクト管理が重要になっています。従来の対面ミーティングに代わり、以下のツールが多く活用されています。
- Slack / Microsoft Teams - チャットベースのチームコミュニケーション
- Notion / Confluence - ドキュメントやタスク管理の共有
- Zoom / Google Meet - オンライン会議による進捗確認
プロジェクトを成功させるためのポイント
- スコープの明確化 - 目標を明確にし、変更が発生した場合の対応方針を決める。
- マイルストーン管理 - 各フェーズの進捗を適切に管理し、遅延を防ぐ。
- ステークホルダーとの合意形成 - クライアントや関係者との定期的な報告を行い、認識のズレを防ぐ。
- データドリブンな管理 - KPIの可視化やダッシュボードを活用し、進捗を定量的に把握する。
まとめ
プロジェクトとは、一時的な目標を達成するための活動であり、ソフトウェア開発においては、計画的な管理が求められます。従来のウォーターフォール型の手法に加え、アジャイル開発の普及により、より柔軟なプロジェクト運営が求められるようになっています。
また、リモートワークの増加により、プロジェクト管理ツールやオンラインコミュニケーションの活用が不可欠になっています。適切な手法を取り入れ、プロジェクトの成功につなげましょう。