一文字追加するだけで済む改修だと思ったら最終的に4ファイルも修正することになった
ある非常に簡単な要望に応えるために実はすごい労力かかることがあるんだよってことを分かってもらいたくて書きます。
きっかけはDB名に”-“を許可して欲しいという要望だった。
https://github.com/NetCommons3/NetCommons3/issues/1255#issuecomment-397473962
この要望をかなえるにはDB名の妥当性検査してるところで”-“もOKにするだけ。
正規表現で入力チェックしてるのでホント”-“という文字をそこにたし入れるだけでDB名に”-“も許可される。
だが、それをする前に考えなきゃいけないことがある
その修正をしても大丈夫か検討
DB名に”−”を許可するのは1点の修正だけで可能だ。だが、ほんとにその修正をして問題が起きないかどうか検討が必用になります。
それについては、このIssueでは @akagane99 さんと @nagasheep さんが検索されて調べてくれました。
https://nc2.netcommons.org/bbk4g6tyc-18477/#_18477で実際にDB名に”−”を使って動かしてみた yyama さんもいます。
言い換えると3人の手(時間)によって検討されたともいえます。
これで修正しても大丈夫そうだとわかりました。
修正してみたら自動テストでエラーに
というわけで修正してみました。
やったことはホントに一文字追加だけ
Before
'rule' => array('custom', '/^[\w]+$/'),
After
'rule' => array('custom', '/^[\w-]+$/'),
これでOKかと思ったら自動テストでエラーが起きました。
https://travis-ci.org/NetCommons3/Install/jobs/392514831
1) InstallUtilityInstallUtilValidatesDBConfTest::testValidationError with data set #18 (array('Database/Mysql', '0', 'localhost', '3306', 'unit_test', '', 'unit_', 'test', 'test'), 'database', 'a-b', '半角英数字または記号(_のみ利用可)を入力してください。')
Failed asserting that true is false.
今まで ”−” は許可してなかったので、エラーになるはずというテストコードがあったんですね。このテストコードを修正して “-” はエラーがでないように修正が必用です。
エラーメッセージも修正いるよね
テストコードの修正と同時にもうひとつ修正が必用です
"半角英数字または記号(_のみ利用可)を入力してください。"
このエラーメッセージも修正必用ですよね。修正後は記号として ”−”も使えるようになったのだが、このままだとエラーメッセージが間違ってることになっちゃいます。
というわけでエラーメッセージの修正をしようと思ったんですが、ここでも問題が…
このシステムは多言語化対応しているのでメッセージは全て言語ファイルに記述されています。
今回修正したいエラーメッセージも例外ではないです。
というわけで今回修正したいメッセージはこちら。
msgid "Only alphabets and numbers are allowed."
msgstr "半角英数字または記号(_のみ利用可)を入力してください。"
このmsgstrを書き換えればそれでOK!
とはならないんです(T.T)…
このエラーメッセージはDB名の妥当性検査以外にも使われてます。そちらは”−”を許可しないままなので、このエラーメッセージを変更してしまうとそちらに影響がでてしまいます。
となるとこのメッセージの日本語を修正するのでなく、あたらしいメッセージを定義して、妥当性検査でエラーになったら、そのメッセージを使うように修正が必用です。
というわけで言語ファイルの日本語、英語ともにメッセージを追加します。
妥当性検査でエラーになったときに使うメッセージも新たに定義したメッセージに差し替えます。
そして最後の仕上げとして自動テストの修正です。
DB名の妥当性検査失敗時のエラーメッセージが変更になったので、自動テストのコードも修正します。
最終的に4ファイル修正
まとめるとこの非常に小さな修正のために結果的に4人がかかわり、4つのファイル(妥当性検査のコードファイル、日本語ファイル、英語ファイル、自動テスト)が修正がされたことになります。
「これっぽっちのこと簡単にすむでしょ。ちゃちゃっとやってよ」みたいな話は時々ありますが、たった一文字たせば済むようなことでも裏ではこのぐらいやってるので、思ってるほど「ちゃちゃっと」ではないってことをわかっていただけたらなぁと思います。