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

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

作品:フェイスブックの複製(Facebook Replica)

#概要

Odin Projectレッスンに従って作ったSNS。

レッスンURL: https://www.theodinproject.com/paths/full-stack-ruby-on-rails/courses/ruby-on-rails/lessons/rails-final-project

Github: https://github.com/RistoLibera/Facebook_Replica

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613718/6c8a0623-6e73-d559-7b8d-8efb7992305a.png)

作品URL:

#使用技術
・HTML、CSS、Bulma
・Javascript
・Ruby、Ruby on Rails
・Heroku
・Git
・GitHub
・Oracle VM VirtualBox

#機能一覧
##ユーザー登録機能

##ログイン機能

##パスワード変更機能(ローカル)

##本物のフェイスブックに

元記事を表示

Rails 7.0 のリリースノートまとめ

## はじめに
2021年9月15日、Rails 7 のアルファ版がリリースされました。
通常、Rails のアルファ版リリースは行わないのですが、フロントエンドに大きな変更が加わることによって、慎重に検証する必要があると判断したみたいです。

ちょうど社内で Rails 7 についてアウトプットする場があり、良い機会なので情報をまとめてみたいと思います。

## 1. フロントエンドのリニューアル
まず Webpacker が廃止され、フロントエンドがリニューアルされます。
ES6 / ESM のブラウザサポートの進歩、HTTP/2 の普及、importmap の新標準に対応するためです。
具体的には、Turbllinks と Rails UJS が Stimulus と Turbo の Hotwire コンビに置き換わります。
node_modules、bundler の設定に依存せず、フロントの開発にありがちな問題も発生しません。

また、Rails と JavaScript + CSS bundler の統合も劇的に改善されたそうです。
Rails の新しい JavaScrip

元記事を表示

最近追加されたrubocop規則を確認してみる?‍♀️?

最近追加されたrubocop規則を確認してみる?‍♀️?

## みんな大好きrubocop
みなさんrubocop?‍♀️?は好きですか?
新しい書き方や効率的な書き方が発見できるし
チームでコーディングスタイルを統一でき、レビューがストレスにならないので僕は良いgemだなと思っています

そんなrubocopですが日々アップデートされ新しい規則が増えています
[リリースノートはこちら](https://github.com/rubocop/rubocop/releases)

最近新しいプロジェクトで最新版のrubocopを入れて実行してみたのですが
Waringがたくさん表示されてびっくりしました

本日は新しいルールで怒られてしまった物を紹介しようと思います

## versionを0.92から1.23にして怒られていたもの

### Style::HashConversion (from 1.12.0)

“` ruby
# bad
Hash[ary]
# good
ary.to_h

# bad
Hash[key1, value1, key2, value2]
# g

元記事を表示

Rails 掲示板の検索機能 ransack 解説

Rails 掲示板の検索機能の実装 手順 (自分用)

#ransackを導入

“`:Gemfile
gem ‘ransack’
“`
・Gemfileにransackを追加しインストール

“`:ターミナル
$ bundle install
“`
#コントローラーの設定

“`rb:app/controllers/boards_controller.rb
class BoardsController < ApplicationController def index @q = Board.ransack(params[:q]) @boards = @q.result(distinct: true).includes(:user).order(created_at: :desc).page(params[:page]) end def new end def bookmarks @q = current_user.bookmark_boards.ransack(params[:q]) @bookmark_boards

元記事を表示

【備忘録】モーダルで非同期投稿のできる簡単な日記アプリの作成(新規投稿、削除、編集)

![gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341484/7d3500e3-7ce0-e3ca-e436-bd5003d49eb5.gif)
実装環境
Rails 5.2.6
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

#1.アプリの作成

任意の名前のアプリを作成

“`ruby:ターミナル
rails new sample(アプリ名)
“`

#2.Modelの作成

“`ruby:ターミナル
rails g Sample(モデル名) title:string content:text
“`

上記コマンドを実施後に次のファイルができていることを確認

“`ruby:YYYYMMDDXXXXXX_create_アプリ名
class CreateRecipes < ActiveRecord::Migration[5.2] def change create_t

元記事を表示

docker-composeを既存のアプリへ導入【Rails×PostgreSQL】

既に作っていたrailsアプリにdockerを導入してみました。
なかなか難しくてかなり時間かかってしまいました。以下に記録として残しておきます。

# 早速やってみよう

“`:Dockerfile
FROM ruby:2.6.3
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client

WORKDIR /port
COPY Gemfile /port/Gemfile
COPY Gemfile.lock /port/Gemfile.lock
RUN gem install bundler
RUN bundle install
COPY . /port

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

CMD [“rails”, “server”, “-b”, “0.0.0.0”]
“`

基本的に公式の[クイックスタート](https

元記事を表示

【Rails×AWS】capistranoでデプロイ時のNoMethodError: Cannot load database configuration

初めてcapistranoでEC2にデプロイするときにハマったエラーがあったので解決方法ともに共有しようと思います。
EC2環境構築についてはこちらの記事を参考に行いました↓
https://qiita.com/gyu_outputs/items/b123ef229842d857ff39

#エラー内容

“`
$ bundle exec cap production deploy
.
.
.
.
deploy:migrating
01 $HOME/.rbenv/bin/rbenv exec bundle exec rake db:migrate
01 rake aborted!
01 NoMethodError: Cannot load database configuration:
01 undefined method `[]’ for nil:NilClass

“`

#原因/解決方法

最初はデータベース関連のエラーかと思いましたが色々調べてみるとdatabase.ymlの環境変数が読み込めないときに表示されるエラーということがわかりました。

元記事を表示

[Rails]Cookieとセッションの違い

#はじめに
現在プログラミングスクールに通っています。
就活を始めるにあたって質問されそうなことを言語化しておきたく自分なりにまとめました。

“`
① 簡単な説明
② 1行に要約する
③ 3行に要約する
“`

#Cookieとは

WebサーバーがクライアントPC(クライアントサイド)に預けておく小さなファイルのことです。
クライアントPCが、あるWebサーバーに初めて接続した際に、Webサーバー(サーバーサイド)がクライアントPCの中に、そのWebサーバー専用のCookieファイルを作成します。

クライアントPCがWebサーバーに接続したときには、WebブラウザがそのCookieをWebサーバーに送信します。このような仕組みによって、Webサーバーは、個々のクライアントコンピュータが前回使用していた情報を読み取ることができるようになります。

###Cookieには、Webサーバーによってどのような情報でも格納できる
**例**
・ユーザー名などの接続情報
・ショッピングサイトなどで購入する商品を一時的に保管する“買い物かご”の情報
・氏名や住所、電話番号などの一度登録し

元記事を表示

病院なび AMP化への道

事の発端はGoogleが「2021年6月からCWV(コアウェブバイタル)の評価をランキングシステムに導入する」とアナウンスしたことでした。そのアナウンスにより「病院なび[^1]」でもCWVの向上が優先課題として上がり、その解決策として、病院なびのAMP化を実施致しました。

この記事では、なぜAMPにしたのか、AMPへの切り替えを、どのように進めたのかを記します。
(病院なびではRailsを使っているので、RailsでのAMP化方法となります)

[^1]: 「病院なび」は、全国23万件以上の医療機関・薬局・薬店を検索できる医療機関検索サイトです。https://byoinnavi.jp

# なぜAMP?
まず、AMP(Accelerated Mobile Pages)」とは、Googleが推進しているコンテンツを高速に表示されるための手法で、CWVに優れています。が、その分、制限も多いです。

> AMP はウェブサイトを高速かつユーザーファーストにし、収益化するシンプルかつ堅牢なフォーマットです。AMP は一般的なプラットフォームへの配布を実現し、運用コストと開発コストを削

元記事を表示

Rails 掲示板の画像アップロード機能 carrierwave 解説

Rails 掲示板の画像アップロード機能の実装 手順 (自分用)

#アップロード用のライブラリ(carrierwave)をインストール

“`:Gemfile
gem ‘carrierwave’
“`

・carrierwaveをgemに追加して、bundle install

“`:ターミナル
$ bundle install
“`

#アップローダーを生成

“`:ターミナル
$ bundle exec rails g uploader アップローダー名
“`

“`:ターミナル
$ bundle exec rails g uploader BoardImage
“`
コマンドを実行すると、app/uploaders/avatar_uploader.rbファイルが作成される。

###生成されたアップローダー

“`rb:
class BoardImageUploader < CarrierWave::Uploader::Base storage :file #アップロードファイルの保存場所を指定 def store_dir #アップロードファイルの保

元記事を表示

【SLOT解析アプリ】RubyでスクレイピングしてGoogleスプレッドシート反映させてみた。

鹿児島でプログラミングスクール講師をやっています。荻原です。
# 作ったアプリ

*待っていれば以下の画像が動きます。▼
slot.gif

スクレイピングしているサイトは、自分のサーバーに構築したWPサイトです。

パチスロ

# 概要
GCP Google Sheets API
・rubyとGoogleスプレッドシート連携
Ruby
・パチスロ合算値のスクレイピング
・Googleスプレッドシートへの書き込み

# 参考記事
スプレッドシートとRuby連携
https://zenn.dev/cumet04/scraps/c471e4aacaa448
https://github.com/cumet04/spreadsheet.rb

【ru

元記事を表示

[Rails6] Capistrano+docker-composeを使用してデプロイ を自動化する。

docker-composeを使用してnginxとRailsコンテナを用意して、AWSにデプロイをしています。現在はSSH接続して、いちいち起動しています。
なので、Capistranoを使用して、自動デプロイを行えるようにしていきたいと思います。

##docker-compose.production.yml
“`
version: ‘3.7’
services:
web:
build:
context: .
dockerfile: Dockerfile.production
volumes:
– .:/date_course # カレントディレクトリを/date_courseにバインドマウントしている
– public-data:/date_course/public
– tmp-data:/date_course/tmp
– log-data:/date_course/log
ports:
– “3000:3000”
command: bash -c “bu

元記事を表示

【Rails】ブロック引数yieldとプロック引数&block

##ブロック引数

###yield
自分で定義したブロック付きメソッドでブロックを呼び出すときに使う。 yield に渡された値は“`| “`と“`|“`の間にはさまれた変数(ブロックパラメータ)に代入される。

“`ruby
# ブロック付きメソッドの定義の働きは与えられたブロック(手続き)に引数1, 2を渡して実行すること
def foo
yield(1, 2)
end

# 「2引数手続き、その働きは足し算をして印字する」というものを渡して実行させる
foo { |a, b| a + b }
#=> 3
“`

– “`yield“`の部分にメソッド“`hoge1“` “`hoge2“`のそれぞれのブロックの中身をそのまま置き換えたイメージ。

“`ruby
# users_info = {
# “kato” => {
# :id=>1,
# :age=>30,
# :birthday=>’1990-01-01′},
# “yamada” => {},
# “suzuki” => {}
# }

def foo
users_info

元記事を表示

PG::DuplicateTable: ERROR:を改善

# 状況

マイグレーション時に下記のエラー表示がありました。

“`irb
PG::DuplicateTable: ERROR: relation “tasks” already exists/Users/****/task_app/db/migrate/20211216010101_create_tasks
“`

# 環境

+ Rails 6.0.3
+ PostgreSQL 14.0

# 改善

冒頭のエラー文の通り、Tableが重複しているようなので下記の手順で重複分を削除しました。

DB内を確認

“`irb
$ rails db
“`

\dを入力して一覧表示

“`irb
# \d

List of relations
Schema | Name | Type | Owner
——–+———————-+———-+——-
public | ar_internal_metadata | table | ****
public | schema_mig

元記事を表示

integration_ test ファイル削除方法。

#総合テストのファイル名を間違えた。
rails g integration_test sighup で総合テストを作成しましたが、
よく見るとsghupの綴りが間違っていました。
幸い、テストはまだ記述していなかったので、削除して新しい総合テストのファイルを作成します。

##総合テストのファイル削除
“`text:ターミナル
$rails destroy integration_test users_sighup
Running via Spring preloader in process 51389
invoke test_unit
remove test/integration/users_sighup_test.rb
“`
以上でファイルの削除が終わりました。

元記事を表示

RailsアプリをEC2からECS/Fargate構成に移行してホストする【CircleCI連携編】

# はじめに

当記事は、【ECS準備編】【ECS起動編】【HTTPS/ドメイン編】の続編です。

https://qiita.com/Shuhei_Nakada/items/9e4c51bf9ae59f0b1a2b

https://qiita.com/Shuhei_Nakada/items/247d6f1781d6a3765482

https://qiita.com/Shuhei_Nakada/items/a7f2fd64f0af9663ed29

まだお読みでない方は、そちらからご確認ください。

# 使用技術

* ECS/Fargate(blue/greenデプロイメント)
* CircleCI: 2.1
* Rails: 6

# 作業内容

1. ECRへのpush
2. ECSのblue/greenデプロイメント
3. masterブランチにマージ時のみデプロイさせる

# 前提

当記事は、CircleCI Orbを活用した実装方法になります。

CircleCI Orbを使うとCircleCIの設定ファイルをシンプルに構成できるようになります。

前提

元記事を表示

Railsチュートリアルのサンプルをローカルに構築した際のエラーとの格闘と解決

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

railsチュートリアル(第6版)のコードサンプルをGitHubからフォークして、ローカルに構築しようとした時に色々なエラーと格闘して、解決したためその流れを記録&共有です。
(README.mdを元に「第6版の11章を動かす」までの流れです。)

# 流れ
1. 本リポジトリをクローンし、該当のディレクトリへ移動します。
→問題なく実行できました
1. 必要なパッケージをインストールし、bundle install(本番環境でのみ必要なgemはスキップ)します。
→問題なく実行できました
1. データベースを移行します。
→ここで躓きました?

# エラーとの戦い
ここから長い戦いとなりました?
## rake-12.3.3がありません?
「3.データベースを移行します。」の`rails db:migrate`を実行すると、

“`
Could not find rake-12.3.3 in any of the sources
R

元記事を表示

RailsのMVC以外(Service, Form, Decoratorなど)について考えるための読み物まとめ

## 原典

* [7 Patterns to Refactor Fat ActiveRecord Models](https://codeclimate.com/blog/7-ways-to-decompose-fat-activerecord-models/)
* [ActiveRecordパターン](https://www.martinfowler.com/eaaCatalog/activeRecord.html)やMVCアーキテクチャではうまく表現できないロジックに対する解法を示し、議論の先駆けとなった記事の模様(※要出典)。

## 全体像的な読み物

* パーフェクトRuby on Rails 増補改訂版 Part5 エキスパートRails
* [Ruby on Railsの正体と向き合い方 / What is Ruby on Rails and how to deal with it?](https://speakerdeck.com/yasaichi/what-is-ruby-on-rails-and-how-to-deal-with-it)
* [Active

元記事を表示

Rails × Vue.jsのlink_toの謎の挙動について調査してみた

詳しくいうと、

![スクリーンショット 2021-12-15 21.44.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653881/5dda7e50-b45f-d1d3-a065-5c6d70ded015.png)

今画面がこんな感じになっていて、
この画面のコードはしたのようなかんじで

“`erb:mandalarts/index.html.erb

# フォームの配列をeachしたものが色々あります

<%= link_to "マインドマップ" , mindmaps_path%>

“`

リンク先のコードはこういう感じです

“`erb:mindmaps/index.html.erb

<%= javascript_pack_tag 'mindmaps'%>
<%= stylesheet_pack_tag 'mindmaps' %>
“`

実際に表示させてるvueの画面は

“`maindmaps.vue