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

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

エラトステネスの篩で素数を出力するRubyスクリプト

エラトステネスの篩で素数を出力するRubyスクリプトです。

`chmod +x sieve.ruby`して、
`./sieve.ruby 1000` として実行して下さい。

“`sieve.ruby
#!/usr/bin/ruby

def sieve(n)
tab,l=(2..n).to_a,[]
while v=tab.shift
l << v d=[] tab.each do |x| d<

元記事を表示

bcryptGemを用いたパスワードのハッシュ管理

# bcryptGemを用いたパスワードのハッシュ管理

Webアプリケーションのセキュリティを確保する上で、パスワードの安全な管理は重要な役割を果たします。`bcrypt` Gemを使用することで、Railsアプリケーションにおいて、パスワードを安全にハッシュ化し、管理することが可能です。この記事では、`bcrypt` Gemを使用したパスワードのハッシュ化と認証プロセスについて詳しく解説します。

## bcryptGemとは

`bcrypt` Gemは、パスワードのセキュリティを向上させるために使用されるRubyのライブラリです。このGemは、パスワードをハッシュ化することで、データベースに平文のパスワードを保存するリスクを回避します。

### パスワードのハッシュ化

– ユーザーがパスワードを設定すると、`bcrypt` Gemはそのパスワードをハッシュ化します。これにより、実際のパスワードとは異なる、独特な文字列が生成されます。

## has_secure_passwordの利用

Ruby on Railsでは`has_secure_password`メソッドを使用

元記事を表示

DeviseGemを使わないログイン機能の実装方法

# DeviseGemを使わないログイン機能の実装方法

Webアプリケーションにおいて、ユーザー認証機能はセキュリティとユーザーエクスペリエンスを確保するために不可欠です。しかし、すべてのプロジェクトでDeviseGemなどの認証フレームワークを使用するわけではありません。ここでは、DeviseGemを使わない基本的なログイン機能の実装方法を解説します。

## サインインとログインの基本的な仕組み

### セッションの利用

– ユーザーがログインすると、そのユーザーのIDがセッション変数に保存されます(`session[:user_id] = @user.id`)。
– ブラウザはこのセッション情報を受け取り、以降のリクエストにセッションIDを含めてサーバーに送信します。
– サーバー側はセッションIDを確認し、それに基づいてユーザーがログイン済みであるかどうかを判断します。
– ユーザーログアウトして際は、ユーザーのIDをセッションから剥奪します(`session[:user_id] = nil`)。

### カレントユーザーの設定

– セッションに保存されているユーザー

元記事を表示

【ActiveRecord】find・find_by・whereの違いと主要メソッド

# 【ActiveRecord】find・find_by・whereの違いと主要メソッド

Ruby on Railsの強力な機能の一つであるActiveRecordは、データベースの操作を簡単かつ効率的にするORM(Object-Relational Mapping)システムです。この記事では、ActiveRecordの基本的な使い方、特に`find`、`find_by`、`where`メソッドの違いに注目し、New、Create、Update、Delete、Saveといった主要メソッドの概要を解説します。

## ActiveRecordの概要

ActiveRecordは、Ruby on RailsのMVCモデルの中でモデル層を担当し、データベースとの間でデータをやり取りする役割を果たします。SQLを直接書く代わりに、Rubyのメソッドを使用してデータベースを操作することができます。これにより、コードの可読性が向上し、データベース操作が容易になります。

## find・find_by・whereの違い

### findメソッド

`find`メソッドは主にIDに基づいてレコー

元記事を表示

オブジェクト指向の再利用部品群の概要

## はじめに
オブジェクト指向がもたらした再利用部品群の、
クラスライブラリやフレームワークについて理解する。

## クラスライブラリ
 汎用的な機能を持つクラスを集めたもの。

 クラスライブラリには2種類あり、
 プログラミング言語に標準で付属するものと、サードパーティ製のものである。

### 1. プログラミング言語に標準で付属するもの
 Rubyなどの言語は、
 言語仕様を最小に抑え必要な機能をライブラリとして提供している。

:::note info
利点:
・文法や構文がシンプルになることで、言語学習や理解が容易になる。
・新機能をライブラリで実装するため、言語仕様のバージョンアップが必要ない。
:::

#### 言語標準クラスライブラリは継承構造
 言語標準のクラスライブラリは継承構造になっており、
 最上位の唯一のクラス(基底クラス)が存在する。

:::note info
基底クラスは言語により名称は異なる。
例えば、JavaではObject、Pythonではobject、RubyではBasicObjectである。
:::

 基底クラスには、

元記事を表示

Rubyでgets.chompについて

入力されたコメントを出力し、「終了」が入力されたら「終了します」と出力して終わるプログラムを作成します。

「終了」入力されるまで繰り返すので
“`
while true
end
“`
を使って繰り返して
“`
break
“`
で抜ければいいので
“`
while true
comment = gets
if comment != “終了”
puts “あなたのコメント: #{comment}”
else
puts “終了します”
break
end
end
“`
と記述しました。

しかし

#### 「終了」を入力したのに止まりません💦

そこで、`gets`の後ろに`.chomp`を追記して
“`
while true
comment = gets.chomp
if comment != “終了”
puts “あなたのコメント: #{comment}”
else
puts “終了します”
break
end
end
“`
と変更すると

#### 無事「終了」で終わることができま

元記事を表示

Arrayオブジェクトの基礎

## `Array`オブジェクトの基本的な使い方
配列とも呼ばれ、要素を順番に並べて保持できるオブジェクトです。
#### [Array](https://docs.ruby-lang.org/ja/latest/class/Array.html)の基本的な使い方は以下の通りです。

>array = [1, 2, ”aaa”, 4]
(ここで言うarrayはただの変数です。arrayじゃなくてdoraemonでも何でもOKです。)

### 実際に活用してみよう!
#### Arrayの中のひとつを参照したいとき
“`
array = [“nobita”, ”sizuka”, ”suneo”, ”gian”]
puts array[gets.to_i]
“`
“`
#実行結果
2
suneo
“`

#### 要素を末尾に追加
>Arrayオブジェクト << "要素" ``` array = ["nobita", "sizuka", "suneo", "gian"] p array << gets.chomp ``` ``` #実行結果 doraemo

元記事を表示

【minitest】 request.refererを使用する方法

# はじめに
最近`request.referer`という便利なものがあることを知り、使用する機会がありました。
ですが、minitestを書いている際にリファラを用いたアクションのテストがうまくいかず少し苦戦してしまったため、備忘録を兼ねてここに残しておこうと思います。

# そもそもrequest.refererってなに?
リクエストヘッダーが持っている情報の一つであり、遷移前のURLを取得することができます。

そのため、`request.referer`を活用することで、
– どのページからの流入なのかアクセス解析ができる
– 遷移元のURLに戻りたい時にリダイレクト先として使用できる

といったメリットがあります。

今回は後者のように、`request.referer`をリダイレクト先として使用した時の、minitestの書き方について考えます。

# minitestでのrequest.referer
ここでは`request.referer`を使用して、遷移元のURLに再度リダイレクトするようなアクションのテストを作成することを考えます。

“`rb
# get

元記事を表示

【Rails】ポリモーフィックが便利〜

どうもこんにちは。

今回はポリモーフィックについてまとめます。

# ポリモーフィックってなんぞや?

ポリモーフィックとは、複数のモデル同士の関連付けの考え方です。

この考え方は、異なるモデルを単一の関連で扱う機能です。

例えば、以下のようにテーブルが存在しているとします。

commentsテーブル
| カラム名 | 型 | 値1 | 値2 | 値3 |
| — | — | — | — | — |
| id | integer | 1 | 2 | 3 |
| comment | text | ワンちゃんかわいい!! | よろしくお願いします。 | この時期寒くね? |
| article_id | integer | null | 1 | null |
| photo_id | integer | 2 | null | null |
| tweet_id | integer | null | null | 1 |

articlesテーブル
| カラム名 | 型 | 値1 | 値2 |
| — | — | — | — |
| id | in

元記事を表示

【Rails】rails db: から始まるコマンドまとめ

どうもこんにちは。

今回はRails開発で使う`rails db:`から始まるコマンドをまとめてみました。

# データベース作成

以下のコマンドでアプリケーションで使用するためのデータベースを作成します。

“`
$ rails db:create
“`

# データベース削除

以下のコマンドでアプリケーションで使用していたデータベースを削除します。(データやテーブル、カラムなどが全て消えます。)

“`
$ rails db:drop
“`

# データベースを最新にする

以下のコマンドでデータベーススキーマの状態を最新の状態にします。

“`
$ rails db:migrate
“`

マイグレーションファイルは以下のコマンドで生成します。

“`
rails g migration AddAgeToUserModel
“`

生成されるマイグレーションファイルは以下のようになります。

“`ruby
class AddAgeToUserModel < ActiveRecord::Migration[6.0] def change

元記事を表示

【Rails】同じグループのアクションのルーティングをネストと非ネストに分ける

# はじめに
オリアプに関して、実装時に考えていたことを忘れないように頭の整理目的で書き残したいと思います。
実装途中の話を公開しますので、見た人がわかるような文章構成になっていない可能性があります(全部語ると長くなり、本来のメイン目的である頭の整理に沿わないため)。
結論だけ知りたい方は「解決方法」だけ見ればOKです。
また、必ずしも時系列ではないです。

# 自分のこと
先日プログラミングスクールを卒業して現在転職活動中です。
プログラミング未経験の状態からプログラミングスクールに通い始めました。
転職活動と同時並行でオリジナルアプリの開発をしています。

# オリジナルアプリについて
マンション管理アプリを作成しています。
メイン機能としては分譲マンションの管理会社が社内で使用する(想定の)業務アプリです。
サブ機能として、マンション住民も一部の機能にアクセスできるようにしています。
## アプリのコンセプト
これを知らないと、この人は何をそんなにこねくり回しているんだとなりそうなので、このアプリのポイントを2つ挙げます。
### ・複数のユーザーモデルが存在する

元記事を表示

【Rails】Renderにデプロイしたらビルドエラーが起こった

# 概要
Railsチュートリアルの第7章を進めていた時、
TLSと本番環境用の設定をRenderにデプロイしたときにビルドエラーが発生しました。

“`
ActiveRecord::ConnectionNotEstablished: could not translate host name “****” to address: Name or service not known

Caused by:
PG::ConnectionBad: could not translate host name “****” to address: Name or service not known

Tasks: TOP => db:migrate
(See full trace by running task with –trace)
==> Build failed 😞
“`

# 結論(解決策)
PostgreSQLのリージョンをシンガポールからオレゴンに変更した

# 試したこと
## PostgreSQLのVersionを15に変更する
Railsチュートリアルが更新された

元記事を表示

Railsでフォームから送付された画像をpublicフォルダに保存する方法

# Railsでフォームから送付された画像をpublicフォルダに保存する方法

Railsを用いてWebアプリケーションを構築する際、フォームからアップロードされた画像をサーバー上に保存する必要があることがよくあります。本記事では、フォームから送付された画像をpublicフォルダに保存する方法について詳しく解説します。この方法は、特に画像の名前をユーザーのIDに基づいて管理したい場合に有用です。

## 画像ファイル名の保存と変更

### 画像ファイル名の設定

まず、ユーザーに関連付けられた画像ファイルの名前を設定します。これは、ユーザーのレコードが作成された後、そのIDを使用して行います。

#### イメージ名の生成

“`ruby
@user.image_name = “#{@user.id}.jpg”
“`

上記のコードでは、ユーザーのIDを取得し、それをファイル名の一部として使用しています。これにより、各ユーザーにユニークな画像ファイル名が割り当てられます。

## フォームからの画像データの受け取り

### 画像データの取得

フォームから送信された画像データ

元記事を表示

optparseの使い方

# optparseとは
`octparse`は標準ライブラリの内の1つで、コマンドラインのオプションを使うためのライブラリです。

## 使い方
1. `OptionParser`オブジェクトoptを生成
2. オプションを取り扱うブロックをoptに登録する
3. opt.parse(ARGV)でコマンドラインを実際にparseする
## 1. `OptionParser`オブジェクトoptを生成
optparseライブラリを読み込んで、OptionParseオブジェクトoptを生成します。
“`sample.rb
require ‘optparse’
opt = OptionParser.new
“`

## 2. オプションを取り扱うブロックをoptに登録する
onメソッドを使用し、引数でオプション`-a`と`-b`を定義し、引数が指定されたときの処理をブロック内に記述する
“`sample.rb
opt.on(‘-a’) {|v| p v }
opt.on(‘-b’) {|v| p v }
“`

## 3. opt.parse(ARGV)でコマンドラインを実際にpar

元記事を表示

Railsで画像を保存する際のassets配下とpublic配下の違い

# Railsで画像を保存する際のassets配下とpublic配下の違い

Railsアプリケーションにおけるアセット管理は、画像、スタイルシート、JavaScriptなどの静的ファイルを効率的に扱うための重要な部分です。特に画像ファイルの配置には、`assets`ディレクトリと`public`ディレクトリの2つの主要な選択肢があります。これらの違いを理解することは、Rails開発において重要です。この記事では、`assets`ディレクトリと`public`ディレクトリの特徴と使い分けについて詳しく解説します。

## assets配下に画像を保存する

### assetsディレクトリの役割

#### 概要

`assets`ディレクトリは、Railsアセットパイプラインの一部として機能します。アセットパイプラインは、JavaScriptファイル、スタイルシート、画像などのアセットを効率的に管理し、配信するための仕組みです。

#### 特徴

– **プリコンパイル**: `assets`ディレクトリに置かれた画像は、本番環境へのデプロイ時にプリコンパイルされます。これにより、

元記事を表示

VSCodeでRailsのCtrl+Clickで参照元にいけない

# はじめに

仕事でRailsを最近書いているのですが、そこでこまったことをまとめておきます

# 問題

Railsを使っている上でモデルのメソッドなどにとびたいときがあります
そのときに**Ctrl + Click**で以前は参照元に飛んでいたのですが、いま拡張機能をいれてもその機能が使えませんでした

# 解決方法

最新のRubyの拡張はその機能が使えなくなっているそうです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/4f6c2308-89ce-e438-c6bd-2ca324f8e55d.png)

少し前の**非推奨**のバージョンであれば利用できるのでそちらをインストールしました

**Ctrl + p**でコマンド`ext install rebornix.Ruby`を実行

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/8fca6fc0-

元記事を表示

Rubyで、Gem::FilePermissionErrorが表示された時の対処

久々にRubyを触っていると、gem install minitestで権限エラーになりました。
“`
ERROR: While executing gem … (Gem::FilePermissionError)
You don’t have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
“`
調べてみると、原因はシステムのRubyが使われているから、
権限エラーになっているとのことでした。
“`
% which ruby
/usr/bin/ruby
“`
rbenvのRubyが使われる設定になっていません。
.zshrc(bashの人は.bashrc)に、以下の記述を入れました。
“`
% vi ~/.zshrc
“`
“`
[[ -d ~/.rbenv ]] && \
export PATH=${HOME}/.rbenv/bin:${PATH} && \
eval “$(rbenv init -)”
“`
自分のユーザのhomeパス + rbenvのRubyパスが

元記事を表示

【Ruby】Class&インスタンスの理解と活用方法

# 【Ruby】Classとインスタンスの理解と活用方法

Rubyプログラミングにおいて、クラスとインスタンスは非常に重要な概念です。クラスはオブジェクトの設計図のようなもので、インスタンスはその設計図に基づいて作成された具体的なオブジェクトを指します。この記事では、Rubyにおけるクラスとインスタンスの基本的な使い方を詳しく解説していきます。

## クラスの定義方法

### クラスの基本構造

“`ruby
class クラス名
# クラスの内容
end
“`

Rubyでは、クラス名は大文字で始める必要があります。クラス内にはメソッドや変数を定義し、オブジェクトの振る舞いや状態を定義します。

### インスタンス変数とattr_accessor

“`ruby
class クラス名
attr_accessor :インスタンス変数名
end
“`

`attr_accessor`は、インスタンス変数のゲッターとセッターを自動的に定義するメソッドです。これにより、インスタンス変数へのアクセスや変更が簡単になります。

### メソッド

“`ruby
clas

元記事を表示

Sporockets::FileNotFoundのエラー解決方法

# Sporockets::FileNotFoundのエラー解決方法

Ruby on railsでアプリを作成中にエラーが出てきたので
原因と対処法を書いていきます。

## なぜエラーが出たのか?
gemを導入してターミナルで
`bundle install`
を実行した後に
localhost:3000/
でブラウザを開こうとしたらエラーが出ました。

## 対処法

ターミナルで
Ctrl+CでRailsサーバーを切り、再度`rails s`を実行する。

gemをインストールした後は
サーバーの再起動を徹底します!

元記事を表示

[Ruby]シンボルとは何か。文字列との違いもはっきりさせたい。

ハッシュでよく使われるシンボルですが、ハッシュ以外でシンボルとシングルクオートが並んでいるコードを見た時、なぜ違う書き方をしているのか理解できないことがありました。
私にはどちらも同じものに見えており「そこ、シングルクオートで書いてしまえばいいのでは?」と思ったからです。
しかし、実際は**文字列に見えるようでシンボルと文字列は異なるものである**ということを知りました。
そこで、シンボルについての理解を深めるために、改めてまとめてみようと思いました。

## シンボルとは
“`
# シンボルは:strを指す
str = :str
“`
Rubyのリファレンスマニュアルには以下のように説明されています。
>シンボルを表すクラス。シンボルは任意の文字列と一対一に対応するオブジェクトです。

>Rubyの内部実装では、メソッド名や変数名、定数名、クラス名など の`名前’を整数で管理しています。これは名前を直接文字列として処理するよりも 速度面で有利だからです。そしてその整数をRubyのコード上で表現したものがシンボルです。(中略)シンボルは、ソース上では文字列のように見え、内部では整数

元記事を表示

OTHERカテゴリの最新記事