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

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

Rails 7.0.1 のプロジェクトで RSpec 実行環境をセットアップ

Ruby 3.0 x Rails 7 のプロジェクトで RSpec の実行環境を作る方法をメモ的に記します。
具体的には **RSpec と FactoryBot** gem をインストールして設定していきます。

“`
# 環境情報
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [arm64-darwin21]

$ rails -v
Rails 7.0.1
“`

結論からいうと Rails 7 独自の設定は特に必要ありません。

# プロジェクトを作成
Rails 7 では `rails new` のオプションでフロントエンド関連の色々を指定できますが、特に指定してません。

“`
$ rails new rails7_rspec
“`

# RSpec 環境用の gem をインストール
rails new した時に rails7_rspec ディレクトリに生成された Gemfile に追記します。

“`
group :development, :test do
gem “debug”, pla

元記事を表示

【Rails】paramsについて

##paramsとは?
→データの入れ物

##どんなデータが入ってるのか?
基本的には以下の2種類の方法で収集されたデータが入ってる。
・投稿フォームなどからPOSTで送信されたデータ
・getのクエリパラメータ

>【クエリパラメータとは?】
例えば、基本のURLが「https:// ○△×□.jp/」だとして、基本のURLにクエリ文字列(URLパラメーター)を加えると「https:// ○△×□.jp/?●=▲×■&○=△×□」となります。
「?●=▲×■&○=△×□」の部分が、クエリパラメーター(URLパラメーター)です。
引用:https://online.dhw.co.jp/kuritama/query-string/

元記事を表示

[Ruby] Stringクラスのindexメソッド

学習したことのアウトプットとして

# indexメソッド
Rubyの組み込みライブラリ
**index(pattern, pos = 0) -> Integer | nil**
文字列のインデックス pos から右に向かって pattern を検索し、最初に見つかった部分文字列の左端のインデックスを返す。
見つからなければ nil を返す。

– 引数 **pattern** は探索する文字列または正規表現で指定
– 引数 **pos** が負の場合、文字列の末尾から数えた位置から探索する、0の場合省略可

例)

“`ruby
“astrochemistry”.index(“str”) # => 1
“regexpindex”.index(/e.*x/, 2) # => 3
“character”.index(?c) # => 0

“foobarfoobar”.index(“bar”, 6) # => 9
“foobarfoobar”.index(“bar”, -6) # =>

元記事を表示

[Ruby] Integerクラスのeven?メソッド

学習したことのアウトプット

# even?メソッド
Rubyの組み込みライブラリ
自身が偶数であれば真を返し、そうでない場合は偽を返す。

例)

“`ruby
10.even? # => true
5.even? # => false
“`

※補足等ある場合はコメントしていただけると幸いです。

元記事を表示

新規Railsアプリを作成するには

まずはターミナル上で、下記を実行する。

#新規アプリ名(例:tweet)を入力、 -dオプションでMySQLを使用することを明示
% rails new tweet -d mysql

元記事を表示

クラスとインスタンスの違いを簡潔にまとめる

# はじめに
どんどんアップデートしていく記事にしていこうと思っています。

# 結論
“`
クラス全体で共通した振る舞いを示す
クラスから生成されたインスタンスの振る舞いを示す
属性と属性値の関係
属性はみんなが共通で持っている項目で属性値は個別で異なる

元記事を表示

【Ruby】標準入力の値取得

# :large_orange_diamond: はじめに

こちらの記事は、Rubyをある程度学び、下記を考えている方向けの記事となります。

– 転職を見据えてPaizaのスキルチェックでランクを上げたいと考えている方
– 競技プログラミングに興味のある方

**標準入力** 【 standard input(stdin)】 とは

[IT用語辞典e-Words](https://e-words.jp/w/%E6%A8%99%E6%BA%96%E5%85%A5%E5%8A%9B.html)によりますと、
>標準入力とは、コンピュータ上で実行されているプログラムが、特に何も指定されていない場合に標準的に利用するデータ入力元。コンピュータの入力装置やOSが提供するデータ入力機能・経路などを指し、多くのシステムではキーボード装置による利用者の文字入力が標準入力に設定されている。

初心者の方には下記の[PaizaFAQ](https://paizasupport.zendesk.com/hc/ja/articl

元記事を表示

処理に名前をつけて使おう① introduceメソッド

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容1##
introduceメソッドを作成してください。

**メソッドの処理**
私の名前はRubyです。とターミナルに出力する。

##解答1##

“`csharp
def introduce
puts “私の名前はRubyです。”
end
“`

##解説1##
メソッドを作成する場合には、以下のようにプログラムを書きます。

“`csharp
def メソッド名
# メソッドの処理
end
“`
今回はメソッド名をintroduceにするため、メソッドの定義は以下のようになります。

“`csharp
def introduce
# メソッドの処理
end
“`
メソッドの処理はdef メソッド名とendの中に記述します。今回はターミナルに文字を出力するのでputsメソッドを使います。

“`csharp
def introduce
puts “私の名前はRubyです。”
end
“`

なお、問題の条件はメソッドを作成するのみなので

元記事を表示

【Rails】ファイル投稿ボタンをカスタマイズ(備忘録)

ファイルを投稿するボタンをカスタマイズする方法を残しておきます。

元の記述

“`Ruby:new.html.erb
#省略

<%= f.label :画像 %>
<%= f.file_field :image %>

#省略
“`

変更後

“`Ruby:new.html.erb
#省略

#省略
“`

“`Ruby:SCSS
.label-box__inner{
padding: 10px 20px 10px 20px;
.input-default{
display: none;

元記事を表示

rails 6のアプリをgit clone後に遭遇したエラー

# rails6 git clone後の手順

### やりたいこと・背景
+ 実装途中のrails6のアプリをgit cloneしたい
+ 間違えて、ローカルのリポジトリを消してしまった際に~~そんなこと滅多にない~~githubにpushしていればなんとかなる
+ 昔作っていたrails6のアプリ実装を再開したい
+ などなど

## ざっくり手順

### 1. `Github`でgit cloneしたいリポジトリをコピー

“`terminal.
$ git clone クローンしたいリポジトリのurl
“`

### 2. `rm -rf Gemfile.lock`でgemのバージョン依存関係をなくす
> git cloneしてきたrailsのアプリは、gemのバージョンの依存関係が固定されてしまっているため。
そのまま、bundle installするとエラーが出る。

:::note info
cd アプリ名
で、railsアプリのディレクトリに移動した後
:::

“`terminal.
$ rm -rf Gemfile.lock
“`

私は、bu

元記事を表示

bcryptとbcrypt-rubyについて調べてみた

先日『暗号技術入門』を読みました。この過程で、アプリケーション開発で使用機会の多いbcryptについて気になり、調べてみました。
本記事では、bcryptを仕事で使う際に知っておいたほうが良さそうなことをまとめます。

## 環境

bcryptの挙動を説明するためにbcrypt-rubyを利用しています。
記事執筆時点で最新のv3.1.16を対象としています。

## bcryptとは

bcryptは**一方向ハッシュ関数**のアルゴリズムの1つであり、(パスワードなどの)データからハッシュ値を算出します。
bcryptの特徴として、ハッシュ値から元のデータを逆算されづらくするために、**ソルト**と**コスト**があります。
一方向ハッシュ関数とソルト、コストについては後述します。

ちなみに、「パスワードをハッシュ化する」という表現をよく見かけますが、これは「ハッシュ関数を用いてパスワードからハッシュ値を得る」と同義です。また、ハッシュ値は「ダイジェスト」と表現することもあります。[Rails Tutorial]([https://railstutorial.jp/](http

元記事を表示

【Rails】ポートフォリオ制作「バイク専用SNS」KoKo-iiYo

#【Rails】ポートフォリオ制作「バイク専用SNS」KoKo-iiYo

##はじめに

DMM WEB CAMP通学中、3ヶ月目に制作したポートフォリオについて、サイト概要・実装機能などまとめます。

元記事を表示

Railsのモデル同士の関連付けについて

## 概要
Ruby on Railsにおけるモデル同士の関連付けについてアウトプットしたいと思います。

## 環境
ruby: ‘3.0.1’
rails: ‘6.1.4’

## 前提
関連付けの説明にあたって下記モデルを前提とします。

| モデル | User |
|:-:|:-:|
| id | 1 |
|name|’example_name’|

|モデル|Post|
|:-:|:-:|
|id|1|
|content|’example_content’|
|user_id|1|

|モデル|Account|
|:-:|:-:|
|id|1|
|account_number|1234|
|user_id|1|

## 関連付けとは
関連付けとは異なるモデル同士をつなげてコードを簡素化するために行うものです。
関連付けを行っていない場合と行っている場合のコードの違いを見てみましょう。
userの投稿一覧を取得するというコードを比較します。

– 関連付けを行っていない場合

“`ruby
user = User.find(1)
posts = Post.find_by(

元記事を表示

Carrierwaveで公開されているファイルURLからデータを保存する

## やりたいこと
既に公開されている画像のURLからCarrierwaveを介してファイルを保存する。
※ 試したのは画像だけですが他のファイルでもできそう

## 結論

“`rb
# CarrierWave の Uploader
class AvatarUploader < CarrierWave::Uploader::Base storage :file end # ActiveRecord class User < ApplicationRecord mount_uploader :avatar, AvatarUploader end User.create!(remote_avatar_url: "https://example.com/***.png") ``` `remote_**_url` に値を指定することによって解決しました。 よくよくみるとgithubのreadmeにもformの例として `remote_**_url` に値をセットする方法が紹介されてました。 https://github.com/carrierwaveuploader/c

元記事を表示

rails new 時に “ActiveSupport::EncryptedFile::InvalidKeyLengthError” エラーが出た時の対応

タイミングは rails new に限りませんが、rails でコマンドを叩いた時に以下のように**ActiveSupport::EncryptedFile::InvalidKeyLengthError** が出ることがあったので対処方法を書きます。

“`
$ rails new xxxxx
/Users/yyyyyy/.rbenv/versions/3.0.3/lib/ruby/gems/3.0.0/gems/activesupport-7.0.1/lib/active_support/encrypted_file.rb:114:in `check_key_length’: Encryption key must be exactly 32 characters. (ActiveSupport::EncryptedFile::InvalidKeyLengthError)
“`

“`
# 環境情報
$ ruby -v
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [arm64-darwin21]
$ rails -v
Rail

元記事を表示

Ruby 2.5.0コンテナでRails6の開発環境を作るときのトラブルシューティング

こちらのハンズオンをやっていたところ、いくつかの問題に遭遇したので備忘録。

[Rails アプリケーションをコンテナで開発しよう ! 第 1 回 – まずは Rails アプリケーション作りから](https://aws.amazon.com/jp/builders-flash/202009/container-rails-app/?awsf.filter-name=*all)

## Rails7のインストールに失敗する

記事では Ruby2.5 & Rails6 を使用しているが、現時点(2022/1)での最新版は `7.0.1`。
エラーメッセージにもあるように`7.0.1` ではRuby2.7以上が必要であるため `gem install rails`に失敗する。

“`bash
root@810c33297af8:/work# gem install rails
Fetching: concurrent-ruby-1.1.9.gem (100%)
Successfully installed concurrent-ruby-1.1.9
Fetching: i18n-

元記事を表示

【Rails 6】Formオブジェクトでシンプルな検索機能を作ってみる

## 概要

記事タイトル通り、Form オブジェクトを使用したシンプルな検索機能を Rails6 で作ってみます。

Form オブジェクトの概念については、以下の記事の表現が非常にわかりやすかったので参考にされてください。

> Formオブジェクトはフォームの責務をカプセル化し、コントローラやビューを疎結合に保つために必要なデザインパターンです。

> ユーザの入力の整形や永続化をコントローラだけで行うと、コントローラが肥大化してしまいます。 この原因はコントローラがモデル層の知識をもちすぎるためにあります。 このときビューもフォームを表示するための知識をもつことになるため、コントローラと同じような問題が起こってしまいます。 このことは単一責任の原則に反し、モデル層の変更がコントローラやビューに影響を及ぼすことになります。

> 逆にActiveRecordモデルにこういった責務をもたせると、今度はActiveRecordモデルがフォームの知識を持ちすぎてしまいます。 フォームという独立した責務があるのであれば、これをひとつのクラスにカプセル化する、というのがFormオブジェクト

元記事を表示

掲示板にブックマーク(いいね)機能実装手順

##実装したいこと
・掲示板の☆ボタンを押すと、その掲示板をブックマーク/解除出来る機能。
・ユーザーがブックマークした掲示板を一覧できるページを実装。

##お気に入り機能実装の流れ
①中間テーブルとなるBookmarkモデルの実装
②Userモデルにbookmarkの定義を追加
③Bookmarksコントローラーの実装
④Boardコントローラーにbookmarkの定義を追加
⑤Routingの設定
⑥Viewの実装

##①中間テーブルとなるBookmarkモデルの実装
###Bookmarkモデルの仕組み(多対多)
**UserとBookmarkとBoardの関係**
Bookmarkモデルを実装する前に、モデルの関係を確認する。

・ユーザーはたくさんの掲示板をブックマークすることができる。
・反対に、掲示板はたくさんのユーザーにフォローされることができる。

つまり、UserもBoardもBookmarkをたくさん持っているということになる。このような関係を“多対多の関係“と言う。

[![Image from Gyazo](https://i.gyazo.com/a

元記事を表示

【Ruby】 &. (ぼっち演算子) の使い方

Ruby でたまに見かける **&.** というメソッドについて

# &. ってなに?
一般的に「ぼっち演算子」と呼ばれています。
Ruby 2.3 で追加されたメソッドです。

# どう使うの?
レシーバ + &. + 呼び出したいメソッド という形で使います。

以下の例では “hoge” という文字列をレシーバとし、
呼び出したいメソッドは upcase (小文字を大文字に変換) とします。

“`
irb(main):001:0> “hoge”&.upcase
=> “HOGE”
“`

# どういう時に使えるの?
レシーバが nil の可能性があるような場合、かつレシーバが nil なら nil を返してほしい時に使えます。

普通、レシーバが持っていないメソッドを使おうとすると NoMethodError が発生します。

例えば数字 (Integer) に対して upcase メソッドを使ってみましょう。
upcase メソッドは String 型に対して使うものであるため NoMethodError が発生します。

“`
irb(main):002

元記事を表示

【Ruby】引数をデフォルトで指定するときはキーワード引数を使おう

###キーワード引数

メリット

– 引数の順番を気にしなくていい
– 引数が何を指しているのかわかりやすい

####引数にデフォルト値を与える

“`ruby
def greet(name, message = ‘Hello’)
“#{message}, #{name}さん”
end

#messageを指定しないとデフォルト値がそのまま出力される
greet(‘Kato’)
#=> Hello, Katoさん

#デフォルト値を変更
greet(‘Kato’, ‘Hi’)
#=> Hi, Katoさん

#引数の順番を逆にすると意図してない動きをする
greet(‘Hi’, ‘Kato’)
#=> Kato, Hiさん
“`

####キーワード引数を使う

“`ruby
def greet(name: ‘名無し’, message: ‘Hello’)
puts “#{message}, #{name}さん”
end

#引数指定なし
greet
#=> hello, 名無しさん

#nameのみ指定
greet(name: ‘Kato’)
#=> Hello,

元記事を表示

OTHERカテゴリの最新記事