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

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

Docker使用時にbyebugのブレークポイントをスルーしてしまう問題の解決方法

# 環境
OS:macOS Big Sur
Docker:version 20.10.12
Ruby:2.7.3
Rails:6.1.3.2

# 発生した問題
①Docker使用中にbyebugで設定したブレークポイントをスルーしてしまう
下記のように=>マークは付くがブレークポイントで止まらず、コマンド入力できない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2428148/440339a3-d4db-3a68-2d83-1d2670f4d674.png)

②Dockerのコンテナからデタッチできない

# 原因
①、②のどちらもdockerの設定で標準入出力をコンテナに結びつけていなかったことが原因

# 解決方法
下記のようにdocker-compose.ymlファイルにstdin_open: true, tty: trueを追加し、Dockerをビルドし直して解決。
![image.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

【Rails】ENV[]とENV.fetch() {}の違い【Ruby】

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

## `ENV[]`と`ENV.fetch() {}`の違い
`ENV[]`と`ENV.fetch() {}`の違いは指定した環境変数が存在しない場合に`nil`を返すかデフォルト値を返すかの違いです。

例えば、以下の場合には、`RAILS_MAX_THREADS`、`DB_USER_NAME`、`DB_USER_PASSWORD`が存在しない場合にはnilとなります。
“`detabase.yml

default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.["RAILS_MAX_THREADS"] %>
username: <%= ENV.["DB_USER_NAME"] %>
password: <%=

元記事を表示

【EC2/Amazon Linux2】RailsアプリケーションのログをCloudWatchLogsに転送

# はじめに
Railsアプリケーションではデフォルトでlogsフォルダにログ情報を出力してくれます。
本番環境で運用している場合、EC2インスタンスを複数台用意して冗長構成としている場合が多いと思います。
その際、ログを確認するために各サーバーにSSH接続を行うのはとても面倒なため、1箇所に集約して確認することができるととても便利です。

本記事では、CloudWatchLogsを使って複数台の場合でも一括で確認する方法、またloglotateを使用した古いログの削除する設定を記載しています。

# CloudWatchLogsの設定

### IAMポリシーの作成

1 [IAM]-[ポリシー]-[ポリシーを作成] を選択
2 [JSONタブを選択] 以下テキストをペーストし、[次のステップ:タグへ]

“`json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“logs:CreateLogGroup”,

元記事を表示

Rubyスクリプトをどうコンパイルするのか?

前回の記事では、字句解析、そして構文解析までをご紹介しました。
今回の記事は前回の内容がモリモリに必要になるので、読んでいない方がいらっしゃいましたら以下の記事をご覧ください。

https://qiita.com/wangqijiangjun/items/fa153176f7b410cb4a5f

前回の記事で以下のような画像を提示しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/7e628acd-0c13-02c6-d318-5b5d0e01ec00.png)
この続きが以下の画像になります
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/b16d0910-8ad2-b743-81ec-c778ea715bd4.png)

今回は、構文解析の次である「コンパイル」~「YARV」までを見ていこうとおもいます。
こちらも中々の重厚感があるのでめげずに頑

元記事を表示

Ruby on Rails 超簡単レベル上げ機能

5投稿ごとに1レベ上がる。
次のレベル上がるまであと何投稿かを表示する。
“`ruby:users_controller
def show
@user = User.find(params[:id])
@count = @user.tweets.count
@level = @count / 5
@next_level = 5 – (@count % 5)
end
“`

“`erb:users/show.html.erb

投稿数<%= @count %>

<%= @level %>Lv

あと<%= @next_level %>投稿でレベルup

“`

![スクリーンショット 2022-03-27 19.44.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081227/fec181f8-a831-7145-e8f0-441637226993.png)

元記事を表示

DockerでRuby on Railsの環境を構築する際のDockerfileのコマンド及びコード理解

## なぜ記事を書こうと思ったか
Rails用のDockerfileを作成する際にコマンド及びコードの理解を備忘録として残すため。

## Dockerfileとコマンド説明
Dockerfile
“`
FROM ruby:[バージョン]
RUN set -x && curl -sL https://deb.nodesource.com/setup_14.x | bash –

RUN set -x && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && \
echo ‘deb http://dl.yarnpkg.com/debian/ stable main’ > /etc/apt/sources.list.d/yarn.list

RUN set -x && apt-get update -qq && apt-get install -yq nodejs yarn vim default-mysql-client

RUN mkdir /app
WORKDIR /app
COPY

元記事を表示

【個人開発】温泉宿の情報交換ができる掲示板とSNSが組み合わさったサービス「みんなの温泉宿」を開発しました。

# はじめに
こんにちは。ひろかずと申します。独学でプログラミングを学んだ後、タイトルにあるようなサービス「[みんなの温泉宿](https://minnano-onsenyado.herokuapp.com)」を作ってみました。
作ろうと思った理由は主に以下の2点です。
##### ①自分自身が温泉宿に泊まってのんびりすることが好きで、情報交換ができる場を作りたかった。(掲示板)
##### ②温泉宿が好きな人同士で繋がれる場を作りたかった。(SNS)
これら①②を合体させて、掲示板+SNSの機能を持ったサービスとなりました。
![無題9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2493043/5aa13fc4-854a-f352-e75c-ee0b2dc4e1f3.png)

# 工夫した点
##### ①会員登録無しでも使用可能
まずは誰でも気軽にお試し感覚で使ってもらいたいと思い、登録無しでも口コミ投稿・掲示板書き込み機能を使えるようにしました。その場合、その方の名前は「名無しさん」となり

元記事を表示

CarrierwaveとMiniMagickで画像アップロードの実現

## はじめに
自作PF作成中に結構時間を要してしまったので今後のためにまとめる

## 環境と前提
M1 Mac
Rails 6.1.4.7
Ruby 3.1.0
MacにImageMagicが入っていることが前提

## Image Magicが入っていることを確認
下記のコマンドを使用してimagemagickが入っていれば問題ないです
何も表示されなければ入っていません
“`shell:terminal
$ brew list | grep imagemagic
“`
入っていなければこちらのコマンドで入れてください
“`sehll:terminal
$ brew install imagemagick
“`

## Carrierwave

“`rb
gem ‘carrierwave’, ‘~> 2.0’
gem ‘mini_magick’

bundle install
“`
“`rb:terminal
# アップローダークラスを作成
# app/uploaders/image_uploader.rbを生成
rails g uploade

元記事を表示

[Devise]を導入してプロフィールページも作成する

## はじめに
Devise導入時に毎回Qiitaのいくつかの記事を参照していたので自分なりにまとめてみた。
環境 M1 Mac Rails 6.1.4.7 Ruby 3.1.0

## Deviceのインストール

“`rb:Gemfile
gem ‘devise’
“`

“`rb:terminal
bundle install
“`

“`rb:terminal
# 設定ファイルを生成する
rails g devise:install
“`

## Userモデルの作成
“`rb:terminal
rails g devise user
“`

## テーブルを作成
“`rb:terminal
rails db:migrate
“`

## nameとimageカラムをusersに追加

“`rb:terminal
# add_カラム名_to_テーブル名 カラム名:データ型
rails g migration add_name_to_users name:string
“`

“`rb:xxx_add_name_to_users.rb
# null:fa

元記事を表示

いいねボタンのAjaxが機能しません。リロードをしなければ反応しません。

# エラー
いいねボタンを押しても反応しません。

### destroy
エラーメッセージがなかったのでログを載せました。
“`
Started DELETE “/favorites/4950” for 14.12.68.160 at 2022-03-27 02:18:28 +0000
Cannot render console from 14.12.68.160! Allowed networks: 127.0.0.0/127.255.255.255, ::1
Processing by FavoritesController#destroy as JS
Parameters: {“authenticity_token”=>”*******==”, “id”=>”4950”}
User Load (0.2ms) SELECT “users”.* FROM “users” WHERE “users”.”id” = ? LIMIT ? [[“id”, 1], [“LIMIT”, 1]]
↳ app/helpers/sessions_helper.rb:17:in `c

元記事を表示

Rubyスクリプトの字句解析

Rubyを触っていく中で、「Rubyはどんな過程を経てコードが理解されて処理されるんだろう」と思って書籍を読んでそのアウトプットをしていこうとおもいます。

## 処理の流れ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485775/7e628acd-0c13-02c6-d318-5b5d0e01ec00.png)

全体的な処理の流れはこのような感じです。まずは全体の流れを抑えることが大事になりそうです。
この記事では、字句解析と構文解析までを書こうとおもいます。

## 字句解析
以下のコードを“`simple.rb“`ファイルに記述し、実行してみます。
“`
10.times do |n|
p n
end

# =>0
1
2
3
4
5
6
7
8
9
“`
まず、この文字列に遭遇すると、Rubyは**字句解析**を行います。
>字句解析とは、自然言語の文やプログラミング言語のソースコードなどの文字列を解析して、後半の狭義の構文解析で最小単位(終端記号)となってい

元記事を表示

rails_tutorial chapter9 <忘備録>ログインとログアウトの応用

chapter8では、セッションを利用してログイン・ログアウトを実装しましたが、chapter9ではcookieを利用して、永続的なログイン・ログアウトの実装をします。これはそこまでセキュリティーが求められないWebサービス向きです。

### 今回の実装のまとめ
1、Userモデルにremember_digestを作成
2、remember_digestにハッシュ化したトークンを保存(ハッシュは不可逆)
3、cookieにトークンと暗号化されたuser_idを保存
4、authenticated?(user)メソッドを使ってcookies[:remember_token]がremember_digestと一致することを確認

上で説明した設計やセキュリティ上の考慮事項を元に、次の方針で永続的セッションを作成する。

### remember_digestカラムをUserモデルに追加
“`
$ rails generate migration add_remember_digest_to_users remember_digest:string
“`

### rememberメ

元記事を表示

モデルを作る

Railsではコントローラやビューからモデルを使うプログラムを書くことがほとんどであり、まず機能に関連するモデルを用意するのが一般的だ。

//Postモデルの作り方。//

モデルは主に
1,モデルに対応するRubyのクラス
2,モデルに対応するデータベースのテーブル
の二つから構成される。

ちなみに命名の規則として
1は大文字で
2は小文字の複数形で書かなければならない。

理由は簡単で、データベースは複数のものを取り出すときに使う。
また、モデルはデータベースの書き込みならず読み出しも行う。
モデルは単体でデータベースが複数あるイメージを持っていただけると命名規則もわかりやすいかと思う。

つまり今回、例えば
1モデルをTaskと名づけたのなら2のデータベースはtasksと複数形になる。

次にどんなカラムを持たせるのかも考える。
“`
bin/rails g model [モデル名][属性名:データ型 属性名:データ型]
bin/rails g model Post name:string//短い文字列// comment:text //数字//
“`

1、railsの

元記事を表示

【個人開発】筋トレ × 音ゲー × EDMの新感覚トレーニングアプリ「Muscle Beat」をリリースしました?

[![Image from Gyazo](https://i.gyazo.com/e53f4d2fd2bde97ad508a7716e5ad6ed.png)](https://www.muscle-beat.com)

EDMの音ゲーに合わせて筋トレを行えるサービスをリリースいたしました!

**▼ サービスURL(スマホ専用)**
https://www.muscle-beat.com

**▼GitHub**
https://github.com/jibiking/muscle_beat

## はじめに

はじめまして!
[駆け出し筋肉エンジニアのJibiki](https://twitter.com/ji_bi__)と申します?

– **時間がなくとも、筋トレを知らなくとも、楽しくトレーニングを行えるサービスを開発したい!**
– **普通の筋トレでは満足できない体の人でも楽しめるサービスを開発したい!**

そのような想いから、Muscle Beatの開発に至りました?

## トレーニング手順

**1. All Beats画面からプレイしたい曲を選択**
★ モ

元記事を表示

アプリケーションの雛形を作成する。

駆け出しエンジニアのTakaです。
本日はアプリケーションの雛型の作成の仕方を学んだのでシェアさせて頂きます。

まず、大切になってくるのは、
1,今から自分の作成するアプリケーションの内容を考えることです。どんなアプリを作りたいのかしっかりと考えます。

2,次にアプリケーションの名前を考えます。

3,その後に、アプリケーションの雛型を作ります。
その際に使うのがrails new コマンドです。

rails newコマンドでアプリケーションに必要になってくる基本的なデータやファイルは一式揃います:relaxed:

“`
rails new 作成するアプリケーションの名前
“`

4,次にデータベースを作成します。
※データベースとは決まった形で整理したデータの集まりのこと。
例えば、氏名、電話番号、社員番号などがバラバラに整理されていたら分かりにくいように、整理してまとめたもののことをデータベースという。
アプリケーションが生み出すデータを保存するところです。
“`
rails db:create
“`

5,データベースを作成した後にサーバーを起動します。
“`

元記事を表示

チェックボックスの作り方

チェックボックスの作り方を調べていると、いくつかの方法があることがわかった。

①“check_box“ モデルに関連するチェックボックス  
 ※パラメーターとして値を保存したい場合
②“check_box_tag“ モデルに関連しないチェックボックス
③“collection_check_boxes“ 複数選択のチェックボックス

今回実装したい内容は①に当てはまるので、それをまとめる。

### check_box

まずはマイグレーションファイルに以下を入力。
“`ruby:
class Createxxxxxx < ActiveRecord::Migration[6.0] def change create_table :xxxxxx do |t| t.boolean :カラム名  # 追記 t.timestamps end end end ``` 次にビューファイル。 ```html: <%= f.check_box 'カラム名', {:checked => true}, checked_value

元記事を表示

shionさん主催のコワーキングスペース C作業場さんの勉強会がいい感じだったので、Rails Pluginを「リリースした話」

# この記事は

データベースを使って手っ取り早くツリーダイアグラムを描きたいんだよって人向けに作ったRails Pluginを紹介する記事です

![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179979/0356e77c-db06-7f27-5adf-2a36347fcf2d.gif)

* gem
* [acts_as_tree_diagram | RubyGems.org | コミュニティのGemホスティングサービス](https://rubygems.org/gems/acts_as_tree_diagram)
* github
* [smapira/acts_as_tree_diagram](https://github.com/smapira/acts_as_tree_diagram)

# やりたかったこと

mermaidもいいけど出来るだけ手作業はしたくなかったので

# 前提

* Rails
* ActAsTree

# やり方
“`ruby

元記事を表示

rails_tutorial chapter8 <忘備録>ログインとログアウト

# ルーティングの一覧
| 1 | 2 | 3 | 4 | 5 |
|:-:|:-:|:-:|:-:|:-:|
| HTTPリクエスト | URL| 名前付きルート| アクション名| 用途 |
| GET | /login | login_path | new | 新しいセッションのページ(ログイン) |
| POST | /login |login_path | create | 新しいセッションの作成(ログイン) |
| DELETE |/logout | logout_path | destroy | セッションの削除(ログアウト) |

ユーザー登録フォームでform_withヘルパーを使い、ユーザーのインスタンス変数@userを引数にとっていました。
すると、railsが勝手に「フォームのactionは/usersというURLへのPOSTである」と解釈をして、createまで実行してくれました。

“`
<%= form_with(model: @user, local: true) do |f| %>
.
.
.
<% end %>
“`

元記事を表示

Railsで作成したアプリをGitHubで管理する方法

# 結論    

アプリを保管するための倉庫を`自分のパソコン`(local repository)と`GitHub`(remote repository)上に作成して、`送り込む`(push)。

### ちなみに

remote: 遠隔
local: 地元
repository: 倉庫、保管庫

## 1.リモートリポジトリを作成

“`
GitHubで新規リポジトリを作成する。
“`

## 2.ローカルリポジトリを作成し、送り込むための準備

“`ターミナル
$ git init        #remote ripositoryが作成されるだけ

$ git add .   

# 編集中のコードをGitで管理対象にするという意味のコマンド   
# ‘index’にステージングともいう

$ git commmit -m ”どんな機能を実装したのか等のコメントを残す”

#local repositoryにプログラムを保存するコマンド
#これでremote repositoryに送り込む準備は整った
“`
### ちなみに
initialize

元記事を表示

Rails MVCモデルとは何か

# 結論

アプリケーション設定を整理するための概念。

この概念に基づいてアプリ制作を行うことで、**開発がしやすくなったり**、**保守性が高くなったり**します。

Q:開発がしやすい?

A:プログラムを書き込む場所がルール化されているので作業が早くなる。

例えば`夕飯を用意してください。`と指示されるよりも`カレーを作ってください、ただし人参は抜きなさい`とルールが決められている方が動きやすいのです。

Q:保守性が高い?

A:メンテナンスのしやすさのこと

つまり、こういう考え方で作ると安全で壊れにくいアプリケーション作りやすいよってことです。

# ちなみに

Model View Controller の頭文字です。
それぞれ役割が分かれていて、どこに何のプログラムを書くか決まっています。

M: 模型、型

V: 光景、眺め

C: 支配者、制御装置

## Modelの役割

データベース操作に関わる処理を作る

商品情報や、顧客情報のデータを扱うデータベース(db)のデータ操作をするためのプログラムを作る。

例:個人情報に関するデータや自己紹介メソ

元記事を表示

OTHERカテゴリの最新記事