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

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

Rails7 + TailwindCSS + daisyUIの導入で詰まった時の解決手段

## 概要
`Rails7` + `TailwindCSS` の構成でアプリケーションを作成し、 `daisyUI` を導入したが表示がうまくいかずに詰まった。

## 結論
**npm** で `daisyUI` をインストールして使用する。

## 環境
`Rails7` でアプリケーション作成時に `TailswindCSS` を以下のようにして導入
“`bash
$ rails new MY_APP –css tailwind
“`
 以上のようにアプリ作成を行うと、Gemfileに `gem tailwindcss-rails` が追加され、このgemによって導入される。

## daisyUIの導入
失敗したケースと成功したケース、未検証のケースをそれぞれ記載する。

### 失敗ケース(CDNによる導入)
#### 方法
`application.html.erb`のheader部分に [公式サイト](https://daisyui.com/docs/cdn/)のリンクを追記する。

“`erb:application.html.erb
<%= style

元記事を表示

rails generate コマンドを簡単に組み立てられるサービスをリリースしました【個人開発】

Rails エンジニアのための開発支援ツール [rails-generate.com](https://rails-generate.com/) をリリースしました。フォームを埋めていくだけで簡単に rails generate コマンドを組み立てることができます。

https://rails-generate.com/

## Model

[rails generate model](https://rails-generate.com/) はこんな感じです。カラム名、型、インデックスの有無や種類を入力すると下部に表示されている rails generate コマンドがリアルタイムで組み立てられていきます。

![model.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/39972/92de51bd-5355-cda9-4a87-71cf5714cbfa.gif)

## Controller

[rails generate controller](https://rails-generate.

元記事を表示

ruby.wasm で遊ぶ ~Web Workerを使ってバックグラウンドで動かすまで

Ruby 3.2 から WASI ベースの WebAssembly がサポートされるということで、すでに Preview 版も公開されています。

この記事は、正直 WebAssembly とか WASI とかよく分かっていない[^1]人間がブラウザ上で Ruby を色々動かしてみる記事です。とりあえず動けばいいという感じなので、おそらく無駄な記述も多いかと思います。ご了承ください。

[^1]: そもそも JavaScript だってよく分かっていないし、Ruby だって分かっていると言えるか怪しい。

# 作るもの

テキストボックス等に記述された任意の Ruby スクリプトをブラウザ上で動かして、その実行結果を得られるようなもの。

要するに [RubyOnBrowser](https://rubyonbrowser.ongaeshi.me/) とか [TryRuby](https://try.ruby-lang.org/playground/) とかの二番煎じを作りたいのです。

# とりあえず Ruby スクリプトを動かす

[ruby.wasm の github](http

元記事を表示

paizaに挑戦して気づいた課題

>どうもaono1234と申します。記事がいいなと思ったらtwitterのフォローもお待ちしております‼

おつかれさまです。
今日はpaizaのコーディング課題について挑戦したので、その時の気づきを記事にしました。ちなみに私はpaizaランクCでしたが、本記事の3つの対策をしてBにランクアップできました。

是非参考にして頂ければ嬉しいです?

### はじめに
本記事は以下の読者様が対象です。

* paiza Cランカー
* プログラミング初心者
* コーディングが遅いと感じている人

### 先に結論
この3つをやるだけでCランカーの頃と比べてコーディングが早くなりました。
* 変数名、関数名を直感的に分かりやすいものにする。
* putsやprintfメソッドで途中経過を書いておく
* arrayの組み込みメソッドについて把握する

### 気づいた課題
自分がpaizaのコーディング中に気づいた課題が以下です。
* 組み込みメソッドを調べるの

[Rails] フォローとフォロワーを表示させる方法

# はじめに
この記事は、以下の記事でフォロー機能が出来ている前提で進めています。まだの人は、以下の記事を参考に実装してから、こちらの記事を読んでいただければと思います。
[Railsでフォロー機能を作成する方法【改】](https://qiita.com/shitan1941/items/ab713aa331ce586d1f5f)
それでは実装していきましょう。

# 実装
今回は、フォローとフォロワーを表示させるだけなので、すぐに終わります。
users/show.html.erb に以下のコードを追記して下さい。

“`ruby:users/show.html.erb

#追記箇所

フォロー数:<%= @user.followings.count %>

<% @user.followings.each do |u| %>

フォロワー数:<%= @user.followers.count %>

【Ruby】日時を任意のフォーマットで出力する

# 概要
Rubyで日時を出力する時の忘備録として記載する。
指定方法により時刻を format 文字列に従って文字列に変換した結果を返します。

“`ruby
p t = Time.new(2001,2,3,4,5,6,”+09:00″) # => 2001-02-03 04:05:06 +0900
p t.strftime(“Printed on %m/%d/%Y”) # => “Printed on 02/03/2001”
p t.strftime(“Printed on %m/%-d/%_6Y”) # => “Printed on 02/3/ 2001”
p t.strftime(“at %I:%M%p”) # => “at 04:05AM”
p t.strftime(“at %I:%M%#p”) # => “at 04:05am”
p t.strftime(“%Y%m%d”)                 # => 20010203 Calend

【解決済】Rubyで配列内のハッシュで同じキーの値を合算(inject、merge)

ポートフォリオ作成中に、「同一のキーを合算して、値を求める」必要があり、実装に時間を要したため、備忘録として投稿します。

## 実現したいこと
“`ruby
data = [
{ water: 9, retort_food: 3, mask: 3 },
{ water: 10, retort_food: 4, mask: 4 },
{ water: 11, retort_food: 5, mask: 5 }
]

# 上記のデータで同じキーのものを合算
# data = { water: 30, retort_food: 12, mask: 12 }
“`

## 完成形
“`ruby
merge_data = data.inject do |old_data, new_data|
old_data.merge(new_data) do |_key, old_val, new_val|
old_val + new_val
end
end
“`

## 使用したメソッド

### inject
– 配列等の要素を一つずつ繰り返して、ブロック内で処理す

【Ruby】rbenvで管理しているRubyのバージョンを変更したいとき

# 概要
Rubyのバージョンをrbenvで管理しているが、プロジェクトによってRubyのバージョンが違うため、切り替え方をメモする。

# 実行環境
* MacOS Monterey バージョン12.6

# 手順
* rbenvのバージョンを確認
“`
$ rbenv –version
rbenv 1.1.2
“`

* rbenvでインストール可能なrubyのバージョンを確認
“`
$ rbenv install –list-all
1.8.5-p52
1.8.5-p113
1.8.5-p114
1.8.5-p115
1.8.5-p231
1.8.6
1.8.6-p36
1.8.6-p110
1.8.6-p111
1.8.6-p114
1.8.6-p230
1.8.6-p286
1.8.6-p287
1.8.6-p368
1.8.6-p369



(以下、省略)
“`

* 特定のrubyのバージョンをインストール
“`
$ rbenv install 2.6.5
“`

* rbenvの設定バージョンを確認
“`
$ rbenv versions

rubyでHTTPリクエストを行う

天気予報を表示させてみたいので必要になった。
# 参考のサイトでコードが見つかった。
“`rb
require ‘uri’
require ‘net/http’

uri = URI(‘https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY’)
res = Net::HTTP.get_response(uri)
puts res.body if res.is_a?(Net::HTTPSuccess)
“`
### 出典
https://www.twilio.com/blog/5-ways-make-http-requests-ruby-jp

これはどういう意味を表しているのか調べてみる。

## URI()とは?
URI を扱うためのモジュールです。

https://docs.ruby-lang.org/ja/latest/class/URI.html
### URI(Uniform Resource Identifier)とは?
“`情報やデータといったリソースを識別するための記述方法“`。
人や会社、書籍など、あらゆ

ActionController::Redirecting::UnsafeRedirectErrorへの対処法

# 概要
質問投稿アプリを作っている最中、
投稿に失敗したら質問投稿画面に戻る仕様を実装してる際に、表題のエラーに捕まりました。

↓当該コード
“`microposts_controller.rb
def create
@micropost = current_user.microposts.build(micropost_params)
if @micropost.save
flash[:success] = “Micropost created!”
redirect_to root_url
else
redirect_to ‘microposts/new’
end
end
““

# 結論

原因は下から3行目のredirect_to ‘microposts/new’にありました。

エラーを解消する方法は以下の2つです。

**①リクエストを経由する必要がない場合はredirect_toをrenderに置換する**
 (そもそもrenderとredirect_toの違いって何だっけ?という方は以下へ)
  https://qiita

【Ruby】インストール済みのGemを確認する方法

# 概要
Railsを使用しているとGemについて調べることが多いため色々な調べ方をまとめました。
※諸事情ありまして複数のバージョンが表示されています。

* 基本のgem listです。インストール済みのGemとそのバージョンが表示されます。
“`
$ gem list
“`

* 実行例
“`
*** LOCAL GEMS ***

actioncable (default: 6.0.2.1, 6.0.0, 5.2.6, 5.2.3, 5.2.0, 5.1.7, 5.1.6)
actionmailbox (default: 6.0.2.1, 6.0.0)
actionmailer (default: 6.0.2.1, 6.0.0, 5.2.6, 5.2.3, 5.2.0, 5.1.7, 5.1.6)
actionpack (default: 6.0.2.1, 6.0.0, 5.2.6, 5.2.3, 5.2.0, 5.1.7, 5.1.6)
actiontext (default: 6.0.2.1, 6.0.0)
actionview (default: 6.0.2.1,

1つのフォームから複数のテーブルに保存する方法

# はじめに
1つのフォームから複数のテーブルに保存する方法を記録に残します。
今回は、寄付金額と寄付者の住所を一つのフォームから入力させ、
それぞれdonationテーブルとaddressテーブルの2テーブルに保存したいとします。

## 1. 前提
以下の通り住所と寄付金額を入力するフォームを作成したとします。

<%= form_with url: donations_path, local: true do |f| %>

住所

<%= f.label :postal_code, "郵便番号(ハイフンを含む)" %>
<%= f.text_field :postal_code %>
<%= f.label :prefecture, "都道府県" %>
<%= f.collection_select :prefecture, Prefecture.all,

Rubyのプログラムを実行するには?

Atcoderの問題を解くときに、任意の環境でコードを書く必要があったので、VScodeを開いてわざわざrails cでコンソールを開いて、1行ずつ実行していた苦い思い出があったので、共有しておきます。

rubyがインストールされた環境でターミナルを立ち上げ

rubyに何かプログラムを書いた後に

ruby 〇〇.rbと入力するとそのプログラムが実行されます。

【Rails6 & Docker】yarnのバージョンが古いとエラーが出た場合にしたこと

## Dockerでrails6の環境を構築した。
以下の記述でrails6の環境を立ち上げました
“`
# Dockerfile
FROM ruby:2.6.5

RUN apt-get update && apt-get install -y sqlite3 build-essential libsqlite3-dev
RUN curl https://deb.nodesource.com/setup_18.x | bash
RUN curl https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add –
RUN echo “deb https://dl.yarnpkg.com/debian/ stable main” | tee /etc/apt/sources.list.d/yarn.list

RUN apt update && apt install -y nodejs yarn

RUN mkdir /app_name

ENV APP_ROOT /app_name
WORKDIR $APP_ROOT

ADD ./

[Rails]whereが返すのはSQLの実行結果ではなくActiveRecord::Relationのインスタンス

## この記事について
ActiveRecord::Relationの理解をちゃんとできておらず、debugにハマったことがあったので備忘として残すもの
※網羅的に解説しているというよりは、見落としていた所について調べたことをまとめるものです。

## 参考書籍
– [パーフェクトRuby on Rails](https://gihyo.jp/book/2020/978-4-297-11462-6)
– [ActiveRecord::Relation](https://api.rubyonrails.org/v7.0/classes/ActiveRecord/Relation.html)

## ActiveRecord::Relationとは
RailsのO/RマッパーであるActiveRecordにおいて定義されているクラスの一つです。
表題で「whereが〜」と書いていますが、そもそもwhereはActiveRecord::Relationで定義されているメソッドであり、実行結果としてAcitveRecord::Relationのインスタンスオブジェクトが返ってきます。

今回

クレジット決済サービス(pay.jp)の実装

# はじめに
pay.jpを用いたクレジットサービスの実装手順を記録に残したいと思います。
なお、購入金額を記録に残すMVCの一連の流れは、すでに実装できているものとする。

## 1.クレジット決済サービス実装の流れ
2018年6月から、APIが提供する安全な処理を利用して、クライアントサイド側でカード情報を決済サービス側に送りトークン化し、そのトークン情報をサーバーサイドに送信して決済処理を行うことが義務付けられている。
つまり、アプリケーションのサーバーサイドにおいて、クレジットカード情報を保持しないようにすることが義務付けられた。

– トークンとは
セキュリティーを担保するために用いられる、一度だけ使用可能なパスワードのこと。
今回使用するトークンは、クレジットカード情報を暗号化したもの。
同じカード情報で複数回決済をしたとしても、毎回異なるトークンが発行される。

– クレジット決済の流れ
①クライアントサイド側で、PAY.JPのAPIが提供する安全な処理を用いてクレジットカード情報のトークン化を行う。
②そのトークンをサーバーサイドに送信し、クレジットカード決済が行われる

【Ruby】標準入力から値を受け取る

# 数値
“`terminal:入力値
7
“`
“`rb
i = gets.to_i
p i * 10
“`
“`terminal:結果
70
“`

:::note
文字列の場合、`to_i`メソッドが不要
:::

# 1行に複数の入力
“`terminal:入力値
50 100 200
“`

### 配列で返す場合
“`rb
arr = gets.split.map(&:to_i)
p arr
“`
“`terminal:結果
[50, 100, 200]
“`

### 変数に格納する場合
“`rb
n1, n2, n3 = gets.split.map(&:to_i)
p n1
p n2
p n3
“`
“`terminal:結果
50
100
200
“`

:::note
文字列の場合、`.map(&:to_i)`が不要
:::

# 複数行の入力

## 数値

“`terminal:入力値
5000
3
“`

### 配列で返す場合

“`rb
lines = readlines.map(&:to_i)
p lines
`

[Rails] enumを使用したステータスの更新・連動

## はじめに

 今回、とあるアプリケーションの製作過程で個人的に苦戦した、enumを使用した注文ステータス、製作ステータスの更新・連動についてメモ程度にまとめました。

## 行いたいこと
– ①注文ステータスを[入金待ち]から[入金確認]へ更新した際に製作ステータスを自動的に[製作不可]から[製作待ち]に更新させる。
– ②紐付いている注文商品の製作ステータスが一つでも[製作中]になったら、注文ステータスを[製作中]に自動的に更新させる。
– ③紐付いている注文商品の製作ステータスがすべて[製作完了]になった際、注文ステータスを自動的に[発送準備中]にする。

## モデルの準備
各モデルの内容は以下になります。
“`order.rb
has_many :order_details, dependent: :destroy
enum status: { payment_waiting: 0, payment_confirmation: 1, in_production: 2, preparing_delivery: 3, delivered: 4 }
#status → 注文

Slim は死なず

[Slim](https://rubygems.org/gems/slim) という Ruby 製テンプレートエンジンのお世話になっている人も少なくないと思う。私も愛用している。

GitHub リポジトリーはこちら:

https://github.com/slim-template/slim

Rails などで HTML の生成に使われることが多いと思うが,HTML のほか XML の生成にも適しており,私は SVG なんかも Slim で書いている。

# もしかしてメンテ停止?

Slim の最新版は 2020 年 5 月 8 日にリリースされた 4.1.0 で,2 年ほど新しいバージョンが出ていない。
とはいえ,Slim は私の印象では完成度が高く,2 年くらい新しいのが出てなくてもとくに不安にはならなかった。

ところが,ちょっとした改善要望(後述)を issue にしようとリポジトリーを訪れて,「えっ?」と思った。
最後のコミットが 2020 年 10 月 20 日だったのだ。
新版のリリースは無くても,たいがい細かいコミットはあったりするものだ。それが 2 年ほど無い

【Ruby】複数データの奇数・偶数の判定の考え方

備忘録として自分の思考の軌跡を残しておきます。
今回の問題はこちらです。

https://paiza.jp/works/mondai/loop_problems2/loop_problems2__even_output

# 考え方

## 1.奇数を数式で表す

まず考えることは「奇数をどのように表すか」ということです。奇数は数値nを2で割った時の余りが1になればよいので、これを数式で表します。

“`ruby
num % 2 == 1
“`

Rubyでは「**%**」を使って余りを算出します。

## 2.奇数・偶数の判定方法を考える

今回求められている出力結果は「奇数のみを出力すること」だったので、この式を元に、**if**を用いた場合分けを考えていきます。
上記の式の結果がtrueになったときに出力するようにしたいので、以下のような式を作成します。

“`ruby
if num % 2 == 1
puts num
end
“`

## 3.標準入力でのデータ受け取り

それでは入力されたデータを受け取り、実際に組み立てていきます。
今回は以下のような数値を例と