自作サービスの進捗

自作サービスも順調?

最近

先日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つです。

初めて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
メンテがされていないのでマージは先かな~と思うのですが、ゆっくり待ちたいと思います。

今週はそんな感じでした〜