Accessシステムの保守で最も工数がかかるのは、仕様変更のたびにVBAソースを修正する作業です。設定テーブル駆動型の設計にすることで、プログラムを修正せずに運用ルールの変更へ対応しやすくなります。また、Copilotを活用することで設定テーブル設計やVBAコード作成も効率化できます。
当サイトでは動的SQL、メール送信、パフォーマンスログ、Excel加工、トランザクション処理などを紹介しています。今回は運用保守性向上に焦点を当てた「設定テーブル駆動型システム」を解説します。 [latest-inf…system.com], [latest-inf…system.com], [latest-inf…system.com], [latest-inf…system.com]
なぜ設定テーブルが重要なのか
多くのAccessシステムでは以下のような値が頻繁に変更されます。
- 保存先フォルダ
- メール送信先
- CSV取込先
- 管理者情報
- 閾値設定
- 税率
- 集計対象期間
初心者が作るシステムでは次のように直接記述しがちです。
strFolder = “C:\Import”
strMail = “admin@example.com“
If Amount >= 100000 Then
この場合、変更のたびにVBA修正が必要になります。
運用開始後に保守負荷が急増する原因になります。
設定テーブル駆動型とは
設定内容をテーブルで管理する方法です。
T_SYSTEM_SETTING
| 設定キー | 設定値 |
|---|---|
| IMPORT_FOLDER | C:\Import |
| ADMIN_MAIL | admin@example.com |
| LIMIT_AMOUNT | 100000 |
プログラムは設定値を参照して動作します。
設定テーブル
↓
VBA取得
↓
処理実行
という構成になります。
逆引き① 設定値を取得したい
最も基本となる処理です。
Public Function GetSettingValue( _
ByVal KeyName As String) As String
GetSettingValue = Nz( _
DLookup( _
"設定値", _
"T_SYSTEM_SETTING", _
"設定キー='" & KeyName & "'"), _
"")
End Function
利用例です。
strFolder = _
GetSettingValue("IMPORT_FOLDER")
ハードコーディングを削減できます。
逆引き② 存在チェックをしたい
設定漏れ対策です。
If GetSettingValue( _
"ADMIN_MAIL") = "" Then
MsgBox _
"設定が見つかりません"
Exit Sub
End If
運用時のトラブルを防止できます。
逆引き③ 数値設定を取得したい
閾値管理に利用します。
Dim lngLimit As Long
lngLimit = CLng( _
GetSettingValue( _
“LIMIT_AMOUNT”))
設定変更をテーブルのみで実施できます。
逆引き④ 日付設定を取得したい
定期処理で活用できます。
Dim dtTarget As Date
dtTarget = CDate( _
GetSettingValue( _
"TARGET_DATE"))
管理者が直接変更可能になります。
逆引き⑤ 設定値を更新したい
管理画面から変更する例です。
CurrentDb.Execute _
"UPDATE T_SYSTEM_SETTING " & _
"SET 設定値='200000' " & _
"WHERE 設定キー='LIMIT_AMOUNT'"
運用担当者自身で調整できます。
実践例① CSV取込システム
固定フォルダを設定テーブルへ移動します。
悪い例
DoCmd.TransferText _
acImportDelim, _
"", _
"T_DATA", _
"C:\Import\Data.csv"
良い例
strFolder = _
GetSettingValue( _
"IMPORT_FOLDER")
DoCmd.TransferText _
acImportDelim, _
"", _
"T_DATA", _
strFolder & "\Data.csv"
運用変更に柔軟に対応できます。
実践例② メール送信システム
送信先を変更できるようにします。
strMail = _
GetSettingValue( _
"ADMIN_MAIL")
テスト環境と本番環境で使い分けしやすくなります。 [latest-inf…system.com]
実践例③ PDF出力システム
保存先の変更を簡単にします。
PDF出力処理との相性も良好です。 [latest-inf…system.com]
strPdfFolder = _
GetSettingValue( _
"PDF_FOLDER")
設定分類を行う
実務では分類管理がおすすめです。
T_SYSTEM_SETTING
| 分類 | 設定キー | 設定値 |
|---|---|---|
| ADMIN_MAIL | xxx | |
| PATH | IMPORT_FOLDER | xxx |
| PATH | PDF_FOLDER | xxx |
| SYSTEM | LIMIT_AMOUNT | 100000 |
管理しやすくなります。
変更履歴を記録する
重要な設定はログを残します。
T_SETTING_LOG
| 項目 | 内容 |
|---|---|
| 更新日時 | 日時 |
| 設定キー | 対象 |
| 変更前 | 旧値 |
| 変更後 | 新値 |
| 更新者 | 担当者 |
監査対応にも役立ちます。 [latest-inf…system.com]
Copilotで設定テーブルを設計する
Copilotへ次のように依頼します。
プロンプト例
Accessシステムで利用する
設定テーブル設計を作成してください。
条件
・メール設定
・フォルダ設定
・運用パラメータ
・変更履歴管理
テーブル設計案を短時間で作成できます。
Copilot活用術① 共通関数作成
Access VBAで
設定テーブルから値を取得する
共通関数を作成してください。
再利用可能なコードを生成できます。
Copilot活用術② 設計レビュー
設定テーブル設計の
問題点をレビューしてください
設定の不足や改善案を得られます。
Copilot活用術③ 環境切替設計
開発環境
検証環境
本番環境
を切り替える方法を
提案してください
保守性向上につながります。
設定テーブル導入時の注意点
設定キーを統一する
良い例
IMPORT_FOLDER
PDF_FOLDER
ADMIN_MAIL
命名規則を決めましょう。
必須設定をチェックする
起動時に確認します。
アクセス権を管理する
誰でも変更できないようにします。
バックアップを取得する
設定テーブルも重要な資産です。
実務で効果の高い活用例
顧客管理システム
- 通知先変更
- 表示件数変更
- 保管期間変更
品質管理システム
- 判定基準
- 保存先
- 出力先
施設の管理業務データベース
- 点検期限
- 出力ルール
- 承認フロー条件
などの変更管理に活用できます。
AccessとCopilotの組み合わせが有効な理由
Accessは業務データ管理や設定管理に強みがあります。
一方Copilotは、
- テーブル設計
- VBA生成
- SQL作成
- コードレビュー
- 保守改善提案
を支援できます。 [latest-inf…system.com], [latest-inf…system.com]
設定テーブル駆動型へ移行する際にも非常に有効です。
まとめ
設定値をソースコードへ直接記述すると、運用開始後の保守負荷が増大します。
設定テーブル駆動型システムへ移行することで、
- 保守性向上
- 運用効率向上
- 障害リスク低減
- リリース回数削減
- 利用者満足度向上
を実現できます。
さらにCopilotを活用すれば、設定テーブル設計や共通関数作成、レビュー作業を効率化でき、長期間運用しやすいAccessシステムを構築できます。


コメント