top of page

工程管理:スプレッドシートによる柔軟なシステム構築

  • 執筆者の写真: M.O
    M.O
  • 5月12日
  • 読了時間: 5分

こんにちはM.Oです。ブログ等を書くことがないため、いろいろおかしいところがあるかもしれませんが、優しく見守ってください。


さて、家では2匹の猫(姉妹)を飼っていますが、妹猫をワクチンのため病院に連れて行って帰ると、姉猫が妹猫に近づいてシャーっと何度も威嚇します。病院の匂いか、獣医さんの匂いがついているのか、気に入らないようです・・・




妹猫もイヤイヤ行ってるのだから、もうちょっと優しく迎えてほしいところです。

と、関係のない話をしたところで、本題に入りたいと思います。



はじめに


エンジニアとしてコードをガリガリ書く日々に、突然「管理」というミッションが加わったとき、皆さんはどう感じますか?「もっと効率化できるはずだ」「ツールを使えば一発だろう」……。私もそう思っていました。


先日、社内の工程管理を任されることになったのですが、そこで直面したのは「ツールの理想と現場の現実」のギャップでした。

今回は、エンジニアである私が、紆余曲折を経て辿り着いた「Googleスプレッドシートによる柔軟な工程管理システム」の構築記録を共有します。




1. 理想のツールを探して:RedmineとExcelの挫折


管理業務を始めるにあたり、まず検討したのは定番のプロジェクト管理ツール「Redmine」でした。

非常に強力なツールですが、今回のケースではいくつかの壁にぶつかりました。


Redmineはチケット駆動開発やリソース管理に優れていますが、多機能ゆえに学習コストが高いのが難点です。

管理に関わる全員が精通しているわけではなく、入力項目の多さが心理的なハードルとなりました。

また、サーバーの運用やプラグインの管理など、本来の「工程管理」以外の部分に工数を割く必要が出てきます。


「機能を使いこなすこと」が目的化してしまい、肝心の工程把握が後回しになる懸念を感じたため、導入を見送りました。



Excelの「場所」という限界


次に考えたのは、Excelです。しかし、これには致命的な欠点がありました。それは「社外からリアルタイムで確認・更新できない」ということです。


現場調整や外出先から進捗をアップデートしたい。あるいは、リモートワーク中のメンバーと同時に編集したい。

そういった場合に共有サーバー上のExcelファイルでは、排他制御(読み取り専用)のストレスが避けられません。


また、誰かが古い版で上書きしてしまう「バージョンの先祖返り」に悩まされる未来も見えていました。どこからでもアクセスでき、常に最新である必要があったのです。






2. 辿り着いた答え:Googleスプレッドシートという「DB」


最終的に選んだのは、Googleドライブ上に配置したスプレッドシートでした。


「なーんだ、ただの表計算ソフトか」と思われるかもしれません。しかし、エンジニアの視点で設計すれば、これは柔軟なデータベースに変貌します。

選定の決め手は、社内外問わずマルチデバイスで閲覧・編集が可能な「アクセシビリティ」。そして、複数人が同時にステータスを更新しても壊れない「同時編集性」です。


さらに、将来的にC#(.NET)からGoogle Sheets API経由でデータを操作し、自動化や他システム連携ができる「拡張性」も大きな魅力でした。




3. システム設計:正規化を意識したデータ構造


C#でクラス設計をするように、スプレッドシートも「データの正規化」を意識して構築しました。メインとなるのは、すべての情報の源泉となる「マスタデータシート」です。


このシートでは計算や装飾を一切行わず、純粋なデータのみを蓄積します。主なカラムは、製番(ユニークID)、プロジェクト名、社員/担当者、フェーズ(製作 or 現地調整)、開始日・終了日、ステータスです。

ここで重要なのは、「完了」や「失注」といったステータス管理です。これをフラグとして活用することで、後述するガントチャートなどのビューを動的に制御する仕組みにしています。


マスタデータシート
マスタデータシート



4. 可視化の実装:動的ガントチャートの構築


マスタデータを元に、C#のLINQでフィルタリングを行うようなロジックを、スプレッドシートの関数(FILTER, QUERY関数など)で実装しました。


例:=QUERY('マスタデータ'!C2:I, "SELECT C, D, F, E, I, G, H WHERE C IS NOT NULL AND (I != '完了' AND I != '失注') ORDER BY C, F DESC, E, G")


「プロジェクト別ガントチャート」では、特定の案件を俯瞰できます。「完了」「失注」のプロジェクトは自動的に非表示になり、今動いている「生きている案件」だけに集中できる仕組みです。

また、「日単位」と「週単位」を一つのシートで切り替えられるようにしました。表示開始日を起点に日付を動的に生成し、期間と重なるセルに条件付き書式で色を塗るロジックを組んでいます。


プロジェクト別ガントチャート
プロジェクト別ガントチャート



社員別ガントチャート(リソース管理)


もう一つの重要なビューが「社員別ガントチャート」です。


これは「誰が忙しいのか」を可視化するために、社員ごとのタスクを並べ替えて表示します。

これにより、「Aさんに負荷が集中しているから、このプロジェクトはBさんに頼もう」といった意思決定が、勘ではなくデータに基づいて行えるようになりました。


リソースの偏りが見える化されることで、無理のないスケジューリングが可能になり、チーム全体の健全な運用にも繋がっています。


社員別ガントチャート
社員別ガントチャート




おわりに


ツールは「育てる」もの


今回、Redmineを諦めてスプレッドシートに舵を切ったのは、「いかに入力しやすく、いかに最新の情報を保てるか」を最優先した結果の、戦略的選択です。


まずはスプレッドシートで「データが常に最新である」という文化を定着させ、そこからC#を駆使して自動化・高度化していく。これこそが、我々エンジニアが組織に貢献できる、現実的なアプローチだと信じています。


皆さんの現場では、どのような「管理の苦労」がありますか?もしExcelの限界を感じているなら、一度「データベースとして設計されたスプレッドシート」を試してみてはいかがでしょうか。


コメント


この投稿へのコメントは利用できなくなりました。詳細はサイト所有者にお問い合わせください。
bottom of page