目次
バッチファイル や Access ツールをリファクタリングしよう
本記事ではバッチファイル や Access ツールで作成してきたツールに
「Ⅰ. 東京都コロナウイルスによる 入院者数と退院者数比率推移」
に続き
「Ⅱ.東京都コロナウイルス 男女別 入院者数推移」
や
「Ⅲ.東京都コロナウイルス世代別入院者数推移」
というグラフを追加作成するに先立ち、ここまでに作成してきたツールの内容を以下の観点
- 外観
- ユーザーインターフェース
- ツール展開
- 機能分担
で課題抽出し、リファクタリングするやり方を紹介したいと思います。
リファクタリングとは、ソフトウェアの挙動を変えることなく、その内部構造を整理することです。
ところでなぜリファクタリングが必要なんでしょうか?
それは以下の記事
でも紹介しているように業務改善のアプローチは課題を分解可能な小さなピースに分解し、このピースごとに少しずつ解決、実装していくことで
- 日々効果を実感できる
- 作業の効率化を図るモチベーションが維持できる
といったメリットが得られるのですが、一方でこれらのピースを組み立てていく中でこれはこうしたほうがより効果的といったことが普通にあるわけです。
そこで適切なタイミングで作成済のツールをリファクタリングし、業務改善プロセスをより効果的なものにしていきましょう。
今回はデスクトップ上にアイコンが散らかってきたことや
以下のグラフ作成用の機能追加を行うにあたり
機能分担に課題があることに気が付いたこと等が
直接的なリファクタリングのきっかけになっています。
「Ⅱ.東京都コロナウイルス 男女別 入院者数推移」や
「Ⅲ.東京都コロナウイルス世代別入院者数推移」
それでは早速現状のツールの課題を考えてみましょう。
外観上の課題
デスクトップ
まずデスクトップに注目してみましょう。
読者の皆さんが
を含めた記事を順番に読んで頂き、自分のPCで実際に動かしながら遊んで頂いているとすると皆さんのデスクトップは次のような感じになっているのではないでしょうか。
つまり 東京都_新型コロナウイルス陽性患者発表詳細 に掲載された
URL: https://stopcovid19.metro.tokyo.lg.jp/data/130001_tokyo_covid19_patients.csv
を用いて次の 「Ⅰ. 東京都コロナウイルスによる 入院者数と退院者数比率推移」という2軸グラフを自動描画するまでに計10個のファイルをデスクトップ上に追加しています。
この連載では続いて以下の「Ⅱ.東京都コロナウイルス 男女別 入院者数推移」や「Ⅲ.東京都コロナウイルス世代別入院者数推移」というグラフを作って行くわけですが
読者の方でこう思われた方はいないでしょうか?
あの~しらかば堂さ~ん
この調子でいったら
デスクトップがファイルだらけになっちゃいませんかぁ~?
ぎくっ!
じつは
の記事でも紹介されているようにデスクトップにファイルをいっぱい置いておくと
- PCの起動時間がだんだん遅くなる
- ファイルを探すのに無駄な時間がかかり業務効率が落ちる
- たくさんのアイコンで気が散る
など、あまりいいことはありません。
つまりPCのデスクトップには次のようにツールへのショートカットのみを置くようにしたほうが美しいですよね。
ツール名称
その他何か気が付いたことはありますか?
しらかば堂さ~ん
じゃあこの際だから言わせて頂きますけど
大体、16_01.accdb とか 18_02.accdb とか 23_01.accdb とかって
何ですかぁ~?
意味わかんないんですけどぉ~
みなみさんのご指摘はごもっともです。
つまり今はツール名からその役割が連想できないという課題がありますよね。
ツール名もそのツール名からその役割が連想できるように名称変更し、自分でツールを置くと決めたフォルダに置くようにしたほうが美しいし、ツールの生産効率も格段によくなります。
ユーザーインターフェースの課題
警告ダイアログ
続いて 記事 #23 で見て頂いた以下の動画をもう一度何回か見て頂きましょう。
|
何か気がつきませんでした?
バッチファイルを起動したあと
グラフを表示するまでにずっとPCの前にいて
マウスを10回クリックしてましたぁ~
お疲れ様っす!
つまりこのバッチファイルで作業が自動化され、良かった良かったと言いたい一方で、あなたはPCの前にいて、マウスを連続してクリックしていた訳で、その間お手洗いに席を立つこともできていません。
このバッチファイル中の不要なクリック操作が無くなれば、バッチファイルが仕事をしている間あなたは席を立って休憩することもできるようになりますよね~。
CSVダウンロード方式
また記事 #23 でも紹介した Edge を利用した CSV のダウンロード方式ですが、先ほどの動画の中で確認できたようにバッチファイルが Edge 処理の終了を確認するために処理を中断しましたよね。そして1つ余分にENTERキー入れてバッチファイルが再開していました。
このダウンロード処理はバッチファイルの前半にあるので、実用上の問題はあまりないですが不要な操作を減らし、休憩時間を増やすという意味でもっと改善したいですよね~。
ツール展開上の課題
ここまではいまのツールの使い勝手的の課題でした。
しかし実はこのツールには皆さんにこのツールを展開するにあたっての以下の課題も考える必要があります。
CSVの内部テーブルへのインポート方式
具体的には CSVファイルを Access 内のテーブルにインポートするにあたり
で紹介されているように、Access 内で 事前にこのインポート操作を保存し、これをマクロの中のアクションで呼び出すことでこれを簡単に実現していますが
ここで保存されたインポート操作の中には対象CSVファイルへの絶対パス名が保存されるため、簡単な反面、このツールを他のユーザーに展開したいときにはこのインポート操作をそれぞれのユーザーに再度実行してもらわないといけないという課題がありました。
ツールをグループ内のメンバに展開したいといったことを考えたとき、何とか展開されたユーザーがこのようなインポート作業を繰り返さないでいいようにしたいですよね。
外部テーブルのリンク方式
同様に Access のツール内から他の Access ツール内のテーブルへのリンクを作成するにあたり
で紹介されているように Access 内のメニューから簡単に他の Access データベースへのリンクが作成できます。
ここで保存されたリンク情報には対象 Access データベースへの絶対パス名が保存されるため、簡単な反面、このツールを他のユーザーに展開したいときにはこのリンク操作をそれぞれのユーザーに再度実行してもらわないといけないという課題がありました。
ツールをグループ内のメンバに展開したいといったことを考えたとき、何とか展開されたユーザーがこのようなリンク作業を繰り返さないでいいようにしたいですよね。
テーブルの外部 Excel ブックへのエクスポート方式
さらにテーブルを Excel ブックにエクスポートするにあたり
の記事でも紹介されているように、Access 内で 事前にこのエクスポート操作を保存し、これをマクロの中のアクションで呼び出すことでこれを簡単に実現できます。
ここで保存されたエクスポート操作の中には対象 Excel ブックへの絶対パス名が保存されるため、簡単な反面、このツールを他のユーザーに展開したいときにはこのエクスポート操作をそれぞれのユーザーに再度実行してもらわないといけないという課題がありました。
ツールをグループ内のメンバに展開したいといったことを考えたとき、何とか展開されたユーザーがこのようなエクスポート作業を繰り返さないでいいようにしたいですよね。
ツールの機能分担上の課題
次にこのリファクタリングの実行を決意させるに至った最も重要なツールの機能分担という観点での課題をご紹介しましょう。
まず再度これから紹介する「Ⅱ.東京都コロナウイルス 男女別 入院者数推移」や「Ⅲ.東京都コロナウイルス世代別入院者数推移」というグラフを再掲しますね。
これらのグラフは「Ⅰ. 東京都コロナウイルスによる 入院者数と退院者数比率推移」という2軸グラフ同様グラフを書くのに必要なデータを作成しなければいけません。つまり
でもご紹介の通り
「Ⅰ. 東京都コロナウイルスによる 入院者数と退院者数比率推移」
を描くのに必要なデータは
- グラフの横軸となる日付(400日分)
- 日付毎の退院者数(退院済フラグの合計)
- 日付毎の入院者数
- 退院率=日付毎の退院数÷日付毎の入院率
でした。
同様に
「Ⅱ.東京都コロナウイルス 男女別 入院者数推移」では
- グラフの横軸となる日付(400日分)
- 日付毎の女性入院者数
- 日付毎の男性入院者数
というデータが必要で
「Ⅲ.東京都コロナウイルス世代別入院者数推移」では
- グラフの横軸となる日付(400日分)
- 日付毎の入院者数(10歳未満)
- 日付毎の入院者数(10代)
- 日付毎の入院者数(20代)
- 日付毎の入院者数(30代)
- 日付毎の入院者数(40代)
- 日付毎の入院者数(50代)
- 日付毎の入院者数(60代)
- 日付毎の入院者数(70代)
- 日付毎の入院者数(80代)
- 日付毎の入院者数(90代)
- 日付毎の入院者数(100歳以上)
というデータが必要になると予測されます。
あれ?
もしかして
グラフの横軸となる日付(400日分)
日付毎の入院者数
って3つのグラフで一緒?
すごいっ!
良く気が付きましたね~
そうなんです。
記事 #23 の中では今まで作成した Access ツールの機能分担について以下のように紹介していますが
ファイルの紹介記事 | ファイル名 | 機能 |
---|---|---|
16_01.accdb | ダウンロードフォルダ配下に保存された 130001_tokyo_covid19_patients.csv をもとに 16_01.accdb 内に T0000_東京都コロナ発症状況_マスタ テーブルを作成します |
|
18_02.accdb | 16_01.accdb 内の T0000_東京都コロナ発症状況_マスタ テーブルを参照し デスクトップ上に T1040_日付_退院者数_入院者数_退院率.xlsx を作成します |
この
- グラフの横軸となる日付(400日分)
- 日付毎の入院者数
の部分は上の例でいうと T0000_東京都コロナ発症状況_マスタ テーブル作成のときに一緒にやってしまった方が機能分担、ツール作成の効率化の観点で望ましいですよね。
リファクタリングの実際
リファクタリングの方針
抽出された課題を元に、この連載記事で紹介しているツールのリファクタリングの方針を以下のようにしましょう。
項番 | 解決したい課題 | リファクタリングの方針 |
---|---|---|
1 | デスクトップの整理とツールの名称変更 |
記事 【Windows業務効率化】バッチファイルでツールのフォルダ環境を自動生成しよう を参照してツール構築用の正式フォルダを定義します。 このフォルダ定義によって以降のアクションやバッチファイル中で登場する
といったフォルダが利用可能になります。 |
2 | デスクトップ上に配置されているツールを以下のフォルダに移動し名称変更します。 |
|
3 |
23_01.bat ⇒ そしてこのバッチファイルへのショートカット |
|
4 | 16_01.accdb ⇒ %USERPROFILE%\Tools\accdb\作成_T0000_東京都コロナ発症状況_マスタ.accdb |
|
5 | 18_02.accdb ⇒ %USERPROFILE%\Tools\accdb\作成_T1040_日付_退院者数_入院者数_退院率_xlsx.accdb |
|
6 | 23_01.accdb ⇒ %USERPROFILE%\Tools\accdb\更新_東京都コロナ感染者分析グラフ_xlsx.accdb |
|
7 |
T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx |
|
8 | 不要な警告ダイアログの抑制 | 未使用につき 16_01.accdb から T0000_東京都コロナ発症状況_マスタ.xlsx エキスポート処理、および関連ダイアログを削除します。 |
9 | 18_02.accdb から T1040_日付_退院者数_入院者数_退院率.xlsx が作成された メッセージダイアログの出力を削除します。 |
|
10 | 23_01.accdb から T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx へのデータコピーがされた旨のッセージダイアログの出力を削除します。 |
|
11 | ツールからの絶対パス情報を相対パス情報に変更 | 16_01.accdb の ダウンロードフォルダからの 130001_tokyo_covid19_patients.csv インポート処理を しらかば堂のユーザー定義関数(VBA) ImportCSVFileによる相対パス指定に変更します。 |
12 | 18_02.accdb の 16_01.accdb 内 T0000_東京都コロナ発症状況_マスタ テーブルへのリンク処理を しらかば堂のユーザー定義関数(VBA) LinkExternalDbTable による相対パス指定に変更します。 |
|
13 | 18_02.accdb の T1040_日付_退院者数_入院者数_退院率 テーブルの T1040_日付_退院者数_入院者数_退院率.xlsx への エクスポート処理を しらかば堂のユーザー定義関数(VBA) ExortTableToBook による相対パス指定に変更します。 |
|
14 |
23_01.accdb内のアクション内で しらかば堂のユーザー定義関数(VBA) ExportInputBookToOutputBook によるExcel ブック内シートのコピー元とコピー先を%USERPROFILE%からの相対パス指定で Desktop\xlsx\T1040_日付_退院者数_入院者数_退院率.xlsx ⇒ |
|
15 |
日付(400日分)、日付毎の入院者数抽出機能の移動 |
16_01.accdb の T0000_東京都コロナ発症状況_マスタ テーブル に日付(400日分)、日付毎の入院者数抽出機能を移動します。 |
16 | CSVのダウンロード方式の変更 | 23_01.bat 内で Microsoft Edge を使用して実行していたインターネットからの 130001_tokyo_covid19_patients.csv ダウンロード処理を しらかば堂のユーザー定義関数(VBA) DownloadCsvFromUrl による直接ダウンロード方式に変更します。 |
17 | バッチファイルの調整 | ここまでの各種修正に対応することを目的として 23_01.bat の内容を調整し、 %USERPROFILE%\Tools\bat\作成_東京都コロナウイルス_発症者推移グラフ.bat として保存します。 |
リファクタリング後のバッチファイル
記事作成の構成上、新機能である「Ⅱ.東京都コロナウイルス 男女別 入院者数推移」や「Ⅲ.東京都コロナウイルス世代別入院者数推移」に対するグラフ用データ作成処理、同グラフ描画処理を含んでしまいますが、上記のリファクタリングを実施後のバッチファイルは以下のようなものになります。
@echo off
setlocal
rem スリープタイマ値を設定する
set wait_time=2
echo 01.%USERPROFILE%\Downloadsに移動
timeout /t %wait_time% > nul
cd %USERPROFILE%\Downloads
if exist 130001_tokyo_covid19_patients.csv (
echo 02.旧 130001_tokyo_covid19_patients.csv ファイルを削除
timeout /t %wait_time% > nul
del 130001_tokyo_covid19_patients*.*
del /Q %USERPROFILE%\Tools_Data_Temp\xlsx\*.*
)
echo 03.新 130001_tokyo_covid19_patients.csv ファイルをダウンロード
timeout /t %wait_time% > nul
cd %USERPROFILE%\Tools\accdb
入手_130001_tokyo_covid19_patients_csv.accdb
echo 04.%USERPROFILE%\Tools\accdbに移動
timeout /t %wait_time% > nul
cd %USERPROFILE%\Tools\accdb
echo 05.130001_tokyo_covid19_patients.csv から T0000_東京都コロナ発症状況_マスタ を作成
timeout /t %wait_time% > nul
作成_T0000_東京都コロナ発症状況_マスタ.accdb
echo 06.T0000_東京都コロナ発症状況_マスタ から T1040_日付_退院者数_入院者数_退院率.xlsx を作成
timeout /t %wait_time% > nul
作成_T1040_日付_退院者数_入院者数_退院率_xlsx.accdb
echo 07.T0000_東京都コロナ発症状況_マスタ から T2040_日付_女性入院者数_男性入院者数.xlsx を作成
timeout /t %wait_time% > nul
作成_T2040_日付_女性入院者数_男性入院者数_xlsx.accdb
echo 08.T0000_東京都コロナ発症状況_マスタ から T3200_日付_年代別入院者数.xlsx を作成
timeout /t %wait_time% > nul
作成_T3200_日付_年代別入院者数_xlsx.accdb
echo 09.3つのグラフ描画用データをそれぞれのグラフ描画用テンプレートにコピー
timeout /t %wait_time% > nul
copy %USERPROFILE%\Tools_Data_Static\xlsx\*_グラフ.xlsx %USERPROFILE%\Tools_Data_Temp\xlsx
更新_東京都コロナ感染者分析グラフ_xlsx.accdb
echo 10.T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx を起動
timeout /t %wait_time% > nul
%USERPROFILE%\Tools_Data_Temp\xlsx\T1040_日付_退院者数_入院者数_退院率_グラフ.xlsx
echo 11.T2040_日付_女性入院者数_男性入院者数_グラフ.xlsx を起動
timeout /t %wait_time% > nul
%USERPROFILE%\Tools_Data_Temp\xlsx\T2040_日付_女性入院者数_男性入院者数_グラフ.xlsx
echo 12.T3200_日付_年代別入院者数_グラフ.xlsx を起動
timeout /t %wait_time% > nul
%USERPROFILE%\Tools_Data_Temp\xlsx\T3200_日付_年代別入院者数_グラフ.xlsx
endlocal
pause
explorer /e ./root,%USERPROFILE%\Tools_Data_Temp\xlsx
リファクタリング後の動作デモ
同様に記事作成の構成上、新機能である「Ⅱ.東京都コロナウイルス 男女別 入院者数推移」や「Ⅲ.東京都コロナウイルス世代別入院者数推移」に対するグラフ用データ作成処理、同グラフ描画処理を含んでしまいますが
このデスクトップにある 作成_東京都コロナウイルス_発症者推移グラフ.bat – ショートカット をダブルクリックしたあとのツールの動きを 記事 #23 の動画との差も意識しながら次の動画を何回かご覧頂いて確認ください。
画面をフルスクリーンにしたり、再生スピードを変更して何回か見て頂くことをお勧めします。
まとめ
本記事ではここまでに作成してきたバッチファイル、 Access ツールの内容を以下の観点
- 外観
- ユーザーインターフェース
- ツール展開
- 機能分担
で課題抽出し、リファクタリングしていくやり方を紹介しました。
さらにリファクタリングの方針を示したうえで
- 具体的バッチファイルの内容
- リファクタリング後のバッチファイルのデモ画像
についてもざっくりと紹介しました。
次回以降は本記事の中で紹介した変更内容について具体的に紹介していき
そして新機能である「Ⅱ.東京都コロナウイルス 男女別 入院者数推移」や「Ⅲ.東京都コロナウイルス世代別入院者数推移」に対するグラフ用データ作成処理、同グラフ描画処理について順次紹介していきたいと思います。
さてこの記事全体の目標は
- 今の状況から抜け出してもっと前向きな仕事に取り組みたい
- さっさと仕事を切り上げて充実したアフターファイブを過ごしたい
でしたよね。
あなたの解決したい問題は何ですか?
次回はまた
で Access VBA の新しい窓を開きましょう。
いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?