homeIcon

【C++/Python】Dockerで作る!AtCoderローカル環境構築ガイド(ABC編)

競プロ
2025.08.10
2025.08.11

はじめに

問題の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

AtCoder環境(C++/Python). Contribute to miyazaki-dev01/AtCoder development by creating an account on GitHub.

環境

以下の言語で問題を解ける環境を作成します。

  • 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

Tools for various online judges. Downloading sample cases, generating additional test cases, testing your code, and submitting it. - online-judge-tools/oj

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

AtCoder command line tools. Contribute to Tatamo/atcoder-cli development by creating an account on GitHub.

GitHub - atcoder/ac-library: AtCoder Library

AtCoder Library. Contribute to atcoder/ac-library development by creating an account on GitHub.

github.com

AtCoder Library. Contribute to atcoder/ac-library development by creating an account on GitHub.

GitHub - key-moon/aclogin

Contribute to key-moon/aclogin development by creating an account on GitHub.

github.com

Contribute to key-moon/aclogin development by creating an account on GitHub.

環境構築

前提

以降の説明は次の項目を前提としています。

  • 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へ接続します。

画像1

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)でコピーします。

画像2

3.3 CLIツールでクッキーを保存

ターミナルで以下のコマンドを実行します。

aclogin

プロンプトが表示されたら、コピーしたREVEL_SESSIONクッキーの値を貼り付けます(Ctrl+V)。
以下の画像のように表示されたら成功です。

画像3

また、デフォルトで全ての問題がダウンロードされるように 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

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

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」をインストールするように設定してあります。

.devcontainer/devcontainer.json
{
  "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 で実行できるようになります。

画像4

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を使用し、コンテナの中にいるものとします。

問題のダウンロード

  1. タスクabc_dlを実行します。
  2. 入力欄が開くので、ダウンロードしたいABCの問題を入力します。(例:abc123)
  3. そうすると、src/atcoder/abc/配下に入力したABCの問題がダウンロードされます。
画像5

実装

各問題のファイルに回答を実装します。

テスト

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

画像6

回答の提出

回答用のファイルを開きsubmitを実行すると、その内容が自動で提出されます。
※備考を参照。

終わりに

今回は、Dockerを利用してAtCoder用のローカル環境を作成しました。
AtCoderを始めたい方や、楽に競プロをしたいという方の助けになれば幸いです!

備考

2025.04.17時点で、AtCoderの仕様変更により、提出時にもCAPTCHA認証が必要になったことで、Task Runnerのsubmitが失敗します。
CAPTCHAの自動突破は難しそうなので、当面はブラウザから手動で提出するしかなさそうです。
issue:acc submitができなくなりました

参考

Share