-
-
Notifications
You must be signed in to change notification settings - Fork 109
📊 Add inactivated_at
to Dojo
model to replace is_active
boolean column
#1726
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- 2025-08-05時点の道場数の推移データ(2012-2024年)を記録 - 非アクティブ道場を統計に含めた際の影響を測定するために使用 - 追加: docs/dojo_stats_before_inactivated_at_implementation.md
- データベースに inactivated_at カラムを追加(datetime型、インデックス付き) - note カラムを string から text 型に変更(再活性化履歴の記録用) - is_active と inactivated_at の同期処理を実装 - active_at スコープを追加(特定時点でのアクティブ道場を取得) - 基本的なモデルテストを追加 注意: db/dojos.yaml がマスターデータのため、 実際の inactivated_at の永続化にはYAMLファイルの更新が必要 (次のステップで実装予定) refs #1373
- db/dojos.yaml がマスターレコードであることを明記 - Git履歴抽出はYAMLファイルを直接更新する方式に変更 - データフローを明確化:YAML → DB(rails dojos:update_db_by_yaml) - Phase 1 の完了をマーク
- Git履歴抽出スクリプトの参考実装を作成 - dojos:update_db_by_yaml への追加方法を確定 - 実装状況とNext Stepsを明確化
Phase 2の実装: - dojos:update_db_by_yaml タスクに inactivated_at サポートを追加 - Git履歴から inactivated_at を抽出するRakeタスクを作成 - dojos:extract_inactivated_at_from_git: 全Dojo対象 - dojos:extract_inactivated_at_for_dojo: 特定Dojo対象 - 統計ロジックを更新して過去の活動履歴を含めるように変更 - annual_dojos_with_historical_data メソッドを追加 - 各年末時点でアクティブだったDojo数を正しく集計 - Statモデルのテストを追加 次のステップ: 1. rails dojos:extract_inactivated_at_from_git でYAMLに日付追加 2. rails dojos:update_db_by_yaml でDBに反映 3. ローカルで統計ページの動作確認
- 引数なし: 全ての非アクティブDojoを処理してYAMLを更新 - 引数あり: 特定のDojoの情報を表示のみ(読み取り専用) - 既に inactivated_at が設定されている場合はスキップ - コードの重複を排除してメンテナンス性を向上
- add_inactivated_at_to_dojos マイグレーション - change_note_to_text_in_dojos マイグレーション の実行結果を反映
- YAMLサポートと統計ロジックの実装が完了 - Phase 3(データ移行とテスト)が次のステップ - 作業メモや一時ファイルを削除してクリーンアップ
Opus 4.1の詳細レビューにより、以下の改善を実装計画に統合: 主な改善点: - Phase 3(データ移行)の詳細な実行計画を追加 - バックアップとベースライン記録スクリプト - 事前検証スクリプト(GitExtractionValidator) - ドライラン対応の適用スクリプト - リスク軽減戦略の強化 - 30分以内のロールバック計画 - タイムスタンプ付き自動バックアップ - 成功指標の定量化 - 測定可能な目標値(完了率100%、精度向上+20%など) - 具体的な測定方法を定義 - エッジケースと特殊ケースの対処法を表形式で整理 - パフォーマンス最適化(単一SQLクエリ、キャッシュ戦略) - モニタリングダッシュボードの実装例 技術的な発見: - 統計ロジックがカラム存在チェックで自動切り替えする優れた設計 - Git履歴抽出に冪等性が既に実装済み - Phase 2は実質的に完了状態 実装成功確率: 98%(Opus 4.1評価) refs #1373
YAMLファイルのGit履歴から、各Dojoがis_active: falseになった 日付を自動抽出してinactivated_atカラムに設定するタスクを実装。 主な機能: - git blameを使用した変更日時の特定 - YAMLファイルの行番号を正確に検出 - エラーハンドリングと進捗表示 - ドライランモードのサポート 124個中122個のDojoの非活動日を自動抽出することに成功。
inactivated_at
to Dojo
model to replace is_active
boolean columninactivated_at
to Dojo
model to replace is_active
boolean column
以下のテストを追加: 1. 全ての非アクティブDojoにinactivated_atが設定されていることを確認 2. inactivated_atの日付が妥当であることを検証 - 正しくパースできる形式 - 未来の日付でない - created_atより後の日付 このテストにより、Rakeタスクで取得した日付の正確性を検証できます。
38aa9f1
to
884afec
Compare
問題: - YAMLファイル更新中に yaml_lines.insert() で行が追加されると 次のDojoの行番号がずれて git blame が間違った行を参照していた 解決策: - Phase 1: 全Dojoの情報収集(YAMLを変更せずに) - Phase 2: 収集した情報を元にYAMLを一括更新 - これにより行番号のずれを防止
Git履歴から抽出した日付を使用して、全ての非アクティブDojoに 活動停止日を記録。これにより統計の精度が向上する。
YAMLファイルのデータ整合性を検証するテスト。 DBではコールバックで自動設定されるが、YAMLファイル(マスターデータ)では 手動編集時にis_activeカラムを忘れる可能性があるため重要。 再活性化されたDojo(is_active: true)の存在も考慮し、 カラムの存在のみをチェック(値は問わない)。
YAMLマスターデータに既にinactivated_atが含まれているため、 条件分岐を削除してシンプルな実装に: - annual_dojos_with_historical_data で各年末時点の道場数を集計 - HighChartsBuilderでグラフデータを生成 - 統計精度が大幅改善(例:2018年 98→172道場) テストも簡潔に更新し、全て通過を確認。
統計データ周りも大体仕上がったので、一旦ココらでマージ&デプロイします!何かあれば随時追加で修正します...!! 🚀✨ |
yasulab
added a commit
that referenced
this pull request
Aug 7, 2025
Cont'd: Add `inactivated_at` to `Dojo` model to replace `is_active` boolean column (#1726)
Forgot to |
This was referenced Aug 8, 2025
inactivated_at
to Dojo
model to replace is_active
boolean columninactivated_at
to Dojo
model to replace is_active
boolean column
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fix #1373
概要
Issue #1373 を解決するための PR です。
問題
is_active: false
ではいつ非アクティブになったのか?
という情報が欠けてしまう道場数の推移
グラフの一部がやや不明瞭なデータになったり、xx年度の時点では、どの地域に oo の Active な Dojo があった
という過去の任意の時点でのデータを参照/検証できない解決策
is_active
ブール値をinactivated_at
タイムスタンプに置き換えることで、過去の活動履歴を保持しながら統計を正確に表示できるようにする。いつ非アクティブになったのか?
という情報は、幸いにも、YAML ファイルにis_active
がセットされた情報からgit blame
でサルベージが可能これにより、例えば「2018年時点で関東地方に存在していたDojo一覧」のような過去の任意時点でのデータを正確に取得できるようになります。 🗾📊✨
📍 現在の実装状況
✅ Phase 1: 基盤整備(完了)
inactivated_at
カラム追加、note
カラムの型変更)active_at
スコープ、reactivate!
メソッドなど)✅ Phase 2: YAMLサポートと統計ロジック(完了)
dojos:update_db_by_yaml
タスクへのinactivated_at
サポート追加(1行追加で実装)inactivated_at
を抽出してYAMLに反映するRakeタスク実装inactivated_at
を追加完了✅ Phase 3: データ移行とテスト(完了)
inactivated_at
を追加(すべて単純な履歴)inactivated_at
を持つことを確認inactivated_at
を持つDojoが必ずis_active
カラムを持つことを確認✅ Phase 4: 統計ロジック更新(完了)
annual_dojos_with_historical_data
メソッドで過去の活動履歴を正確に集計✅ Phase 5: 統計グラフの改善(完了)
annual_new_dojos_count
メソッドを追加db/dojos.yaml
がマスターデータであるため:update_db_by_yaml
で上書きされる)rails dojos:update_db_by_yaml
→ DB📊 実装効果
Action List
inactivated_at
カラムと基本機能の実装 3c24c7binactivated_at
カラム追加)note
カラムの型変更(string → text)active_at
,reactivate!
など)dojos:update_db_by_yaml
タスクへのinactivated_at
サポート追加 11c3d41inactivated_at
を抽出してYAMLに反映するRakeタスク実装 03997a9 047db74 2832230active_at
スコープを使用) 521cce6やらないこと
db/dojos.yaml
のnote
カラムに記載して、当該 Dojo の統計データの対応は別途 PR で対応する🧪 テスト方法
📚 関連ドキュメント
関連
inactivated_at
toDojo
model to replaceis_active
boolean column (#1726) #1731CSV
for specific year #1732