1. tanaken on Rails
  2. #029: non-null modifier for ..
2024-07-21 11:52

#029: non-null modifier for migrations, default script folder and generator, sessions generator

サマリー

レールタイズの変更により、基本的な認証の仕組みを生成するレールズジェネレートセッション、スクリプトファイルを生成するレールズジェネレートスクリプト、およびマイグレーションファイルでヌルフォルスのオプションを指定するビックリマーク修飾詞機能の3つのプルリクエストを紹介いたします。

00:01
こんにちは、第29回のtanaken on Railsです。
今週も3つのプルリクエストをピックアップして紹介したいと思います。
基本的な認証の仕組みを生成するレールズジェネレートセッション
1つ目、add basic sessions generator。
このプルリクエストは、レールタイズに関する変更です。
レールズジェネレートセッションというコマンドで、
基本的な認証の仕組みを生成できるようになりました。
コマンドを実行することによって、次のファイルが生成されます。
モデルズ配下のファイルが3つ、
カレントモデル、ユーザーモデル、セッションモデル、この3つがまず生成されるのと、
あとはセッションズコントローラーが生成されます。
あとは、ビューファイルですね。
ビューズセッションズニュー、セッション作るログイン画面が生成されると。
あとはモデル、ユーザーモデルとセッションモデルは、
それぞれDBとつながるモデルで、
マイグレーションファイル、クリエイトユーザーズとクリエイトセッションズの
マイグレーションファイルもそれぞれ生成されます。
カレントモデルに関しては、DBとひも付かないモデルで、
なのでテーブルは作らないという感じですね。
現在のセッションを把握するためのモデルという感じですね。
はい、こんな形で基本的なログインの仕組みというのが
ひな形が生成されるようになったよと。
プリリクエストの注意書きというか、
これDHHさんのプリリクエストなんですけれども、
プリリクエストの本文の記載には、
これはあくまで基本的な認証の仕組みを提供しているだけなので、
認証におけるあらゆる関心ごとに対応することを目的としたものではありませんよと、
いうことが明記されています。
はい、なのでマジックリンクとか、パスキーをやりたいんだとか、
二要素認証をやりたいんだとか、
そういう機能を実装するつもりは今のところないですよと、
本当に基本的な認証の仕組みだけ提供して、
基本はこういうふうにできるよというのを示すためのものだよということを言ってますね。
続いて二つ目のプリリクエスト、
スクリプトファイルを生成するレールズジェネレートスクリプト
Add Script Folder and Generatorですね。
こちらもレールタイズに関する変更です。
Rails Generate Script引数にファイル名を渡すことで、
スクリプトファイルを生成できるようになりました。
日々アプリケーションの運用をする中で、
一度限りのデータ移行をする、データを移し替えたり更新したりするスクリプトを作ったりとか、
不要になったデータを一括で削除するようなスクリプトを作るというシーンはよくあると思います。
ですけれども、これまでのRails、
現状のRailsではそういったスクリプトを置く場所が明確にはなかったと。
この件についてDHHさんが過去に、
それらのスクリプトファイルの置き場をスクリプトディレクトリにするよということを明言していたというのがあります。
今回のプレリクエストでは、もともとDHHさんが発言していた内容に基づいて、
Rails Generate Scriptというコマンドで、スクリプトディレクトリ配下にスクリプトファイルが作られるというような実装になっています。
過去の経緯を見ると、僕はあまり詳しくないんですけれども、
スクリプトファイルをスクリプトディレクトリに置いていたような時期もあったのかもしれないですね。
DHHさんの発言を見ると、デフォルトの置き場所として、スクリプトディレクトリを元に戻すよ、
ブリングバックと言っているんですよね。
もともとスクリプト置き場として、あるいは何かの場所として、スクリプトというディレクトリは何か使っていたのかもしれないですね。
なので、サポートブリングバックというふうに表現しているので、またスクリプトというディレクトリがスクリプト置き場としてはいいよね、みたいなことになったのかなと想像します。
知らんけど。
このコマンドの使い方については、先ほど紹介した通りなんですけれども、
Rails Generate Script名を指定して生成すると、スクリプトディレクトリ配下にスクリプトファイル名.rbという形でスクリプトファイルができると。
実行するときはもちろん、Rubyスペーススクリプトスラスクリプトファイル名.rbって、普通にRubyスクリプトを実行するように実行してくれればいいですよというふうに書いてあるんですけど。
コマンドで生成するときに、スクリプトディレクトリ配下を階層構造にしたいこともあるよねと。
なので、ファイル名として渡す引数のところに、ディレクトリスラという形で、ディレクトリスラッシュファイル名という形で指定することもできるよということもこの使い方には書いてあります。
ということで、ファイル名あるいはディレクトリスラッシュファイル名という形で引数指定してあげるとスクリプトファイルができるよと。
そんな感じでございます。
最後3つ目のプルリクエストです。
ヌルフォルスのオプションを指定するビックリマーク修飾詞機能
こちらは、add not null modifier to migrationsというプルリクエストです。
こちらもレールタイズに関する変更です。
レールズジェネレートマイグレーションというコマンドありますね。
マイグレーションファイル名を指定して、あとはカラムとかその型を指定して実行することができるコマンドですね。
このコマンドにおいてカラム名とかを指定することもできるんですけど
そのカラムに対してビックリマークの修飾詞を使うことで
このカラムはヌル禁止ですよと、ノットヌルですよということをコマンドで示すことができるようになったと。
そのコマンドを実行すると、生成されるマイグレーションファイル内で
ヌルフォルスのオプションが指定されるようになるということですね。
そういうコマンドのビックリマーク修飾詞がサポートされたよということですね。
具体的な使い方をやってみましょう。
usersというテーブルを作りたいと。
カラムがストリングのEmailアドレスというカラムと
パスワードダイジェストというカラム、両方ともストリングのカラムを持っている
usersというテーブルを作りたいとしましょうと。
Emailに関してはストリングでかつユニーク。
もちろんノットヌルにしたい、今回は。
パスワードダイジェストに関してもノットヌルにしたいと。
そういう条件があってコマンドを実行すると。
これまでビックリマーク修飾詞がサポートされていないときは
Rails Generate Migrations、Create Users、
カラム名としてはEmail Address、コロン、ストリング、コロン、ユニーク。
パスワードダイジェスト、コロン、ストリングという形で
これもストリングですよと。
Email Addressに関してはユニークですよというのを指定して
ジェネレートして。
ジェネレートされたマイグレーションファイルに対して
ノットヌル制約はついていないので
手書きでノットヌルフォルスを書き加えるというような感じだったんですけども
今回のビックリマーク修飾詞がサポートされたので
Rails Generate Migrations、Create Users、
Email Address、コロン、ストリング、ビックリ、コロン、ユニーク、
パスワードダイジェスト、コロン、ストリング、ビックリという形で
型の名前、カラムの型、タイプのストリングだったり
インテジャーとかもあると思うんですけど
ストリング、今回でいうと
Email Address、コロン、ストリングの後にビックリ
パスワードダイジェスト、ストリングの後にビックリという形で
型名の後にビックリマークの修飾詞を付けることで
マイグレーションファイルが
カラムに対してヌルフォルスのオプションを指定してくれるようになるよと
そんな感じでございます
便利ですね
あんまり正直Rails Generate Migrationコマンド
そんなにカラムを指定して生成することないので
僕はジェネレートした後
マイグレーションファイルを書き換えることが多いんで
あんまり使わんかなとも思いつつ
自動的にテーブルとかを一気に作るような
自動で一気なテーブルを作りたいみたいな
テーブルというかマイグレーションファイルの生成から自動化したい
みたいなニーズがあったときには
このビックリマークがあることで
ヌルフォルスも指定できるので
そういうニーズ、そういうシーンでは便利なのかなと思いました
あんまり僕はそういうシーンないですけど
マイグレーションファイル自体の生成を
コマンドとして作っておいて
一気にマイグレーションファイルを作るみたいな
そういうことですね
便利なのかなと思いますね
ということで今回はレールタイズに関する変更を
3つ紹介しましたということで
じゃあ今週はここまでとします
ではまた来週バイバイ
11:52

コメント

スクロール