feature image

2026年3月22日 | ブログ記事

10分でできる競プロ環境構築

この記事は新歓ブログリレー2026 17日目の記事です。

はじめに

どうも、アルゴリズム班のComaviusです。環境構築のオタクとしてC++向け競プロ環境を簡単に作る方法を紹介します。

前提

Windowsを想定していますが、MacやLinuxでも動くはずです。vscodeをインストールしておいてください。

インストール

1. WSLのインストール

MacやLinuxをお使いの方、WindowsでWSLをインストール済みの方は飛ばしてください。

PowerShellを開き、次のコマンドを実行します。

wsl --install

その後は指示に従ってインストールを完了させてください。どこかでWindowsの再起動が必要になるはずです。

2. Nixのインストール

Nixを入れます。ターミナル(windowsの場合はWSL)を開き、次のコマンドを実行してください。

curl -fsSL https://install.determinate.systems/nix | sh -s -- install

試しに、ターミナルを開きなおしてから次のコマンドを実行してみてください。

nix run nixpkgs#hello
# Hello, world! と表示されれば成功です。

3. 環境のセットアップ

ターミナルで、作業用のディレクトリを作成してvscodeで開きます。

mkdir -p ~/kyopuro
code ~/kyopuro

vscodeの画面から、flake.nixという名前のファイルを作成し、次の内容を張り付けて保存します。

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
    flake-parts.url = "github:hercules-ci/flake-parts";
    systems.url = "github:nix-systems/default";
  };

  outputs =
    inputs@{
      flake-parts,
      ...
    }:
    flake-parts.lib.mkFlake { inherit inputs; } {
      systems = import inputs.systems;

      perSystem =
        { pkgs, ... }:
        let
          inherit (pkgs) lib;
          # 設定項目ここから
          problems = {
            "default" = ./main.cpp;
            "a" = ./a.cpp;
            "b" = ./b.cpp;
            "c" = ./c.cpp;
            "d" = ./d.cpp;
            "e" = ./e.cpp;
            "f" = ./f.cpp;
            "g" = ./g.cpp;
            "h" = ./h.cpp;
          };
          buildInputs = with pkgs; [
            ac-library.dev
            boost.dev
          ];
          nativeBuildInputs = with pkgs; [
            gcc
          ];
          devInputs = with pkgs; [
            clang-tools
          ];
          # 設定項目ここまで
        in
        {
          devShells.default = pkgs.mkShell {
            buildInputs = buildInputs ++ nativeBuildInputs ++ devInputs;
          };
          packages = lib.mapAttrs (
            _problem: srcFile:
            lib.pipe srcFile [
              builtins.readFile
              (pkgs.writeTextDir "main.cpp")
              (
                src:
                pkgs.stdenv.mkDerivation rec {
                  inherit buildInputs nativeBuildInputs;
                  inherit src;
                  pname = "solution";
                  version = "1.0.0";

                  buildPhase = ''
                    g++ -O2 -std=c++23 main.cpp -o ${pname}
                  '';

                  installPhase = ''
                    mkdir -p $out/bin
                    cp ${pname} $out/bin/${pname}
                  '';
                }
              )
            ]
          ) problems;
          formatter = pkgs.nixfmt-rfc-style;
        };
    };
}

main.cppという名前のファイルを作成し、次の内容を張り付けて保存します。

#include <bits/stdc++.h>
int main() {
    std::cout << "Hello, kyopuro!!" << std::endl;
}

今度はvscodeからターミナルを開き(Ctrl + Shift + P -> Terminal: Create New Terminal)、次のコマンドを実行してください。

nix run

1回目とそれ以降で少し挙動が違いますが、どちらも最後にHello, kyopuro!!と表示されれば成功です。

nix-run-with-lock-generation

4. VSCodeの拡張機能の導入

VSCodeの拡張機能画面を開き(Ctrl + Shift + P -> Extensions: Install Extensions)、次のものをインストールしてください。

次に、Nix Environment Selectorを開き(Ctrl + Shift + P -> Nix Environment Selector: Select Environment)、flake.nixを選択してください。VSCodeの左下にReload Requiredと表示されたら、VSCodeを再読み込みしてください(Ctrl + Shift + P -> Developer: Reload Window)。

main.cppの2行目のmainのところにカーソルを合わせたとき、下のような表示が出れば成功です。

vscode-hover-hint-with-clangd

5. トラブルシューティング

もし動かない場合、flake.lockという名前のファイルを開いて(ない場合は作って)、次の内容を張り付けて保存してみてください。

flake.lockの内容: 長いので折りたたんでいます
{
  "nodes": {
    "flake-parts": {
      "inputs": {
        "nixpkgs-lib": "nixpkgs-lib"
      },
      "locked": {
        "lastModified": 1772408722,
        "narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
        "owner": "hercules-ci",
        "repo": "flake-parts",
        "rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
        "type": "github"
      },
      "original": {
        "owner": "hercules-ci",
        "repo": "flake-parts",
        "type": "github"
      }
    },
    "nixpkgs": {
      "locked": {
        "lastModified": 1773964973,
        "narHash": "sha256-NV/J+tTER0P5iJhUDL/8HO5MDjDceLQPRUYgdmy5wXw=",
        "owner": "NixOS",
        "repo": "nixpkgs",
        "rev": "812b3986fd1568f7a858f97fcf425ad996ba7d25",
        "type": "github"
      },
      "original": {
        "owner": "NixOS",
        "ref": "nixos-25.11",
        "repo": "nixpkgs",
        "type": "github"
      }
    },
    "nixpkgs-lib": {
      "locked": {
        "lastModified": 1772328832,
        "narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
        "owner": "nix-community",
        "repo": "nixpkgs.lib",
        "rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
        "type": "github"
      },
      "original": {
        "owner": "nix-community",
        "repo": "nixpkgs.lib",
        "type": "github"
      }
    },
    "root": {
      "inputs": {
        "flake-parts": "flake-parts",
        "nixpkgs": "nixpkgs",
        "systems": "systems"
      }
    },
    "systems": {
      "locked": {
        "lastModified": 1681028828,
        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
        "owner": "nix-systems",
        "repo": "default",
        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
        "type": "github"
      },
      "original": {
        "owner": "nix-systems",
        "repo": "default",
        "type": "github"
      }
    }
  },
  "root": "root",
  "version": 7
}

他の機能

デフォルトで、a.cppからh.cppまでをnix run .#aからnix run .#hまでのコマンドでビルドして実行できるようになっています。flake.nixproblemsのところにファイルを追加すれば、同様のことができます。ライブラリを追加したいときは、https://search.nixos.org/packages で検索してbuildInputsのところに追加してください。

終わりに

これが最速だと思います。コンテスト中に環境構築を始めても間に合うのではないでしょうか?


明日は@genmiraさんの『初心者向け簡単料理レシピ3選』です。お楽しみに!

comavius icon
この記事を書いた人
comavius

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2025年9月15日
traPでの一年半を振り返る〜全班所属の体験記(?)〜
gurukun41 icon gurukun41
2023年9月26日
traP コンペ 2023 夏 sponsored by ピクシブ株式会社 運営後記
abap34 icon abap34
2023年7月13日
アルゴリズム班はやとき王選手権「競(けい)プロ」を開催しました!
abap34 icon abap34
2022年10月11日
アルゴリズム班にKaggle部を設立し、初心者向けデータ分析体験会を開催しました!
abap34 icon abap34
2021年4月18日
ベズー係数とN項の拡張ユークリッドの互除法
0214sh7 icon 0214sh7
2023年7月5日
Kaggle部で機械学習講習会を開催しました!
abap34 icon abap34
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記