パーフェクトRails9章
9章
CI(継続的インテグレーション)
テストを自動実行するための仕組みにも、GithubActionやCircleCiなどがある。
ymlファイルに色々書いてつけたしていくやつ。
Gemの定期実行
Gemに限らず、ライブラリをアップデートしてくれるやつ。
静的解析ツール
rubocop -a を脳死でやるのはよくない → 文法が変わったりしたのもなおされたら。。。?的な
pre-commitというのがあって、自動的に走らせることが出来る。現場にも導入したい。
rubocop:disable :all はあんまりよくないからちゃんと怒られたところだけにしよう。
brakemanは脆弱性発見ツールか。使ったことないな。
SimpleCovは現場で導入してかなりググったので割愛します。
パーフェクトRails8章
7章は省略。minitestだったのもあって。
真偽値を返したい時
ActiveRecord::Type::Boolean.new.cast を使う
サムネイルの生成
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とは
第三者となるアプリケーションに対して安全にアクセス制限を提供するためのプロコトル。
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
非同期処理のための機能
performメソッドに実行したい処理を記載する
→ performはActiveJobが提供してくれているメソッド
(pry-railsがインストールされていることを前提に)
ls AsyncLogJob 等で 確認すると、ClassMethodsに生えてることがわかる
perform_nowは同期的、laterは非同期的らしい
wait引数 → 10分待って
wait_until引数 → 明日のX時に実行
のように setのあとに引数がとれる。詳しい内容は前述のRailsガイドに乗ってる
Railsを止めてる時も、裏で処理を行いたい時に使うイメージ。実務でがっつり触る時にまたキャッチアップする。
ActiveStorage
個人的に使ったことがあるので省略。
Validationを自前で実装するのきつすぎた思い出
ActionMailer
コントローラーと似ていて、paramsかRUNTEQオブジェクトを経由してインスタンス変数経由してビューに渡す。
これもActiveJobが関わってくる (deliver_now) とか
これも一回実装したことあるので、詳しくは詳細。SendGridは触ったことないけど。
AcitonMailbox
あるメールアドレスにメールを送信されたときに何かをする、など。
自動送信メールへの返信などで使われる。
ActiveJobとActiveStorageが必要。
ActionText
「HTMLやCSSの知識がなくても文章の修飾や画像の挿入などができるエディタ」
が提供されるということらしい
一回 gemの「wysiwyg-rails」でやったことあったけど、ActionText使ったほうがいいのか
とはいえ、あんまり使うことはなさそうかな?
Action Cable
省略。あとでやる
パーフェクトRails4章
メモとして書いていく。
4章
Webpackerとは何か
JSをはじめとした様々な形式のファイルをまとめて管理するモジュールハンドラーのこと。 複数のJSモジュールをまとめて一つのファイルにすることができ、まとめる段階でJSのコンパイルや圧縮などの処理を実行している。 フロントエンド開発ではwebpackを使って様々なファイルを1つにまとめることでリリース用のファイルを作成する手法となっている。
参考資料程度に(5.1内容だから信憑性は知らん)
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" />
みたいにアクセスすると見れたりする
4-3 Railsに組み込まれているJavaScriptの機能
rails-ujs
<%= form.submit data: { confirm: '実行していいですか?', disable_with: '送信中' } %>
二重登録防げる。これは、rails-ujsの機能。動的にうにょうにょ動くのはこの子のおかげ
ajaxのxhrとかも。
パーフェクトRails3章
メモとして書く。
minitestのところはあんまり興味ないので飛ばした。RSpec大抵使ってるしなどこの現場も。
Rack
Rackは、RubyのWebアプリケーションに対して、モジュール化された最小限のインターフェイスを提供して、インターフェイスを広範囲に使えるようにします
Rackとはって何回か調べたけど、毎回理解できずにふんわり終わる
うーん、読んだけどむずいな。自分でミドルウェア追加して色々変えられることはわかったが、どういう時に必要になるのか腑に落ちてないからまた読む。
DB管理
複数DB設定とかは興味深い。やりたいことから逆引きして調べたほういいな。
ridgepole便利すぎて普通のmigration忘れてそう
秘密情報を管理する
6.0からもっと便利になったのか。5.2までは知ってたけど。。。
CSP、便利そう。
パーフェクトRails2章
メモしてく 。当然なところとかは飛ばして、たしかになーとか、所見のところだけ書きます。
scopeにfind_byを定義するとnilが返らない
なるほど?クラスメソッドにするのか、scopeにするのかはしっかり考えないとねー
default_scopeは影響範囲多すぎて使いたくないって思ったけど、本でも同じこと言ってる。
validationの save! とかの説明もちゃんと載ってていい。。「例外を発生させること自体が例外」っていう話聞いたことあるけど、 destroy! とdestory って現場によって使い方異なるよね
カスタムvalidationって validatesじゃなくて validateなの所見だと間違えるよねマジ。
コールバックのスキップ
概念は知ってるが使ったことがあまりない。。
enum
enumの 要素を 例えば、 draft! ってやると、たとえpublishでも強制上書きになるのかー。毎回変更してsaveする必要ないしデバッグのときに時間短縮になりそう。
結構知ってること多かったけど、細かく書いてあっていい。