Skip to content

coderdojo.jp の Dojo 情報入力で created_at の入力ミスに対応したい #1770

@yasulab

Description

@yasulab

背景

created_at の入力でTypoに気づかず、10年前の日付でデータを作成していた
❌ 2015-12-04
⭕️ 2025-12-04

cf. #1769

やりたいこと

今後同様の事象があったときのために対策をしたい

  • テストでキャッチして、通らないようにする
  • ID と同様に created_at は自動で挿入する
  • すでに実現できているかも? (要: 動作確認)
    • YAML の created_at が未記入(もしくは項目なし)なら、データ読み込み時にIDと同様に更新されるかも?
      • 動作確認してみて、更新されるようならドキュメントの更新のみで解決できそう🙆‍♀️
    • 更新されなかった場合も、「同様に created_at は自動で挿入」する形が間違いが起こらなくて良さそうです

作業チェック

Investigate by AI

サッと AI に調べてみてもらったところ、 既に実装されてそうですのでドキュメントを更新するだけで大丈夫そう...!? 👀💡✨

⏺ Read(lib/tasks/dojos.rake)
  ⎿  Read 123 lines (ctrl+r to expand)

⏺ 重要な部分を見つけました!49行目を見ると:

  d.created_at = d.new_record? ? Time.zone.now : dojo['created_at'] || d.created_at

  現在の実装では:
  1. 新規レコードの場合: Time.zone.now で現在時刻を自動設定
  2. 既存レコードの場合: YAMLの created_at を使用、なければDB既存値を保持

  つまり、新規Dojoには既に created_at が自動設定される仕組みがあります!
Image

既存の実装では新規登録時に YAML 内に created_at があっても無視されている (これでOK)


> What happens if it is new record and created_at is given in YAML?

⏺ 良い質問ですね!コードを詳しく見てみましょう。

  49行目の処理:
  d.created_at = d.new_record? ? Time.zone.now : dojo['created_at'] || d.created_at

  この実装では:

  新規レコード(d.new_record? が true)の場合:
  - YAMLに created_at があっても無視されます
  - 常に Time.zone.now(現在時刻)が設定されます
> No, don't change codes. created_at should be ignored for new records so that existing code is fine?

⏺ ああ、そうですね!既存のコードを見直すと:

  d.created_at = d.new_record? ? Time.zone.now : dojo['created_at'] || d.created_at

  これは正しい動作です:
  - 新規レコード: 常に Time.zone.now(現在時刻)を使用 → YAMLの created_at は無視される
  - 既存レコード: YAMLの created_at があればそれを使用、なければ既存の値を保持

  つまり、新規Dojoでは created_at を入力させないというのが正しいアプローチです。これにより:
  1. ✅ Typoによる間違った日付(2015年など)を防げる
  2. ✅ 常に正確な登録日時が自動記録される
  3. ✅ 人為的ミスを構造的に防げる

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions