Ruby関連のことを調べてみた2022年06月30日

Ruby関連のことを調べてみた2022年06月30日

?【メモ】Railsの基礎中の基礎の用語集②

# はじめに
前回に引き続き、今回も基礎的な用語のアウトプットを行います。

# 運用環境
運用環境とはシステムをどこで使用するか定められている環境のこと。3つの種類がある。
| 運用環境 | 通称 | 概要 |
|:-|:-|:-|
| development | 開発環境 | 主にアプリケーションを開発する際に使用する環境 |
| test | テスト環境 | アプリケーションの動作をテストする際に使用する環境 |
| production | 本番環境 | アプリケーションを実際にリリースする際に使用する環境 |

なぜこのように環境を分けるのかというと、環境ごとに必要な設定が多く存在するためである。
例えば、開発環境では「バグを探しやすいツール」を導入したほうが便利だが、本番環境ではアプリケーションのパフォーマンスを上げるために、余分なツールは使わないほうが適切である場合などがあるため。
Railsでは`database.yml`を編集することで、データベースの設定を運用環境ごとに変更できる。

# ライブラリ
他のプログラムと合わせて使用するために、複雑なプ

元記事を表示

Javaで実装されていたシステムをRubyに移行した話

https://tech.speee.jp/entry/java-to-ruby

元記事を表示

クラスメソッドとインスタンスメソッド

# クラスメソッドとインスタンスメソッドについての気づきたち
## クラスメソッドの定義方法
“`rb
class User
def self.greeting
puts “クラスメソッドへようこそ”
end
end
“`
– **メソッドの前に`self.`を指定**
## インスタンスメソッド
“`rb
class User
def greeting
puts “インスタンスメソッドへようこそ”
end
end
“`
## 使い分け
:::note info
クラスメソッド:クラス全体に関係する処理で使用する
:::
:::note warn
インスタンスメソッド:インスタンスに対して個別的に適用したい処理で使用する
:::

## ⚠️
クラスメソッド・インスタンスメソッドに関する知識は、ここに蓄積していくため、編集・追記が多くなると思いますが、ご容赦ください・・・・

元記事を表示

Rails APIのSerializerで、任意のキーを指定する方法

実務にあたっている中で、気になったので、備忘録的に示しておく。
思いつきで、つらつらと書いた。

### 大きくわけて3つある

### 1 key で指定する
“`ruby
class PostSerializer < ActiveModel::Serializer attributes :id, :title attribute :body, key: :post_body end ``` ### 2 メソッド ```ruby class PostSerializer < ActiveModel::Serializer attributes :id, :title   def post_body   object.body end end ``` ### 3 ブロック ```ruby class PostSerializer < ActiveModel::Serializer attributes :id, :title   attribute :post_body do object.body end end ``` ### cf

元記事を表示

Railsでデータをランダムに1つだけ取り出す方法

## はじめに
プログラミング初学者の自分用アウトプットです。
誤った知識や記述があれば教えていただけると幸いです。

## 開発環境
– ruby2.6.3
– rails6.1.4

## やりたいこと
データベースに投入したデータからランダムにデータを1つだけ取り出して表示したい。

## 試したこと

① RANDOM()を使用
“`posts_controller.rb
@post = Post.order(“RANDOM()”).first
“`
しかし上記では本番環境(MySQL)では動かない。
本番環境用にRANDOM()➡︎RAND()へ変更すると今度はローカル環境で動かない…

② shuffleを使用
“`posts_controller.rb
@post = Post.all.shuffle.first
“`
上記の記述でうまくいきました!

元記事を表示

[Refactoring]多くなったPrivateメソッドはクラス化できる!!

どうも、「病院なび」の開発チームメンバー甘利です。
今日はリファクタリングについて書こうと思います。

うちのホープの@KON-ch(こん)が勉強会に参加して「多くなったPrivateメソッドはクラス化できる!!」というのをもたらしてくれました。
確かにそうだわ、、と納得したので早速使っていきたいと思います。

# そもそもなぜPrivateメソッド達をクラスにする必要があるのか
単体テストの範囲を細かくできます

# Privateメソッドがたくさんある実装
以前書いた [自社サービス「病院なび」へ AWS Opensearch を導入したい](https://qiita.com/namarin/items/533e4297f05d23f198b3)を実装した際のクラスをリファクタリングしたいと思います。この`IndexingService`というクラスは社内での運用に合わせて Opensearch のインデックスを簡単に管理する目的で実装しています。簡単に管理する一環としてIndexを作成する際に、指定されたインデックス名に日付を表すサフィックスを付与し`index_name_20

元記事を表示

[paiza][ruby] マップの判定・縦横 (paizaランク B 相当)を整理する

### はじめに
paizaでアルゴリズムを学習し始めて日が浅いです
ランクBになると途端にコードが長くなり混乱中です
Aランクアップメニュー > マップの判定・縦横 (paizaランク B 相当)の回答に対して理解を深めたいと考え記事にしています
⚠シェア可能な問題集の問題です
⚠リファクタリングとかはせず愚直に与えられた回答を使用しています

また、問題をご存知な方前提になっていますので入力例・出力例は載せていません

https://paiza.jp/works/mondai/a_rank_level_up_problems/a_rank_snake_map_boss

### 回答

“`ruby
h, w = gets.split.map(&:to_i)
board = h.times.map { gets.split(”) }

board.each.with_index do |row, y|
row.each_index do |x|
flag_row = false
flag_clm = false

if x == 0

元記事を表示

【Rails】Rubocopのアップデートとrubocop-rails_configの導入

## はじめに
未経験からエンジニアに転職して、3ヶ月ほど経つエンジニアです。
業務にあたりながらも、小規模なアプリを作って楽しんでいます。

今回はRubocopのアップデートで学んだことを残しておこうと思い、記事を書きます。

## rubocop-rails_config の導入
https://github.com/toshimaru/rubocop-rails_config

こちらがrubocop-rails_configというgemです。

> 「何かしらRuboCop設定のレールが欲しいよね〜」というところで閃き、「だったらrailsチームの用意した公式rubocop.ymlを使えばいいじゃない」ということで冒頭のRailsとほぼ同じ設定を持ったrubocop-rails gemを作りました。(https://blog.toshimaru.net/rubocop-rails/)

このgemを使用することで↓の設定とほぼ同じrubocop.ymlファイルが作れるというものです!

https://github.com/rails/rails/blob/main/.rub

元記事を表示

Ruby で「カラオケマシン問題」を解いてみた

Rubの学習を初めて3週間あまりのプログラミング初心者です。
[「カラオケマシン問題」](https://blog.jnito.com/entry/2014/06/06/104420)にチャレンジしてみました。

“`ruby
class KaraokeMachine

@@scale = %w[C C# D D# E F F# G G# A A# B] #

def initialize(melody)
@melody = melody
end

def transpose(key)
result = Array.new
# melody に渡された文字列を(\w#?) で区切り配列とすることで#に対応
str_array = @melody.split(/(\w#?)/)
str_array.each do |str|
# scaleの要素とindex番号を変数に入れる
@@scale.each.with_index do |value, index|

元記事を表示

[ruby] each_with_index, each.index_with, each_indexの違い

### はじめに
paizaで出てきたメソッドの違いをまとめました

[参考にさせていただきました!](https://udemy.benesse.co.jp/development/system/ruby-each-with-index.html)

### 結論
“`ruby
.each_with_index
通常のeach + 0からカウントするindexを得る
.each.with_index
動きは上と同じ
.each_index
要素分+1 indexを得る
“`

#### each_with_indexとeach.with_indexの違い
`each_with_index`はindexが0からスタートする
`each.with_index(1)`と引数を渡すと(0ではなく)1番目から始められるため`i+1`とやる必要がなくなる

### 使い方
“`ruby
array = [“a”, “b”]

array.each_with_index do |a, i|
puts “「#{i} #{a}」”
end
#=> 結果
# 「0 a」
#

元記事を表示

form_withがlocal: trueなのにviewが再描画されずにはまった件

viewで`form_with`メソッドを利用してログインフォームを作ったが、`local: true`にしているにも拘らず、`render ‘new’`でログインフォームを再描画できずにはまったのでメモ。

# TL;DR
Rails 7では、form_withに対して`local: true`の代わりにオプションで`data: { turbo: false }`と指定する。

# 環境
“`bash
$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]
$ rails -v
Rails 7.0.3
“`
“`ruby:routes.rb
Rails.application.routes.draw do

get ‘/login’, to: ‘sessions#new’
post ‘/login’, to: ‘sessions#create’

end
“`

# 説明
以下ログインフォームのviewとセッション用のcontroller。

“`erb:ne

元記事を表示

【Rails】Railsのform_withでリセットボタンを設定

## はじめに
Rails の`form_with`を使用して検索フォームを実装するにあたり、リセットボタンの実装方法について調べました。

HTMLでは`input`タグで`type=”reset”`を指定すれば簡単にリセットボタンを作成できます。
“`html


“`
`form_with`でも`type属性`に`reset`を設定できるのでしょうか。

## 使用環境
– Ruby 2.7
– Rails 6.1
– Bootstrap 4.0

## type=”reset”を生成するヘルパーはなさそう
`form_with`では様々なフォーム要素を生成するヘルパーメソッドがあります。
(例)
“`erb
<%= form.text_field :title %>
<%= form.check_box :pet_dog %>
<%= form.radio_button :age, "child" %>
<%= form.text_area :message,

元記事を表示

AとBの日付の差分がn日以上ある場合、エラーになるValidationを作る。

## 概要
AとBの日付の差がn日以上ある場合、
エラーになるようValidationを作成する。

例:AとBの日付の差が10日以上ある場合、エラーになる。

 例1:
  A(4/1)
  B(4/16)
  →15日差分がある。
   →エラー。

 例2:
  A(12/30)
  B(12/21)
  →9日差分がある。
   →OK

## 日付の差分を求める
下記の書き方で日付の差分を求めてみた。

“`rb
hogehoge_on = “2022/04/01”.to_date
piyopiyo_on = “2022/04/08”.to_date

# hogehoge_on からpiyopiyo_onまでの日付の差
(hogehoge_on – piyopiyo_on).to_i.abs
# => 7

# ※to_iを入れないとよくわからない結果が出力される。
(piyopiyo_on – hogehoge_on)
# => 7/1

“`
参考:

Rubyで日時を扱うDateTimeを完全理解!計算・タイムゾーンの指定方法も解説

https:

元記事を表示

<%= render @boards %>

部分テンプレートを呼び出す際に使用される。部分テンプレートとは“`_board.html.erb“`などのことで、この部分テンプレートを繰り返し表示される際にはcollectionを使用する。

例えば

“`_board.html.erb
<%= board.title% >
<%= board.body% >
“`
この部分テンプレートをcollectionを使用せずに書くと
“`index.html.erb
<% @boards.each do |board| %>
<%= render 'board', board: board %>
<% end %>
“`
eachを使い繰り返し呼び出している。

collectionを使用し書くと
“`index.html.erb
<%= render partial: 'board', collection: @boards %>
“`
collectionに@boardを渡して、内部要素を1つ1つ取り出している。意味的にはにはeach文とほぼ同じように見えるが、まとめて部分テンプレート呼び出すためパフォーマンスが良

元記事を表示

Before Rails Tutorial1章 Paizaでの環境構築

## はじめに

## [対象者]
+ Ruby HTML CSSをある程度理解しているが、Rails Tutorial で挫折した。
+ **不安なので誰かの解説を受けながら一緒に作りたい。**
+ **「Railsで試しにアプリケーションを作りたいが、何も思いつかない」**

## [前提知識]
全ての知識が必要ではありませんが、Railsの前に学習しておくことを推奨します。
Railsの学習をはじめた初学者が陥る問題として、Rails以外の関連知識が不足しているため
挫折するといったケースが多く見受けられます。

未学習の方は Progate の下記コースを奨めています。

#### 学習済であることが推奨される
**【HTML&CSS】 基礎(入門書や [Progate HTML & CSS](https://prog-8.com/courses/html))レベル**
**【Ruby】 基礎(入門書や [Progate](https://prog-8.com/courses/ruby))レベル**
**【データベース】 基礎 (https://products.sint.c

元記事を表示

【Ruby】意外と知らない!?標準入力から値を受け取る方法

## 標準入力?
### 標準入力とは
標準入力はプログラムに値を渡す入力元のこと、標準出力はプログラムから出力される値の出力先のことをいいます。 標準入力の仕組みを使うと、キーボードやファイルなど外部から値(データ)をプログラムに与えることができる。

### 前提条件
前提として使用言語は、Rubyになることを予めお伝えしておきます。
そしてPaizaにて標準入力があったため、メモを含めて記事にします。

## 1行に1要素だけの場合
“`
//標準入力
Tokyo

line = gets
p line

//出力結果
“Tokyo”
“`

## 1行に複数要素があった場合
“`
//標準入力
Tokyo Osaka Kyoto

line = gets.split(‘ ‘)
p line

//出力結果
[“Tokyo”, “Osaka”, “Kyoto”]
“`

※splitはsplit(”)のシングルクォート内の文字で文字列を分解する。
例えば、Tokyoという文字をそれぞれ一文字ずつ取得したければ、シングルクォートの中に何も入れずにすると下記のように取得でき

元記事を表示

【Ruby】意外と初心者は知らない?頻出メソッド

## Rubyでの頻出メソッドをまとめてみた
### 入力メソッド
“`
//入力値:文字列
input = gets

//入力値:文字列
input = gets.chomp

//入力値:数値
input = gets.to_i

//入力値:数値
input = gets.chomp.to_i
“`

上記は文字列および数字を入力する際のメソッドである。
それぞれ二つずつ書いているが、その違いは**改行があるかないか**の違いである。
**chomp**をつけることによって改行がなくなる。

### 配列メソッド
“`
//入力値(数値)を配列に格納 
input = gets.split.map(&:to_i)

//分割して配列に格納
a,b,c = gets.split(” “).map &:to_i

//入力値を順番に格納
a = readlines.map &:to_i
“`
gets.split.map(&:to_i)は**スペース区切りで数値が並んでいる入力**ができる。
たまにsplit(“”)と引数に区切り文字の半角スペースを指定している人を見かけ

元記事を表示

【Rails】コメント機能をAjax実装① 準備編

コメント機能を実装したので、記録を残します___φ(•ᴗ•๑)
間違っている箇所があれば、ご指摘頂けると大変助かります。

実装内容

・投稿記事に対してコメント機能をつける
・ログインユーザーのみコメント可能
・投稿・削除・更新を非同期で実装する

前提
—–
・Rails6
・Devise導入済
・jQuery導入済
・Bootstrap5
・記事投稿機能を実装済

準備

#### (1)Commentモデルを作成

Commentモデルに、user_idとpost_idを忘れずに追加します。
“`
rails g model Comment body:text user_id:integer post_id:integer
rails g db:migrate
“`

モデルにアソシエーションとバリデーションを追加します。
“`ruby
class Comment < ApplicationRecord belongs_to :user belongs_to :post validates :body, presence: true

元記事を表示

DockerでRails6の環境構築

# 前置き
DockerやGitなどはインストール、初期設定済みのものとします
新規にアプリを作成するときに毎度調べるのも面倒なので備忘録として

### 環境
– MacOS Monterey(cpu intel)
– Docker -v 20.10.16
– docker-compose v2.3.3
### 構築内容
– Rails6
– DB postgresql

# 手順
– 必要なディレクトリとフォルダを用意
Docments下に作成するアプリのディレクトリを作り、移動
“`
$ mkdir myapp
$ cd myapp
“`
必要なフォルダを作成
“`
$ touch Dockerfile Gemfile Gemfile.lock docker-compose.yml entrypoint.sh
“`
dockerfileに記述
“`
FROM ruby:2.7.4

## nodejsとyarnはwebpackをインストールする際に必要
# yarnパッケージ管理ツールをインストール
RUN curl -sS https://dl.yarnpkg.co

元記事を表示

session”メソッド”って本当にメソッドなの?

# はじめに

session **”メソッド”** って言うけど、使われ方が全然メソッドっぽくない。

sessionメソッドは以下のようにして使われる。

“`ruby
session[:user_name] = user.name
“`
まるでハッシュのようだ。

しかも

“`ruby
session.class
=> ActionDispatch::Request::Session
“`

というふうにあたかもsessionというオブジェクトに対して`class`メソッドが使えているように見える。

果たして本当にsessionはメソッドなのだろうか?

## 先に結論

メソッドである。

コントローラー内でbyebug↓

“`ruby
(byebug) defined? session
#=> “method”
“`

続けてsessionとだけ打ってみる。

“`ruby
(byebug) session
#

元記事を表示

OTHERカテゴリの最新記事