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

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

Rails6からRails7へのアップデート手順(Rails6.1.4.7→Rails7.0.3)

Rails6からRails7へのアップデートメモ
===================================

今更ですが、rails4からrails7までアップデートする必要があったため
[Rails4→Rails5](https://qiita.com/t_mapico/items/ddf423113225ac45b033)
[Rails5→Rails6](https://qiita.com/t_mapico/items/4865a33b03219c99abfd)
Rails6→Rails7
のアップデートで手順をまとめていきます。

ここではRails6→Rails7の手順を書いていきます。

## 事前準備

### testが通るようにしておく
testを通るようにしておくと、アップデート後に、どこがエラーになるのか確認しやすいです。
事前にtestが全て通るようにしておきましょう。

### Ruby Version
今回はRuby 2.7.5 で対応してます

## Railsをアップデート

### gemfileの修正

gemのrailsのバージョンを

元記事を表示

GoogleCloudRun初心者がRailsのデプロイでつまづいたエラー7種

# この記事は

これは、普段AWS ECSを利用している筆者が、手元のRailsアプリでGoogle Cloud Runを試したら思いのほか手間取った話。慣れればCloud Runは推せる?

# やりたかったこと

ターミナルで華麗にデプロイ

# 前提

* ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [-darwin21]
* Rails 7.0.3
* Google Cloud SDK 393.0.0
* Docker Image ruby:2.7-alpine
* ProductName: macOS
* ProductVersion: 12.4

# 参考にした手順と発生したエラー
* [Cloud Run 環境での Rails の実行 | Ruby | Google Cloud](https://cloud.google.com/ruby/rails/run?hl=ja)
(Cloud Build は未使用)

## Error 1: NoMethodError: undefined method `size’ f

元記事を表示

【Rails】コードレビューですぐに役立つTips集

レビューする時もされる時も、似たような箇所が指摘されてきたので、まとめてみました!
(リーダブルコードも買ったから、あとで読んで追記していきたい。)

## 【Tips1】 命名大丈夫?
https://qiita.com/jnchito/items/459d58ba652bf4763820

## 【Tips2】 説明的なコメント❌WHYに答えるコメント⭕️
https://qiita.com/jnchito/items/459d58ba652bf4763820

## 【Tips3】 エラーハンドリング足りてる?
– 関連質問
– そこのfindでnilが渡されても大丈夫?
– params[:hoge]がnilでも大丈夫?
– rescueしなくていいの?
– 対処法
– `return if hoge.nil? `などで、途中で返す
– `hoge&.id`を用いる
– [Railsアプリにおけるエラー処理の考え方](https://qiita.com/jnchito/items/3ef95ea144ed15df3637)

#

元記事を表示

【Ruby】mapで回す必要ある?

リファクタのメモです。
間違っていればご指摘お願いします!

# 元のコード
“`ruby
def nomal(items)
new_items = items.map do |item|
next if item.quantity.zero?
[item.user_id, item.quantity]
end
end
“`

# リファクタ後のコード
“`ruby
def sample(items)
new_items = items.where.not(quantity: 0)
.pluck(:user_id, :quantity)
.to_h
end
“`

元記事を表示

[Ruby] 配列の結合と展開

Rubyによる、配列を結合し展開する処理について調べていみました。
間違っていればご指摘お願いします!

# 元のコード
今回は下記のコードをリファクタして、ベンチマークを計測しながら比べていこうと思います。
計測方法は[こちらの記事](https://qiita.com/scivola/items/c5b2aeaf7d67a9ef310a)を参考に計測していきます。
“`ruby
def nomal(items)
name_array = []

items.each do |item|
name_array.push([item[:id], item[:name]])
end

name_array.flatten
end
“`

## 計測コード
“`ruby
require ‘benchmark’

n = 10
items = 100.times.flat_map do |i|
[id: i, name: “山田#{i}”]
end

Benchmark.bm(10) do |r|
r.report “no

元記事を表示

[Ruby] 配列の結合について

Rubyによる配列の結合処理について調べていみました。
間違っていればご指摘お願いします!

# 計測コード
“`
require ‘benchmark’

n = 10000
y = 10
hoge_array = Array.new(y, “hoge”)

Benchmark.bm(10) do |r|
r.report “flatten” do
n.times{ [hoge_array, hoge_array, “hoge”].flatten }
end

r.report “splat” do
n.times{ [*hoge_array, *hoge_array, “hoge”] }
end

r.report “+” do
n.times{ hoge_array + hoge_array + [“hoge”] }
end
end
“`

# ベンチマーク
“`
n = 10
y = 10
user system total real
flatten 0.000055 0.000

元記事を表示

【Rails】外部APIを使う方法

# 初めに

`Rails`で外部 API を利用するには、gem や`NET::HTTP`を使う方法がありますが、今回は`Ruby`にある`NET::HTTP`を使います。

# HTTP リクエストの仕方

以下は、`Net::HTTP`を利用して[PokeAPI](https://pokeapi.co/)からポケモンのデータを取得する例です。
`https://pokeapi.co/api/v2/pokemon/:id`に対して、`GET`メソッドでリクエストを送信します。
そして、json データを受け取ります。

“`ruby:api_controller.rb
require ‘net/http’

class ApiController < ApplicationController def show pokemon_id = params[:id] uri = URI.parse('https://pokeapi.co') # URI.parseは、URIオブジェクトを生成するメソッドです。 http_client= Net::HT

元記事を表示

RailsのREST設計のヒント集

# 参考URL
– まずはRailsガイド
https://railsguides.jp/routing.html

– TechRachoの記事
RESTの基本概念からRailsのルーティング作法まで書いてあります。一通り読んで見るのをおすすめします
[Railsのルーティングを極める(前編)](https://techracho.bpsinc.jp/baba/2020_11_18/15665)
[Railsのルーティングを極める (後編)](https://techracho.bpsinc.jp/baba/2020_11_20/15619)

– DHH流ルーティング
サブアクションとフィルタリングパターンについて
[DHH流のルーティングで得られるメリットと、取り入れる上でのポイント](https://tech.kitchhike.com/entry/2017/03/07/190739)
[DHHはどのようにRailsのコントローラを書くのか](https://postd.cc/how-dhh-organizes-his-rails-controllers/)

# 最初に

元記事を表示

間違えてmigrateした時の対処法について(初心者向け)

ポートフォリオ作成中に間違った`マイグレーションファイル`を`migrate`してしまった。
恐らく、今後も同じ様な失敗をすると考えられるため忘備録として記事にしました。

そもそも`モデル`、`マイグレーションファイル`、`マイグレーション`とは

__Model__ (名): _(服装品・自動車などの)…型、雛形_
__migration__ (名):_移住、転住、渡り、移住者群、移動する動物の群_
__migrate__ (動): _(…へ)移住する、定期的に(…に)移動する、渡る_
__マイグレーションファイル__:_データベースの更新処理を行う設計図のようなもの。これをmigrateすれば、SQLを書かなくてもデータベースにテーブルが設計できる。_

### つまり
– `モデル`は __主に__ データベースのデータのやり取りを行う`機能`を担っている。
– `マイグレーション`はSQLを書かなくてもデータベースの構造を操作できる`便利な機能`のこと。
– その操作して`反映する作業`を`migrate`といい。
– `マイグレーションファイル`は反映する内容が書い

元記事を表示

Bootstrap5系でのModalについて

## はじめに
Bootstrap5系を用いてモーダルを比較的簡単に実装できますが、記述するタグが多く、テキスト化して整理しておくことが必要だと考えました。
そこで、備忘録的に記事に残しておくことにしました。

## 実装環境
– Bootstrap 5.0.2
– Ruby 2.6.3
– Rails 6.1.6

※他の言語でも問題なく動くと思いますが、本記事ではRailsで動作確認をしております。

## モーダルとは
そもそもモーダルとは何かという説明をしますと、画面に設置されたボタンをクリックすることで、他の画面に遷移することなく、ポップアップでウィンドウが表示されるものです。設置することでUI/UXの向上につながります。

## Bootstrapでの実装方法
まず、はじめに全体の記述を示します。
以下の記述でモーダルを表示することができます。
ボタンとモーダル本体で構成されています。
“`html:modal.html.erb

元記事を表示

html_safeの意味

# 背景
controller.rbにhtmlを埋め込んでもhtmlの下のようにソースコードが表示されてしまう

**失敗例**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177825/1b451b2c-80a3-f73d-9015-d792c62a6c8b.png)

# 結論
`render html: msg.html_safe`
このように、html_safeを入れること
**成功例**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177825/8781e6f0-a3b5-779c-afb6-acff8548bea1.png)

# 全体ソースコード
“`ruby:改善後sample
class HelloController < ApplicationController def index #render plain:"Hello, This

元記事を表示

50代・ほぼ独学・文系・未経験で2ヶ月半でWebアプリを開発するまで!【Rails+Nginx+Docker+AWS】

はじめに

コロナ禍の中で会社経営をあきらめ、50代目前にして「Webアプリの開発者に、オレはなる!」と決意し、2ヶ月半でアプリを作成した経緯をご紹介させていただきます。

アプリを実装するまで

今回のアプリを作成する「前」のおもな自分のスペックです。

+ アプリ開発前の年齢は限りなく50歳
+ 大学は思いっきり文系の大学。
+ 元WEBデザイナーなのでHTML,CSSなどの知識はある(JavaScriptはコピペ)。
+ 独学でProgateやRails Tutorialをやったことがある。
+ アメリカの大学卒なので英語の公式ドキュメントや記事は読める(ただしプログラミング関係は日本語でも理解がむずかしかったりするのでそこまで有利に感じなかった)。
+ 今回採用したDocker, AWS, Nginxの知識は「どこかでそんな単語を見たことあるような」のレベル

3年間ほど、書籍などを通して自分なりにアレンジをしたアプリを作成したことがあり、自社で

元記事を表示

【rails】任意のバリデーションを設定

単体テストコードでエラーと超格闘してます。そこでバリデーションを任意で設定する方法について、わかったのでアウトプットします。

やり方
“`ruby:model
class Room < ApplicationRecord validate :deadline_date #deadline_dateはメソッド名 private def deadline_date if deadline.nil? errors.add(:deadline, "締切を入力して下さい") end end end ``` 注意点 ・普段バリエーションを追加するときは「validates :カラム名, presence: true」というように記述しますが、今回は「validate メソッド名」と記述していると点 ・メソッドはprivateより下に記述すること。 ・今回はメソッド(deadline_date_cannot_be)がtrueの場合、バリデーションが作用し、エラーメッセージに"締切を入力して下さい"が追加される

元記事を表示

webサーバーとアプリケーションサーバーの違いについて

## なぜ記事を書こうと思ったか
アプリケーションサーバーとWebサーバーについての明確な違いと例えば、どのような種類があるか調べた為、備忘録としてまとめる。

## webサーバーとアプリケションサーバーの説明
– webサーバー(例:Nginx、Apache、WEBrick)
ユーザーから送られてきた自サイトへのリクエストを受け取り、なんらかの処理を加えるプログラムです。そして、場合によってはあなたのRailsアプリケーションにリクエストを投げます。SSLリクエストや静的なファイルやアセット、圧縮されたリクエスト等を処理したり、その他大半のwebサイトが必要としそうな数多くの処理をこなしたりすることができます。もし、Railsアプリケーションがリクエストを処理しなければならない場合は、webサーバーはリクエストをアプリケーションサーバーにパスします。
複数のアプリケーションを一度に処理したり、アセットを素早くレンダリングしたり、リクエストごとに発生する多くの処理をさばいたりしてくれます。

– アプリケーションサーバー(例:Unicorn、Thin、Rainbows、Mongr

元記事を表示

Rails5からRails6へのアップデート手順(Rails5.2.6.2→Rails6.1.4.7)

Rails5からRails6へのアップデートメモ
===================================

今更ですが、rails4からrails7までアップデートする必要があったため
[Rails4→Rails5](https://qiita.com/t_mapico/items/ddf423113225ac45b033)
Rails5→Rails6
[Rails6→Rails7](https://qiita.com/t_mapico/items/6f586842c15b33db3422)
のアップデートで手順をまとめていきます。

ここではRails5→Rails6の手順を書いていきます。

## 事前準備

### testが通るようにしておく
testを通るようにしておくと、アップデート後に、どこがエラーになるのか確認しやすいです。
事前にtestが全て通るようにしておきましょう。

### Ruby Version
今回はRuby 2.7.5 で対応してます

### gccのバージョンを確認しておく

mini_racerをインストールするためには、gcc6

元記事を表示

【Rails】present?を少し理解してみる(クイズあり)

# 僕はpresent?について「完全に理解」していた
Railsにはpresent?という便利なメソッドがあり、使う機会も見る機会もなかなかに多いです。

present?はblankではないオブジェクトに対してtrueを返してくれて、だいたいの場合において直感通りの挙動を示します。(`present? = !blank?`)

しかし先日少し直感とは反する挙動に遭遇し、せっかく検証したのでメモを残しておきます

# blank?ってなんだっけ?

blank?メソッドの仕様はこちら

https://api.rubyonrails.org/classes/Object.html#method-i-blank-3F

> An object is blank if it’s false, empty, or a whitespace string. For example, false, ”, ‘ ’, nil, [], and {} are all blank.

falsyなオブジェクト or emptyなオブジェクト or 空白文字がblankなオブジェクトになります。
つま

元記事を表示

こんな感じでRailsコンテナーを作ると良いのではないか?

### やってみたこと

RailsでWebサービスを行うプロジェクトに参画したがどんな風にプロダクション用のDocker化をするのが良いか勉強がてらやってみた。

### これを書いてる人のスペック

ここ10年ぐらいの RubyとRailsの文化を知らない。出始めにちょっと触ったことはあるが、すごく流行っていた時期にはほとんど触れる機会がなく、今更だけどRailsを勉強中。

– 実は[RailsによるアジャイルWebアプリケーション開発](https://www.amazon.co.jp/dp/4274066401)の初版本は読んでいた。
– プロダクションレベルでRailsアプリの開発運用経験なし。(ゼロ年代にPoCや簡易ツールの為には利用あり)
– [gem](https://rubygems.org/profiles/hkato)パッケージを一つだけ登録したことがあるがゼロ年代の話(対象Adobeのサービスは終了済み)。
– Railsで書かれているRedmineからGitLabの[プロジェクト移行ツール](https://github.com/redmine-gitlab

元記事を表示

未経験からITエンジニアとして転職するためにテックキャンプに通ってみた

# テックキャンプを受講してみて
私は、未経験でのITエンジニアへの転職を行うためにテックキャンプというプログラミングスクールに通っていましたので、今後検討される方のために感想を中立な立場として記述したいと思います。
なお、こちらの記事の内容は一個人の見解ですので、参考程度にしていただければと思います。
その上で、私の属性は以下を参考にしていただければ幸いです。

# 前提条件
【当方の前提条件】
・大学は私立文系で3年次より金融専攻
・銀行の営業員として業務に従事
・新卒で入社した企業を1年で退社した、24歳の人
・在職中にHTML&CSSは本を使って学習
・スクール学習期間中は、11時間程度学習(土日関係なし)

# 結論
テックキャンプはお勧めできる。(条件付き)
考える上で「学習内容について」「費用面」「転職活動面」の大きく3つに分けてお話しします。みなさんが気になるであろう上記3つ以外にももちろんスクール選びのための要因や比較等もあると思いますが、ひとまずこちらの3点だけ記述させていただこうと思います。

### 学習内容について
他社サービスとは比較していないですが、テッ

元記事を表示

Rails4からRails5へのアップデート手順(Rails4.2.11→Rails5.2.6.2)

Rails4からRails5へのアップデートメモ
===================================

今更ですが、rails4からrails7までアップデートする必要があったため
Rails4→Rails5
[Rails5→Rails6](https://qiita.com/t_mapico/items/4865a33b03219c99abfd)
[Rails6→Rails7](https://qiita.com/t_mapico/items/6f586842c15b33db3422)
のアップデートで手順をまとめていきます。

ここではRails4→Rails5の手順を書いていきます。

## 事前準備

### testが通るようにしておく
testを通るようにしておくと、アップデート後に、どこがエラーになるのか確認しやすいです。
事前にtestが全て通るようにしておきましょう。

### ruby更新
rubyが2.5.7だと対応してないgemがいくつかあり、
gem updateでエラーが出たので2.7.5にupdateしました。

## Railsをア

元記事を表示

【rails】active_storageに簡単にバリデーションを追加

画像投稿を簡単に導入できるactive_storageというGemがあります。画像投稿は簡単に実装できるようになりますが、PDFなども画像として投稿可能なため、思わぬエラーの原因になり得ます。そこで、バリデーション設定するにアウトプットします。

![スクリーンショット 2022-07-24 7.41.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2707093/525ce0cf-f621-8eeb-f08e-e5622c8fc91c.png)
# 結論
Active Storage ValidationsというGemを導入すると、既存のvalidateと同じような記述でバリデーションを追加できます。もう1つの方法は自身でバリデーションのメソッドを定義する方法ですが、今回こちらは紹介しません。
導入方法
“`ruby:gemfile
# Rails 5.2 and Rails 6バージョンのみ利用可能
gem ‘active_storage_validations’
#記述後bundle ins

元記事を表示

OTHERカテゴリの最新記事