この記事は「Elixir Advent Calendar 2023 シリーズ 1」15日目の記事です。
ElixirのAtCoder用MixタスクライブラリKyopuroを更新したのでそのことを書きます。
知見の共有ではなくただの振り返りです。
Kyopuroを最初に公開したのは2020年11月でそのときもアドベントカレンダーで書きました。
当時はElixirで競技プログラミングをやっていました。そんな中TwitterのTLで見かけたQWYNG/green_dayに触発されて自分も作ろうと思い立ち作成したのがKyopuroになります。
しかし作ったはいいもののそこで競技プログラミングに対するモチベーションが消えてしまい、最後にKyopuroを更新したのは2020年12月と3年経ってしまいました。
そんな中TwitterでElixirのアドベントカレンダーの話題を目にしたときに、ふと昔書いたな~なんてKyopuroのことを思い出し、手元で動かしてみたらAtCoderのログイン処理に変更が入っていて動かなくなっていました。
さすがに動かないものを公開しておくことは気が引けますし、社内ではなく外部向けに何かを発信することをもう長い間していなかったのでこれをネタにアドベントカレンダーを書くか!という気持ちでライブラリを更新することに決めました。
どうやって更新していくか
時間をあまり割くことができないのはあらかじめわかっていたので
- YukiCoderのサポートを落とす
- 既存のコードを理解してつじつまを合わせるのではなくスクラップ&ビルドで1から書き直す
- うまくやろうという気持ちは捨てて愚直な実装
を方針に更新をしました。
1については自己満足で実装しただけで自分自身使わなかったし多分誰も使っていないだろうと思ったので決めました。
2についてはコードにコメントがほぼなかったのと、IFを変えることにしたので決めました。
3についてはあまり時間がとれないというのに加えて初心に帰ろうというのもありました。
作業内容としては
- 本筋と関係ないもの系の修正
- 当時IntelliJ IDEAを使用していたが現在はVSCodeなのでIDEA用のファイルを削除
- jdx/rtxを使用するように変更
- 使用しているライブラリのバージョンアップおよび変更
- 内部処理の修正
とりあえずfinchで書かれていた個所をHTTPoisonに置き換えて動くようにすることから始めました。その中でNetscape cookie file formatというものを知ったのでCookieの保存方法としてこれに準拠したフォーマットを採用してみました。
後はMixタスクのIFをこれまでは引数として受け取っていたのをプロンプトから選択・入力できるようにしたりすることにしたのでそれに合わせて全体的につじつまを合わせていきました。
結果として冗長な実装やもうちょっとどうにかならんのかみたいな実装がポツポツありますが、今回はコメントを多めにしたので今度はうまくライブラリを更新しろよ?と未来の自分に託します。もちろんIssue・PR歓迎です!アクションをもらえるとモチベーションにもなります。
と、周囲に共有するような知見が得られたわけでもなく自己満足の振り返りだけですが、本記事の結びといたします。
最後にKyopuroの紹介を…
Kyopuroの提供する機能は
- ログイン
- モジュール・テストコードの生成
- 提出
です。
ログイン
ログインはmix kyopuro.login
を実行してください。認証情報はプロンプトから入力、もしくはConfigから取得させることができます。
モジュール・テストコードの生成
モジュール・テストコードの生成にはmix kyopuro.new
を実行してください。モジュールとテストコードが生成されます。デフォルトで生成されるモジュールはmain関数が定義されただけなので、お好みに合わせてモジュールテンプレートを作成しConfigで設定してください。
提出
提出にはmix kyppuro.submit <提出したいファイルのパス>
を実行してください。
各コマンドの詳細はmix help kyopuro.~~
で確認していただくか、hexdocを見ていただければと思います。
明日の「Elixir Advent Calendar 2023 シリーズ 1」16日目は @kikuyuta さんです。乞うご期待ください!