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

Rails関連のことを調べてみた2020年11月24日
目次

【Rails】脱初心者っぽい書き方【ポートフォリオ制作】

## はじめに
初心者、実務未経験者には何が足りないのかという視点で書いてみました
**初心者レベルを脱したい人**、**他の駆け出しエンジニアと差別化したい人**には役に立つ内容かと思います

いろいろ書きますが、一気に全部理解しようとはせず**使えそうなものから試してみてください**?

* **対象者**
* プログラミング学習を始めてポートフォリオアプリを制作している人
* 基礎的な内容の理解ができており、問題なく動くアプリを作れる人
(ちゃんと動くアプリを作れずエラー解決に四苦八苦する人は対象外)
* **内容**
* 主にサーバーサイド(rubyファイル)

初めてポートフォリオアプリを作成すると、**とりあえず期待通りに動くこと**が目標になるため、実際の現場での作法をいろいろ無視してしまうケースが多くあるかと思います。

まずは動くコードを書くことが最重要ではありますが、**それだけだと現場では通用しないのも事実です**:warning:

現場で教えてもらってできるようになれば問題ない気もしますが、余裕のある人は先に知ってお

元記事を表示

スクール5週目 応用力の根底

今週は、応用カリキュラムも終盤に差し掛かり、課題図書(レスポンシブWebデザイン、Ruby応用、正規表現)を主に学びました。
プログラミングの奥深さを感じ取れた週になりました。

**【学習内容】**
・サーバーの基礎知識
・レスポンシブWebデザイン
・Ruby応用
・正規表現

**サーバーの基礎知識** :desktop:
まず、サーバーの必要性、役割を学びます。その上でIPアドレス、WANとLAN、ドメインとDNS、ポート、WEBサーバー、HTTPの基礎を学習します。
次にサーバ向けによく利用されているOSであるLinuxについて学びます。Linuxの特徴としては、以下の点が挙げられます。
①オープンソースであり、誰でも自由に無償で利用できる
②品質の高い多くのソフトウェアが利用できる
③世界中でサーバ用途として広く利用されているため信頼性が高い
④操作を自動化するための仕組みが用意されており、サーバの運用が行いやすい

そして次にSSHについて学習。SSHとは、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコルのことです。利用するメリットとし

元記事を表示

【RSpec】traitの使い方を整理してみた

 最近RSpecについて勉強している者です。

 他の方のポートフォリオを拝見する機会がありまして、
「テストに書いてあるtraitって何だろう?」
と疑問に思ったため、現在理解している点についてアウトプットしました。
(「everyday rails – rspecによるrailsテスト入門」
を参考に勉強している途中です)

 間違っている点などありましたらご指摘よろしくお願いします。

# traitの使い方
FactoryBotを用いて次のようなテストデータ(ファクトリ)を作成するとします。

“`ruby:spec/factories/user.rb
FactoryBot.define do
factory :user do
name = “Taro”
name { name }
email = “test1@example.com”
email { email }
password = “pass123”
password { password }
end
end
“`

Userというモデルにnameカラム、em

元記事を表示

seed_fu: herokuにrailsアプリをデプロイしたら,初期データが反映されてなかった

#困っていたこと

railsでwebアプリケーションを完成した。よっしゃherokuにデプロイしようと思いデプロイしたところ
表示してほしいユーザーデータとかの初期データが反映されていなかった

ぼくは初期データをseed_fuといったgemを使って、開発環境では下のコマンドで初期データを投入していた

“`
rails db:seed_fu
“`

#結論
以下のコマンドを使えばseed_fuのデータは本番環境に反映される(**herokuでは**)

“`
heroku run rails db:seed_fu
“`

以上です。なにか間違っている点などあれば、コメントお願いいたします

元記事を表示

[初心者向け]怪奇!Herokuで画像投稿する際の謎のエラー

ローカルでは正常に動いていた。Herokuになると途端に
![スクリーンショット 2020-11-23 23.43.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674994/633f1ecc-0053-0b12-5bf2-533dd1d1b526.png)
こうなってしまいます。

#エラーの正体を先にいうと、、

###拡張子です。

ファイルの名前の最後についてるあれです。.pdf.png.mp3です
**Herokuでは、”jpeg”が使えません。**

※ちなみに”jpg”は使えます。

僕が投稿しようとしてエラーが出ていた画像は拡張子が全てjpegでした。

ログを見ても気付きにくい初心者には手強いエラーなので気をつけてください!:)

元記事を表示

初期データをseeds.rbに記述して、ゲストログイン機能のエラーを解決してみた

#はじめに
 ゲストログイン機能を実装したが、ユーザー登録以前に、2つの情報を登録し、ユーザーと紐づけていたので、それを解決するために、試行錯誤した結果、初期データの作成にたどり着いた。

##seeds.rbとは
 Rails6.0では、(もう少し前からだとは思うが、)デフォルトで入っているファイル。dbディレクトリの配下にある。最初から、コメントアウトで色々記述されているが、説明なので、消してしまって構わない。

##記述方法
 `seeds.rb`には、初期データとして作成しておきたい(テスト用などの目的)データを直接作る。

“`ruby:seeds.rb
User.create!(name: ‘ゲスト’, email: ‘gest@sample.com’)
“`
`モデル名.create!(カラム名: 値)`が基本形。
`create!`の部分は他にも、いくつか使えるメソッドがある。(次回、紹介予定)
上記のように、書けば、いくつでも初期データを作成できる。モデル名の部分を他に変えれば、別のテーブルにも作成可能。

カラム名にidを用いるこ

「N+1問題」とは??

##1. 「N+1問題」とは??
アソシエーションを利用した際に、データベースへのアクセス回数が多くなってしまう問題を「**N+1問題**」といいます

例えば1つのツイート投稿(tweet)は1人のユーザー(user)とアソシエーションで結びついているとします。そして、データベースから全てのツイート投稿を取得するとアソシエーションによりユーザー情報も取得しようとします。
この時、次のコードだとターミナルではこのようなログを示します。

“`ruby
class TweetsController < ApplicationController def index @tweets = Tweet.all end end ``` ![スクリーンショット 2020-11-23 22.07.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/875779/2c3b9693-8821-15e5-938e-8484ea8fb9d6.png) 水色の箇所

[Rails]collection_selectについて勉強してみた![初心者]

#はじめに
現在作成しているアプリの中で、“collection_select“を使用する場面があり、備忘録のためにアウトプットします。
正直、このメソッドにたどり着くまでに、メチャクチャ時間がかかりました笑

“collection_select“とは、モデルの情報を元に、セレクトボックスを生成できるメソッドです。
具体的に見ていきましょう!!

#やりたかったこと
セレクトボックス内に、ユーザーの登録済住所を選択肢として用意したかったのですが、どのような記載方法が適切なのか、全然分からなくて、けっこう長い時間グーグル検索して辿り着いたのが、“collection_select“です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/824345/ac24a0ac-bea6-4793-ec94-2c23cc07730f.png)
このセレクトボックスをクリックすると、
![image.png](https://qiita-image-store.s3.ap-northeast

README に記述するアプリ開発の背景

#はじめに
個人開発したオリジナルアプリのREADMEを記述しています。このアプリを開発した背景や問題、課題を記載しました。問題と背景の切り分け、考え方の本質を書き記します。

#目次
1.問題と課題の違い
2.オリジナルアプリの開発背景から設定した問題と課題

#1.問題と課題の違い
辞書などにおける意味は下記の通り。言葉そのもの意味に差異はない。

問題:批判・論争・研究などの対象となる事柄。解決すべき事柄。課題。
課題:解決しなければならない問題。果たすべき仕事。

参考:
[課題](https://dictionary.goo.ne.jp/word/%E8%AA%B2%E9%A1%8C/#jn-41674)
[問題](https://dictionary.goo.ne.jp/word/%E5%95%8F%E9%A1%8C/#jn-220806)

しかし、ビジネスにおいては明確な違いがある。主に下記のような意味で使われる。

問題:好ましくない状態
課題:問題を解決すべく行うこと

問題と課題の因果関係は上位に問題、下位に課題となる。基本的には1つの問題に対し、複数の課題がぶら

個人アプリ開発日記 #4

では前回書いた様々なメソッドが機能してくれるのか簡単なビューを使って確かめてみましょう、、!

### まずは新規登録から

このような簡単なビューで新規登録

#### users/new.html
“`erb
<% if current_user %>

welcome to my app

<% else %>
<%= link_to "ログイン", login_path%>
<% end %>

<%= link_to "ユーザー一覧",users_path %>

<%= link_to "投稿一覧", drinks_path %>

<% unless logged_in? %>

<

Rails wheneverをdockerで実行する

# 動機

Railsの定期実行を行う`whenever`を使おうとしたのですが、Mac上で直接実装すると環境変数や権限管理で大変だったのでdockerで行うことにしました

# 前提条件

実行環境は下記のようになります
・ ruby 2.6.3
・ Rails 5.2.4
・ MySQL 8.0.19 

#

# Docker関係

`Dockfile`、`docker-compose.yml`は以下のようになります
通常のdockerの設定とあまり変わらないのですが、今回はwheneverを利用するので`corn`のインストールとcronをフォアグラウンド実行するための設定を追記しています。

“`Dockfile
FROM ruby:2.6.3
#rubyのバージョン指定

#gemのインストール
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nod

【RSpec】Ruby on Rails チュートリアル「第3章」のテストを RSpec で書いてみた

# はじめに
Ruby on Rails チュートリアルでは「minitest」を使用してテストが実施されていますが、実際の現場では主に「RSpec」を使用してテストを実施するとのことなので、チュートリアルのテストを実際の現場に近づけるために「RSpec」で実施するようにしました。まず手初めに「第3章」のテストを RSpec で書き換えてみたので、同じようにチュートリアルのテストを RSpec で実施してみたい人の参考になれば幸いです。
## 対象者
+ Ruby on Rails チュートリアルのテストを Rspec で実施予定、または実施してみたい人
+ Ruby on Rails チュートリアル「第3章」のテストを Rspec で書きたいけど、書き方が分からない人

## テストコード
実際にテストコードを書き換えた結果が下記になります。
### Minitest
“`ruby:static_pages_controller_test.rb
require ‘test_helper’

class StaticPagesControllerTest < ActionDispat

GitHub Actions を使った Rails アプリの自動デプロイを10分で理解する

こんにちは、駆け出しエンジニアの[よしこ @k2_yoshikouki](https://twitter.com/k2_yoshikouki)です

CI/CDってカッコいいですよね。なんかこう、カッコいいんですよね(語彙力)

しかし「どうやって実装したらいいのかワケワカメ\(^o^)/」というエンジニアの方は多いと思います。でも実際はとても簡単なんだよということを知ってほしかったので、10分で読める記事で CI/CD のうちのCD(自動デプロイ)を実装していきたいと思います。

実作業時間は詰まらなかったら30分かからないくらいです。

# ゴール

CI/CD をやってみたいがやったことがないし何から手を付けたら良いか分からないエンジニア向けに、Rails アプリ (6系) で自動デプロイを最速で実装する。

結果、GitHub Actions を使ったCI/CDの大枠を把握できて自力で実装できるようになる

# 実装フローを見ていく

1. Rails アプリを作る
2. Heroku に手動デプロイして動作確認
3. GitHub Actions の初期設定

【Rails / FontAwesome】formの検索ボタンを虫眼鏡のアイコンにする

Ruby on RailsでFont-Awesomeを初めて使ったの投稿しました。

Font Awesome HP
https://fontawesome.com/icons?d=gallery

#### ポイント:使いたいアイコンのUnicodeの前に \u をつける

1 . CDNでfont-awesomeを読み込む

“` “`

2 . submitの記述の後を下記に変更。

“`
<%= f.submit "\uF002" %>
“`
3 . cssで下記を追加

“`
font-family: FontAwesome;
“`

【Rails】form_withの使い方について解説【初心者向け】

#はじめに
Rails開発をする中で、form_withを使う機会は非常に多いですが、

– **結局form_withとは何なのか?**
– **form_withにはどんな役割があるのか?**
– **form_withはどのように用いたらいいのか?**

といった悩みを抱えている方は多いと思います。

本記事はそのような方達に向けて、書いた記事となります。

ぜひ最後までご覧下さい。

#使用技術
Ruby on Rails 5.1〜
Ruby 2.6〜

##筆者の自己紹介
– テックキャンプ86期生(2020/9/21~)
– 執筆時点で学習開始から約9週間経過
– 約6週間で最終課題(メルカリクローンアプリの作成)を終了

#本記事の内容
[1.form_withとはそもそも何者なのか?](#1-form_withとはそもそも何者なのか?)
[2.form_withはどのような役割を果たしているのか?](#2-form_withはどのような役割を果たしているのか?)
[3.form_withの具体的な記述法](#3-form_withの具体的な記述法)
[4.まとめ](#

【Rails6】Active Job + Sidekiqを動かしてみた

Railsの非同期処理をActive Job + Sidekiqで実装したのでメモを残します。

※RailsアプリケーションはDocker環境で構築済みの前提です。環境構築は[こちら](https://qiita.com/shima-zu/items/b825c5a47b3582ef99cc)。

※Active Jobとバックエンドの比較は[こちら](https://qiita.com/shima-zu/items/6d07157b0070d10b3adc)。

## 環境
– Ruby 2.7.2
– Rails 6.0.3.4
– MySQL 8.0.20
– Redis 6.0.9
– Sidekiq 6.1.2
– Docker version 19.03.13

## 1. Redisの導入
まずredisコンテナを用意します。
ポート番号は`docker-compose.override.yml`で指定していますが、下記で設定して問題ないと思います。

“`yml:docker-compose.yml
version: ‘3.7’

services:
db

【自分メモ】モデル/コントローラー/ビューの役割

モデル…コントローラーで定義したインスタンス変数にデータを入れるため、コントローラーからモデルへデータを取ってくるよう指示が出る(モデル名.all)→指示を受けたモデルはデータベースからデータを取得後、コントローラーのインスタンス変数へ入れる。
またコントローラーから指示を受けて新しいオブジェクトを作成する(モデル名.new)。

コントローラー…インスタンス変数に入れるデータをモデルに持ってくるよう指示を出したり、そのインスタンス変数をビューに渡したりする。

ビュー…コントローラーから受け取ったインスタンス変数を元にhtmlファイルを作成する。

※自分の考えをメモとして残していますので、間違っていたり修正した方が良い点がございましたら、ドシドシつっこみいただけると嬉しいです!

【自分メモ】ストロングパラメータ

外部からの不正なアクセスを受け付けないようにするものです。

例えば、新規投稿したデータをデータベースに保存する際、新規投稿ではない別のデータを保存するように書き換える人がいました。そうすることで、本来なら公開されないはずの情報を操作されてしまい、不正に情報が流出してしまうきっかけになります。
そのような不正なアクセスを受けなくするため、ストロングパラメータにて「カラムを登録したモデル(オブジェクト)しかデータは持って来れませんよ〜」と記入し、加えてprivate下に置くことで特定のコントローラーでしか呼び出せないようにしました。(また、private下に定義することでストロングパラメータはアクションとして認識されなくなります)

また、ストロングパラメータはマスアサインメント脆弱性というセキュリティ上の問題を解決するために設定するものになります。

※自分の考えをメモとして残していますので、間違っていたり修正した方が良い点がございましたら、ドシドシつっこみいただけると嬉しいです!

Rails + Docker でhello worldを表示するまでを簡単に

アプリ作成時に毎回調べている気がするので、備忘録的にまとめてみました。
下記の`app名`の箇所には適宜アプリ名を入力して下さい。

※間違いがありましたら変更しますのでコメント頂けると嬉しいです^^

## 新規ディレクトリ作成 〜 hello world!!まで

まず、アプリの土台となるディレクトリを作ります。
さらに、touchコマンドで、2つの空ファイルを作成します。

“` terminal
$ mkdir app名 && cd app名
$ touch Gemfile Gemfile.lock
“`

私は、VScodeを使用して開発しているので
code コマンドを使用して起動しています。
ちなみに、code コマンドは起動と作成をしてくれます。

Gemfileを編集します。

“`terminal
$ code Gemfile
“`

“`ruby:Gemfile
source ‘https://rubygems.org’
gem ‘rails’, ‘~>5.2’
“`

Dockerfileを作成して編集します。

“`terminal
$

【自分用】マイグレーション関連【ロールバック、カラムの追加、型の変更】

完全に自分用の書き殴りです。
誤り等ございましたら、コメント下さい!

## ロールバック

– `rails db:migrate:down VERSION=20190611235049`
– `VERSION`で指定した箇所まで戻れる
– `rails db:rollback STEP=3`
– 現在の migration ファイルから遡って、`STEP`で指定した回数戻れる

## カラムの追加

1. `rails g migration Addカラム名Toテーブル名 @@@:integer @@@:string`
2. `rails db:migrate`

– Add 以下はキャメルケースで記載
– カラム名のところは何を書いてもいいが、追加したいカラム名の複数形に統一しておく
– テーブル名にはカラムを追加するテーブル名の**複数形**を書く
– `@@@`はカラム名を**単数形**で記入

以下は user テーブルにふりがなを追加したときの例。

“`ruby
class AddKanaToUser < ActiveRecord::Migration[5