元号とシステム開発

即位礼正殿の儀まで、あと2週間となりました。元号が変わってもう5か月、月日が流れるのは早いものです。今回は、そんな元号を絡めたシステム開発の話をしてみようと思います。

新元号「令和」が発表されたのは、変わる1か月前でした。
元号を使っているシステムはたくさんありますが、これはすなわち元号変更をたった1か月で対応しなければならないことを意味します。そんな短期間で対応できるものなのでしょうか?

当然ながらそんな短期間で開発するのは無理なので、通常は発表される前から開発を進めていると思われます。では、どのように開発していくのでしょうか。

導入

例として、エクセルにマクロ実行用のボタンを2つ作りました。
※画像なので押しても何も起こりません。

元号表示ボタンを押すと、現在の元号を表示します。
西暦変換ボタンを押すと、和暦を入力するボックスが表示され、入力内容を西暦に変換して表示します。

現状では、まだ新元号がわからない。
でもできる限り開発を進めてテストもしておきたい。
新元号発表後の開発・テストの工数はできるだけ少なくしたい。
そのような発想のもと開発されたマクロのコードが以下になります(いったん最後まで読み進めてから戻ってきたほうが理解しやすいかも)。

マクロのコード

‘変数と定数の定義
Dim wareki As Long
Dim seireki As Long
Const GENGOU = “桜木”

‘元号表示ボタン
Sub Gengou_Hyouji()
MsgBox “現在の元号は” & GENGOU & “です”
End Sub

‘西暦変換ボタン
Sub Seireki_Henkan()
wareki = Application.InputBox(Prompt:=”今は” & GENGOU & “何年ですか?”, Type:=1)
seireki = 2018 + wareki
MsgBox “現在の西暦は” & seireki & “年です”
End Sub

※本来はエラーチェック等の処理も入れるべきですが、簡潔にするため省略しています。

実行結果

①元号表示ボタンを押下した場合
以下の画面が表示されます。

②西暦変換ボタンを押下した場合
まず、以下の画面が表示されます。

例えばボックスに1と入力してOKを押すと、以下の画面が表示されます。2なら2020年になります。

新元号発表前の流れ

新元号がわからないので、いったん「桜木」と仮定して開発を進めています。そして、上記実行結果となることを確認するテストを行います。
問題なければ、いったんOKとし、元号の発表を待ちます。

新元号発表後

新元号「令和」が発表されました。コードの修正を行います。

【変更前】
Const GENGOU = “桜木”
【変更後】
Const GENGOU = “令和”

桜木退場。

実行結果

①元号表示ボタンを押下した場合
以下の画面が表示されます。

②西暦変換ボタンを押下した場合
まず、以下の画面が表示されます。

例えばボックスに1と入力してOKを押すと、以下の画面が表示されます。2なら2020年になります。

解説

このプログラムで元号を表示しているのは2か所です。
“現在の元号は桜木です”
“今は桜木何年ですか?”

これに対し、作成したコードは以下の通りです。
Const GENGOU = “桜木”
“現在の元号は” & GENGOU & “です”
“今は” & GENGOU & “何年ですか?”

こうすると「GENGOU」にConstで指定した文字列「桜木」を代入する処理が行われます。

GENGOUを使う意味

わざわざ「GENGOU」なんて使わなくても、そのまま
 ”現在の元号は桜木です”
 ”今は桜木何年ですか?”
と書いても、プログラムは問題なく稼働します。では、なぜこのように書いてはいけないのでしょうか?

・修正箇所が増える
 GENGOUを使っていた場合、1か所だけ修正すればよかったですが、直打ちすると2か所修正しなければなりません。
 今回の例では2か所なのでまだいいですが、もし100か所使っていたら、100か所修正することになります。これはあまりにも非効率的です。

・バグが発生しやすい
 修正箇所が増えるということは、修正漏れによるバグが発生する可能性が高くなるということです。
 今回の例だと「元号表示」の桜木は変えたけど「西暦変換」の桜木は変え忘れるというミスが起こり得ます。
 このミスをやらかすと、退場したはずの桜木が再出場するというバグが発生します。

・テストが大変
 100か所変えたら、100か所すべて再テストしなければなりません。でも1か所だけの修正であれば、GENGOUを使ってるどこか1か所だけテストするという方法も考えられます。
 今回の例でいえば、元号表示ボタンが「令和」になっていることを確認できたら、西暦変換ボタンが「令和」になっている確認は省略できるということです。直打ちの時のような一部だけ変わっていないという結果は起こり得ないからです。
 もちろんGENGOUを使ってても、100か所全部確認できるなら、それにこしたことはないです。が、時間には限りがあります。少なくとも省略するという選択肢が生まれるのは非常に大きいと思います。

おわりに

プログラムは日々修正やバージョンアップが行われていますから、変更する時にどれだけ作業を簡略化できるかというのはとても大切なことです。
きちんとした開発者であれば、そのあたりはしっかり意識して開発されていると思いますが、それでも元号という大きな変更に対し、発表から1か月しかないというのは大変だったと思います。もし次に同じようなことがあったら、今度はもう少し早く発表してほしいなというのが、元開発者としての切なる願いです。

雑記

前の記事

郵便と消費増税