自家製クオンツ

ソフトウェア技術を使って金融や投資の考察をしています。

完走しました!

f:id:yooce:20211207115330p:plain

ひとりアドベントカレンダー25日目です。やり切りました。最終日の今日は、アドベントカレンダーに参加した理由を書いておきたいと思います。

元々のWindowsアプリケーション版MagicalNutsは、私が投資本を読んで気になったことや思い付いたことを、過去の株価データを使って検証してきたことの寄せ集めでした。KAPPAさんの著書「東大卒医師が教える科学的「株」投資術」で言うエビデンスを得ることで、投資手法に自信を持つというやり方が私の性格ともマッチしていたのだと思います。

自分で開発して自分で使用してきたMagicalNutsですが、様々な機能を思い付くままに追加していった結果、コードとしてはそれなりの規模になってきました。また、機能実現を優先してきたために、あまりキレイなコードにもなっておらず、この上にさらなる機能を追加することに不安を覚えた私は、今から数ヶ月前にリファクタリングすることを決意します。

そのリファクタリングの際に、比較的汎用な部分だとか、再利用可能な部分は切り出しておこうと思いました。そうしておけば、把握しやすいコードにできますし、新機能追加時に再利用も可能です。また、将来的には切り出した部分を人様にご利用いただけるのではないか、ということも思いました。そこででき始めたのがライブラリ版MagicalNutsです。

ですが、そのリファクタリングがツライんですよね…。リファクタリングは設計がシンプルになったり、コードがキレイになったりはしますが、基本的に機能追加はしないので、リファクタリング前後でできることは変わりません。リファクタリング前後で処理結果が変わらないことを保証するために、合わせてテストコードを入れることにしました(今まで入れてなかったのかよ)。テストコードの実装には、体感で機能実装時の約半分くらいのコストがかかるように感じています。つまり、テスト駆動開発は、テストを入れない開発の1.5倍は時間がかかるように思います。なので、苦労してリファクタリングしているが、その結果できることは変わらない、という部分が私にはツラく感じたのです。

さらには、ライブラリとしてのリリースを考えた場合、ドキュメントの整備も考えなければなりません。やり始めたものの、あまりに膨大な作業量に怖気づいた私は、「もうやめよかな」という悪魔の声が聞こえ始めます。ところが年末が近付いた頃、ふとQiitaのアドベントカレンダーが目に留まります。私は「これだ!」と直感しました。アドベントカレンダーに参加して、毎日記事を上げないといけない状況に自分を追い込むことにしたのです。そのためにはリファクタリングを完了させなければなりませんし、サンプルの実装も必要です。

このようにして参加したアドベントカレンダーですが、その時はやる気が急騰していたため、毎日記事を上げることを考えました。しかし、やってみると、仕事を2つ抱えてさらに投資活動もしている身にはやはり大変でした。「別に毎日でなくても、書けたら上げるくらいでいいんじゃない?」と、またささやき声が聞こたような…?

それでも、なんとか続けていくうちに、今日めでたく25日目を迎えることができました。どのくらいの方が読んでくださったかわかりませんが、1記事でも読んでくださった方、どうもありがとうございました。