# 基本的な使い方

AtCoder Next を使った競技プログラミングの基本的な流れを解説します。

![AtCoder Next Demo](../media/vhs/ja.gif)

---

## 1. 初期化

作業を行いたいルートディレクトリで、プロジェクトを初期化します。

```bash
atc init [dir]
```
- 引数 `[dir]` は省略可能です。指定した場合はそのディレクトリを作成して初期化します。
- 非インタラクティブ環境（CI等）や `--yes` オプションを指定した場合、確認プロンプトをスキップして英語・問題抽出なし・C++デフォルト設定で自動セットアップされます。

---

## 2. ログイン

AtCoder 提出等のログインが必要な機能を使う前に実行します。

```bash
atc login
```
- **ブラウザ**: Chromium系ブラウザが自動起動し、AtCoder にログインするとセッションクッキーが自動でキャプチャされ保存されます。
- **手動クッキー入力**: デベロッパーツールから取得した `REVEL_SESSION` の値を直接貼り付けてログインします。

※ ログインセッションを解除（破棄）するには以下を実行します。
```bash
atc logout
```

現在のログイン状況を確認するには以下を実行します。
```bash
atc whoami
```

---

## 3. コンテスト問題のダウンロード

```bash
atc new <contest_id> [task_label]
```
- 例: `atc new abc300`
- 対話形式のチェックリストが表示され、ダウンロードする問題を選択できます。
- `-a` または `--all` オプションを付与すると、全問題を自動でセットアップします。
- コンテスト中の問題を除き、問題文が Markdown 形式で自動抽出されてローカルに保存されます。

---

## 4. 引数の省略ルール（スマートパス解決）

`atc test` や `atc submit` などのコマンドは、カレントディレクトリの位置に応じて自動でコンテストIDや問題ラベルを推測します。

- **問題ディレクトリ内** (例: `/workspace/abc300/a`) で実行する場合:
  引数をすべて省略してテスト・提出を実行できます。
  ```bash
  atc test
  atc submit
  ```
- **コンテストディレクトリ内** (例: `/workspace/abc300`) で実行する場合:
  問題ラベル（`a`, `b`など）のみを指定して実行できます。
  ```bash
  atc test a
  atc submit a
  ```
- **その他のディレクトリ**で実行する場合:
  明示的にすべての引数を指定します。
  ```bash
  atc test abc300 a
  atc submit abc300 a
  ```

---

## 5. ローカルテスト

ダウンロードしたサンプルテストケースに対してローカルテストを実行します。

```bash
atc test [contestIdOrTask] [taskLabel] [-f, --file <file>]
```
- エイリアス `atc t` も使用可能です。
- `-f` または `--file` オプションを使うことで、自動検出されたコードファイル以外の特定のソースファイル（例: `solution.cpp`）を対象にテストを実行できます。

---

## 6. コードの提出

```bash
atc submit [contestIdOrTask] [taskLabel] [-f, --file <file>] [-o, --open]
```
- エイリアス `atc s` も使用可能です。
- 提出前に自動的にローカルテストが走ります。
- テストが不合格だった場合、確認プロンプトが表示されます。（`--yes` オプション有効時は警告を出して自動提出されます）
- 提出後はジャッジの進捗状況（WJ ➡ 1/15 ➡ AC等）がリアルタイムに表示されます。
- **`-o` / `--open` オプション**: ジャッジが完了した際に、結果（AC/WA等）のWeb提出詳細ページをブラウザで自動的に開きます。（デフォルトで `settings.json` の `openBrowserOnSubmit: true` となっており常に自動で開きます。`false` に変更することで無効化可能です）
- Cloudflare Turnstile などの保護機能にブロックされた場合は、提出コードをクリップボードにコピーした上で、ブラウザの提出ページが開かれます。