ナンバーパラメータ

昨日ruby2.7から入る新機能の1つとして紹介があったナンバーパラメータについて、試せていなかったので試しました!

 

ナンバーパラメータとは

ブロックの仮引数を宣言しなくても_1、_2、_3、、、というように`_引数の番号`で参照できる機能です。

 

最初は`@引数の番号`となる予定だったそうですが、インスタンス変数と似てて紛らわしいので`_引数の番号`となったらしいです。

 

 

irb(main):009:0> [1, 2, 3].each { |i| puts i }

1

2

3

=> [1, 2, 3]

 

 

上のeach文が下のようにかけます。

 

[1, 2, 3].each { puts _1 }

1

2

3

=> [1, 2, 3]

 

 

 

感想その他

慣れたら便利に感じそうです!!

 

 

Ruby Hack Challenge Holiday #9 Ruby 2.7 + 年末LT大会へ参加した

本日はRuby Hack Challenge Hpliday #9 Ruby 2.7 + 年末LT大会へ参加しました!
以下がイベントリンクです。
https://rhc.connpass.com/event/155899/

 

まずruby2.7の新機能について紹介していただき、その後各自作業を進めました。
やっと自分もruby 2.7.0から入る新機能を試すことができました!
新機能がたくさんあり、何を試すか迷ったのですが、とりあえずirbを試してみることにしました!

irbの2.7から入る新機能は以下です!

  • オートインデント
  • 色付き
  • 前の行へカーソル移動できる
  • ↑キー選択で複数行まとめて履歴戻れる

gyazo.com

 

そのあとはパターンマッチのスライドも読み返してみました。

speakerdeck.com

 

その他、キーワード引数の扱いが変わる話、ナンバーパラメータが@じゃなくて_を使うように変更された経緯、ヒープを圧縮するためのGC.compactが追加された話などなど、とても興味深い内容が盛りだくさんでした!!

 


感想その他

本日ruby 2.7.0-preview3を入れた際はいつも通りHomebrewから入れてしまいましたが、Cからビルドして動かせるようにする方法も以下のリポジトリに書いてあるので、その方法も試してみたいです!
Rubyのビルド方法以外にもrubyをハックするために役立つ内容がたくさん書いてあります!!

github.com

rails5系以降はtimestampがデフォルトてNOT NULLだった

タイトル通りなのですが、rails5系以降はtimestampがデフォルトてNOT NULLだということを今日知りました。

 

4系まではnull: falseをつけないとNOT NULL制約を付けることができなかったようですが挙動が変わっていたようです。

 

 

こちらの記事に詳しく書かれておりました。

https://y-yagi.tumblr.com/post/137935511450/rails-5から導入されたmigration-versioingについて

 

 

 

感想その他

何もなくても制約つくのはありがたいですが少しわかりづらいw

CloudFrontのキャッシュ削除

今までCloudFrontのキャッシュ削除をしてくれるコマンドに頼っておりましたが、なぜか変更が反映されない現象が起きました。

そこでAWSのマネジメント画面から削除したのでその手順についてかいておきます!

 

やり方

1. AWSコンソールからCloudFrontのサービスを選択

 

2. 対象のリポジトリを選択

 

3. Invalidationsタブを選択

 

4. Create Invalidationsを選択

 

5. 入力欄に/*を入力し、 Invalidateをクリック

 

ここでHTMLファイルを指定したら消えなかったためキャッシュは変更があったHTML以外にもあるようです。

 

 

感想その他

キャッシュはどこに溜まるのか、何者なのか、よくわっていない。。

 

業務エラーとシステムエラー

エラーハンドリングするにあたって、まずは業務エラーとシステムエラーを分けて考える必要がありました。

両者の違いについてメモしておこうと思います!

 

業務エラー

バリデーションに引っかかるような、正しい値に直せば対応できるエラー。

 

 

システムエラー

DBが落ちてる、通信できない、データ不整合などのクライアント側で対応できないエラー。

 

 

感想その他

この2つをきちんと区別した上で、どんなエラーとして返すのか、返さないのか考えていかなくては!!

DBで設定できる制約

DBで設定できる制約について調べてみました〜

 

unique制約

同じ値は登録できない制約です。

 

 

not null制約

nullを登録できない制約です。

 

 
primary key制約

主キーを設定する制約です。

null、同じ値が保存できなくなります。

railsだとidにデフォルトでprimary key制約がつきます。

 

 

default制約

値を指定しなかった際のデフォルト値を設定する制約です。

 

 

foreign key制約

参照先のテーブルに無い値は保存できないようにする制約です。

 

 

感想その他

各種制約の詳しい内容についても後日調べたいです!

 

 

t.referencesとforeign_key: true

 テーブルを作成する際、外部キー周りの設定でt.referencesとforeign_key: trueが何をしてくれるのか・してくれないのか曖昧だったので調べました。

 

 t.references
  • 参照モデル名_idというカラム名で参照モデルのidと紐付けてくれる
  • これだけだと参照にないidでも登録できてしまう

 
foreign_key: :true

  • 外部キー制約をつけてくれる
  • dependent: :destroyつけないと親レコード消せない
  • indexが自動でつくので書かなくていい
  • 親レコードにない値は参照カラムに登録できない
  • 値がNULLでも挿入できてしまうため、別途null: :falseつける必要がある

 

感想その他

細かく把握しておかないといけないなと思いました。