Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

【Rails, MySQL, ORM】where(‘user.id’: 1)ってことができる

業務開発でRailsを使用しており、ORMもよく使用しているのですが、業務開発を通して知った `where` 句の文法的なのをここで紹介していきます。

## where(column: value)
これはRailsのwhere句の一番オーソドックスな書き方だと思います。
whereをメソッドチェーンで繋げていけば `and` 句となり条件をより絞ることができます。
“`ruby
# e.g.
User.where(id: 1)
User.where(gender: “man”).where(name: “hoge”)
“`

## where(column: [value])
これはいわゆる `where in` 句の書き方で、 `or` 検索をかけたい時は基本的にこの書き方が一番いい気がします。
若干話が変わりますが、SQLアンチパターンにおいて、 `or` 検索はインデックスが効かない `where` 句の書き方ですが、 `where in` 句はインデックスが効く書き方なので、もし `or` のような**和集合条件**でインデックスが効く検索をしたい場合は **`wher

元記事を表示

DHH流のルーティングの書き方

今回は私が現場で使用しているルーティング構成について自分のメモとしてまとめました。

## DHH流ルーティングとは?
DHH流ルーティングとは、Railsの創始者であるDavid Heinemeier Hansson(DHH)の提唱するルーティング設計の方法論です。

DHH流ルーティングでは、リソースに対して標準的なCRUD操作(Create, Read, Update, Delete)を簡潔に定義し、カスタムアクションやネストリソースを最小限に抑えることで、ルートの複雑さを減らして記述を行うというものです。

つまり、デフォルトCRUDのindex , show, new, edit, create, update, destroyメソッドのみですべてを表現するということです。

## 具体的な設定例

### ・ 例1
“`
namespace :admins do
root ‘dashboards#index’

resources :staffs
resources :users do
resource :enable, only

元記事を表示

エンドレスメソッドについて

今回は元有名企業で開発をしていた方が御用達しているというエンドレスメソッドについて調べたのでその使い方をメモ程度にまとめました。

## エンドレスメソッドとは
『end を書かずにメソッドを定義する』というそのままの意味のメソッドになります。
これにより def set_user = @user = User.find(params[:id]) という形でメソッドを定義する事ができるようになります。

基本的には1行でかけるメソッドの時に多様するようです。

### わかりやすいイメージ
“`
# 今までは def ~ end でメソッドを定義していた
def set_user
@user = User.find params[:id]
end

# これが def だけで定義できるようになる
def set_user = @user = User.find(params[:id])
“`

### 実際のコード
“`
class ExampleController < ApplicationController def show sum = squ

元記事を表示

【Ruby】数値Nを3桁ずつカンマ区切り

## はじめに
学習記録のために自分なりに解説したいと思います。

# 問題
大きな数値 N が入力されます。3 けたごとにカンマ区切りで出力してください。
ただし、N のけた数は 3 の倍数です。

# 解答例
“`ruby

num = gets.chomp # 数値を入力

reversed_num = num.to_s.reverse # 数値を文字列に変換し、逆順にする

comma_separated = reversed_num.gsub(/(\d{3})(?=\d)/, ‘\1,’) # 3桁ごとにカンマを挿入

puts comma_separated.reverse # 文字列を再度逆順にして出力
“`

## 考え方
Rubyには組み込みの形式設定機能があり、それを利用して数値を指定した桁数ごとに区切って出力します。まず、`to_s`を用いて数値を文字列に変換し、その後に`reverse`と`gsub`を使って3桁ごとにカンマを挿入します。最終的に`reverse`で文字列を正しい順序に戻します。


## 使用したメソッドについて

###

元記事を表示

Rubyでデザインパターン (4) FactoryMethodパターン

## この記事は何
デザインパターンについて、Rubyでどのような使い方ができるかをまとめた記事です。
デザインパターン自体の解説は詳しく行いません。

## FactoryMethodパターンとは
FactoryMethodパターンとは、スーパークラスで特定のインスタンスに対しての処理のステップを実装し、サブクラスでどのインスタンスに対して処理を行うのかを指定するデザインパターンです。

詳しくはこちらをご覧ください。

https://qiita.com/shoheiyokoyama/items/d752834a6a2e208b90ca

## Rubyでのコード例
スーパークラスで手続きの流れを実装し、サブクラスで手続きの処理で呼び出しているメソッドの定義と、インスタンスの定義を行います。

“`rb
class SuperClass
def factory_method
instance = build_instance
method1(instance)
method2(instance)
method3(instance)
end

元記事を表示

Rubyのクラス

Rubyのデータ(値)は、オブジェクトであり
オブジェクトは何かしらのクラスに属しています。
オブジェクトがどのクラスに属しているのかは
“`.例
“Hello World”.class
“`
例のようにclassメソッドを使うことによって知ることができます。

元記事を表示

ruby文字列

Rubyで文字列を作るには
基本的にシングルクォート(’)、もしくはダブルクォート(”)で囲む
“`.例
“ダブルクォートで囲う。”
‘シングルクォートで囲う。’
“`
コンソールで囲わずに入力するとエラーになる

元記事を表示

Railsヘルパー

“`.rb
# ページごとの完全なタイトルを返す
def full_title(page_title = ”)
base_title = “Ruby on Rails Tutorial Sample App”
if page_title.empty?
base_title
else
“#{page_title} | #{base_title}”
end
end
“`
のようなヘルパーを作成することで

“`.application.html.erb
<%= full_title(yield(:title)) %>
“`
で呼び出すことができる

元記事を表示

rubyの予約語の意味まとめ

## はじめに
rubyの予約語についてまとめたくなったので、予約語とその意味をまとめます。

## 予約語
予約語はクラス名、変数名などに用いることはできない。
ただし接頭辞$, @、@@が先頭についたものは予約語とは見なされない。
[ruby リファレンス](https://docs.ruby-lang.org/ja/latest/doc/spec=2flexical.html)
| 予約語 | 意味 | 例 |
|————–|————————————————————————————————

元記事を表示

ずんだもんがリアルタイムで会議内容をレビューし読み上げるプログラムを作る

:::note info
本記事は2024年6月に執筆しました。
今後もっと効率的な実現方法が出てくるかと思います。
:::

![03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951879/fcc974ac-d576-057b-2559-b56f77544b67.jpeg)

# 趣旨
前回の記事([GPT-4o同士で会話して会議を代行するプログラムを作る(プロト版)](https://qiita.com/kdi384ldp/items/8b8714d5f0a8395a1eb7))執筆中に、「ChatGPTの出力内容を音声合成ソフトで読み上げることが出来るのでは?」と思いついたので、作ってみた。

# 環境
| 製品 | バージョン |
|:————|:——————-|
|Windows 11|23H2|
|Ruby|3.3.1|
|ChatGPT API|モデルはGPT-4oを指定|
|Google Spee

元記事を表示

rbenv: ruby: command not found

# 問題
rbenv: ruby: command not foundが発生

## 解決策
`rbenv versions`

でバージョンを確認
例:
“`
system
2.7.6
*3.3.0 (/.ruby-version)
“`

バージョンをローカル設定
`rbenv local 3.3.0`

元記事を表示

クラスにモジュールを取り込むinclude、prepend、extendの違いと比較

モジュールをクラスに組み込むには3つの方法があります。それは `include`、`prepend`、そして `extend` です。この記事では、これら3つの方法の違いと共通点を詳しく解説し、比較します。

## Rubyのinclude

`include` は、他のモジュールからコードをクラスにインポートする最も一般的な方法です。`include` はモジュールのメソッドをクラスのインスタンスメソッドとして追加します。つまり、そのクラスのオブジェクトでこれらのメソッドを呼び出すことができます。

### includeの例

“`ruby
module Greetings
def greet
puts “Hello world!”
end
end

class Person
include Greetings
end

person = Person.new
person.greet # 出力: “Hello world!”
“`

### モジュールをクラスにincludeしたときのancestors chain

モジュールをクラスに `include

元記事を表示

Rubyにおけるrequire、require_relative、loadの違いと使い方

## はじめに

Rubyでプログラミングを行う際、ファイル間でコードを共有し再利用することは非常に重要です。これを実現するための主要なキーワードは `require`、`require_relative`、および `load` です。しかし、多くの初心者プログラマーはそれらの違いに混乱することがあります。この記事では、`require`、`require_relative`、`load` について詳しく説明し、それらを効率的に使用する方法を具体的な例を交えて紹介します。

この記事では、以下のようなディレクトリとファイル構成を仮定します:

“`zsh
– project/
– main.rb
– lib/
– foo.rb
“`

“`ruby:lib/foo.rb
class Foo
def message
puts “Hello world!”
end
end
“`

## Rubyにおけるrequire

`require` は、ライブラリやモジュールを現在のプログラムにロードするために使用されるRubyのキーワードです。`requir

元記事を表示

Rubyのクラスメソッドとインスタンスメソッドの概念

**クラスメソッド**と**インスタンスメソッド**はオブジェクト指向プログラミングにおいて重要な概念です。この記事では、Rubyプログラミング言語におけるクラスメソッドとインスタンスメソッドについて説明します。

## クラスメソッドとは?

クラスメソッドはクラス上に定義され、クラスのインスタンスではなく、クラス自体に対して直接呼び出すことができるメソッドです。これらはクラス全体に関連する操作に使用されることが多いです。

#### クラスメソッドの定義方法

Rubyではクラスメソッドの定義方法は非常に柔軟です。以下にクラスメソッドを定義するための3つの一般的な方法を示します。

“`ruby
# 方法1
class Car
def self.total
10
end
end

puts Car.total # => 10

# 方法2
class Car
class << self def total 10 end end end puts Car.total # => 10

# 方法3
class Car; end

元記事を表示

Rubyでnullを扱うには

## 環境
Ruby 2.6

## はじめに

SIerで長らくエンジニアをしていた自分は、もっぱらVBer(造語)でした。多くのVBerを悩ませた問題の一つにnull問題がありす。nullはOracleにもSQLServerにも存在する概念です。業務アプリを開発する現場では避けて通ることはできません。とにかくこのnullですが、便利などころか厄介モノ扱いでした。VBerから離れてRubyerになった現在でも、null問題はついて回ります。nullという概念はPostgreSQLにもMySQLにも同じように存在します。Rubyでnull(正確にはnil)をスマートに扱う方法について書いてみました。

## VBでnullを扱う

VBでnullを扱う場合、nullを””に変換する関数を作成して対応していました。型をVariantにしているのは、どのような型にもオールマイティに対応するためです。もちろん、nullにも対応させる必要があります。Variant型にすると処理が重くなるといった副作用が発生しますが、いたしかたありません。また、Trimをかけて、空白スペースが入っていた場合は”

元記事を表示

Reporting API v4を使用して、UAのバックアップを対応する

# はじめに
この記事を読んでいる皆さんは、UAのバックアップは終わりましたでしょうか?
UAは`2024/07/01`以降には、完全に削除されてしまいます。

なので、それまでにデータが必要であれば、バックアップする必要があります。
今回は以下APIを使用して、データをcsvに出力することをしたので、そのアウトプットとなります。

最終的には、出力したcsvをBigQueryにインポートするまで対応しますが、アウトプットはAPIの実装のみとなります。

https://developers.google.com/analytics/devguides/reporting/core/v4?hl=ja

:::note warn
この記事では、プロジェクトの作成方法や認証情報の取得に関しては、解説を行いません。
あくまで、APIの実装方法がメインとなります。
:::

# 前提
– サービスアカウント認証を利用
– 認証情報をJSONファイルは取得済み

Reporting API を利用するための準備は、以下記事を参照してください。

https://qiita.com/ryota-s

元記事を表示

HTMLとCSSのみで画像のアクセプト比を保持したまま、背景画像のスライドショーを実装する

# はじめに
背景画像のスライドショーを実装したいけど、画像のアクセプト比が歪んでしまったり、javascriptを必要とする場合があったので、HTMLとCSSだけで簡単に実装できるスライドショーの作り方を紹介します。
今回は、3枚の画像でスライドショーを実装しています。

# HTMLの記述
“`Ruby:index.html.erb

Optparseの使い方について

# 概要

今回は、Rubyの標準機能である「Optparse」の説明になります。

公式ドキュメントは以下になります。

https://docs.ruby-lang.org/ja/latest/library/optparse.html

# Optparseとは?

rubyファイルを実行するときに、コマンドでオプションを指定することができるようにします。より正確に記述をすると「オプション解析をよしなに実施してくれる便利な機能」ということです。

実際の使用例を以下に用意しました。

# 使い方

サンプルコードは以下になります。

“`sample.rb

# optparseが使用できるようにrequireします
require ‘optparse’

opt = OptionParser.new

# ショートオプションとロングオプションの設定
# 使用するオプションを「-p または -option」という名前に設定します
# どちらかだけ(-pのみ)の設定でも問題ありません
# また、オプションの説明文も追加できます(なくても問題ありません)
opt.on(‘-p’,

元記事を表示

Rubyでデザインパターン (3) TemplateMethodパターン

## この記事は何
デザインパターンについて、Rubyでどのような使い方ができるかをまとめた記事です。
デザインパターン自体の解説は詳しく行いません。

## TemplateMethodパターンとは
TemplateMethodパターンとは、スーパークラスで処理の枠組みを定め、その一部をサブクラスで具体的に実装するデザインパターンです。

https://qiita.com/shoheiyokoyama/items/c2ce16b4f492cd014d50

詳しくはこちらをご覧ください。

## Rubyでのコード例
スーパークラスで手続きの流れを実装し、サブクラスで手続きの処理で呼び出しているメソッドの定義を行なっていきます。

“`rb
class SuperClass
def template_method
method1
method2
method3
end

private

def method1
fail NotImplementedError
end

def method2
fail NotImp

元記事を表示

rails永続的なセッション

# 概要
railsを勉強している時に永続的なセッションを作成するのに
便利なメソッドがあったので記録として残します。

# 実際のコード
“`.rb
cookies[:remember_token] = { value: remember_token,
expires: 20.years.from_now.utc }
“`
上記は20年後期限切れになる記憶トークンです。
これをメゾットを使うことで
“`.rb
cookies.permanent[:remember_token] = remember_token
“`
のように書くことができます。

元記事を表示

OTHERカテゴリの最新記事