Rails関連のことを調べてみた2022年01月28日

Rails関連のことを調べてみた2022年01月28日

[Rails] rspecで個人的に使うよく使うマッチャ

よく使うやつをまとめておいて迷わなくすることが目的。

# 一覧

マッチャ|用途
—|—
eq|内容の完全一致をチェック。“match“も同じ挙動をするが、文字数少ないのでこっち使う。
オブジェクトが同一かまでチェックしたいなら“be“だが、こっちはそうそう使わない。
match_array|“「チェック対象が配列」かつ「順番問わず全要素の中身が全て一致を確認したい」“ときに使う。
include|“「チェック対象が配列」かつ「指定した要素が含まれるかを確認したい」“ときに使う。
contain_exactly|“「チェック対象が配列」かつ「指定した要素群が含まれるかを確認したい」“ときに使う。
change|“<処理>を実行することによる何かしらの変化を確認したい“ときに使う。例えば「“expect(<処理>).to change(<レシーバ>, :<メソッド名>).by(<期待結果>)“」とかくと、「“<処理>を実行したとき<レシーバ>.<メソッド名>の結果が<期待結果>と一致するか?“」というチェックになる。

(意外となかった)

元記事を表示

[Rails] 自分流のrspec(API向け)テンプレート

「APIのテスト書きたいけど、どんな感じでかけばいいのか忘れちゃった!」というときに、とりあえずこのテンプレをコピペしてからコーディングを始めることで超絶時短を狙う。

# テンプレート

**前提**
FactoryBot利用し、Factoryのクラスメソッド実行時に“Factory.“を省略できるような[設定をrails_helperでしている](https://qiita.com/WisteriaWave/items/4ec897ca45047cea3abe)

“`spec/requests/【対象リソース名(スネークケース、複数形)】.rb
require ‘rails_helper’

RSpec.describe “/<対象リソース名(スネークケース、複数形)>“, type: :request do

# xxx_xxxテーブルのレコード設定
## <レコードの説明>
let!(:xxx_xxx1) { create(:, :,…) }
## <レコードの説明>
let!(:xxx_xxx2) { creat

元記事を表示

M1 MacにRuby on Rails 6のDocker環境を構築する

## 概要
M1 MacにRuby on Rails 6のDocker環境を構築する

## 手順

1. 必要なファイルの用意

Dockerfile

“`
FROM ruby:3.0.2

RUN wget –quiet -O – /tmp/pubkey.gpg https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && \
echo ‘deb http://dl.yarnpkg.com/debian/ stable main’ > /etc/apt/sources.list.d/yarn.list
RUN set -x && apt-get update -y -qq && apt-get install -yq nodejs yarn

RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app
“`

docker-com

元記事を表示

【個人開発】おもしろTikTok動画とにらめっこするアプリを作りました

## はじめに
笑ってはいけない場面で笑いを堪えるのが苦手なので、耐性をつけるためにおもしろ動画とにらめっこするアプリを作りました。
短時間で笑えるゲームになっているので、気分転換に遊んでみて頂けると嬉しいです!

## 概要
https://niramekko.herokuapp.com

### 1. にらめっこゲーム機能

おもしろTikTok動画とにらめっこするゲーム機能です。
3〜5個の動画でプレイリストが組まれるので、笑いを堪えながら順に再生していきます。
現在以下3つのモードがあります。

– ノーマルモード:ランダムな5つの動画でプレイリストが組まれ、最終スコアを競うモード。
– 道場モード:最も笑われている最新ベストに挑むモード(※1)。
– リベンジモード:過去に笑ってしまった動画に再挑戦するモード(※1 ※2)。

### 2. おもしろ動画共有機能

笑えるTikTok動画を共有する機能です(※2)。
おもしろ動画を見つけて共有しましょう!
投稿した動画が最新ベスト入りを果たすと、総スコア([後述](https://qiita.com/slmk/items

元記事を表示

RailsとVue.js3のSPAアプリにDeepL apiを導入する

ポートフォリオ作りの過程でRails×Vue.js3のSPAアプリにDeepL apiを導入したので過程を初学者視点で紹介します。
開発環境にはdockerを使用しています。

“`
#version
Ruby 3.0.2
Rails 6.0.4
Vue.js3

#開発環境
Docker
docker-compose
“`

# APIで実現したいこと

![スクリーンショット 2022-01-27 20.19.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1640672/fe122651-feb6-82c8-f52e-2918314ab842.png)

上記の画像の「AI翻訳の結果を表示する」ボタンを押すと上部に表示された日本語文を英訳して表示する。

# DeepL apiの登録

https://www.deepl.com/ja/pro-api?cta=header-pro-api/

こちらから登録します。
50,000文字/1ヶ月の制約はありますが無料プランもあります。

登録す

元記事を表示

splitメソッドとそれに関連するメソッドの解説

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/e4ed46f9-e4fd-b20f-7f62-cffe9617a99c.png)

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます。

#splitメソッド
指定した文字列で分割し、それを配列で返すメソッドです。
基本構文は、
“`
“文字列”.split(区切り文字, 分割数)
“`
論より証拠ということで、実際にコードを見ていきましょう

“`
‘Yamada, Satou, Itou, Suzuki’.split(‘,’)
=> [“Yamada”, ” Satou”, ” Itou”, ” Suzuki”]

‘Yamada, Satou, Itou, Suzuki’.split(‘u’)
=> [“Yamada, Sato”, “, Ito”, “, S”, “z”, “ki”]
“`
1個目の例でいえば、対象の文字列には、「,」があるので、,を目印に区

元記事を表示

Rails7でspring起因でrails consoleが立ち上がらなかった問題の解決方法

# はじめに

現在個人プロジェクトで

– M1 Mac
– Ruby3.1.0
– Rails7.0.1

という環境での開発を試しています。今までは

– Intel Core i7
– Ruby2.x
– Rails6.x

という環境だったので、やはり動くところ、動かないところが出てきます。
(特に、Docker周りは変なバグを踏まないか戦々恐々としています)

今回はRails7のプロジェクトにて、springのバージョンのせいでrails consoleの実行が失敗した件についてです。

# 事象

発生したエラーはこんな感じで、 `bundle exec rails c` を実行した時に発生しました。

“`
/usr/local/bundle/gems/spring-2.1.1/lib/spring/application.rb:103:in `block in preload’: undefined method `mechanism=’ for ActiveSupport::Dependencies:Module

元記事を表示

【Jbuilder】部分テンプレートでハッシュのオブジェクトを使いたい

##前提
@book_managerが配列ではなくハッシュのため、“`json.array!“`が使えない。

##今まで
ファイル名とインスタンス変数名が同じだと
Railsが部分テンプレートを自動的に予測してレンダリングしてくれていたので、
ファイル名など指定しなくても機能していた。

“`api/v1/book_managers/show.json.jbuilder
json.book_manager do
json.partial! @book_manager
end
“`

##訳あってファイル名変更
ファイル名を変更した際、下記の様に部分テンプレートを指定してみたがうまく行かない…

“`api/v1/book_infos/show.json.jbuilder
json.book_info do
json.partial! ‘api/v1/book_infos/book_info’, collection: @book_manager, as: :book_info
end
“`

##うまく行った例

ローカル変数“`book_info“

元記事を表示

Hamlの基本

# はじめに
RailsでWebアプリにPay.jpを用いた決済機能を実装しようとしていました。
実装フローを検索していたところ、Hamlを使ってビューが実装されているドキュメントが多く、興味本位で学習しました。
これから学習しようとしている方の参考になればと学習したことをまとめてみました。

# TL;DL
・RubyをベースとしたHTMLのテンプレートエンジンのこと
・HTMLよりもシンプルに記述できる
・Ruby / Ruby on Railsでも使われている

# 前提知識
・HTML
・Ruby(Rubyがベースになった記法だから)
・Ruby on Rails(Railsで使いたい場合)

# 大枠の使い方
① 拡張子がhamlのファイルを作成する(Ex.index.haml)
② 作成した①をhamlコマンドに通す(Ex. haml index.haml index.html )
③ htmlファイルが生成される(Ex.index.html)

※ hamlのコマンドオプション(よく使うもの)
-f format → アウトプットのフォーマットを指定(html5)

元記事を表示

rails 7.00における “cannot load such file –sassc”の解決法

rails7.0.0の影響によるcssの読み込みができなくなるというエラーに遭遇したので、同じ症状で悩まされている方のためになるかと思い、この記事を執筆しています。

railsの7.0.0が昨年に公開されましたが、以前のようにcssを適用させようとすると書き画像のようなエラーが出ることがあります。
![Inkedエラー画面_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2230776/8799d448-a136-a3fc-ce92-0207c09e080a.jpeg)

このエラーの解決方法は

“`ruby:Gemfile
46 # gem “sassc-rails”
“`

のコメントアウトを削除して、bundle installをすることで解決することができます。
rails7.00以前はこのgemが環境構築の際に自動でinstallされていましたが、7.00以降では標準でインストールされないようです.

元記事を表示

大量データ加工処理の高速化

## はじめに

今まで一般的なWeb開発はしてきたけど高速化についてあまり考慮せずに実装してきたエンジニアの方に向けて、筆者の大量データ ( **7億-8億レコード** ) 加工処理高速化の経験を基に、本番実行で何を目指すかということと、それまでに実際にどのようなアプローチがあるのかを提案できればと思います。
あくまで提案なので、「こうしたらもっと高速になるよ」的な箇所は多々あるかと思います。
コメントなどでご指摘いただければ幸いです。

## 本記事における前提条件

本記事における前提条件を筆者の経験した環境を参考に記載します。

### 本プロジェクトの背景及び要件

– 既存サービスで蓄積されたデータを外部のシステムに連携して有用活用するにあたってのPoVを実施する。
– 既存サービスで蓄積されたデータの一部を匿名化 (ハッシュ化) したものをCSVに書き出し、外部のシステムにPOSTする。
– 本番実行までの実装及び検証は短期間 (2-4週間程度) である。
– **加工処理はできるだけ早くする完了させる**

### 採用したテクノロジー

– Ruby on Rails

元記事を表示

binding.pryが止まらない!

railsのデバッグのために `binding.pry` を使ったが、ループの中に入れてしまったので `exit` をしてもずっと止まらない!
こんな時に使えるコマンドがこちらです!↓

“`terminal
$ exit!
$ !!!
“`

上記のどちらかで止まります!
試してみてください^^

元記事を表示

[JS]アロー関数を少しだけ深掘りしてみた

アウトプットとして

関数を簡略化して記述できるアロー関数、調べてみるとちょっとしたテクニックがあるみたいだったのでまとめてみました。

ちなみにいろんな関数の定義の仕方や特徴はこちらにまとめています。
[JavaScriptの関数](https://qiita.com/Shi-raCanth/items/a6c2fabcc152b05f09bc)

#アロー関数とは
functionの記述を省略し、その代わりに()=>という記述によって関数を定義する構文です。より短い記述で関数定義をできるという点がメリット。

“`javascript
// 無名関数
const 変数名 = function(){
処理
}

// アロー関数
const 変数名 = () => {
処理
}
“`

##引数が1つの場合は丸括弧が省略できる
定義の際に`引数が1つしかない場合`は丸括弧を省略できる。
ただし、スプレッド構文`…`を使用する場合は省略できません。

“`javascript
// 省略しない
var hoge = (a) => {
処理
}

// 省略できる
v

元記事を表示

Dirクラスを解説

ruby silverの勉強をしていく中で間違えたところがあったのでその解説記事を挙げていきます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/5d1866cb-e2ee-9696-2a44-6e410ffa3447.png)

今回の記事では、詳しい説明は省略させていただきます。[公式ドキュメント](https://docs.ruby-lang.org/ja/latest/doc/spec=2fdef.html#singleton_method)を読んでみてください。

結論からいうと、正解は、Dir.pwd以外の選択肢すべてです。
1つ1つの選択肢を調べましたので、ぜひ参考にしてください!

##そもそもDirクラスとは
めちゃザックリいうと、ディレクトリを色々操作できる、というクラスです。
今回問題で使われているpwdメソッド、globメソッドを例に紹介していきます。

###pwdメソッド
現在のディレクトリを出力するメソッドなんですね。
pwd(print w

元記事を表示

【Ruby on Rails】ActionMailer deliver_laterのrspecについての検討

## 前提
メール送信処理はすべて`deliver_now`で書いていましたが、処理が重過ぎてタイムアウトするので`deliver_later`に書き直しました。
結果rspecが軒並み死にました。FFF…
まぁ、そのままではうまくいかんだろうなという予感はしていました。
ということで、rspecの書き方を検討します。

## deliver_laterのrspecとして有効そうなこと
`deliver_later`は`ActiveJob`の処理なので、`ActiveJob`に近いテストを書くことはできそうです。

– jobの登録有無
– jobの内容

あとは、メール送信処理を即時にすれば、メールの内容などのテストも可能です。
`deliver_later`のテストは正直rails側で担保されていると思うので、deliver_laterを即時に変えるテストは有効かと思ってます。
意外と、deliver_later用!っていうrspecは用意されていないようです。調べ方が悪いかもしれないので、ありましたら教えていただきたいです…。mm

modelのテストをjobの登録の確認。

元記事を表示

【N+1問題】ループ処理の中でクエリを実行しない!

##N+1問題

ループ処理の中でクエリを実行しない!
大量のクエリが発行されるのでめちゃくちゃ重くなるので、
ループを実行する前にあらかじめデータ取得しておく。

####良くない例

“`ruby
books = Book.all

book_names = []
books.each do |book|
book_names << BookSynopsis.find_by(book_id: book.id).name end ``` ####良い例 ```ruby book_synopsis = Book.includes(:book_synopsis) book_names = [] book_synopsis.each do |book_synopsis| book_names << book_synopsis.name end ``` ##参考 https://qiita.com/shizen-shin/items/fffdf57feda979efb5d9

元記事を表示

Ruby on Rails 7でselect2を導入方法

[Webpackerの場合はこちらの記事です](https://qiita.com/YutoYasunaga/items/5cbbd546f51d8b37dac8)

### select2とjQueryインストール

“`
yarn add select2 jquery
“`

### select2 コントローラー作成

“`javascript:app/frontend/controllers/select2_controller.js
import { Controller } from “@hotwired/stimulus”
import $ from ‘jquery’;
import ‘select2/dist/css/select2.min.css’
import Select2 from “select2”

export default class extends Controller {
connect() {
Select2() // 自分の場合ではこれを呼ばないと動きません。
$(‘.select2’).select2();
}

元記事を表示

任意のタイムゾーンを持ったActiveSupport::TimeWithZoneオブジェクトを生成する

# お題

“`ruby
Time.zone_default
# => #, @utc_offset=nil>
Time.zone
# => #, @utc_offset=nil>
Time.zone.now.zone
# => “UTC”
“`

(戻すのが面倒だったり忘れたりするから)`Time.zone_default` や `Time.zone` は変更せずに、なんか好きな `ActiveSupport::TimeZone` オブジェクトをしょった `ActiveSupport::TimeWithZone` オブジェクトがほしい。

*activesupport-7.0.1/lib/activ

元記事を表示

[rails]いいねが削除できない? →ネスト時には引数が2つ必要

#はじめに
この記事はプログラミング学習の備忘録です。
今回はrailsでいいね機能の削除ができず、時間を使ってしまったのでまとめます。

今回分かったこととしては、**「ネストしている場合は引数を2つ指定する必要がある」**ということです。

#エラー内容
以下今回の記事の前提です。
・散歩習慣アプリを作っている
・投稿機能には、「walks」というモデルを使っている。
・いいね機能には、「likes」というモデルを使っている。

いいねを削除するために以下のように実装しました。

“`index.html.erb
<%= link_to "いいねを解除" ,walk_like_path(walk),method: :delete %>
“`

walk_like_path(walk)で投稿に紐づくいいねを指定、
method: :deleteも付けているので問題なさそうです。
しかし表示してみると、

[![Image from Gyazo](https://i.gyazo.com/eecd8e9a208e0ed922f9d335780693c8.png)](http

元記事を表示

redirect先を直前の画面に指定したい時

“`
redirect_back(fallback_location: root_path)
“`
と書けばエラーが出ず遷移できる。

元記事を表示

OTHERカテゴリの最新記事