RubberduckでVBAプログラムをGit管理する

サムネイルはRubberduckのホームページのものを引用しています。

この記事で伝えたいこと & この記事で言っていないこと

  • 伝えたいこと
    • Rubberduckを使うことで比較的簡単にVBAプログラムのバージョン管理を行えます
  • 言っていないこと
    • 全てのVBAプログラマにとって、Rubberduckを使うことが最善手です
    • VBAとVBEは令和の時代でも十分使えます

そもそもRubberduckで何ができるのか

この辺りの内容は色々な方がまとめているので省略します。

Gitで管理する具体的な方法

次のように、エクセルファイルとVBAプログラムの格納先のフォルダ(src)を用意してみます。

 /root
  ┣ hoge.xlsm
  ┗ /src

hoge.xlsmを開いて、rubberduckのタブからExport Active Projectを選択します。

タブ選択
タブ選択

続いて現れるフォルダ選択ウィンドウで、先ほど用意したsrcフォルダを選択します。

フォルダ選択
フォルダ選択

これだけで、srcフォルダにはモジュール名に対応したModule1.basが出力されます1。また、例えばVSCodeでも次のように開けます。

VSCodeで開いてみる
VSCodeで開いてみる

Gitを使い慣れている方はもうお分かりだと思うのですが、ここで出力されたファイルがVBAのソースファイルなので、後は 焼くなり煮るなり git tagコマンドで、適当なタイミングでプログラムのバージョン管理を行える、という訳ですね。

また、例えば次のような流れでVBA側のコードを変更することも可能です。

  1. VSCode側でbasファイルを編集
  2. VBE側で変更後のファイルをインポート(というより同期)する

具体的に、以下の様にVSCode側でプログラムを編集します。

VSCodeで編集
VSCodeで編集

具体的には以下の部分を追加しました。

    Dim helloWorld As String: helloWorld = "hello, World!"
    Debug.Print helloWorld

その後、VBE側でRubberduckの専用機能である、Code ExplorerのタブでSync Project -> Update Components from files...を選択します。

同期ボタン押下
同期ボタン押下

ファイルの選択ウィンドウが現れるので、同期させたいファイルを選択します(もちろん複数選択も可能です)。

ファイル選択
ファイル選択

最終的にVBE側でModule1モジュールを開いてみると、次の様に変更箇所がアップデートされていることが分かります。

しゅごい…
しゅごい…

上記ができることで嬉しいこと

単にバージョン管理を簡単化するだけでなく、他にも以下のようなメリットがあると思います。

  • 複数人で異なるVBAプログラムをGit管理していても変更箇所だけをアップデート可能
  • 別のプロジェクトで使われている機能をモジュール単位などで追加したり管理することが可能

上記でちょっと面倒な所

  • Git側で管理した変更点が自動的に反映されない
  • 変更してから必ず Export -> add & commit & push -> (変更反映する際は) -> Sync Project の手続きが必須

Dim まとめ As 蛇足

VBAとVBEは、お世辞にも令和の時代に人に勧められるものではないですが、残念ながら未だに様々な場面で使われています。保守・管理の面からしてもこれらを扱うのはハイパーしんどいですが、

  • 少しでもモダンな技術で管理しやすくする
  • 別の言語・フレームワークへ移行するまでの機能の検証

などのためにRubberduckを導入しない理由はあまり無いように思います。

また、以下の理由からRubberduckが古の クソ of クソ システムにとっての救世主になるのではないかと思います。

  • 洗練された機能
  • インストールに管理者権限を必要とせず、比較的どのような環境でも動く
  • (英語ではあるが)ドキュメントが豊富
  • 開発が活発で、長期的な開発も予定されている2

個人的にはRubberduckがVBAプログラム開発のデファクトスタンダードになってほしいな~と思って金銭的な支援もしました

カナダから数か月で届いた
カナダから数か月で届いた
アヒルちゃそカワイイヤッター!
アヒルちゃそカワイイヤッター!


  1. 今回は一つのモジュールしか扱っていませんが、複数のサブルーチンなどがあっても同様に出力されます。クラスファイルや各シート毎に定義された関数などもあれば出力されます。 ↩︎

  2. 特に.NET7フレームワークを使ったRubberduck専用のEditorが実装される予定というポストなどもあり、更に使いやすく、なおかつ長期的に開発が進むようです。 ↩︎