LoginSignup
2
1

More than 1 year has passed since last update.

# AtCoder 向け C++ & Docker 環境構築

Last updated at Posted at 2022-03-07

Pythonを使ってAtCoderを最近始めましたが、TLEにあまりにも悩まされたので、C++で挑むことにしました。そのときのDockerの環境構築方法について備忘録として残しておきます。

環境構築の手順

筆者は以下の環境にて構築しました

  • MacOS Big Sur 11.6.1
  • Apple MacMini 2018 Intel Core i3

また、Docker for Desktopはインストール済みと言う前提で進めます。

1. Dockerfileの作成

Dockerfileの中身は以下の通りです。

FROM ubuntu:latest

RUN apt update && \
    apt upgrade -y && \
    apt install -y build-essential

RUN mkdir /work
WORKDIR /work

これを以下のようなディレクトリに配置します。Dockerfileがある階層にworkというフォルダを作成します。

.
┣━ Dockerfile
┗━ work/

2. イメージをビルドしてコンテナ作成

上記のDockerfileを用いて環境構築を行います。
以下のコマンドを使ってコンテナ作成を行っていきます。
パスはDockerfileがある階層で行ってください。

  • イメージビルド
$ docker image build . -t イメージ名

イメージ名は任意です。

  • コンテナ立ち上げ
docker run -v "$(pwd)"/work:/work -it イメージ名  --name コンテナ名

コンテナ名は任意です。イメージはビルドしたときに指定したイメージ名を入力してください。

※以下はVSCodeの設定です。

3. C++ファイルの実行ショートカットコマンドの設定

ショートカットを使って実行ができるように設定を行います。

3-1. 拡張機能のインストール

以下の拡張機能をインストールしてください。

3-2. ショートカットの設定

以下の画像のように「Code > 基本設定 > キーボードショートカット」を選択します。
1.png
右上にある「キーボードショートカットを開く(JSON)」をクリックし、keybindings.jsonを開きます。
2.png
そしてkeybindings.jsonに以下のようにショートカットの設定を入力します。
例としてCommand + N によって実行できるようにしていますが、組み合わせは任意です。

[
  {
    "key": "cmd+n",
    "command": "code-runner.run"
  }
]
3-3. ショートカットの動作設定

VSCodeの設定を開き、右上にある「設定(JSON)を開く」をクリックし、setting.jsonを開きます。
3.png
そしてsetting.jsonに以下のコードを追加します。

{
  "clang.executable": "clang++",
  "code-runner.runInTerminal": true,
  "clang.cxxflags": [ "-std=c++14"],
  "code-runner.executorMap": {
    "cpp": "cd $dir && g++ -O2 -std=c++14 $fileName && ./a.out",
  }
}
3-4. Dockerコンテナのリモート接続

以下の拡張機能をインストールしてください。

インストールできれば、以下の画面の「リモートエクスプローラ」を開きます。
先程作成したコンテナの「Attach to Container」をクリックします。
4.png
そして、ディレクトリの選択を求められるので、/work/を選択します。
すると、コンテナの中に入った新規ウィンドウが開きます。
5.png
ここに.cppファイルを適当に作成し、そしてコマンドを入力して試しに実行してみます。
6.png
ターミナルにショートカットが入力され、正しく動作すれば設定完了です。

まとめ

本記事ではC++のコンテナ作成と実行のショートカット設定を行いました。
上記の方法で何かエラーが起きたなどがあればご連絡いただけると幸いです。
以上になります。

2
1
1

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
1