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

Ruby関連のことを調べてみた2022年02月11日
目次

Rubyを実行する方法

# Rubyを実行する方法
##### irb(REPL)を使う
“`zsh
$ irb
irb(main):001:0>
“`
> REPL(Read-eval-print loop、 対話型評価環境)
> 日本語を使うにはreadlineというライブラリが必要(2.6系以前だとうまくいかないこともあるらしい)

##### 拡張子rbのファイルにプログラムを記述してターミナルで以下の形で実行
“`zsh
# rubyはスクリプト言語(見た目上コンパイルをしなくていい言語、裏で勝手にコンパイルをやってくれる言語)のため、この形で実行可能
$ ruby ファイルのパス
“`

##### ワンライナーを使用する
> 後日編集します

##### shebangを使用する(macOS/Linuxのみ)
“`hello.rb
#! usr/bin/ruby
or
#! usr/bin/env ruby
or
# which ruby で出てきたrubyを置いてるディレクトリを#!の後に指定する
# 上の行のいずれか1行でインタプリタ(機械語に翻訳する時に使う翻訳機、いろんな言

元記事を表示

【Rails】erbファイルのコメントアウト方法

# はじめに
プログラミング初学者の[@kat_log](https://twitter.com/kat__log “Twitter”)と申します。

railsの`.html.erb`形式のファイルのコメントアウト方法の共有です。

# 方法
**<%の直後に`#`を付ける。** ↓こんな感じです。 `<% コード %>`なら`<%# コード %>`
`<%= コード %>`なら`<%#= コード %>`

# おわりに
お読みいただきありがとうございました。
学習中の方、一緒に頑張っていきましょう〜?

# 参考
http://rails.takayukikoyama.com/erb/erb-comment/

元記事を表示

Railsのassert_templateとassert_selectの使い方

#はじめに
Railsチュートリアルを進めている中でassert_templateとassert_selectの二つのメソッドについて一旦自分なりにまとめておきたいので記事にします。

#assert_templateメソッドについて

レスポンスが正しいテンプレートとレイアウトを描画していることを検証する。

/users/new.html.erbが描画されているかどうかを検証する

“`rb
assert_template ‘users/new’
“`
assert_templateについてまだあるようなのですが現時点では理解しずらいと感じたため今後追記します。

#assert_selectメソッドについて
アクション実行の結果として描写されるHTMLの内容を検証する。
また、HTML要素内にキーが存在することを主張することで、 リクエストに対するレスポンスとなるビューの内容をテストする事が出来る。

#####assert_selectには2つの書式がある。

1. assert_select(セレクタ, [条件], [メッセージ])という書式は、セレクタで指

元記事を表示

selectメソッドとそれに関するメソッドの解説

「collectメソッドと同じメソッドを選べ」という問題は頻出なので、この際にまとめようとおもいます

## selectメソッド
selectメソッドは、調べたブロックが真であった場合、その要素を返すメソッドです。
真であるものがなかったら、空の配列が返ってきます
“`
(1..10).select {|i| i % 2 == 0 }
=> [2, 4, 6, 8, 10]

[3, 5, 7, 9].select {|i| i % 2 == 0 }
=> []
“`
### 似てるけど、違うメソッド
#### rejectメソッド
rejectメソッドは、調べたブロックの中で、偽であった要素を返すメソッドです。
偽であるものがなかったら、空の配列が返ってきます
“`
(1..10).reject { |i| i % 2 == 0 }
=> [1, 3, 5, 7, 9]

[2, 4, 6].reject { |i| i % 2 == 0 }
=> []
“`

#### grepメソッド
条件に一致した要素を配列で返します。条件に一致した要素がなかった場合、空の配列が返っ

元記事を表示

MacOSでHomebrewを使ってruby3.0.3の環境構築をしてみた

# Hello, World!
– 初投稿になります。
– 優しい目で見てもらえると嬉しいです

# 今日の学習内容
#### [パッケージ管理ツール(Homebrew)のインストール](https://brew.sh/index_ja)
#### rbenvを使用するためのプラグイン(ruby-build)をインストール
“`zsh
# homebrewをインストールしたばかりの人
$ brew install ruby-build

# homebrewを既にインストールしている人
$ brew update

# ruby-buildを既にhomebrewでインストールしている人
$ brew update
$ brew upgrade ruby-build
“`

#### rubyのバージョン管理ツール(rbenv)を使用してruby3.0.3をインストール
“`zsh
# インストールできるrubyのバージョンを確認(上に書いた更新をしていないと最新のバージョンが出てこない)

$ rbenv install –list
2.6.9
2.7.5
3.0.3
3.1.

元記事を表示

Rails:ローカルでのタスクとHerokuの環境設定やDB操作など

## ローカル環境
コンソールの準備

“`:terminal
$ rails c
“`
タスクの読み込み
これで `schedular.rake` のタスクを利用できる

“`:terminal
$ Rails.application.load_tasks
“`
タスクの実行
“`:terminal
$ Rake::Task[‘タスク名’].execute
“`

## Heroku環境
ログ出力

“`:terminal
$ heroku logs -t
“`

環境変数の設定

“`:terminal
$ heroku config:set キー=”値”
“`

環境変数の確認

“`:terminal
$ heroku config
“`

データベースの情報取得

“`:terminal
$ heroku pg:credentials:url –app アプリ名
“`

データベースの操作

“`:terminal
$ heroku pg:psql -c SDL文
例) heroku pg:psql -c “select * from user

元記事を表示

相互フォローしている人限定でDMを送れるようにする。

地球の皆さんこんにちは。
今回は、この私が理解に苦しんだ、相互フォローしている人限定で、DMのやりとりをできる方法を解説します。
私は、これまでプログラミングというものをやってこなかった…..そう、やってこなかったのです。
この苦しみ….あなたにわかりますか?わからないというなら……!くらえ!!!!

それでは、さっそく始めていきましょう。

>Rails 6.1.4
Ruby 2.6.3
Bootstrap, devise導入済み
Bookの投稿サイトを作っています

前提条件

Userモデル、コントローラ
relationshipsモデル、コントローラー(フォロー機能実装のためのもの)
以上が作成済みであること。

ちなみに私の好きな食べ物はオムライスです。

モデルを作ろう

さあ!ここで問題です。今から何を作るでしょうか!?
チッチッチッ……..
ヒントは好きな食べ物です!!!
さあ!答えをどうぞ!!!

そう!!モデルを作ります!!

“`ruby
rails g model Chat user_i

元記事を表示

DockerでRails7プロジェクト作成する方法 Rails7 + Mysql + esbuild + tailwind + pry-rails(デバッグツール)

# Dockerfile作成

まずはruby3とnodejsを使えるようにする

“`
FROM ruby:3.0

ENV APP /app
RUN mkdir -p $APP && \
apt-get update -y && \
apt-get install default-mysql-client nodejs npm -y && \
npm uninstall yarn -g && \
npm install yarn -g -y
COPY . $APP/

WORKDIR $APP
“`

# docker-compose.yml作成

“`docker-compose.yml
version: ‘3’
services:
app:
restart: always
build:
context: .
volumes:
– .:/app
“`

# イメージビルド実行

“`
docker-compose build
“`

# イメージビルドの確認

“`
docker i

元記事を表示

[py2rb] tempfile

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# tempfile (Python)
“`python
import tempfile

def test_tmpfile_text(self):
with tempfile.TemporaryFile(mode=’r’) as f:
self._check_file_object(f, False)
“`
おおぅ

https://docs.python.org/ja/3.7/library/tempfile.html
# どうすRuby
“`ruby
require ‘tempfile’

def test_tmpfile_text
Tempfile.open(“temp”){ |f|
_check_file_object(f, false)
}
end
“`
https://docs.ruby-lang.org/ja/latest/class/Tempfile.html

気になるのは、`te

元記事を表示

【pluckの使い方】複数のデータがあり絞り込みが出来ない場合

●状況
DBに大量にデータのあるテーブルA、テーブルB、テーブルCが存在する

①テーブルBはテーブルAのカラム1と一致するデータを検索
②テーブルCは、上記で絞り込んだテーブルBのカラム2と一致するデータを検索

“`ruby:model
テーブルA.each do |sample|
hoge = テーブルB.where(カラム1: sample.カラム1)
hoge2 = テーブルC.where(カラム2: hoge.カラム2)

〜省略〜

end
“`

上記を実行すると、「underfind method カラム2 for 〜」とエラーが発生する。

●解決策
テーブルCが複数のデータが必要な場合、
一度hogeの時点でカラム2の配列情報にして渡す必要がある。

現状の内容は、
hogeの内容を見ると下記のように「ActiveRecord::Relation」型となっている。

“`
#=>,
#

元記事を表示

[py2rb] warnings.catch_warnings(record=True)

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# warnings (Python)
“`python
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter(‘always’)
result = aux._check_use_index(fo, None, None)
self.assertEqual(len(w), 0)
“`
やっていることは、警告を発生させてその回数を確認している様子。

https://docs.python.org/ja/3.7/library/warnings.html
# どうすRuby
“`ruby
module Warning
def self.warn(message, category: nil)
@count += 1
end

def count
@count
end

def re

元記事を表示

▸ Error: docker build exited with Error: 1 & executor failed running [/bin/sh…] : exit code: 100 の対処法

だれでもエンジニア / 山浦清透 さんの[Docker超入門講座 合併版 | ゼロから実践する4時間のフルコース](https://www.youtube.com/watch?v=lZD1MIHwMBY)を拝見している時に、

“`:Command
Error: docker build exited with Error: 1
“`
とエラーが出てしまいました。。

#検証 1

https://qiita.com/akira-i/items/54462f5bd7fca868a818

を参考にしてVersionを変更してみましたが、エラーは解消されず。
https://gyazo.com/36e0631b46d5efc80180f35bcc338abc
ubutuの時は、バージョン変更でいけるらしいが、Rubyはどうやら違うぽい。

#検証2
Errorコードをよく見てみると

“`
ERROR [2/7] RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add – && echo “de

元記事を表示

Railsのid列は必ずしもきれいな連番にはならないんですよ、という話

## はじめに
Railsでモデルを作ると、テーブル定義上のid列(プライマリーキー)はデフォルトで自動的に連番が付与されるカラム(auto increment値)になります。

とはいえ、idにしたからといって必ずしも連番になるとは限りません。場合によっては「歯抜け(ギャップ)」が発生こともあります。
そのため、「idの最大値=そのテーブルの件数」になるとは限りません。

つまり、こういうデータが作成されることもありうる、ということです(たとえ一度もDELETEされなかったとしても)。

| id | name |
|—-|——-|
| 1 | Alice |
| 2 | Bob |
| 5 | Carol |

そこでこの記事ではRDBMS別にidの連番が歯抜けになるケースを見ていきます。

## この記事で使用するサンプルアプリ
この記事で使用するのは以下のようなモデルを1つだけ持つ、単純なRailsアプリです。

“`ruby
class Item < ApplicationRecord end ``` ```ruby:db/schema.rb A

元記事を表示

アプリを作る アカウントを有効化する

###app/models/user.rb
“`app/models/user.rb
class User < ApplicationRecord # 継承させる attr_accessor :remember_token, :activation_token before_save :downcase_email before_create :create_activation_digest validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: fals

元記事を表示

rubyで複数行の文字列を表現する方法(ヒアドキュメント)

# 概要
この記事ではRubyで複数行の文字列を表現するためのSyntaxをざっくり解説したいと思います。

## 謝辞
* 株式会社X-HACKさんで[PARKLoT](https://www.park-lot.com/)というTwitterインスタントウィンサービスのバックエンド開発をお手伝いさせていただいております。本記事ではその経験で得られた知識をアウトプットしています。ありがとうございます。
* 参考にさせていただいた記事は以下の通りです。ありがとうございます。
* [(Qiita) rubyで複数行の文字列](https://qiita.com/nomuyoshi/items/819942f06cc4c7fd8a26)
* [ヒアドキュメントを使って複数行を 1 つの文字列にする方法](https://bayashita.com/p/entry/show/189)

## 書き方

“`ruby
str = <<"EOS" hello world EOS # => 変数strに改行された文字列”hello\nworld\n”が代入される
# 上記

元記事を表示

【Ruby】dynamic constant assignmentというエラー

#状況
ページタイトルをapplication helperを使って動的に表示するために、以下のコードを書いた。

“`ruby:application_helper.rb
def full_title(page_title)
BASE_TITLE = “title”
BASE_TITLE.freeze
if page_title.empty?
BASE_TITLE
else
page_title + ” – ” + BASE_TITLE
end
end
“`
ここで、BASE_TITLEは定数であるため、UPPER_SNAKE_CASEで定義している。
またrubyにおける定数は再定義ができるソフトな(破壊的変更が可能な)代物なので、再定義ができないようにfreezeメソッドを使って凍結しておいた。

実行した結果、
syntax errorとして以下のエラーが表示された

“`
dynamic constant assignment
BASE_TITLE = “title”
^~~~~~~~~~
“`
#対処法
メソッドの外で定数を定義す

元記事を表示

ruby配列作成時のコードが理解できなかったので、調べてみた。

##はじめに
railsのテストについて学習している時、何気なく出てきたコードが読めなかったので、備忘録として記録します。

以下の記事について学習していました。
[使えるRSpec入門・その2「使用頻度の高いマッチャを使いこなす」](https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5)
何気なく出てきた、確率を求めるrubyのコードとそのテストコードの内容が初見で理解できなかったので、そのことについてです。

##問題のコード

~~~ruby:lottery.rb
class Lottery
KUJI = %w(あたり はずれ はずれ はずれ)
def initialize
@result = KUJI.sample
end
def win?
@result == ‘あたり’
end
def self.generate_results(count)
Array.new(count){ self.new }
end
end
~~~
~~~ruby:spec/lottery_spe

元記事を表示

[py2rb] 部分適用

# はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
# partial (Python)
“`python
from functools import partial

def partial_func(name, value):
print(name, value)

func1 = partial(partial_func, ‘aa’)

func1(‘bb’)

# aa bb
“`
https://docs.python.org/ja/3.7/library/functools.html#functools.partial

https://qiita.com/sporty/items/4c7af5dd6a457dff3a57

ふむふむ。
# どうすRuby
“`ruby:lambda.rb
func2 = lambda do |name|
partial_func = lambda do |value|
puts “#{name} #{value}”
end
end

func1 = func2.ca

元記事を表示

RSpecでit / example / specifyはどのように使い分けるのか?〜日本語で書くならexampleって本当?〜

## はじめに

最近ときどき「RSpecで`it`/`example`/`specify`をどのように使い分けたら良いのか」という話題を見かけるので個人的な私見を書いてみます。

## 使い分けに何か決まりはあるのか? → 技術上の決まりは何もありません

`it`/`example`/`specify`は技術的にはまったく同じメソッドです。なので、`it`を`example`や`specify`に置き換えても問題なく動きます。

“`ruby
# itを使う
it ‘adds numbers’ do
expect(1 + 1).to eq 2
end

# itの代わりにexampleを使う
example ‘adds numbers’ do
expect(1 + 1).to eq 2
end

# itの代わりにspecifyを使う
specify ‘adds numbers’ do
expect(1 + 1).to eq 2
end
“`

日本語と英語で使い分けが必要、なんてこともありません。

“`ruby
# itを使う
it ‘数値を加算する

元記事を表示

rubyでの改行

rubyで、\nのようにして改行する方法は知っていたのですが、ほかにも改行するやり方があったので、それを紹介しようとおもいます。

##+を使った際の改行
“`
p (2+
1)
=> 3

p (2\
+1)
=> 3

p(2
.+1)
=> 3
“`

##文字列とシンボル、そして数値を改行する

“`
p “ho\
ge”
=> “hoge”

#\の直後にスペースが入っている
p “hoge\
ge”
=> “hoge \nge”

p :”ho\
ge”
=> “hoge”

p 10\
1
=>SyntaxError
“`

##ピリオドによる改行

“`
p 3.
to_s
=> “3”

p 3
.to_s
=> “3”
“`
ピリオドの場合は、ピリオドが改行前にあるか、改行後にあるかは関係ないんですね。

##メソッドを使うときの改行

“`
def hoge(a);
p “hoge:#{a}”
end

hoge(1)
=> “hoge:1”

hoge(
1)
=> “hoge:1”

hoge\
(1)
=> “hoge

元記事を表示

OTHERカテゴリの最新記事