Rails関連のことを調べてみた

Rails関連のことを調べてみた

実装する前にきちんとドキュメントを読んだ方が良い、という話

どうも、初めまして。
tokeと申します。

今回は自分の失敗談を話したい、と思います。

# 実装する前にドキュメントを読まないと、最後になってゴールに辿り着けない可能性がある

そういう経験をしたのでご紹介します。

例えば、自社で集めた顧客のデータを活用し、Marketoにデータ連携したいとします。

marketoのAPIドキュメントを調べると、顧客の情報を登録する手段では以下の2パターンがあります。

## `POST /rest/v1/leads.json`を使うパターン

以下のドキュメントにある`POST /rest/v1/leads.json`を使って、顧客のデータを送信し、連携する事ができます。
https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/lead-database/leads

[※Marketoで紹介されているサンプルデータになります]
![スクリーンショット 2024-08-10 13.16.34.png](https://qiita-image-store

元記事を表示

paramsのできること

## 初めに

疑問に思ったことや上手くいかなかったことのアウトプットをしています。
自分なりの理解でアウトプットしていきます。初学者なので誤りもあると思います。
その際はご指摘いただけると幸いです。

## paramsのできること
一時的に送る、もしくは受け取るデータの一時的な格納庫になる。コントローラ内で簡単にデータにアクセスしやすくなる。

## 具体的には
フォームから送信されたデータはPOSTリクエストの一部としてparamsに格納され、
URLのクエリパラメータはGETリクエストの一部としてparamsに格納される。

## クエリパラメータとは?
URLの一部として指定される追加情報のこと。
通常、URLの?の後に「key=value」の形式で書かれる。
複数のパラメータの場合は&で区切る。
主にGETリクエストで使われて、サーバーに何らかの情報を伝えるために利用される。
特定のデータの取得、検索結果の絞り込みが可能。

## 最後に
paramsは今までformメソッドでしか使った記憶がなかったので、
POSTリクエストでしか使わないと思ってたのでGETリクエストでも

元記事を表示

orderとpluckを併用する時には記述する順番に気をつけようというお話

あまり実用的なケースではないが、最新の一件のデータを取りたいがカラムはpluckしたい時に、クエリの呼び出し順に気をつけとかないと思うようなデータが取れないよというお話

# 試したコード
“`
last_tweet = User.pluck(:userName, :tweetContent).order(created_at: “DESC”).first
“`
※コードは実際に使ったものを改変しています

# 発生したエラー

“`
NoMethodError (undefined method `order’ for an instance of Array):
“`

# 解決策
“`
last_tweet = User.order(created_at: “DESC”).pluck(:userName, :tweetContent).first
“`

シンプルにorderで並び替えてからpluckすれば仕様を満たすことができる
pluckしてからorderしようとしても該当のカラム(created_at)がないので並び替えることができない

元記事を表示

Ruby on Railsの環境構築をDocker上で”ゼロから”やってみた

# はじめに
この記事では、Ruby on Railsのアプリを開発する際に必要となるDockerfileやcompose.ymlといったファイルを**コピペではなくゼロから**作成した手順を紹介します。環境構築の際に必要な情報はググればたくさんヒットするのですが、なぜそのような書き方をするのかを理解しないままコピペして使うのは個人的に嫌だったため、本記事を執筆するに至りました。

使用するDockerのバージョンは次の通りです。
“`sh
docker –version
# Docker version 27.1.1, build 6312585
“`

:::note
本記事を参考に環境構築を行う場合、最終的に必要な手順は最終節に書かれているので、お急ぎの方はそちらをご覧ください。
:::

# コンテナ上で試行錯誤してみる
ゼロからいきなりDockerfile、compose.ymlを書くのはさすがに難しいです。そこで、まず最初に、Railsアプリを立ち上げるまでに必要なプロセスをコ

元記事を表示

RailsのTimeクラスを覚えたい

# 概要
– 何度書いても忘れるのでメモ的な記事
– RailsはRubyのTimeクラスを拡張しているとのこと

# ドキュメント

ここみればいいと思います。

https://api.rubyonrails.org/classes/Time.html

# 今を取る

“`ruby
Time.current
=> Sat, 01 Jun 2024 10:24:15 JST +09:00
“`

`Time.now` でも取れるが、`Time.current`の場合、`Time.zone`または`config.time_zone`が設定されていれば、`Time.zone.now`を返してくれるのでお得(?)

# 今より前の時間を取りたい

色々ある

“`ruby
Time.current.ago(1.day)
=> Fri, 31 May 2024 10:25:03 JST +09:00
“`

intから`day`や`hour`を生やすことができる。複数形でも良い

“`ruby
[23] pry(main)> 3.day
=> 3 days
[24] pry(m

元記事を表示

RailsとReactのDocker環境を作ってみる

## Rails環境を作る

### Dockerfile
リポジトリのトップにbackendディレクトリを作成。
backendディレクトリにDockerfileを作成。
“`Dockerfile:Dockerfile
FROM ruby:3.1

WORKDIR /app
“`
dockerをビルド。
“`shell:
docker build .
“`
docker経由でrailsアプリケーションを作成。
Dockerfileがコンフリクト起こすけど、上書きはしない。
“`shell
docker run -it -v $(pwd):/app imageId bash -c “cd .. && gem install rails && rails new app -d postgresql –api”
“`
Dockerfileを書き換える。
“`Dockerfile:Dockerfile
FROM ruby:3.1

WORKDIR /app

COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfil

元記事を表示

RailsアプリをEC2にデプロイしてみた

# 本記事の目的
当記事は自分の備忘録として公開します。アプリのデプロイのプロセスや仕組みを知りたかったので実際に手を動かして試してみました。

当記事のデプロイ手順は、セキュリティへの考慮やDBをインストールするといったことは省いていて、あくまでデプロイの仕組みを知るためだけを目的として実践しております。あらかじめ、ご留意ください。

# 当記事でやらないこと
・EC2構築手順の説明
・DBインストール・RDS作成

# 環境
OS: EC2 Amazon Linux2
バージョン管理: Asdf
言語: Ruby,Rails,Node.js
サーバ: Nginx,Puma

**EC2の設定**
SGインバウンドルール: HTTP(80),SSH(22)
パブリックIP:有効

## 1. EC2にSSH
“`
ssh -i KeyPair.pemの保存しているファイルパス ec2-user@EC2パブリックIP
“`

## 2. セットアップ
“`
# 最新パッケージへアップデート
sudo yum -y update

# パッケージのインストール
sudo yu

元記事を表示

【RSpec】Shoulda Matchersの書き方について

## はじめに
### [shoulda-matchers](https://github.com/thoughtbot/shoulda-matchers)とは
Railsのテストコードをより簡潔かつ読みやすくするためのRSpec用の拡張ライブラリです。

#### Q. 何が良いのか?
A. [特に複雑なテストケースを1行で記述できることが多く、テストコードの行数の大幅な削減が期待できます!](https://matchers.shoulda.io/docs/v6.3.0/)

#### 設定方法
以下のようにGemfileのテスト環境に“`shoulda-matchers“`を追加します。
(詳しくは[公式ドキュメント](https://github.com/thoughtbot/shoulda-matchers?tab=readme-ov-file#rspec)にてご確認ください🙇‍♂️)
“`.Gemfile
group :test do
gem ‘shoulda-matchers’, ‘~> 6.0’
end

元記事を表示

Active Recordのcount, length, sizeの違いを理解して使い分ける

## はじめに
以下の3つはいずれもActive Recordのコレクションに含まれるオブジェクトの数を返すメソッドです。

– `count`メソッド
– `length`メソッド
– `size`メソッド

しかしこれらはすべて内部的な挙動が異なるため、違いを理解して使い分ける必要があります。

そこでこの記事ではこれら3メソッドの挙動の違いと使い分けについてまとめます。

この記事におけるRailsのバージョンは**Rails7.1**です。

## count, size, lengthの違い
まず最初に結論です。
– **`count`メソッド:** `COUNT(*)`のSQLを発行し、データベース側でカウントを実行する
– **`size`メソッド:** オブジェクトがメモリにロードされているならSQLを発行せずにメモリ上のオブジェクトの数を返す。ロードされていない場合は`count`メソッドと同様のSQLを発行する
– **`length`メソッド:** オブジェクトがメモリにロードされていない場合はレコードをメモリにロードしてからカウントを行う。すでにロードされている

元記事を表示

MVCをレストランに例えてみた

# はじめに
今回はRubyonRailsなどで用いられているMVCというものについて解説していきたいと思います。Railsをはじめ、MVCを採用しているフレームワークは多くあると思います。RailsにおいてはRailsチュートリアルやProgateでも初めの方で解説していることからこの構造を理解しておくことは非常に重要です。今まであまり考えずに使用してきたのであれば、この際詳しく知っておくと良いでしょう。

## MVCとは
ソースコードをそれぞれ
**・モデル(Model)**
**・コントローラー(Controller)**
**・ビュー(View)**

の3つに分割して管理しようという考え方の1つです。それぞれの頭文字を取ってMVCとなっています。

*****
**モデル(Model)**
例えば投稿した人の名前や投稿したテキストなどを保存する際などにデータベースとのやりとりをします。データの登録・更新・削除などの処理を行います。

**コントローラー(Controller)**
モデルにデータ処理の指示を出したり、ビューに画面表示の指示を出したりする指示役です。

**

元記事を表示

HTML, Bootstrapを使ったタブの切り替え機能の実装

この記事はHTMLとBootstrapを使ってタブの切り替え機能を実装したので、実装方法を共有したいと思います。プログラミング学習者の実装なので、間違いなどありましたら教えて頂けると嬉しいです。

コードの全体像
おすすめとフォロー中の2つのタブを用意して、それぞれのタブを押した時にタブ以下の内容表示を切り替えるという機能です。
“`ruby:index.html.slim
.tabs
ul.nav.nav-tabs.nav-fill.sticky-top.blur-bg
li.nav-item
div class=”#{‘active’ if params[:tab] == ‘recommend’} text-center hover-bg py-3 px-2″ type=”button” data-bs-toggle=”tab” data-bs-target=”#for-you”
= link_to ‘おすすめ’, home_index_path(tab: ‘recommend’), class: ‘link’
li.nav-ite

元記事を表示

【Rails】Bulletの導入方法

## Gemをインストール

`Gemfile` に以下のように記述し、 `bundle install` します。

“`ruby:Gemfile

group :development do
gem “bullet”, “~> 7.2”
end

“`

## 設定する

ターミナルで以下のコマンドを実行し、設定を自動生成します。

“`terminal
$ bundle exec rails g bullet:install
Enabled bullet in config/environments/development.rb
Would you like to enable bullet in test environment? (y/n) y
Enabled bullet in config/environments/test.rb
“`

`config/environments/development.rb` と `config/environments/test.rb` に次のような設定が生成されます。

“`ruby:config/environmen

元記事を表示

ログアウトでルーティングエラー

# Routing Errorが起きた

deviseを導入して、ログアウトしようとしたところ、下記のエラーが発生しました

“`
ActionController::RoutingError (No route matches [GET] “/users/sign_out”):
“`

このエラーの原因はアプリを作成したばかりで、javascriptが正常に動作していないことが原因でした

# 原因の確認
ルーティングがあっているか確認
“`
destroy_user_session DELETE /users/sign_out(.:format)    public/sessions#destroy
“`

“`_header.html.erb
<%= link_to destroy_user_session_path, method: :delete, style: "display:flex; align-items: center; flex-direction: column;" %>
“`

path名も正しい、`method: :delete`と記述している

元記事を表示

【Rspec】綺麗に書くを意識し始めたら読んでほしい!

# はじめに

こんにちは、エンジニア3年目の嶋田です。
この記事を開いていただきありがとうございます!

今回の記事では、RSpecの基本的な構文と概念についてまとめました。
最近の業務ではRSpecを使用していますが、
どういうコードが読みやすく綺麗であるのかを最近意識するようになってきました。
(気にするのが遅いですし、まだまだですが…)

その中で、理解しておくといいなと思ったことを自分自身のために備忘録としてまとめました。
よろしければ、最後までお付き合い下さい。

## 目次
– [RSpecとは](#RSpecとは)
– [describe, context, it の使い分け](#describe-context-it-の使い分け)
– [let と let! の違い](#let-と-let-の違い)
– [テストデータと変数の管理](#テストデータと変数の管理)
– [shared_examples の使い方](#sharedexamples-の使い方)
– [まとめ](#まとめ)
– [参考文献](#参考文献)

## RSpecとは
RSpecはRuby言

元記事を表示

【Rails6】[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts:の対処法

## 問題
Rails6で任意のhost名でアクセスしようとした時に、以下のエラーがでます。
“`ruby
[ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts: example.com
“`

## 解決方法
Rails6で追加された、ActionDispatch::HostAuthorizationによるものです。
https://github.com/rails/rails/pull/33145

対応方法は以下の3つがあります。
### 1. Rails.application.config.hostsにhostを追加する
development環境では、デフォルトで以下のhostが登録されています。
これ以外で接続しようとするとブロックされるため、必要なhost名を追加します。
“`ruby
Rails.application.config.hosts = [
IPAddr.new(“0.0.0.0/0”), # All IPv4 addresses.
IPAddr.new(“

元記事を表示

[実装のヒント] true / false を返すメソッドをシンプルに実装する

最近自分が実装しているのを見せながらペアプロしたりする時に『こういう実装はダメなんですか?』って質問を受けることがある。

そんな中からとして **『こうあるべき実装』** と、 **『動くかもしれないけど望ましくない実装』** とかをサンプルや実装していく順序なども交えながら記事にして残しておこうかなと思う。

## true / false を返すメソッドを実装する

まずは実装の前提となるクラスの初期化用のコードを貼っておく。

“`ruby
class SomethingOutputService
include ActiveModel::Model
attr_accessor :date_from
attr_accessor :date_to

def initialize( date_from, date_to )
begin
self.date_from = Time.parse( date_from )
self.date_to = Time.parse( date_to )
rescue ArgumentErr

元記事を表示

[実装のヒント] Rails での開発の時は blank? と present? を使いこなす

Rails用に条件分岐のコードを書く時、`blank?`メソッドと`present?`メソッドを効率的に組み合わせるだけですごく可読性のいい式が書ける。特に最近、緩やかなコード規約というものを開発チームと共有していて、その中で`unless`文の使用はよっぽどのことがない限り避けるように記載していたりする。で、実例だ。今回は haml で書かれたファイルの中に条件分岐のコードがあるってサンプルでサクッと解説する。

“`haml
– unless name.blank?
= name
“`

**『name が空じゃなかったら表示する』** ってだけのすごいシンプルなコード。ただこのコードは`unless`文を使う必然性がない典型的な例だ。`if`文に置き換えても否定式にすることもなく、以下のように書くことがでける。

“`haml
– if name.present?
= name
“`

**『name が空じゃなかったら表示する』** は __『name が存在したら表示する』__ と読み替えることができる。それをそのままコードにしただけ。他の言語だとあまり見かけ

元記事を表示

エンジニア初心者が感動したCursor vs. VS Code: AIで簡単にコードを書く方法

## はじめに
エンジニアとして効率的にコードを書くことは、開発スピードや品質を向上させるために非常に重要だと思っています。私はエンジニア初心者のため、コードエディタは初めて触りますが、CursorのAI機能はまさに初心者のためにあるようなもので。とても感動しました!
 この記事では、人気のあるコードエディタであるVS Codeと、AIを用いて簡単にコードを書くことができるCursorを比較し、特にAIによる質問機能について詳しく説明します。

## VS Codeとは
Visual Studio Code(VS Code)は、Microsoftが開発した無料のソースコードエディタです。以下の特徴があります:

– **拡張機能**:膨大な数の拡張機能が提供されており、言語サポートやデバッグツールを簡単に追加できます。
– **統合ターミナル**:エディタ内でターミナルを開くことができ、コマンドライン作業を効率化します。
– **Git統合**:Gitリポジトリとの統合が強力で、バージョン管理が容易に行えます。
https://www.cursor.com/

## Cursorとは

元記事を表示

パーフェクトRubyonRails備忘録1

# find,find_by,whereの戻り値の違い

– find
– ActiveRecord::RecordNotFound例外
– find_by
– nil
– where
– 空のActiveRecord::Relationインスタンス

# ActiveRecord::Relationについて

– ActiveRecord(モデル)に対してQueryInterface(select,where,etc)が呼ばれることでActiveRecord::Relationのインスタンスが作成される
– ActiveRecord::Relationインスタンスに対してQueryInterfaceを繰り返し呼び出せる
– 実際にデータが必要になった時点でSQLが発行され、それまではActiveRecord::RelationにSQLの情報が蓄積される。
– ただし、 `to_a`メソッドにより、明示的にSQLを発行することもできる。

# scopeについて

– スコープとは?
– よく使う検索条件に名前をつけて再利用しやすくする仕組み
– スコー

元記事を表示

誰も使わなかった奇妙な設定

> こちらは「Ruby on Rails パフォーマンスアポクリファ」のサンプル章です。[日本語での完全版が現在Gumroadで入手可能です](https://nateberk.gumroad.com/l/apocrypha_ja)。

Rails のバックグラウンドジョブの多くには、一般にパフォーマンスの問 題があります。
バックグラウンドジョブでは、しばしば大きなデータセットを処理しま す。そして、その際に User.all.each(&:send_daily_newsletter) のよ うな愚かなことをしてしまいます。

開発環境やテスト環境では、User.all が返すのは、おそらく数行、多くて も十数行でしょう。開発者の多くは、自分のローカルマシン上の seed デー タを極端に限定しています。

しかし、プロダクション環境では、User.all はおそらくかなりの数の行 を返します。開発するアプリケーションによっては、数十万行になるかもし れません。

10 万行を返す結果セットには、ほんのわずかばかり問題があります。それ は SQL クエリーが返すのに時間がかかると

元記事を表示

OTHERカテゴリの最新記事