Skip to content

Repository files navigation

ShareOJ

ShareOJ(Share Online Judge)は、オンラインジャッジサービス。

Go API、Nuxtフロントエンド、AWS上のジャッジ基盤を開発するリポジトリ。

バグ報告・機能提案

バグ報告・機能提案はIssueへお願いします。 現在、外部からのPull Requestは受け付けていません。

開発環境

Nix と make をインストール済みなら、リポジトリのルートで次のコマンドを実行する。

make dev

Nix 開発環境を読み込み、フロントエンドの依存関係のインストール、Go API のビルド、ローカルPostgreSQLの準備、APIとNuxtの起動を行う。 依存関係は初回と web/package.jsonweb/package-lock.json、Node.js のバージョンが変わったときにインストールする。 初回はツールと依存関係のダウンロードに時間がかかる。

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 を利用する場合は、ルートの .envAWS_REGIONCOGNITO_USER_POOL_IDCOGNITO_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.nixflake.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 allow

Terraformのバージョンとbootstrapの構成を確認する例:

terraform version
terraform -chdir=infra/bootstrap init
terraform -chdir=infra/bootstrap plan

AWSプロファイル

ルートの.envで、AWS CLIとTerraformが使うプロファイルを指定する。 初回は設定例をコピーし、自分のプロファイル名に変更する。

cp -n .env.example .env
AWS_PROFILE=loop0919

.envrcdirenvのdotenv_if_existsで読み込むため、.envがなくても開発シェルは利用できる。 .envはGitの管理対象から除外している。 AWSの認証情報は既存のAWSプロファイルで管理する。

.envrcの変更後はルートで再度許可し、接続先を確認する。

direnv allow
aws configure list
aws sts get-caller-identity

nix develop単体では.envを読み込まない。 direnvを使わない場合は、開発シェル内でルートの.envを読み込む。

set -a
. ./.env
set +a

開発手順

git push時の自動テストは行わない。 変更に応じて以下の手順でローカル検証を行い、CIで型チェック・ビルド・ブラウザーテスト・実DB連携テストを実行する。

AWSアカウント全体の請求アラートは、別フォルダ~/aws-settingで管理する。 このリポジトリのCI/CDではデプロイしない。

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages