ブシトラの日記

エンジニア1年生の雑多記事

パーフェクトRails9章

9章

CI(継続的インテグレーション

テストを自動実行するための仕組みにも、GithubActionやCircleCiなどがある。

ymlファイルに色々書いてつけたしていくやつ。

 

Gemの定期実行

qiita.com

Gemに限らず、ライブラリをアップデートしてくれるやつ。

静的解析ツール

rubocop -a を脳死でやるのはよくない → 文法が変わったりしたのもなおされたら。。。?的な

pre-commitというのがあって、自動的に走らせることが出来る。現場にも導入したい。

rubocop:disable :all はあんまりよくないからちゃんと怒られたところだけにしよう。

 

brakemanは脆弱性発見ツールか。使ったことないな。

SimpleCovは現場で導入してかなりググったので割愛します。

 

 

パーフェクトRails8章

7章は省略。minitestだったのもあって。

 

真偽値を返したい時

ActiveRecord::Type::Boolean.new.cast を使う

qiita.com

 

サムネイルの生成

gem 'image_processing', '~> 1.2'

 

Active Storageの問題点

cacheとvalidationな

このgemでvalidation追加できる

gem 'active_storage_validations'

 

SearchKick

検索機能でElasticSearchはじめて。

https://qiita.com/kentosasa/items/f0af67f62f4692d68370

色々できるんやな。要勉強。

 

errorのところ

割愛

 

パーフェクトRails6章

6章

イベント管理のアプリを作る

 

OAuthとは

三者となるアプリケーションに対して安全にアクセス制限を提供するためのプロコトル。

qiita.com

 

Github認証

omniauthでGoogleを使う。

!!session[:user_id]

これと 

session[:user_id].present?

て同じだよな。。二重not、意味はわかるがなんか気持ち悪い

def self.find_or_create_from_auth_hash!(auth_hash)
provider = auth_hash[:provider]
uid = auth_hash[:uid]
nickname = auth_hash[:info][:nickname]
image_url = auth_hash[:info][:image]

User.find_or_create_by!(provider: provider, uid: uid) do |user|
user.name = nickname
user.image_url = image_url
end
end

これわかりやすいよねー。シンプルだ

 

ログインとログアウトは何度もやったので割愛します

 

Eventモデルの作成

resource コマンド久しぶりに使ったなw

Time.zone.nowのほうが一般的で、Time.nowなどの組み込みクラスは非推奨

datetime_select 久しぶり

 

下の #errors で設定したところに

- now = Time.zone.now

%h1.mt-2 イベント作成

= form_with(model: @event, class: "form-horizontal") do |f|
#errors
.form-group
= f.label :name
= f.text_field :name, class: "form-control"
.form-group
= f.label :place
= f.text_field :place, class: "form-control"
.form-group
= f.label :start_at
%div
= f.datetime_select :start_at, start_year: now.year, end_year: now.year + 1
.form-group
= f.label :end_at
%div
= f.datetime_select :end_at, start_year: now.year, end_year: now.year + 1
.form-group
= f.label :content
= f.text_area :content, class: "form-control", row: 10
.form-group
= f.label :image
= f.file_field :image, class: "form-control-file"
= f.submit class: "btn btn-primary"

 

下記が失敗した時

def create
@event = current_user.created_events.build(event_params)

if @event.save
redirect_to @event, notice: "作成しました"
end
end

create.js.erbがrenderしてnewのところに挿入される(views/application/_errors.html.haml は省略)

document.getElementById("errors").innerHTML = "<%= j render("errors", errors: @event.errors) %>"

これ、RUNTEQでもやったけど当時は意味わからんかったけど流石にわかるなー。

 

これをSJRと言うのは知らなかったw

ajaxでぬるぬる動くのはいいな。ただこれは、Vue.jsとかと対立するらしい(ならVueでよくね?ってなるのね)

 

あとは省略。

 

イベント参加、退会機能、かなり濃かった

 

パーフェクトRails5章

5章

ActiveJob

非同期処理のための機能

railsguides.jp

 

performメソッドに実行したい処理を記載する

→ performはActiveJobが提供してくれているメソッド

 

(pry-railsがインストールされていることを前提に)

 ls AsyncLogJob 等で 確認すると、ClassMethodsに生えてることがわかる

  

perform_nowは同期的、laterは非同期的らしい

qiita.com

 

wait引数 → 10分待って

wait_until引数 → 明日のX時に実行

のように setのあとに引数がとれる。詳しい内容は前述のRailsガイドに乗ってる

 

qiita.com

 

Railsを止めてる時も、裏で処理を行いたい時に使うイメージ。実務でがっつり触る時にまたキャッチアップする。

 

ActiveStorage

個人的に使ったことがあるので省略。
Validationを自前で実装するのきつすぎた思い出

 

ActionMailer

railsguides.jp

 

コントローラーと似ていて、paramsかRUNTEQオブジェクトを経由してインスタンス変数経由してビューに渡す。

 

これもActiveJobが関わってくる (deliver_now) とか

これも一回実装したことあるので、詳しくは詳細。SendGridは触ったことないけど。

 

AcitonMailbox

あるメールアドレスにメールを送信されたときに何かをする、など。
自動送信メールへの返信などで使われる。

ActiveJobとActiveStorageが必要。

railsguides.jp

ActionText

「HTMLやCSSの知識がなくても文章の修飾や画像の挿入などができるエディタ」
が提供されるということらしい

 

一回 gemの「wysiwyg-rails」でやったことあったけど、ActionText使ったほうがいいのか

railsguides.jp

とはいえ、あんまり使うことはなさそうかな?

 

Action Cable

省略。あとでやる

 

 

パーフェクトRails4章

メモとして書いていく。

 

4章

Webpackerとは何か

JSをはじめとした様々な形式のファイルをまとめて管理するモジュールハンドラーのこと。 複数のJSモジュールをまとめて一つのファイルにすることができ、まとめる段階でJSのコンパイルや圧縮などの処理を実行している。 フロントエンド開発ではwebpackを使って様々なファイルを1つにまとめることでリリース用のファイルを作成する手法となっている。

 

 参考資料程度に(5.1内容だから信憑性は知らん)

www.sejuku.net

 

4-2-1 Sprockets によるCSSの役割

require tree . → 引数で指定したディレクトリやそのディレクトリのは以下のSCSSやCSSファイルの読み込みの設定を行う

 

require self → 自身のファイル内に記述されたCSSの内容を読み込みを行う

 

SCSSとCSSについて

エントリーファイルであるapplication.cssがrequireして読み込んでいる(compile)ので、

CSSに変換されるっぽい。

 

curl -s http://localhost:3000/users | grep stylesheet (usersは変えてね)

 

で、 下記の様なフィンガープリントの値がでたら

 

<link rel="stylesheet" media="all" href="/assets/application.debug-88d35dca1386421a4b8b5fc7932567421d9ba35eaa5ff8669e91a3d6b8e2fea5.css" data-turbolinks-track="reload" />

 

http://localhost:3000/assets/application.debug-88d35dca1386421a4b8b5fc7932567421d9ba35eaa5ff8669e91a3d6b8e2fea5.css

 

みたいにアクセスすると見れたりする

qiita.com

 

4-3 Railsに組み込まれているJavaScriptの機能

rails-ujs

<%= form.submit data: { confirm: '実行していいですか?', disable_with: '送信中' } %>

二重登録防げる。これは、rails-ujsの機能。動的にうにょうにょ動くのはこの子のおかげ

 

ajaxのxhrとかも。

 

www.inodev.jp

 

 

パーフェクトRails3章

メモとして書く。

 

minitestのところはあんまり興味ないので飛ばした。RSpec大抵使ってるしなどこの現場も。

 

Rack

Rackは、RubyのWebアプリケーションに対して、モジュール化された最小限のインターフェイスを提供して、インターフェイスを広範囲に使えるようにします

Rails と Rack - Railsガイド

Rackとはって何回か調べたけど、毎回理解できずにふんわり終わる

qiita.com

 

https://miro.medium.com/max/1400/1*J0CaowAvt3zAJw294UNl6A.jpeg

 

うーん、読んだけどむずいな。自分でミドルウェア追加して色々変えられることはわかったが、どういう時に必要になるのか腑に落ちてないからまた読む。

 

DB管理

複数DB設定とかは興味深い。やりたいことから逆引きして調べたほういいな。

ridgepole便利すぎて普通のmigration忘れてそう

 

秘密情報を管理する

6.0からもっと便利になったのか。5.2までは知ってたけど。。。

 

CSP、便利そう。

パーフェクトRails2章

メモしてく 。当然なところとかは飛ばして、たしかになーとか、所見のところだけ書きます。

 

 scopeにfind_byを定義するとnilが返らない

なるほど?クラスメソッドにするのか、scopeにするのかはしっかり考えないとねー

qiita.com

 

 default_scopeは影響範囲多すぎて使いたくないって思ったけど、本でも同じこと言ってる。

 

qiita.com

validationの save! とかの説明もちゃんと載ってていい。。「例外を発生させること自体が例外」っていう話聞いたことあるけど、 destroy! とdestory って現場によって使い方異なるよね

 

railsguides.jp

カスタムvalidationって validatesじゃなくて validateなの所見だと間違えるよねマジ。

 

コールバックのスキップ

railsguides.jp

概念は知ってるが使ったことがあまりない。。

 

enum

enumの 要素を 例えば、 draft! ってやると、たとえpublishでも強制上書きになるのかー。毎回変更してsaveする必要ないしデバッグのときに時間短縮になりそう。

 

結構知ってること多かったけど、細かく書いてあっていい。