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

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

【Ruby】ループ処理について掘り下げて考えた

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。完全異業種からのエンジニア転職を目指して学習をしています。

## 概要
自分は完全未経験であり、Rubyで初めてプログラミングを学んだため、「繰り返し」と言う概念が当たり前にある前提で`each`文などの説明が始まり、 ???🧐??? となりました。
通っていたスクール内で技術面談等を利用したり、さまざまな技術記事を見たりして、
自分が理解できるまで掘り下げて考えたものをまとめました。

## 注意
私は前職が完全異業種であり、英語も苦手で、スクールに入って初めてプログラミングに触れました。
そんな自分が理解しづらかった部分を、同じように初めてプログラミングの概念に触れた人に向けてまとめました。
自分の復習も兼ねて、超超噛み砕いて書いているため、周りくどい書き方になっている箇所もあるかと思います。

また、初学者のため、間違っている箇所もあるかもしれませんのでその際は教えて頂けると嬉しいです🙇

  
## ループ処理(繰り返し)とは
Rub

元記事を表示

enumの使用方法

### **enumとは?**

enum(enumeration: 列挙)は、名前を整数の定数に割り当てるのに使われるデータ型です。(列挙型というみたいです。)

名前は言語の定数として振る舞う識別子なので、整数を直に扱う場合よりもプログラムの読みやすさとメンテナンス性が向上します。

例::publicを0、:draftを1として、0や1で状態を定義できる

### 使い方

例として、article(記事)というモデルにstatus(状態)というカラムを作成し、それをenumを使って表します。

デフォルトで0(draft)になるように設定してます。

### カラム作成

“`ruby
class CreateArticles < ActiveRecord::Migration[6.0] def change create_table :articles do |t| # 他のカラムの定義 t.integer :status, default: 0 t.timestamps end end end ``` ###

元記事を表示

【Ruby Silver】Rubyのループ処理まとめ

## 自己紹介
はじめまして、はる([@lemonade_37](https://twitter.com/lemonade_37))と申します。完全異業種からのエンジニア転職を目指して学習をしています。
 
## 概要
Ruby Silver3.1 の学習のために使用した、Rubyのループ処理のまとめです。
既にわかりやすくまとめられている記事も多いですが、Ruby Silverの問題を解きながら学んだ、引っかかりやすい部分なども含めてまとめています。

:::note warn
初学者のため、間違っている箇所や、紹介した方法よりも良い方法があるかもしれませんので、その際は教えて頂けると嬉しいです🙇
:::

## ループ処理の基礎
ループ処理の概念や基礎についてはこちらの記事でまとめました。

https://qiita.com/lemonade_37/items/0660f9ee6ca2dc09d42d

## 配列やハッシュ内で繰り返す系
– `for`:指定した配列の要素に順番に実行したり、指定した範囲分繰り返しを行う。
※`do`省略可
“`ruby
fo

元記事を表示

[Ruby]シンボルと文字列の違いを爆速で理解する

## はじめに
実務で、rubyを触った際に、シンボルが出てきて何だっけこれ?となったのでその違いをまとめます

## シンボルとは
任意の文字列と一対一に対応するオブジェクトのこと。
文字列の代わりに用いることができるが、必ずしも文字列と同じ振る舞いをするわけではない。

“`シンボル.rb
:apple
:japan
:ruby_is_fun
“`

## 違いは
– 文字列はStringクラスのオブジェクト

– シンボルはSymbolクラスのオブジェクト

これです。

また、シンボルは
– 文字列よりも高速に処理できること
– 全く同じシンボルであるということ

です。

## 同じオブジェクトかどうかを調べてみる

object_idを使って、調べてみると

“`.rb
:apple.object_id #=> 1143388
:apple.object_id #=> 1143388
:apple.object_id #=> 1143388

‘apple’.object_id #=> 703212292
‘apple’.object_id #=> 70321129

元記事を表示

【Rails】ActiveRecordでSQLっぽくテーブル結合する方法

# 環境
Ruby 3.0.1
Rails 6.1.6
PostgreSQL

# やりたいこと
Railsのメソッドを使ってテーブルを結合し、結合先の値を集計・並べ替えを行いたいと思います。
例えば、以下のようなデータベースがあるとします。

![ActiveRecord_sql_sample_er.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3674409/4891d4f4-1c2b-136f-a410-8e700a12b59d.png)

こちらは、ユーザーが持っている本をuser_booksに登録していくテーブルです。usersとbooksを多対多でアソシエーションを組んでいます。
これを使って、たくさん本を持っているユーザー順に並べ替えたいと思います。

# 準備
前述のER図を元にモデルを作成し、アソシエーションを組んで、コンソール等で必要なデータを作ります。詳細はトグルの中に記載しています。

作り方がわかる方は飛ばしてください。

詳細
元記事を表示

MisskeyのAPIの叩き方(curl, Ruby)

https://misskey-hub.net/ja/docs/for-developers/api/

Misskeyの各サーバーはAPIを公開していて、そのAPIを使ってBotやツールを作れます。GoやJavaScriptなどいくつかの言語ではAPIのラッパーが存在していますが、今回はそれらを使わず標準ライブラリや標準的なツールのみを使ってAPIを叩く際のコードを紹介します。

トークンの取得方法やAPIのエンドポイントの一覧などについては省略しますので、上記のURLをご覧ください。

## シェルスクリプト(curl)

### フォローしているチャンネルのリストを取得

“`sh
misskey_token=”misskeyのトークン”
channels=$(curl “https://misskey.io/api/channels/followed” \
-H ‘content-type: application/json’ \
–data-raw “{\”i\”:\”${misskey_token}\”, \”limit\”:100}” \
| jq –

元記事を表示

Railsでデータを効率的にカウントする方法

### 自己紹介
現在、SEとして業務系システムの開発に従事している者です。
WEBエンジニアとして転身するにあたり、主にRuby on RailsとNext.jsを中心とした勉強をしています。
よろしくお願いします。

—————

今日は、Railsでデータをカウントする際に便利な`count`関数の使い方について詳しく解説します。データの数を数えることは、Webアプリケーション開発においてよくある要件の一つです。Railsでは、このようなデータ操作を簡単かつ効率的に行うためのメソッドが豊富に用意されています。

### `count`メソッドの基本

`count`メソッドは、ActiveRecordのスコープに対して呼び出すことができ、指定された条件にマッチするレコードの数を返します。最もシンプルな形では、モデル全体のレコード数を取得することができます。

“`ruby

User.count

“`

このコードは、`users`テーブルのレコード総数を返します。

### 条件付きカウント

`count`メソッドは、条件を指定して特定のレコードの数

元記事を表示

【Ruby,Rails】クラスメソッドとインスタンスメソッドの違い

どうもこんにちは。

今回は、初心に帰ってクラスメソッドとインスタンスメソッドについてまとめます。

# まずは実行される時の形から覚える

## クラスメソッド

クラスメソッドは以下のような形で実行されます。

“`ruby:Railsコンソール
# newメソッド
pry(main)> Sample.new
# createメソッド
pry(main)> Sample.create(name: ‘サンプルA’)
# findメソッド
pry(main)> Sample.find(1)
# allメソッド
pry(main)> Sample.all
“`

## インスタンスメソッド

インスタンスメソッドは以下のような形で実行されます。

“`ruby:Railsコンソール
# インスタンスを作成してから…
pry(main)> sample = Sample.new
# saveメソッド
pry(main)> sample.save
# updateメソッド
pry(main)> sample.update(name: ‘サンプルB’)
“`

## 違いは…

元記事を表示

商品購入機能 単体テストコードの実装

# はじめに
プログラミング初心者です。現在フリマアプリの終盤、商品購入機能実装中。
間違っていたら、コメントをお願いします。
# 単体テストコード
これまで、商品購入機能の実装を進めてきました。
まだ、クレジットカード機能の実装はしていませんが、ひとまずテストコードを書きます。

### 今回のポイント
1、MySQL client is not connectedのエラーが出たときはこちらを記載!

config/environments/test.rb
“`
Rails.application.configure do
#省略
config.active_job.queue_adapter = :inline #追記
#省略
“`
2、カラム名は揃えるべし
テストコードのファイルやFacrtoryBotのファイルごとで、ActiveHashカラムの~~~_idのidを付けたり付けなかったりしていました。
それによって、テストコードがいつまでもActiveStorageエラーになり成功しませんでした、、、。

3、誤字をなくす!
“`
2) OrderAd

元記事を表示

Formオブジェクト

# はじめに
プログラミング初心者です。現在Ruby on Railsにてアプリ作成中終盤。
間違っている箇所がありましたら、コメントお願いします。

# Formオブジェクトについて
今回Formオブジェクトという新しい概念を学びました。
このFormオブジェクトの目的は、1つのフォームから送られてきた情報を複数のテーブルに保存することです。
### 手順
#### 1.Formオブジェクト用のモデルを作成します。
保存したいテーブルがorder(注文情報)とaddress(注文者の情報)だったら、order_address.rbというファイルを自主作成します。
#### 2.そのファイルにform_withで使用する機能とバリデーションを作成します。
“`
include ActiveModel::Model
attr_accessor :hoge, :hogehoge,:hogehogehoge ~~~~

↓以下バリデーションの記述
“`
#### 3.データをテーブルに保存する処理
“`
↑バリデーションの記述

ef save
order = Order

【Rails】form_tagとは

# form_tagとは
`form_tag`は、HTMLのフォーム要素を生成するためのヘルパーメソッドの1つです。このヘルパーメソッドは、フォームを手動で構築する必要がある場合に使用されます。特に、モデルと関連付けられていないフォームを作成する場合や、フォームが複雑な場合に便利です。

`form_tag`は、HTMLの`

`要素を生成します。このメソッドは以下のように使用されます。
“`rb
<%= form_tag('/search', method: 'get') do %>
<%= text_field_tag(:query) %>
<%= submit_tag("Search") %>
<% end %>
“`
上記の例では、`form_tag`ヘルパーメソッドが`/search`に対するGETリクエストを行うフォームを生成します。フォーム内には、`text_field_tag`を使用して検索クエリを入力するためのテキストフィールドが含まれています。また、`submit_tag`を使用してフォームを送信するためのサブミットボタンが含まれています。

`

【Rails】Strong Parametersとは

# Strong Parametersとは
Strong Parameters(ストロングパラメータ)は、Railsアプリケーションで安全にリクエストパラメータを扱うための仕組みです。これは、マスアサインメント脆弱性(Mass Assignment Vulnerability)を防ぐために導入されました。

マスアサインメント脆弱性は、フォームから送信されるパラメータを使用して、意図しない属性の更新や作成を許可する可能性があるセキュリティ上の問題です。Strong Parametersを使用することで、コントローラーで受け取ったリクエストパラメータから明示的に許可されたパラメータのみを取り出し、使用することができます。

Strong Parametersを使用するには、ストロングパラメータを許可するためのホワイトリストを定義する必要があります。通常、コントローラーのプライベートメソッド内でこれを行います。

# 使用方法
例えば、`create`アクションで`User`モデルに対してパラメータを許可する場合は、以下のようにします。
“`rb
class UsersControlle

【Rails】パスワードのハッシュ化

# パスワードのハッシュ化とは
パスワードのハッシュ化は、セキュリティ上の重要な手法であり、ユーザーのパスワードをデータベースに保存する際に平文ではなくハッシュ化された形式で保存することを意味します。これにより、パスワードがデータベース内に暗号化され、万が一データベースが漏洩しても、実際のパスワードを知ることはできなくなります。

# 実装手順
以下は、提供された用語を使用してパスワードのハッシュ化を実装する手順です。

1\. **gem bcrypt**
`bcrypt`は、パスワードの安全なハッシュ化を行うためのライブラリであり、Ruby on Railsのプロジェクトで使用されることがあります。Gemfileに`bcrypt`を追加して、`bundle install`コマンドを実行してインストールします。

Gemfile:
“`rb
gem ‘bcrypt’, ‘~> 3.1.7’
“`
ターミナル:
“`
$ bundle install
“`

2\. **password_digestカラム**
ユーザーのパスワードをハッシュ化して保存するために、データベース

【Rails】before_actionとは

# before_actionとは
`before_action`は、コントローラー内のアクションが実行される前に特定の処理を実行するためのフィルターです。これは、アクションの実行前に事前に定義されたコードを実行することができるため、DRY(Don’t Repeat Yourself)原則に従ってコードを簡潔に保つのに役立ちます。

`before_action`を使用すると、以下のようなことができます。

1\. 特定のアクションにアクセスする前にユーザーの認証を行う。
2\. 特定のアクションにアクセスする前に、特定の条件が満たされていることを確認する。
3\. 特定のアクションにアクセスする前に、特定のデータをロードする。

`before_action`は、コントローラーのクラス定義内で使用され、指定されたアクションが実行される前に実行されるメソッドを指定します。

例えば、以下のように`before_action`を使用して、特定のコントローラー内のアクションが実行される前に認証を行うことができます。
“`rb
class UsersController < Applica

【Rails】getとpostの違い

# getとpostの違い
RailsにおけるGETとPOSTの違いは、HTTPリクエストの種類とその目的にあります。

# GETリクエスト
– リソースの取得を目的とするリクエストです。
– リクエストされたURLに対応する情報を取得するために使用されます。
– リクエストパラメータはURLのクエリ文字列に含まれます。
– リクエストはブラウザのアドレスバーに表示されるため、ブックマークや履歴に保存される可能性があります。
– キャッシュが可能であり、同じURLに対する複数のGETリクエストは、同じ結果を返す必要があります。
# POSTリクエスト
– サーバーにデータを送信するためのリクエストです。
– リクエストされたURLにデータを送信し、それに基づいて処理を行います(データの作成、更新、削除など)。
– リクエストパラメータはリクエストボディに含まれます。
– データの送信が暗号化され、ブラウザのアドレスバーに表示されません。
– キャッシュされません。

Railsでは、これらのHTTPリクエストを受け取るために、それぞれのリクエストタイプに対応するルーティングメソッドが

【Rails】ロギングとは

# ロギングとは
ロギングは、アプリケーションの実行中に発生する様々なイベントや情報を記録することを指します。これには、リクエストの処理、データベースクエリの実行、エラーメッセージなどが含まれます。ロギングは、アプリケーションの動作を理解し、デバッグやトラブルシューティングを行う際に非常に役立ちます。

Railsのデフォルトのロギング設定では、開発環境とテスト環境では詳細な情報が記録され、本番環境では情報が最小限に抑えられます。これにより、開発中やテスト中はデバッグがしやすく、本番環境ではパフォーマンスが最適化されます。

ロギングは、`logger`オブジェクトを介して行われます。このオブジェクトはRailsアプリケーション全体で利用可能であり、`Rails.logger`を介してアクセスできます。ログレベル(debug、info、warn、error、fatal)を指定してログメッセージを出力することができます。

以下は、ロギングの基本的な使用例です。

“`ruby
# デバッグ情報の出力
Rails.logger.debug(“This is a debug messag

【Rails】each文とは

# each文とは
Railsの`each`文は、Rubyの標準的な`Enumerable`モジュールから派生したメソッドで、コレクション(配列やハッシュなど)の要素を1つずつ取り出して繰り返し処理を行うためのものです。

主にビューで使用され、データベースから取得したレコードなどのデータを表示する際によく使われます。例えば、コントローラーで取得したレコードをビューで一覧表示する場合に使用します。

以下は、Railsのビューでの`each`文の基本的な使用例です。
“`erb
<% @users.each do |user| %>

<%= user.name %>

<% end %>
“`
上記の例では、`@users`というインスタンス変数に格納されているユーザーのコレクション(おそらくデータベースから取得したもの)を繰り返し処理しています。各ユーザーの名前を`

`タグで表示しています。

`each`メソッドはブロックを受け取り、コレクション内の各要素をそのブロックに渡して処理を行います。ブロック内の変数(この場合は`user`)には、現在の要素が格納さ

【Rails】whereメソッドとfind_byメソッドの違い

# whereメソッドとfind_byメソッドの違い
`where`メソッドと`find_by`メソッドは、どちらもActive Recordクエリインターフェースを使用してデータベースからレコードを取得するためのメソッドですが、いくつかの重要な違いがあります。

1\. **戻り値の型**
– where: whereメソッドは条件に一致するすべてのレコードを取得し、それらを含むコレクション(ActiveRecord::Relation)を返します。結果が1つ以上のレコードであっても、常にコレクションを返します。
– find_by: find_byメソッドは条件に一致する最初のレコードのみを取得し、そのレコードを返します。結果が1つ以上のレコードであっても、最初の一致するレコードのみを返します。

2\. **返り値が存在しない場合の挙動**
– where: whereメソッドは、条件に一致するレコードが存在しない場合、空のコレクションを返します。
– find_by: find_byメソッドは、条件に一致するレコードが存在しない場合、nilを返します。

3\. **使用法**

【Rails】find_byとは

# find_byとは
`find_by`メソッドは、Active Recordクエリインターフェースを使用してデータベースからレコードを取得するためのメソッドの1つです。`find_by`メソッドは、特定の条件に一致する最初のレコードを取得します。

`find_by`メソッドは、検索条件を指定するためのハッシュを引数として受け取ります。指定された条件に一致するレコードが複数ある場合でも、最初に一致するレコードのみを返します。条件に一致するレコードが存在しない場合は`nil`を返します。

例えば、`User`モデルから名前が”John”である最初のユーザーを取得する場合、以下のように`find_by`メソッドを使用できます。
“`rb
# 名前が”John”である最初のユーザーを取得する
User.find_by(name: “John”)
“`
また、複数の条件を指定することもできます。
“`rb
# 名前が”John”かつ年齢が20歳である最初のユーザーを取得する
User.find_by(name: “John”, age: 20)
“`
`find_by`メソッドは

【Rails】whereメソッドとは

# whereメソッドとは
`whereメソッド`は、Active Recordクエリインターフェースを使用してデータベースからレコードを取得するためのメソッドです。`where`メソッドは、与えられた条件に一致するレコードを取得するために使用されます。

`where`メソッドは、検索条件を指定するためのハッシュやSQLの条件式を引数として受け取ります。例えば、特定のカラムの値が一致するレコードを取得する場合、以下のように使用できます。
“`rb
# カラムnameが”John”であるレコードを取得する
User.where(name: “John”)

# カラムageが20より大きいレコードを取得する
User.where(“age > ?”, 20)
“`
`where`メソッドは、条件に一致する複数のレコードを返す場合があります。また、条件に一致するレコードが存在しない場合は空の配列が返されます。

`where`メソッドは他のActive Recordメソッドと組み合わせて使用することもできます。例えば、`where`メソッドで条件に一致するレコードを取得した後、ord