woshidan's loose leaf

ぼんやり勉強しています

2021-01-01から1年間の記事一覧

Ruby on Rails + rails-ujsを利用している場合のXSS対策について

この記事は情報セキュリティアドベントカレンダーの12日目の記事です。 開発組織でセキュリティをある程度のレベルに担保するための有効な施策として既にセキュリティ対策が施されているフレームワークを利用するようにする、というものがあります。 自分の…

オブジェクト指向設計実践ガイド ~Rubyでわかる進化し続ける柔軟アプリケーションの育て方の7~9章を読んで

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者:Sandi Metz技術評論社Amazon 上記の本の7~9章を読んで印象に残った部分をまとめました。 7章 継承の手法を使い「ロール(役割)」を共有する解決法につい…

オブジェクト指向設計実践ガイド ~Rubyでわかる進化し続ける柔軟アプリケーションの育て方の4~6章を読んで

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者:Sandi Metz技術評論社Amazon 上記の本の4~6章を読んで印象に残った部分をまとめました。 4章 オブジェクト指向アプリケーションは「クラスから成り立つ」…

オブジェクト指向設計実践ガイド ~Rubyでわかる進化し続ける柔軟アプリケーションの育て方の2~3章を読んで

オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方作者:Sandi Metz技術評論社Amazon 上記の本の2~3章を読んで印象に残った部分をまとめました。 2章 変更が簡単であることの定義 変更は副作用をもたらさない 要…

ユーザーストーリーマッピング 13章から18章を読んで

ユーザーストーリーマッピング作者:Jeff PattonオライリージャパンAmazon 上記の本を読んでいて、13章から18章まで各章ごとに印象に残ったことをメモりました。 13章 オポチュニティから始める 浮かんだばかりの大きなアイデアはエピックと呼んだりオポチュ…

ユーザーストーリーマッピング 7章から12章を読んで

ユーザーストーリーマッピング作者:Jeff PattonオライリージャパンAmazon 上記の本を読んでいて、7章から12章まで各章ごとに印象に残ったことをメモりました。 7章 より良いストーリーテリングのために 以下のようなシンプルなテンプレートを使って会話を始…

ユーザーストーリーマッピング 0章から6章を読んで

ユーザーストーリーマッピング作者:Jeff PattonオライリージャパンAmazon 上記の本を読んでいて、0章から6章まで各章ごとに印象に残ったことをメモりました。 0章 まず最初に読んでください 言葉で表現された文章が正確な製品の実態を示すものではない スト…

Ransackで関連モデルの検索を行う

Ransackでは特定のモデルのカラムだけでなく、そのモデルと関連する他のモデルのカラムでも検索を行うことができる。 例えば、Userモデルに1対多で紐づくCommentモデルのcontents属性で検索したい場合 <%= search_form_for(@q, url: user_search_path) do |f…

メールの仕組みとDNSのMXレコードについて

ちょっと仕事で調べることがあったのでメモ。 メールサーバには2種類があって、MTA(メール転送サーバ)とMUA(メールユーザエージェント)があって、メール転送サーバはDNSが持っているMXレコードのアドレスのサーバにメールを転送する。 このメールを転送して…

RansackでRailsの検索を楽に作る

Railsで開発していると検索フォームを作成することがよくあると思います。 今日は、そのときよく使われるRansackについてまとめておこうと思います。 基本的な使い方 def index @q = User.ransack(params[:q]) @users = @q.result end のように特定のパラメ…

Rails6.1になってコントローラのテンプレート指定に拡張子をつけることが推奨されなくなった

Rails 6.1以上になってCSVなどをダウンロードさせるコントローラのアクションに def download render( csv: 'users_list', template: 'users/download.csv.ruby' ) end のように書いているとRSpecの実行時に DEPRECATION WARNING: Rendering actions with '.…

Enumerizeでenum値を扱う

Railsのモデルでenum値を扱うとき、enumerizeというgemを使うと便利です。 # Gemfile gem 'enumerize' class Task extend Enumerize enumerize :status, in: { pending: 0, todo: 1, done: 2 } end と書くと、 Task = Task.new(status: 'pending') #=> valid…

定数値を環境ごとに分岐したいだけならRails.env.xxx? やconfig/environments以下のファイルに値を書くより環境変数にくくり出した方がよさそう

Railsで開発していると if Rails.env.production? # production環境用の処理 elsif Rails.env.staging? # staging環境用の処理 else # それ以外の環境用の処理 end という風に環境ごとの処理を書いたり、config/environments以下のproduction.rbやstaging.rb…

画面の横幅が大きい(小さい)ときのみ要素を表示する

画面を作成していると単純に要素を横に伸ばしたりでスマホとPCの表示が作れず、要素の順番や配置が変わってしまうことがあります。 その度合いがまるきり別物ならPC版とスマホ版で別のテンプレートを使えばよさそうですが、順番が数カ所違う程度ならスマホ版…

少しだけ動作が速くなるコードの書き方3つ

レコードがあることを条件にしたいとき、findの代わりにexists?を使う if User.find_by(email: "...") # something.todo end のとき、findやfind_byではActiveRecordのインスタンスが生成されてしまう分遅いので、存在確認をしたいだけなら下記のようにexist…

Railsのuniquenessバリデーションについて

uniquenessバリデーションを使うと、その項目の中で一意であるようにバリデーションがかけられます。 class User validates :email, uniqueness: true end とすると、emailはUserの中で一意となるようにRails側でバリデーションをかける。 これを、Userが会…

RSpecでテストデータ用にファイルを読み込む

RSpecでテスト用のファイルを読み込む RSpecでテスト用のファイルを読み込む際はデフォルトでは spec/fixtures/files にファイルを置いて file_fixture("example.txt").read とすると、ファイルの中身がspec中で呼び出せる。 ファイル中にHTMLやJSONのレスポ…