0
0

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 C++環境構築が5分で終わる最強テンプレート

Last updated at Posted at 2025-11-19

概要

こんにちは👋環境構築が好きな6年目のWebアプリ開発をしている中堅エンジニアです。

最近AtCoderにハマっています。学んだアルゴリズムを使用して問題を解いて、テストケースをすべてACになった瞬間はとても気持ちよいです!

レートを高めるために現在進行形で精進しています。


AtCoderを始めるにあたり、もちろん環境構築は必要です。

ただ、初心者には環境構築をするだけでもとても敷居が高いです。

  • どうやって環境構築するの?
  • どのバージョンのコンパイラを使えばいいの?
  • リンターやフォーマッタの設定方法がわからない
  • Windows/Mac/Linuxで環境が違うと困る

補足:リンターとフォーマッタとは?

  • リンター:コードを書いているときに、エラーや警告を事前に教えてくれる機能です。例えば、型の不一致や未使用の変数などを実行前に発見できます。
  • フォーマッタ:コードの見た目を自動的に整えてくれる機能です。保存時に自動的にインデントやスペースを調整し、読みやすいコードに整形してくれます。

このような悩みを解決するために、すぐに使える開発環境テンプレートを作成しました。

この記事では、AtCoderでC++を使った競技プログラミングを快適に行うための開発環境テンプレートを紹介します。

このテンプレートは、リンター、フォーマッタ、デバッグ機能を利用できる環境をDockerという同じ環境を再現できるツールで環境を統一することで、ケアレスミスを大幅に減らし、コードの品質を向上させることができます。

補足:Dockerとは?
Dockerは、開発環境を「コンテナ」という箱に入れて、どこでも同じ環境を再現できるようにする技術です。

主な特徴

✅ コンパイル前にエラーや警告を表示するリンター機能
✅ 保存時に自動的にコードを整形するフォーマッタ機能
✅ ブレークポイントで変数を確認できるデバッグ機能
✅ Windows/Mac/Linuxで同じ環境を再現できるDocker対応
✅ AtCoder Library (ACL)や便利なツール(atcoder-cli、atcs)が含まれている

対象

あまりプログラミング言語のこと知らないけど、競プロってかっこいいから始めたい!けどどう環境構築したらいいのと思っている方。

とりあえず環境構築して問題を解いたけど、ケアレスミスたくさん…
どうやらリントやフォーマッタで見通しがよくなるみたいだけどセットアップの方法がよくわからんという方

もうテンプレートでいいから早く始めれない?と思っている方

GitHubページ

なぜこのテンプレートがいいか

競プロを始めるとき、多くの方が「とりあえず環境構築して問題を解いたけど、ケアレスミスたくさん…」という経験をします。

例えば、こんな経験はありませんか?

  • 急いで書いたせいで、改行せずに1行で書いて、後から見直すのが大変だった
  • 試行錯誤の中で、途中で使わなくなる変数が出てきた
  • 間違った型を使っていることに実行してから気づいた

0.jpg

このテンプレートは、そんな悩みを解決するために作られました。

1. 間違いを事前に教えてくれる「リンター」機能

リンターとは、コードを書いているときに「ここ、間違ってるよ!」と教えてくれる機能です。

例えば、こんなことができます:

  • 型の不一致(int型の変数に文字列を入れようとしている)
  • 未使用の変数(宣言したけど使ってない変数)
  • コンパイルエラーになる箇所

通常、こういった間違いは実行してみないと分かりません。でも、リンターがあれば実行する前からエディタ上で波線で警告してくれます。

このテンプレートでは、MicrosoftのC/C++拡張機能よりも高機能なclangdというリンターを使用しています。より正確で詳細な警告を表示してくれます。

1.jpg

(上記はclangdですべての警告を表示した場合です。実際には競プロ用に合わせた警告のみ表示するように最適化しています。)

2. コードを自動で綺麗にしてくれる「フォーマッタ」機能

フォーマッタとは、コードの見た目を自動で整えてくれる機能です。

例えば、こんなコードを書いたとします:

int main() {
  for(int i=1;i<=10;i++){if(i%2==0){cout<<i<<" は偶数です"<<endl;}else{cout<<i<<" は奇数です"<<endl;}}
}

保存すると、自動的にこんな風に整形されます:

int main() {
  for (int i = 1; i <= 10; i++) {
    if (i % 2 == 0) {
      cout << i << " は偶数です" << endl;
    } else {
      cout << i << " は奇数です" << endl;
    }
  }
}

人が読みやすい形に自動でフォーマットしてくれます。

ただし、競プロでは、型の省略や便利なマクロや関数などの事前に用意したテンプレートをフォーマットしたくないという場合もあります。

typedef long long int ll;
typedef long double ld;

#define il inline
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define repn(i, num, n) for (int i = num; i < n; i++)

void yes(bool a){cout<<(a?"yes":"no")<<endl;}
void YES(bool a){cout<<(a?"YES":"NO")<<endl;}
void Yes(bool a){cout<<(a?"Yes":"No")<<endl;}
void possible(bool a){ cout<<(a?"possible":"impossible")<<endl; }
void Possible(bool a){ cout<<(a?"Possible":"Impossible")<<endl; }
void POSSIBLE(bool a){ cout<<(a?"POSSIBLE":"IMPOSSIBLE")<<endl; }
void fast_io() {std::ios::sync_with_stdio(false);std::cin.tie(NULL);}

// ↑はフォーマットしてほしくない

このテンプレートでは、// clang-format off// clang-format onで囲むことで、テンプレート部分をフォーマットから除外できるようになっています。

3. バグを見つけやすくする「デバッグ」機能

通常の実行だと、プログラムが一気に実行されて結果だけが表示されます。

しかし、デバッグ機能を使えば、プログラムの途中で止めて「この時点での変数の値は何か?」を確認できます。

使い方:

  1. 行番号の左側をクリックしてブレークポイント(止めたい場所)を設定
  2. F5キーを押す
  3. ブレークポイントで止まったら、変数にマウスを乗せると値が表示されます

7.jpg

4. 環境の違いを気にしなくて良い「Docker」機能

Dockerとは、開発環境を「コンテナ」という箱に入れて、どこでも同じ環境を再現できるようにする技術です。

このテンプレートはDockerを使っているので:

  • WindowsでもMacでもLinuxでも同じ環境が構築できます
  • 既存のツールやアプリと競合しません(コンテナ内で完結するため)
  • 一度設定すれば、誰でも同じ環境を再現できます

「WindowsPCで関係のないツールをインストールしていない競プロ専用のPCであること」なんて前提条件は不要です。

本テンプレートだと下記画像のような、「コンテナ」の中に各種ツール(コンパイラー、デバッグツール、言語サーバ)が入っておりコンテナ内でで環境が完結しているイメージです。

5.png

VS CodeのDev Containers拡張機能を使えば、コンテナ内で直接開発できるので、通常の開発とほとんど変わりません。

詳細は「Devcontainer ってなに? 実際につかってみる」や「VScodeのDevContainerってなんぞや」を参照してください。

5. 便利なサードパーティライブラリも含まれている

このテンプレートには、競プロをより快適にするためのサードパーティライブラリも含まれています。

まとめ

このテンプレートの特徴:

リンター(clangd): コンパイル前にエラーや警告を表示
フォーマッタ(clang-format): 保存時に自動的にコードを整形
デバッグ機能(GDB): ブレークポイントで変数を確認
Docker: 環境の統一性を保証
サードパーティライブラリ: atcoder-cli、atcsなど便利なツールが含まれている

これらの機能により、「ローカルで書いてサンプル入力を実行して合ってたら提出」という基本的な流れは変わりませんが、その過程で発生するケアレスミスを大幅に減らすことができます。

環境要件

必須ソフトウェア

  • Docker Desktop (またはDocker Engine)
  • Visual Studio Code
  • Dev Containers拡張機能
    • VS Code拡張機能マーケットプレイスからインストール

4.png

上記ツールは必須です。

セットアップ

1. リポジトリのクローン

git clone https://github.com/tomyou666/atcoder-template
cd AtCoder

2. VS Codeでプロジェクトを開く

code .

3. Dev Containerで開く

  1. VS Codeのコマンドパレットを開く(Ctrl+Shift+P / Cmd+Shift+P
  2. 「Dev Containers: Reopen in Container」を選択

6.jpg

  1. 初回起動時は、Dockerイメージのビルドに数分かかります

4. 動作確認

コンテナが起動したら、動作確認をしてみましょう。

  1. test.cppというファイルを作成して、以下のサンプルコードを書きます:
#include <iostream>
using namespace std;

int main() {
    cout >> "Hello World" >> endl;
    return 0;
}
  1. Ctrl+Alt+N(Mac: Cmd+Alt+N)で実行します

  2. ターミナルに「Hello World」と表示されれば成功です!

8.jpg

プロジェクト構成

AtCoder/
├── .devcontainer/         # Dev Container設定
│   ├── Dockerfile       # Dockerイメージ定義
│   └── devcontainer.json # コンテナ設定ファイル
├── .vscode/               # VS Code設定
│   ├── settings.json     # エディタ設定
│   ├── launch.json       # デバッグ設定
│   └── tasks.json        # タスク設定
├── .clang-format          # コードフォーマット設定
├── .clangd                # clangd設定
├── template.cpp           # C++テンプレートファイル
├── test.cpp               # テスト用ファイル
├── module/                # 共通モジュール
│   └── algorithm.cpp     # アルゴリズム実装例
└── README.md              # このファイル

開発環境の詳細

インストール済みツール

コンパイラ・開発ツール

  • g++-13: GNU C++コンパイラ(C++23対応)※ 実行用
  • clang: LLVM C++コンパイラ ※ リント・補完する用
  • clangd: Language Server Protocol実装
  • gdb: デバッガー

ユーティリティ

  • zsh: Z Shell(デフォルトシェル)
  • time: 実行時間測定
  • tree: ディレクトリ構造表示
  • git: バージョン管理
  • curl: HTTPクライアント

AtCoder関連ツール

  • AtCoder Library (ACL): /lib/ac-libraryにインストール済み
  • atcoder-cli (acc): コンテスト管理ツール(npm経由)
  • atcs: このテンプレートを作成した人が作ったシンプルなAtCoder用スクレイピングツール

その他

  • nodejs / npm: JavaScript実行環境(atcoder-cli実行用)

シンボリックリンク

  • g++g++-13: デフォルトでg++-13を使用

使い方

新しい問題を解く

  1. 問題用のディレクトリを作成
mkdir abc123-a
cd abc123-a
  1. テンプレートをコピー
cp ../template.cpp main.cpp
  1. VS Codeで開いて編集

コードの実行

方法1: Code Runner拡張機能を使用(推奨)

  1. ファイルを開く
  2. Ctrl+Alt+N(Mac: Cmd+Alt+N)で実行
  3. または、右上の▶ボタンをクリック

方法2: ターミナルから実行

g++ -O2 -std=c++23 main.cpp -o main
./main

方法3: デバッグモードで実行

F5キーを押すか、デバッグパネルから「C++:Debug」を選択

ブレークポイントで止まってくれます。

テンプレートファイルについて

template.cppには、競プロでよく使う機能が含まれています:

  • 型エイリアス: ll(long long)、ld(long double)、vi(vector)、vl(vector)、vvl(2次元配列)、vb(vector)、pl(pair)など
  • マクロ:
    • rep(i, n): for (int i = 0; i < n; i++)の短縮
    • repn(i, num, n): for (int i = num; i < n; i++)の短縮
    • per(i, n): 逆順のfor文
    • all(v): v.begin(), v.end()の短縮
    • pb: push_backの短縮
    • fi, se: first, secondの短縮
    • LB(v, val), UB(v, val), BS(v, val): lower_bound、upper_bound、binary_searchの短縮
    • MINE(v), MAXE(v): min_element、max_elementの短縮
  • ユーティリティ関数:
    • yes(), YES(), Yes(): 真偽値の出力("yes"/"no"など)
    • possible(), Possible(), POSSIBLE(): 可能性の出力
    • fast_io(): 高速入出力の設定
    • cinarr(v): 配列の一括入力
    • print(...): 可変長引数での出力
    • print_ld(x, precision): 固定小数点での出力
    • printarr(v, isReverse): 配列の出力
    • addv(v, loc, val): 配列要素の追加
  • その他の便利機能:
    • _pq<T>: 最小値優先のpriority_queue
    • chmin(a, b), chmax(a, b): 最小値・最大値の更新
    • So(v), Sore(v): ソート関数
    • binary_count(a): ビットカウント

テンプレート部分は// clang-format offで囲まれているので、フォーマットされずにそのまま使えます。

AtCoder Library (ACL)の使用

AtCoder Libraryは自動的にインクルードパスに含まれています:

#include "atcoder/modint.hpp"
using mint = atcoder::modint998244353;

まとめ

このテンプレートを使うことで、競プロに集中できる環境が整います。

「ローカルで書いてサンプル入力を実行して合ってたら提出」という基本的な流れは変わりませんが、その過程で発生するケアレスミスを大幅に減らすことができます。

ぜひ、このテンプレートを使って快適な競プロライフを送ってください!

参考リンク

AtCoder関連

Dev Containers関連

ツール関連

環境構築関連

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?