Qiita初投稿です。
今回は自作のCLIツールを紹介します。
TL;DR
- Paizaのスキルチェックを始めたが、Webページ上のエディタは使いづらいので、ローカルのエディタでコーディング&テストできるようなCLIツールを作ってみた
制作物
リポジトリはこちら → reeve0930/pz
なぜ作ったか
ものすごく個人的な話なので、興味のない人は読み飛ばして下さい…
最近、AtCoderで競技プログラミングを始めました。
AtCoderで過去問を解いて色々と勉強していたのですが、
Paizaのスキルチェックで似た感じの問題が解けるということを友人に教えてもらったため、
こちらの問題も練習として解いてみることにしました。
Paizaも同様にレーティングがあり、Aランク問題より上に行くと現状の自分では即答できない問題が出てくるようになり、
確かに練習問題として解くにはちょうどいいと感じました。
ただ、一点不満な点がありました。
それはWebページ上のエディタでコーディングをしなければならないことです。
以下の点でコーディングしづらいと感じています (一部個人的な理由を含んでいます)。
- エディタは問題ページ下部に存在し、問題文を読みながらコーディングできない
- 今まで作成した関数を使うためには、それを毎回コピペする必要がある。
- Vimキーバインドを使用できない (個人的理由)
私は普段VSCodeにVim拡張を入れてコーディングしています。
カーソルキーを使わずにカーソルを移動できるため、キーボードのみでコーディングできるのが魅力です。
また、便利なキーバインドも多数あり、これがないとコーディングする気が起きなくなってしまいました (中毒)。
AtCoderでは以下のようなツールがあり、自分の好きなエディタでコーディングできる環境が整っています。
-
atcoder-cli
- 問題用のディレクトリの作成からテストケースのダウンロードなどを自動化
-
online-judge-tools
- テストケースのチェックやコードの提出を自動化
AtCoderはコンテストサイトのため、競技性が高く、それ故このようなツールを制作する人も多いです。
しかし、Paizaの場合はあくまでも個人のスキルを評価することを目的としているため、
これらの便利なツールが今まで開発されて来なかったのだと思います (私が見つけられてないだけで、既にあったらごめんなさい)。
Paiza用CLIツール: pz
前置きが長くなりましたが、以上の背景からPaiza用CLIツール pzを作成してみました。
このツールでできることは以下の通りです。
- Paizaへの自動ログイン
- 問題用のディレクトリの作成
- 問題のテストケースのダウンロード
- 事前に準備しているテンプレートのコピー
- テストケースのチェック
- 特定のテストケースに対するデバッグ
- コーディングした内容をクリップボードにコピー
- 提出用フォームのプルダウンメニューを事前に設定したプログラミング言語に設定
このツールのインストール方法や詳細な使い方についてはリポジトリのREADMEに記載しております。
使ってみたい方はこちらからご確認下さい。
→ reeve0930/pz
開発に用いたもの
- 言語: Go言語
マルチプラットフォームのCLIツールにしたかったため、Goを用いました。
異なるOS用のバイナリもコンパイルできるため(クロスコンパイル)、多様な動作環境で動作させるプログラムを作成できます。
(とは言え、M1 Macに対応させようとして、GOOS=darwin GOARCH=arm64
でビルドしたら失敗しました… Goがまだ対応していない…? 誰か教えて下さいw)
また、Goのライブラリとしては以下を用いました。
- ライブラリ: cobra
CLIツールの開発を劇的に楽にするライブラリです。
Cobra自体もCLIツールとなっており、これを使うことでテンプレートとなるコードを自動で生成してくれます。
- ライブラリ: agouti
chromedriverなどでブラウザを操作するライブラリです。
seleniumのGo言語用のライブラリとなります。
chromedriverでブラウザと連動させることで、
問題番号などを指定せずとも現在のページの状態に応じて処理を行えるようにしました。
今回実装できなかったこと
実は当初考えていたけど現状実装できていない機能もあります。
submit
コマンドで当初はWebページの提出用のテキストフォームに自動でコピペするように作りたかったのですが、
テキストフォームの作りが少し特殊でうまくできなかったのでクリップボードにコピーすることにし、
ペーストは手動で行うようにしました。
Paizaのエディタでも一応シンタックスハイライトや補完が効くので、
そのあたりの処理の関係でうまくいかないのだと思います。
時間があるときにそのあたりをちゃんと解析し、実装したいと思います。
うまくいく方法がわかる方がいましたら教えていただけると大変助かります。
何ならプルリクでも… (強欲)
まとめ
今回はPaizaのスキルチェック用の自作CLIツール pzを紹介しました。
興味がある方がいましたら是非使っていただけるとありがたいです。
また、バグや機能改善要望などがございましたら、issueに書き込んでいただければ、随時対応したいと思います。