JavaでのAtCoder環境構築

## はじめに
RUNTEQで学んでいるsekiと申します！今回はAtCoderでJavaでの自動化環境の構築を自分なりにまとめてみたので公開したいと思います。

## ゴール
VSCode上に、AtCoder用のJava環境を作成し、AtCoderの問題のダウンロード・テスト・提出をローカル上で完結できるようにする。

## 対象読書
* Javaに興味を持っている方
* AtCoderでJavaを使用していて、ブラウザでの操作に面倒くささを感じている方

## 参考記事
以下、参考にさせていただいた記事です。
* JavaでのAtCoderの拡張機能の設定
https://zenn.dev/polysan/articles/0dd6de3d18ff29#%E3%83%86%E3%82%B9%E3%83%88
* AtCoderの拡張機能を便利に使う設定
https://qiita.com/rakudalms/items/c261a6c0cfd588e96abf
* Javaの環境構築
https://qiita.com/kobari_h/items/4b39f4a9772cc4ee2b0a






## 目次
1.JDKのインストーラをダウンロード
2.フォルダの作成
3.AtCoderの拡張機能のインストール
4.TIPS

## 1.JDKのインストーラーのダウンロード
こちらからJDKをインストールしてください。
※私の場合は、ARM64 DMG Installerで、インストールしました。MacAir2です。
https://www.oracle.com/java/technologies/downloads/?er=221886#jdk23-mac

Javaのバージョンを確認
```
java -version
```
以下のバージョンが出ていることを確認
```
java version "23.0.1" 2024-10-15
Java(TM) SE Runtime Environment (build 23.0.1+11-39)
Java HotSpot(TM) 64-Bit Server VM (build 23.0.1+11-39, mixed mode, sharing)
```

## 2.フォルダの作成・拡張機能のインストール

### フォルダの作成
ターミナルで以下のコマンドを実行して、フォルダを作成
VSCodeを開く
```
mkdir atCoder
cd atCoder
. vsCode
```

### Javaのインストール確認
```
touch Main.java
```
`Main.java`を作成し、以下のコードを記述
```
public class Main {
    public static void main(String[] args) {
 
    System.out.println("Hello, world!")
}
```
以下のコマンドを打ち、「Hello, world!」が出れば成功です。
```
java Main.java
```

### 以下の拡張機能をインストール
Javaの便利な機能がまとめて入っているお得な機能です
https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733438/b6e12359-68ba-50b0-f5e4-1dbe34ff5191.png)


## 3.atCoderの拡張機能のインストール
次に、atCoderの拡張の`atcoder-cli` と `online-judge-tools` をインストールしていきます
以下、公式記事です。
http://tatamo.81.la/blog/2018/12/07/atcoder-cli-installation-guide/

### ツールのインストールの確認
以下のコマンドがない場合は、適宜インストールしてください
```
# Homebrew
$ brew -v
Homebrew 4.4.8

# npm
$ npm -v
10.8.1

# pip3
$ pip3 -V
pip 22.0.4 from /usr/local/lib/python3.9/site-packages/pip (python 3.9)
```

### ツールのインストール
```
# atcoder-cli インストール
$ npm install -g atcoder-cli
# インストール確認
$ acc -v
2.2.0

# online-judge-tools インストール
$ pip3 install online-judge-tools
# インストール確認
$ oj --version
online-judge-tools 11.5.1 (+ online-judge-api-client 10.10.1)
```

### 初期設定
コマンドライン上でAtCoderにログインをします
ユーザー名とパスワードを聞かれるので、記載してください。
```
$ acc login
```


## 4.TIPS
上記のことを行えば、AtCoderの拡張機能はインストール完了です。
ここから先はAtCoderを便利にするための機能です。

### コンテストディレクトリ作成時に問題をすべてダウンロード
`aｃｃ new コンテストID` でコンテスト用のディレクトリを作成した際にどの問題をダウンロードするか選択する
1問でも全問でもダウンロードは一瞬なので全問ダウンロードするようにします
下記を実行
```
acc config default-task-choice all
```
これでatcoder-cliの設定が毎回全問ダウンロードの設定に書きかわりました

### テンプレートの作成
毎回提出用のファイルを作成するのは面倒になります。最低でもこれはどんな人でも打つと思います。
```
import java.util.Scanner;

/**
 * AtCoder用クラス
 */
public class Main {
    public static void main(String[] args) {
 
    Scanner sc = new Scanner(System.in);
    
}

```
こちらをテンプレート化して、自動作成します。
```
# atcoder-cli設定ディレクトリに移動
cd `acc config-dir`

# テンプレート作成
mkdir java && cd java
touch template.json
touch Main.java
```
以下を記載
```
vi template.json
```
```
{
  "task":{
    "program": ["Main.java"],
    "submit": "Main.java",
	"testdir": "test"
  }
}
```
次にこれをテンプレート化します。
```
acc config default-template java
```

### できているかの確認
https://atcoder.jp/contests/abc380
こちらのコンテストで、確認をします。
まず、問題をローカルに落とします。
```
acc new abc380
```

問題の箇所に移動します。
```
cd abc380
cd a
```
aフォルダにあるMain.javaを適当に記載します。完了したら、以下のコマンドを打ちます。
```
oj t -c "java Main.java" -d ./test/  
```
テスト結果が流れてくると思います。
```
[INFO] slowest: 0.194286 sec  (for sample-1)
[FAILURE] test failed: 0 AC / 4 cases
```
最後に、提出をします
```
acc submit Main.java -- -l 5005
```
途中、以下のように聞かれるので、`abca`を入力します。
```
Are you sure? Please type "abca" 
```
最後に、AtCoderの提出の画面が出れば、成功です。