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

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

最近思うrspecをシンプルにする書き方(オレ流)

# rspec書き方指南ではない

最近自分でやってみて、テストが意外に楽に書けるのではないかと思うやり方をまとめてみた。
ベストだとか唯一の書き方だとかそういう事を言いたいわけではない。各自自分の好きなやり方で書けばいいと思う。最終的には自分の書いたクラスがちゃんとテスト出来ていれば目的は達成している。

個人的な主観としてテストは出来るだけシンプルにしたい。そうじゃないと個人的にテストを書くのが嫌になるし、テストが間違ってて、そもそも何をテストしてるのか?という事になりたくない。
と言うことを解決できるのではないかという投稿。

### 要点

– クラス内のメソッド(処理)は出来るだけシンプルにしたい
– 一度しか呼ばれないようなロジックでもメソッドに落とし込みたい
– メソッドが増える分、内部のメソッドと外部向けのメソッドをちゃんと意識する
– itに説明は要らない
– テスト中に使用する変数内容は実際の条件を意識しない
– `subject`と`allow`をよく使う
– `expect(…).to have_received(…)`をよく使う
– `expect{.

元記事を表示

【Ruby on Rails】rails-latexを利用してPDFを作成

# はじめに
Ruby on Railsで個人開発をした際に、gem [rails-latex](https://github.com/amagical-net/rails-latex)を使って、ユーザーが入力したTeXコードをコンパイルしてPDFを作成する機能を実装しました。
関連する記事があまりなかったので、どのようにしたのかを残そうと思います。

# 設定
PDF作成には `LatexToPdf.generate_pdf(code, config)`メソッド([rubydoc](https://www.rubydoc.info/gems/rails-latex/2.3.0/LatexToPdf.generate_pdf))を利用するので、gemをインストール後、その設定を行います。初期設定は以下の通りです。
(注)「・・・」の部分は、`Users/・・・/(appのルートディレクトリ)`が入ります。

“`
LatexToPdf.config
=>
{:recipe=>[],
:command=>”pdflatex”,
:arguments=>[“-ha

元記事を表示

私の新人研修はこんな感じでした。

プログラミング未経験の新卒2人が、開発期間4週間で
「社員間で本を貸し借りできるアプリ」を作成しました!
image.png
このアプリは、社内の課題を解決するアプリを作成するという新人研修の成果なのですが、この開発の道中には多くの学びがありました。

ここでは、この新人研修がどのように進んだのか、そして各段階で私が何を考えていたのかを書いていこうと思います。

# 目次
[1.研修の概要](##1-研修の概要)
[2.研修前の準備](##2-研修前の準備)
[3.テーマ決め](##3-テーマ決め)
[3.UI・UX設計](##3-UI・UX設計)
[4.計画立て](##4-計画立て)
[5.実装](##5-実装)
[6.リファクタリング](##6-リファクタリング)
[7.おわりに](##5-おわりに)

##

元記事を表示

Rails及びDocker環境でのpry-railsのデバッグ方法

## なぜ記事を書こうと思ったか
Rails及びDocker環境でpry-railsでのデバッグをおこなったので、そのやり方を記載致します。
これまで、行っていたデバッグよりもより細かくコードを確認でき、すごく便利に感じたので、多くの方が使ってくれると嬉しいです。

## Rails及びDocker環境でpry-railsでのデバッグ手順
**※Dockerは構築して、起動してある事を前提として記載致します。**
### デバッグ手順
1.Railsのコードで動作を止めて、確認したいコードの直後に`binding.pry`を追加します。
今回は例として、createメソッドのコードに付け足したいと思います。
“`
def create
permit_parameters = params.permit(:name, :age, :sex).to_h
binding.pry

user = User.create!(
name: permit_parameters[:name].to_i,
age: permit_para

元記事を表示

【Ruby on Rails】検索結果のレコードを並び替える

# はじめに
レコードの検索・並び替え、それぞれを単独に行うのであれば容易にできますが、**検索結果のレコードを並び替える**となると、検索結果をどのように次のリクエストに引き継ぐのかが問題になります。個人開発で検索・並び替え機能を実装した際にこの点に悩んだので、誰かのお役に立てればというのと、自分の実装に問題があればご指摘いただけると嬉しいなということで、自分がどのように解決したかを残したいと思います:bow_tone1:

# 前提
## どのように問題を解決するのか
HTTPはステートレスなプロトコルなため、複数のリクエスト間で状態を保持するためには何らかの方策が必要です。代表的なものにセッションとDBの利用がありますが、
– セッションを利用すると、ユーザーがアプリケーションから離脱した時なども検索条件が残り、次回検索・並び替えのときに条件が引き継がれるなど、個人的に気持ち悪い。
– 検索条件のような一時的なものをDBに保存するのは違和感がある。

じゃあどうするか。

小森裕介(2010)『プロになるためのWeb技術入門』講談社の 「3.4 Webサーバーへの要求をどのように

元記事を表示

Railsを久しぶりに触ったので整理してみた

## 概要
開発時に使用するメモを整理しました。

## Rail APIモードでの始め方
1. `bundle init`
2. `gemfileを修正`
3. `bundle install`
4. `rails new . -d postgresql`
5. `gibo dump Rails macOS >> .gitignore`
6. `rails db:create`

5番のgiboは.gitignoreを簡単に充実してくれるパッケージ。
`vendor/bundle`や`.DS_store`などをよしなに設定してくれる
`brew`経由でinstallした気がする 興味があれば調べてみてください

## Model
DB関係の処理を担う

## 新しいモデル・テーブルを作成
“`rb
# 引数を与えてmigrationの中身を埋める
rails g model User[任意のモデル名] name:string age:integer

# Modelを作成
rails g model user(任意のモデル名)

# 間違えたら下記で削除
rails d mod

元記事を表示

【Ruby on Rails】deviseの導入から実装するまで

## 目標
deviseを導入し実行できるまで

## 開発環境
ruby ‘3.1.2’
rails ‘7.0.3’

## 実装
devise導入から、実装までの一連の流れ

### deviseをインストール
“`Gemfile.
gem ‘devise’
“`
“`ターミナル.
% bundle install
“`

% rails g devise:install
rails g deviseコマンドは、deviseによるユーザー機能の対象を指定することで、モデルとマイグレーションの生成やルーティングの設定などをまとめて処理します。

実行すると、モデルが生成され、routes.rbにはdeviseに関連するパスが追加されます。

### Userモデルを作成
“`ターミナル.
% rails g devise user
“`
### マイグレーションファイルを編集
“`
class DeviseCreateUsers < ActiveRecord::Migration[6.0] def change create_table :users do |

元記事を表示

コントローラ#アクションとHTTPメソッド・ルーティングヘルパーの対応表

コントローラ#アクションとHTTPメソッド・ルーティングヘルパーの対応表です。
コントローラスペックをリクエストスペックで置き換える際に使ってください。

| コントローラ#アクション | HTTPメソッド ルーティングヘルパー |
| :———————: | :——————————-: |
| articles#index | get articles_path |
| articles#new | get new_article_path |
| articles#create | post articles_path |
| articles#show | get article_path(:id) |
| articles#edit | get edit_article_path(:id)

元記事を表示

【Rails】いいね機能index追加(resourceからresoucesへの変更)

# はじめに
先日、いいね機能を実装した。↓

https://qiita.com/vaza__ta/items/c0bc7f590793ab5a4769

showテンプレートにいいねしたユーザー一覧を表示するようにしていたが、indexテンプレートを実装するよう変更する。

その際にroutes.rbでresource=>resourcesに変更した。
これにより、ルーティングの変更が発生するため、その修正すべき部分を解説していく。

# 前提
下記のテーブルは作成済み。
users(ユーザー)
posts(投稿)
favorites(いいね)
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |

# ルーティングを修正する
indexを追加するために、resouceをresourcesに変

元記事を表示

【ドメイン駆動設計】なぜ値オブジェクトそのものを比較できるようにしなければならないのか?

値オブジェクトは以下の3つの要素を持ったオブジェクトだとされている。

1)不変である(一度インスタンスが作られたら、それが保有する属性の値は変化してはいけない)
2)交換が可能である(再代入=交換によってのみ値を変更することができる)
**3)等価性によって比較される**

このうち、3)は絶対に必要なんだろうか?

例えば、Date型にかなり近い、YearMonth(年と月をもったオブジェクト)を定義してみよう。

“`ruby
class YearMonth
attr_reader :date

def initialize(year, month)
@date = Date.new(year, month, 1)
end

end
“`

一応値オブジェクトとして定義しているものの、「日付が1日のDate型オブジェクト」」としても外部から認識できる。なら、YearMonthそのものを比較できなくても、保有しているDate型(プリミティブ型)同士を比較すればいいんじゃないか?という疑問が生まれる。

実際にやってみよう。

“`ruby

year_mo

元記事を表示

【日付計算】Rubyで◯時間前、◯日前、◯ヶ月前、◯年前と計算するメソッド

業務で更新日(updated_at)と今日の差分を計算して○日前と返すapiを作成することがあったのですが、この仕様とマッチする記事がなかったのでQiitaに残しておきます!

以下の記事を参考にさせていただきました。
基本的なロジックやコードの解説はこちらの記事を参考にしてください。

[満経過月数を計算するロジック(Ruby)](https://qiita.com/tomoya_sakusaku/items/71801ad618394ca3cbc7 “満経過月数を計算するロジック(Ruby)”)

## 今回の仕様

**最終更新日から今日の差分を計算して○日前と返す**

『0~24時間前』 『1~30日前』 『1ヶ月~12ヶ月』 『1年~』の単位で区切る

例) Today:2022/07/30/10:00
Last_updated:2021/07/30/19:00
⇨『一年前』を返す

例)Today:2022/07/30/10:00
Last_updated:2022/06/30/19:00
⇨『一ヶ月前』を返す

例)Today:2022/07/30/19:00
Las

元記事を表示

“The Ruby openssl extension was not compiled.”というエラーが出てRuby 3.0.4がインストールできない場合の対処法

## 発生した問題
Ruby 3.0.4をインストールしようとしたら以下のようなエラーが出ました。

“`
$ rbenv install 3.0.4
/opt/homebrew/bin/ruby-build: line 193: needs_openssl_101_111: command not found
Downloading ruby-3.0.4.tar.gz…
-> https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.4.tar.gz
Installing ruby-3.0.4…
ruby-build: using readline from homebrew

BUILD FAILED (macOS 12.4 using ruby-build 20220324)

Inspect or clean up the working tree at /var/folders/r1/fsj20_kx4tj5b9why4z15nmw0000gn/T/ruby-build.20220730162159.15161.Qb26BR

元記事を表示

Rails7でHelloWorld

## 前提
– Rails(前回の記事で手順を記載しています)

https://qiita.com/chiepon115/items/bc7bdab6105aa5836465

– DBに登録されたデータをControllerで取得し、Viewで表示するシンプルな内容になっています

## Controllerを作成

– `rails g controller users index`でUsersControllerを作成
– ApplicationControllerを継承しています

– `Hello, World`をブラウザに表示させます
– renderの行を追記します
“`ruby:app/controller/users_controller.rb
class UsersController <

元記事を表示

Cloud9でRails7の環境構築を行う

## 前提
– 学習用途のRailsプロジェクトを想定しています
– Rubyの環境構築を行なっていること(前回の記事で手順を記載しています)

https://qiita.com/chiepon115/items/eeea61818e0e8701f747

– Version
– Ruby 3.0.2
– Rails 7.0.0

## Railsプロジェクトの作成
### Railsのインストール
– `gem install rails -v 7.0.0 -N`でRails7.0.0をインストール

### Railsプロジェクトの作成
– `mkdir rails_projects`でRailsプロジェクト用フォルダを作成
– `rails _7.0.0_ new hello`でRailsプロジェクト作成
– Railsのバージョン7.0.0を指定してインストール
– `hello`という名前のプロジェクトで作成
GitHub を登録

まずはユーザー名(GitHubに登録したもの)を登録
“`
$ git config –global usr.name “ユーザー名”
“`

メールアドレス(GitHubに登録したもの)を登録
“`
$ git config –global user.email “メールアドレス”
“`

mergeの際にファストフォワードが起きないようにする設定
“`
$ git config –global merge.ff false
“`

pullの際に毎回リベースする設定
“`
$ git config –global pull.rebase merges
“`

設定ができているかを確認
“`
$ git config –list
“`


“`
credential.helper=osxkeychain
user.name=”name”
user.email=email
core.editor=code –wait
alias.ci=commit
alias.st=status
alias.br=branch
alias.co=checkout

元記事を表示

Active Storageのしくみ

Ruby on Railsにて、Active Storageのインストール後に生成されるマイグレーションファイルの中身が気になったので、その仕組みを読み解いてみる。

### 〜Active Storage の導入コマンド〜
`$ rails active_storage:install`

`$ rails db:migrate`で、Active Storageが使えるようになる。

## マイグレーションファイルに定義される3つのテーブル
1. active_storage_blobsテーブル
1. active_storage_attachementsテーブル
1. active_storage_variant_recordsテーブル

### active_storage_blobsテーブル
– ActiveStorage::Blobモデルのテーブル
– 添付されたファイルに対応
– 識別key(`:key`)、ファイル名(`:filename`)、Content-Type(`:content_type`)、ファイルのメタデータ(`:metadata`)、サイズ(`:by

元記事を表示

【Ruby】入力された住所からエリアを抜き出す方法【正規表現】

# 目的
[チェリー本](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976)と下記記事で正規表現を勉強しました。

[初心者歓迎!手と目で覚える正規表現入門・その1「さまざまな形式の電話番号を検索しよう」 – Qii

元記事を表示

【Ruby】GemをGitHub Packagesに公開する

## 前提条件
* RubyGems v2.4.1 以降である
“`:ターミナル
$ gem –version
“`

* bundler v1.6.4 以降である
“`:ターミナル
$ bundle –version
“`

## パーソナルアクセストークンの設定
GitHub Packagesに公開などをするには認証が必要です。
以下の手順でパーソナルアクセストークンの設定をします。

GitHubのSettingsページを開きます。
![image220730_080233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342443/14c246e6-70d9-7fd7-3d05-0155e24eeb20.png)

左サイドバー一番下の「Developer settings」を選択します。
![image220730_080909.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2

元記事を表示

UAからGA4への移行(Config実装編) ~GA4の知識はClassにして自己文書化しよう~

## 駆け出しエンジニアがGA4を導入
始めまして、エンジニア歴1年が経過した駆け出しエンジニアです:runner:
今回、GoogleAnalyticsでUAからGA4の移行業務を担当しました。
ソースコードに直埋めする方法を簡単ですがGA4導入という形で記事にしたいと思います。
開発はRailsで行っているので一部の例はRubyで記載しています。
タグマネージャーやGA4画面等の説明は含みませんが、これからGA4を導入する方の参考になればいいなと思います。:writing_hand:

## GA4は新しいGoogleAnalytics
https://support.google.com/analytics/answer/10089681

これまでGoogleAnalyticsではUA(ユニバーサルアナリティクス)というプロパティでデータの収集を行っていました。
新しいGA4というプロパティが発表されていますが、

「GA4って何が違うの:interrobang:」
「イベントベースに変わって同じように測定できるの:question:」

などなど、様々な理由からGA4の導入を

元記事を表示

`require’: cannot load such file — openssl (LoadError) というエラーが出てRuby 2.7.6がインストールできない場合の対処法

## 発生した問題
Ruby 2.7.6をインストールしようとしたら以下のようなエラーが出ました。

“`
$ rbenv install 2.7.6
/opt/homebrew/bin/ruby-build: line 193: needs_openssl_101_111: command not found
Downloading ruby-2.7.6.tar.bz2…
-> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.6.tar.bz2
Installing ruby-2.7.6…
ruby-build: using readline from homebrew

BUILD FAILED (macOS 12.4 using ruby-build 20220324)

Inspect or clean up the working tree at /var/folders/r1/fsj20_kx4tj5b9why4z15nmw0000gn/T/ruby-build.20220729175045.94263.4iI0

元記事を表示

OTHERカテゴリの最新記事