Skip to content

Conversation

@chanchan-co
Copy link

概要

お世話になっております。杉山です。

チャレンジ課題「serverside_challenge_2」電気料金のシミュレーションの実装をさせていただきました。
課題内容: https://github.com/enechange/coding-challenge/blob/master/serverside_challenge_2/README.md
詳細情報: README

実施内容

Ruby on RailsとNext.jsを用いて、電気料金シミュレーションAPIおよびフロントエンドを実装しました。

  • アンペア数(A)、使用量(kWh)を受け取りプランごとの電気料金を返すAPIを実装
  • UIからシミュレーションを利用できるようにフロントエンドを実装
  • 料金データをDBで管理できるようにしてCSVからデータ登録を可能に
  • フロントエンド、バックエンドの本番環境構築

本番環境

使い方

  • 上記アプリケーションURLにアクセス
  • 「契約アンペア数(A)」と「使用量(kWh)」を入力後「計算する」ボタンを押下
  • 各プランの「プロバイダ名」「プラン名」「電気料金」情報が返ってくること

環境構築手順

cd coding-challenge/serverside_challenge_2/challenge

# 環境変数ファイルの作成
cp api/dot.env api/.env
cp front/dot.env front/.env

# ビルド
make build
# 起動
make up
# apiコンテナに入る
make api-bash
# migrate&初期データ投入
rails db:migrate:reset db:seed

動作確認手順

備考

ご確認よろしくお願いいたします。

cursor[bot]

This comment was marked as outdated.

@chanchan-co
Copy link
Author

追記(10月30日)

ER図とアーキテクチャ構成図を作成させていただきましたので追記いたします。

ER図

erDiagram
  Provider {
    int id PK
    string name
    string code UK
  }

  Plan {
    int id PK
    int provider_id FK
    string name
    string code UK  "※ provider_id + code の複合ユニーク制約"
  }

  BasicCharge {
    int id PK
    int plan_id FK
    int ampere "※ plan_id + ampere の複合ユニーク制約"
    decimal amount
  }

  UsageCharge {
    int id PK
    int plan_id FK
    int from_kwh "※ plan_id + from_kwh の複合ユニーク制約"
    int to_kwh
    decimal unit_price
  }

  Provider ||--o{ Plan : "has many"
  Plan ||--o{ BasicCharge : "has many"
  Plan ||--o{ UsageCharge : "has many"
Loading

アーキテクチャ構成図

スクリーンショット 2025-10-29 23 51 20

@ksugiura-ene
Copy link

お忙しい中チャレンジの提出ありがとうございました。
バックエンドだけでなくフロントエンド、クラウドへのデプロイまでご対応いただきありがとうござます。
また段階的な計算のロジックも正しく実装されていることを確認しました。
いくつか実装に関するコメントをさせていただきます。

# Uncomment if you wish to allow Action Cable access from any origin.
# config.action_cable.disable_request_forgery_protection = true

config.middleware.insert_before 0, Rack::Cors do

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q

本番環境と共通化できそうですが環境ごとに指定している意図はありますでしょうか。

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

開発環境で設定した内容がそのまま本番環境に反映されることを避けるため、
段階的にdevelopment/ productionで設定を分けて行いましたが
最終的に共通化するのを失念していました。

内容的に共通化可能なため、initializers/cors.rbにまとめる形で修正したいと考えております。

from_kwh: 使用量(kwh)の下限
to_kwh: 使用量(kwh)の上限
unit_price: 単価
date:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q

今回の実装で日付関係の要素はなかったかと思いますが、local定義をしている意図があれば教えていただけますでしょうか。

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

date等のlocale定義につきましては、rails-i18nのja.ymlをベースファイルとして使用したため、
今回の実装では使用していませんが、そのまま残しております。

理由:

  • 将来的に日付フォーマットが必要になった際にすぐ使える
  • Railsの標準的なlocaleファイル構成を維持できる

今回の実装で必要だったわけではありませんが、ベースファイルの構成を崩さない方が良いと判断しました。

ただ、使用していない定義を残していると複雑性が増すとも考えられますので、削除させていただきたく考えております。

@@ -0,0 +1,5 @@
provider_id,name,code
1,従量電灯B,juuryouB

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NITS

いくつかのcsvでprovider_idやplan_idが参照されていますが運用上の管理を考えますと、idでの管理は難しいと感じます。

具体的には
plan.csvでまだ登録されていないproviderのidを予想して指定している点が難しく感じました。
DBの自動採番はDBの再起動などで現在値が飛ぶ場合もあるので、マスターが壊れてしまう原因になりうると思いました。

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ご指摘ありがとうございます。
こちらのCSV登録機能に関しましてはrails db:migrate:reset db:seed前提で考えてしまっておりましたので
関連する要素のidを指定して登録するようにしておりました。

ただ、運用上の管理を考えると仰られるとおり、マスターが壊れてしまう原因になりうると考えられるため
idを予想して指定するのではなく一意のcodeを指定するように修正させていただきます。

@ksugiura-ene
Copy link

ksugiura-ene commented Oct 30, 2025

Q

CloudSqlの方がCloudRunからの接続が容易だと思いますが
Supabaseを選択された理由があれば教えていただけますでしょうか。

@chanchan-co
Copy link
Author

CloudSqlの方がCloudRunからの接続が容易だと思いますが
Supabaseを選択された理由があれば教えていただけますでしょうか。

仰られる通り、Cloud SQLの方がCloud Runからの接続が容易だと認識しております。
その上でSupabaseを選択した理由といたしましてはコスト面を考慮させていただきました。

Supabaseは無料枠で利用でき、PostgreSQL互換かつ構築も容易なため、今回の要件を満たすのには十分と考えました。
また、要件や運用方針によってはCloud SQLへのデータ移行も可能なため、Supabaseを選択いたしました。

@chanchan-co
Copy link
Author

@ksugiura-ene
お忙しい中、
レビュー及びコメントをしていただき、ありがとうございます。

頂いたコメントに対してご回答させていただいておりますので
お手数をお掛けいたしますが、ご確認よろしくお願いいたします🙇‍♂️

@ksugiura-ene
Copy link

ksugiura-ene commented Oct 30, 2025

お忙しい中ご回答ありがとうございます。
私としては納得が行くご回答いただいていますので、対応はできる範囲でよろしくお願いいたします。

@chanchan-co
Copy link
Author

@ksugiura-ene
ご確認ありがとうございました。
コメントを頂いた箇所の修正をさせていただきプッシュさせていただきました。
よろしくお願いいたします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants