AtCoderにおけるバージョン管理等を行うためのリポジトリ
技術スタック:
使用環境:
Mac, WSL
・イメージの自動ビルド: Dockerfileは、アプリケーションの依存関係や設定をコードとして記述することで、手動での環境設定を自動化。これにより、環境の再現性が高まり、開発やデプロイがスムーズに。
・変更の管理: Dockerfileを使用することで、イメージの変更履歴を管理でき、どのような変更が行われたかを明確に記録できる。これにより、バージョン管理が容易になります。
FROM : Dockerfileの最初に必ず記述される命令。使用するベースイメージを指定。(PythonやUbuntuなど)
RUN : インストールなどのコマンドを実行するためのもの
COPY : ホストマシンのファイルやディレクトリをDockerイメージ内にコピーするための命令
ARG : Dockerイメージのビルド時に使用する変数を定義するための命令
どのDockerイメージを使用するか、どの拡張機能をインストールするか、どのポートを公開するかなど、開発環境の設定を定義
Dockerfileは主にイメージをビルドするための手順を記述するものであり、必要なツールやライブラリをインストールするための命令を含む。一方、devcontainer.jsonは、VSCodeがどのようにコンテナを起動し、どの設定を適用するかを定義
・docker-compose.ymlでは、アプリケーションを構成する各サービス(コンテナ)を定義します。これにより、どのイメージを使用するか、どのポートを公開するか、環境変数をどう設定するかなどを明示的に記述
・YAML形式で設定を記述するため、視覚的に分かりやすく、複雑な環境でも設定を簡潔に管理
・複数のコンテナを一つのコマンドで起動・停止できるため、開発やデプロイの効率が大幅に向上。例えば、docker-compose upコマンドを実行するだけで、定義された全てのサービスを同時に起動
Dockerfileで定義したイメージを基に、devcontainer.jsonでそのイメージを使用する設定を行い、docker-compose.ymlを使用して、複数のサービスを定義し、それらを同時に起動可能
Python 3.8(git switchが使えない)
テンプレートファイル、ログインなどは手動
Python 3.11-slim(git switchが使える)
テンプレートファイルはこちら側で生成
ログイン、セッション情報は手動(セキュリティ上自動化が少し大変)
※ 事前のインストールは既に完了済み(VSCode, Docker, WSL)
-
参考文献を元に4つのファイル作成(Dockerfile, devcontainer.json, docker-compose.yml, requirements.txt)
-
(docker-compose.ymlのあるフォルダへ移動するために、)
cd .devcontainerでディレクリを移動 -
Dockerコンテナをビルド
docker-compose build -
Dockerコンテナを起動
docker-compose up -d-dでバックグラウンドで起動させる -
「Dev Containers: Attach to Running Container...」を選択し、コンテナに接続する (Remote-Containers: Open Folder in Container... とかだとうまくいかなかった)
-
新しいウィンドウが開かれ、それでAtCoderフォルダに移動
-
開発者ツールを使用して, Application->Cookies->"https://atcoder.jp" からREVEL_SESSIONクッキーを取得。
-
ターミナルでacc config-dirを実行し、表示されたディレクトリ内に保存されているsesion.jsonを開く(もしくは新規作成する)。
-
REVEL_SESSION=xxxのxxxの部分に手順1で取得したREVEL_SESSIONクッキーを貼り付けて保存。
{
"cookies": [
"REVEL_SESSION=xxx"
]
}
-
acc sessionで確認, okなら問題ない -
oj -hでcookie.jarファイルのパスを確認し、そのファイルのREVEL_SESSIONも先ほどと同じものを代入
Set-Cookie3: REVEL_SESSION="xxx"
-
acc check-ojやoj oj login https://beta.atcoder.jp/でログインを確認 -
/AtCoderディレクトリで、
acc config default-task-choice allこれにより、全問題を1回の動作で取得
-
テンプレートを設定するための準備
cd `acc config-dir` mkdir python cd python touch template.json touch main.py code template.json -
template.jsonの設定
{ "task":{ "program": ["main.py"], "submit": "main.py" } } -
acc config default-template pythonでデフォルトのテンプレートをpythonに変更
-
(出なかったら)command(ctrl) + shift + pを押す
-
docker compose startで開始 -
「Dev Containers: Attach to Running Container...」を選択し、コンテナへ移動
-
作業が終われば
docker compose stopで終了(downだとボリュームのデータが消えるので注意)
acc new {contest名}で追加
'oj t -c "pypy3 main.py" -d ./tests/' か 'oj t -c "python3 main.py" -d ./tests/'
acc s main.py -- --guess-python-interpreter pypy
再度、docker-compose buildでdocker-compose up -dすればいい
docker-compose downで終了(止めておくことで、裏でのリソース消費を防ぐ)
再開時は、`docker-compose up -d
CLIでの実行に何か制限があるらしい
以下を参考に対応できるかも
自分も同様の現象に遭遇しましたが、解決できたので手順を共有します。
- ここにある手順を参考にしてREVEL_SESSIONクッキーを取得。
- ターミナルでacc config-dirを実行し、表示されたディレクトリ内に保存されているsesion.jsonを開く。
- REVEL_SESSION=xxxのxxxの部分に手順1で取得したREVEL_SESSIONクッキーを貼り付けて保存。
acc sessionで確認, okなら問題ない




