2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AtCoder の環境構築をしよう 2025冬

Last updated at Posted at 2025-11-15

2025/11/16 追記

library フォルダーについて、直下にあるフォルダーがちょうど1個でないと正しく動作しないようになっていました。そのため AtCoder Library のインストールを必須に変更しました。
複数のライブラリーを使用したい場合は library フォルダーに追加する以外にも手順が必要なため、後日 GitHub リポジトリを更新した上で記事に追記します。

追記ここまで

AtCoder の環境構築をしたので手順を残しておきます。

始める前に

前提

  • Windows
    • OS による手順の差異は小さいと思います(WSL 関連が不要になるくらい?)
  • AtCoder の使用言語は C++

できあがる環境について

実際に問題を解く時の手順はこの記事の後半を参考にしてください。

  • エディターは VSCode
  • dev container を使用
  • GCC 15.2.0
  • AtCoder Library v1.6
  • Python 3.11.2 と、AtCoder で使える各種 Python ライブラリ
    • venv 環境にインストールします
    • Python をメインで使うための設定はしません。他人のコードを動かす程度の想定です
  • bits/stdc++.h のプリコンパイル
  • online-judge-tools と atcoder-cli
  • 上記 oj や acc のよく使う機能を GUI やキーボードショートカットで呼び出すための設定
  • GDB(デバッガー)
  • formatter や linter は別途の設定をしていません
    • C/C++ 拡張機能のデフォルトのものが使用されます
    • もちろんカスタマイズして使ってかまいません

環境構築をする

わからない部分が出てきたら他の環境構築の記事も参照したりAIに聞いたりしてみてください。
AtCoder Clans には環境構築の記事のまとめがあります。

手順1 VSCode と WSL2 をインストールする

えびまさんの環境構築動画に沿ってやるのがわかりやすいと思います。(動画時間 0:30 ~ 6:40 くらいまで)
この記事での環境構築には不要な部分もありますが、やって困るということもないでしょう。

また、古いバージョンの WSL がインストールされている場合には次の記事が参考になります。

手順2 VSCode に Dev Containers 拡張機能をインストールする

手順3 Docker Desktop をインストールする

Docker Desktop のインストール方法についての記事はたくさんあると思うので、それらを見ながら進めてください。

手順4 (任意) WSL のメモリサイズを大きくする

Windows の検索欄に WSL Settings と入力し、出てきたアプリを開きます。

メモリ サイズスワップ サイズ の項目の数値を大きくします。
筆者はメモリサイズ6GB、スワップサイズ8GBにしています。

手順5 Dockerfile 等をダウンロードして一部書き換える

筆者が環境構築する時に作った設定ファイル等を GitHub で公開しているのでそれをダウンロードします。
zip 形式で大丈夫です。git が使えるなら代わりに git clone してもよいです。
ダウンロード先はひとまずどこでもよいです(後で移動します)。

(万が一、セキュリティー的にまずいファイルが混ざっていたら教えてください)

zip を展開したら、内側の competitive-main フォルダーの名前を competitive に変更します。
(内側の、というのは LICENSE ファイルなどのすぐ上の、という意味です)

VSCode で competitive フォルダーを開きます。
このとき「ファイルの作成者を信頼しますか」のように聞かれたら、「作成者を信頼します」を選択してください。

また、右下に コンテナーで再度開く というボタンが表示された場合、無視してください。

フォルダーを開くと VSCode の左側にファイル一覧が表示されます。

これらのファイルは筆者の個人用にカスタマイズされているので、読者の方が使えるように少し書き換えます。

.devcontainer/atcoder/src/.vscode/keybindings.json
このファイルはこの後の手順で参考にするために置いてあります。環境構築が終わった後、気になるようでしたら消してください。
.devcontainer/atcoder/src/.vscode/settings.json
VSCode の設定が書かれたファイルです。筆者の個人用の設定なので、中身を全て消してください。
.devcontainer/atcoder/src/atcoder-cli/cpp/main.cpp
問題を解くときに自動で用意されるテンプレートです。中身を消して、現在使っているテンプレートに書き換えてください。
.devcontainer/atcoder/src/atcoder-cli/cpp/generate.cpp
これもテンプレートですが、問題の入力ファイルをランダム生成するために使います。ランダム生成用のテンプレートが必要ない方や、上記の main.cpp をランダム生成用のテンプレートとしても使いたい方は下記の template.json を変更してください。
.devcontainer/atcoder/src/atcoder-cli/cpp/template.json
問題用のフォルダーを作成したときに自動でコピーされるテンプレートを指定しています。
"program": [["main.cpp", "{TaskLabel}_main.cpp"], ["generate.cpp", "{TaskLabel}_generate.cpp"], ["main.cpp", "{TaskLabel}_tle.cpp"]],
の部分で、例えばA問題のフォルダーであれば、
main.cppA_main.cpp という名前でコピーし、
generate.cppA_generate.cpp という名前でコピーし、
main.cppA_tle.cpp という名前でコピーする
という意味です。(つまり、問題フォルダーには3個のファイルが生成されます。)
詳しい書き方は atcoder-cli のリポジトリの README に記載があります。
なお、{TaskLabel}_main.cpp のようなフォーマット自体は変更しないのがおすすめです。もしフォーマットも変更する場合は tasks.json も併せて変更が必要です。
.devcontainer/atcoder/devcontainer.json
フォルダーの名前を competitive から変更する場合や、フォルダーの配置場所(後の手順で説明します)を変更する場合は、workspaceMountsource を書き換えてください。

また、次のファイルやフォルダーを作成してください。

library/
competitive フォルダーの直下に library という名前の空のフォルダーを作ってください。
.secret/atcoder/cookie.jar
.secret/atcoder/session.json
これらのファイルは oj や acc で AtCoder にログインするために必要です。
同じフォルダーにある cookie_template.jarsession_template.json をコピーしてこれらのファイルを作成してください。
その後ファイルを開き、PASTE_REVEL_SESSION_HERE と書かれた部分にログイン情報をコピペしてください(各ファイルに1箇所ずつ)。
ログイン情報の確認方法は次のページで説明されています。
https://kaiyou9.com/acc_and_oj_login_failed/

ログイン情報が書かれたファイルは GitHub 等にアップロードしないように注意してください。

手順6 (任意)キーボードショートカットを設定する

下のリンクを参考にしてキーボードショートカットを設定します。
上で触れた keybindings.json の中身をいったんそのままコピペして使ってみて、必要な時に変更するとよいと思います。

手順7 AtCoder Library をインストールする

下のリンク先のページの下の方に Assets と書かれた部分があるのでそこから zip をダウンロードします。

zip を展開したら先ほど作った library フォルダーの中に入れます。
library フォルダーの下に ac-library フォルダーがあり、その下に LICENSE ファイル等があるようになっていれば OK です。

手順8 competitive フォルダーを WSL2 側のホームディレクトリに移動する

competitive フォルダーを WSL2 でインストールした OS のホームディレクトリ直下に配置します。

この作業はエクスプローラー上で行うことが可能です。

移動後の competitive フォルダーの中に *:Zone.Identifier というファイルがいくつか生成されますが、削除しても問題ありません。
エクスプローラーの検索機能で Zone.Identifier と検索して一括削除するのが簡単でしょう。

手順9 コンテナを作成する

まず Docker Desktop が起動していることを確認します。

VSCode で competitive フォルダーを開くと、右下に コンテナーで再度開く というボタンが表示されるので、クリックします。
ボタンが表示されない場合、F1 キーでコマンドパレットを開き、reopen in container と入力して表示される項目をクリックします。

image.png

クリックするとコンテナの作成が始まるので数分待ちます。

完了すると画面の下側に次のような表示が出てきます。

[SUCCESS] You have already signed in.
[INFO] save cookie to: /home/vscode/.local/share/online-judge-tools/cookie.jar
check login status...
OK
online-judge-tools is available. found at:
/home/vscode/.local/bin/oj
任意のキーを押してターミナルを終了します。

上から順に、oj が AtCoder にログインできたか、acc が AtCoder にログインできたか、acc が oj を見つけられたかという情報です。

続いて VSCode の拡張機能のインストールが始まります。
次のように時計マークが出ていたらまだインストール途中なので少し待ちます。

image.png

時計マークが消えたらコンテナ作成完了ですが、タスクを正常に読み込むためにVSCode のリロードをする必要があります
F1 キーでコマンドパレットを開き、reload window と入力して「ウィンドウの再読み込み」をクリックします。もしくは単に VSCode を一度閉じてから開きなおします。

image.png

以上で環境構築は完了です!

1問解いてみる

ABC430 の A 問題を解きます。

VSCode で competitive フォルダーを開き、コンテナ内にいることを確認する

左下に 開発コンテナー: cp-atcoder と表示されていれば OK です。
もしコンテナの外だったらコンテナで再度開きます。

コンテスト用のフォルダーを作成する

上部のメニューから ターミナル -> タスクの実行 を選択してください。
この操作はよく使うので覚えておいてください。

タスクの一覧が表示されるので、コンテスト用のフォルダを準備する を選択します。
コンテストidを聞かれるので今回は abc430 と入力し、コンテストが開始してから Enter キーを押すと abc430 という名前のフォルダーが作成されます。

(任意)コンテスト用フォルダーを移動する

作成した abc430 フォルダーは competitive フォルダーの中ならどこに移動してもいいです。
筆者は solution フォルダーを作ってその中に abc430 を移動しました。

コードを書く

abc430 フォルダーの中には問題ごとにサブフォルダーが作られています。

A フォルダーの中にある A_main.cpp を開いてコードを書きます。

A_main.cpp
#include <bits/stdc++.h>
using namespace std;

int main () {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if (a <= c and b >= d) cout << "Yes" << endl;
    else cout << "No" << endl;
}

(注:上のコードは誤りです)

サンプル入出力を使ってテストする

abc430 フォルダーの作成時に各問題のサンプル入出力ファイルがダウンロードされています。

これらのファイルを使って、サンプルの入力に対して正解できるかを自動でテストできます。

A_main.cpp を開いた状態でタスク一覧を開き、テスト実行(デバッグビルド) を選択してください。テストが実行されます。

キーボードショートカットを設定している場合は Ctrl + Shift + t でテストを実行できます。

プログラムの実行が終わらない場合は Ctrl + c で強制終了できます。
このテスト実行に関しては 1 ケース 30 秒で TLE となって自動終了する設定をしています。

[INFO] slowest: 0.038308 sec  (for sample-1)
[SUCCESS] test success: 3 cases

上のように表示され、サンプルケースは正解だとわかります。

手動でテストケースを追加することもできます。

hand.in
1 2 3 4

hand.out
No

.in.out の前の名前を一致させ、末尾の改行を忘れないようにしましょう。

これらのファイルを test フォルダーに追加し、A_main.cpp を開いた状態でもう一度テストを実行します。

[INFO] slowest: 0.030516 sec  (for hand)
[SUCCESS] test success: 4 cases

テストケースが増えていることがわかります。

提出する

A_main.cpp を開いた状態でタスク一覧を開き、ヘッダーファイルを展開して提出する を選択してください。

キーボードショートカットを設定している場合は Ctrl + Shift + s で提出できます。

実行すると A_main_expanded.cpp が生成されて開きます。

A_main_expanded.cpp
#line 1 "A_main.cpp"
#include <bits/stdc++.h>
using namespace std;

int main () {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if (a <= c and b >= d) cout << "Yes" << endl;
    else cout << "No" << endl;
}

今回は A_main.cpp とほぼ同じ内容になっていますが、AtCoder で使えない自作のライブラリーなどを使用する場合に #include "mylib.hpp" のようにダブルクォーテーションを使って include 文を書くと、library フォルダーの中からそのファイルを探して展開してくれます。詳細は以下のページを確認してください。 ライブラリーの追加は後日対応予定(記事冒頭の追記を参照)

生成した A_main_expanded.cpp を開くと同時に AtCoder に提出も行います。

2025年11月現在、コンテストの開催中のみ oj から AtCoder に提出できます。
期間外の場合は oj のエラーが発生します。

自動で提出できない場合は、開いた A_main_expanded.cpp をコピペして、問題ページの提出欄に貼り付けて提出します。

デバッグする

上記の A_main.cpp および A_main_expanded.cpp は間違っているので、提出すると WA になります。デバッグしましょう。

F5 デバッグ

F5 キーを押すとデバッガーを使用してのデバッグが可能です。
詳細はえびまさんの環境構築動画をご覧ください。(動画時間13:37~14:17頃)

撃墜ケースを探す

どんなケースで WA になるかわからないという時は、ランダムに入力ファイルを生成して撃墜ケースを見つけてみましょう。

A_generate.cpp に入力を生成するためのコードを書きます。

A_generate.cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
    mt19937 g(random_device{}());
    uniform_int_distribution<int> randint(1, 100);
    for (int i = 0; i < 4; ++i) {
        cout << randint(g) << " \n"[i == 3];
    }
}

上のコードは 1 以上 100 以下の整数を 4 個ランダムに出力します。
ここで生成する入力は、次の A_tle.cpp でも高速に答えが出せるくらい小さめの制約にしてください。

A_tle.cpp には、TLE してしまうが正しい答えを出力するコードを書きます。

A_tle.cpp
#include <bits/stdc++.h>
using namespace std;

int main () {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    if (a <= c and b > d) cout << "Yes" << endl;
    else cout << "No" << endl;
}

(注:上のコードは実際には TLE しません)

A_main.cpp A_generate.cpp A_tle.cpp ができたら、これらのうちいずれかを開いた状態でタスク一覧を開き main,tle,generateを使ってWAケースを見つける を選択します。

A_main.cppA_tle.cpp の出力が食い違うまで無限に実行するので、停止したらログを少し遡って確認します。(もしも停止しないなら Ctrl + c で止めましょう)

[INFO] 384-th attempt
[INFO] generate input...
[INFO] time: 0.003097 sec
[INFO] generate output...
[INFO] time: 0.004844 sec
[INFO] hack...
[FAILURE] WA
input:
30_43_42_43

output:
Yes

expected:
No

384 回目の実行で 30 43 42 43 を入力し、No が正解のところ Yes を出力したようです。

これで WA になるケースを見つけられたので、A_main.cpp を修正・テスト再実行・再提出して AC です。

なお、ランダム入力で見つけた撃墜ケースは test フォルダーに自動で追加されるので、テスト再実行が通ればちゃんと修正できていそうだとわかります。

正解が複数ある問題で撃墜ケースを探す

正解が複数存在する問題でランダム入力を試したい場合は次のようにします。

A_main.cpp に、出力した解が正しいかどうか判定する assert 文を追加します。
A_generate.cpp は普通の問題の場合と同じように記述します。
A_tle.cpp は使いません。

タスク一覧で main,generateを使ってREケースを見つける を選択すると、A_main.cpp が RE になるケースを探すことができます。

問題の解き方まとめ

  1. コンテスト用のフォルダーを作る
  2. A_main.cpp にコードを書く
  3. Ctrl + Shift + t でサンプルが合うか確認する
  4. Ctrl + Shift + s で提出する
  5. 2~4を繰り返す

参考文献

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?