自作サービスの進捗
自作サービスも順調?
最近
先日fukabori.fmでなるほどな〜という話がありました。詳しくは100. A Philosophy of Software Design (1/3) w/ twada | fukabori.fmをぜひ聞いて欲しいのですがそこで、「ストラテジックとタクティカルとのアプローチで交差する点までどのぐらいの時間がかかる? 」というテーマがありました。ここでは「進捗を求めてガンガン開発していくこと」vs「少し先のことを考えて開発していくこと」という趣旨の話がされています。進捗を求めてガンガン開発していくことは短期的にみると進捗が出るのですが、長期的にみるとメンテナンスコストなどが積もっていき、直す頃にはすごい負債になっているという特徴があります。一方少し先のことを考えて開発していく方法では進捗ゆっくりですが、長期的にみるとメンテナンスコストが少ないということが話されています、何だか数学の問題みたい?実際に自分のサービスを開発している身としては考えさせられるものがありました。進捗を出さなくてはと考えてしまい、後でリファクタリングしようという思考になるのはとても理解できます。
自作サービス
今週は主に以下のことに取り組みました。
- 抽選モデルの作成、そのCRUDの実装
- welcomeページの作成
- 賞品モデルの作成
- Deviseのリダイレクト先の変更
今週で詰まった点は以下の点でした。
- uuidをPKとして作成したモデルを外部キーとして別テーブルで参照する
- 抽選会作成ページで複数の賞品を作成する
uuidをPKとして作成したモデルを外部キーとして別テーブルで参照する
今回URLを推測しにくいものにす必要があったため、抽選会のPKをbigint
型ではなくuuid
型を使用しています。また今回はDBにはRDBMSであるPostgreSQLを使用しています。
そこでuuid
型をPKとして持つモデルを別のテーブルにFKとして利用する場合はt.references
型がbigint
型のように認識されてしまうので、整合性が取れずエラーが起きます。
なので以下のようにuuid
型であることを明示しなくてはいけません。
class CreatePrizes < ActiveRecord::Migration[7.0]
def change
create_table :prizes do |t|
t.references :lottery, null: false, type: :uuid, foreign_key: true, index: true
.
.
抽選会作成ページで複数の賞品を作成する
この問題はgemを使うことで対応しました。
この処理で行いたいことは2つです。
- 抽選会作成formから賞品モデルにもデータを飛ばす
- formを動的に増やす
この2つをいい感じに賄ってくれるgemがnathanvda/cocoon: Dynamic nested forms using jQuery made easy; works with formtastic, simple_form or default formsというものです。しかしこのgemはメンテがあまり活発ではないのでやめておこうかなと考えたのですが、Rails7に対応しているみたいなので大丈夫だろうと思い採用しました。導入はCocoon Gem in Ruby on Rails 7. In this article, we are going to learn… | by Rutik Patel | Mediumを参考に行えば問題なく動きました。
初めてOSSにPRを送りました。(typoだけど、、)
それこそnathanvda/cocoon: Dynamic nested forms using jQuery made easy; works with formtastic, simple_form or default formsというgemなのですが、こんなPRを送りました。docs: fixed typo in History.md by OdenTakashi · Pull Request #630 · nathanvda/cocoon
メンテがされていないのでマージは先かな~と思うのですが、ゆっくり待ちたいと思います。
今週はそんな感じでした〜