My AtCoder環境

## はじめに

この記事では私がAtCoderをやる上で使用している環境を提示いたします。MacBookProとWindowsのデスクトップPCを所持しているため，どちらのPCであっても同じようにできるようにしています。

Editorは[cursor](https://cursor.sh)を使用しています。こちらのEditorはVSCodeフォークなので，VSCodeでも同様にできるかと思います。また，コンテナにアタッチできるEditor/IDEであれば他のものでも私と同様にできるかと思います。

また，使用言語はC++とPython3，PyPy3を想定しています。RustやNimなどの言語を使用される方は適宜変更を加えていただけると良いかと思います。

## 結論

基本はDockerコンテナにattachして行なってます。Dockerfileは次のとおりです。コピーしていただければ使用できるかと思います。

```Dockerfile
FROM ubuntu:latest as dev

CMD ["/bin/bash", "-b"]

ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Tokyo

RUN apt-get update && apt-get upgrade -y && \
	apt-get autoremove -y && \
	apt-get clean

RUN apt install -y build-essential procps curl file git time tzdata tree vim software-properties-common

RUN add-apt-repository ppa:ubuntu-toolchain-r/ppa -y
RUN apt-get update

RUN add-apt-repository ppa:deadsnakes/ppa -y
RUN apt-get update

RUN apt install -y gcc-12 g++-12 clang python3.11 python3-pip
RUN apt install -y pypy3 nodejs npm

RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 30 && \
	update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 30 && \
	update-alternatives --install /usr/bin/python python /usr/bin/python3.11 30 && \
	update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 30 && \
	update-alternatives --install /usr/bin/pypy pypy /usr/bin/pypy3 30 && \
	update-alternatives --install /usr/bin/node node /usr/bin/nodejs 30

RUN pip install -U pip && \
	pip install numpy scipy scikit-learn numba networkx

RUN git clone https://github.com/atcoder/ac-library.git /lib/ac-library
ENV CPLUS_INCLUDE_PATH /lib/ac-library

RUN pip install git+https://github.com/hinamimi/ac-library-python && \
	pip install git+https://github.com/hinamimi/python-sortedcontainers

RUN pip install online-judge-tools
RUN npm install -g atcoder-cli

COPY . /root/src

WORKDIR /root/src
```

## 詳細解説

先頭から数行は省略いたします。

```Dockerfile
RUN add-apt-repository ppa:ubuntu-toolchain-r/ppa -y
RUN apt-get update

RUN add-apt-repository ppa:deadsnakes/ppa -y
RUN apt-get update

RUN apt install -y gcc-12 g++-12 clang python3.11 python3-pip
RUN apt install -y pypy3 nodejs npm
```

C++とPythonをaptでインストールするためapt-get-repositoryに追加しています。その後，C++とPythonをインストールしています。また，後述のatcoder-cliをインストールするためにnodejsとnpmをインストールしています。atcoder-cliを使用しない場合は省略しても構わないかと思います。

```Dockerfile
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 30 && \
	update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 30 && \
	update-alternatives --install /usr/bin/python python /usr/bin/python3.11 30 && \
	update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 30 && \
	update-alternatives --install /usr/bin/pypy pypy /usr/bin/pypy3 30 && \
	update-alternatives --install /usr/bin/node node /usr/bin/nodejs 30
```

インストールされたgcc, g++, Python, pip, PyPy, nodeの優先度を30に設定しています。先ほどインストールしたC++やPythonを使用する際にそちらを優先的に使用するよう変更しています。

```Dockerfile
RUN pip install -U pip && \
	pip install numpy scipy scikit-learn numba networkx

RUN git clone https://github.com/atcoder/ac-library.git /lib/ac-library
ENV CPLUS_INCLUDE_PATH /lib/ac-library

RUN pip install git+https://github.com/hinamimi/ac-library-python && \
	pip install git+https://github.com/hinamimi/python-sortedcontainers
 ```
 AtCoderで使用できるライブラリをインストールしています。ACLの詳細については[こちら](https://atcoder.github.io/ac-library/document_ja/)をご覧いただくと良いかと思います。

```Dockerfile
RUN pip install online-judge-tools
RUN npm install -g atcoder-cli
```
AtCoderをやる上で便利なツールになります。詳細は公式GitHubのREADMEをご覧いただくと良いかと思います。
[online-judge-tools](https://github.com/online-judge-tools/oj)
[atcoder-cli](https://github.com/Tatamo/atcoder-cli)

## 終わりに
他にもTaskfileやsettings.jsonなどもありますが，単純に環境を作ると言う観点ですと，こちらで十分かと思います。参考にしていただけると嬉しいです。