ShareOJ(Share Online Judge)は、オンラインジャッジサービス。
Go API、Nuxtフロントエンド、AWS上のジャッジ基盤を開発するリポジトリ。
バグ報告・機能提案はIssueへお願いします。 現在、外部からのPull Requestは受け付けていません。
Nix と make をインストール済みなら、リポジトリのルートで次のコマンドを実行する。
make devNix 開発環境を読み込み、フロントエンドの依存関係のインストール、Go API のビルド、ローカルPostgreSQLの準備、APIとNuxtの起動を行う。
依存関係は初回と web/package.json、web/package-lock.json、Node.js のバージョンが変わったときにインストールする。
初回はツールと依存関係のダウンロードに時間がかかる。
- ホーム: http://localhost:3000/
- 公開問題: http://localhost:3000/problems
- ブログ: http://localhost:3000/blog
- 問題作成: http://localhost:3000/problems/new
- API ヘルスチェック: http://localhost:8080/health
Ctrl+C で両サーバーを停止する。
片方のサーバーが終了した場合も、もう片方を停止する。
Nuxt は変更を自動反映する。Go の変更は Ctrl+C の後に make dev で再起動する。
公開問題の閲覧にはAWSの認証情報を必要としない。
DATABASE_URLが空なら、開発用PostgreSQLを127.0.0.1:15432で起動し、スキーマを自動適用する。
データは.local/postgresへ保存され、APIを再起動しても残る。
DBはCtrl+Cで停止しないため、停止する場合はmake db-downを実行する。
ログイン API を利用する場合は、ルートの .env に AWS_REGION、COGNITO_USER_POOL_ID、COGNITO_CLIENT_IDと、必要ならCOGNITO_CLIENT_SECRETを記入する(API の設定)。
/signupで新規登録してメールの確認コードを入力し、/loginからログインする。
ログインすると、問題をアカウントへ保存し、/my?tab=problemsから再編集できる。
既存のCognitoでは、セルフサインアップを有効にするTerraform変更の適用が必要になる。
make dev はルートの .env を読み込み、同名のシェル環境変数があればそちらを優先する。
ポートが使用中の場合は、停止してから起動するか、次のように変更する。 Nuxt の API 接続先と公開 URL も指定したポートに合わせて設定する。
API_PORT=18080 WEB_PORT=13000 make devルートのflake.nixとflake.lockで、API、フロントエンド、infraに共通する開発ツールを管理する。
Go、gopls、gofumpt、golangci-lint、Node.js 22(npmを含む)、PostgreSQL 17、AWS CLI、Terraform、zipを利用できる。
リポジトリのルートで開発シェルを起動する。
nix develop .direnvとnix-direnvを設定済みの場合は、初回にルートで許可する。
以後はapi/やinfra/bootstrap/への移動でも同じ環境を使う。
direnv allowTerraformのバージョンとbootstrapの構成を確認する例:
terraform version
terraform -chdir=infra/bootstrap init
terraform -chdir=infra/bootstrap planルートの.envで、AWS CLIとTerraformが使うプロファイルを指定する。
初回は設定例をコピーし、自分のプロファイル名に変更する。
cp -n .env.example .envAWS_PROFILE=loop0919.envrcがdirenvのdotenv_if_existsで読み込むため、.envがなくても開発シェルは利用できる。
.envはGitの管理対象から除外している。
AWSの認証情報は既存のAWSプロファイルで管理する。
.envrcの変更後はルートで再度許可し、接続先を確認する。
direnv allow
aws configure list
aws sts get-caller-identitynix develop単体では.envを読み込まない。
direnvを使わない場合は、開発シェル内でルートの.envを読み込む。
set -a
. ./.env
set +agit push時の自動テストは行わない。
変更に応じて以下の手順でローカル検証を行い、CIで型チェック・ビルド・ブラウザーテスト・実DB連携テストを実行する。
AWSアカウント全体の請求アラートは、別フォルダ~/aws-settingで管理する。
このリポジトリのCI/CDではデプロイしない。