Proc/yield/&blockによるメソッドへのブロック渡し・実行方法
メソッドにブロックを渡し、渡されたブロックをメソッド内で実行する方法には以下の3つがあります。 今回は上記の各方法について紹介します。 Procオブジェクトをブロック引数として渡し、メソッド内でブロック引数を利用する方法…
メソッドにブロックを渡し、渡されたブロックをメソッド内で実行する方法には以下の3つがあります。 今回は上記の各方法について紹介します。 Procオブジェクトをブロック引数として渡し、メソッド内でブロック引数を利用する方法…
Procについて Procクラスはブロックをオブジェクト化するクラスです。 つまりProcオブジェクトとは、Procクラスを利用してオブジェクト化されたブロックのインスタンスのことを指します。 ブロック単体だけではオブジ…
nil? nil?はRubyのメソッドです。 nilの場合true、それ以外はfalseを返します。 “”(空文字)、” “(空白)、[](空配列)、{}(空ハッシュ)などもfalseになるため、純粋にnilをチェックし…
present?について present?は真偽値を返すRailsのメソッドです。 nil, false, “”(空文字), ” “(空白), [](空配列), {}(空ハッシュ)の場合にfalse、それ以外の場合にtr…
N+1カウントクエリとは、取得したN件のデータそれぞれに対してcountクエリが発行される現象のことを指します。 以下はN+1カウントクエリの例です。取得したN件のauthorに対してcountクエリが実行されていること…
N+1カウントクエリとは、取得したN件のデータそれぞれに対してcountクエリが発行される現象のことを指します。 以下はN+1カウントクエリの例です。取得したN件のauthorに対してcountクエリが実行されていること…
前回、counter_cacheでN+1カウントクエリを解消する手順でRailsの標準機能であるcounter_cacheを利用してN+1カウントクエリを解消する方法について紹介しました。 今回はcounter_cach…
N+1カウントクエリが発生している状態とは N+1カウントクエリとは、取得したN件のデータそれぞれに対してcountクエリが発行される現象のことを指します。 以下はN+1カウントクエリの例です。取得したN件のauthor…
belongs_toで紐づいているActive Recordの関連付けキーで検索をしたい場合は、当該カラムの値の代わりActive Recordモデルを検索条件に利用できます。1 たとえば以下のような1対多で紐づいたAu…
分割してデータを読み込むことでメモリの消費を抑える eachはデータをすべてメモリにのせてからループ処理を実行するため、可能性があります。 たとえば以下の例では、booksテーブルの全レコードがActive Record…
CSVを分割して読み込むことでメモリの消費を抑える 【Rails】in_batches、find_in_batches、find_eachの違いと使いどころで紹介したように、eachはデータをすべてメモリにのせてからルー…
eachはデータをすべてメモリにのせてからループ処理を実行するため、可能性があります。 たとえば以下の例では、booksテーブルの全レコードがActive Recordオブジェクトに変換され、全オブジェクトをまとめた配列…
画像をはじめとした静的コンテンツをキャッシュし、Webサーバから配信することでアプリケーションのパフォーマンス向上が期待できます。 今回はnginxで静的コンテンツをキャッシュ配信する方法について紹介します。 nginx…
Railsアプリの計測用gemで有名なrack-mini-profilerのインストール方法および利用方法について紹介します。 rack-mini-profilerで計測できること rack-mini-profilerは…
rblineprofは計測対象のファイルに計測用のコードを埋め込むことで行単位のプロファイリングが行えるgemです。 rblineprofの利用方法については【Ruby】rblineprofで行単位の計測を行う方法で紹介…
前回、【Ruby】rblineprofで行単位の計測を行う方法でrblineprofを利用したRubyのプロファイリング方法について紹介しました。 rblineprofを利用すると、計測対象のファイルに計測用のコードを埋…
N+1問題とは、取得したN件のデータそれぞれに対してSQLが発行される現象のことをいいます。 N+1問題によるデータベースへの大量アクセスは、アプリケーションのパフォーマンスを低下させる原因の1つです。 今回はN+1問題…
Railsのセッション情報はデフォルトでCookieに保存されます。 Railsのセッション管理方法は変更が可能で、Cookieの代わりにインメモリDBを採用するケースがよくあります。 今回はセッションの管理方法をCoo…
前回、『deviseのインストール手順をシンプルなログイン機能の実装で理解する』でdeviseを利用した認証機能の実装方法について紹介しました。 deviseでは、サインイン・サインアウト後のリダイレクトURL(遷移先の…
deviseを利用することで簡単に認証機能をRailsアプリケーションに構築できます。 今回はdeviseをインストールする手順について紹介します。 今回実装する内容について deviseを利用するとさまざまなことができ…
RubyMineとDockerを連携し、コンテナの起動やDocker環境のデータベースをRubyMineから実行する方法について紹介します。 今回は以下のようなRailsとMySQLを組み合わせたDocker Compo…
REST APIを開発するにあたり、OpenAPI Specification(OpenAPI 3.0以前でいうところのSwagger Specification)をAPIの仕様書として利用している方は多いのではないでし…
REST APIのテストコードにレスポンスボディの検証を追加することで、レスポンスボディに修正が加わったことを機械的にチェックできます。 今回はRSpecでREST APIのレスポンスボディを検証する方法について紹介しま…
外部APIを利用したメソッドのテストコードを書く際、APIとの連携方法がテストのスコープ外になることがあります。 たとえば『API経由で受け取ったデータを正しく加工できているか』をテストする場合です。 この時のテストの関…
【Ruby】faradayを利用した外部API連携クラスの作成手順の記事で、Faradayを利用した外部APIとの連携方法について紹介しました。 外部APIを利用したロジックのテストコードでは、実際のAPIを利用するので…
アプリケーション開発をするにあたり、外部サービスとAPI連携を行う場合があります。 前回はHTTP通信を行うRubyの標準ライブラリであるnet/httpを利用した外部APIとの連携方法について紹介しました。 今回はHT…
アプリケーション開発をするにあたり、外部サービスとAPI連携を行う場合があります。 RubyではHTTP通信を行う標準ライブラリとしてnet/httpが用意されています。 今回はnet/httpを利用して、API経由で外…
データ不整合が発生した時や既存のカラムの値を変更したい時など、データを手動で更新しなければいけません。 本番データを直接操作することになるため、手動更新は慎重に行う必要があります。 今回はRuby on Railsアプリ…
Swaggerを利用することでREST APIの仕様をドキュメント化できます。 SwaggerではREST APIの仕様をドキュメントしたファイルをSwagger Specと呼びます。 Swagger UIとはSwagg…
APIモードで作成したRails 6と、MySQL 8を組み合わせたDocker環境の構築手順について紹介します。 複数人でもスムーズに開発ができるようにするためリモートリポジトリからcloneしてきたらdocker-c…
こんにちは。@nishina555です。 今回はRails 6とMySQL 8を組み合わせたWebアプリケーションのDocker環境を構築する手順について紹介します。 Rails 6からwebpackerが標準でインスト…
こんにちは。Enjoy IT Life管理人の@nishina555です。 前回、【Rails】asset_syncを利用してCloudFront + S3からアセットファイルを配信するでasset_syncの利用方法に…
こんにちは。Enjoy IT Life管理人の@nishina555です。 Railsアプリケーションで利用されるアセットファイルは、デフォルトの設定ではアプリケーションサーバに配置されています。 今回はアセットファイル…
こんにちは。Enjoy IT Life管理人の@nishina555です。 PumaとはRails(Ruby/Rackアプリケーション)のWebサーバーです。 Pumaを起動することでHTTPリクエストがさばけるようにな…
こんにちは。Enjoy IT Life管理人の@nishina555です。 先日、【AWS環境構築手順】VPCとEC2を作成し、実際にアクセスしてみるでAWSのEC2を構築する手順について紹介しました。 Webアプリケー…
こんにちは。Enjoy IT Life管理人の@nishina555です。 Railsアプリケーションを開発する際、開発環境であればrails sを実行するだけで簡単にアプリケーションを立ち上げられます。 しかし、です。…
こんにちは。Enjoy IT Life管理人の@nishina555です。 Railsアプリケーションを実際にサービスとして稼働させるためにはWebサーバーとの連携は必須です。 今回はPumaを利用してWebサーバー(n…
こんにちは。Enjoy IT Life管理人の@nishina555です。 今回はRails6 + MySQL8の開発環境をCentOS8上に構築する手順について紹介します。 開発環境(development)でサーバー…
こんにちは。Enjoy IT Life管理人の@nishina555です。 前回、『Dockerのデータを永続化!Data Volumeの理解から始める環境構築入門』の記事でデータベースを例にとり、Dockerのデータの…
こんにちは。Enjoy IT Life管理人の@nishina555です。 前回、『環境構築からデータ作成まで!Rails x MySQLのDocker Compose環境構築手順』でRuby on RailsのDock…