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

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

TerraformでRailsを載せるECS Fargate環境とReactを載せるS3環境を作成する

RailsのAPIを載せるステージングと本番用のFargate環境をTerraformで作成する機会があったので自分用のメモも兼ねて記事を書くことにしました。
Reactを載せるためのS3などもTerraformで作っております。
利用しているTerraformのバージョンは1.2.0です。

Workspacesを使うかや、Terraform Registryのモジュールを使うかなど悩みましたが、
ひとまず自分の現段階でいいと思えた構成にしています。
ベストプラクティスを示しているわけではないので、より良くなるアドバイスがあれば優しく教えていただけると幸いです。

リポジトリはこちらです
https://github.com/hatsu38/rails-nginx-fargate-infra-template

## 作る環境
S3とCloudFrontはReactを載せる用のリソースです。
![ECS Fargate For Insight-本番環境.drawio (1).png](https://qiita-image-store.s3.ap-northeast-1.amazo

元記事を表示

Railsにおける配列への代入とリファクタリング

# 問題のルール

1. lengthとwidthが引数で渡され、最大サイズの正方形を可能な限り求めて、その正方形の一辺の長さを配列にまとめて戻り値にする。
2. lengthとwidthが同じ長さの場合はnilを返す
イメージ図は下記で、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264678/2d63c005-7786-5382-ac9f-a37d958444a2.png)
テストとしては下記のようなものになる

“`ruby
sqInRect(5, 3) should return [3, 2, 1, 1]
sqInRect(3, 5) should return [3, 2, 1, 1]
“`

# 最初に書いたコード
ざっと以下のように書いたが、毎度ながら`空の配列list`の定義が少し見にくい時がある。

“`ruby
def check_smallest_square(line_a, line_b, list)
## sortの代わりにminm

元記事を表示

Railsで効率的に列を捌ける仕組みを考える

# ルール
作業可能レーンに順番にかかる作業時間がバラバラなタスクが流れてきて、最終的に作業可能レーンにタスクがなくなる時間を知りたい

## 具体的に
`times`には、作業にかかる時間が適当な数定義されており、
`till`は作業可能レーン数が定義されている。
最終的に全部の`tills`で作業が終わる時間が知りたい。

“`ruby
times = [3,4,5,6,7,8,9,20,30]
till = 5
tills = Array.new(till, 0)
# => tills
# => [0, 0, 0, 0, 0]
“`

# 求め方
`times`をeachでまわし、`tills`の中で一番作業時間が少ない`列`をindex()の引数に持ち、
その列をtillsから特定して、eachの値を加算していく.

“`ruby
times.each {|time| tills[tills.index(tills.min)] += time}

tills.max
#> tills
#=> [11, 13, 25, 36, 7]
#> tills.max
#=> 36

元記事を表示

RailsでCSVファイルをインポートする方法改

CSVファイルをインポートしてデータベース/テーブルに登録って段取りは結構メジャーで、既に幾つも解説記事が上がってる。その節はお世話になりました。

前はその通りにやって出来たのだけど、今新しいプロジェクトでソースを使い回すと何故か出来ない。確実ではないけど、ひょっとしたらrailsかrubyのバージョンによって出来ないとかあんのか?となったので、今できてるものを以下にメモ的に置いておきます。少なくとも自分はこれで半日潰しました。

バージョンはruby 3.04、rails 6.1.7です。ちゃんとした仕組みとか解説は他を読んだ方がいいよ。

## Gemfile
とりあえず

“`Gemfile
gem ‘roo’
“`
bundle installとかもしておくように。

## application.rb
一応csvのrequireを書いておく
“`config/application.rb
reuire “rails/all”
require ‘csv’
“`

## views
ここが以前と特に違う。
以前は参考にしたサイトはどこも、パスの指定がimpor

元記事を表示

[rails]Googlemap APIを使ってプチ食べログを作りたいのでテスト環境で途中まで実装してみた!

2022/11/27
これまでずっと詰まってたのですが
日本サッカーがコスタリカに負けてから何故かうまく行き始めたのでそのままの勢いでQiitaを書きます。
私は初心者なので、正解を書ける自信がないので完全未経験の方用に何か書くつもりはあまりありません。ご承知ください。
また、違ったことを書いている可能性もございますので、その時は宜しければご指摘していただけると幸いです。

## [やりたいこと]
ポートフォリオ用に、食べログのラーメン屋さん専門みたいなのを作ろうかなと
やろうとしている機能は
○Device機能
☆GooglemapAPI(今回の主軸)
○多対多(アソシエーション、フォロー機能)
○AWS
などです。

## [注意]
かなり行き当たりばったりな記事です。
先にサンプルファイルで機能実装テストが完了してから本番ファイルで実装する予定です。
こちらのテストではユーザー関連は実装しておりませんので
後々、他のgemなどの影響で書き方など変わる可能性があります。ご承知ください。

## [環境]
※使っていない可能性のある環境も記載してます。
Mac M1チップ
ra

元記事を表示

【Rails】Twitterクローンを作ってみた 〜GitHubログイン(OmniAuth)〜

## はじめに
[【Rails】Twitterクローンを作ってみた 〜画像アップロード(ActiveRecord)〜](https://qiita.com/bloom__fu/items/761d53d644b6a016ed0d)の続きです。こちらを前提に進めていきますので、まだご覧になっていない方はそちらからご覧ください!※こちらはdockerでの環境構築を省きます。
## サービス環境
– ruby 3.0.0
– Rails 6.0.4
– docker
– mysql 8.0.2
– Slim, SCSS

## OmniAuth
#### 条件
– Git Hubアカウントでログインできる
DeviseのモジュールOmniauthableを使用しGit Hubログインをできるようにしてください。
#### 実装流れ(簡略)
1. https://fuga-ch85.hatenablog.com/entry/2021/04/04/164302
こちらを参考にGitHubのClient IDとClient secretsを取得してください。
2. Client IDとClien

元記事を表示

RailsでITF規格のバーコードを作ろうとした話

# 結論
~~できなかった。(何か方法やライブラリがあれば教えてください。。。~~

### 経緯
– 業務の中でITF規格のバーコードの生成が必要になった
– 色々調べてみたところ`Barby`というライブラリを使うとバーコード生成が簡単にできる
– 流通する国や商品の種類などによってバーコード自体の規格も違うことが分かった
– ~~残念ながら`Barby`だと今回必要なITF規格のバーコードが生成できないことが分かった~~

## 代替案
– JavaScriptで実装する

バックエンドでの生成はいったん諦めて[JsBarcode](https://github.com/lindell/JsBarcode)というJavaScriptのライブラリを使用して実装することに決めた。
### 実装
npmコマンドを実行
“`
npm install jsbarcode –save
“`

“`erb:sample.erb

<%= hidden_field_tag 'barcode_number', @barcode_number ||=

元記事を表示

インスタンスの属性で並び替える

# sort_by
“`rb
sort_by {|item| … } -> [object]
“`
## 出典
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/sort_by.html

# Sorting an array of objects in Ruby by object attribute?
サイトを見つけた時のタイトルです。
自分が見つけたいものがあるような単語が並んでいたのでサイトを開いてみました。

“`rb
objects.sort_by {|obj| obj.attribute}
“`
## できた
これで属性で並び替えることができた。

### 出典
https://gorails.com/forum/sorting-an-array-of-objects-in-ruby-by-object-attribute

# 感想
英語のサイトを見て問題が解決できたので、何か気持ちがいいです。

元記事を表示

Rails – ModelのscopeとControllerのメソッドチェーンでAND検索をする例

“`rb
class User < ApplicationRecord scope :filter_name, ->(name) do
return self if name.blank?
where(name: name)
end

scope :filter_age, ->(age) do
return self if age.blank?
where(age: age)
end
end
“`

“`rb
class UserController < ApplicationController def search users = User .all .filter_name(user_params[:name]) .filter_age(user_params[:age]) render json: { users: users } end private def user_params

元記事を表示

RailsでSupabaseのPostgreSQLを使ってみる

# はじめに

なんかサービス作るときに、DBどうする問題があると思います
クラウドのDBはなかなかお高くて、低コストで運用したいなと思ったときに困ったので調べてました
結果、Supabaseがよさそうだったので使ってみます

単純にDBだけならPlanetScaleのほうが無料枠が充実していてよいかと思ったけど、ユーザ認証など今後も見据えてSupabaseをチョイスしました

今回は、RailsからSupabaseのPostgreSQLに接続してみます 🙂

https://supabase.com/

https://planetscale.com/

# 環境
Rails v7.0.4
Supabase Postgres

# Supabase Sing up
GitHubのアカウントがある人はGitHub認証すればOKです

# Supabase Create Project
## Projectを作成します

Project名はお好きな名前を入力
DBのパスワードは、`Generate a password`リンクをクリックしたら作ってくれます
パスワード忘れち

元記事を表示

Alma Linux9にRailsアプリケーションの最低限の動作環境を構築する際の個人的備忘録

# はじめに
本記事はAlma Linux9で最低限のRailsアプリケーションを動作させるための手順を記したものです。
前提は以下となります。
* RailsアプリケーションはGitクローンしてくる
* Rubyのバージョンは3.1.2とする
* gemはvendor配下にbundle installする

# 手順

1. アップデートを行う
“`bash
$ dnf update -y
“`
1. `git` をインストールする
“`bash
$ dnf install git -y
“`
1. `vim` をインストールする
“`bash
$ dnf install vim-enhanced -y
“`
1. 開発者用ツールをインストールする(Todo: Cコンパイラだけでいいかもしれない)
“`bash
$ dnf group install “Development Tools” -y
“`
1. `mysql` or `postgresql` に必要なパッケージ

元記事を表示

JavaScriptからReact、Next.js、TypeScriptを学んでPFに取り掛かれるレベルになるまでのロードマップ

以下のロードマップ/学習記録は[ProadMaps](https://proadmaps.com/1506616851853242371/roadmaps/14)で作成しました。
ロードマップの作成、共有から、作成したロードマップをマークダウンで出力ができるので、Qiita等の外部サイトや、個人ブログへの転記にも便利です。

https://proadmaps.com/1506616851853242371/roadmaps/14

# JavaScriptからReact、Next.js(TypeScript)までの学習ロードマップ

**概要**

Next.jsでポートフォリオを作成できるようになるまでの学習記録になります。今だったらこの順番でやればよかったなぁと思う順番に並び替えています。

**タグ**

Next.js,React,TyepScript,JavaScript,Ruby,Rails

**開始時スキル**

Railsの学習経験あり

**終了時スキル**

ポートフォリオに取り掛かれる

**総ステップ数**

7

## ステップ1 【Progate】 Pr

元記事を表示

Renderによるデプロイ

# はじめに
Ruby on Railsを用いて開発したWebアプリケーションをRenderを用いて無料でデプロイする方法を記載します。

# Renderを用いる際の注意点
Renderには無料枠と有料枠の2種類が存在します。
有料枠に比べ無料枠はできることに制限があるので、まずはそれを知ることから。

## ①Webアプリケーションに関する制限
– 無料プランでは、非アクティブ状態が 15 分間続くと自動的にアプリがスリープします。
新しいリクエストが来るとスリープが解除されますが、最大30秒の応答遅延が発生する可能性があります。

– 無料プランで使用できるのは、 1か月あたり750時間の実行時間と、100GBまでのデータ転送です。100GBを超える場合、0.10 USD/GBが課金されます。

– 無料枠を超えると、サービスは自動的に中断され、有料プランにアップグレードされるか、無料枠がリセットされるまで、トラフィックを処理できなくなります。無料利用は毎月1日にリセットされます。

– 通常、無料の Web サービスのビルドは、有料サービスのビルドよりも遅くなります。ビルドとデ

元記事を表示

Railsでポートフォリオ制作②【環境構築】

Web系企業でのバックエンドエンジニアとしての就職を目指して、ポートフォリオを制作しています。
ポートフォリオ制作のすべての記録を残していきます。

## この記事は
Rails環境構築でエラーに出合いまくり七転八倒した私が、どうにか`rails new`までこぎつけた軌跡を記しています。
エラー解消のためにひとつひとつの操作・コマンドを理解しようと、それぞれ意味を調べて書いています。
Railsでこれから環境構築する方の参考になれば幸いです!

## マシンスペック
– macOS Monterey
– MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
– Intel Core i7
– メモリ 32GB

## Ruby, Railのバージョン
– Ruby: 3.1.2
– Rails: 7.0.4
### どうやってRuby, Railsのバージョンを決める?
– 基本最新のものを使うべき
– 理由:古いものだと脆弱性があったりセキュリティ的に問題がある可能性があるから
– メジャーバージョンが上がってすぐのタイ

元記事を表示

【Rails,ゲストログイン】削除される度に,同一ゲストユーザーを生成する

## はじめに
ゲストユーザーが削除された際に,「ゲストログイン」ボタン押下で,削除前と同一のゲストユーザーを再生成する方法をまとめました.
Rails初心者の記事です.
不足,間違い等ありましたらご指摘いただけますと幸いです.

## 環境
Ruby 3.0.4
Rails 6.1.7

## ゲストログイン機能の仕様
ゲストログインボタンを押下すると,ゲストユーザーのユーザー情報に合致するユーザーが存在するか照合する.
存在すれば,当該ユーザーでログインする.
存在しなければ,指定したデータを持つゲストユーザーを生成しログインする.

## 実装
### sessionsコントローラでguest_loginアクションを実装
ゲストユーザーの照合,生成を実装します.
また,ゲストユーザーをログインユーザーとして扱うため,セッションに`user.id`を格納します.
ログイン判定は,後述のApplicationControllerで実装しています.
“`ruby:app/controllers/sessions_controller.rb
class SessionsControl

元記事を表示

2022年、Ruby on Railsは「RPGツクール」感覚で学ぶべきなのかもしれない

一見すると意味不明極まりないタイトルですが、実際そう感じたので書きます。

Railsは今から10年ぐらい前、簡単にウェブアプリが作れるフレームワークとして注目され、非常に高い人気を得ました。
しかし、今となってはシステムが非常にレガシーになってしまい、使い辛いという感覚の人や会社も多数出ています。特に大規模システムには使い辛いと感じる人も多いでしょう。

なので、「もうRailsの時代は終わった。学ぶ必要性はない」という人もそれなりにいると思います。逆に「まだまだ使える!」と思う人も多いでしょう。

で、Railsを使わずにフロンドエンドもバックエンドもNode.jsで作った身で言うとRailsを学ぶ非常に大きな利点が一つあります。

それは初心者としては非常に扱いやすいということ、そしてRailsで身に着けた知識は特にバックエンドの開発で非常に役に立つということです。

例えば通知機能、普通にNode.jsで作ろうとした場合、初心者なら「どうやって実装するんだ?」と頭を抱えると思います。検索しても方法が中々見つかりません。
しかし、Railsだと通知機能の作り方が簡単に見つかります

元記事を表示

Railsで判定機能を作って遊ぶ[Find the missing letter]

# ルール
“`
アルファベットが順番に定義された配列が存在する.
だが、順番の中で1つ抜けているものがあるからそれを特定する。
大文字・小文字のパターンがあるので注意する。
“`

# テストコード

“`
Test.assert_equals(find_missing_letter([“a”,”b”,”c”,”d”,”f”]), “e”)
Test.assert_equals(find_missing_letter([“O”,”Q”,”R”,”S”]), “P”)
Test.assert_equals(find_missing_letter([“b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“a”,”b”,”d”]), “c”)
Test.assert_equals(find_missing_letter([“b”,”d”,”e”]), “c”)
“`

# リファクタリング前の判定メソッド
次のアルファベットを判別するために、ハッシュで次のアルファベットを取れるように定義した。
この時に、小文字のパターンしか

元記事を表示

Railsのcase文で色々遊ぶ

# 遊ぶ
暇だったので色々rubyの問題を解いていたのだが、こういう簡単なお題でも色々書き方があって面白い。

“`
#### ルール
下記4つの文字列をもとに計算するメソッドを作る。

iは値を+1
dは値を-1
sは値を二乗
oは値を配列に出力

#### 条件
1. メソッド名はparseで、ランダムなStringの値が引数としてくる。
2. idso以外の文字列も引数として与えられるため、紛れ込んでても対応する
“`

テストの値

“`ruby
expect(parse(“ooo”)).to eq([0, 0, 0])
expect(parse(“iiisdoso”)).to eq([8, 64])
expect(parse(“ioioio”)).to eq([1, 2, 3])
expect(parse(“idoiido”)).to eq([0, 1])
expect(parse(“isoisoiso”)).to eq([1, 4, 25])
expect(parse(“codewars”)).to eq([0])
`

元記事を表示

Capistrano + Unicornでデプロイが反映されない時

Capistrano + Unicornの環境で構築すると、デプロイした内容が反映されない時がある。
ググってみると「stop → startすれば直るよ」と書いてある記事をよく見かけるが、それだと無停止デプロイできないし本番で使えないだろ、と思って原因を調べてみた。

# 原因

capistranoはデプロイ日時14桁のディレクトリを作成して、そこに新しいリソースをチェックアウトし、参紹ディレクトリを切り替える仕組みだが、これが古いディレクトリのままになっていた。
ページ内で `__dir__` で現在のファイルのディレクトリパスを画面上に出すようにしたら、デプロイ後もデプロイ前のディレクトリになっていた。

`capistrano/current` のリンク先は正常に変わっていたので、**変わったリンク先を見てくれていないのが原因**と判明。

# 対策

## working_directoryを絶対パスに変更

unicorn.rbの設定方法の記事をみると、大抵の記事が以下のように書いてある。

“`config/unicorn.rb
app_path = File.exp

元記事を表示

fly.ioへのRailsアプリデプロイ備忘録

### 概要
herokuの無料版が11月28日に終了するため、
Railsアプリを**fly.io**にデプロイし直しました。
備忘録として実施手順を残します。


### 環境
Ruby on Rails : 6.1.7
ruby : 3.0.1
postgresql : 14.6
macOS : 13.0.1


### デプロイ手順
#### fly.io利用準備
インストール〜アカウント登録〜サインイン
“`shell:ターミナルにて
brew install flyctl # flyctlのインストール

flyctl auth signup
# アカウント登録
# Webサイトが開くので画面にしたがって登録
# GitHubアカウントでも登録可能

flyctl auth signin
# サインイン
# Webサイトが開くので、「Try Fly.io for free」でサインイン
“`
#### デプロイ準備
必要ファイル生成〜一部ファイル修正
“`shell:アプリのルートディレクトリのターミナルにて
fly launch # デプロイに必要なフ

元記事を表示

OTHERカテゴリの最新記事