このリポジトリは、AtCoder の C++ 解答をローカルで作成、ビルド、実行、サンプルテスト、提出するための環境です。インストール可能な acc コマンドで atcoder-cli を拡張し、ローカル開発用のコマンドを提供します。
- Git
- uv
- Node.js と npm(
atcoder-cliのインストールに使用) - C++23 に対応した C++ コンパイラ
- bash または zsh
- AtCoder アカウント
GNU GCC 15 を推奨します。別の C++23 対応コンパイラもビルドには使用できますが、acc doctor は警告を表示します。環境に GNU GCC が存在するかは acc doctor とコンパイラの --version で確認してください。
リポジトリをクローンし、リポジトリルートで依存関係をインストールします。
git clone <url>
cd atcoder-local
uv sync --group dev
npm install -g atcoder-cli@2.2.0
uv tool install .uv sync --group dev は online-judge-tools、oj-bundle、aclogin とテスト用の pytest を仮想環境へインストールします。atcoder-cli は npm のグローバルパッケージとしてインストールします。uv tool install . の後は、新しいシェルでもすぐに acc を使えます。インストール済みの acc 実行ファイル自体はインストール時のチェックアウトの絶対パスに依存しないため、後からリポジトリを移動しても使用できます。ただし、次節で設定するテンプレートの絶対パスは別途更新が必要です。
git pull などでラッパーのソースコードを更新した後、またはパッケージのメタデータや依存関係を更新した後は、次を実行してインストール済みコマンドを更新します。
uv tool install --force .リポジトリルートで次を実行します。テンプレートの設定値には、このクローンの絶対パスが保存されます。リポジトリを移動した場合は、移動後のリポジトリルートでこの設定をもう一度実行してテンプレートのパスを更新してください。
uv run acc check-oj
acc config default-task-choice all
acc config default-template "$(pwd)/template/cpp"
acc config default-contest-dirname-format 'contests/{ContestID}'
acc config default-test-dirname-format testAtCoder へのログイン情報は aclogin で設定します。ブラウザで AtCoder にログインし、開発者ツールの Cookie 一覧から REVEL_SESSION の値を確認して、次のコマンドの入力欄へ貼り付けます。Cookie は秘密情報として扱い、ファイルやシェル履歴へ保存しないでください。
uv run aclogin通常は前節の uv tool install . を使用してください。既存のシェル設定との互換性のために、使用するシェルに合わせてリポジトリルートでどちらか一方を source することもできます。
zsh:
source "$(pwd)/tools/acc-wrapper.zsh"bash:
source "$(pwd)/tools/acc-wrapper.bash"ラッパーは現在のシェルセッションだけで有効です。セットアップコマンドとラッパーは .zshrc や .bashrc を自動では変更しません。常時使用する場合は、ユーザーが対応する source 行を ~/.zshrc または ~/.bashrc へ手動で追加し、$(pwd) ではなくこのクローンの絶対パスを指定してください。インストール済みの acc とこの互換用ラッパーを同じシェルで併用しないでください。
インストール済みの acc で acc doctor を実行します。互換用ラッパーを使用する場合も、同じコマンドで診断できます。
acc doctoracc doctor は uv、atcoder-cli、oj、oj-bundle、C++23 コンパイラ、同梱 ACL とローカルヘッダー、インストール済みの acc または互換用ラッパーの有効化を順に確認します。[error] があれば終了コード 1、GCC 15 以外の利用など [warning] だけであれば終了コード 0 です。
リポジトリルートで、コンテスト ID を指定します。
acc new abc123acc new は、指定した引数をそのまま atcoder-cli へ渡してコンテストを作成します。
通常は contest.acc.json に登録されたタスクディレクトリ、たとえば contests/abc123/a で実行します。
acc build
acc run
acc test
acc test --debug
acc submitacc buildは C++23 のリリース設定でmain.cppをビルドします。ダウンロード済みサンプルは必要ありません。acc runはリリースビルド後にプログラムを実行します。ダウンロード済みサンプルは必要ありません。acc testとacc test --debugはmain.cppとローカルヘッダーを.submission.cpp.pendingへ bundle し、その単一ファイルを各モードでコンパイルしてサンプルを実行します。サンプルがすべて成功した後、各タスクディレクトリのsubmission.cppとして公開されます。サンプルテストがない場合は、bundle とコンパイルの成功後に警告を表示し、サンプルテストを省略してsubmission.cppを公開します。acc test --debugではLOCAL、AddressSanitizer、UndefinedBehaviorSanitizer を有効にします。acc submitは bundle、コンパイル、サンプルテストを実行しません。先にacc testを実行して生成した、各タスクディレクトリの新しいsubmission.cppだけを確認後に提出します。
acc submit は対話端末専用です。確認は既定で No であり、y または yes を明示的に入力した場合だけ atcoder-cli へ提出を渡します。空入力、その他の入力、確認の中断では提出しません。
ビルドバイナリは .atcoder-local/build/ 配下に置かれ、Git の管理対象にはなりません。生成された submission.cpp と .submission.cpp.pending は contests/ 配下で Git の管理対象から除外されます。main.cpp または library/ 配下の任意のファイルを変更すると submission.cpp は古い状態になるため、提出前にもう一度 acc test を実行してください。
リポジトリルートなどタスクディレクトリ以外から実行する場合は、コンテスト ID とタスクラベルを両方指定します。片方だけの指定はエラーです。タスクラベルは大文字・小文字を区別しません。
acc build -c abc123 -t a
acc run -c abc123 -t a
acc test -c abc123 -t a
acc test --debug -c abc123 -t a
acc submit -c abc123 -t aAtCoder はソースコード提出に CAPTCHA を導入しています。公式告知では、開催中の ABC、ARC、AGC、AHC などの Rated コンテストは CAPTCHA なしで提出できる扱いですが、この仕様は将来にわたって保証されていません。開催中の対象コンテスト以外など、AtCoder がその時点で CLI 提出を許可する条件から外れる場合、非公式ツールである atcoder-cli の提出は失敗することがあります。最新情報は AtCoder の公式告知 を確認してください。
このリポジトリの acc submit は、提出失敗時にブラウザを開きません。提出 URL の表示、URL やソースのクリップボードへのコピー、Web 提出などの代替経路への切り替えも行いません。失敗時はエラーをそのまま返すため、提出済みと判断せず AtCoder 上の提出一覧を確認してください。
- 以前に編集可能モードで
accをインストールし、元のチェックアウトを移動または削除した場合は、uv tool install --force .を実行してインストールを更新してください。 acc doctorがcurrent shell is not using the repository wrapperと表示する場合は、インストール済みのaccを使用しているか確認してください。互換用ラッパーを選んでいる場合は、使用中のシェルに対応するtools/acc-wrapper.zshまたはtools/acc-wrapper.bashをもう一度sourceしてください。no C++23 compiler foundの場合は C++23 対応コンパイラをインストールし、必要ならその実行ファイルをCXXに指定してから再診断してください。コンパイラが未導入の環境で GNU GCC が利用できるとは仮定しないでください。oj-bundleが GNU C++ コンパイラを要求して失敗する場合は、GNU GCC の導入状況とCXXを確認してからacc testを再実行してください。- リポジトリルートで
acc buildなどがタスクを特定できない場合は、-cと-tを両方指定してください。 acc submitが提出前に停止する場合は、submission.cppの有無と新しさ、対話端末、確認入力を確認し、必要ならacc testを再実行してください。AtCoder への提出が失敗した場合は、ログイン状態、CAPTCHA の条件、AtCoder 側の提出履歴を順に確認してください。このラッパーは自動的な代替提出を行いません。