2. アプリケーションで定義したクラスを直接使わない app/models 下のモデルクラスなど、マイグレーションファイルの外部に定義している、将来実装を変更する可能性のあるクラスを直接利用することは禁じ手と考えた方がいいでしょう。 なぜかというと、マイグレーションファイルというのは、未来にわたって末永く、書いたときの意図どおりに動く 必要があるからです。言い換えれば、マイグレーションファイルのコードは、マイグレーションファイル内で閉じていて、凍結されていることが望ましい のです。 このような単純な例でさえ、将来、User::DEFAULT_TEL の値︵実装︶が変更されてしまったら、その時点で "だいぶ以前の古いマイグレーション" になっているこのコードの挙動も同時に変わってしまいます。マイグレーションコードで過去の定数値を使うように変更する、といった対応をし忘れれば、例えば、本番DBと
![マイグレーション作成時のチェックポイント - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/c94857f963b9e641f5da7df86a446d4916aef4a2/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JUUzJTgzJTlFJUUzJTgyJUE0JUUzJTgyJUIwJUUzJTgzJUFDJUUzJTgzJUJDJUUzJTgyJUI3JUUzJTgzJUE3JUUzJTgzJUIzJUU0JUJEJTlDJUU2JTg4JTkwJUU2JTk5JTgyJUUzJTgxJUFFJUUzJTgzJTgxJUUzJTgyJUE3JUUzJTgzJTgzJUUzJTgyJUFGJUUzJTgzJTlEJUUzJTgyJUE0JUUzJTgzJUIzJUUzJTgzJTg4JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmcz01YmIxZTIzMWRlN2ExY2I3NzcwNmI5MTkzYmNmM2ZkZQ%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBuYXkzJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz01NGQxNjhlZTE1MDc3Njc3ZDRlNWRlOWQ3NTI5Njk1Mw%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D0de4962231b36acaf41ef293c80a5355)