【入門編】WBSの「階層構造」をJSONへシリアライズし、Webダッシュボードと連携するAPI開発 – Project VBA解析バイブル

スポンサーリンク

Project VBAを掌握せよ:WBS階層をJSONへ変換し、ダッシュボードを覚醒させる極意

こんにちは。現場で泥臭い自動化を積み重ね、いつしか「Projectの守護神」と呼ばれるようになったエンジニアです。

皆さんは、Microsoft Project(以下MS Project)でWBS(Work Breakdown Structure)を管理しているとき、こんなもどかしさを感じたことはありませんか?
「このガントチャート、ブラウザでサクッと見れたらどれだけ楽だろうか」と。

MS Projectの標準レポートは確かに強力ですが、現代のビジネススピードには追いつけません。そこで今回は、MS Projectのタスク階層をJSONとして抽出し、Webダッシュボードと連携させるための「VBAアーキテクチャ」を伝授します。

「マクロの記録」ボタンを押すだけの世界を卒業し、データの構造そのものを操るエンジニアの視点へ、一緒に踏み出しましょう。

1. なぜ「階層構造」を扱うことが難しいのか?

MS Projectのデータモデルにおいて、タスクは「親子関係」を持つ木構造(Tree Structure)です。
データベースのテーブルのようにフラットではなく、`OutlineLevel`(アウトラインレベル)という値で階層が決まります。

JSONへシリアライズする際、この「親子関係」をどう表現するかが勝負です。私たちは以下の構造を目指します。

{
“taskId”: 1,
“name”: “プロジェクト開始”,
“children”: [
{ “taskId”: 2, “name”: “要件定義” },
{ “taskId”: 3, “name”: “基本設計” }
]
}

この「入れ子構造」をVBAで再帰的に構築するのが、今回のミッションです。

2. 実装:VBAでJSONを生成する核となるロジック

VBAでJSONを生成する際、ライブラリを使わずに文字列操作だけで済ませるのは「メンテナンスの地獄」への片道切符です。まずは、「タスクを巡回し、階層を再帰的に取得する」という基本ロジックをマスターしましょう。

実践コード:タスク抽出エンジン

以下のコードは、Projectのタスクを走査し、JSON形式の文字列を生成する基盤です。

‘ 標準モジュールに記述
Option Explicit

Public Sub ExportTasksToJson()
Dim proj As Project
Set proj = ActiveProject

‘ 階層の最上位(レベル1)から再帰的に抽出を開始
Dim jsonString As String
jsonString = “[” & GetTaskHierarchy(proj.Tasks(1), 1) & “]”

‘ 結果をデバッグ出力(またはファイル出力)
Debug.Print jsonString
End Sub

‘ 再帰関数:タスクの親子関係をJSON文字列に変換する
Function GetTaskHierarchy(t As Task, targetLevel As Integer) As String
Dim result As String
Dim subTask As Task

result = “{ “”id””: ” & t.ID & “, “”name””: “”” & t.Name & “”””

‘ 子タスクが存在するかチェック
If t.OutlineChildren.Count > 0 Then
result = result & “, “”children””: [”
For Each subTask In t.OutlineChildren
result = result & GetTaskHierarchy(subTask, targetLevel + 1) & “,”
Next subTask
‘ 最後のカンマを削除して閉じる
result = Left(result, Len(result) – 1) & “]”
End If

result = result & “}”
GetTaskHierarchy = result
End Function

3. ここをクリアすれば一人前!陥りやすい罠

このコードを書く際、初学者が必ず直面する「壁」が2つあります。

罠①:階層の無限ループとスタックオーバーフロー

`t.OutlineChildren` を使うのは非常に強力ですが、ループの終了条件を見誤ると、メモリを食い尽くしてProjectがクラッシュします。必ず「親から子へ」という一方向のフローであることを確認してください。

罠②:文字列操作のオーバーヘッド

VBAの文字列連結 `&` は、数千行のタスクを扱うと非常に重くなります。本番環境では `StringBuilder` クラス(VBAのクラスモジュールで自作可能)を導入し、メモリ効率を最適化することをお勧めします。

4. ダッシュボード連携へのロードマップ

このJSONさえ生成できれば、あとは無限の可能性が広がります。

1. 保存: `CreateObject(“Scripting.FileSystemObject”)` を使い、JSONファイルとしてローカルに出力。
2. 転送: Power AutomateやPython等のスクリプトで、そのファイルをWebサーバー(またはクラウドストレージ)へアップロード。
3. 可視化: ReactやVue.jsといったモダンなフロントエンドフレームワークで、D3.js等を用いてガントチャートを表示。

最後に:エンジニアとして成長するために

「マクロ」とは、単なる作業の自動化ではありません。「業務の構造を理解し、それをコードという言語で再定義する」という知的なプロセスです。

今回紹介した「階層構造をJSONにする」という考え方は、Projectだけでなく、あらゆる階層データの処理に応用できます。まずはこのコードをコピペして、自分のプロジェクトで動かしてみてください。

もし動かなくて悩んだら、それはあなたのコードが「成長しようとしている」証拠です。その時はまた、いつでも聞きに来てください。あなたの自動化の旅を、全力で応援しています。

さあ、Projectの壁を壊し、見える化の先へ進みましょう。

タイトルとURLをコピーしました