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

Rails関連のことを調べてみた2022年12月25日
目次

SET1年目の新卒が、ヒィヒィ言いながら社内の自動テストツールを改善した話

# はじめに
22年度新卒で株式会社LIFULLに入社した[Yamashita-Taiki](https://qiita.com/Yamashita-Taiki)です。

最近35インチのモニターを導入して仕事の質が爆上がりです(してますよね???)

今回は内製OSSの自動テストフレームワークであるBucky-core、その結果レポートを担当しているBucky-managementのUIを改善したので、そこで学んだことを書いていこうと思います。
Bucky-coreやBucky-managementについては以前社員の方が詳細について投稿してくださっているので[その記事](https://qiita.com/rueyjye/items/570ce17d698819f99091)を見ていただければと思います。

# 今回挑戦したこと
実行されたテスト結果を表示するページのUIを改善しました。
まずbeforeとafterの画像を添付します↓

## before(実際には30件並んでいます)
![スクリーンショット 2022-12-22 17.33.03.png](https://q

元記事を表示

Stimulus リファレンス: TypeScriptを使う

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/reference/using-typescript

Stimulus自体は[TypeScript](https://www.typescriptlang.org/)で記述されており、そのパッケージ上で型を直接提供します。以下のドキュメントはStimulusプロパティの型を定義する方法を示しています。

# コントローラー要素型の定義

デフォルトではコントローラの要素は`Element`型です。コントローラー要素の型を[ジェネリック型](https://www.typescriptlang.org/docs/handbook/2/generics.html)として指定することでオーバーライドできます。たとえば、要素の型が`HTMLFormElement`であると予想される場合:

“`typescript
import { Controller } from “@hotwi

元記事を表示

【Ruby】Prawn で生成した PDF に旧字体が含まれていると文字化けしてしまう場合の対処法

## 背景

タイトル通り、[Prawn](https://github.com/prawnpdf/prawn) で生成した PDF に旧字体が含まれていると文字化けしてしまう現象が発生。

ex. 「高瀬 真守」という名前のユーザー情報を PDF 出力(※「瀬」は旧字体)

![スクリーンショット 2022-12-25 5.10.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/688854/9746f1cf-e65b-0d61-9e72-fa5e99eacc6f.png)

ご覧のように上手く出力ができていません…。

## 原因

フォントの設定に問題がありました。

“`ruby
class PdfeGenerator < Prawn::Document def initialize super(page_size: "A4", margin: 20) font Rails.root.join("app/assets/fonts/mplus-2p-regular.t

元記事を表示

git revert(間違ったコミットを打ち消したいとき )

## 経緯 
railsにてログイン機能を実装していた時、うっかりdevelopブランチのまま作業をしていた…!

“`
% git branch
* develop
main
“`
それに気づかないまま、**git add .** し、 **git commit** してしまった。(コミット名は、**login_user** としていました)

## やったこと
コミットを取り消したいということで、**git revert <commitID>** コマンドを使いました。
“`
git revert
“`
commitIDは、後述の**git log** コマンドを入力して確認できます。

>既存のコミットを取り消すためのコマンドです。
>「取り消したいコミットを打ち消すようなコミットを新しく作成する」という処理によって、既存のコミットを取り消します。
>新しくコミットを追加しているだけなので、既存コミットの履歴が消えるわけではありません(コミットログをみると残っています)。
どんな変更があった

元記事を表示

ngrok でトンネリングすると Rails がブロックする問題

## 問題

ngrok でトンネリングすると、Rails にブロックされる。

その上、`config/environments/development.rb` に?を入れてみてもなおらない
“`
config.hosts << '.ngrok.io' ``` ## 解決 '.ngrok.io' -> ‘.jp.ngork.io’ みたいに .jp を入れると治った

“`
config.hosts << '.jp.ngrok.io' ``` ## 感想 ngork のホスト名かわった?

元記事を表示

Rails リンクが正しく動作しているかテストする方法

Railsではリンクが正しく動作しているかどうかをテストする際に統合テストを用います。

まずはテストファイルを作成します。

“`Bash
rails generate integration_test site_layout
“`

作成されたファイルを開きます。

“`Ruby:sample_app/test/integration/site_layout_test.rb
require ‘test_helper’

class SiteLayoutTest < ActionDispatch::IntegrationTest end ``` このファイルにテストコードを書いていきます。 今回は以下の点についてのテストを行います。

  1. テンプレートが正しく表示されているかどうか。
  2. リンクが正しく動作しているかどうか。

“`Ruby:sample_app/test/integration/site_layout_test.rb
class SiteLayoutTest < ActionDispatch::Int

元記事を表示

Rails ルーティングについて備忘録

Railsを使用したアプリケーションでは、HTTPリクエストをクライアントが送信したときに、ルーティングと呼ばれる作業が実行されます。ルーティングというのは、送信されたリクエストに対してどのコントローラを参照するのかを決める作業です。

例えば、以下のようなコードでルーティングが決定されます。

“`Ruby:routes.rb
Rails.application.routes.draw do
root ‘static_pages#home’ #参照するコントローラ名/アクション
get ‘static_pages/about’ #URL
end
“`
以下のコードでアプリケーションのルートURL(最初に表示するURL)を定義しています。

“`Ruby
root ‘static_pages#home’
“`
また、’static_pages#home#`というのは、static_pagesコントローラのhomeアクションを参照するという意味です。

つまり、上記のコードは、「ルートURLにアクセスした時は、static_pagesコントローラのhomeアクションを実

元記事を表示

Hash.new([]) の挙動にハマった

## はじめに
`Hash.new([])` を使用して処理を書く場面があったのですが、
その際の思わぬ挙動にハマった話とその対処方法について記事にしました

## 問題のコード
“`ruby
processed_ids = ::Hash.new {[]}

# user からは group_id と user_id を参照できる
users.each do |user|
next if processed_ids[user.group_id].include?(user.user_id)

processed_ids[user.group_id].push(user.user_id)
end
“`

processed_ids にキーとして group_id を指定し、それに対して配列で user_id を追加していき、
既に group_id に対応する配列に user_id が追加されていたら、処理をスキップする、という処理を書いています。

上記のような記述で動作する…と思っていたのですが、
実際に動かしてみると想定した通りに動きません。

実際にコンソ

元記事を表示

マイグレーションを自作する テーブルの作成、Null制約のfalseをする

# テーブルを作成する
“`rb
create_table :products do |t|
t.string :name
end
“`
このようなマイグレーションファイルを作成したい。
### テーブルを作成するマイグレーションファイルを作成
“`
bin/rails g migration CreateProducts name:string
“`
#### 出典
https://www.sejuku.net/blog/60950#:~:text=%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%82%92%E4%BD%9C%E6%88%90,g%20migration%20CreateSample

“`rb
class CreateProducts < ActiveRecord::Migration[7.0] def change create_table :products do |t| t.string :name t.timestamps end end end ``` ###

元記事を表示

投稿の保存

流れ
❶フォームに入力しボタンを押す
❷rails側に投稿するデータを送信
❸受け取ったデータをデータベースへ保存

データベースを変更する場合はルーティングを書く際には「post」を用いる [post “/” => 〇#〇]と記す

form_tagメソッドで送信先を指定できる
createアクションで受け取る
そこからほかのurlへ転送し出力

name属性
inputタグやtextareaタグにname属性を指定する
{name名:入力内容}といった感じでparamsに保存される

*アクション get postの違い
[post]はデータベースの変更を行うときに用いる
[get]はデータベースの変更を行うわない時に用いる

link_to(“”,””) はgetで書かれたルーティングへ飛ばすためのもの
postで書かれた場合は第三引数にmthod:”post”を追加する

元記事を表示

パーシャルについての備忘録[Rails]

Railsにはパーシャル(partial)という機能があります。

これによって、htmlファイルをより簡潔に書くことができ、また管理も楽になります。

実用例

パーシャルファイルを作成する。

“`Bash
touch app/views/layouts/_header.html.erb
“`

パーシャルを定義する。

“`Ruby:app/views/layouts/_header.html.erb

元記事を表示

本番環境で動的コンパイルからアセットプリコンパイルに乗り換えた話

# 初めに
筆者は、スタートアップで資金繰りに困っている人をサポートするようなサービスの開発を行なっています。
普段からブログや記事を書きまくっている訳ではないので、文章のクオリティ低いことは目を瞑って読んでいただけると幸いです。

今回記事を書こうと思ったきっかけは、本番環境でプリコンパイルをせずに「動的コンパイル」のみで運用していた為、
デプロイ直後に504タイムアウトエラーに遭遇した筆者の体験を生かすべく備忘録として残そうと思いました。

意外とデフォルトで有効な設定値である「動的コンパイル」だけ利用している人も多いのでは?(違ったらごめんなさいw)と思ったので、
心当たりがある方はもちろんのこと、そうではない方も是非一読いただけると嬉しいです?

# 本番環境で動的コンパイルオンリーな運用はやめよう
なぜ、動的コンパイルオンリーな運用がダメなのか?
それは、「とある変更内容のデプロイ」をした後にタイムアウトエラーになる可能性があるからである。

とはいえ、「とある変更内容のデプロイ」って何だよ!!ってなりますよね。
「とある変更内容のデプロイ」とは、動的コンパイル処理するのに時

元記事を表示

MVCとMVVMについて

# はじめに
プログラミング初学者の者です。オンラインでプログラミングを学習させて頂いてるのですが、さらに理解を深めていきたいと思い、学習したことを備忘録として、残して理解を深めていきたいと思います。
また、間違った点など、ありましたら、ご指摘いただけると幸いです。よろしくお願いします。

# webサービス、アプリを開発する基礎
webアプリケーションを作成する上で、設計思想(ソフトウェアアーキテクチャ)または設計モデルと呼ばれる、『MVC』を基盤に作成してきました。その中で『MVVM』という概念もあるということを知ったのでその違いを説明して行きます。

# MVCについて
webアプリやwebサービスを開発する設計の手法の一つで、3つの処理を切り分けた頭文字をとって表現しています。
この設計を用いることで画面変更を容易にできたりします。
## Model(モデル)
データの処理を行い、viewから独立した処理を担当しています。
![スクリーンショット 2022-12-24 14.33.21.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

アウトプット

2022/12/24 本日学んだことのアウトプット

ルーティングをget・postにするとき
post 値を受け取るときに用いる
postの場合はviewが必要ない時がある

変数paramsの使い方
コントローラのアクション内でルーティングで設定したURL「:id」を取得できる。その値はparamsという変数にハッシュとして入っている

from youtube
コントローラ内で使う
paramsとは 送られてきた値を受け取るためのメソッド

【新規ページを作るとき】
ルーティング・アクション(コントローラ)・ビューが必要

【URLにidを含める】
「post/:id」とルーティングで指定をすると、「/posts/〇〇」というすべてのURLが該当する。←ここ注意 idだけ該当というわけではない

urlのidとデータベース内のidが同じものを表示させる必要がある。
この時に用いるのがparamsということ

元記事を表示

【備忘録】docker-compose で バージョンを指定してmigrate

“`bash
##バックグラウンドでdocker-compose up
docker-compose up -d

##マイレーションファイルを生成
docker-compose exec アプリ名 bundle exec rails g migration テーブル名

##マイグレーションファイルのバージョンを確認
docker-compose exec アプリ名 bundle exec rake db:migrate:status

##対象のマイグレーションファイルを編集後テーブルを作成
##VERSIONはマイグレーションファイルを指定する場合にマイグレーションファイルのバージョン名を指定する
docker-compose exec アプリ名 bundle exec rake db:migrate:up VERSION=20221224101010

元記事を表示

【備忘録】docker-compose で rails c コマンド

“`bash
##バックグラウンドでdockerを起動
docker-compose up -d

##入りたいコンテナ名を確認
docker ps -a

##コンテナに入る
docker exec -it コンテナ名 /bin/bash

##railsコンソールを開く
rails c

##railsのコンソールが起動
irb(main):001:0>

##Modelのテスト(例)
モデル名.find(1)

元記事を表示

Rails上でBootstrapの使い方

# はじめに
Railsアプリ開発の際、フロントエンドのコーディング時にBootStrapというフレームワークを利用し、CSSやJavaScriptのコーディングが簡略化する事ができます。そのBootstrapの導入方法についてまとめます。

# 方法1
※tarminalのディレクトリの位置はアプリ内に位置する様にcdコマンドで予め移動させてください。

1\. Bootstrapを導入
“`.terminal
% yarn add bootstrap@next
“`
:::note info
コマンド実行後、バージョンを設定する画面が表示されます。ベータ版は不具合が生じる可能性がある為、注意が必要です。
:::

2\. popper.jsを導入
“`.terminal
% yarn add @popperjs/core
“`

3\. app/javascript/packs/application.js を読み込む

“`app/views/layouts/application.html.erb
<%= stylesheet_pack_tag 'applicatio

元記事を表示

Ruby on Rails の ActiveRecord における attr_accessor と attribute メソッドの違い

Ruby on RailsでActiveRecordのモデルに属性を追加する時に`attr_accessor`と`attribute`という2つのメソッドが使えますが、この2つの違いって何?ということを簡単にまとめました。

# 結論
Ruby on Railsの`ActiveRecord::Attributes`モジュールのメソッドである[`attribute`](https://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html#method-i-attribute)を使用してモデルに追加した属性は、
– その値が変更された時にダーティフラグが立つ、
– 定義時にキャスト型を指定する事により、モデルがインスタンス化される時に型をオーバーライドできる(第2引数)、
– デフォルト値を指定できる(第3引数)、

等の特徴を持ちます。一方で、Rubyの組み込みライブラリである`Module`クラスのメソッド[`attr_accessor`](https://docs.ruby-lang.org/ja/

元記事を表示

RailsチュートリアルでSass::SyntaxError: File to import not found or unreadable: bootstrap-sprockets.が出たので解決策を探ってみた。

問題

・RailsチュートリアルにあるBootstrapが導入できない。

結論

・custom.scssから@import “bootstrap-sprockets”;を削除する。

“`Scss:custom.scss
@import “bootstrap-sprockets”; ←この行を削除する
@import “bootstrap”;
“`
[bootstrap3から4への移行方法について (Rails5)
](http://binbo-roku.com/bootstrap/programming/study/bootstrap)によると、@import “bootstrap-sprockets”;という記述はbootstrap4からは必要がなくなっているようだ。

おそらく、rails-tutorialで想定しているのはbootstrap3でコードもそれを想定したものになっていたのかと。なんらかの理由でbootstrap4以上のバージョンが使用されていたため、(原因はよくわかっていません。)この記述

元記事を表示

Stimulus リファレンス: CSSクラス

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/reference/css-classes

HTMLではCSSクラスは`class`属性を使用して要素に適用できる一連のスタイルを定義します。

CSSクラスはスタイルを変更したりプログラムでアニメーションを再生したりするための便利なツールです。 たとえばStimulusコントローラーはバックグラウンドで操作を実行しているときに”loading”クラスを要素に追加し、CSSでそのクラスをスタイルして進行状況インジケーターを表示する場合があります。

“`html

“`

“`css
.search–busy {
background-image: url(throbber.svg) no-repeat;
}
“`

クラスをJavaScript文字列でハードコ

元記事を表示

OTHERカテゴリの最新記事