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

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

Rubyでオウム返しプログラミングの練習…

お久しぶりです。Javaの勉強し直してます。
Javaでオウム返ししろと言われましたが、手癖でRuby…

※注意事項。
→が、実行結果です。

“`ruby
cat oumu.rb
→puts gets.to_s

ruby oumu.rb
→1
→1
“`

では、この辺で…

元記事を表示

Ruby on Rails ECサイト作成

## はじめに
Zennの記事を元にECサイトを作成してみました。
今回はオリジナルではありませんが今後ECサイトを作りたいので練習で制作しました。とても勉強になったのでECサイトを作ってみたい方はぜひチャックしてみてください。

https://zenn.dev/farstep/books/7f169cdc597ada

## 機能紹介
大きく2つに分けることができます。
・ECサイトの管理者側の機能
・ECサイトを利用する顧客側の機能

どちらもログインすることで閲覧できます。

Githubリポジトリ

https://github.com/Killua0615/ecommerce_practice

### 管理者側以下の内容が確認できます

#### 注文履歴
status は「Normal」「Withdrawn」「Banned」のどれかに変更することができる
![スクリーンショット 2024-06-27 10.28.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/7fe7

元記事を表示

【Ruby】privateとprotectedの違い

rubyのclassにおけるprotectedが理解できず調べていたのですが、分からなかった理由はprivateの理解を誤っていたからでした。
今回は、privateメソッドとprotectedメソッドの違いについてまとめてみます。
# 共通点
・クラス内かサブクラス内でのみ呼び出せる点
・レシーバがselfの場合、privateメソッドでもprotectedメソッドでも挙動は変わらない。
bメソッドの中でaメソッドを呼び出している部分は、省略されているだけでその前にselfがあります。
“`

class Parent
def initialize(name)
@name = name
end

def b
a
end

protected #privateでも同じ結果が出ます

def a
puts “a”
end
end

parent = Parent.new(“Alice”)

parent.b
parent.a #クラス外から呼んでいるのでエラー

“`

# 相違点
privateメソッドはレシーバがselfの場合

元記事を表示

data-turbo=”false”とdata: { turbo_method: :post }を同時に使いたい場合

## はじめに
data-turbo=”false”とdata: { turbo_method: :post }をどうしても一緒に使う必要があった時の話です。

※後述しますが、ajax化した場合ですと今回の書き方ではうまくいきません。予めご了承ください。

## 環境
ruby 3.2.2

rails 7.1.3.2

hotwire

Bootstrap5系

Google Map API

## 今回例示するアプリ画面についての説明

現在、「自分の好きな本屋を紹介し、また好きな本屋が増える事を支えるサービス」がテーマのポートフォリオを作成中です。

今回は開発途中で壁に当たった時の対処法としてここに記していきたいと思います。

## 今回のシチュエーション

ブックマークボタン(画像にある栞のマーク)を押すたびに、javascriptが読み込めなくなりGoogleMapが表示されなくなりました。

![turboメソッドの記事写真1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/372657

元記事を表示

How to install ruby(rbenv) and npm on WLS2 as Ubuntu

apt でインストールしたらやたら古かったのでメモ

# 環境
– Windows 11 Pro
– wsl 2.2.4.0
– Ubuntu 22.04.4 LTS

# TODO
“`shell
# rbenv and ruby

sudo apt-get install -y libssl-dev zlib1g-dev libyaml-dev
git clone –depth 1 https://github.com/rbenv/rbenv.git ~/.rbenv
echo ‘eval “$(~/.rbenv/bin/rbenv init – bash)”‘ >> ~/.bashrc
. ~/.bashrc

git clone –depth 1 \
https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

rbenv install 3.3.1
rbenv global 3.3.1
gem update –system
gem update
gem cleanup

# npm an

元記事を表示

「コメントに対するコメント」をモデルで表現してみた!

## 動作環境
vscode、ruby3.3.0、rails7.1.3.4

## 実装したかったこと
x(旧twitter)のようなクローンアプリを作っていたのですが、投稿文に対するコメントに対して更にコメントする機能を実装してみました。
探せば山ほど参考になる記事は出てくると思ったのですが、今回は自分のテーブルや関係性の理解度を確認するために、敢えて自分で試行錯誤しながら一から作ってみました!💪

## 実装のゴール
コメントの子要素を取得できる。
コメントの3階層まで。4階層目のコメントは作成できない。(コメントのコメントのコメントまでは作成できる)

## 実装前のモデルの状態
user→post→comment
(既にpostへのコメント機能は作成済みです)
“`app/models/user.rb
has_many :posts, dependent: :destroy
has_many :comments, dependent: :destroy
“`
“`app/models/post.rb
belongs_to :user
has_many :comments,

元記事を表示

テストコードを書く上で個人的に気をつけている5つのこと

# はじめに
エンジニアの皆様、テストコードはちゃんと書けておりますでしょうか?(挨拶)

どんな開発言語や開発手法を導入していたとしても、アプリケーションの機能実装とテストは表裏一体であると言えます。場合によっては機能の作り込みよりも時間をかけるべきケースが多いくらい重要である(・・・と信じたい)反面、デッドラインが近づくにつれて真っ先に工数が削られやすく軽視されがちな工程でもあります。

時間に追われてテストコードを書いた結果、テストの体をなしていないコードになっていたり後で見返したときに記述が煩雑すぎてメンテ不能になっていたり・・・といった苦い経験は誰しもがあるかと思います。かくいう自分もそんなことは多々ありました。
そんな今までの経験則を基に「自分がテストコードを書くにあたってどんなことを意識しているのか?」をいくつかピックアップして備忘録も兼ねて紹介したいと思います。

一応注意なのですが、**「あくまで自分はこうやってます」という趣旨の記事**です。偉大な先人によるテストコードの書き方などに関する記事・コラムも多数ありそれらの内容に相反する事項もあるかもしれませんが、そこは

元記事を表示

Railsでのユーザー認証の実装とbcryptの活用方法

## 流れ

### 1. Userのモデルとコントローラーを準備する

“`ruby
rails g model user username:string password_digest:string
“`

“`ruby
rails g controller users
“`

“`ruby
rails db:migrate
“`

以下のファイルが生成されます:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/b76bc216-0e70-8824-13e6-2aa70659953d.png)

`users_controller.rb`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/38a56c5c-bb43-6430-b46c-4720f1c0165c.png)
`user.rb`

`user.rb` に以下のメソッドを追加します:

元記事を表示

[Ruby 3.1.6] メソッドの可変長引数の *array 展開で SystemStackError

[SystemStackError]:https://docs.ruby-lang.org/ja/latest/class/SystemStackError.html
[ArgumentError]:https://docs.ruby-lang.org/ja/latest/class/ArgumentError.html
[NoMethodError]:https://docs.ruby-lang.org/ja/latest/class/NoMethodError.html
[組み込みライブラリ]:https://docs.ruby-lang.org/ja/latest/library/_builtin.html
[Hash#values_at]:https://docs.ruby-lang.org/ja/latest/method/Hash/i/values_at.html
[ruby 3.3 – ruby/hash.c L:2710]:https://github.com/ruby/ruby/blob/ruby_3_3/hash.c#L2710

:::note warn
この記

元記事を表示

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 }
“`

## 完成形
“`
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
> 配列等の要素を一つずつ繰り返して、ブロック内で処理する

元記事を表示

CORS設定でOPTIONSリクエストとヘッダが取得できない

実装中に対応した内容を備忘録として投稿します。

## 発生した問題

フロントエンド(Nuxt.js)から、バックエンド(Rails)に対して、APIリクエストを投げるとCORSエラーが発生。
“`
Access to XMLHttpRequest at ‘http://localhost:3000/users/1’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
“`
## 原因

– ブラウザ側のセキュリティが強化されていて、意図しない挙動を防ぐために実装されている。
– もし仮に、ハッキングされるなどすると、
– フロントエンドとバックエンドでサーバーやドメインが別れている場合に、悪意のあるドメインにすり替えるなどができてしまう。
– 会員制サイトでログインするときに、ログインIDやパスワードを盗むことができてしまう。

元記事を表示

rails sが起動しなくなった

`rails s`が動かない現象に遭遇したので、備忘録として投稿します。

## 発生した問題

下記エラーにより、`rails s`が起動しなくなった。

“`
% rails s
=> Booting Puma
=> Rails 6.1.5 application starting in development
=> Run `bin/rails server –help` for more startup options
Exiting
bin/rails:7: warning: already initialized constant APP_PATH
/Users/xxxx/workspace/app/bin/rails:7: warning: previous definition of APP_PATH was here
The most common rails commands are:
generate Generate new code (short-cut alias: “g”)
console Start the Rails co

元記事を表示

RailsのHostAuthorizationによってELBのヘルスチェックがhealthyにならない

ポートフォリオをデプロイする際に発生した問題について、備忘録として投稿します。

## 発生した問題

Rails6 + AWSで下記の構成のようなアプリを開発していました。

Railsの`HostAuthorization`を利用し、`/api/health_check`というパスでALBからのヘルスチェックを行おうとしました。
しかし、Railsが403エラーを返し、ヘルスチェックが失敗してしまいました。

## 原因

Railsの設定は下記のようになっていました。
![](https://raw.githubusercontent.com/nomikazu-x/post-zenn-qiita/master/images/prettier-plugin-astro-organize-imports/alb-esc-nginx-rails-rds.jpg)

“`ruby:environments/production.rb
config.hosts << 'base_domain.com' ``` 原因は、 「ヘルスチェック時のホスト名がbase_domain.comでな

元記事を表示

Rubyでデザインパターン (5) Singletonパターン

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

## Singletonパターンとは
Singletonパターンとは、特定のクラスがインスタンスを一つのみしか生成しないことを保証するためのデザインパターンです。

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

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

## Rubyでのコード例
単純な実装を行うと、以下のようになります。

“`rb
class Singleton
private_class_method :new

class << self def instance @instance ||= new end end end puts Singleton.instance == Singleton.instance ``` ```:出力結果 true ``` また、Rubyには`Singleton`モジュールがある

元記事を表示

Ruby, Ruby on Railsのselectメソッドについて

### 読んで欲しい人

– selectメソッドがわからない人
– 過去の自分

### 動作環境

– ruby 3.3.0
– Rails 7.1.3.3

### selectとは

– Enumerableモジュールの一部
– 文字列、配列、ハッシュに対して検索を行えるメソッド

**Enumerableモジュールとは**

– 繰り返し処理を行うためのモジュール

Enumerableモジュールに定義されているメソッドは全て`each`を用いて定義されてる。

`each`を基盤として、より複雑な操作を簡単に行うための道具箱がEnumerableモジュールという感じ。

### モデルに使う時

前提:下記のusersテーブルがあるとする

|id |name |email |
|—|—|—|
|1 |jojo |jojo@example.com |
|2 |dio |dio@example.com |
|3 |hoge |hoge@example.com |

普通に情報を取得すると下記

“`ruby
User.all

# 発行さ

元記事を表示

カラム名.present?の省略方法

下の記事の内容は正しくありません。
~~カラム名.present?の省略方法がActiveRecordで元から用意されていたので、自分用に残しておきます。~~

“`ruby
user = User.first
user.name? # user.name.present? と同意
# => true / false
“`

~~rails cの補完機能を使っていると見つけました。
このような元から用意されてある動的なメソッドは、まだまだたくさんあるみたいなので、もっと勉強していこうと思います!~~

元記事を表示

Rspec WrongScopeError発生

Rspecでテストを走らせた際に発生した問題について、備忘録として投稿します。

## 発生した問題

“`
Failure/Error:
raise WrongScopeError,
“`#{name}` is not available from within an example (e.g. an ” \
“`it` block) or from constructs that run in the scope of an ” \
“example (e.g. `before`, `let`, etc). It is only available ” \
“on an example group (e.g. a `describe` or `context` block).”

`name` is not available from within an example (e.g. an `it` block) or from construct

元記事を表示

【Ruby】between?でtime.zoneを範囲指定として渡す際の注意点

Rubyの`between?()`の返り値が想定と違かった原因をメモ。

“`Ruby:
now = Time.zone.now
start_time = Time.zone.parse(“2024/07/01 12:00”)
end_time = Time.zone.parse(“2024/07/31 23:59”)

if now.between?(start_time, end_time)
~…
end
“`
データとしてはこんな感じ。
`now`が`2024/07/31 23:59`になったと仮定して動作を確認していたら
条件がfalseになってif文に入らなかった。
## 原因
`end_time`をparseしたときに秒数を指定していないので、
`now`が`23:59:00`以降になると分岐条件がfalseになってif文に入らない。
## 解決策
終了時刻は秒数を指定する。
“`Ruby:
end_time = Time.zone.parse(“2024/07/31 23:59”)

end_time = Time.zone.parse(“2024/07/

元記事を表示

【オブジェクト指向】デザインパターンについて

## デザインパターンとは
JavaやRubyなどオブジェクト指向言語において、よく使われる設計をパターン化したものです。
これを用いることでプログラムが再利用しやすくなり、読みやすいものとなります。

## デザインパターンの種類
「GoF」のデザインパターンがあり、全23種の設計パターンに分けられており、大カテゴリーに分けると
「生産」「構造」「振る舞い」の3つに分けることができます。

+ 生産
+ [Abstract Factory](#abstract-factory)
+ [Builder](#builder)
+ [Factory Method](#factory-method)
+ [Prototype](#prototype)
+ [Singleton](#singleton)
+ 構造
+ [Adapter](#adapter)
+ [Bridge](#bridge)
+ [Composite](#composite)
+ [Decorator](#decorator)
+ [Facade](#facade)
+ [F

元記事を表示

[Rails] 単一ファイルのRailsアプリケーションを作ってみた

# はじめに

週刊Railsウォッチ: Ruby on Jets 6.0がRailsをサポートほか(20240620後編)

上記の記事で、気になる箇所がありました。

**1ファイルで動くRailsアプリケーションを作った**

これを見た時の自分は、「え?そんなことできるの?」と思いました。

https://greg.molnar.io/blog/a-single-file-rails-application/

上記記事の記載があったので、参考にして自分も作ってみました。
その内容をアウトプットいたします。

# 実装
## 環境
– Ruby:3.2.2

お好きなディレクトリで、`app.ru`を作成します。

“`rb:app.ru
# frozen_string_literal: true
require ‘bundler/inline’

gemfile(true) do
source ‘https://rubygems.org’

gem ‘rails’, ‘7.0.4’
gem ‘sqlite3’, ‘~> 1.4’
gem ‘puma’
en

元記事を表示

OTHERカテゴリの最新記事