Skip to content

Repository files navigation

ShareOJ

Website CI Issues

考える楽しさを、次の一問へ。

ShareOJ(Share Online Judge)は、プログラミング問題を解き、作り、共有できるオンラインジャッジです。 コードを提出して自動採点を受けるだけでなく、自作の問題や、解き方から学んだことを公開できます。

ShareOJを使う · 問題を見る · 記事を読む · コンテストを見る

ShareOJでできること

  • 問題を解く:公開されているプログラミング問題に挑戦し、コードを提出して採点結果を確認できます。
  • 問題を作る:問題文とテストケースを用意して、自作の問題を公開できます。
  • 記事で共有する:問題の解き方や学んだことを記事にして、ほかの人と共有できます。
  • コンテストを楽しむ:コンテストに参加するほか、自分で開催することもできます。

はじめるには

公開問題から、気になる一問を探してみてください。 アカウントは新規登録から作成できます。 作問から始めたい方は、問題作成へどうぞ。

バグ報告・機能提案

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

ライセンス

All rights reserved

開発環境

このリポジトリでは、ShareOJのGo API、Nuxtフロントエンド、AWS上のジャッジ基盤を開発しています。

ローカル環境の起動と開発手順

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

make dev

Nix 開発環境を読み込み、フロントエンドの依存関係のインストール、Go API のビルド、ローカルPostgreSQLの準備、APIとNuxtの起動を行う。 依存関係は初回と web/package.json、web/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 を利用する場合は、ルートの .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 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

.envrcがdirenvの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

Resources

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages