【テクニカル・上級編】リソースの「割り当て」情報をJSON形式でエクスポートし、Webダッシュボードと連携する – Project VBA解析バイブル

スポンサーリンク

Project VBAを掌握する:リソース割り当てデータのJSONエクスポートとWeb連携の極致

諸君。VBAを単なる「マクロ記録器」の延長で使っているようでは、レガシーの呪縛からは一生逃れられない。Project VBAは、正しく扱えば、現代のWebフロントエンドと最強の連携を果たす「バックエンド・データエンジン」へと変貌する。

今回は、プロジェクトの「リソース割り当て情報」を抽出し、Webダッシュボードへ受け渡すためのJSONエクスポート戦略を伝授する。

—

1. なぜ「JSON直接出力」なのか:オブジェクトのライフサイクルを制する

多くのエンジニアが犯す過ちは、`Scripting.Dictionary`や`Collection`を無造作に積み上げ、メモリを浪費することだ。VBAのメモリ管理は参照カウンタ方式である。オブジェクトの生存期間を意識しないコードは、大規模プロジェクトにおいて必ずリークを引き起こす。

JSON化において重要なのは、「巨大な中間オブジェクトを生成せず、可能な限り文字列結合を避けてストリームへ流し込む」ことだ。今回は、ADO Streamオブジェクトを使い、メモリ消費を最小限に抑えつつ、UTF-8エンコーディングで書き出す手法を共有する。

—

2. 実装の核心:ADO Streamによる高効率エクスポート

`FileSystemObject`の`CreateTextFile`は、エンコーディング指定に難がある。Webダッシュボード(React/Vue.js等)と親和性の高いUTF-8を実現するには、`ADODB.Stream`を用いるのが唯一にして最強の解だ。

‘ リソース割り当て情報をJSONとして書き出すコアロジック
Public Sub ExportResourceAssignmentsToJson(ByVal filePath As String)
Dim stream As Object
Set stream = CreateObject(“ADODB.Stream”)

‘ ストリーム設定:メモリ使用を最小化し、UTF-8で固定
With stream
.Type = 2 ‘ adTypeText
.Charset = “utf-8”
.Open
.WriteText BuildJsonString() ‘ ここでJSON文字列を生成
.SaveToFile filePath, 2 ‘ adSaveCreateOverWrite
.Close
End With

‘ 明示的解放:ガベージコレクタを待つな
Set stream = Nothing
End Sub

Private Function BuildJsonString() As String
‘ ここでProjectオブジェクトからデータを抽出
‘ 巨大な文字列結合はパフォーマンスを殺すため、必要に応じて
‘ StringBuilderパターン(配列連結)を推奨する
‘ …(データ抽出ロジック)
End Function

—

3. シニアのための最適化:Windows APIとメモリ管理

大規模なProjectファイルから数千件のリソース割り当てを掃き出す際、VBAのループはボトルネックになる。ここで重要なのは、「ProjectのCOMオブジェクトを直接叩く回数を最小化する」ことだ。

パフォーマンスを極限まで高めるTips:

1. Application.ScreenUpdating = False: 当然の鉄則だ。
2. Calculation = xlCalculationManual: 再計算は殺せ。
3. 変数の型定義: `Variant`を排除し、`Object`の遅延バインディングを避ける。`Dim res As Pj.Assignment`のように明示的な型指定を行え。
4. Windows APIの活用: ファイルの書き込み待ちが発生する場合、`Sleep`関数(`kernel32`)を用いてI/O負荷を調整するのも手だ。

—

4. Webダッシュボード連携のアーキテクチャ

JSONを吐き出すだけでは不十分だ。Webダッシュボード側で「いつデータが更新されたか」を検知させる必要がある。

  • ファイル監視: Webサーバー側で`watchdog`等のライブラリを使い、JSON更新をトリガーにDBを同期させる。
  • 認証: VBAからクラウドストレージ(OneDrive/SharePoint)へ書き出す場合、`WinHttp.WinHttpRequest.5.1`を用いてOAuth2認証を突破する。

VBAは、もはやローカルの閉じた世界にいるのではない。Web APIを介した「データ供給源」として再定義せよ。

—

結論:守りの保守から、攻めのアーキテクトへ

VBAはレガシーではない。使い手次第で、現代のシステム間連携における「最後のピース」になり得る。メモリを食いつぶすような不適切なオブジェクト生成を止め、ストリームを理解し、型を厳格に定義する。

この姿勢こそが、10年後も動く「伝説のシステム」を構築する唯一の道だ。諸君のプロジェクトが、洗練されたデータ連携によって、新たなフェーズへ進化することを期待している。

技術は裏切らない。ただ、設計の甘さを突くだけだ。

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