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

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

【Rails】メガ級の大量データをseedで入れたいとき

# はじめに
[以前書いた記事](https://qiita.com/koki_73/items/2ebee06bf16c416aefa8)で100万件のレコードを用意したことがあったのですが、せっかくなのでその方法を紹介します。

ついでにちょっとした検証もしたのでそれも紹介します

# 結論はよ
* 大量データの作成は`activerecord_import`を使おう
* 処理の時間を測ってみたらかなりの差が出たよ

中級者以上のかたにとっては当たり前という内容かもなので、「あ、そういう内容ね」とここで想像できた方はこのタイミングでブラウザバックしてもらって構いません笑

# やり方

### Gem

先に使うgemを紹介します
“`ruby:Gemfile
gem ‘activerecord-import’
gem ‘seed-fu’
“`

`activerecord-import`というgemは大量データを作成する際に使われることが多く、簡単に説明すると作成したい大量のレコードを元に1つのSQL文を作成して、それを実行してくれるものです

詳しい使い方などはここでは解

元記事を表示

docker-compose up を Ctrl+c(SIGINT) で停止させた時に ERROR: 2 になってしまう問題の対処法

:::note warn
警告
本記事は仮説を提示しているだけで、根本的なエラー原因を断定しているわけではありません。
:::

# 問題の発生状況

## 環境
Rails, PostgreSQL構成のWebアプリケーションをDockerで包んで開発していました。
それぞれのバージョンは下記の通りです。
“`plaintext
$ docker-compose -v
docker-compose version 1.29.2, build 5becea4c
$ docker -v
Docker version 20.10.12, build e91ed57

$ ruby -v
ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [x86_64-linux]
$ rails -v
Rails 7.0.3.1
$ postgres –version
postgres (PostgreSQL) 14.4 (Debian 14.4-1.pgdg110+1)
“`

## 遭遇した問題
`docker-compose up`をフォアグラウンドで実

元記事を表示

【要反省】入社して半年間において先輩からのレビューで指摘されたこと5選

## はじめに

どうも、こんにちは。もきおです。
未経験から自社開発企業に転職し半年が経ちました。あっという間の半年間でしたがその間色々ありがたいことにレビューをいただきました。なので今回は半年前の入社した自分に送る言葉的な感じでレビューで指摘されたことを書き起こしておきたいと思います。

最後に対策的なとこも記載しているので最後までご覧いただけますと幸いです。ちなみに弊社はRuby、Railsメインで使用しているのでちょくちょくRubyのメソッドとか出てきます。他の言語使用されている方は適当にあしらってもらえればと笑

## 指摘1: コードちゃんと読んだ?
これは言われることが最も多かった指摘でしたね。何回かこの指摘を受けた時、コードをちゃんと読むってなん何だろう?と疑問に思ったので具体的なポイントを聞いてみました。

* 分からない箇所を分からないままで読み進めない
* 想像で決めつけて読み進めない
* 一つ一つデバックして確認する

### 分からない箇所を分からないまま読み進めない
企業のコードはポートフォリオと比にならない程のコード量ですよねー。そのためついつい各コードの

元記事を表示

正規表現についてまとめてみた

はじめに

正規表現について学んだが、初学者の自分にとってとっつきにくかったため自分なりにまとめてみた内容になっています。
他の初学者の方で同じように思った方の参考になればと思いまとめていきます。

:::note info
正規表現とは文字列に特定の文字が含まれているか確認したり、特定の文字を取り除いたり、置き換えるときなどに使用する
:::

正規表現

|正規表現の例 |意味 |使用例 |
|:————-:|:—————————–:|:————————–:|
|[] |囲まれた文字のうちいずれかにマッチすること|name.match(/[a-z]/)=>aからzのいずれかに当てはまるか|
|a-z|aからzまでの文字、-で範囲指定できる|上記の例を参照|
|\b|数字が含まれている|age.match(/[\d]/)=>数字が含まれて

元記事を表示

初心者向け devise導入について

# 記事にした経緯
私が作成中のアプリにログイン機能を実装するため、`devise`を実装しようとした時に色々な課題があったため忘備録として記事にしました。

アプリを作成し`devise`をインストールします。

“`:ターミナル
rails new devise_sumple -d postgreSQL (アプリ作成)
      ↓
rails db:create (データベース作成)
“`
“`:Gemfile
gem ‘devise’
# ***** 以上を追加 *****
group :development, :test do
# 略
“`
“`:ターミナル
bundle install    (gemをインストールする)

rails g devise:install (アプリにdeviseをインストール)

rails g devise User (deviseで認証するためのモデルを作成)
“`
以下のファイルやコードが作成される
“`
Running via Spring preloader in process 19712

元記事を表示

ruby returnの返り値が複数の場合

はじめに

メソッド内の処理後、返り値が複数になる場合はどうなるのか気になったので調査し、検証してみました。

returnを使わない場合の返り値

“`test.rb
def return_test(value)
sum_a = 5
sum_b = 10
sum_c = 15
sum_a *= value
sum_b *= value
sum_c *= value
end

value = 10

x = return_test(value)

puts x
“`
結果
“`
=> 150
“`
:::note warn
メソッドの最後の処理結果しか返ってこない
:::

returnで返り値を複数指定した場合

“`test.rb
def return_test(value)
sum_a = 5
sum_b = 10
sum_c = 15
sum_a *= value
sum_b *= value
sum_c *= value
return sum_a,sum_b,su

元記事を表示

rails ヘルパーメソッドを使ってviewファイルを整える

はじめに

ヘルパーメソッドを自分で定義することについて学んだので学習したことをまとめて記述していきます。

ヘルパーメソッドを使うメリット

railsでビューファイルに対して行われる処理に関して繰り返して使用するようなメソッドはヘルパーメソッド(ビューファイルに対して使用するモジュール)を自分で定義して使用するとビューファイルの可読性を良くすることができ、また保守などの面から見ても修正しやすくなるメリットがある。

___
メッセージの投稿機能があるWEBアプリケーションでそのメッセージを一覧でメッセージテキストと投稿者を表示したい時などを想定してビューファイルを下記のように作成した場合

:::note warn
ヘルパーメソッド使用前
:::
“`app/views/messages/index.html.erb

<%= @messages.each do |message| %>
<%= message.text %>
<% end %>

“`

:::note i

元記事を表示

【Rails】初学者向け_基礎のみを活用しチャット機能を作る方法

## 1.バージョンを確認しましょう!

Rails 5.1.6
ruby 2.7.2p112

## 2.完成イメージ

ログイン済みのユーザーで一つのチャットルームを共有し、交流できる機能です。
同じ名前のグループは作成できないようにしてあります。
ぜひclosedな環境でグループを作成し、お話してみてください(^_^)v

## 3.実装の大きな流れ

>1.グループチャット機能に必要なModel、Controller、Viewの実装
>2.グループ系モデルとUserモデルの紐付け
>3.ちょっとしたフロントエンドデザイン

ちなみにUserモデルは既に作られている前提で記事を書いています。
筆者はdeviseというgemを使ってUser周りを整えております。

ちなみに本記事はこのような目次で進んで行きます!
一緒に楽しんでいきましょう ᕙ( ˙꒳​˙ )ᕗ

## 4. 必要ファイルを作成しましょう

“`ターミナル
$ rails g controller groups #groups_controller.rbを作成
$ rails g controller cha

元記事を表示

【Rails】お問合せフォームの実装

こんにちは!
この記事では、railsで **「お問い合せフォーム」** を実装していきます!
これは、お問い合せフォームを送信すると、設定したメールアドレス宛にお問い合せ内容が送信される機能です。

# ゴール
railsで「お問い合せフォーム」を実装し、gmailにお問合せ内容が届くようにすること。

### 完成イメージ1 (お問合せフォーム)
![スクリーンショット 2022-07-17 1.13.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820462/7f56cc29-f213-c206-476d-8734af657f77.png)

### 完成イメージ2 (設定したGmailにお問合せが届く)
![スクリーンショット 2022-07-17 1.19.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820462/189dc51a-1d31-8753-52f8-8de308853cfc.png)

元記事を表示

初めてのRailsチュートリアルに挑戦!第4・5章

# 第4章の学習内容
1. 組み込みヘルパー
1. カスタムヘルパー
1. 文字列
1. オブジェクトとメッセージ受け渡し
1. メソッドの定義
1. titleヘルパー、再び
1. 配列と範囲演算子
1. ブロック
1. ハッシュとシンボル
1. CSS、再び
1. コンストラクタ
1. クラス継承
1. 組み込みクラスの変更
1. コントローラクラス
1. ユーザークラス

# 第5章の学習内容
1. ナビゲーション
1. BootstrapとカスタムCSS
1. パーシャル(partial)
1. アセットパイプライン
1. 素晴らしい構文を備えたスタイルシート
1. Contactページ
1. RailsのルートURL
1. 名前付きルート
1. リンクのテスト
1. Usersコントローラ
1. ユーザー登録用URL

# 学習を終えて
第4章ではRailsでありながら、以前学習したRubyの基礎を学ぶような内容であった。テキストや動画の通りに進めることで、解決できないエラーも発生しなかったので、学習しやすかった。
第5章ではwebページのレイアウトの学習であったため、HTM

元記事を表示

options_from_collection_for_selectですでに選択されている値を呼び出す

`form_for`ヘルパーで`select`を利用する際に、`options_from_collection_for_select`を利用した。その際、すでに保存されている値を呼び出す方法につまづいたので、メモを残しておく。

NG例。`selected`で指定しようとしても取れない。

“`ruby
= f.select :id, options_from_collection_for_select(Users.all, :id, :username), {include_blank: true}, class: “form-control”, selected: user.id
“`

OK例。`options_from_collection_for_select`の第三引数に指定してあげればOK

“`ruby
= f.select :user_id, options_from_collection_for_select(Users.all, :id, :username, user.id), {include_blank: true}, class: “form

元記事を表示

就活生のAtcoder奮闘記〜学習編〜

初めまして見習い駆け出しエンジニアです。

現在大学三年生です。データエンジニアとして長期インターンをさせていただきながら日々技術を磨いている次第です。これからとにかくアルゴリズムを勉強してatcoderの赤色を!と言いたいところですが、現在灰色の私には遠い未来ですので、まずは緑色を目標に(緑も難易度高い)アルゴリズムを勉強していきたいと思います。普段はc言語とrubyを主に使っているのですが、競プロではc++を使うと勉強がしやすいためまずはc++を軸に勉強していこうと思います。

まずこれから使っていく教材

・問題解決のための「アルゴリズム*数学」が基礎からしっかり身に付く本
・atcoderのc++の基礎文法

この二つを一周するだけでまずどれほど太刀打ちできるのかを試してみようと思います。

8/20までに教材を終わらせてからその次のatcoderの大会に挑戦してみようと思います。

よろしくお願い致す。

元記事を表示

RailsをCentOS7に構築

はじめに

将来的にwebアプリケーションを作ることを考え、Centos7上にruby on railsの環境構築をしようと思います。実際の現場はLinux環境が圧倒的に多いとのことなので、早いうちから慣れるという意味でもLinuxの中でRuby on Railsを使えるようにした備忘録です。

ホストPCのスペックは以下の通りです。
・CPU Intel Corei3-7100U
・メモリ16GB
・HHD 1TB(空きは815GB)

CentOSの情報
・CentOSバージョン 7.9.2009
・メインメモリ 2048MB
・ストレージ 64GB

LAMP環境を構築したときよりもメモリ・ストレージ共に大きくしましたが、ホストOSは特に問題なく操作できました。

rbenvのインストール

今回はrbenvというRubyのインストールとバージョン管理が簡単に出来るツールを利用してRubyをインストールしました。

① gitのイ

元記事を表示

【Rails】コメントの編集, 削除機能実装(form_with)

# はじめに
記事投稿アプリの記事に対して、コメントを作れる機能を実装した。
さらに、編集と削除ができるようにしたい。

**完成図**
![完成図.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2684787/617104a7-bfca-fd77-79d2-521bd15ec3a7.gif)

# 前提
下記は作成済み
投稿機能
ユーザーテーブル
コメントテーブル
コメントコントローラー createアクション

下記テーブルは作成済み。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |

# ポイント

・コメント投稿機能とeditテンプレートを同じパーシャルを適用することで、dryにする。
・post_

元記事を表示

Ruby 練習問題5 ~ if → unlessへの書き換え ~

こんにちは、プログラミング初学者”fujitacoma”です!

今回は、Ruby練習問題シリーズの5回目です。
unless文を使用した条件式の記述問題ですね。

それでは早速始めます!

# 問題
次のif文をunlessというメソッドを用いて書き換えてください。

“`ruby
if a + b > 0
puts “計算結果は0より大きいです”
end
“`
## ヒント
### unless
unlessとはifとは逆で、条件式がfalseの場合に処理が実行されます。

__ifを使用した場合__
“`ruby
if 条件式
条件式がtrueの時に実行する処理
else
条件式がfalseの時に実行する処理
end
“`
__unlessを使用した場合__
“`ruby
unless 条件式
条件式がfalseの時に実行する処理
else
条件式がtrueの時に実行する処理
end
“`

# 解答と解説

### 模範解答
“`ruby
unless a + b <= 0 puts "計算結果は0より大きいです" end ``` ###

元記事を表示

【Rails7】【Auth0】rails7 にAuth0を導入して認証機能を作成する

## はじめに
未経験からエンジニアに転職して、3ヶ月ほど経つエンジニアです。
業務にあたりながらも、小規模なアプリを作って楽しんでいます。
![自己紹介.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916052/2931f4ef-8d29-72a6-8705-066ddde51004.jpeg)

rails7で作成されたアプリにAuth0を導入します。
rails6+Auth0の記事はあるのですが、rails7でAuth0を導入している記事はほぼ見かけないです。
基本的には公式のクイックスタートを踏襲すればOKです。
一部修正が必要なので、そこを解説していきます。

なお、↓で作成したアプリにAuth0を導入していきます。

https://qiita.com/AGO523/items/32129869f5d4a23f2133

rails7アプリがないよ、、という方も参考に作成してみてください!(30分くらいで作れます)

## Auth0に登録する
https://auth0.com/jp/s

元記事を表示

【Rails】フォロー・フォロワー機能

# 開発環境
Rails 6.1.4
ruby 2.6.3

# 前提条件
– devise導入

# 目次
– モデルの作成
– アソシエーション
– メソッドの作成
– コントローラー作成
– ルーティング
– View作成

## モデルの作成

まずはRelationshipモデルを作成します。
RelationshipモデルはUserモデルの中間テーブルにあたります。
なぜなら、フォローするのもフォローされるのもユーザーで、`多 対 多`の状態になるからです。

カラムは、下記の通り定義します。

`follower_id` : フォローしたユーザー
`followed_id` : フォローされたユーザー

ここで`user_id`を使わないということが大切です。
RelationshipモデルはUserモデルの中間テーブルになるため、
どちらもidにはユーザーのidが入ります。
つまり、ここで`user_id`を使用してしまうと
判別がつかなくなってしまうため、`user_id`は使用しません。

それでは、ターミナルでコマンドを実行していきます。

“`ruby:ターミ

元記事を表示

仮想環境VirtualBox(Ubuntu20.04)でRails環境構築

# 概要
テキストを見ながらRails環境を構築しようとしたら
サーバー起動までの所で色々ハマってしまったので自分用に記録しておきます。
windows10 VirtualBox6.1 ubuntu 20.04 で構築しました。
windowsからubuntuへのコピペ機能を使える様にしてから始めると楽です。

# 参考にした書籍
[現場で使える Ruby on Rails 5速習実践ガイド](https://www.amazon.co.jp/%E7%8F%BE%E5%A0%B4%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B-Ruby-Rails-5%E9%80%9F%E7%BF%92%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E5%A4%A7%E5%A0%B4%E5%AF%A7%E5%AD%90/dp/4839962227/ref=sr_1_6?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=217OVEDAHL3SK&keywords=rails&q

元記事を表示

マイグレーションファイルを修正する方法

– アプリ制作途中にマイグレーションファイルの修正が必要になった。なんとか修正することができたので忘備録として記事にします。
## 経緯
– `ログイン機能`を実装するため`devise`をインストール
– 不要な機能をコメントアウトし忘れ`rails db:migrate`を実施。
– 実施後に不要な機能を削るため`マイグレーションファイル`の修正に取り掛かる。

まずは`マイグレーションファイル`の修正について検索し、次のコマンドを実施
“`:ターミナル
rails db:rollback
“`
すると以下の様にエラーが発生
“`
Running via Spring preloader in process 89570
== 20220715104214 AddDeviseToUsers: reverting =================================
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Active

元記事を表示

[Ruby] 複数行テキストのセル・空白行が含まれるCSVから正確な件数を取得する

# 背景
以下のようなシステムの作成中に、登録件数が正確に通知されないことがあった。
* CSVファイルからデータベースにデータを登録したい
* 1行につき1件として、複数行のCSVファイルを読み込む
* データがCSVからデータベースに登録されたら、登録件数を取得してSlackで管理者に通知する

# 問題
以下を参考に、`.count`で`”\n”`の数で改行をカウントして行数を取得していたが、
登録件数が倍になって通知されることがあった。
https://rubytips86.hatenablog.com/entry/2014/03/23/091949

# 原因
* 複数行のセルがあると、セル内の`\n`もカウントされてしまう
* 空白行があると件数としてカウントされてしまう

# 解決法
csvfile: 件数を取得したいCSVファイル
header_length: CSVファイルの列数-2
“`ruby
column_length = File.read(csvfile).gsub(/,{#{header_length},}\r\n/,”).scan(“\r\n”).l

元記事を表示

OTHERカテゴリの最新記事