【C++/Python】Dockerで作る!AtCoderローカル環境構築ガイド(ABC編)
はじめに
問題のsample入力をコピーして
IDEに貼り付けてテストして
テストが終わったら自分のプログラムをコピーして
AtCoderに提出して
って面倒だし、時間がかかりますよね...
この記事では、そんな面倒な作業を自動化してくれるツールを導入し、Dockerを利用してその環境を作成することで、競プロをより楽に楽しくできるようにしていきます。
初心者の方でもこの環境を利用すれば、簡単にAtCoderを始められると思いますので、ぜひ参考にしてみてください!
ソースコードは以下のレポジトリに公開しています。
実際に使用しているため、/src
配下に問題がダウンロードされており一部の問題は解かれていますが、不必要であれば削除してください。
GitHub - miyazaki-dev01/AtCoder: AtCoder環境(C++/Python)
AtCoder環境(C++/Python). Contribute to miyazaki-dev01/AtCoder development by creating an account on GitHub.
github.com
環境
以下の言語で問題を解ける環境を作成します。
- C++
- Python
使用するライブラリ
導入するライブラリは以下の4つです。
- online-judge-tools:AtCoder や他のオンラインジャッジの問題を扱うためのツール
- atcoder-cli:AtCoder のコンテスト参加を便利にする CLI ツール
- ac-library:AtCoder 公式の C++ ライブラリ
- aclogin:AtCoderのセッションクッキーを各種ツールに保存するためのツール
GitHub - online-judge-tools/oj: Tools for various online judges. Downloading sample cases, generating additional test cases, testing your code, and submitting it.
Tools for various online judges. Downloading sample cases, generating additional test cases, testing your code, and submitting it. - online-judge-tools/oj
github.com
GitHub - Tatamo/atcoder-cli: AtCoder command line tools
AtCoder command line tools. Contribute to Tatamo/atcoder-cli development by creating an account on GitHub.
github.com
GitHub - atcoder/ac-library: AtCoder Library
AtCoder Library. Contribute to atcoder/ac-library development by creating an account on GitHub.
github.com
GitHub - key-moon/aclogin
Contribute to key-moon/aclogin development by creating an account on GitHub.
github.com
環境構築
前提
以降の説明は次の項目を前提としています。
- AtCoder のアカウントがあること
- VSCode, Docker Desktop がインストールされていること
- VSCode に「Dev Container」の拡張機能がインストールされていること
- 本リポジトリをクローン済みであること(
/src
配下を除く)
1. Docker コンテナの立ち上げ
以下のコマンドを実行し、AtCoder用のコンテナを作成します。
docker compose build --no-cache
docker compose up -d
2. VSCode へのアタッチ
VSCode で ctrl + shift + P
でコマンドパレットを開きます。
そして、Dev Containers: Open Folder in Container...
を実行し、今いるディレクトリを指定して、Dev Containersへ接続します。

3. 初期設定
acloginを使用して各ツールからAtCoderへのアクセスを可能にします。
3.1 AtCoderにログイン
ブラウザでAtCoderにログインします。
https://atcoder.jp/?lang=ja
3.2 REVEL_SESSIONクッキーを取得
REVEL_SESSIONクッキーはhttpOnly属性が設定されているため、JavaScriptから直接取得できません。以下の「Step 1 〜 Step 3」の手順で手動で取得してください。
-
Step 1: 開発者ツールを開く
キーボードでF12キー
を押すか、右クリックして「検証」または「Inspect」を選択します。 -
Step 2: Application/Storageタブを開く
開発者ツールの上部メニューから「Application」タブをクリックします。(Firefoxの場合は「Storage」タブ)
左側のサイドバーから「Cookies」→「https://atcoder.jp 」を選択します。 -
Step 3: REVEL_SESSIONの値をコピー
クッキーの一覧から「REVEL_SESSION」という名前の行を探します。
「Value」列の値をダブルクリックして選択し、右クリックしてコピーするか、Ctrl+C
(MacならCmd+C
)でコピーします。

3.3 CLIツールでクッキーを保存
ターミナルで以下のコマンドを実行します。
aclogin
プロンプトが表示されたら、コピーしたREVEL_SESSIONクッキーの値を貼り付けます(Ctrl+V
)。
以下の画像のように表示されたら成功です。

また、デフォルトで全ての問題がダウンロードされるように acc の設定変更もしておきます。
acc config default-task-choice all
内容の説明
ここで、本レポジトリの内容について説明します。
ディレクトリ構成
.
├── .devcontainer
│ └── devcontainer.json
├── .vscode
│ ├── c_cpp_properties.json
│ └── tasks.json
├── cmd
│ └── abc_dl.sh
├── src
│ └── atcoder
│ └── abc
│ ├── abc001
│ └── abc002
│ └── a
│ ├── test
│ ├── abc002_a.cpp
│ ├── abc002_a.py
│ ├── input.txt
│ └── README.md
├── templates
│ ├── atcoder.cpp
│ ├── atcoder.py
│ ├── input.txt
│ └── README.md
├── docker-compose.yml
└── Dockerfile
構成解説
.devcontainer/
:VSCode の「Dev Container」用設定(Docker を利用した開発環境)。.vscode/
:VSCode の C++ 用コンパイラ設定やビルドタスクを管理。cmd/
:AtCoder の問題を取得するスクリプトなど、実行用スクリプトを格納。src/
:AtCoder の解答プログラムを管理するソースコードディレクトリ。templates/
:コードやテストデータのテンプレートを管理。docker-compose.yml
/Dockerfile
:開発環境を Docker で構築するための設定ファイル。
src/atcoder/abc/
配下の内容
abc123/
-> A, B, C, ...問題のディレクトリabc123/a/test/
-> A 問題のテストケースabc123/a/abc123_a.cpp
-> A 問題の解答ファイル(/templates/atcoder.cpp
をコピーして作られる)abc123/a/abc123_a.py
-> A 問題の解答ファイル(/templates/atcoder.py
をコピーして作られる)abc123/a/input.txt
-> 任意のテストケース入力用ファイル(/templates/input.txt
をコピーして作られる)abc123/a/README.md
-> 問題の解答・解説などの記録(/templates/README.md
をコピーして作られる)
環境設定
具体的な説明は省きますが、Docker環境は以下のように設定しています。
Dockerfile
# ベースイメージとしてUbuntu22.04を使用
FROM ubuntu:22.04
# 作業ディレクトリを作成
WORKDIR app
# インタラクティブモードにならないようにする
ARG DEBIAN_FRONTEND=noninteractive
# タイムゾーンを日本に設定
ENV TZ=Asia/Tokyo
# パッケージリストの更新と、必要なパッケージのインストール
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
time \
tzdata \
gcc-12 \
g++-12 \
gdb \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# Node.jsのインストール(NodeSourceのリポジトリを利用)
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
&& apt-get install -y --no-install-recommends nodejs \
&& rm -rf /var/lib/apt/lists/*
# atcoder-cli(acc)のインストール
RUN npm install -g atcoder-cli
# online-judge-tools(oj)のインストール
RUN pip3 install --no-cache-dir online-judge-tools
# AtCoder Library(ACL)のインストール
RUN git clone https://github.com/atcoder/ac-library.git /lib/ac-library
# ACLのインクルードパスを設定
ENV CPLUS_INCLUDE_PATH /lib/ac-library
# acloginのインストール
RUN pip3 install --no-cache-dir aclogin
docker-compose.yml
version: "3.8"
services:
atcoder:
container_name: AtCoder
build: .
volumes:
- .:/app
ports:
- "8080:8080"
tty: true
stdin_open: true
command: ["/bin/bash"]
Task Runner について
以下の Dev Container の設定により、VSCode へのアタッチ時に拡張機能「Task Runner」をインストールするように設定してあります。
{
"name": "AtCoder",
"dockerComposeFile": "../docker-compose.yml",
"service": "atcoder",
"workspaceFolder": "/app",
"customizations": {
"vscode": {
"extensions": [
"sanaajani.taskrunnercode", // Task Runner
"esbenp.prettier-vscode", // Prettier
"ms-python.python", // Python
"ms-vscode.cpptools" // C/C++
],
"settings": {
"editor.defaultFormatter": "esbenp.prettier-vscode", // Prettierをデフォルトフォーマッタに設定
"editor.formatOnSave": true, // ファイル保存時に自動フォーマット
"C_Cpp.intelliSenseEngine": "default" // C/C++の補完エンジン
}
}
}
}
これにより、.vscode/tasks.json
に登録されたタスクを GUI で実行できるようになります。

Task Runnerのタスク
.vscode/tasks.json
で設定しているタスクにいて、それぞれ具体的な内容を説明します。
-
abc_dl
AtCoderのABC(AtCoder Beginner Contest)の問題が、src/atcoder/abc/
配下の各コンテストに対応するディレクトリにダウンロードされる。 -
test cpp / test py
各問題で与えられている複数の入力例について、そのすべてのテストケースを実行する。 -
execute cpp / execute py
回答用のファイルを開き、このタスクを実行すると、標準入力が開く。
そこで手動で入力を行うことで、任意のテストケースを試すことができる。 -
execute cpp input.txt / execute py input.txt
回答用のファイルを開き、このタスクを実行すると、abcXXX/X/input.txt
にある入力を用いて任意のテストケースを試すことができる。 -
compile
C++ファイルのコンパイルを実行する。 -
submit
開いているファイルの内容が、回答として自動で提出される。
※備考を参照。
実際の使用方法
Dev Containerを使用し、コンテナの中にいるものとします。
問題のダウンロード
- タスク
abc_dl
を実行します。 - 入力欄が開くので、ダウンロードしたいABCの問題を入力します。(例:
abc123
) - そうすると、
src/atcoder/abc/
配下に入力したABCの問題がダウンロードされます。

実装
各問題のファイルに回答を実装します。
テスト
上記で説明したテスト用のタスクを実行し、書いたコードが正しく回答を出力するか確認します。
以下の画像は、test cpp
の実行結果です。入力に対して正しい出力ができていると「AC」となります。

回答の提出
回答用のファイルを開きsubmit
を実行すると、その内容が自動で提出されます。
※備考を参照。
終わりに
今回は、Dockerを利用してAtCoder用のローカル環境を作成しました。
AtCoderを始めたい方や、楽に競プロをしたいという方の助けになれば幸いです!
備考
2025.04.17時点で、AtCoderの仕様変更により、提出時にもCAPTCHA認証が必要になったことで、Task Runnerのsubmit
が失敗します。
CAPTCHAの自動突破は難しそうなので、当面はブラウザから手動で提出するしかなさそうです。
issue:acc submitができなくなりました