Ruby関連のことを調べてみた2021年03月25日

Ruby関連のことを調べてみた2021年03月25日

RSpec 多対多関係 モデルテスト(例.Tagモデル)

#はじめに
rspecのTagのmodelテストをする際、中間テーブル(post_tag)を介したやり方に苦戦したため、
factory_botを用いて、多対多関係 (has_many through) のテスト作成方法をご説明致します。

##テーブル
`post`と`tag`の間に`post_tag`テーブルがある状態です。

スクリーンショット 2021-02-27 11.08.49.png

#到達点
以下の2点を達成する
・中間テーブルを介したmodelテストのFactoryBotを理解する
・中間テーブルを介したmodelテストの記述方法を理解する

##流れ
① 各モデルのvalidatesを確認
② FactoryBotの記述
③ modelテストの記述

#① 各モデルのvalidatesを確

元記事を表示

バリデーションの書き方(Rails)

#バリデーションとは
バリデーションは、正しいデータだけをデータベースに保存するために制約をかける事です。
`model`に書くことでデータベースに保存する前に受け取った情報を正しいのか判定させます。

##空でないこと
“`ruby:
validates :name, presence: true
“`
##空であること
“`ruby:
validates :name, absence: true
“`
##一意性であること(重複していないこと)
“`ruby:
validates :name, uniqueness: true
“`
##文字数制限
“`ruby:
validates :name, length: { minimum: 2 } # 2文字以上
validates :name, length: { maximum: 50 } # 50文字以下
validates :name, length: { in: 2..50 } # 2文字以上50文字以下
validates :name, length: { is: 6 } # 6文字のみ

元記事を表示

本番環境でS3に保存されない件について

本番環境にデプロイしたときにAWSのS3に保存されずに、アプリケーション上に保存されてしまう件について改善したので記述しておきます。

##どこが間違っていたのか

“`config/development.rb
# 上記省略
config.active_storage.service = :amazon
“`

“`config/production.rb
# 上記省略
config.active_storage.service = :local
“`
間違っていたのは上記の記述で、開発環境ではS3に保存できるように記述を変更していたのですが本番環境でlocalに保存されるようになっていました。
production.rbには本番環境での設定、development.rbでは開発環境での設定を記述しているので漏れのないように変更加えておかないとな、、と反省いたしました。
なのでproduction.rbの記述を下記のように変更。

“`config/production.rb
# 上記省略
config.active_storage.service = :ama

元記事を表示

Rails6でaction_textを使う

action_textを使いたい。

一. action_textのマイグレーションファイルを生成してマイグレート

“`
rails action_text:install
“`

“`
rails db:migrate
“`

二. gem file内のimage_processingのコメントアウトを外してbundle install

“`
gem ‘image_processing’, ‘~> 1.2’
“`

“`
bundle install
“`

三. scaffoldでモデルを作成(ここではstring型のtitleカラムだけを持ったpostモデルを想定)してマイグレート

“`
rails g scaffold post title:string
“`

“`
rails db:migrate
“`

四. Postモデルにhas_rich_text :contentを追記

“`
class Post < ApplicationRecord has_rich_text :content end ``` 五. posts.contr

元記事を表示

【Cloud9】failed to write new configuration file /home/ubuntu/.gitconfig.lock

## Error

Rails チュートリアルをやるために Cloud9 を開いたところ下記のエラーが発生。
Tab 補完が効かないなど変な挙動になった。

“`
error: failed to write new configuration file /home/ubuntu/.gitconfig.lock

┌──────────────────────────────────────────────────────────┐
│ npm update check failed │
│ Try running with sudo or get access │
│ to the local update config store via │
│ sudo chown -R $USER:$(id -gn $USER) /home/ubuntu/.config │
└───────────────────────────────────

元記事を表示

RubyとPHPは何が違うのか、と聞かれたら

私は未経験からエンジニアを目指している人間だが、もし同じ境遇であればちょっと読んでみて欲しい、、、。

まず、なぜこんな記事を書くのかというところからだが、とある企業の面接を受けた時にこう聞かれて、上手く答えられなかったからだ。

`「今まではRubyを勉強してきて、現在はPHPを勉強しているということですが、RubyとPHPの言語の違いは何かありますか?」`

質問された瞬間、「あ、これ答えられない。」と思ってしまって、本当にこんな質問だったか、答えた内容が的を得ていたかもはっきり思い出せない。。。
学んでいる上では、Rubyの方が可読性が高い、、気がします。みたいなことを言っていた気がする。

そもそも、自分がRubyからPHPを学び始めたのは、PHPのシェアが多いから、使えて損はないだろうという浅い考えだった。

エンジニアを目指すと言いながら、言語の違いすらも説明できなかった。そんな反省の思いからこの記事を書いている。ショックのあまりポエムっぽくなっているかもしれないが、許して欲しい。。。

# とりあえず答えから

あくまで、「私の考え方で、聞かれた質問の記憶から推測するに」

元記事を表示

Ruby on Rails 製 Web アプリケーションのセキュリティテストガイド (静的テスト:SAST)

## これなに?

Ruby on Rails 製 Webアプリケーションのセキュリティテストをするためのガイドです。本ガイドは脆弱なRailsアプリである [RailsGoat](https://github.com/OWASP/railsgoat) を題材にセキュリティテストの手法を解説します。

本記事ではソースコードをレビューして脆弱性を発見する手法である __静的アプリケーションセキュリティテスト(SAST)__ を扱います。

### 対象読者

Ruby on Rails でプロダクト開発している組織の**セキュリティチーム**を想定していますが、セキュリティに関心がある**開発者**や**テスター**にとっても役立つしれません。

前提知識・スキル

– 情報セキュリティに関する基本的な用語を知ってること
– 基本的なWebアプリケーションの脆弱性について知ってること
– Ruby on Rails のコードが読めること
– Linux のコマンドを叩けること

### 目次

1. 静的アプリケーションセキュリティテストの準備
2. Rails のコードをBrake

元記事を表示

RubocopがCircleCI上でのみエラーになる事象について

# 事象
ローカルでは問題なくrubocopを実行できたのですが、
Githubにプッシュ、CircleCI上でrubocopを実行すると以下のようなエラーが起きました。

“`
#!/bin/bash -eo pipefail
mkdir -p /tmp/rubocop-results
bundle exec rubocop . –out /tmp/rubocop-results/check-results.xml –format progress
/home/circleci/electronote/.rubocop.yml: Warning: no department given for AsciiComments.
404 “Not Found” while downloading remote config file http://shopify.github.io/ruby-style-guide/rubocop.yml
/usr/local/lib/ruby/2.7.0/net/http/response.rb:124:in `error!’
“`

# 結論

元記事を表示

【Gem】deviseの導入

# devise
ユーザー管理機能を簡単に実装するためのGem。
ユーザー新規登録やログイン機能を簡単に実装することができる:v:(とても便利)

# deviseの使い方
###Gemfile編集
Gemfileの最後の行に追記する。
(開発環境、テスト環境、本番環境すべてで使用するため!と認識してます:thinking:)

“`:Gemfile
(省略)
gem ‘devise’
“`

###コマンドを実行してGemインストール
“`:ターミナル
bundle install
“`
ローカルサーバーを起動している場合は**サーバーの再起動**を忘れずに!!

####少し脱線
ローカルサーバーを起動した状態でコードを編集しても、ブラウザを更新すれば、その編集内容はブラウザに反映されます。しかし、開発環境で以下の変更をした場合、必ずローカルサーバーを再起動する必要があります。

* Rubyバージョンの変更
* テーブル・カラム情報の変更
* Gemの導入状況の変更 ⬅︎ 今回はこれ:eyes:

これらに関わる情報は、**「ローカルサーバーを起動するタイミングに1度だけ

元記事を表示

[Rails] bundle installがYour bundle is locked to mimemagic (0.3.5)…で落ちる

# Github Actionsで突然bundle installがコケた。。
“`sh

Fetching gem metadata from https://rubygems.org/…………
Your bundle is locked to mimemagic (0.3.5), but that version could not be found
in any of the sources listed in your Gemfile. If you haven’t changed sources,
that means the author of mimemagic (0.3.5) has removed it. You’ll need to update
your bundle to a version other than mimemagic (0.3.5) that hasn’t been removed
in order to install.
“`

# mimemagicの0.3.5が削除されたらしい
[rubygemsのサイト](https:

元記事を表示

いつも邪魔してくるturbolinksとはなんぞや

こんばんは、たにーです。

最近チーム開発と色々やることが多くなかなか書けずに、、、
とりあえず今日時点まで学んだことを振り返りながら記事にしていきます。

今日は、タイトルの通り、
####「turbolinks」とはなんぞや
です。

Rubyのフレームワークである**Ruby on Rails**を使ったことがある人なら
恐らく、**こやつ(turbolinks)**のせいで、上手く動かない、反応しないなどの経験があると思います。
私自身も経験があり、turbolinksに邪魔されてきた初学者です。泣

だだ、私自身こやつのことを何にもわかっていません。
なので、今回は、tubolinksの正体?機能?必要?不必要?について
書いてきますのでよろしくお願いします。

#そもそものturbolinksって?

**Asset Pipeline を活用しているアプリケーションにおいて画面遷移を高速化するライブラリです。**

、、、僕はいまいちピンと来ず理解できません。

なので、分解します。

##Asset Pipelineとは

**複数のディレクトリやファイルに分かれたass

元記事を表示

rails g scaffold で楽々下準備

安易はcrud処理も自動で作ってくれる優れもの^^
だと思っております 笑

## scaffoldとは
他の`rails g`コマンドは不要で、
Webアプリケーションに必要な`crud処理`も一度に自動で組み立ててくれるのがscaffold。

# scaffoldの使い方

`$ rails g scaffold hoge title:string content:text`
このコマンドだけでhogesコントローラーやhogeモデルができる。
$ rake db:create
$ rake db:migrate
$ rails s

以上で
`index show new edit create update destroy`
7つのアクションの準備ができます。

元記事を表示

Rails 長い文字列を省略する方法

文字数が多くなると
当然横に大きく膨れてきます。
そこで制御するメソッドを書き記しておきます。

## truncateとは
文字数を切り捨て表示する

##参考資料
https://railsdoc.com/page/truncate

“`java:app/viwes/hoge/index.html.erb
<%= "1234567890".truncate(5) %>
表示
12345…
“`

`truncate`を使用することで文字数が制御できます!

元記事を表示

[未経験からエンジニア転職成功]ポートフォリオ

#はじめに

今回は、2021年3月に転職活動が終了した際の僕のポートフォリオについて下記の方に向けて解説します。

“`ruby
・転職活動中の方
・プログラミング学習中の方
“`

そこで、まずは僕自身のことをお話させていただくと、2021年1月下旬にテックキャンプを卒業し、3月下旬(ここ最近)に自社開発+受託開発+SESをしている企業様に内定をいただきました。

また、それ以外にも`12社からスカウトされ、そのうちの4社が自社開発系の企業様で1社は東証一部上場の企業様からのスカウト`でした。

#使用技術

– HTML/CSS
– Bootstrap
– JavaScript/jQuery/Ajax
– Ruby 2.6.5
– Rails 6.0.0
– MySQL 5.6.50
– Nginx(Web Server)
– Unicorn(Application Server)
– Docker 20.10.0
– docker-compose 1.27.4
– CircleCI(CI/CD)
– Capistrano
– AWS EC2 (Amazon Linux2)/

元記事を表示

(Rails)画像投稿機能[refile refile-mini_magick]

#前提

– `ImageMagick`インストールしておいてください

“`ruby:Gemfile
gem “refile”, require: “refile/rails”, github: ‘manfe/refile’
gem “refile-mini_magick”
“`
Gemfileに記述後
`$ bundle install`します。

“`ruby:

画像投稿フォーム

<%= form_with model: @post, local:true do |f| %>

画像

<%= f.attachment_field :image %>
<%= f.submit '投稿' %>
<% end %>
“`
`f.attachment_field`使うことで投稿できるようになります。
#modelを追加
“`ruby:post.rb
attachment :image
“`
`_id`を抜いた部分を記述します。

#画像表示
“`ruby:posts/show.html.erb
<%= attachmen

元記事を表示

Railsポートフォリオ作成 #12 AWSデプロイ

こんにちは:smiley:

今回はAWSデプロイを行いました。
[(前回記事 #11 メッセージ日本語化、ActionCableでチャットの非同期化)](https://qiita.com/yanoo/items/4863bc42cba49d7c5314)

私は、前職(ホテルの料飲部)における、コミュニケーションの課題を解決するアプリを作っています。

## 参考教材

+ Qiita記事:[【画像付きで丁寧に解説】AWS(EC2)にRailsアプリをイチから上げる方法](https://qiita.com/Yuki_Nagaoka/items/975b7598806d6ae0c0b2
)
今までに何回も挫折したため、いろいろな記事にお世話になりましたが、こちらを忠実に守ればデプロイできる、はずです。笑(ドメイン取得編の前まで)

+ Udemy: [AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得](https://www.udemy.com/course/aws-and-infra/)
こちらでAWSに関する基礎

元記事を表示

Rubyにおける繰り返し処理

## はじめに
この記事は、Rubyにおける繰り返し処理について調べたものの忘備録です。初心者の書いたものですのでミスがあるかもしれませんが、その場合指摘していただけると助かります。
## 結論
Rubyに用意されている繰り返しに使われる制御構造とメソッドについて代表的なものをまず紹介します。

#### 制御構造
* while
* until
* for

####メソッド

* each
* times
* upto
* downto
* loop

以下にその紹介と使い方を記します。

### while

“`ruby
while “条件式” do #doは省略可能
“処理”
end
“`

と記述し、条件式が真の値を取り続ける限りにおいて、処理を実行し続けます。
例えば、

“`ruby
num = 1
while num <= 3 do puts "Hello World!" num += 1 end ``` と記述すれば、numが3以下の間、Hello Worldと言う文字が表示されます。今回の処理には、numの値が1増えるよう記述しました。と言うこ

元記事を表示

LibreOffice Drawのodgファイルから図形の情報を抜き出して使う

これは [LibreOffice Advent Calendar 2019](https://adventar.org/calendars/4230) の 3日目の記事です!

※ 2019-12-03 に書いた記事をブログから引っ越してきました

# TL;DR

– プログラムに入力として与えるデータの編集をどうするか問題
– 位置情報などはテキストで管理すると直感的に修正できなくて辛い
– LibreOffice Draw で編集して odg ファイルから情報を抜き出して使う方法を試してみたらいい感じだった

# 動機

– プログラムに入力として与えるデータを用意したい
– ゲームのマップ、オブジェクトの配置など
– アルゴリズムや分析処理、作図ツールの検証に使うデータ
– etc.
– ちょっとしたも

元記事を表示

【Ruby】「プロを目指す人のためのRuby入門」アウトプット (クラスの継承)

# はじめに

「プロを目指す人のためのRuby入門」の7.6、クラスの継承について、丁寧に学習したいと思ったので、自分の学習メモとしてアウトプットしていきたいと思います。

## クラスの継承に関する用語

### スーパークラス
継承する方(継承元)

### サブクラス
継承される方(継承先)

継承は「スーパークラスの機能を全部引き継ぐための仕組み」という考えは適切ではない。
機能ではなく性質や概念が共通しているかで判断する。
「サブクラス is a スーパークラス」が成り立つかどうかで判断すると良い◎

## Ruby標準ライブラリの継承関係

Rubyの継承は単一継承

継承できるスーパークラスは1つだけ。(ただし、Rubyのミックスインという機能は多重継承に似た機能をもつ)

### 標準ライブラリの継承関係

Rubyの標準ライブラリの代表的なクラスは次の図のような関係になっている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/953011/f9495ca7-775d

元記事を表示

JSONって、結局なんなの?

#今回書く事
JSONっていう言葉を聞いて、ちんぷんかんぷんだったので、今回基礎を学習し直してみました。

13日の金曜日に出てくる**アイツ**じゃないですよ。

#JSONとは
>JavaScript Object Notation

の略です。
「あれ、JavaScriptって言葉が入っているな」と思った方、よく見つけてくれました。しかし、実はJavaScriptの一種というわけではなく、[Wikipedia](https://ja.wikipedia.org/wiki/JavaScript_Object_Notation)によると、

>データ記述言語の1つである。軽量なテキストベースのデータ交換用フォーマットでありプログラミング言語を問わず利用できる[1]。名称と構文はJavaScriptにおけるオブジェクトの表記法に由来する。

と書かれており、言い換えるとJavaScriptのような書き方をするからその名前付けちゃった。みたいな感じみたいです。

さて、JSONの意味をwikiの説明で理解できた人は、ここで読むのをやめていただいて結構です。
まだよくわからないよという方々

元記事を表示

OTHERカテゴリの最新記事