私は、Works Human Intelligenceで給与計算領域の大規模業務アプリケーションの
企画、開発を生業としているエンジニアである。
時に20数年前から継ぎ足されていることもある秘伝のソースコードを読み解き、
うまく動かない箇所に手を加えてうまく動くようにしたり、
新しく動かしたい動きを継ぎ足したりしている。
今回は、こういった秘伝のソースコードと付き合って
大規模業務アプリケーションを開発する
2つのコツとして私が考えるポイントをシェアする。
業務をプロが使う資料から学び、ソースコードのコンテキストを大きく吸収する
大規模業務アプリケーションの開発課題を解決するための初手としてよく採用するのは、
アプリケーション対象となる業務を業務のプロが使う資料から学び、
ソースコードのコンテキストを大きく理解することである。
例えば、私の開発者としての主領域である公共機関の給与計算業務を例にすると、
・人事院規則
・人事院規則の解説書
(『国家公務員の給与 - その仕組みと取扱い -』や、『諸手当質疑応答集』)
といった現場の業務担当者が業務遂行をするために参照している資料を机の横に起き、
どういった取扱をするかを都度参照するようにしている。
こういった資料の参照によって得たコンテキストにより、
ソースコードにかかれているロジックは何のためにあるのか、
を雄弁に語れる状態に効果的に変えていっている。
もし、「ここのソースコードにかかれているロジックは、こういうことをやりたいからあるんだ」と
雄弁に語れるようになれば、秘伝のソースコードを自由に、すばやく変えることができる力を得られる。
この段階にすばやく達するための手として、
「アプリケーション対象となる業務を学ぶ」を採用している。
「開発者ならソースコードからすべて対話してコンテキストを読み解くべき」と
思われる方もいるかもしれない。
しかし、1人が管理するソースコード量が数十万行にも及ぶ大規模業務アプリケーションになると、
例えば一つ一つのif文の分岐にどういった意図を込められているかを
解読するだけでも日が暮れてしまう。
このため、業務を学ぶことでコンテキストをごっそり吸収できるところは
吸収するという手を私は使っている。
また、参照する資料のセレクトが、
現場の業務担当者が業務遂行するために参照しているようなプロ向けの資料を
セレクトしている点に驚くかもしれない。
しかし、業務アプリケーションでは、
現場の業務担当者が普段忘れてしまうようなルールが
ソースコードの中に埋め込まれていることが往々にある。
その傾向は、イレギュラーな取扱の自動化が必要になるほどの件数が発生しうる
大規模業務アプリケーションになればなるほど、
こういったルールがソースコードの中に埋め込まれる傾向は強くなる。
このため、ソースコードの読み解きには、入門書レベルの知識ではコンテキストの補完ができず、
現場の業務担当者が困ったときに読むようなプロ向け資料が必要になってくる。
ソースコードから業務像を想像し、小さくコンテキストを復元する
多くの場合、現場の業務担当者が業務遂行をするため
に参照している資料を入手して読み解けば、コンテキストを補うことができるが、
細かな指針を実現するためにソースコードに埋め込んでいるケースについては
根拠資料がない場合もある。
特によくあるのは、業務慣習をソースコードに埋め込んでいるパターンであり、
このパターンについては現場の業務担当者が業務遂行するために
参照する資料に記載がないことは往々にある。
前述のとおり、イレギュラーな取扱についても
自動化が必要になるほどの件数が発生しうる大規模業務アプリケーションでは、
こういった細かな指針もソースコードに織り込まれていることは往々にある。
そういった場合は、上記で「日が暮れる」と述べたソースコードから
コンテキストを復元することが必要になる。
このソースコードからコンテキストを復元する際によく使うのは、
「このソースコードの書き方であったら、こう動くしかないので、こういった業務像になるであろう」
という動きから逆算した業務想像という手である。
もちろん、こういった動きから逆算した業務想像は
一つ一つのif文の分岐にほどこしていたら日が暮れるので、
どうしても資料からコンテキストが復元できない箇所にピンポイントで使うのが、
効果的に「ここのソースコードにかかれているロジックは、
こういうことをやりたいからあるんだ」という状態に
たどり着くためのコツである。
つまり、大きなコンテキストはプロの資料から学び、
そこからこぼれ落ちた小さなコンテキストはソースコードの動きから逆算して復元する、
という使い分けをする、ということである。
まとめ
秘伝のソースコードと付き合って大規模業務アプリケーションを開発するポイントは
1.業務をプロが使う資料から学び、ソースコードのコンテキストを大きく吸収する。
2.ソースコードから業務像を想像し、小さくコンテキストを復元する。
という2つのコツを組み合わせ、
「ここのソースコードにかかれているロジックは、こういうことをやりたいからあるんだ」と
雄弁に語れる状況にすばやくたどり着くことである。
このシェアが、大規模業務アプリケーションの秘伝のソースを読み解いて問題解決するエンジニアの
問題解決のヒントになれば、幸いである。