【VBAリファレンス】生成AI活用研究Geminiと100本ノック 21本目:バックアップファイルの削除

スポンサーリンク

バックアップファイル削除の自動化:VBAと生成AIによる保守運用効率化

Excel業務において、バックアップファイルの生成はリスク管理の基本です。しかし、無計画に生成されたバックアップファイルは、やがてストレージを圧迫し、必要なファイルを探す手間を増大させる負の遺産となります。本稿では、生成AI「Gemini」を活用して、特定のフォルダから古いバックアップファイルを自動的に削除するVBAプログラムの設計と実装、そして実務における運用戦略を解説します。

詳細解説:ファイル管理の論理とVBAの役割

バックアップファイルの削除処理を自動化する際、最も重要なのは「何を基準に削除するか」という判定ロジックです。単にファイルを削除するだけでは、誤って最新の作業ファイルを消去してしまうリスクがあるため、以下の3つの安全基準を設ける必要があります。

1. 拡張子のフィルタリング:.xlsxや.xlsmだけでなく、バックアップ特有の接頭辞や接尾辞(例:bk_、_backup)を持つファイルを特定する。
2. 経過日数の判定:VBAの「FileDateTime」関数を使用して、ファイルの最終更新日時を取得し、現在時刻と比較する。
3. フォルダの限定:誤操作を防ぐため、処理対象となるフォルダパスを厳密に定義し、ルートディレクトリなどへの再帰的な処理を安易に行わない。

VBAにおいてファイルシステムを扱う場合、「FileSystemObject (FSO)」を使用するのがベストプラクティスです。FSOを利用することで、ファイル属性の取得や削除、フォルダ内の反復処理が直感的なオブジェクト指向で記述可能になります。また、Geminiのような生成AIを設計に組み込むことで、エラーハンドリングの網羅や、ログ出力機能の付加といった「堅牢なコード」を短時間で生成することが可能です。

サンプルコード:安全かつ効率的な削除スクリプト

以下のコードは、指定したフォルダ内の特定の名前規則を持つファイルを、指定した日数経過後に削除するプログラムです。


Option Explicit

' 参照設定不要で利用可能なFileSystemObjectを使用したバックアップ削除ツール
Public Sub DeleteOldBackups()
    Dim fso As Object
    Dim targetFolder As Object
    Dim fileItem As Object
    Dim folderPath As String
    Dim daysThreshold As Integer
    Dim filePrefix As String
    
    ' 設定項目
    folderPath = "C:\Backups\ProjectA\"
    daysThreshold = 30 ' 30日以上前のファイルを対象
    filePrefix = "Backup_" ' バックアップファイル特有の接頭辞
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' フォルダ存在確認
    If Not fso.FolderExists(folderPath) Then
        MsgBox "指定されたフォルダが見つかりません。", vbCritical
        Exit Sub
    End If
    
    Set targetFolder = fso.GetFolder(folderPath)
    
    ' フォルダ内のファイルを走査
    For Each fileItem In targetFolder.Files
        ' 名前規則と経過日数の判定
        If InStr(1, fileItem.Name, filePrefix, vbTextCompare) = 1 Then
            If DateDiff("d", fileItem.DateLastModified, Now) > daysThreshold Then
                ' 削除実行(実務では削除前にログ出力を行うことを推奨)
                On Error Resume Next
                fileItem.Delete True
                If Err.Number = 0 Then
                    Debug.Print "削除成功: " & fileItem.Name
                Else
                    Debug.Print "削除失敗: " & fileItem.Name
                End If
                On Error GoTo 0
            End If
        End If
    Next fileItem
    
    MsgBox "バックアップのクリーンアップが完了しました。", vbInformation
End Sub

実務アドバイス:堅牢な運用を実現するための戦略

プログラムを書くだけで満足してはいけません。実務においてこのスクリプトを運用する際は、以下の3点に留意してください。

第一に「ドライラン(空実行)機能」の搭載です。いきなり削除を実行するのではなく、削除対象となるファイルの一覧をイミディエイトウィンドウや別シートに出力し、削除前に人間が確認できるステップを設けてください。これはバックアップという「失うと取り返しがつかないデータ」を扱う際の鉄則です。

第二に「ログの記録」です。いつ、どのファイルが削除されたのかという記録は、万が一のデータ紛失時に原因を特定する唯一の手がかりとなります。テキストファイルへの追記を行う関数を追加し、操作ログを保存するようにしましょう。

第三に「Geminiとの対話による改善」です。例えば、「このコードに、サブフォルダも含めて再帰的に探索する機能を追加して」や「削除したファイルをゴミ箱に移動させるように書き換えて」といった指示をGeminiに与えることで、要件の変化に即座に対応できます。生成AIは、コードの修正だけでなく、エラーハンドリングの強化や、特定の環境下でのパフォーマンスチューニングにおける優秀なペアプログラミング相手となります。

まとめ:保守自動化がもたらすエンジニアの価値

バックアップファイルの削除という、一見地味で退屈な作業を自動化することには、二つの大きな価値があります。一つは「ストレージコストと管理コストの削減」という直接的なメリット。もう一つは、「手作業によるヒューマンエラーの排除」というリスク低減です。

VBA講師として多くの現場を見てきましたが、優れたエンジニアとは、単に複雑なコードを書く人ではなく、こうした「日常の小さな非効率」を察知し、技術を使って仕組み化できる人のことを指します。今回紹介した手法をベースに、皆さんの業務環境に合わせてカスタマイズしてください。Geminiを活用し、AIと共創しながらコードを磨き上げるプロセスそのものが、皆さんのエンジニアとしてのスキルを一段上のレベルへと引き上げてくれるはずです。

保守運用こそが、システムの本質的な価値を支える土台です。この「100本ノック 21本目」の成果を、単なるコードとして終わらせず、皆さんの業務改善の第一歩として活用してください。効率化の先には、より創造的な業務に向き合うための「自由な時間」が待っています。

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