私は元情報システム部員で、多くの業務システムの開発に携わってきました。システム開発は全体像を掴んだ上で計画的にプロジェクトを進めていく必要があります。本記事では、自身の経験を踏まえて、「システム開発の進め方」、特に業務系のシステムについてご紹介します。テスト、そして運用する一連の活動のこと」を指します。これには多くのステップがあり、さまざまな専門知識や技術が必要とされます。システム開発の手法システム開発には様々な手法がありますが、ここでは主に3つの方法に焦点を当てて解説します。ウォーターフォール型ウォーターフォール型とは、一連のプロセスを順番に進め、前のステージが完了しなければ次のステージに進むことができない手法です。要件定義フェーズ→発注者と合意→設計フェーズ→発注者と合意→開発フェーズ→発注者と合意といった形です。ウォーターフォール開発のいいところは要件定義や設計などをきっちり進めるため、開発の経緯が後に残りやすい、という点です。一方で初期のフェーズでかなり時間をかけて進める一方、実際のシステムはない状態で机上のイメージで受注者と発注者が摺合せをするため、後続の開発Phase以降で実際に出来上がったものが違う、つまり実は要件定義時点で思っていたものがみんな違っていた、ということが発生しえます。故に、失敗プロジェクトがとても多いのもウォーターフォール型の特徴です。アジャイル型アジャイル型開発は、開発を小さな部分に分割し、各部分を短期間で開発します。これにより、顧客のフィードバックをすぐに反映させることが可能になります。XX機能をまず作る→確認→次にXX機能を作る→確認といった形です。これにより早期に実際の出来上がったシステムの動きを見ながら開発を進められるため要件の齟齬が生まれにくいという特徴があります。一方で機能単位に分割できないようなシステム、特に基幹システムなどは1機能があっても裏側の仕訳処理などすべての機能がそろって初めて動くようなシステムなのでそもそもアジャイル開発が向かない、という場合があります。アジャイルに関しては変更が容易な分、不必要な細かい変更を受け入れすぎて前に進まない、というリスクもあります。発注者、受注者がそれぞれアジャイル開発の特徴を理解して進める必要があります。プロトタイピング最後に、プロトタイピングとは、設計段階で実際のシステムの動作を模倣する初期モデルを作成する手法です。これにより、利用者がシステムの機能を理解しやすくなり、開発者は利用者の要求をより具体的に把握できます。アジャイルのように機能単位ではなく、本番の廉価版のような全体的に動くサンプル版を作る、といった点が特徴です。メリットとしてはユーザとの要件の齟齬が生まれにくい、という点があげられます。一方でプロトタイプを作る手間がかかるためコストが増える、などにリスクはあります。システム開発の流れ(業務システムを想定)次に、具体的なシステム開発の流れについて解説します。現状調査まず、現状の業務プロセスやシステムを調査します。これは、新たに開発するシステムの要件を明確にするために不可欠なステップです。システム化したいのか?システム導入で本当に改善がなされるのか?などシステム導入の価値についてもこの時点でイメージする必要があります。次に、システム化する範囲を決定します。する他のシステムなどを明確にします。何でもかんでもシステム化しようとするとコストが上がっていく一方のため必要最低限の開発スコープはどこか?を見極めます。Proposal)という手法を用いて、システム開発のベンダーを選びます。RFIは情報収集のためのリクエスト、RFPは提案要求のプロセスを指します。要は現状調査結果や理想ととするTOBE像(業務、システム)を利用企業として書きおこして、こんなTOBE像にするためにもっと具体的なアイデアを頂戴、というリクエストを投げるのです。RFPのみを実施するケースもあれば事前にRFIを実施するケースもあります。このRFI,RFPはベンダー選定も兼ねており、とくにRFPに対する回答結果をもって選定するケースが多いです。提案を受けたベンダーから適切なパートナーを選びます。チーム体制やPMの経験なども評価軸に入れた方が良いでしょう。要件定義ベンダーが選定されたら、要件定義に取り組みます。この時点でできるだけユーザを巻き込みながらもれなく要件定義を進める必要があります。基本的に漏れのない要件定義などあり得ない(必ず後でこれも欲しい、がでてくる)のですが、ポイントはベンダー側とユーザ側が同じ視点に立って、現状何に困っていて、確かにこの要件が実現されれば現状が改善するな、という共通認識を持つことです。システム開発において最も重要な工程といっても過言ではありません。次に、要件を満たすためのシステムの設計を行います。設計は大きく2つに分かれ、大まかなシステム構造を決定する「基本設計」と、具体的なプログラム構造を決定する「詳細設計」になります。設計に基づいて、実際のシステム開発を行います。プログラミングやデータベース設計など、多岐にわたる技術が必要となります。テスト開発が終われば、テストを行います。この段階では、システムが要件を満たしているか、またエラーがないかを確認します。テストは単体テスト(PGM単体が設計通りに動くか)結合テスト(複数の関連するPGMが設計通りに動くか)統合テスト(要件通りにシステム全体が動くか)UAT(ユーザ側が機能の確認をして問題ないか)負荷テスト(システムが想定する負荷にたえられるか)などがあります。運用設計テストが無事終了したら、システムを実際に運用するための設計を行います。具体的には、運用の手順、バックアップ体制、故障時の対応策等を考えます。次に、新しいシステムへ移行するための計画を策定します。データの移行やシステムの切り替え方法などを詳細に計画します。新規のシステムの場合は必要ありませんが、現状のシステムがある場合はどのように切り替えるのか?の計画策定が必要です。切り替え中業務が止まる場合は事前に日程調整なども必要になります。業務移行計画の策定システムだけでなく、業務の移行も重要です。ユーザーのトレーニングや手順の確認など、業務の移行をスムーズに行うための計画を立てます。全ての準備が整ったら、システムの実際の展開計画を策定します。教育の計画や初期のユーザフォローアップ、また障害発生リスクが導入直後は高まるためそれを見越したフォローアップ体制をベンダーと相談しておくことが重要です。運用・保守システムが稼働を開始したら、運用と保守が重要になります。ベンダーに外注する場合はSLA(サービスレベルアグリーメント)で各運用項目についてどういう品質で運用してもらうのか?を事前に取り決めておきましょう。次に、システム開発に関わるメンバーについて解説します。システムオーナーシステムオーナーは、発注(利用側)組織において当該システム開発プロジェクトの責任者を指します。大規模なものになると役員クラスの責任者になる事もあります。システム導入は様々な影響を社内に生みますのでそれらをマネージメントできるクラスの責任者が求められます。利用者側のメンバーでシステム導入のプロジェクト推進体制を作ります。メンバーなどといった役割を作っていくことも多いです。開発PM開発PM(プロジェクトマネージャー)は、開発プロジェクト全体を統括する役割を果たします。同様のプロジェクトを多くこなした経験豊富な人間が必要とされます。開発PL・TL開発PL(プロジェクトリーダー)・TL(チームリーダー)は、開発チームを指導し、自身の管理範囲のメンバーの作業に関して進捗などを確認し計画通りに物事が進むように管理をします。開発者は、具体的なシステムの設計やコーディングを行う役割を果たします。PMOPMO(プロジェクトマネジメントオフィス)は、プロジェクトの進行をサポートし、リスク管理や品質管理を行います。小規模プロジェクトではPMやPLがこのタスクを推進しますが大規模なプロジェクトな場合PMOを立ち上げて管理チームを作ることが多いです。システム開発のコストシステム開発には様々なコストが発生します。主なものには以下の4つがあります。人件費(外注費)開発に関わる人々への報酬です。内部のスタッフだけでなく、外部のベンダーに発生する費用も含みます。外部ベンダーの単価(人月)の目安は様々ですが、以下が私の経験からの金額感です。※地方のベンダの場合50万円前後のケースも多くあります。ライセンス費用システム開発で使用するソフトウェアやライブラリのライセンス費用です。初期、ランニングなどそれぞれの視点でどれくらい費用が掛かるのか?を各インしましょう。ハードウェア費用サーバーやネットワーク機器など、ハードウェアの導入やメンテナンスにかかる費用です。クラウドの場合は月額利用料などを事前に計算しておく必要があります。保守運用費システムの運用・保守にかかる費用です。これには、システムの監視、障害対応、アップデートなどが含まれます。相場はシステム開発費用の10~20%程度/年間です。システム開発は内製か外注かシステム開発を内製にするか、外部のベンダーに外注するかは重要な決定です。これは、組織のスキル、リソース、コスト、時間、プロジェクトの複雑さなど多くの要素によって決定されます。これまで日本においては外注が基本でしたが最近では内製に踏み切る会社も多く出てきました。内製化のいいところはコストが安価となり、開発スピードが増すところですが一方でシステムの管理がなぁなぁになりドキュメントが更新されなかったり、品質が悪くなったり、ということは考えられます。内製化する場合は管理もきっちり外注で行うレベルで実施する必要があります。おわりにシステム開発は複雑なプロセスであり、多くの専門知識を必要とします。その結果として生まれるシステムは、我々のビジネスに大きな影響を与えます。本記事が、皆様がシステム開発をしていく際の一助になれば幸いです。その後のデータの活用まで幅広くITシステムのご支援をしております。みなさん、こんにちは!本記事をご覧になっている方は「情シス」っていったい何をする組織なんだろう?という疑問を持たれているのではと思います。