ITツールを作るときの進め方
Boyaです!
今までの記事では自己啓発や精神疾患の題材がメインのため、なかなかITについて書いてませんが、僕の本職はエンジニアです。
実は15年以上エンジニアしており、色々やり過ぎてスペシャリティがよくわかっておらず、途中で社会を離脱して療養していました。
とはいえ、10年以上のキャリアがあるので、インフラからアプリ開発までできます。そんな経験でどのフェーズに配置されても共通して必要となる進め方があります。
今回は僕が経験してきた知識をベースに要件定義と設計についてご紹介したいと思います。要件定義と設計ができるとプロジェクトを進めることができます。
それでは行ってみましょう!
例えば、下記のような要件があったとします。
会社の基幹システムから全グループ企業の全社員勤怠データをダウンロードして、そのデータを会計期間の各月の残業時間と9種類の条件に該当するかどうか一目できるようにしてEXCELに一覧表示したい。
実際に僕が働き方改革で携わった案件です。結構似たようなことをしたい企業様は多いのではないでしょうか。
タイムカードデータから全社員の残業時間の集計をして、EXCELで出力をしたいというのはよくやりたいことです。
働き方改革が騒がれた頃に全く予算をかけない前提でシステムではなく、ACCESSとEXCELだけのツールで実現しました。
では、この要件からどんなアプローチで進めたのでしょうか。流れはこんな感じです。
開発の流れ
1. 要件をユーザーや責任者からヒアリング
2. どのように実現していくか設計
3. プログラミング
4. 内部テスト
5. ユーザーテスト
6. 本番リリース
7. 手作業との並行運用
8. 運用を完全移行
今は様々開発の進め方が存在し、スピーディな開発手法は最初の要件定義の少ない情報でプロトタイプを作ってしまってからハイペースで改修して仕上げていくパターンもあります。今回の紹介するのはベーシックでかつ簡略的なアプローチです。
何となく開発をしたことない方がどんな進め方でツールやシステムを開発しているのかイメージできればなと思います。
1. 要件をユーザーや責任者からヒアリング
ここが初動になるのでここでしっかりと情報を収集しておかないと後続に大きく影響します。ここで「要件漏れ」があると手戻りとなってしまい、最悪1から作り直しということもあります。現在は流動的な世の中のため、それに対応した開発手法が好まれています。とはいえ、どんな開発手法でもこの要件定義の精度は重要なのでしっかりと相手のニーズを引き出すことができるかが重要になります。
今回の例で言えば要件のポイントは以下の通りです。
・基幹システムから全グループ企業の全社員勤怠データをダウンロード
・会計期間の各月の残業時間を集計する
・9種類の条件に基づいた星取表を作る
・それらをExcelブックの所定のシートに一覧出力する
・各部署ごとにブックを分けてシートには部署のみの一覧を出力する
各要件がなぜ必要なのかを確認しておくことが重要です。「相手がこうしてください」と要求した人がITに精通しているとは限りません。相手が人事などの方であれば、ただのイメージなのでITの観点から「こうした方が良い」というアドバイスが必要です。
・基幹システムから全グループ企業の全社員勤怠データをダウンロード
これは元となるデータを取得してくることが目的です。
・会計期間の各月の残業時間を集計する
例えば、4月開始の企業ならば、こんなイメージです。
4月 5月 6月 7月 8月 9月 10月 11月 12月 1月 2月 3月
○さん 10h 20h 10h 15h 40h 50h 60h 5h 0h 30h 6h 4h ■さん 10h 20h 10h 15h 50h 70h 20h 10h 40h 10h 2h 2h
・9種類の条件に基づいた星取り表を作る
例えば、「3ヶ月連続残業40hを超えているか」を一覧の中で見れるようにします。
4月 ーー中略ーー 2月 3月 条件① 条件② 条件③
○さん 10h ーー中略ーー 4h 5h ○ ○
※条件①:3ヶ月連続残業40h
のように星取表を追加するイメージであることをヒアリングから引き出します。
・それらをExcelブックの所定のシートに一覧出力する
Excelに出したいという要望の本質は、出力したデータをユーザーが自由に集計したりしたいという要望があったためです。そのため、Excel出力が必須条件でした。
・各部署ごとにブックを分けてシートには部署のみの一覧を出力する
各法人や部署に毎に「これだけ残業している社員がいるので注意しなさい」という連絡する運用を企画しているため、メールで添付しておくれるように自動で分割してほしいという要望がありました。部署単位にすると何百もあるため、人の手でやるには非常に時間がかかるため、プログラムで自動分割してほしいという要望がありました。
2. どのように実現していくか設計
これらの要件をサーバーシステムを開発せずにクライアントツールだけでやってほしいという要望でした。そこで考えたのはMS OfficeのACCESSとExcelでVBAとSQLを使って集計する方法を考えました。
前述の要件に対してどんな実装を考えたかについて説明してみます。
・基幹システムから全グループ企業の全社員勤怠データをダウンロード
制約上基幹システムに直接入り口を設定できなかったために、ファイルの受け渡しでACCESSツールにインポート。
・会計期間の各月の残業時間を集計する
SQLで各個人の月残業をヒアリングした計算式をもって算出していき、ACCESSのテーブルに保存する
・9種類に基づいた星取表を作る
9種類の計算式に従ってSQLで集計してテーブルに保存する。
・それらをExcelブックの所定のシートに一覧出力する
集計したACCESSのテーブルからExcelにVBAを使ってレイアウト通りに出力していく
・各部署ごとにブックを分けてシートには部署のみの一覧を出力する
出力する際に各社員が所属している部署情報をチェックしてブックを分けて出力していく。これもVBAでコントロールする。
大雑把に要件に対しての実装設計はこんな感じになります。ただ、忘れてはいけないのは、「非機能要件」といわれる部分です。
ツール運用をしていく上で、制限をかけなければならないことがあります。例えば、
・ユーザーが触ってはいけないデータへアクセスできないようにコントロールする
・エラーハンドリング
などです。
これらを忘れてしまうと実際に運用した時にITを知らないユーザーがおかしな操作をしてツールやデータを壊してしまいます。
操作を制限するための機能はしっかり組み込んでおく必要があります。
今回の例でもありましたが、「データベースの知識」が非常に重要になります。プログラミングができる=データベースも知っているという風潮が世の中にあります。しかし、これらは一緒ではなく、データベースは今でこそ個人でも触りやすくなってきましたが、かなり高額な商品のために知らない人がまだまだ多いです。
しかし、会社システムはデータベースありきで存在しています。これが会社の大きな資産でもあります。「データベース思考」ができる人は重宝されますし、データの使い方を知ることができます。
要件定義や設計をしていく上でも「データベースを知らないと話にならない」ことは現場でよく目にします。これはSEだから知ってなければならないのではなく、人事や総務などの部門の人も知っていないと自分達のデータをどのように集計や加工すれば経営判断できるデータとして活かせるのか、自分達の会社の基幹システムはどんなデータが出せるは知っておく必要があります。
ITエンジニアとしてもデータベース設計はできるようにしていた方が良いです。非エンジニアの方々のITリテラシーが引き上げようとしているため、当然エンジニアとしては「データベースを知らない」はあり得ないとも言えます。プログラミングは様々なプログラミング言語があるので、その中の一つを身に付けておけば良いと思います。データベースは多少異なってもデータベースの考え方やSQLはあまり違いはないため、しっかり抑えておくと良いです。
今回もご清覧頂き誠にありがとうございます。今回タメになったと思った方は「スキ」を押して頂けると励みになります。また、今後も投稿を読んでみたいという方はフォローしていただけると幸いです。
サポートのほどよろしくお願い申し上げます。サポート費はより良いコンテンツの提供や今後の展開していきたいコンサルティング事業の費用に充てサービス向上を目指したいと考えております。