- 0.0.1. [Ruby] 委譲(def_delegators)を理解する
- 0.0.2. 【Ruby】case文をハッシュに変えたら少しだけ幸せになれた話
- 0.0.3. 診断機能(ポイント制)
- 0.0.4. Rails7 で TODOアプリを作ろう ⑨ (Enumや日時のバリデーション)
- 0.0.5. ターミナル上に時計を表示する
- 0.0.6. 【MySQL,Rails】アプリケーションの動作を改善したい(INDEX)
- 0.0.7. [初学者] sorceryでユーザー登録、ログイン・ログアウト機能の作成
- 0.0.8. Ruby on Railsアップデート(Action Mailer/Active Storageの修正 他 2023-11-17)
- 0.0.9. GPTが書いたコードをKernel#evalで動かす
- 0.0.10. Railsコールバックのchanged?って?
- 0.0.11. ローカル環境でrails newする際に -d postgresql オプションでエラーが出る際の対処法 & PostgreSQLのインストール【Rails 7, Mac OS】
- 0.0.12. 【Ruby on rails】Aws::S3::Errors::RequestTimeTooSkewed
- 0.0.13. 【Rails】開発/本番環境で違う初期データ(seeds.rb)を入れる、データの入れ直し方法など
- 0.0.14. リリース用pull requestの内容をラベルでグルーピングしてわかりやすくする
- 0.0.15. Rubyについて回答
- 0.0.16. Rubyについて2
- 1. Rubyとは
- 2. 環境構築
[Ruby] 委譲(def_delegators)を理解する
Rubyには`def_delegators`というメソッド委譲と呼ばれる処理を行うためのクラスメソッドが定義されています。ちなみに、RailsのActiveSupportにも`delegate`という同じようなメソッドがあります。
メソッド委譲を使うと、クラス外で定義されているメソッドを、あたかもインスタンスメソッドのように呼び出すことができるようになります。
“`ruby
class Person
attr_accessor :name
attr_accessor :age
endclass Staff
attr_accessor :person
def_delegators :person, :name, :age
endp = Person.new
p.name = “Taro”
p.age = 20s = Staff.new
s.person = ppp s.name # => Taro
“`## コードリーディング
まずは、`delegate`メソッドは次のように定義されています。
“`ruby:forward
【Ruby】case文をハッシュに変えたら少しだけ幸せになれた話
## はじめに
どうもこんにちはもきお([@mokio_50](https://twitter.com/mokio_50))です。今回は実務で「おっ、これいいじゃん」と思ったちょっとしたリファクタリングになります。例として今回は東海オンエアのメンバーからメンバーカラーを返すと言うのを例にしました。
## if文をcase文に
一番条件分岐でオーソドックスなif文で書くと
“`ruby:
member = “ゆめまる”if member == “てつや”
“オレンジ”
elsif member == “りょう”
“ブルー”
elsif member == “しばゆー”
“イエロー”
elsif member == “ゆめまる”
“ピンク”
elsif member == “虫眼鏡”
“ブラウン”
elsif member == “としみつ”
“グリーン”
end
“`
今回は`ゆめまる`なので`ピンク`が表示されるでしょう。続いてcase文を用いて書くと
“`ruby:
member = “ゆめまる”case member
when
診断機能(ポイント制)
Ruby on Rails でポイント制の診断機能を実装する。
おすすめのキャラクターの診断ができる機能を実装する。## 開発環境
– Ruby3.0.6## 診断設計
Question1からQuestion3に対して「はい」→キャプテンアメリカに+1
Question4からQuestion6に対して「はい」→アイアンマンに+1
Question7からQuestion9に対して「はい」→スパイダーマンに+1
Question10からQuestion12に対して「はい」→ソーに+1
計12問の「はい/いいえ」の質問に回答すると、「はい」の数が最も多いキャラクターが表示される。## 手順
1. モデル
2. ルーティング
3. コントローラー
4. ビュー## 1. モデル
question1からquestion12の計12個(データ型がinteger)のカラムを持つTestモデルを作成する。
“`cmd
rails g model Test question1:integer question2:integer …
“`“`cmd
rails db:migr
Rails7 で TODOアプリを作ろう ⑨ (Enumや日時のバリデーション)
## はじめに
### 前回は
#### バリデーションメッセージのテンプレート化 として
https://qiita.com/tomoaki-kimura/items/57eb705ceeb228161fe6
– コンソール
– バリデーション
– errors
– バリデーションメッセージについて学びました。
### 今回は
#### Enumや日時のバリデーション として
– Enumのバリデーション
– カスタムバリデーション
– 日時のバリデーション
– タイムゾーンについて学びます。
では、はじめていきましょう。
## 1. バリデーションヘルパー
### ヘルパー一覧
バリデーションに関しては、かなりの項目数になるので、一度Railsガイドに目を通してみると良いでしょう。
https://railsguides.jp/active_record_validations.html
今回は、Rails7以降で追加された便利なバリデーションを含めてやっていきましょう。
## 2. Enumのバリデーション
### validate: tru
ターミナル上に時計を表示する
# やりたいこと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179154/26fc6d54-aec5-9d15-b936-3478222f14cd.png)
ターミナル上に時計を表示したいこと(`date` コマンドではなくリアルタイムで更新される時計がほしいこと)が稀にあります。
# Rubyワンライナー
“`shell
ruby -e ‘loop { t = Time.now.strftime(“%T”); print “\b” * t.size ; print t; sleep 0.1}’
“``”\b”` で1文字削除できるので、適当な間隔で削除→時刻を再表示すればよろしい。
【MySQL,Rails】アプリケーションの動作を改善したい(INDEX)
どうもこんにちは。
今回はRailsでデータベースにインデックスを貼る方法をまとめます。
# インデックスとは
インデックスは、データベース内のデータを迅速に検索するための構造です。データベースにおいて、特定の列(フィールド)に対してインデックスを作成することで、その列を使った検索やソートが高速になります。
# インデックスの構造
## データのポインター
インデックスは、実際のデータの場所を指し示すポインターの集まりです。これにより、データベースは全ての行を調べるのではなく、必要なデータを迅速に見つけることができます。
## 構造
多くのデータベースシステムでは、インデックスはB-Treeという特殊な木構造で作成されます。これにより、大量のデータの中からも効率的に検索が可能になります。
# インデックスの利点と欠点
## 利点
### 高速な検索
インデックスがあると、データベースは特定の値を持つ行を迅速に見つけることができます。
効率的なソートと集計: インデックスされた列を使ってデータをソートや集計する操作が高速になります。## 欠点
### 追加の
[初学者] sorceryでユーザー登録、ログイン・ログアウト機能の作成
### 目的
学んだことを忘れないように備忘録として残す
### sorceryとは?
SorceryはRuby on Railsで使用できる認証および認可のGem。これを使用することで、ユーザー認証、パスワードリセット、ユーザー管理などの一般的な認証および認可機能をアプリケーションに簡単に統合できる。
### gemとは?
gem は、Rubyプログラミング言語の拡張機能やライブラリをパッケージ化したもの。
RubyGemsを使用することで、他の開発者が書いたRubyライブラリやアプリケーションを簡単にインストールできる。
# sorceryの追加
gemファイルにsorceryを追加
“`ruby
gem ‘sorcery’
“`
### gemの反映
bundle installで追加したgemファイルを反映
“`ruby
bundle install
“`
# sorceryのセットアップ
### Sorcery gem用の設定ファイルと関連するファイルを生成
必要なファイルをプロジェクトに追加し、設定をカスタマイズできるようにする。
“`ruby
rails g s
Ruby on Railsアップデート(Action Mailer/Active Storageの修正 他 2023-11-17)
## 引用元
https://world.hey.com/this.week.in.rails/action-mailer-bug-report-template-active-storage-fixes-and-more-6264430d## 今週のトピック
### [word_wrapが空文字列を返すように修正](https://github.com/rails/rails/pull/50069)
[word_wrap](https://railsdoc.com/page/word_wrap)(指定された長さ以降の空白に改行を入れて出力するメソッド)が空の文字列を与えられたときに、nilの代わりに空の文字列を返すように修正された。### [プレビュー処理時にバリアントを処理する](https://github.com/rails/rails/pull/50044)
[ActiveStorage::Preview#processed](https://api.rubyonrails.org/v7.0.8/classes/ActiveStorage/Preview.html)
GPTが書いたコードをKernel#evalで動かす
# はじめに
最近Rubyを入門しています。
Rubyの特徴として挙げられる”メタプログラミング”を活かしたアプリを作成しました。## `Kernel#eval`とは
Rubyの`eval`メソッドは、文字列として与えられたRubyコードを実行するために使用されます。これは、Pythonの`exec`やJavaScriptの`eval`など、他の言語における同様の機能に類似しています。
#### 基本的な使い方
“`ruby
code = “1 + 2”
result = eval(code)
puts result # 出力: 3
“`上記の例では、`code`変数に格納された文字列がRubyの式として評価され、その結果が`result`変数に代入されます。
# つくったもの
[Github](https://github.com/daisuke0926dev/eval_generate_and_run)![無題の動画 ‐ Clipchampで作成](https://github.com/daisuke0926dev/eval_generate_and_run
Railsコールバックのchanged?って?
## きっかけ
「order_idが変わったらorder_statusの値を変更する」という実装でコールバックを使用した際に、
コールバックの挙動を理解できておらず躓いてしまったのでアウトプットとしてまとめてみました。## ケース1
コールバック発火しない
“`ruby:order.rb
enum status: {
unchecked: 0,
checked: 1,
error: 3
}after_update :order_status_reset, if: -> { order_id_changed? }
def order_status_reset
self.unchecked!
end
“`
### 原因
after_updateではorder_id_changed?に該当しない。after_saveも同様だが、changed?は
現在の値と変更しようとしている値を検証するもの。そのため、updateやsaveした後は
すでに変更しようとした値は保存されており、
changed?は発火しない
ローカル環境でrails newする際に -d postgresql オプションでエラーが出る際の対処法 & PostgreSQLのインストール【Rails 7, Mac OS】
:::note warn
PostgreSQLがインストールされていないために発生するエラー対処の記事となります。PostgreSQLの使い方の記事ではありませんので、ご了承くださいませ。
:::## はじめに
Railsのハンズオンや環境構築資料でよく見かける以下の rails new コマンド。
“`zsh
$ rails new test_app -d postgresql# –database=postgresql と読み替えていただいて問題ありません。
“`データベースオプションである、`-d postgresql` を指定することで、Railsと同時にPostgreSQLのセットアップをすることができます。※デフォルトはsqlite3が指定される。
しかし、ローカル環境にPostgreSQL自体をインストールしていない場合、pg gem(PostgreSQLのRubyライブラリ)のインストール中にエラーが発生する可能性がありますので、以下備忘録として、手順を残したいと思い記事にしてみました。
※ 現在プログラミングスクールに通っております。カリキュラム
【Ruby on rails】Aws::S3::Errors::RequestTimeTooSkewed
# はじめに
プログラミングを勉強して3か月ほどです。
プログラミングスクールを卒業し、現在就職活動をしています。今回はオリジナルアプリにS3を導入した際に発生したエラーの対処法を共有したいと思います。
下記の記事を参考にさせていただきました。https://zenn.dev/karaage0703/articles/47838858dd3107
# 今回のエラー内容
今回のエラーはS3導入後に画像を保存しようとした際に発生しました。
エラーの内容は、リクエストを行うクライアントとリクエストを受信するサーバーとの間の時間のズレに問題があることを示します。
[![Image from Gyazo](https://i.gyazo.com/31f3193a16ea29a8075139fadf75fe4a.png)](https://gyazo.com/31f3193a16ea29a8075139fadf75fe4a)
このエラー原因としては大きく2つ挙げられます。
1つ目は、AWS側の地域設定に誤りがあり、時刻がズレてしまっている。
2つ目は、システムの時間が合っていない。
今回
【Rails】開発/本番環境で違う初期データ(seeds.rb)を入れる、データの入れ直し方法など
# はじめに
初のオリアプ開発で、開発環境でユーザー等のテスト用の初期データを大量に生成する必要があったのと、本番環境でもデモ用初期データを手動追加するのが面倒なので、何かいい方法はないかと考えてました。
というのも、私の今作っているアプリは複数のユーザーモデルやメインとなるデータモデルを前提としている機能が多いんですよね。
調べたらseed.rbを活用すると初期データを入れられるとのことで、ではやってみよう!となったのです。## 前提
– Ruby 3.2.0
– Rails 7.0.8
– 本番環境はRender
– Renderにて既にデプロイが出来ていること# seeds.rbファイルとは?
データベースに初期データを設定するために使用されるファイルです。
このファイルに記述されたコードは、rails db:seedコマンドを実行することで実行され、指定されたデータがデータベースに追加されます。# ディレクトリ構造
元々は以下のようになっていると思います。
“`
db
├── migrate
├── seeds.rb
└── schema.rb
リリース用pull requestの内容をラベルでグルーピングしてわかりやすくする
[git-pr-release](https://github.com/x-motemen/git-pr-release)というリリース用pull requestを作成してくれるGithubアクションがあるのですが、そこで使えるテンプレートに手を加えて気に入ったものが出来たので共有です。
気に入ったらぜひ使ってみてください。
テンプレートを適用して所定のブランチにマージすると、以下のようなpull requestが自動的に生成されます。
![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/198321/03a8f9b0-851e-2757-06ec-8f3bf2ec0b0b.png)
git-pr-releaseはデフォルト状態でも、更新内容を一覧化してくれるのですが、更新内容をラベルによってグルーピングする事で何が更新されたのか、よりわかりやすくなったと思います。
更新内容を振り分ける方法は以下の通りです。
– 新機能: `enhancement` ラベルをPRに付与
– 改善:
Rubyについて回答
## 問題1-1の答え
“`ruby:ruby_1.rb
puts “おはよう”
“`## 問題1-2の答え
“`ruby:ruby_1.rb
puts 5
puts 9 + 9
puts 6 – 7
“`## 問題1-3の答え
“`ruby:ruby_1.rb
puts 50 + 5
puts “66”
“`## 問題1-4の答え
“`ruby:ruby_1.rb
puts 5 * 4
puts 8 / 4
puts 9 % 5
“`## 問題1-5の答え
“`ruby:ruby_1.rb
puts “こんばんは!” + “Ruby”
“`## 問題2-1の答え
“`ruby:ruby_2.rb
text = “おはよう”puts text
“`## 問題2-2-1の答え
“`ruby:ruby_2.rb
message = “Ruby”puts message
text = “エンジニア”
puts message + text
“`## 問題2-2-2の答え
“`ruby:ruby_2.rb
num1 =
Rubyについて2
Rubyとは
日本人が作ったプログラミング言語で初心者の方にも分かりやすい言語になっています!
できる事は主にWebアプリ制作になります!
Webアプリとはアマゾンや、食べログなどインターネット上で使うシステムの事です!環境構築
プログラミングを行うには、まずコードを打つ環境を整える必要があります。
システムを作るには、VS.codeというエディタをダウンロードして、Rubyをインストールするなどして環境を整える必要があります!
ですが、今回は練習ですので、その必要はありません!
paiza.ioという練習用の環境を使ってやっていきたいと思います!
⇓
https://paiza.io/projects/r8lj6ejAxv0ZdkRru2XrzQまずこちらのURLを開いてください!
![スクリーンショット 2021-08-21 165438 paizo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/400613/3436e891-0da5-36a5-e1f
【Ruby】クラス定義についてサクッと解説!
## 内容
Rubyにおけるクラス定義はオブジェクト指向プログラミングの核心部分です。この記事では、基本的なクラス定義から継承、クラス式の評価順序に至るまでを掘り下げていきます。
### 基本のクラス型
“`ruby
class Foo
def initialize(a)
@a = a
enddef method1
@a
end
endfoo1 = Foo.new(1)
foo2 = Foo.new(2)
p foo1.method1 # 出力: 1
p foo2.method1 # 出力: 2
“``initialize` メソッドではインスタンス変数 `@a` に引数 `a` を代入しており、`method1` ではこのインスタンス変数を返すように定義されています。
#### クラスへの代入
“`ruby
a = Foo
b = a.new(1)
p b.method1 # 出力: 1
“`クラス自体もオブジェクトであり、変数に代入して操作することができます。
### クラス式の評価順序
“`ruby
p 1
Rails 7 でTODOアプリ ⑧ (バリデーションメッセージのテンプレート化)
## はじめに
### 前回は
#### Deviseのビューをカスタム・フラッシュメッセージ として
https://qiita.com/tomoaki-kimura/items/7417b23f25db370ca619
– Deviseのビュー
– Bootstrapの適用
– フラッシュメッセージについて学びました。
### 今回は
#### バリデーションメッセージのテンプレート化 として
– Railsコンソール
– バリデーション
– errors
– バリデーションメッセージについて学びます。
では、はじめていきましょう。
## 1. コンソールを使ってみる
最初にちょっと脱線します。
### rails c
ロジックの検証に是非とも使いたいのが、Railsコンソールです。
モデルのロジックやDBの接続も可能なので、データーの入力や削除にも使えますし、クエリの結果を調べたりもできます。
最近では使えるメソッドの候補等も表示されてとても親切なツールになりました。
では、早速ターミナルから作業を始めます。
一旦データーを初期状態に戻した
【Ruby】ブロックについてサクッと解説!
## 内容
Rubyのブロックは、コードの一部をカプセル化し、再利用可能にする強力な機能です。この記事では、ブロックの基本的な使い方から、スコープの生成、クロージャの使用に至るまでを掘り下げていきます。### ブロックとは何か?
#### 基本的なブロックの使用
“`ruby
def func x
x + yield
end
p func(1){ 2 } # 出力: 3
“`
この例では、`{}` で囲まれた部分がブロックであり、`yield` を使用してその中身を実行しています。### ブロックによるスコープの生成
“`ruby
def func y
y + yield
end
func(1) do
x = 2
end
# 「p x」を実行するとNameErrorが発生
“`
ブロック内で定義された変数は、そのブロックの外部からはアクセスできないことを示しています。`{}` と `do…end` はどちらもブロックを生成しますが、一般的に一行で書ける場合は `{}` を、複数行にわたる場合は `do…end` を使用します。### ブロッ
【初学者】はじめてのDockerを使った環境構築【Docker + Rails7.1.2 + esbuild + Node.js 20.5.1 + Tailwind CSS + daisyUI + PostgreSQL】
# はじめに
お疲れさまです!
おおくまです!今回、はじめて“Docker“を使って環境構築をやってみました!
技術選定としては、
**Docker + Rails7.1.2 + esbuild + Node.js 20.5.1 + Tailwind CSS + daisyUI + PostgreSQL**
こんな感じです!
また、サーバーを立ち上げる際は、
“./bin/dev“のコマンドを使い、
**JSやCSSがビルドされ、なおかつJSやCSSを変更したときに自動的に再ビルドされる**ようにします!
備忘録として残したいと思います!# 注意点
:::note warn
私はプログラミング学習中で、初学者です。
内容に誤りがある場合があります。
コメント等で教えていただけると幸甚です。
:::# 環境
:::note
Ruby 3.2.2
Rails 7.1.2
Node.js 20.5.1
Docker Desktopをインストール済み
:::# 手順
“`:ターミナル
mkdir test_app
cd test_app
touch Dockerfi