GAS × Access

API連携で実現するSlack通知・GAS活用術

nanikatoaccess

以下では、「API連携で実現するSlack通知・GAS活用術」と題して、Microsoft Access(VBA)からSlackやGoogle Apps Script(GAS)を活用する具体的な方法を詳述します。
「Call データベース接続」を前提としたSQL Server連携の仕組みや、実際のVBAコード例、セキュリティ面で気をつけるポイントなどを網羅的に解説します。
Accessアプリケーションを単なるデスクトップDBにとどまらせず、クラウドサービスと組み合わせることで、大幅な業務効率化が期待できます。ぜひ参考にしてください。


目次

  1. はじめに:Access×API連携の魅力
  2. Slack連携:Accessからリアルタイム通知を実現
    • 2.1 Slack連携のメリット
    • 2.2 Slack API(Webhook)の準備
    • 2.3 Access(VBA)のコード例(Slack通知)
    • 2.4 セキュリティと注意点
  3. GAS連携:Googleサービスとのデータ共有を加速
    • 3.1 GAS連携のメリット
    • 3.2 GAS側のWebアプリ化設定
    • 3.3 Access(VBA)のコード例(GASとのデータ連携)
    • 3.4 注意点とセキュリティ
  4. SQL Server連携とAPI呼び出しを組み合わせるベストプラクティス
    • 4.1 「Call データベース接続」を使ったデータ登録~通知の流れ
    • 4.2 入力チェックとSQLインジェクション対策
    • 4.3 パフォーマンスの考慮
  5. まとめ:Accessで広がるクラウド連携の可能性

ないものはない!お買い物なら楽天市場

1. はじめに:Access×API連携の魅力

Microsoft Access は、小~中規模の業務アプリケーションを素早く作成できるデスクトップDB環境として長年利用されてきました。一方で「単体で閉じている」というイメージが強く、外部サービスやクラウドとの連携はやや敷居が高いと考えられがちです。

しかし実際には、「API」(Application Programming Interface)を通じてSlackやGoogle Apps Script (GAS)などのクラウドサービスと連携することが可能です。たとえば、Accessで入力されたデータを元にSlackでチームへ通知したり、GASにデータを送りGoogle スプレッドシートやGmailと連動させたりと、多彩なシナジーを生み出せます。

ポイントは、VBAでHTTPリクエストを送信する仕組みを理解し、入力値チェックセキュリティ(認証情報の取り扱い)をしっかり押さえること。以下で、その具体的な方法を順を追って解説していきます。


2. Slack連携:Accessからリアルタイム通知を実現

2.1 Slack連携のメリット

  1. リアルタイム情報共有
    受注や在庫の更新などが行われるたびにSlackへ通知することで、担当者全員が即座に把握できるようになります。
  2. 手軽な導入
    SlackのAPIは比較的わかりやすいWebhooks方式を提供しており、初期設定も簡単です。
  3. チャットボット拡張
    さらに高度な連携を行えば、Access側のボタン操作でSlackからデータを取得してAccessに反映するなど、双方向連携が可能になります。

2.2 Slack API(Webhook)の準備

  1. Slackワークスペースでアプリ作成
  2. Incoming Webhookを有効化
    • アプリ設定でIncoming Webhookを有効にし、通知先となるチャンネルとWebhook URLを取得します。
    • 例:https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXX
  3. Webhook URLを安全に保管
    • このURLを外部に漏らすと、不特定多数が勝手にSlackへ投稿できてしまう可能性があります。ソースコード管理や公開範囲に注意してください。

2.3 Access(VBA)のコード例(Slack通知)

以下は、Accessでフォーム入力した内容をSlackへ通知するサンプルです。
あわせて、SQL Serverへの登録例との連携を想定し、「Call データベース接続」 を利用したINSERT処理も組み込んでいます。

'------------------------------------------------------------------------------------------
'【目的】 新規データをSQL Serverに登録後、Slackに通知を送るサンプル
'【ポイント】
' ①Call データベース接続でSQL Serverに接続していることを前提
' ②入力必須項目チェック(null確認)
' ③SQLインジェクション対策
' ④登録完了後に入力項目をnullクリア
' ⑤Slackへの通知はWinHttpでPOST送信
'------------------------------------------------------------------------------------------
Public Sub データ登録とSlack通知(str顧客名 As String, str注文内容 As String)

'=== 1) 入力チェック ===
If IsNull(str顧客名) Or str顧客名 = "" Then
MsgBox "顧客名は必須入力です。", vbExclamation
Exit Sub
End If

If IsNull(str注文内容) Then str注文内容 = ""

'=== 2) SQLインジェクション対策:簡易Replace ===
Dim strSafe顧客名 As String
Dim strSafe注文内容 As String
strSafe顧客名 = Replace(str顧客名, "'", "''")
strSafe注文内容 = Replace(str注文内容, "'", "''")

'=== 3) SQL ServerへのINSERT文作成 ===
' Call データベース接続で確立している cn を使用
Dim strSQL As String
strSQL = "INSERT INTO dbo.注文テーブル(顧客名, 注文内容, 登録日) VALUES(" & _
"'" & strSafe顧客名 & "','" & strSafe注文内容 & "', GETDATE())"

'=== 4) SQL実行 ===
Call データベース接続 ' 接続がまだであれば実行、既に接続済みなら不要
cn.Execute strSQL, , adCmdText

'=== 5) Slack通知送信 ===
Dim httpReq As Object
Set httpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

' Webhook URL(自分のSlackアプリで取得したものをセット)
Const SLACK_WEBHOOK As String = "https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXX"

' Slackに送るメッセージをJSON形式で準備
Dim strMessage As String
strMessage = "顧客名: " & str顧客名 & vbCrLf & _
"注文内容: " & str注文内容 & vbCrLf & _
"登録日時: " & Now()

Dim jsonData As String
jsonData = "{""text"":""" & Replace(strMessage, """", """""") & """}"

' SlackにPOST
httpReq.Open "POST", SLACK_WEBHOOK, False
httpReq.setRequestHeader "Content-Type", "application/json"
httpReq.Send jsonData

If httpReq.Status = 200 Then
MsgBox "SQL Server登録およびSlack通知が完了しました。", vbInformation
Else
MsgBox "SQL Server登録は成功しましたが、Slack通知でエラーが発生しました。Status: " & httpReq.Status
End If

'=== 6) 入力項目クリア ===
' フォーム上のコントロールをクリアする例
'Me.txt顧客名 = Null
'Me.txt注文内容 = Null

'=== 7) オブジェクト解放 ===
Set httpReq = Nothing

End Sub

コード解説

  • Call データベース接続
    • 事前に定義してある データベース接続() サブで、cn (ADODB.Connection) をOpenしている前提。
  • 入力必須項目のチェック
    • IsNull(str顧客名) Or str顧客名 = "" のように必須入力をバリデーション。
  • SQLインジェクション対策
    • Replace(str顧客名, "'", "''") 等でシングルクォートをダブルに置換。パラメータ化クエリやストアドプロシージャを使うとさらに安全です。
  • Slackへの通知
    • WinHttp.WinHttpRequest オブジェクトを使ってPOSTリクエスト。
    • Webhook URLやメッセージ部分は実運用であれば定数ファイルや設定テーブルなどで管理するのがおすすめです。

2.4 セキュリティと注意点

  • Webhook URLの漏洩防止: ソースコードを外部に公開するときはURLを隠すか、別途暗号化/保存先を分けるなどの配慮が必要。
  • メッセージの制御: Slackのチャンネルやメンション先を誤ると情報漏洩のリスクがあるため、通知先の運用設計を明確にしておきましょう。
  • 大量送信への対策: イベントが頻繁に発生する場合、Slackのレート制限に触れないようにバッチ化や一括通知などを検討しましょう。

3. GAS連携:Googleサービスとのデータ共有を加速

3.1 GAS連携のメリット

  1. Google スプレッドシートとのデータ同期
    • Accessで登録したデータをGAS経由でスプレッドシートに書き込み、クラウド上でリアルタイム共有。
  2. Gmailやカレンダー操作
    • 顧客データをもとに自動メール送信やカレンダー予約を行うなど、Google Workspace全体と連携可能。
  3. サーバーレス運用
    • GASはGoogleのクラウド上で動作するため、サーバーを自前で管理する必要がありません。手軽にスタートできる点も大きな魅力です。

3.2 GAS側のWebアプリ化設定

  1. GASプロジェクト作成
    • Google ドライブ上で新規作成 → 「Google Apps Script」を選択。
  2. doPost(e) 関数の定義
    • 受信したHTTPリクエストを処理するために doPost(e) を実装します。
  3. デプロイ(Webアプリとして公開)
    • エディタ上部の「デプロイ」→「新しいデプロイ」から「種類:ウェブアプリ」を選択。アクセス権限などを設定し「デプロイ」を実行。
    • デプロイ後に発行される「WebアプリURL」を控えておきます。
  4. 権限設定
    • 「誰でも(匿名含む)」がアクセスできる設定にするか、Googleアカウント要ログインにするかは用途・セキュリティ要件で決定。

GASサンプルコード(イメージ):

function doPost(e) {
// ①POSTデータ受け取り
var data = JSON.parse(e.postData.contents);

// ②スプレッドシートに書き込み
var sheet = SpreadsheetApp.openById("************").getSheetByName("受信データ");
sheet.appendRow([data.customerName, data.orderDetail, new Date()]);

// ③レスポンス
return ContentService.createTextOutput("OK");
}

3.3 Access(VBA)のコード例(GASとのデータ連携)

以下は、Accessフォームで入力した顧客名と注文内容をGASのWebアプリに対してPOSTし、Google スプレッドシートに書き込む例です。

'------------------------------------------------------------------------------------------
'【目的】 Accessで入力した顧客情報をGAS(Webアプリ)に送信し、Googleスプレッドシートに保存する
'【ポイント】
' ①入力値チェック(null確認)
' ②JSON形式でデータを作り、POST
' ③結果ステータスを確認しエラー処理
' ④登録後、入力項目をNullにしてクリア
'------------------------------------------------------------------------------------------
Public Sub 顧客データをGASへ送信(str顧客名 As String, str注文内容 As String)

'=== 1) 入力必須項目チェック ===
If IsNull(str顧客名) Or str顧客名 = "" Then
MsgBox "顧客名は必須入力です。", vbExclamation
Exit Sub
End If

If IsNull(str注文内容) Then str注文内容 = ""

'=== 2) JSONデータ組み立て(SQLインジェクションは関係ないが特殊文字はエスケープ推奨)===
Dim strJson As String
Dim strSafeName As String
Dim strSafeOrder As String

strSafeName = Replace(str顧客名, """", """""")
strSafeOrder = Replace(str注文内容, """", """""")

strJson = "{""customerName"":""" & strSafeName & """,""orderDetail"":""" & strSafeOrder & """}"

'=== 3) WinHttpオブジェクトでPOST送信 ===
Dim httpReq As Object
Set httpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

' WebアプリURL (GASデプロイ時のURLを貼り付け)
Const GAS_WEBAPP_URL As String = "https://script.google.com/macros/s/XXXXXXXXXXXX/exec"

httpReq.Open "POST", GAS_WEBAPP_URL, False
httpReq.setRequestHeader "Content-Type", "application/json"
httpReq.Send strJson

'=== 4) ステータスチェック ===
If httpReq.Status = 200 Then
MsgBox "GAS連携が完了しました。スプレッドシートをご確認ください。", vbInformation

'⑤登録後にフォームの入力項目をクリア
'Me.txt顧客名 = Null
'Me.txt注文内容 = Null
Else
MsgBox "GAS連携に失敗しました。ステータスコード:" & httpReq.Status, vbCritical
End If

'=== 5) オブジェクト解放 ===
Set httpReq = Nothing

End Sub

コード解説

  • HTTP POST
    • Slack同様に WinHttp.WinHttpRequest を使い、Content-Type"application/json" に設定してJSON形式のデータを送信。
  • GAS側での認証
    • 「特定のアカウントのみが利用可能」に設定した場合は、OAuth認証が必要になるケースもあります。簡易運用なら「誰でもアクセス可能」にして、機密情報を含まないようにする工夫が必要です。
  • 入力項目クリア
    • 新規データ登録時の操作感を考慮し、送信完了後にフォームを初期化するとユーザーが続けて作業しやすくなります。

3.4 注意点とセキュリティ

  • WebアプリURLの保護
    • Slackと同様、URLが漏洩すると悪意のあるリクエストを受ける可能性があるため、十分に注意すること。
  • Access側から送る情報に機密データを含まない
    • 個人情報やパスワードなど、極めて機密度の高い情報を送信する場合は、通信経路(HTTPS)や認証・暗号化の仕組みを慎重に検討する必要があります。
  • Rate Limit
    • Google Apps Scriptにも使用制限(実行時間や呼び出し回数)が存在します。大量データを一括送信する場合は、分割・バッチ処理などの工夫が必要です。

4. SQL Server連携とAPI呼び出しを組み合わせるベストプラクティス

4.1 「Call データベース接続」を使ったデータ登録~通知の流れ

  1. Accessフォームで情報入力
    • 必須項目をチェック → SQL ServerへINSERT
  2. INSERT成功後にSlack/GASへHTTP POST
    • Slackへ「登録完了」の通知を送り、チームにリアルタイム共有
    • 同時にGASへもデータ送信し、Spreadsheet等に蓄積
  3. ユーザーはAccess画面で処理状況を把握
    • 成功の場合はメッセージ表示&フォーム入力欄をクリア

この流れを標準化しておけば、社内システムクラウドサービスの橋渡しが容易になり、業務の見える化・効率化が飛躍的に向上します。


4.2 入力チェックとSQLインジェクション対策

  • Access→SQL ServerへのINSERT/UPDATE
    • 数値型項目は IsNumeric で検証、文字列項目は ''' にエスケープ。
    • さらに高セキュリティを要求する場合は、「パラメータ化クエリ」や「ストアドプロシージャの引数」を利用。
  • Access→外部API
    • SlackやGASへは、クォート等の特殊文字をJSONでエスケープ。
    • REST APIを使う際もパラメータを適切にエンコードし、想定外の文字列混入を防ぎましょう。

4.3 パフォーマンスの考慮

  1. トランザクションの利用
    • 大量データをまとめてINSERTする場合、ADOのトランザクションを使用して一括コミットすると高速化できる場合があります。
  2. 非同期処理の検討
    • Slack通知やGAS連携が頻繁に行われると、レスポンス待ちによってユーザーの操作がブロックされる可能性があります。要件によってはバックグラウンド実行・キューイングなどの仕組みを導入するとスムーズです。
  3. ネットワーク帯域
    • 会社外からVPN経由でSQL Server・Slack・GASに接続する環境では、通信遅延が起こりやすくなります。サーバーサイド(オンプレ/クラウド)の配置や処理負荷を見ながら、実装を最適化してください。

5. まとめ:Accessで広がるクラウド連携の可能性

本記事では、「API連携で実現するSlack通知・GAS活用術」というテーマで、Access (VBA) から外部サービスへHTTPリクエストを送り、クラウドと連携する具体的な方法を紹介しました。

  • Slack連携: Webhookを用い、Accessで更新された情報を即座にチームへ通知。リアルタイムな情報共有が可能に。
  • GAS連携: Google スプレッドシートとのデータ同期・自動メール送信など、多岐にわたるGoogleサービスとの連動を手軽に実現。
  • SQL Server×API: 「Call データベース接続」でデータを堅牢に管理しつつ、必要なタイミングでクラウドAPIへ通知・連携する仕組みを構築可能。

これにより、**「AccessはスタンドアロンDBだから古い」というイメージを一新し、クラウド活用の要素を取り込んだ最新の業務システム」を安価かつスピーディに作り上げられます。さらに、パススルークエリやStored ProcedureなどのSQL Server機能を組み合わせれば、大規模データや高パフォーマンス要件にも対応が可能です。

今後の展開例

  • Slack連携を発展させて、コマンド入力→Accessに問い合わせ→結果をSlackに返す「チャットボット風」機能を実装。
  • GAS連携を応用して、フォームからの入力に応じた自動メール送信や、カレンダーへの予定登録などのビジネスロジック拡張。
  • AzureやRESTfulな外部サービス(API)とも組み合わせ、さらに多彩なクラウド基盤を取り入れる。

Accessを中心にしながらクラウドと連携することで、「小さく始めて大きく育てる」という開発スタイルがますます実現しやすくなります。ぜひ今回紹介した方法を参考に、自社の業務フローやアイデアにあったAPI連携に挑戦してみてください。きっと大きな生産性向上をもたらしてくれるはずです。

本ブログでは、引き続き「Accessで始める業務システム開発の最前線」をテーマに情報発信していきますので、ぜひ他の記事もご覧ください。あなたの開発・業務効率化に少しでも貢献できれば幸いです。

DMM
ABOUT ME
管理人
管理人
駆け出しブロガー
入社した会社では、Accessを活用した基幹システムが長年運用されていました。しかし、開発者の高齢化により保守が困難となり、システムの維持・更新が急務に。 ほぼAccessに触れたことのなかった私は、ゼロから学びながら基幹システムを再構築してみることに。ついにはAccessによるシステム開発エンジニアとしてのスキルを身につけるまでに成長。 元々の業務のノウハウとそれを効率化するためのツール(Access)によって業務効率化システムをいくつも開発してきました。 みなさんの”なにか(業務のノウハウ)”とAccessで業務効率化を実現するお役に立てれば幸いです。
googleアドセンス
記事URLをコピーしました