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

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

RailsエンジニアがRustでWebアプリを作るまで(1日目)

## 概要と注意
– 本記事は、完全未学習の状態からRustでAPIを書くまでの学習過程です。
– 筆者が普段主務で使っているのがRuby(Rails)のため、Railsに例えた比喩が度々出ます。
– Rustに関しての正確な説明はしていません。それどころか、間違った説明が度々出ます。あくまで学習の記録として読んでください。(訂正のコメントは大歓迎であります。)
– 習得したら、全ての過程を1つの記事にまとめます

## 1日目 (学習時間: 1h)

### Rustをinstallするよ!
兎にも角にもまずは環境を作らねばということで、Rustのinstall方法を検索
ありがたいことに[公式の日本語ドキュメント](https://www.rust-lang.org/ja/tools/install)があったので、書いている通りにinstall

“` sh
curl –proto ‘=https’ –tlsv1.2 -sSf https://sh.rustup.rs | sh
# 使っているshellでPATHを通す
“`
ふむ、はいったようだ
“`
> rustup

元記事を表示

Rails6, activerecord-sqlserver-adapterでinsert_all!は使えるのにinsert_allが使えない問題

Rails6でのSQLServerにて“`insert_all“`が使えなく、調査したのでメモ。
出るエラーは以下

“`Bash
Model.insert_all([{name: ‘test’}])
ArgumentError: ActiveRecord::ConnectionAdapters::SQLServerAdapter does not support skipping duplicates
“`

## 環境

“`lock
activerecord-sqlserver-adapter (6.0.0)
activerecord (~> 6.0.0)
“`

## Railsのコードを読む

結論を先に言うと、“`ActiveRecord#insert_all“`は以下で“`on_duplicate: :skip“`という主キーが重複するレコードをスキップする引数をデフォルトで渡しているが、“`activerecord-sqlserver-adapter“`ではこれをサポートしていないのが原因。

“`Ruby
def insert_all(att

元記事を表示

【Rails】データベースのテーブルを新設し,カラムを編集する

# はじめに
学習中で躓いた箇所を記事にしました.初学者の学習の一助となれば幸いです.
また,内容に不備,間違いがあればご指摘いただければと思います.

### 環境
Ruby 3.1.2
Rails 6.1.7

# 目次
**1. 基礎知識**

**2. データベースにテーブルを新設する**
2-1. マイグレーションファイルを作成する
2-2. マイグレーションファイルをデータベースに適用する
2-3. データベースのテーブル定義を確認する

**3. テーブルのカラムを編集(修正,追加,削除)する**
3-1. カラム名を修正する
3-2. カラムを追加する
3-3. カラムを削除する
3-4. マイグレーションファイルの直接編集によりカラムを編集する
3-5. 極力,マイグレーションファイルは直接編集しない

**4. まとめ**

# 1. 基礎知識
データベースのテーブルカラムを編集するためには,マイグレーションファイルを作成し,データベースへ適用します.マイグレーションファイルとは,データベースのテーブル仕様(カラム名,データ型等)を記載した.rbファイルです.Rai

元記事を表示

【ActiveModelSerializer】undefined method `read_attribute_for_serialization’

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## 状況

serializerを指定するところで下記のエラーが発生。

“`
NoMethodError:
undefined method `read_attribute_for_serialization’ for #
“`

“`ruby
def show
posts = …
render json: posts,
serializer: HogePostSerializer
end
“`

## 解決法
“`serializer“`ではなく“`each_serializer“`に変更する。
大体の場合“`each_serializer“`は“`index“`アクションで使うイメージがあったし、ドキュメントにもそう書いてあった
>To specify which serializer to use on ind

元記事を表示

【Ruby】ひらがな/カタカナ変換や全角/半角変換や漢字にマッチする正規表現などなど

# 目次
1. [概要](#概要)
2. [参考文献](#参考文献)
3. [使用した正規表現](#使用した正規表現)
4. [作ったメソッド達](#作ったメソッド達)
– [全角半角変換](#全角半角変換)
– [ひらがなカタカナ変換](#ひらがなカタカナ変換)
– [記号の削除](#記号の削除)
5. [破壊的メソッドにしたい時!](#破壊的メソッドにしたい時)
6. [Railsにおける便利な文字列操作のおすすめ記事](#Railsにおける便利な文字列操作のおすすめ記事)

# 概要
日本語の表記揺れなどに対応する必要があり、Stringクラスに定義する形で色々作ったのでメモしておきます。

# 参考文献
– https://easyramble.com/japanese-regex-with-ruby-oniguruma.html
– https://docs.ruby-lang.org/ja/latest/class/String.html#I_TR
– https://docs.ruby-lang.org/ja/latest/class/NKF.ht

元記事を表示

【Ruby】ダックタイピングとは

## 環境
Rails 6.0.1
Ruby 2.6.3
PostgreSQL 11.16

## ダックタイピングとは
特定のクラスと結びつかない、クラスを跨ぐパブリックインターフェースを取り決め実装する作法。
下記の例は“`bark“`メソッドがダックタイプされていると言える。
もっと複雑な実装になってくると“`bark“`メソッドをmoduleにまとめて共通化する方が良さそう。

“`ruby
class Cat
def bark
puts ‘ニャーニャー’
end
end

class Dog
def bark
puts ‘ワンワン’
end
end

mike = Cat.new
poti = Dog.new

mike.bark
#=> ‘ニャーニャー’
poti.bark
#=> ‘ワンワン’
“`

### 継承よりもダックタイピングを積極的に使うこと
ダックタイピングを知ったとき継承とどう使い分けるのか気になった。
継承が設計上必要でなければ、ダックタイピングで楽しようとのこと。

“`ruby
class Animal

元記事を表示

Xcode CLTはインストール済みだが、bundle installに落ちる場合の対処法

## 状況

[この記事](https://k-koh.hatenablog.com/entry/2022/09/01/114030)と同じ状況で、pumaを5.6.5に上げてbundle installをしたらエラーが出てinstallに失敗してしまった。

xcode CommandLineTools(CLT) がインストールされてるか確認してみたが、

“`shell
$ xcode-select –install
xcode-select: error: command line tools are already installed, use “Software Update” to install updates
“`

と、すでにインストールされていた。

## 解決した方法

xcodeを開く。
以上。

xcodeを開くと自動でアップデートが走って直りました。

元記事を表示

マイグレーションのステータスで表示される、NO FILEを表示させなくするには

## 環境
Rails5.2
Ubuntu20.4

## 内容
不要になったため、マイグレーションファイルを**rm**で削除したのだが、不用意であったため、マイグレーションのステータスを表示すると、**NO FILE**で残ってしまうこととなった。
“`
$ rails db:migration:status
up 20220819003642 ********** NO FILE **********
“`

この**NO FILE**をステータスから削除することとする。まずは、20220819003642_test01.rbという空ファイルを作成してやる。test01の部分は、どのような名前でもOKです。すると、**NO FILE**から、マイグレーションの履歴が復活しました。
“`
$ rails db:migration:status
up 20220819003642 Test01
“`

20220819003642_test01.rbの状態は**up**になっています。削除するには、**down**にする必要があります。空ファイルに、空のc

元記事を表示

Heroku+Railsでバッチ処理を作成する

# 目的
個人開発のRailsアプリで、1日1回メール配信を行うバッチ処理を作る必要があり、調べて実装した時の備忘録です。

メール配信はsidekiqで非同期処理させており、開発環境ではsidekiq-schedularで24時間周期で起動させていました。
しかし、本番環境で利用しているHeroku(無料枠)では、30分でWebサーバがIdleになるため、うまく動作しませんでした。このため本番環境ではHerokuのアドオン(Heroku-schedular)を使った構成にしています。

スモールスタート等でRails+Heroku構成を選択される方は多いと思いますので、参考になれば幸いです。

# 開発環境
+ Rails 6.0.3.3
+ Heroku FreeDyno

# 手順
手順はシンプルです。1はRails、2と3はHeroku側で行います。順を追って説明します。

1. 実行したいタスクをrakeファイルに書く
2. Heroku-schedularをアドオンする
3. Heroku-schedularにスケジューラを設定する

### 1. 実行したいタスクをr

元記事を表示

SIerのSEからWeb系エンジニアに転職して1年間の振り返り

# はじめに
はじめまして。
私はちょうど1年前に大手SIerから実務未経験でWebサービス(SaaS)を運営する少人数ベンチャーに転職しました。
1年経ったので、どんな感じだったか、少し細かめに振り返りを書いていこうと思います。

# 前提
### この記事の意図
今後の自分のために整理しておきたく、自分の中だけにとどめておくのも勿体ないので、少しでも誰かの参考になれたらと、アウトプットしておこうと思ったのが背景です。

### どんな環境?立場?
– サービス開始から10年、創業は5年ほどの少人数ベンチャー
– toB&toCの両機能がある自社開発のSaaSを展開
– エンジニアチームは計5〜7名、内訳は以下
– 代表取締役(エンジニアマネージャーも兼ねる)
– 私(エンジニア:最近はシステム運用面のマネージャーも兼ねつつ開発も担当)
– 学生インターンのエンジニア3~5名(フロントエンドとバックエンドの開発担当、インフラは担当外)

# やったこと(経験)
## サマリ
### 担当した範囲
仕様検討、設計、実装、テスト(自動・手動)、デプロイ、PjM(デ

元記事を表示

本番環境でFailed to upgrade to WebSocketエラー

### 状況
ローカルでは投稿に対してのコメントができる(ajax)のに、本番環境ではできていなかった。

### 原因
本番環境でactioncableが使えない状況だった

### 解決方法
“`ruby:EC2内
$ sudo vim /etc/nginx/conf.d/rails.conf
“`
以下を貼り付ける。
“`ruby:/etc/nginx/conf.d/rails.conf
upstream app_server {
server unix:/var/www/アプリケーション名/shared/tmp/sockets/unicorn.sock;
}

server {
#省略
# ——————-ここから——————-
# /cableのパスに対してwebsocketの仕組みを用いるための設定
location /cable {
proxy_pass http://app_server/cable;
proxy_http_version 1.1;
proxy_set_header

元記事を表示

【Rails基本編】美少女と学んだ気になれる講座

この講座は、Web業界未経験の**吉野 桜**と、その先輩である**堀切 あやめ**のかわいさをお楽しみいただくため、邪魔にならない程度の差し障りのないWeb技術の話を、お楽しみいただく番組です

## キャラクター

![20220920_resize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208060/de425bd4-b556-4140-4e9f-52c22fdcd657.png)
吉野 桜: Web業界未経験

![20200920_resize.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/208060/8e061b61-cc55-072c-118d-f5f86c2b61ed.png)
堀切 あやめ: Web業界三年目

## 本編

桜「うちのバックエンドってRuby on Railsですよね?」
あやめ「うん、そうだね」
桜「桜、実はRuby on Railsからっきしで……」
あやめ「そうな

元記事を表示

【入門】Ruby eachメソッドの様々な使い方を具体的に紹介

# はじめに
今回は、Rubyに標準で組み込まれている`eachメソッド`について、備忘録としてまとめます。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

# この記事の目的
Rubyに標準で組み込まれている`eachメソッド`についてアウトプット

# この記事の内容
1. each_with_index
2. each.with_index
3. eachの入れ子
4. each_slice
5. each_key
6. each_value

# 1. each_with_index
eachメソッドと同様に、要素の繰り返し処理を行いつつ、その要素が何番目に処理されたものなのか表示するメソッドです。
eachでループを回しつつ、それぞれのデータ(要素)に番号を振りたい時などに使います。

– 書き方
“`ruby
配列名.each_with_index do |item, index|

end
“`
– 基本的な書き方
“`ruby
#書き方①
foods = [“あんぱん”, “メロンパン

元記事を表示

[Rails7]JavaScriptでTurboを無効化する方法

# リロードしないとJavaScriptが動かない

Rails7のTurboが原因。
JSファイルで`turbo:load`イベントを使用する。

“`javascript:test.js
document.addEventListener(‘turbo:load’, function() {
console.log(‘turbo無効化’);
});
“`

`turbolinks`ではなく`turbo`なので気をつけてください。

参考

https://blog.willnet.in/entry/2021/02/14/154101

元記事を表示

【Rails】GraphQL + Devise認証

# はじめに

Rails API 認証方法として“`devise_token_auth“`を使っているものはよくみるんですが、
既存のサービスで使っている“`devise“`をそのまま使用する実装方法はあまりありませんでしたので記事を書きました。

# 前提

* すでに運用開始している Railsアプリケーションに追加で実装する(APIモードではない)
* “`devise“` を使用する(“`devise_token_auth“` は使用しない)
* 既存の User モデルに適用する
* GraphQL を実装する
* フロント側の実装は割愛

# 構成

認証フローを図にまとめてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308256/42ba77b4-921b-c352-df95-cada0da156b8.png)

③については、フロント側の実装となりますので、こちらの記事では割愛させていただきます。

# 実装の流れ

* Rails ア

元記事を表示

【Rails】【JavaScript】Ajaxを用いてメモ帳の様なアプリをフォームで作る方法

大阪でRailsを中心に学習している薬剤師エンジニア(初学者)こと、ヨマ(@yoma_2003)です!
**Ajaxを用いてメモ帳の様なアプリをフォームで作る方法**をまとめます。

※おことわり※
断定口調でまとめますが、初学者であるため間違い等あればご指摘頂けると嬉しいです。

# はじめに
### やりたいこと
以下の様な**自動更新機能のあるメモ帳(追加・削除できる)アプリ**を作りたい。

![fyj9o-w9rr8.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2711042/42ed6ece-62d4-4ab8-5d90-3d0b5e097e24.gif)

### アプリの要件
具体的には以下の様な要件を満たすアプリを作成します。
– ページ遷移がない(index.htmlのみ)
– フォームに入力すると、自動で更新される
– 新規ボタンを押すと、フォームが追加される
– 削除ボタンを押すと、フォームが削除される
– 操作後に更新日時が更新される

# 本記事のポイント

**・データ更

元記事を表示

git-secretsでコミットができなくなった場合の対処法

### 環境
ソースツリー

### 概要
git-secretsによって、コミットできなくなった場合の対処法の記事はたくさんあるが、
それでは対処できなかったので、備忘録として残しておく。今回は、一旦git-secretsを完全に取り除いてコミットさせるようにする。

### エラー内容
“`
git: ‘secrets’ is not a git command. See ‘git –help’.
“`

## 解決手順
### ①git-secretsをアンインストールする。
“`
$ brew uninstall git-secrets
“`
これでコミットできるようになったかと思いきや、またしても以下のエラーが出る。
“`
git: ‘secrets’ is not a git command. See ‘git –help’.
“`
調べていくうちに、各リポジトリの「.git/hooks」にある「commit-msg, pre-commit, prepare-commit-msg」の3つを消さなければいけないらしい。

## ② 削除する
該当のリポジトリに

元記事を表示

【Rails】render :json に modelメソッドの返り値を追加する方法

# きっかけ
`controller`の返り値を`json`形式で返却する時、モデルで定義されている`attributes`しか返すことができません。そんな時、他の`attributes`を追加する方法が分からず困ることがあったので、備忘録として残します。

# attributeを追加する
`render json:` に、`methodsオプション`をつけ、`model`で定義したメソッドを呼び出す。

# 使い方
例えば・・・
以下のようなモデルがあったとする。
“`ruby
create_table “users”, force: :cascade do |t|
t.string “first_name”, null: false
t.string “last_name”, null: false
t.datetime “created_at”, precision: 6, null: false
t.datetime “updated_at”, precision: 6, null: false
end
“`

で、以下のようにで`ActiveRecor

元記事を表示

システムスペックではvisit hoge_urlではなくvisit hoge_pathと書かないとNet::ReadTimeoutエラーが発生する

## 発生した問題
Hello worldレベルのごく簡単なRailsアプリを作成し、rspec-railsをインストールして次のようなシステムスペックを書きました。

“`ruby
require ‘rails_helper’

RSpec.describe “Home”, type: :system do
before do
driven_by(:selenium_chrome_headless)
end

example do
visit root_url
expect(page).to have_content ‘Home#index’
end
end
“`

テストを実行すると・・・あれ?

“`
$ bundle exec rspec
DEBUGGER: Attaching after process 28722 fork to child process 28745

(何も起きない)
“`

この状態が何十秒も続き、最終的には以下のエラーが出て終了しました。

“`
$ bundle exec rspec
DEBU

元記事を表示

【Rails】Rails6系にアップデートしたらテストでbut rendering with <["rescues/blocked_host", "rescues/layout"]>というエラーが出た【minitest】

# どうした?
ある程度開発を進めたタイミングでRailsのバージョンを5系から6系へアップしたところ、テストでエラーが出ました。

# 環境
“`terminal
$ ruby -v
=> ruby 3.1.2p20

$ rails -v
=> Rails 6.1.7
(アップデート前: 5.2.8.1)
“`

# 事象
minitestにて
“`
get “/”
assert_template “home/top”
“`
の結果
“`terminal
expecting <"home/top"> but rendering with <["rescues/blocked_host", "rescues/layout"]>
“`
と返ってきました。
もちろんバージョンアップ前はするすると通っていたテストですし、ローカルサーバー上でも問題ありません。

# 解決策

[参照元]((https://qiita.com/Mackey3510/items/7bfaa0b42782de40bc30))の解決策①を試しましたが、テストでのエラーは解決しませんでした。
そこで、`c

元記事を表示

OTHERカテゴリの最新記事