Rails: Strong Parameterのpermit/require/fetchメソッドまとめ
permitについて permitは許可する要素を指定するメソッドです。 permitによって生成されたparams(ActionController::Parameters)のpermitted属性はtrueになります…
permitについて permitは許可する要素を指定するメソッドです。 permitによって生成されたparams(ActionController::Parameters)のpermitted属性はtrueになります…
基本構文 appオブジェクトを利用することでrails console上からControllerへリクエストを送れます。 基本構文は以下の通りです。 ### パラメーターなしの場合 $ app.[リクエストメソッド] […
URLヘルパーについて URLヘルパーはxxx_path、xxx_urlの形式でアプリケーションのパスを表現できるようにしてくれるRailsのヘルパーメソッドです。 URLヘルパーはコントローラ、ヘルパー、ビュー以外の箇…
Rails上でHTTPヘッダを取得する方法 RailsアプリケーションでHTTPヘッダの情報を取得する場合はrequest.headersあるいはrequest.envを利用します。 ### コンソール $ curl h…
今回のゴール 実装の仕様について バックエンド関連 JWT関連 API関連 下準備 ユーザーの作成 認証対象のユーザーを作成します。ActiveModel::SecurePassword::ClassMethodsのドキ…
前回、JWTの概要と構成要素(ヘッダ/ペイロード/署名)を理解するでJWTの概要について紹介しました。 今回はruby-jwt(jwt gem)を利用してペイロードをJWTにエンコード、JWTをペイロードにデコードする方…
JWTについて JWTはJSON Web Tokenの略で、署名されたJSON形式のクレーム(Claim、情報、内容、属性情報)をURLセーフな形で表現する際のトークンの仕様です。JWTの仕様はRFC 7519で定義され…
OpenSSL::PKey::RSAクラスを利用してRSA暗号の秘密鍵と公開鍵の作成方法について、今回は以下の2つの方法を紹介します。 乱数を利用する方法 OpenSSL::PKey::RSAのgenerateメソッドを…
オリジン間リソース共有 (Cross-Origin Resource Sharing, CORS)において、Rails APIとフロントのfetch API間でCookieを送受信できるようにする方法について紹介します。…
「任意のドメインに接続したリクエストをローカル環境で起動しているWebアプリケーションへプロキシする」というnginxを、Docker環境に構築する方法について紹介します。 なお、http://localhost:300…
ローカル環境において、ドメイン名でWebアプリケーションに接続できる「nginx + Webアプリ」のDocker環境構築手順について紹介します。 なお、Docker ComposeでWebアプリケーションが起動できる前…
externalなDockerネットワークを共有することで、異なるDokcer環境でもコンテナ間の通信ができます。 Dockerネットワークを利用したコンテナの通信方法の詳細はDockerネットワークとコンテナ名で実現す…
フロントエンドとバックエンドが別々のDocker環境で管理されている場合など、異なるDocker環境どうしでアクセスをしたい時があります。 Dockerのネットワーク機能を利用することでコンテナ間の通信をカスタマイズでき…
http://localhost:3000で立ち上がっているローカル環境のRailsアプリケーションへ、任意のホスト名でアクセスできるようにする方法について紹介します。 今回は例としてhttp://api.local.e…
前回、RailsでセッションとCookieを操作する方法でRailsにおけるセッションとCookieの操作方法について紹介しました。 前回の記事のRailsアプリケーションはモノリス前提でしたが、今回はAPIモードでCo…
セッションとはステートレスなHTTP通信においてステートフルを実現するための情報、Cookieとはブラウザに用意されたデータの保存領域のことをいいます。 セッションの保存先にはいくつか候補がありますが、例えばセッションを…
前回、【Ruby】カスタム例外の作成と利用に関する基礎知識でRubyにおけるカスタム例外の基礎知識について紹介しました。 今回はRailsアプリケーションでカスタム例外を利用する際の定義パターンについて紹介します。 クラ…
カスタム例外を作成する際はStandardErrorを継承する カスタム例外はStandardErrorを継承することで定義できます。 以下は一番シンプルなカスタム例外クラスの定義方法と利用方法の例です。 example…
API開発において特定のIPアドレスからのアクセスのみ許可したいというケースがあります。 今回はプライベートIPアドレスからのリクエストのみ許可する非公開APIの開発を例にとり、APIリクエストにIPアドレスの制約をつけ…
Railsアプリケーションの環境変数の設定方法は、Rails標準のconfig_for、global gem、config gemの3つが主流です。 今回はそれぞれのケースでの環境変数の設定方法について紹介します。 co…
then(yield_self)について thenはレシーバをブロックの引数として受け取り、ブロックの評価をレシーバに反映させるメソッドです。yield_selfはthenのエイリアス(等価のメソッド)です。 ### t…
map(collect) mapは各要素を変換して新たな配列を作成するメソッドです。collectはmapのエイリアス(等価のメソッド)です。 オブジェクトのプロパティや配列の要素から新たな配列を作成したい場合にmapが…
filter(select)について filterは条件を満たす全ての要素を取り出すメソッドです。selectはfilterのエイリアス(等価のメソッド)です。filterの例は以下の通りです。 > [1, 2, …
map(collect)について mapは各要素を変換して新たな配列を作成するメソッドです。collectはmapのエイリアス(等価のメソッド)です。 オブジェクトのプロパティや配列の要素から新たな配列を作成したい場合に…
concatメソッド concatは配列を自身の末尾に破壊的に連結するメソッドです。 concatを利用した配列の結合は以下の通りです。 > array1 = [‘a’, ‘b’] > array2 = [‘…
Railsアプリケーションで『nilの場合は~』を実装する際のリファクタリングについて紹介します。 今回は以下のようなパターンに分け、それぞれについて解説します。 『変数がnilの場合はデータをセットする』パターン 変数…
Vonage Verify APIを利用して2FAが組み込まれたRailsアプリケーションを実装します。 今回紹介するサンプルアプリケーションは公式のチュートリアルをベースとしているので、あわせてご覧になってください。 …
sortについて sortは配列を昇順でソートするメソッドです。要素の比較は<=>演算子(宇宙船演算子)が広く利用されますが、<=>演算子以外も利用できます。1 sortと<=>を組み…
「オブジェクトが存在しないケースを考慮し、オブジェクトのプロパティを参照する」、このような時にtry hashが活躍します。 try hashはdigで書き換えられます。今回はtry hashとdigの概要と、書き換えの…
redis-objectsについて redis-objectsとはRedisのデータ型をRubyのオブジェクトにマッピングすることでRedisにRuby的なインタフェースを提供するgemです。 Redis::Object…
前回、Rails.cacheの使い方、低レベルキャッシュの利用方法でRails.cacheの紹介をしました。 Rails.cacheは低レベルキャッシュを実現するためのメソッドです。Rails.cacheのデータの保存先…
特定の値やクエリ結果をキャッシュすることを低レベルキャッシュと呼びます。 今回は低レベルキャッシュを実装する際に利用されるRails.cacheについて紹介します。1 Rails.cacheについて RailsではAct…
前回、RuboCopのインストール手順と具体的な使い方でRuboCopのインストール手順について紹介しました。 RuboCopは導入して終わりではなく、プロジェクトのコーディングスタイルに適した形へカスタマイズする必要が…
RuboCopとは RuboCopとはRuby用のLintツールです。 設定ファイルを編集することでコーディングスタイルのチェック項目をカスタマイズできたり、RuboCop用のgemを追加することで機能の拡張ができたりし…
今回利用するサンプルコード lib/tasks/example.rake namespace :batch_example do task task_example: :environment do |task| # ロ…
Procオブジェクト(ブロック)を利用するメソッド内でブロックの有無を確認する方法には2つあります。ひとつはblock_given?を利用する方法、もうひとつはブロック引数をチェックする方法です。 メソッドにブロックを渡…
独自のLoggerクラスを実装する時をはじめ、インスタンスの生成とインスタンスメソッドの実行をまとめて行いたいケースがあります。具体的には以下のようなコードです。 class MyLogger def self.logg…
tapは『selfを引数としてブロックを評価する』『返す値はブロックの評価値ではなくself』という特徴をもつメソッドです。1 今回はtapの利用例について紹介をします。 メソッドチェインの途中結果を確認する tap内の…
Procクラスはブロックをオブジェクト化するクラスです。 Procオブジェクトとは、Procクラスを利用してオブジェクト化されたブロックのインスタンスのことを指します。 Procオブジェクトを利用することでブロックの評価…
Rubyにおけるbegin式の一般的な利用方法はrescue節を組み合わせた例外処理です。 しかし、begin式には『式全体の評価値は本体/rescue節/else節のうち最後に評価された文の値』という特徴があります。 …