AutoCADを「孤島」から解き放つ:Webhook連携で図面保存をチームの共有体験に変える
こんにちは。現場の設計業務を支えるエンジニアの皆さん。
日々、巨大なDWGファイルと格闘し、保存が終わるのをじっと待つ……そんな時間は、エンジニアにとって最も「生産性が停止している」時間ですよね。
「重い図面の保存が終わったよ」「バッチ処理が完了したから確認して」
これらをいちいちチャットツールに打ち込むのは、手間ですし、何より「自動化の魂」が足りません。
今日は、AutoCAD VBAを単なる「図形を描く道具」から、「チームと通信するインテリジェントなエージェント」へと進化させる手法を伝授します。ターゲットは、マクロの記録から一歩踏み出し、実務で使える「仕組み」を作りたいと考えている中級者への入り口です。
1. なぜ「Webhook」なのか? ―― 境界線を越える技術
これまでのVBAは、AutoCADという「閉じた世界」の中だけで完結していました。しかし、現代のワークスタイルはリモートが主流です。作業の進捗を周囲に知らせるには、AutoCADの外側にある Teams や Slack と会話する必要があります。
そこで登場するのが 「Webhook(ウェブフック)」 です。
Webhookは、簡単に言えば「特定のURLに対して、決められた形式のデータを投げると、あらかじめ設定されたアクション(チャットへの投稿など)を実行してくれる仕組み」です。
AutoCAD VBAからこのURLに対して「メッセージ」を送信するだけで、あなたの図面作業はリアルタイムでチームに共有されるようになります。
2. 事前準備:通知の「宛先」を手に入れよう
コードを書く前に、まずは通知を送るための「窓口(URL)」を用意しましょう。
Teamsの場合
1. 通知したいチャネルの「コネクタ」または「ワークフロー」から「Incoming Webhook」を選択。
2. 名前を設定し、発行された URL をコピーしてメモしておきます。
Slackの場合
1. 「Incoming Webhooks」アプリをチャンネルに追加。
2. 発行された Webhook URL をコピーしておきます。
3. 実装:魂を込めた「Smart Save」コード
それでは、いよいよコードの世界へ。
今回は、単なる `Save` コマンドではなく、「保存を実行し、成功したらチャットへ報告する」 という一連の流れをパッケージ化した関数を作成します。
⚠️ 重要なステップ:参照設定
このコードを動かすには、VBAエディタのメニューから [ツール] -> [参照設定] を開き、以下にチェックを入れてください。これがないと、インターネットへの通信(HTTPリクエスト)ができません。
- Microsoft XML, v6.0
実装コード例
Option Explicit
' =================================================================
' 目的: 図面を保存し、完了後にTeams/Slackへ通知を送る
' 開発者: あなたの専属チーフアーキテクト
' =================================================================
Sub SmartSaveAndNotify()
Dim doc As AcadDocument
Set doc = ThisDrawing
' --- 設定エリア ---
' 先ほど取得したWebhook URLをここに貼り付けてください
Const WEBHOOK_URL As String = "https://your-webhook-url-here..."
' ------------------
On Error GoTo ErrorHandler
' 1. 図面の保存を実行
' ユーザーが保存をキャンセルした場合はここで中断される
doc.Save
' 2. 通知メッセージの構築
' JSON形式というルールに従って文字列を作成します
Dim msg As String
Dim fileName As String
fileName = doc.Name
' Teams/Slackが理解できるJSON形式の組み立て
' ※メッセージ内容はツールに合わせて調整が必要な場合があります
msg = "{""text"": ""✅ 図面保存完了通知\n" & _
"ファイル名: " & fileName & "\n" & _
"ステータス: 正常に保存されました。""}"
' 3. Webhookの送信実行
Call SendToWebhook(WEBHOOK_URL, msg)
MsgBox "保存と通知が完了しました。", vbInformation, "Success"
Exit Sub
ErrorHandler:
' 保存キャンセルやネットワークエラーが発生した場合
If Err.Number <> -2147012865 Then ' 保存キャンセル等の特定エラーを除外
MsgBox "エラーが発生しました: " & Err.Description, vbCritical, "Error"
' エラー時もチームに知らせるなら、ここで通知関数を呼ぶのも手です
End If
End Sub
''' <summary>
''' HTTP POSTリクエストを使用してWebhookへデータを送信する低レイヤー関数
''' </summary>
Private Sub SendToWebhook(url As String, jsonPayload As String)
Dim http As MSXML2.XMLHTTP60
Set http = New MSXML2.XMLHTTP60
' HTTP POSTメソッドで接続を開始
http.Open "POST", url, False
' ヘッダーの設定: 「今から送るのはJSONデータですよ」と伝える
http.setRequestHeader "Content-Type", "application/json"
' データの送信
http.send jsonPayload
' レスポンス(サーバーからの返事)の確認
' 200番台が成功、それ以外はエラー
If http.Status < 200 Or http.Status >= 300 Then
Debug.Print "Webhook送信失敗。Status: " & http.Status & " Response: " & http.responseText
End If
End Sub
4. アーキテクトの視点:陥りやすい罠とパフォーマンスの重み
ここからは、リファレンスには載っていない「現場の知恵」をお伝えします。
① ネットワークの「待ち時間」というコスト
`http.send` を実行している間、AutoCADは一瞬だけ「通信待ち」の状態になります。図面が非常に重い場合、保存自体に時間がかかりますが、ネットワークが極端に遅い環境だと、保存が終わった後も数秒間AutoCADが固まったように見えることがあります。
「自動化は便利だが、ユーザーの操作感を奪わないこと」。これがプロの設計思想です。
② エラーハンドリングの重要性
もしインターネットが切断されていたら? WebhookのURLが間違っていたら?
もしエラー処理(`On Error GoTo`)を怠ると、「図面は保存できたのに、通知エラーのせいでマクロが止まってしまう」 という本末転倒な事態を招きます。
「図面の保存」というメイン業務を絶対に邪魔させないための、堅牢なエラーハンドリングを心がけてください。
③ JSON形式の「クォーテーション」地獄
コード内で `msg = “{“”text””: …}”` と、ダブルクォーテーションが重なっている部分に気づきましたか?
JSONは文字列を `”` で囲むルールがありますが、VBAの文字列内で `”` を表現するには `””` と2つ重ねる必要があります。ここを間違えると、チャットツール側で「不正なデータです」と拒絶されてしまいます。
まとめ:一歩先の自動化へ
今回のコードは、単にメッセージを送るだけのものではありません。
「AutoCADというツールを、組織のワークフローに組み込むための架け橋」 です。
これができるようになれば、次は「バッチ処理で100個の図面を変換し、最後に一括で完了報告を送る」といった、より高度な自動化へステップアップできます。
「マクロの記録」で終わるか、それとも「システム」を構築するか。
その境界線は、こうした外部連携への挑戦にあります。
さあ、あなたのAutoCADに、新しい「声」を与えてあげてください。
応援していますよ。
