🦄

AtCoderの提出をコミットして保存してくれるCUIツールを作った!

2022/10/15に公開約2,400字

概要

デスクトップやらノートパソコンだったりで競プロに取り組んでいると、自分の書いたコードがいろんな所に散らばってしまい、めちゃくちゃ見返しにくいという問題が起こりました。

というわけで作ったツールがこちら

https://github.com/yu7400ki/atcoder-dumper

名をatcoder-dumperと言います。

言語

  • Python(3.10)

依存関係

  • GitPython
  • fire
  • requests
  • beautifulsoup4
  • tqdm

使い方

インストール方法

pip install git+https://github.com/yu7400ki/atcoder-dumper.git

PythonとGitが使えることが前提となります。
Pythonは3.10としています。他のバージョンは試していません。
また、動作確認はwindowsのみで行っています。

コマンド

使えるコマンドは以下の通り。

atcoder-dumper init
atcoder-dumper dump
  1. 初期化

コードを保存したいディレクトリに移動してatcoder-dumper initを実行します。

$ atcoder-dumper init
Please enter your atcoder.jp username:
Initialized successfully.

ユーザー名を入力すると以下のファイル・ディレクトリが生成されます。

atcoder.jp/
settings.json
.gitignore
  1. (設定ファイルの変更)
    やらなくても動きはします。
    atcoder-dumper initを実行すると、以下のような設定ファイルが生成されます。
{
    "atcoder.jp": {
        "username": "",
        "filter": {
            "result": [],
            "language": []
        }
    }
}

usernameには、初期化時に入力したユーザー名が入ります。
誤ったユーザー名を入力してしまった際は書き換えてください。
filterで保存するコードを絞り込めます。項目はresultlanguageの2つです。
resultには、保存したい提出結果を記入します。空欄の場合は全ての結果が対象となります。
languageには、保存したい言語を記入します。空欄の場合は全ての言語が対象となります。

以下が記入例となります。

{
    "atcoder.jp": {
        "username": "yu7400ki",
        "filter": {
            "result": ["AC"],
            "language": ["PyPy3 (7.3.0)", "Python (3.8.2)"]
        }
    }
}
  1. コードの保存
    atcoder-dumper dumpを実行するとダウンロードが始まります。
    おおよそ2秒に1回ダウンロードを行います。

あとは煮るなり焼くなりGitHubにプッシュするなり、お好きなようにご活用ください。

バグ等について

バグやミスなどはコメントやissueなどに書いて頂けると嬉しいです。
ちなみに私は既に、c++の拡張子をc++とするなどのミスを犯しています。

余談

開発環境について

Pythonのパッケージ管理にはPoetryを使用しました。
依存関係などをpyproject.tomlという1つのファイルで管理したり、lockファイルを生成してくれたり等とても便利です。

また、フォーマッターにはblackisort、リンターにはflake8mypyを使用しています。
これらはpre-commitに登録し、コミット時に自動で走るようにしました。

開発中に困ったこと

ディレクトリ構成やクラス・関数の分け方などを決めるのに非常に苦労しました(というか半ば諦めました)。
ある程度、自分で納得できるようなものにはなりましたが、経験のある方からすればお見苦しい箇所が多くあると思います。温かく見守って(あわよくばコメントなどでやさしく指摘して)頂けると助かります。

また、ダウンロードから保存までは非同期で処理したかったのですが、同じファイルにアクセスしようとした場合などに面倒なことが起きそうということで、泣く泣く同期処理になりました。

GitHubにプッシュする前と後、草の生え方の変化

Before
Before
After
After

可視化すると何もやってない時期が明白でツライですね……

最後に

コードの書き方・ディレクトリ構成やGitHubの使い方などが不慣れで拙い部分が多々あるとは存じます。繰り返しにはなりますが、温かく見守って頂けると助かります。

また、こういったアウトプットも初めてなので読みにくい文章になっているかもしれません……

最後までお読み頂きありがとうございました。

Discussion

ログインするとコメントできます