0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL Ubuntu + VS Codeで競プロ環境を一から構築しよう

0
Last updated at Posted at 2026-09-03

コードテストを使ってる皆さん

AtCoderのコードを,ブラウザのコードテスト機能,ちょっと不便ですよね

  • コードテストが重くて結果が遅いな
  • 実行エラーを見て変数名のミスに気付いた
  • queueから要素を取り出すには,frontだっけ?topだっけ?
  • デバッグ用に表示してた配列を消し忘れてWA

こんな悩みを抱えていませんか?
そんな悩みを全て解決するためにローカル環境にAtCoderの実行環境を作りましょう!!

目次

前提
環境構築
あると便利な設定
Special Thanks
終わりに

前提

この記事では,以下の環境を想定しています

  • windows 11
  • Ubuntu
  • VS Code

また,以下のような読者を想定します

  • Ubuntuターミナルの簡単なコマンドがわかる(cd , mkdir ...)
  • VS Codeの基本的な操作が出来る

環境構築

1. WSL UbuntuにC++開発環境を導入する

Ubuntu環境でC++を扱えるようにするため以下の3つをインストールします

  • build-essential:C/C++のビルド環境
  • gdb:デバッグ
  • git:AtCoder Libraryの導入

Ubuntuターミナルを起動して,以下のコマンドを実行します

sudo apt update
sudo apt install -y build-essential gdb git

インストールが正常に完了したら,確認のためバージョンを確認してください

g++ --version
gdb --version
git --version

2. 競プロ用のディレクトリを構築する

競プロのプログラムを管理するためのディレクトリを作ります.
ディレクトリの構成はこの記事に必ずしも従う必要はありませんが,ディレクトリの知識に自信がない場合は記事の構成を推奨します.
user直下にディレクトリを配置します.

ディレクトリ構成
~/projects/kyopro/
├── .vscode/   # VS Code の設定
├── abc/       # ABC の問題
└── test/      # 環境構築の動作確認
ディレクトリを作成するターミナルコマンド
mkdir -p ~/projects/kyopro/{.vscode,abc,test}

3. AtCoder Libraryの導入

AtCoder Libraryとは,AtCoderでよく使うアルゴリズムをまとめたライブラリです.
あると便利なので入れておきましょう

user直下にlibフォルダを作り,GithubからAtCoder Libraryをダウンロードします
配置先は~/lib/ac-library-master

AtCoder Libraryをダウンロードするターミナルコマンド
mkdir -p ~/lib
cd ~/lib
git clone https://github.com/atcoder/ac-library.git ac-library-master

ダウンロードが完了したら,実際にAtCoder Libraryが使えるかテストしましょう
2.で作ったtestディレクトリに新たに'test1.cpp'ファイルを作り,以下のコードを貼り付けてください.

test1.cpp
#include <bits/stdc++.h>
#include <atcoder/dsu>
using namespace std;
using namespace atcoder;

int main() {
    dsu uf(3);
    uf.merge(0, 1);

    cout << uf.same(0, 1) << '\n';
    cout << uf.same(0, 2) << '\n';
}

ファイルが完成したら,実際に実行してみましょう.

Ubuntuターミナルで以下のコマンドを実行してみてください.

test1を実行するコマンド
cd ~/projects/kyopro/test
g++ -std=gnu++23 test1.cpp -I ~/lib/ac-library-master -o test1
./test1
実行結果
1
0

このように表示されれば,成功です.

4. VS CodeとWSLを連携する

VS Codeの拡張機能のタブを開いて,

  • Microsoft C/C++
  • Microsoft WSL

この2つをインストールしてください.

インストール後,Ubuntuターミナルで,

cd ~/projects/kyopro
code .

を実行して VS Codeが起動するはずです.
起動したVS Codeの左下に青枠で,WSL Ubuntuと表示されていれば成功です.
スクリーンショット 2026-09-01 160329.png

青枠が表示されている状態で,もう一度拡張機能のタブを開き,Microsoft C/C++
Install in WSL: Ubuntu」と表示されている場合は,追加でインストールしておいてください.

5. VS CodeのC++ビルド環境を構築する

.vscodeの設定を作成します.
.vscodeの直下に,c_cpp_properties.jsonlaunch.jsontasks.jsonの3つのjsonファイルを作ります.

ディレクトリ構成
~/projects/kyopro/.vscode
├── c_cpp_properties.json # C/C++拡張の解析・補完設定
├── launch.json           # デバッグ実行する設定
└── tasks.json            # C++をビルドする設定

作成したら各jsonファイルに以下のjsonファイルの内容を貼り付けてください
!!注意!!
json内のパスで(User)となっている部分は,自身のWSLの名前に変更してください!!
!!注意終了!!

c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/home/(User)/lib/ac-library-master"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/g++",
            "cStandard": "c17",
            "cppStandard": "gnu++23",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}
launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C++ Debug in WSL",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "/usr/bin/gdb",
            "preLaunchTask": "C/C++: g++ build active file",
            "internalConsoleOptions": "neverOpen"
        }
    ]
}
tasks.json
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-std=gnu++23",
                "-g",
                "-DLOCAL",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-I",
                "/home/(User)/lib/ac-library-master"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

全て内容を変更して,保存したら,実際に機能するか試してみましょう.

VS Code設定の機能テスト

まずctrl + shift + Pから,reload Windowを選択します.
その後,test1.cppを選択した状態でctrl + shift + Bを試してください.
ターミナル上に「ビルドが正常に完了しました。」と表示されれば,tasks.jsonは正常に機能しています.
次に,test1.cppを選択した状態で,F5キーを押してみてください.
デバッグが始まり,下部のターミナルに「1,0」が表示されれば,launch.jsonも正常に機能しています.
ついでに,標準入力にも対応しているか確認しておきましょう.
testディレクトリに新たにtest2.cppを作り,以下のコードをコピペしてください.

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

int main() {
    int n;
    cin >> n;
    cout << n * 2 << '\n';
}

F5のデバッグで起動して,VS Code下部ターミナルに,10と入力して,'20'と出力されたら成功です.

6. VS CodeのAI機能をオフにする

VS Codeでは,デフォルトでAIによるコード補間や,提案機能が備わっています.
公式ルールにも明言されている通り,開催中のABCコンテストでは,翻訳用途を除き,生成AIの利用を原則禁止しています.

そのため,開催中のコンテストをローカル環境のVS Codeで解く場合にはAI機能をオフにする必要があります.

.vscodeに新たにsettings.jsonを作成し,以下の内容を貼り付けてください.

settings.json
{
    "chat.disableAIFeatures": true
}

これにより,kyoproワークスペースでCopilotなどのAI機能をオフに出来ます.

あると便利な設定

これまでの内容で,実際に利用できる競プロのローカル環境は構築出来ました.
ここからは,私が実際に利用していく中で,追加した設定を紹介します.
既に環境自体は完成しているので,必要に応じて参考にしてみてください.

コンパイルを簡単に

現在構築した環境では,ターミナルからコンパイルするために,

g++ -std=gnu++23 test.cpp -I ~/lib/ac-library-master -o test

このように書く必要があります.
これを毎回書くのは面倒ですよね.

Ubuntu/home/(User)直下にある.bashrcファイルを編集します.
.bashrcを開いて,末尾に以下の内容を追加してください.
注意
ここでも,(User)を自分のWSLのユーザ名に変更してください!!

.bashrc
...
# AtCoder Library
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/home/(User)/lib/ac-library-master

# C++23 compile command
alias gpp='g++ -std=gnu++23'

# release stack limit
ulimit -s unlimited

内容は,
export ...-I ~/lib/ac-library-masterを,
alias ...は,-std=gnu++23を省略するためのものです.
最後のulimit ...は,コンパイルとは関係ないのですが,再帰の深い問題などを解くときに,スタック上限を回避するためのものです.ついでに変更しておきましょう.
変更を保存したら,ターミナル上で,

source ~/.bashrc

を実行することで,.bashrcの変更を適用できます.
変更が正常にできていれば,以降は以下のコマンドでコンパイルができます.

gpp test.cpp -o test

テンプレートのcppファイルを使おう

ある程度競プロをやっている方は,テンプレートのcppファイルをベースにして,問題を解いている方も多いと思います.
そうでない方でも,コンテストごとにディレクトリを作って,問題ファイルを作るのは面倒.
そこで,独自コマンドを追加して快適にしましょう!

先ほどの.bashrcファイルの末尾に,さらに以下の内容を貼り付けてください.

.bashrc
mkabc() {
    local contest="$1"
    shift

    local dir="$HOME/projects/kyopro/abc/abc${contest}"
    local template="$HOME/projects/kyopro/template.cpp"

    mkdir -p "$dir"

    if [ "$#" -gt 0 ]; then
        for problem in "$@"; do
            cp --update=none "$template" "$dir/${contest}${problem}.cpp"
        done
    else
        for problem in a b c d e f g; do
            cp --update=none "$template" "$dir/${contest}${problem}.cpp"
        done
    fi
}

変更後は先ほど同様,以下のコマンドを実行して変更を反映します.

source ~/.bashrc

.bashrcの変更が出来たら,次はテンプレート用のcppファイルを作りましょう.
~/projects/kyopro直下に新たにtemplate.cppファイルを作成してください.
作成したファイルの内容は,各自のテンプレートコードにしてください.

これで,ターミナル上でmkabcコマンドが使えるようになります.
mkabcコマンドはターミナル上で,以下のように使えます.

mkabcコマンド
mkabc 440
mkabc 440 c d e

mkabc 440では,指定されたコンテスト番号のファイルを作ってくれます.

ディレクトリ
abc/abc440/
├── 440a.cpp
├── 440b.cpp
├── 440c.cpp
├── 440d.cpp
├── 440e.cpp
├── 440f.cpp
└── 440g.cpp

各ファイルの中身は,template.cppのコピーとなっており,また,既に作られているファイルを上書きすることもないです.
mkabc 440 c d eでは,指定したコンテスト番号の,指定した問題のファイルだけを作ってくれます.こちらも既に存在するファイルを上書きすることはないです.

(筆者はABCしか挑んでいないのでABC用のコマンドしかありません.ARCやAGC用は別途作ってください.)

デバッグマクロを追加しよう

記事の冒頭で,**デバッグ用に表示してた配列を消し忘れてWA**というミスを例に挙げましたが,これを解決するために,template.cppに以下のテンプレを追加しました.

#ifdef LOCAL
#define debug(x) cerr << #x << " = " << (x) << '\n'

#define debugVec(v) do { \
    cerr << #v << " = ["; \
    for(int i = 0; i < (int)(v).size(); i++){ \
        if(i) cerr << ", "; \
        cerr << (v)[i]; \
    } \
    cerr << "]\n"; \
} while(0)

#else
#define debug(x)
#define debugVec(v)
#endif

debug(x)は,変数を入力することで,その変数の内容を表示できます.
debugVec(x)は,vector型の変数の中身を表示できます.
これらは,コンパイル時にLOCALが定義されている時のみ,使えるマクロです.
先ほどのtasks.jsonでは"-DLOCAL"を指定しているため,VS Codeからビルドした場合や,F5でデバッグした場合には表示されます.
一方で,先ほど作ったgppコマンドでは,debug(x)debugVec(x)は表示されません.
また,AtCoderでデバッグ関数を書いたまま提出しても,無視されるため,「デバッグ用の表示を消し忘れた」というミスを回避できます.

Special Thanks

この記事を書くにあたって,下記の動画を参考にさせていただきました.
投稿者の方に深く感謝します.
参考にした動画

終わりに

ここまで記事を読んでくださりありがとうございます.
質問,感想等ありましたら,コメントまでお願いします.

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?