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

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

Docker+Rails6+Nginx +MySQLで環境構築~M1Mac対応

## 概要
みなさん、こんにちは、shunです。今回はRails、MySQL、Nginxのコンテナ環境を構築していきたいと思います

## 前提
– フレームワークはRails
– Rubyのバージョンは2.7.3
– Railsのバージョンは6.1.3
– DBはMySQL
– アプリケーションサーバはPuma
– WebサーバはNginx
– DB側のコンテナ名はmysql、Rails側のコンテナ名はapp、Nginx側はwebにします
– 開発用はdocker-compose.yml(Rails+MySQL)として作成します
– 本番用はdocker-compose.prod.yml(Rails+MySQL+Nginx)として作成します

## はじめに
プロジェクトを作成するディレクトリを作成します
初回作成時のディレクトリ構成は以下の通りです
containersフォルダを作成し、その中にRails、MySQL、Nginxのフォルダを作成してください
また、Nginxのフォルダの中にconf.dフォルダも作成します
“`
❯ tree
.
├── Gemfile
├── G

元記事を表示

?【rails】テーブルから「レコード取得」➡「レコードの値を抽出」に役立つメソッド

今日はrailsでよく使うメソッド達を順序立てて皆さんにいくつか紹介したいと思います。?
(すぐに結論を見たい人は`2.先に結論`の関係図をみて頂ければ幸いです。)

プログラムは大まかには以下3つのフェーズに大別することができます。

1. データベースから特定レコードを取得する。
2. 取得したものを使いやすいように加工する。
3. view(ブラウザ)で表示させる。

今回の記事では`1.` 、`2.`の部分でよく使われる便利メソッドを紹介したいと思いますので、
よろしくお願い致します。?

# 1. はじめに
本記事は以下の読者が対象です。

– プログラミング初学者
– rails を使い始めたばかりの人
– eachメソッドを使ったことがある人

# 2. 先に結論
– 取得用の便利メソッド
– find
– find_by
– where
– 加工用の便利メソッド
– ids
– pluck

各メソッドの関係図
![image.png](https://qiita-image-store.s3.ap-nor

元記事を表示

コード譜投稿アプリを作る #4(apolloを使ってnextとrailsをつなぐ)

[←前回の記事](https://qiita.com/t_sekky/items/70fca252f9fbe4b42d79)

# 今回やること
前回railsとGraphQLを使ってバックエンドの実装を進めたので今回はそれをフロントで表示するのが目標です。
apollo使います
何かっていうとフロントでgraphqlを使うためのライブラリです。

## apollo clientインストール
フロント側で以下を実行
“`
yarn add @apollo/client graphql
“`

## apolloセットアップ
`/src/pages/_App.tsx`に以下を追記

“` tsx:/src/pages/_App.tsx
import type { ReactElement, ReactNode } from ‘react’
import type { NextPage } from ‘next’
import type { AppProps } from ‘next/app’
import { ChakraProvider } from ‘@chakra-ui/r

元記事を表示

コード譜投稿アプリを作る #3(railsにgraphql導入)

[←前回の記事](https://qiita.com/t_sekky/items/336c1fa8dd7a0f3d8f1b)

# GraphQLの導入経緯
当初は導入するつもりはなかったのですが、新しくジョインするところがRails&GraphQLでバックエンドを実装しているらしいので練習がてら急遽導入することに決めました。
これまではshopifyのカートシステムのgraphQLAPIを使ってフロントを実装する、ということはやっていたので呼び出し側ではgraphQL使ったことがありますが、APIを作成したことはなかったので慣れておかないと…

GraphQLがどんなものかとか、REST APIとどう違うかなどは他に良い記事がいくつもあるので省略。

# GraphQLのインストール
GraphQL公式の[Rails用チュートリアル](https://graphql-ruby.org/getting_started)をみながら進めていきます。

まずはgemをダウンロード

Gemfileに追加して、
“`:Gemfile
gem “graphql”
“`
コマンド実行
“`

元記事を表示

Ruby on Railsでrails sが起動しない rails aborted! TZInfo::DataSourceNotFound

# 内容
[Progateのサイト](https://prog-8.com/docs/rails-env-win)の通りに環境構築をしていた時に出たエラー
rails sが通らない/サーバーが起動しない

# 構成
Windows 11 Pro 21H2
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x64-mingw-ucrt]
Rails 7.0.4

# エラー内容
rails aborted!
TZInfo::DataSourceNotFound: tzinfo-data is not present. Please add gem ‘tzinfo-data’ to your Gemfile and run bundle install

# 改善方法 2工程
1, プロジェクト内のGemfileの40行目を変更する
gem “tzinfo-data”以降をコメントアウト
“`diff:
– gem “tzinfo-data”, platforms: %i[ mingw mswin x64_mingw jruby ]
+ ge

元記事を表示

フレームワークやプログラミング言語を年収や求人数からスコア化してみる

## サイトはこちら

https://flamevalue.short-tips.info/

## 注意事項:鵜呑みにしない

本サイトは現在でも改修、改良が進んでいる状態です。従って評価基準はこれからも絶えず変更されます。

また、根拠のもととなるCareerJetは完全な求人サイトとは言い難いです。

何が言いたいかというと評価基準も元となるデータもバラバラですが、

どうか寛容な目で見守ってやってください。

# フレームワークランキング

## 第一位:Ruby on Rails

https://flamevalue.short-tips.info/Ruby%20on%20Rails

### 状態

– 平均下限年収 : 616万円

– 平均上限年収 : 777万円

– 総求人数 : 7023件

– リモート率 : 65%

– フォロワー(Qiita) : 12.62人

年収からリモート率までトップ。
採用数のみ、フレームワーク故(目的が絞られているが故)にプログラミング言語よりは低いスコアになっているが、フレームワーク界隈ではトップ。

というかr

元記事を表示

variantsによるテンプレートの切り替え

### variantsとは
条件によってテンプレートを切り替える機構としてvariantsという機能があります。
接続してきた端末によってPCとは別のテンプレートを表示したいという場合にこの機能が使えるようになります。

実際の流れになります。
controller内でrequest.variantに:tabletや:mobileなどの値を入力することで
viewテンプレートとして展開されるファイルを例えば、
**index.html.erb → index.html+mobile.erb**
このように”+”とrequest.variantの値のテンプレートが表示されるようになります。

具体的な動きを見ていきます。
① まずApplicationController内のbefore_actionでUserAgentを参照してrequest.variantの値を設定
“`ruby:app/controllers/application_controller.rb
class ApplicationController < Acti

元記事を表示

部分テンプレートにとlayoutについて

テンプレートを作っていくうちに「ここは複数の箇所で使い回しできるなあ」と思う場面があります。
ここではそのような場面に遭遇した時の説明をしたいと思います。

### renderメソッド
viewテンプレート内では
**renderメソッド**を使用することができます。
このrenderメソッドを使用することで、部分テンプレート(パーシャルともいう)の読み込みを行うことができます。

以下簡単な例になります。

“`ruby:app/views/_form.html.erb
# 使い回したい検索フォームコード

“`

“`ruby:app/views/index.html.erb

一覧画面

<%= render 'form', task: @task %>
“`

フォームを定義したファイルをindexのテンプレートから呼び出しています。

**render ‘form’**
のように記述すると、ファイル名が「_ 」で始まるテンプレートファイルから探索します。
**formと記述しているが、実際に探索するテンプレートファイル名

ただMacのターミナルでRubyとRailsを最新バージョンにしたかっただけなのに。。

## はじめに
久々に簡単なアプリを作成しようとして、(作成前ついでにRubyをRailsのバージョンを最新にしておくか)と軽い気持ちでバージョンアップを試みたら思いのほか詰まったので備忘録として残しておこうと思います。

バージョンアップの流れとしては
**1.Homebrewとrbenvのアップデート**
**2.Rubyのアップデート**
**3.Railsのアップデート**
という感じです。早速やっていきましょう。

## 1.Homebrewとrbenvのアップデート
アップデートするコマンドの流れはこちら
“`
$ brew update # Homebrewをアップデートする
$ brew upgrade rbenv && brew upgrade ruby-build
“`
まずターミナルにて“brew update“を実行します。すると早速エラーが
![スクリーンショット 2022-09-17 11.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1089852/

【Ruby】Rubyのわかりにくい文法

### ハッシュの記法の色々

“`Railsコンソール
# ハッシュのキーを文字列で
>> user = { “name” => “tarou”, “email” => “tarou@example.com” }
=> {“name”=>”tarou”, “email”=>”tarou@example.com”}

# ハッシュのキーをシンボルで
>> user = { :name => “test”, :email => “test@example.com” }
=> {:name=>”test”, :email=>”test@example.com”}

>> user[:name] # :nameキーにアクセス
=> “test”

>> user[:test] # 存在しないキーに対応する値にアクセスするとnil
=> nil
“`

そして、Rubyでおそらく一番よく目にする、
この記法に至る

“`
>> user = { name: “test”, email: “test@example.com” }
=> {:nam

DockerでつくるRails6 + Vue3 + PostgreSQLの開発環境

# はじめに
ここまで以下の記事のとおり、**Rails6 + PostgreSQL**、**Vue3**の開発環境をDockerでそれぞれ構築してきました。

https://qiita.com/subun33/items/822c236e97e8ee85f664

https://qiita.com/subun33/items/b051f5697482203aa31d

今回は、それぞれ構築したこの開発環境をDocker Composeを使って、まとめて管理できるようにしていきたいと思います。

# 目次
[1. ディレクトリの構成](#1-ディレクトリの構成)
[2. 完成したファイル](#2-完成したファイル)
[3. front/Dockerfileの修正](#3-frontdockerfileの修正)
[4. dockercompose.ymlの修正](#4-dockercomposeymlの修正)
[5. 動作確認](#5-動作確認)
[6. さいごに](#6-さいごに)

# 1. ディレクトリの構成
準備したファイルは以下のとおり、各ディレクトリに配置しています。
`

git push heroku masterで失敗後heroku loginでも失敗した場合

# エラー内容
Railsチュートリアル第9章の最後でgitにpush後、herokuにデプロイしようとしたら以下のようなエラーが発生。
“`
$ git push heroku master
Username for ‘https://git.heroku.com’: ~~~
Password for ‘https://~~~@git.heroku.com’:
remote: ! WARNING:
remote: ! Do not authenticate with username and password using git.
remote: ! Run `heroku login` to update your credentials, then retry the git command.
remote: ! See documentation for details: https://devcenter.heroku.com/articles/git#http-git-authentication
fatal: Authe

【Ruby on Rails】 Rubocopについて

# Rubocopのインストール

https://github.com/rubocop/rubocop

“`Gemfile
group :development, :test do
gem ‘rubocop’, require: false
gem ‘rubocop-performance’, require: false
gem ‘rubocop-rails’, require: false
gem ‘rubocop-rspec’
end
“`

“`
bundle
“`

“`
touch .rubocop.yml
“`

## 設定例
“`.rubocop.yml
require:
– rubocop
– rubocop-performance
– rubocop-rails
– rubocop-rspec

AllCops:
NewCops: enable
DisabledByDefault: true
Exclude:
– Gemfile
– db/fixtures/**/*
– db/sc

【Ruby on Rails】Rspec, Factorybot等の導入

# Rspecのinstall

基本的には、document通りやる。
https://github.com/rspec/rspec-rails

“`Gemfile
group :development, :test do
gem ‘rspec-rails’, ‘~> 6.0.0’
end
“`

“`
bundle
“`

“`
rails generate rspec:install
“`

# Factorybotのinstall

“`Gemfile
group :development, :test do
gem ‘factory_bot_rails’
end
“`

“`rails_helper.rb
Rspec.configure do |config|

config.include FactoryBot::Syntax::Methods
end
“`
これで、createでfactorybotが呼ばれる

factoryを作成するのは、

“`
rails g factory_bot:model user
“`

【Ruby on Rails】rails newコマンドについて

# PostgreSQLでrails newしたい場合

“`
rails new -d postgresql
“`

# Dockerでrails newする場合

まずはDockerfileを作成。

“`Dockerfile
FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs npm postgresql-client
RUN npm install –global yarn
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT [“entrypoint.sh”]
EXPO

Ruby on Rails をTermuxに導入

# やりたいこと
– termuxにRuby on Railsを導入したい
– ググるといくつか参考になる情報あるが、どれを試しても導入できない

# 環境
– Android 12
– 最小限でMySQLを使用したRailsアプリを作成します

# 構築手順
古いスマホにTermuxを入れてそこにRuby on Railsを導入する。

## Termuxをインストール
※以下ページご参照ください。(「Termuxのインストール」まで)
https://qiita.com/tatuya911/items/840107699190451a4651

:::note info
GooglePlay以外からアプリのインストールする場合は
「不明なアプリのインストールを許可」をしてください。
※自己責任でのインストールになります。
:::

## お決まりのコマンドを実行
`apt upgrade`途中に出てくる選択肢は Enter(N) でOK。
“`shell:Termux
~ $ apt update
~ $ apt upgrade
“`

## 必要パッケージをインストール

Rails6 Bootstrap5を導入する

こんばんは。
Railsの案件にアサインされることになリました新米です。
環境構築でつまづきたくないので、備忘録として書き残しておきます。

### 必要な対応
#### CSS
bootstrap popperのパッケージインストール
“`
yarn add bootstrap @popperjs/core
“`
package.json に設定が追加されます。
“`
“dependencies”: {
# 一部抜粋
“bootstrap”: “^5.2.1”,
“popper.js”: “^1.16.1”,
},
“`

#### スタイルインポート
“`
mkdir app/javascript/stylesheets
touch app/javascript/stylesheets/application.scss
“`

作成された`application.scss`に以下を追記
“`
@import ‘~bootstrap/scss/bootstrap’;
“`

#### JavaScript
`yarn`でインストールし

ブランクありのエンジニアが現場復帰して躓いたこと part.1

## これは何?
エンジニアブランク4年強(もう素人)の私が、エンジニア復帰後に、悩んだことや学んだことを定期的に記事にしていければと思い、書いているものになります。
同じような悩みに至った方や共感できる方はいいねいただけると嬉しいです!
※使用中の技術 Ruby on Rails / React(TypeScript)
※ブランクの期間は、マーケティングをしておりました。

# ~ Pager編 ~
![スクリーンショット 2022-09-17 12.28.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2322481/6f92b9c8-8db3-ac65-082d-ef29a6de7526.png)

ショッピングサイトでよく見かけるページ送りの処理を実装しようと思い、参考になりそうな他ページのプログラムを見つけにいく。(コピペ戦略です)
それっぽいの見つかりホッと一安心と思いきや

“`ruby: SnapshotsController.rb

SNAPSHOTS_COUNT_

Ruby on Rails form-forの記述をform-withへ変更した時、model: @○○を記述するがこのインスタンス変数はどこからやってきたの?

# はじめに
Ruby on Railsでdeviseのgemを導入した際にはコントローラは生成されない。となった時にどこで何を見たらいいの?と思い、分からなかったので、メンターさんに質問して理解した内容をここに記録する。

(自分にしかわからない書き方となっていること、ご了承ください:bow:)

# form-forの記述をform-withへ変更した時、model: @○○を記述するがこのインスタンス変数はどこからやってきたの?

#### form-forの記述
“`
<%= <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> %>
“`
#### form_withの記述
“`
<%= <%= form_with model: @user, url: user_registration_path do |f| %> %>
“`

#### 疑問点。。。
`model: @user`と記述したので、インスタンス変数`@user`はどこかで定義されてる

【Rails】f.text_areaのサイズ指定の仕方【Bootstrap】

# 結論

“`html

<%= f.text_area :content, class: "form-control", style: "width:40%", rows: "3" %>

“`

## 解説
+ 親要素に`form-label`のクラスを付与する。
→`form-floating`クラスだと`rows`の指定が出来ない。

+ `text_area`に`form-control`のクラスを付与する。

+ `text_area`内で`style: “width:XX%”`と`rows: “X”`を指定する。

## 注意
属性の付与は`○○:`といったシンボルの形式を指定すること。
`,class=”{任意の値}”`のような形式を追加すると下記のようなエラーメッセージとともにバグが発生する。

“`terminal
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug