Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
c5f306d
rename docker-compose.yml to compose.yml
Oct 17, 2025
948f963
version指定は削除
Oct 17, 2025
0c3a211
.gitignoreに.envを追加
Oct 17, 2025
be98946
webコンテナの環境変数は.envから読み込むように
Oct 17, 2025
3a115a8
dot.envを作成
Oct 17, 2025
61986c4
database.ymlの設定値は環境変数から読み込むように
Oct 17, 2025
52ddc70
dot.test.envを追加
Oct 17, 2025
cdbf2c7
test用のcomposeファイルを作成
Oct 17, 2025
bc156fd
Makefileを作成
Oct 17, 2025
dc368aa
gem install rubocop rubocop-rails rubocop-shopify & bundle install
Oct 17, 2025
15917b1
rubocopの設定追加
Oct 17, 2025
4e97f8f
rubocop -a
Oct 17, 2025
40d89f7
gem install annotate & bundle install
Oct 17, 2025
674475c
rails g annotate:install
Oct 17, 2025
101069f
testで使うgemを追加
Oct 18, 2025
79088cb
test_helperに設定を追加
Oct 18, 2025
d0dda1f
time_zoneの設定を追加
Oct 18, 2025
488d75c
デフォルトの言語設定追加とja.ymlを作成
Oct 18, 2025
4db2ac4
.rubocop.ymlのrequireをpluginsに修正
Oct 18, 2025
3d60eab
Makefileを修正
Oct 18, 2025
cac81fd
DATABASE_HOSTを環境変数に追加
Oct 18, 2025
8d15bb8
Merge pull request #1 from seichan23/chore/setup
chanchan-co Oct 18, 2025
ce7ed45
gem install pry-rails & bundle install
Oct 18, 2025
6ed84ca
rails g model Provider & rails db:migrate
Oct 18, 2025
db673e5
Providerモデルにバリデーションを追加
Oct 18, 2025
cf27da3
rails g factory_bot:model Provider
Oct 18, 2025
da84ec5
Providerモデルにバリデーションのテストを追加
Oct 18, 2025
300d619
ja.ymlにrails-i18nのja.ymlを追記
Oct 18, 2025
fa5636b
Providerモデルの属性の日本語訳を追加
Oct 18, 2025
c54a23b
csvをインポートするconcernを作成
Oct 18, 2025
7ec8cd3
Providerモデルでcsvインポートできるように
Oct 18, 2025
88019a5
csvをインポートするconcernのテストを作成
Oct 18, 2025
71bf9ab
seed時にcsvからデータをインポートするように
Oct 18, 2025
ed78083
rubocopの設定ファイルに設定を追加
Oct 18, 2025
8e9c079
rubocop -a
Oct 18, 2025
319474d
Merge pull request #2 from seichan23/feature/generate_provider
chanchan-co Oct 18, 2025
60dbee2
rails g model Plan & rails db:migrate
Oct 19, 2025
c2c8019
Planモデルに関連付けとテストを追加
Oct 19, 2025
5dfc1de
Providerモデルに関連付けとテストを追加
Oct 19, 2025
86b67bf
rails g factory_bot:model Plan
Oct 19, 2025
b62d22c
Planモデルにバリデーション追加とモデルのテストを追加
Oct 19, 2025
1f07cb6
rubocop -a
Oct 19, 2025
25408c7
複合ユニークにも対応できるようにCSVインポート処理を修正
Oct 19, 2025
45ff579
PlanモデルでもCSVインポート機能を使えるように
Oct 19, 2025
f7d45f8
seed実行時にPlanのデータもインポートするように
Oct 19, 2025
43c05a5
CSVインポートの処理にtransactionを追加してテストケースを追加
Oct 19, 2025
2e28c1b
Merge pull request #3 from seichan23/feature/generate_plan
chanchan-co Oct 19, 2025
4d8cb0a
rails g model BasicCharge & rails db:migrate
Oct 19, 2025
7b09f59
BasicChargeモデルに関連付けを追加してモデルのテストを追加
Oct 19, 2025
a89c863
Planモデルに関連付けを追加してモデルのテストを追加
Oct 19, 2025
7e42dbd
railsの実装を参考に最大数値を定数化
Oct 19, 2025
4d29b1d
rails g factory_bot:model BasicCharge
Oct 19, 2025
7b27c90
BasicChargeモデルにバリデーションを追加とモデルのテストを追加
Oct 19, 2025
6369b23
BasicChargeモデルでCSVインポート機能を使えるように
Oct 19, 2025
b732c94
seed実行時にBasicChargeのデータもインポートするように
Oct 19, 2025
81dbed8
Merge pull request #4 from seichan23/feature/generate_basic_charge
chanchan-co Oct 19, 2025
bf4a38a
rails g model UsageCharge & rails db:migrate
Oct 19, 2025
e629bce
UsageChargeモデルに関連付けを追加してモデルのテストを追加
Oct 19, 2025
757b9db
Planモデルに関連付けを追加してモデルのテストを追加
Oct 19, 2025
8204d44
UsageChargeモデルの日本語訳を追加
Oct 21, 2025
b3471dc
rails g factory_bot:model UsageCharge
Oct 21, 2025
8111447
UsageChargeモデルにバリデーション追加とモデルのテストを追加
Oct 21, 2025
2452162
UsageChargeモデルでCSVインポート機能を使えるように
Oct 21, 2025
c3e864e
seed実行時にUsageChargeのデータもインポートするように
Oct 21, 2025
2930cc0
Merge pull request #5 from seichan23/feature/generate_usage_charges
chanchan-co Oct 21, 2025
0bf9bbe
rails g controller api/v1/electricity_charges
Oct 21, 2025
d91bc53
gem install mocha
Oct 22, 2025
1c032a6
テストの設定にmochaの設定を追記
Oct 22, 2025
3e3467b
使用量以下の料金区分を取得するスコープを追加
Oct 22, 2025
20351ec
料金計算するサービスクラスの作成とテストを作成
Oct 22, 2025
48a3f2f
プランごとの電気料金を返すためのルーティングを追加
Oct 22, 2025
c5545aa
電気料金計算のindexアクションとテストを作成
Oct 22, 2025
9b7b4d0
エラーメッセージをja.ymlに定義してエラーメッセージを微修正
Oct 22, 2025
7815ad6
エラーメッセージを変更して落ちるようになった箇所のテストを修正
Oct 22, 2025
7352fee
計算を目的としていないテストケースのデータ作成をシンプルに修正
Oct 22, 2025
3242c27
Merge pull request #6 from seichan23/feature/generate_electricity_cha…
chanchan-co Oct 22, 2025
1a1cec3
本番環境用のDockerfile.prdを作成
Oct 22, 2025
c5558bb
imageを軽くするために.dockerignoreを作成
Oct 22, 2025
be05dc0
起動時に実行するshellを作成
Oct 22, 2025
fa7c626
本番で使うDBのurl情報を設定できるように
Oct 22, 2025
48e0123
環境変数を共有用の環境変数ファイルに追記
Oct 22, 2025
555ece5
Merge pull request #7 from seichan23/release
chanchan-co Oct 22, 2025
5cb62dd
apiディレクトリを作成してrailsのコードを移動
Oct 27, 2025
1af8bb4
Makefileを移動
Oct 27, 2025
7350414
compose.ymlを移動してapiとfrontを起動できるように内容修正
Oct 27, 2025
78d7041
npx create-next-app@latest --typescript
Oct 27, 2025
51a3707
compose.test.ymlを移動してtest-apiを起動できるように内容修正
Oct 27, 2025
137e38f
Makefileのwebをapiに修正
Oct 27, 2025
7766ad4
開発環境が不安定になるのでpostgresのバージョンを18にしてvolumesの指定を18用に変更
Oct 27, 2025
ed8ebfd
Merge pull request #8 from seichan23/chore/setup_next_js_and_docker
chanchan-co Oct 27, 2025
cd2d82c
gem install rack-cors
Oct 27, 2025
791c2d0
開発環境のcorsの設定を追加
Oct 27, 2025
803d321
apiのリクエスト及びレスポンスのインターフェースを作成
Oct 28, 2025
a1f026d
必要になるコンポーネントを作成
Oct 28, 2025
82dff52
電気料金計算API呼び出し用の関数を追加
Oct 28, 2025
fb22076
電気料金計算ページを作成
Oct 28, 2025
b6037a5
環境変数共有用ファイルに環境変数を追加
Oct 28, 2025
8b81fbd
Merge pull request #9 from seichan23/feature/add_electricity_charges_…
chanchan-co Oct 28, 2025
a6e4fe4
本番環境のビルドで失敗するので、設定ファイルのファイル読み込みの箇所を修正
Oct 28, 2025
85f4ce1
Merge pull request #10 from seichan23/fix/front_validator_setting
chanchan-co Oct 28, 2025
505e3d8
apiの本番環境にcorsの設定を追加
Oct 28, 2025
538b126
Merge pull request #11 from seichan23/feature/add_cors_setting_produc…
chanchan-co Oct 28, 2025
a5eb926
metadataを修正
Oct 28, 2025
13fbfd3
フォームと計算結果を横並びにしてみやすいようにデザインを変更
Oct 28, 2025
d54194b
Merge pull request #12 from seichan23/feature/update_design
chanchan-co Oct 28, 2025
4b20b84
READMEを作成
Oct 28, 2025
ed5a051
Merge pull request #13 from seichan23/docs/generate_readme
chanchan-co Oct 28, 2025
2e8d2b9
テキスト修正
Oct 28, 2025
c438eda
Merge pull request #14 from seichan23/fix
chanchan-co Oct 28, 2025
cfc59ac
親レコードのidではなくcodeを元にCSVでデータ登録・更新できるように変更
Oct 30, 2025
b51d93f
各csvのidをcodeに変更
Oct 30, 2025
2c5f84c
親レコードのcodeを基準にCSVでデータ登録・更新できるように変更した処理のテストを追加
Oct 30, 2025
f4a5743
rubocop -a
Oct 30, 2025
3989cdd
development/productionそれぞれに設定していたcorsの設定をinitializersに移動
Oct 30, 2025
d331cbe
環境変数共有用ファイルに環境変数を追加
Oct 30, 2025
c6d2254
現在の実装で使用していない日本語の設定を削除
Oct 30, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions serverside_challenge_2/challenge/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
DC = docker compose
DC_TEST = $(DC) -f compose.test.yml

.PHONY: build up down api-bash init test-build test-up test-down test-api-bash

build:
$(DC) build
up:
$(DC) up -d

down:
$(DC) down

api-bash:
$(DC) exec api bash

init:
$(DC) exec api rails db:create
$(DC) exec api rails db:migrate
$(DC) exec api rails db:seed

test-build:
$(DC_TEST) build

test-up:
$(DC_TEST) up -d

test-down:
$(DC_TEST) down

test-api-bash:
$(DC_TEST) exec test-api bash
74 changes: 60 additions & 14 deletions serverside_challenge_2/challenge/README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,70 @@
# README
## 概要

This README would normally document whatever steps are necessary to get the
application up and running.
このリポジトリは「電気料金のシミュレーション」の課題提出用プロジェクトです。
指定された電力量と契約アンペア数を元に複数の電力プランを算出します。

Things you may want to cover:
## 使用技術について
- フロントエンド: Next.js(TypeScript)
- バックエンド: Ruby, Ruby on Rails
- 本番環境:
- フロントエンド: Vercel
- バックエンド: Cloud Run
- データベース: Supabase(PostgreSQL)

* Ruby version
### インフラ構成について
- 基本的に費用の掛からない構成で構築しております。
- Cloud Runはコールドスタートのため起動していない時はレスポンスが少し遅いのでご了承ください。

* System dependencies
## 各環境のURLについて
### 本番環境
- フロントエンド: https://coding-challenge-rouge-seven.vercel.app
- バックエンド: https://energy-charges-118821896069.asia-northeast1.run.app
### 開発環境
- フロントエンド: http://localhost:3001
- バックエンド: http://localhost:3000

* Configuration
### 使い方
- https://coding-challenge-rouge-seven.vercel.app にアクセス
- 「契約アンペア数(A)」と「使用量(kWh)」を入力後「計算する」ボタンを押下
- 「プロバイダ名」「プラン名」「電気料金」情報が返ってくる

* Database creation
## ディレクトリ構成(ラフ)について
<pre>
challenge/
├── front/ # フロントエンド (Next.js / TypeScript)
│ ├── app/
│ ├── dot.env # 共有用環境変数ファイル
│ ├── Dockerfile # 開発環境用Dockerfile
│ └── ...
└── api/ # バックエンド (Ruby on Rails API)
├── app/
├── dot.env # 共有用環境変数ファイル
├── Dockerfile # 開発環境用Dockerfile
├── Dockerfile.prd # Cloud Run用Dockerfile
└── ...
├── Makefile # ビルド・起動コマンド群
├── compose.yml # 開発用docker compose
├── compose.test.yml # テスト用docker compose
</pre>

* Database initialization
## 開発環境構築手順について
```bash
cd coding-challenge/serverside_challenge_2/challenge
cp api/dot.env api/.env
cp front/dot.env front/.env

* How to run the test suite
make build
make up
make api-bash
rails db:migrate:reset db:seed
```

* Services (job queues, cache servers, search engines, etc.)
## 補足
- このリポジトリは課題提出用のため、`service.yaml`や`GithubActions`などの構成ファイルは作成しておりません。
- `Cloud Run`へは手動デプロイを実施しております。
- `docker build -f Dockerfile.prd --platform linux/amd64 -t (GARのリンク) .` でイメージをビルド
- `docker push (GARのリンク):latest` でビルドしたイメージにlatestタグをつけてGARにプッシュ
- `Cloud RunのUIから環境変数の設定および`Image`の指定をしております。`

* Deployment instructions

* ...
- 各機能実装時の記録としてプルリクエストを随時作成しております。
- 確認手順などはプルリクエストへ詳細に記載させていただいております。
13 changes: 13 additions & 0 deletions serverside_challenge_2/challenge/api/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/.bundle/
/.dockerignore
/.git/
/.git*
/.ruby-version
/README.md
/config/master.key
/log/
/node_modules/
/storage/
/tmp/
/vendor/bundle/
/public/uploads/
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,5 @@

# Ignore master key for decrypting credentials and more.
/config/master.key
.env
.env.test
33 changes: 33 additions & 0 deletions serverside_challenge_2/challenge/api/.rubocop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
inherit_gem:
rubocop-shopify: rubocop.yml

plugins:
- rubocop-rails

Style/MethodCallWithoutArgsParentheses:
Enabled: true

Style/StringLiterals:
EnforcedStyle: single_quotes

Rails/LexicallyScopedActionFilter:
Enabled: false

Style/ClassAndModuleChildren:
Enabled: false

Style/WordArray:
EnforcedStyle: percent

AllCops:
SuggestExtensions: false
Exclude:
- 'db/**/*'
- 'lib/tasks/**/*'
- 'config/application.rb'
- 'config/environments/**/*'
- 'config/initializers/**/*'
- 'bin/**/*'
- 'vendor/**/*'
- 'Rakefile'
- 'config.ru'
34 changes: 34 additions & 0 deletions serverside_challenge_2/challenge/api/Dockerfile.prd
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
FROM ruby:3.1.2-slim-bullseye AS base

ENV LANG=C.UTF-8 \
RAILS_ENV="production" \
BUNDLE_DEPLOYMENT="1" \
BUNDLE_PATH="/usr/local/bundle"
WORKDIR /app

FROM base AS builder

RUN apt-get update -qq && \
apt-get install -y build-essential libpq-dev && \
rm -rf /var/lib/apt/lists/*

COPY Gemfile Gemfile.lock ./
RUN bundle install --jobs "$(nproc)" --without development test && \
rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git

COPY . .

FROM base AS runner

RUN apt-get update -qq && \
apt-get install -y libpq-dev && \
rm -rf /var/lib/apt/lists/*

COPY --from=builder /usr/local/bundle /usr/local/bundle
COPY --from=builder /app /app
COPY db/csv /app/db/csv

RUN chmod +x bin/start.sh

EXPOSE ${PORT:-8080}
CMD ["bin/start.sh"]
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
source "https://rubygems.org"
# frozen_string_literal: true

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby "3.1.2"
ruby '3.1.2'

# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
gem "rails", "~> 7.0.8"
gem 'rails', '~> 7.0.8'

# Use postgresql as the database for Active Record
gem "pg", "~> 1.1"
gem 'pg', '~> 1.1'

# Use the Puma web server [https://github.com/puma/puma]
gem "puma", "~> 5.0"
gem 'puma', '~> 5.0'

# Build JSON APIs with ease [https://github.com/rails/jbuilder]
# gem "jbuilder"
Expand All @@ -25,10 +27,10 @@ gem "puma", "~> 5.0"
# gem "bcrypt", "~> 3.1.7"

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem "tzinfo-data", platforms: %i[ mingw mswin x64_mingw jruby ]
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

# Reduces boot times through caching; required in config/boot.rb
gem "bootsnap", require: false
gem 'bootsnap', require: false

# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem "image_processing", "~> 1.2"
Expand All @@ -38,11 +40,26 @@ gem "bootsnap", require: false

group :development, :test do
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
gem "debug", platforms: %i[ mri mingw x64_mingw ]
gem 'debug', platforms: [:mri, :mingw, :x64_mingw]
gem 'rubocop', require: false
gem 'rubocop-rails', require: false
gem 'rubocop-shopify', require: false
gem 'annotate', require: false
gem 'pry-rails'
end

group :development do
# Speed up commands on slow machines / big apps [https://github.com/rails/spring]
# gem "spring"
end

group :test do
gem 'factory_bot_rails'
gem 'shoulda-matchers', '~> 6.0'
gem 'shoulda-context', '~> 3.0.0.rc1'
gem 'minitest-power_assert'
gem 'faker'
gem 'mocha'
end

gem 'rack-cors'
Loading