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

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

データベース設計においてのインデックスの仕組み

# 結論

“`
「テーブルとは別に検索ように最適化された状態のデータ」
“`

データベースの性能を向上させる方法の一つです。

「探すレコードを識別するデータの項目」
「対象レコードの格納位置を示すポインタ」
で構成されており、これを利用してデータの格納位置を特定し、その位置を直接アクセスする事で、表の検索速度を上げることができます。

###Rubyにはindexメソッドがあります。

##indexメソッドの使い方

“`
オブジェクト.index(“検索したい部分文字列”)
配列の場合は、配列.index(“検索したい配列の要素”)
両者とも見つからない場合はnilが返す。
“`

## 終わりに
初学者です。理解しておくべき事と思い記録しました。
実際に使ったことがないので浅い知識だと思いますが、
また使ってみて、わかりやすく説明できたらと思います。

元記事を表示

【Rails】特定のカラムのデータを配列で取得する方法【初学者の疑問点を簡潔に解説】

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _データベースから特定のカラムを取得して、all?メソッドで判定する方法_
 
 です。 

## 疑問点についての解説

###結論
pluckメソッドを使用して配列でデータを取得し、all?メソッドで判定する。

###具体例

“`sample_app.rb

@Taro = User.where(name: “太郎”).pluck(‘age’)
@Taro.all?{ |w| w == ’20’ }

“`

上記のように記載することで、
`where`でnameカラムが太郎であるレコードを全て取得し、`pluck`でさらにageカラムのみに絞り、配列で取得します。
そして、`@Taro.all?{ |w| w == ’20

元記事を表示

類似gemを教えてくれるサイト

gemの選定時に知りたい情報No.1といえば、類似gemの一覧です(当社調べ(調べてない(当社もない)))。

しかしrubyに限らず類似ライブラリの検索というのは意外と難しく、GitHubで検索しようにもキーワードに上手く引っかからないケースが多いです。

導入後に、より要件にフィットする類似ライブラリを見つけたことのある人の割合はなんと三人に五人です(当社調べ(調べてない(当社もない)))。

検索してたら偶然こんなサイトを見つけ、共有したく、この記事を書きました。

(私以外の全人類が知っている情報でしたらすみません)

https://ruby.libhunt.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/188872/844d7da3-e87e-b026-a101-766a3a3d8421.png)

類似gemの一覧、及び大雑把な比較情報を出してくれるサイトです。

例えばみんな大好き`Ruby on Rails`ですと、こういう情報が出てきます。

![imag

元記事を表示

Windows10 に Ruby on Rails の環境構築をしよう

## はじめに
3年ほど前、MacでRailsを使って開発を行っていましたが
現在仕事でMacを使用しないため寂しいことにRailsとも疎遠になってしまいました。年末でせっかく時間もあることだし、とWindowsにRails環境を構築してみようと思いたったため、作業ログとして残します。

## PCのスペック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397779/40feda6c-747b-60a2-7f72-fe65541b8b81.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397779/30ce886d-a11d-b7a2-b600-e0b921c2ba70.png)

メモリが圧倒的に低い!
なんとかなるのでしょうか・・・どきどき

## いざ、作業へ
### Rubyを手に入れる!

https://rubyinstaller.org/downloads/

元記事を表示

【Ruby on Rails】コントローラーでヘルパーメソッドを使用する方法

そもそもコントローラーからヘルパーを呼び出せないかな?と疑問に思ったので調べてみた。

# メソッド先頭にview_contextをつけるだけ
結論、コントローラーで「view_context」をつけるだけ。

“`app/helpers/sample_helper.rb
module SampleHelper
def helper_method
# 処理の内容
end
end
“`

“`app/controllers/sample_controller.rb
class SampleController < ActionController::Base def index # 呼びたい箇所で、先頭にview_contextをつけるだけ view_context.helper_method end end ``` 意外とあっという間にできて安心した。 ただ、本来はビューのヘルパーを無理矢理呼び出すよりは、 アプリケーション共通処理として切り出すやり方の方が良いよう。 詳細はこちら、[【Ruby on Rails】コントローラーで

元記事を表示

AWS EC2 AmazonLinux2の中にMySQLを導入したが、起動してくれない時の対策法(自分用メモ)

ローカル環境では、起動できていたMySQLなのですが、AmazonLinux2の配備した途端動かなくなってしまいました。

“`
[ec2-user@ip-10-0-0-165 WorkShare]$ sudo service mysqld start
Redirecting to /bin/systemctl start mysqld.service
Failed to start mysqld.service: Unit not found.
“`
というエラーが発生。

ググった結果、[AWS EC2 AmazonLinux2の中にMySQLを入れたがすんなり起動してくれず、いろいろやってターミナルからMySQLにログインできるようにした話(駄々流し)](https://qiita.com/miriwo/items/e7afd5e1ae0de94f27c2)と同じようような症状であることがわかったので、参考にさせていだきます!

“`
$ yum list installed | grep mariadb
“`
を実行。CentOS7には「MariaDB」がデフォルトで

元記事を表示

【Ruby】コピー時に元データがなぜか上書きされる【浅いコピー】

コピー先の変数の値を書き換えようとしたら、なぜか、コピー元の方まで値が書き変わってしまう謎現象に遭遇し、困ったのでメモ。

謎現象の原因を探るには「浅いコピー」「深いコピー」「参照渡し」という概念について、それぞれ理解しなきゃならないらしい。

なんでお前が書き換わんだよ!!!お前じゃないんだよ!!!!
と3時間ぐらい一人で格闘していたが、
浅かったのは、私の頭の方だった。

# 浅い頭を悩ませる「浅いコピー」
![【Ruby】コピー時になぜか上書きされてしまう【参照コピー、浅いコピー】.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1954103/66cc5e01-98a3-a1aa-2964-abd566a3cc5d.jpeg)

浅いコピーというのは、コピー元のオブジェクトとコピー先のオブジェクトがメモリ上の同一の場所を参照することになります。

っておい、なんじゃそれ :rage:

どうやら、参照先は一緒になるので、
片方に変更を加えると、もう片方のデータも変わってしまうらしい、

元記事を表示

Ruby on Rails 7の主要な新機能・機能追加・変更点

## はじめに

Ruby on Rails(以下Rails)の最新バージョンである7.0(以下Rails 7)が2021年12月15日に[リリース](https://rubyonrails.org/2021/12/15/Rails-7-fulfilling-a-vision)されました。

Rails 7では、JavaScriptフロントエンドの大幅な刷新、CSS BundlingによるTailwind CSSやPostCSSのサポートを含めた、メジャーバージョンアップグレードにふさわしい機能強化が行われています。

本記事では、[Railsの公式ブログ](https://rubyonrails.org/blog/)や[Railsガイド](https://edgeguides.rubyonrails.org/active_record_encryption.html)、GitHubのRailsプロジェクトの[Issues](https://github.com/rails/rails/issues)や[Pull Requests](https://github.com/rails/r

元記事を表示

N+1問題はincludesメソッドで解決できる

現在プログラミング勉強中です。
N+1問題について勉強していて、イメージがつき辛かったので備忘録としてまとめてみます。

#N+1問題とは

N+1問題とは、アソシエーションの関係にあるモデル間で、データベースへのアクセス回数が膨大になってしまうというものです。

例えばTwiiterなどでは、以下の画像のようにtweet毎に投稿者の名前が表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2378833/27280bcb-fe9c-9d63-8b18-ae586b66a5bd.png)

このようなtweet毎に紐づくユーザーネームを取ってくるためには、tweetの数分、usersテーブルにアクセスする必要があります。

具体的にコードを確認します。
まずは事前設定として、以下の表のようにアソシエーションの関係にある、
tweetsテーブルとusersテーブルを設定します。

![image.png](https://qiita-image-store.s3.ap-nor

元記事を表示

既存のrailsアプリにDockerを導入してみた(MySQL使用)

### はじめに
Rails6.1にDockerを導入しようとしたらかなりハマってしまったのでメモとして投稿します
※間違いなどあればコメントいただけると嬉しいです!

### 各種バージョン
– macOS Big Sur 11.6
– Ruby 3.0.2
– Rails 6.1.4.4
– Docker 20.10.11
– docker-compose 2.2.1
– MySQL 8.0.27

## 手順
1,ファイル用意
2,イメージをビルド
3,DB作成・migrate
4,コンテナ起動

## ファイル用意
– Dockerfile
– docker-compose.yml
– entrypoint.sh

をアプリフォルダ直下に作成します

各ファイルの中身を書いていきます

~~~Dockerfile:Dockerfile
FROM ruby:3.0.2
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – \
&& echo “deb https://dl.yarnpkg.

元記事を表示

rails7からhelperを使って生成されるtypeがhiddenのinputタグでautocomplete属性にoffが指定される様になった

# 概要

* `hidden_field_tag`
* hidden_field_for_checkbox

などの``を生成するヘルパーがあるのですが、これらを生成する時に強制的にautocomplete属性にoffが指定される様になりました。

“`ruby
# Before
$ hidden_field_tag ‘tags_list’
=> “

# After
$ hidden_field_tag ‘tags_list’
=> “
“`

# 詳細
Firefoxのバグでhidden fieldのautocompleteに意図しないランダムな値が入力される可能性があるとのこと。
例えばCSRF保護などrailsはたくさんhidden fieldを

元記事を表示

RubyとRuby on Railsの違い[3行で要約]

#結論

“`
・Rubyはプログラム言語の一つ。(他にはJava,PHPなど)
・Ruby on Railsはフレームワークの一つであり、言語ではない
・プログラミング言語Rubyで作成されているので、Ruby on Railsという名前になっている。
“`

#Ruby on Railsとは
Webアプリケーションフレームワークの1つです。Railsとも呼ばれています。

###Webアプリケーションとは
ブラウザを介してクライアントにサービスを提供する

##Ruby on Rails 特徴

“`
・MVCアーキテクチャ
・DRY(Don’t Repeat Yourself)
・CoC(Convention over Configuration)
“`

###MVCアーキテクチャ
Model,View,Controller設計法に基づいて開発を行います。

###DRY(Don’t Repeat Yourself)
DRY原則とは、同じこと(ソースコード)を繰り返し記述するのは避けよ

###CoC(Convention over Configuration)
設定よ

元記事を表示

Rails × Hasuraの共存環境を作ってみる

こんにちは!
気持ちは永遠の新卒1年目、いつの間にか3年目の株式会社エイチームコマーステック北村 (@NamedPython )です。

今日は、コマーステックがもしかしたら辿るかもしれない技術スタックを先行して検証していきます。
試す技術はタイトルにもある通り「**Rails × Hasura**」です。
役割分担としては、

– **Rails(API mode)**
– マイグレーション
– ビジネスロジック
– **Hasura**
– GraphQL Engine
– 単純なCRUD
– ゲートウェイ
– スケジューラー

みたいな感じにしたいな〜と想像しています。
シンプルなCRUDのGraphQLは**Hasura**にお任せ、複雑な処理は**Actions**で**Rails**に流したり、リゾルバを書いて**Remote Schemas**で**Hasura**に取り込んだりしてもいい。**Rails**でリゾルバを書くのが面倒なら別のバックエンドを立ててしまえばいい。これが実現できると、分厚くなりがちな**Ra

元記事を表示

【Rails】タイムゾーンの変更の仕方【初学者の疑問点を簡潔に解説】

## はじめに
 本記事は、プログラミングの学習を始めて1ヶ月の初学者が、学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
 そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
 間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。

## 今回の疑問点
 今回の疑問点は、

  _タイムゾーンの変更の仕方について_
 
 です。 

## 疑問点についての解説

###結論

config/application.rbファイルのApplicationクラスに`config.time_zone = ‘Tokyo’`を追記することでタイムゾーンを日本標準時間に変更することができます。

###詳しい手順
RailsではデフォルトのタイムゾーンはUTC(協定時)となっています。
created_atメソッドやupdated_atメソッドを使って時間を表示させると`2021-12-25 07:17:23 UTC`のよう9時間前の時刻が表示されると思います。
日本標準時間に設定するためには、config/applica

元記事を表示

RailsでWeb APIを作成する方法とメリット??

# まず始めに

おはようございます。こんにちは。こんばんは!
[DMM WEBCAMP Advent Calendar](https://qiita.com/advent-calendar/2021/infratop)の最終日を担当させていただきます

メンターのtanidaです!

今回はRailsで典型的なWeb APIサーバーを構築するハンズオンになります! よろしくお願いします!

*あまり細かい用語の説明はしませんが随時更新していく予定です。

この記事で完成したRails APIのソースコードです。
https://github.com/digitter/rails_api_sample

# この記事の対象者

– Ruby on Railsでアプリを作ったことがある人。

– Ruby on Railsの環境構築ができる人。

– Rails の API モードでサーバーの構築がしたい人。

# Ruby, Railsのバージョン

– Ruby 2.6.3

– Rails 6.1系

# 典型的なREST APIを作成!

## APIサーバーを作成

お好きなデ

元記事を表示

Dockerで実装しているテーブルの内容をターミナルで確認する方法(rails)

# 備忘録として
Dockerを使ってrailsのアプリケーション実装をしている時に、
テーブルの更新内容を確認したくなったので調べた内容を記録しています。

#方法
“`
% docker-compose run web rails db
“`
上記のコマンドを入力すると
ターミナルに下記内容が表示されます

“`
psql (13.5 (Debian 13.5-0+deb11u1), server 14.1 (Debian 14.1-1.pgdg110+1))
WARNING: psql major version 13, server major version 14.
Some psql features might not work.
Type “help” for help.

○○_development=#
“`
#の後に

“`
\d テーブル名;
“`
と打てばテーブル詳細が表示されます。
__ex:__ “\d users;“
と入力すれば

“`

元記事を表示

RailsでDDDのバリューオブジェクトを実装してみる

## この記事は何
DDDを学んだ事がある方は「バリューオブジェクト」という名前を一度は聞いた事があるのではないでしょうか・
この記事ではRailsでバリューオブジェクトを実装するならどのような実装にすると良さそうかを紹介します。
なお、バリューオブジェクトの具体的な実装方針は千差万別だと思うので、この記事で紹介する実装はあくまで一例だと思っていただけるとありがたいです。

具体的なバリューオブジェクトの解説は↓の記事などが参考になると思います。

https://qiita.com/little_hand_s/items/f8c0d0858c895afed7e2

## バリューオブジェクトの条件
バリューオブジェクトは以下の条件を満たしている必要があります。
条件は以下の通りです。

– オブジェクトはイミュータブルである
– 値の変化はインスタンスの再生成で実現する
– オブジェクトの同一生はバリューオブジェクトが持つattributeの一致で定義される

Railsで実装する際も、これらの条件を満たす必要があります。
そしてバリューオブジェクトとして実装する以上、バリデ

元記事を表示

Docker上のyarnの依存関係を解決。

docker-compose upで

“`
RUN yarn upgrade

“`

の部分でエラーがでた。

“`
Step 13/19 : RUN yarn upgrade
—> Running in 3c8f3922483b
yarn upgrade v1.22.17
warning package-lock.json found. Your project contains lock files generated by tools other than Yarn. It is advised not to mix package managers in order to avoid resolution inconsistencies caused by unsynchronized lock files. To clear this warning, remove package-lock.json.
[1/4] Resolving packages…
info There appears to be trouble with your netwo

元記事を表示

ローカル環境でMySQLが立ち上がらないときの解決策

“`
rake aborted!
ActiveRecord::ConnectionNotEstablished: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (38)
“`
というエラーが発生した。`/tmp`ディレクトリを確認しても`mysql.sock`はしっかりと存在する。
mysqlを起動してみると下記のエラーが起こっていることが判明した。

“`
$ sudo mysql.server start
Password:
Starting MySQL
.Logging to ‘/usr/local/var/mysql/fujiwaratakuminoMacBook-Pro.local.err’.
ERROR! The server quit without updating PID file (/usr/local/var/mysql/fujiwaratakuminoMacBook-Pro.local.pid).
“`
というエラーが起こっていることが判明した。
#pidファ

元記事を表示

誰も教えてくれない!知らないと事故につながるエンジニアの隠れた5つの常識

この記事は[モチベーションクラウドシリーズアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/mcs)の12日目の記事です。

こんにちは。モチベーションクラウドシリーズのテックリードをしている江上です。
突然ですが、今までに**「常識」**という言葉で傷ついたり、傷つけた経験はありませんか?
例えば、失敗した時に「なんでxxxしてないんだ!そんなの常識だろ!!」と先輩に怒られたり、「洗濯物はパンパンしてから干す!常識でしょ!!」と奥さんに怒られたり。。。
常識って、その人やその界隈では当たり前すぎるために、**継承が困難。なのに、知らないと事故につながる**とても大事な知識です。
そこでこの記事では、知らないと事故につながるような、エンジニアの隠れた常識を記していこうと思います。
あくまで、僕が今まで経験した職場や、他人から聞いた話をまとめた個人的な見解です。
「他にもこんな常識あるよ!」という方はコメントで是非教えていただければと思います。

※ 各所でRuby on Rails + MySQLを前提にした表現が出てきます

元記事を表示

OTHERカテゴリの最新記事