Blank?=False

「呉下の阿蒙にあらず」をモットーにしたITエンジニアの日々

勉強は大変だが役に立つ

f:id:stonebeach-dakar:20170202160012p:plain

逃げるは恥だが役に立つみたいなタイトルをつけてみました。
面白いドラマでしたよね。

私は下のセリフが頭から離れません。いつか使おうと思っています。
f:id:stonebeach-dakar:20170202165931j:plain

本題になりますが、最近、業務上の必要に駆られ、Railで使われているDBマイグレーションAccess版をExcelVBAで作りました。
結果としてはマイグレーションの皮をかぶった単なるDDLを自動実行するモノなのですが、 このツール作成に至った理由を通じて色々感じたので書いていきます。

どういう理由で必要になったか

f:id:stonebeach-dakar:20170202165216p:plain

稼働中のAcceessシステムを大きく改造するアップデート作業が必要になり、 工数がかかるため休日出勤で対応しようとしたら休日出勤NG、と言われ、業後1〜2時間程度で完了させなければならなくなったためです。

データの差し替えで対応できるアップデートではなかったので、テーブルの作成、列の追加、データ追加や修正等手作業が色々必要でした。
これを業後1〜2時間で終わらせ、なおかつ稼働確認テストもやらなければいけない、
といういわゆる無茶振りに近い物でした。

Railsで見たマイグレーションの仕組みで解決できることに気づいた

未だ仕事になっていませんが、RubyOnRailsを独学で勉強していて、これは記事にもしています。

stonebeach-dakar.hatenablog.com
このRailsにはDBマイグレーションという仕組みが提供されています。


このマイグレーションをどう利用するかを簡単に説明すると、

  1. データベースのテーブルの追加・列の追加などの操作を、マイグレーションファイルに記述します。
  2. Rails db:migrateとコマンドを打ちます。
  3. 自動的にマイグレーションファイルに書かれた操作を行い、データベースを更新します。

という感じです。

また、このマイグレーションファイル1つ1つの単位で操作を取り消し、前の状態に戻すことが出来ます。
いわば、データベースのバージョン管理システムです。
本題ではないので、説明はこれぐらいとしますが、もし気になった方はRailsGuideを読んでみてください。

railsguides.jp
このマイグレーションの仕組みを使うことで、Railsソースコードをインターネットからダウンロードして、マイグレーションを行えば必要なテーブル等がすぐに準備できるため、環境構築が楽になります。
この仕組みはASP.netにもEntitiy Frameworkの機能として導入されています。

また、マイグレーション管理専門のFlywayというアプリケーションをもあります。

qiita.com
今回、このマイグレーションの仕組みを使えばこの無茶振りに答えられるのでは、と気づきました。

作ったもの

マイグレーションを行う専用のアプリケーションFlywayAccessに公式対応していないため、自分で作る必要がありました。
また、今の勤務先はオープンソース等の外部アプリケーションの導入にとても面倒なプロセスが設けられているため、たとえ利用しようと思っても2,3週間はかかります。
(このプロセスがある事自体はユーザー企業なので悪いことではないと思います。)

このためすぐに開発に取り掛かれる開発環境はPowerShell等のスクリプトVBAしかありませんでした。
ExcelVBAなら自作のライブラリ等でかなり開発しやすい環境が揃っていたのでExcelVBAを選択しました。


今回、テーブル作成などのDDL文を自動実行できればいいこと、そしてファイル形式というAccessの長所を活かしてロールバック機能は不要ということ。
この2つがあったため、単純に目的のAccessファイルにコネクションしてADOでDDLSQLを流し込むというシンプルな構成にしました。

f:id:stonebeach-dakar:20170202162440p:plain
このマクロについては特に大した機能があるわけでもないので、説明は省きます。
もし、使ってみたい方はGitHubに上げてありますのでご利用ください。
使い方は説明シートを御覧ください。

github.com
Access専用ですが、ADOを使用した接続なので他DBMSにも使えるかもしれません。


私から読んでいる方に伝えたいこと

f:id:stonebeach-dakar:20170202165313p:plain

今回、下の事を強く実感しました。

他の言語やフレームワークを学ぶことで今の環境を変えるヒントが見つかる可能性がある


もし、この記事を読んでいるあなたがもし上司の無茶振りが辛いことに悩んでいれば、 触ったことがない言語やフレームワークを色々勉強してみましょう。

特にオープンソースの言語やフレームワークなら、最先端の技術を導入していることがよくあります。
その技術を自分の環境に導入することで、その無茶振りに難なく答えることができ、上司にドヤッとできるかもしれません。

今回、間違いなくマイグレーションの仕組みを入れることに気づいたのはRailsを勉強していたおかげでした。

もちろん、DDLを自動実行する、という概念はちょっと考えれば思いついたと思います。
ただ、いきなり明確なイメージを持って作れた、かはわかりません。
Railsマイグレーションというものを知っていたからこそ、明確なイメージを持ってツールを作成でき、 それによって問題を解決することが出来たと思います。


本業と一切関係ない言語やフレームワークも、勉強しておいて損はない、それどころか本業の益になる可能性があります。
特にWindows系のプログラマMicrosoft系の言語・フレームワークしか使わず、世の中にはもっと便利なものがあることを知らない事があります
かっては私もそうでした。今思えば、とてももったいないことだったと反省しています。

一度オープンソースフレームワークに触れてみて、生産性向上のヒントを掴んでみませんか。