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

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

has_secure_password の 72 文字制限にご用心

Rails にはパスワードフィールドを管理する方法として `has_secure_password` という機能がある。機能自体については[公式のドキュメント](https://guides.rubyonrails.org/active_model_basics.html#securepassword)を参照してほしい。

本題はこの機能の 72 文字制限についてである。公式のドキュメントにもある通り、この機能が作るパスワードフィールドには最大 72 文字のバリデーションが自動的にかかる。

“`irb
irb> user.password = user.password_confirmation = ‘a’ * 73
irb> user.valid?
=> false
irb> user.errors
=> #72}>]>
“`
[ソースコード]( https://github.com/rai

元記事を表示

Railsで静的データのモデルの実装

## 最初に

本記事でやりたかったことは [active_hash](https://github.com/active-hash/active_hash) を使ってもできるので、その前提でお読みいただけると。

記事を書いたときは `active_hash` を知らず、コメントで教えていただきました。

## 背景
Ruby on Railsで開発をしていて、
更新性の低いデータ、DB管理する必要ないであろうデータの扱い方に迷ったので、
対応方法を残します。

## 対象データ
Webサービスのプラン情報についてです。
基本的にリリース後に追加はあっても変更する可能性は低いです。
追加に関してもあっても2年に一度とかとかになるかな..と考えています。

ですので、管理画面作って変更するまでもないし、
DBに入れるまでもないデータだなと思ってどのように実装するかを迷っていました。

## 対処方法
Modelとしては実装しつつも、
DBには保存せず静的なデータで定義をしました。

## 実際のコード

以下のModelクラスを実装です。

“`models/plan.rb
clas

元記事を表示

BundlerとRubygemsの依存性によるトラブルシュート

## 環境
Ubuntu20.4
Ruby2.6.0

## はじめに

自分の開発環境から別の環境にRailsのソースを移行して、bundlerを動かそうとしたところ、動かないといった問題に遭遇したため、そのトラブルシュートの記事です。

Bundelrの公式サイトのBlogによると、この問題に関する是正内容が、2019年1月4日の記事で発表されています。わりと古い内容なので、今更な話題ではあります。

https://bundler.io/blog/2019/01/04/an-update-on-the-bundler-2-release.html

## 内容

Bundlerのバージョンを確認したところつぎのエラーが発生しました。
“`
$bundle -v
Traceback (most recent call last):
2: from /usr/local/rbenv/versions/2.5.0/bin/bundle:23:in `


1: from /usr/local/rbenv/versions/2.5.0/lib/

元記事を表示

rails 通知機能

**はじめに**

今回は、投稿のいいね機能についての通知機能を実装します。

バージョン
rails 6.1.7.4
ruby 3.1.2
通知する機能いいね機能作成済みとします
________

### モデル作成
“`
rails g modle Notification
“`
“`notification.rb
class Notification < ApplicationRecord # デフォルトの並び順を「作成日時の降順」で指定、に新しい通知からデータを取得することができる default_scope -> { order(created_at: :desc) }
belongs_to :visitor, class_name: ‘User’, optional: true
belongs_to :visited, class_name: ‘User’, optional: true
# optional: trueは、nilを許可するもの
belongs_to :post, optional: true
belongs_to :c

元記事を表示

Multiscale 23f

# name

Multiscale 23f : ソフトウェア開発での必須スキルとなるTDD(test driven development, テスト駆動開発), class, refactoringを,Ruby言語で習得する

# text

Kent Beck, ‘Test-Driven Development by Example’, (Pearson, 2003).

# Schedule

| data | text | title

元記事を表示

俺流Request specのフォーマット

## 背景

最近、個人でRuby on Railsを使ってWebサービスのAPIを開発しています。
その際にRSpecを使って主にRequest specを書きました。
spec形式の書き方で試行錯誤したので公開してみます。

## 俺流Request spec

まずは、コードを共有させていただきます。

組織のCRADを実装したOrganization APIのrequest specです。
rails_helperやメソッドに処理をさせているところもあって、
わかりづらいかもしれませんが動いているコードの一部をほぼそのまま持ってきました。

“`organizations_request_spec.rb
RSpec.describe ‘Organizations’, type: :request do
# 共通のデータ
let!(:user) { create(:user) }
let!(:uneditable_user) { create(:user) }
let!(:organization) { create(:organization) }

le

元記事を表示

Passengerで複数のRubyのバージョンに対応する

## 環境
– Ubuntu20.4 + Vagrant
– Ruby2.6.0
– Apache2.4.41
– Passenger6.0.18

## はじめに

Apache2 + Passengerの環境で、異なるRubyのバージョンで作られた複数のWebアプリを、共存させて動作させる方法について書きました。もう少し詳しく言えば、Ruby2.7で作られたWebアプリと、Ruby2.6で作られたWebアプリとを、Passengerで共存させる環境の作り方についてということです。

## 内容

#### Passengerのバージョンを確認する

Passengerが複数のRubyバージョンに対応できるようになったのは、Passenger4.0.0以降です。まずは、既存のPassengerのバージョンを確認します。

“`
$passenger-config –version
“`

Passengerがインストールされているはずなのに、「コマンドがありません」というエラーがメッセージが表示される場合は、パスが切れていない可能性があります。その場合は、自力でコマンドがある場

元記事を表示

Rubyのoptparseについて

# はじめに
今回はRubyのoptparseについての記事を書こうと思います。
カレンダーをRubyで作成する際にoptparseを使用する仕様にする際にoptparseについて調べたのでまとめて記事にしようと思いました。

# optparseとは
* `optparse`は標準ライブラリの1つで、コマンドラインのオプションを取り扱うために使われる
* `optparse`を使うときは基本的に以下のステップで使用する
①`OptionParser`オブジェクト`opt`を作成
②オプションを扱うブロックを作成
③opt.parse(ARGV)でコマンドラインをパースする

# 挙動の確認
“`sample.rb
require ‘optparse’
opt = OptionParser.new

opt.on(‘-a’) {|v| p v}
opt.on(‘-b’) {|v| p v}

opt.parse!(ARGV)
p ARGV
“`

実行結果
“`
$ ruby sample.rb -a foo bar -b baz
# => true
true

元記事を表示

【Rails6】 既存AppにTailwindCSSを導入しよう!

# はじめに
?こんにちは!Web系の企業に勤務し、地方からフルリモート勤務をしている@takakouと申します?️✨

今回は、「**【Rails6】 既存AppにTailwindCSSを導入しよう!**」というテーマで記事をシェアします!?

この記事を執筆しようと思った経緯としては、私自身が **既存のRails6のアプリケーション**に**TailwindCSS**を導入する記事があまり見つからなかったからです 。?

そこで、同じ疑問を持つ方の解消ができればと思い執筆しました?

記事執筆は未熟者で、至らない点もあるかと思いますが、皆さんのコメントやフィードバックをお待ちしています!??
# 目次

1. [対象者 ?](#1-対象者)
1. [動作環境 ?️](#2-動作環境)
1. [導入手順 ?](#4-導入手順)
1. [参考文献 ?](#5-参考文献)
1. [おわりに ?](#6-おわりに)

# 1. 対象者

* **Rails6**の既存AppにTailwindCSSを導入したい方

元記事を表示

Ajaxについて【自分用】

### 【概要】

Ajaxについて。になります。
前回も記事を執筆したのですが、自分の中の理解度チェックも兼ねて再度執筆します。

### 【環境】

・rails7系

### 【turbo_streamとは】

「turbo_stream」とは以下の機能を持っております。

・複数箇所のHTML要素を更新することが可能。
・HTML要素の追加・削除が可能。

ちなみに、これと対をなすものが「Turbo Frames」になります。
違いは下記です。

タグで囲った1箇所のみ更新可能。
・HTML要素の置換しか対応できない。

### 【基本的な使用方法】

### 【書き方】

“`ruby
#<%# turbo_stream.<アクション名> <ターゲットのid>, <追加するオブジェクト> %>
<%= turbo_stream.prepend "cats", @cat %>
“`

実際は下記を省略したものですが、意味だけ抑えておく。でもいいと思います。

“`ruby
<%= turbo_stream.p

元記事を表示

Railsのコードを綺麗にしたくてRuboCopを導入したのでメモメモ

どうもこんにちは。

RSpecテストのことをメモしてたら、RuboCopのことも書きたくなったのでメモします。

# RuboCopとは?

RuboCopとは、Rubyのコードをチェックして、そのコードがRubyの良い書き方かどうかを確認するツールです。簡単に言うと、Rubyの「 **文法チェッカー&アドバイザー** 」のようなものです。

# RuboCopを導入するメリット

– 導入が簡単
– 開発チーム全体でコードスタイルを統一することができる
– バグを防ぐことができる
– 良いコードスタイルを学ぶことができる

# デメリット

特にない。。。

# RoboCopとRSpec何が違うの?

一言で言うと、「 **静的チェックか動的チェックか** 」です。

RuboCopはコードの外見を見ます。(スタイルなど)

それに対して、RSpecはコードの内面を見ます。(動作、行動)

https://qiita.com/PDC-Kurashinak/items/a3ec3d693a70540aa4da

# 導入方法

ここでは、最低限のRailsアプリケーションが構築され

元記事を表示

RailsのバージョンアップのためにRSpecテストを書いたのでメモメモ

どうもこんにちは。

今回は以前投稿した[こちら](https://qiita.com/PDC-Kurashinak/items/3e708bff8b5d07eedc02)の記事の派生で、RSpecテストについて記載します。

https://qiita.com/PDC-Kurashinak/items/3e708bff8b5d07eedc02

# RSpecってどんなやつ?

RSpecテストとは、Railsのモデル、ビュー、コントローラなどのコードを実際に動かしているかのように **動的なテスト** をしてくれるツールです。

(コーディング規約に反していないかチェックするツールとしてRuboCopというツールがありますが、別の記事でメモしました。)

https://qiita.com/PDC-Kurashinak/items/1de32b66d95c705f5b82

# RSpecのメリット

– 書いたコードのエラーを自動で発見することができる
– Railsをバージョンアップさせたときに実行すれば、修正の必要箇所がよくわかる

# RSpecのデメリット

– 自分でテ

元記事を表示

【今更ながらChatGPT④】GithubアカウントチェックのRubyプログラム

– GithubアカウントチェックのRubyプログラムをChatGPTに書いてもらった。
– Rubyプログラムは一度も自身で書いたことは無い。
– 参考:[シンプルなGithubアカウント一覧(単純な興味本位のみの整理)](https://qiita.com/sam-ple/items/30f7d05ef9df7e19f560)

## 結果01
– リダイレクトは次回改良。

【折り畳み】結果01のプログラム

“`ruby:sample01.rb
require ‘nokogiri’
require ‘open-uri’

# GitHubのユーザーアカウントIDを入力
print “GitHubユーザーアカウントIDを入力してください: ”
account_id = gets.chomp

# GitHubユーザーページのURLを生成
url = “https://github.com/#{account_id}”

begin
# ページのHTMLを取得
page_html = URI.open(ur

元記事を表示

docker-composeで開発環境を構築するやり方

本記事ではrails+postgreSQLを使用したアプリケーションをdocker-composeを使用してdocker化するやり方を記載する。

– 使用ファイル構成
![スクリーンショット 2023-09-18 20.21.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3510594/940a6555-c966-775d-a8aa-af72a55e522c.png)
このRailsのアプリケーションをdocker化する

– 作成するファイル
“`Dockerfile:Dockerfile
FROM ruby:3.2.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile Gemfile.lock /myapp/
RUN bundle install

“`
`apt-get update`でパッケ

元記事を表示

【今更ながらChatGPT③】QuizKnock動画内の問題を解くRubyプログラムを作ってもらう

## 前提条件

– QuizKnockの動画を見て、動画内容の様なプログラムを作りたくなったのでChatGPTに作って貰う。

– Rubyプログラムを1度も書いたことが無い。

* * *

## ChatGPTへの依頼

以下は、Rubyプログラムの要件定義をまとめたものとなり、この要件に従いプログラムを作成して。

### ゲームの要件定義

**ゲームの目的:**
このゲームの目的は、プレイヤーが与えられた数字を全て使って、目

元記事を表示

railsでのGraphQLサーバーの構築と周辺ツールのセットアップ手順

# やる事

`rails`アプリケーションで`GraphQL`を開発するための初期構築と周辺ツールのセットアップを行います。

1. `graphql` gem のインストール
1. `graphql-ruby`の初期化コマンド実行
1. `AppSchema`クラスの設定項目の変更
1. `rubocop-graphql`のセットアップ
1. スキーマ情報をファイル出力する`rake task`追加

## 1. `graphql` gem のインストール

`GraphQL`サーバーの構築に`graphql`gemを使います

https://github.com/rmosolgo/graphql-ruby

“`diff:Gemfile
+ gem ‘graphql’
“`

“`bash
bundle install
“`

## 2. `graphql`の初期化コマンド実行

`graphql`gemの機能で`GraphQL`開発のセットアップを行うコマンド`graphql:install`コマンドが`rails generator`として追加されているので使用しま

元記事を表示

Faradayを使ってJSONと画像ファイルのマルチパート送信を行う方法

## はじめに
TumblrではAPIを使って、記事情報と記事に使用する画像を同時にアップロードできます。

しかし、Rubyでそれを行う方法を見つけ出すのに苦労したため、ここに方法を書き残しておきます。

## 動作確認環境

– Ruby 3.1.2
– faraday 2.7.2
– faraday-multipart 1.0.4

## 前提条件
OAuth2認証でアクセストークンを取得していること。

[https://www.tumblr.com/docs/en/api/v2#oauth2-authorization]()

## 使用するAPI
Tumblr APIの`/posts`

[https://www.tumblr.com/docs/en/api/v2#posts—createreblog-a-post-neue-post-format](https://www.tumblr.com/docs/en/api/v2#posts—createreblog-a-post-neue-post-format
)

APIドキュメントによると、こんな感じで記事本文の

元記事を表示

Railsプロジェクトを新規作成した手順のまとめと学び

## この記事はなに?
1から環境構築をして新規Railsプロジェクトを立ち上げてみて、手順や学んだことをアウトプットするものです。

## 動作環境
– macOS Ventura 13.2.1
– Homebrew 4.1.11をインストール済み

## 手順
### Rubyのインストール
#### Rubyのバージョン確認
まずはターミナルを開いてRubyのバージョンを確認
“`shell
$ ruby -v
“`
RailsではRubyバージョン2.7.0以降が必須なので、これより古いバージョンが表示された場合は、Rubyの最新版をインストールする必要があります。
私の場合はバージョン2系だったので最新化が必要でした。

#### rbenvのインストール
Rubyのインストールにはrbenvというツールを使いました。rbenvはRubyのバージョン管理をするツールです。
“`shell
$ brew install rbenv ruby-build
“`

インストールできたら以下コマンドでrbenvの初期設定をします。
まずは現在使っているシェル名を確認します。

元記事を表示

Rubyのfoo?.!の「.!」とはなにか?

## はじめに

最近とあるRubyのコードで `foo?.!` という実装を見かけた。個人的にはあまり見かけない実装だったので気になって調べてみた。

## 検証環境

* Ruby 3.2.2
* irb 1.6.2

## `.!` はどんな挙動をするのか

irbで `foo.!` と `!foo` の挙動を比較してみた結果、どちらも同じ挙動をすることが分かった。

### `foo.!` の場合
“`ruby
irb(main):001:0> true.!
=> false
irb(main):002:0> false.!
=> true
irb(main):003:0> nil.!
=> true
irb(main):004:0> “foo”.!
=> false
“`

### `!foo` の場合

“`ruby
irb(main):005:0> !true
=> false
irb(main):006:0> !false
=> true
irb(main):007:0> !nil
=> true
irb(main):008:0> !”foo”
=> false

元記事を表示

【rails】ActiveStorage上のmp3ファイルにWhidperAPIを使う

# はじめに
PythonでWhisperを使用する方法は簡単に見つかったが、rails上でwhisperを使用する方法があまり出てこなかった。
今回は、試した中で成功したプログラムを紹介する。

# 状況
・ActiveStorageを使用して、S3上にmp3ファイルを保存している。
・mp3ファイルは、“`Chat“`モデルの“`mp3_file“`というカラムに格納されている。
・mp3ファイルをWhisperを使って文字起こししたい。

# 準備
rails上でWhisperを使うには、“`”ruby-openai”“`というgemをインストールする必要がある。
また、S3にアクセスするには、“`”aws-sdk-s3″“`というgemも必要である。
Gemfileに、
“`ruby
gem “ruby-openai”
gem “aws-sdk-s3”
“`
を追記して、“`bundle install“`しておきましょう。

# S3からファイルを取り出す
まずは、S3から音声ファイルを取り出す。
“`ruby
s3_client = Aws::S3

元記事を表示

OTHERカテゴリの最新記事