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

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

任意の文字列から特定の連続する文字列を探し、その直前の値により「True」または「False」を出力するプログラムを実装

任意の文字列から特定の連続する文字列を探し、その直前の値により「True」または「False」を出力するプログラムを実装します。

以下の要件を満たすxyz_thereメソッドを実装します。
——

– 任意の文字列から連続する文字列”xyz”を探し、その直前にピリオド(.)がない場合はTrueを出力する
– 任意の文字列から連続する文字列”xyz”を探し、その直前にピリオド(.)がある場合はFalseを出力する
– 上記2つの条件に当てはまらない場合はFalseを出力する

出力例
—-

xyz_there(‘abcxyz’) → True
xyz_there(‘abc.xyz’) → False
xyz_there(‘xyz.abc’) → True
xyz_there(‘azbycx’) → False
xyz_there(‘a.zbycx’) → False

include?メソッドを使いましょう。
————
include?メソッドは、指定した要素が配列または文字列に含まれているかを判定するメソッドです。

“`Ruby
str = “

元記事を表示

【Rails】routesのエラー「“’: No such file or directory 」の対処法

症状

railsで新たにアクションを追加しようと、routeファイルにルートを追加してサーバーを起動したところ下記のエラーが発生しました。
翻訳すると、「そのようなファイル、又はディレクトリはありません」でした

“`ruby:error
rails s
=> Booting Puma
=> Rails 6.0.4.1 application starting in development
=> Run `rails server –help` for more startup options
Exiting
D:/app/config/routes.rb:28:in “’: No such file or directory – checkout (Errno::ENOENT)
from C:/appu/config/routes.rb:28:in `block (3 levels) in


from C:/Ruby30-x64/lib/ruby/gems/3.0.0/gems/actionpack-6.0.4.

元記事を表示

変数の後ろにカンマがついている

##変数の後ろにカンマがついている問題があったので備忘録として記しておきます

“`Ruby:main.rb
#変数の後ろにカンマを付ける
a, = (1..5).partition(&:odd?)
p a => [1, 3, 5]

#カンマを付けない
b = (1..5).partition(&:odd?)
p b => [[1, 3, 5], [2, 4]]
“`
カンマを後ろに付けることで多重代入になる。今回の問題でいうとカンマを付けることで2個目の変数の枠が用意されるが2個目の変数を宣言していないことによって[2, 4]の配列がなくなり、[1, 3, 5]が表示される。

:::note info
partitionメソッドは指定した条件に一致するか否かで配列を分割します。

元記事を表示

【Ruby】二重ハッシュ

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_dataがあります。

“`ruby
user_data = [
{user: {profile: {name: ‘George’}}},
{user: {profile: {name: ‘Alice’}}},
{user: {profile: {name: ‘Taro’}}},
]
“`

user_dataを利用して、全てのユーザーの名前だけが出力されるようにRubyでコーディングしてください。
ただし、出力結果は次のようになるものとします。

“`
George
Alice
Taro
“`

##解答##

“`ruby
user_data.each do |u|
puts u[:user][:profile][:name]
end

あるいは
user_data.each{ |u| puts u.dig(:user, :profile, :name) }
“`
##解説#

元記事を表示

ローカルリポジトリからインストールした際、Ruby関連ファイルのみ「モジュールメタデータは利用不可です」と表示された件

オフライン環境のRHEL8.4にパッケージ導入時したときの話。

##環境
OS:RHEL8.4
オンライン環境:Aサーバ
オフライン環境:Bサーバ
※ともにGUIインストールしただけの状態。

##初めに
AサーバにてRPMパッケージを、Ruby含めざっくり90ファイルほどダウンロードしてローカルレポジトリを作成。
作成したリポジトリをzip圧縮してBサーバに展開。

/etc/yum.repos.d/にrepoファイルを作成後、dnf repolistに登録がある事を確認。
ターミナルから下記コマンドを実行

dnf –disablerepo=* –enablerepo=***_repo install [パッケージ名]

下記のようなエラーが出でました。
※見やすいようにエラーMSGは成形してます。
“`
モジュラーパッケージ ‘ruby-2.5.9-107.module+el8.4.0+10822+fe4fffb1.x86_64’ のモジュラーメタデータは利用不可です
モジュラーパッケージ ‘ruby-irb-2.5.9-107.module+el8.4.0+10822+

元記事を表示

Railsで複数レコードを更新する書き方メモ

#はじめに
Railsで複数レコードを作成、更新する際にActiveRecord::Base.transactionをどのように用いるかを調べた際のメモです。
主に以下を参考にさせていただきました。
https://qiita.com/aba0312/items/8b29cafe6b505b6a7a4f

#例
例えば、ユーザーのバルクインサートを行う際に全てのインサートが成功しなければロールバックするという想定をします。

“`ruby:User.rb
class User < ApplicationRecord def self.bulk_create(users) all_valid = true transaction(join_table: false, requires_new: true) do users.each do |user| # 何らかの処理 all_valid &= user.save end

元記事を表示

Ruby &=

“`ruby
# +=や*=と同様に考えれば&演算子の意味がわかれば理解できる
foo &= bar
# これは foo = foo & bar を意味する
“`

#&演算子
積集合を意味する

“`ruby
# Arrayの積集合
[1, 1, 2, 3] & [3, 1, 4]
=> [1, 3]

# TrueClass, FalseClassにも利用できる
true & true
=> true

true & false
=> false

false & false
=> false

nil & true
=> false

nil & false
=> false
“`

元記事を表示

【Rails】form_withとは?

##form_withとは?

form_withは、htmlのformタグを生成するためのメソッド。

##どうなるの?
「生成する」というのは少し難しい表現ですが、「置き換わる」と考えても問題ありません。
つまり、form_withのところに、

元記事を表示

Ruby attr_reader, attr_writer, attr_accessorについて

#結論
attr_readerを用いるとアトリビュートを**読み取る**メソッドが定義される。
attr_writerを用いるとアトリビュートを**書き込む**メソッドが定義される。
attr_accessorを用いるとアトリビュートを**読み取る**メソッドと**書き込む**メソッドの両方が定義される。

##公式リファレンス
**attr_reader**
https://docs.ruby-lang.org/ja/latest/method/Module/i/attr_reader.html
**attr_writer**
https://docs.ruby-lang.org/ja/latest/method/Module/i/attr_writer.html
**attr_accessor**
https://docs.ruby-lang.org/ja/latest/method/Module/i/attr_accessor.html

#attr_reader
“`ruby
class User
attr_reader :id, :name
def initiali

元記事を表示

Rails memberとcollectionの違い

#結論
memberを用いることでidを用いて特定のリソースに対してアクションを実行することができ、collectionを用いることで全てのリソースに対してアクションを実行することができる。

##公式API
**member**
https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-member
**collection**
https://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Resources.html#method-i-collection

#member
“`ruby:routes.rb
resources :users do
member do
get :hoge
end
end
“`
memberを使うとルーティングは以下のようになります。
![スクリーンショット 2022-01-10 15.28.02.png](https://qi

元記事を表示

[Ruby]Stringクラスのsliceメソッド

学習したことのアウトプットとして

# sliceメソッド
rubyの組み込みライブラリ
配列や文字列から指定した要素を取り出すことができるメソッド
取り出したとしても、配列や文字列はもとのまま
例)

“`ruby
# 配列を作成します
array = [0,1,2,3,4,5,6]

# 配列から引数で指定した要素を取得します
ele1 = array.slice(1)
puts ele1
#=> 1

# 配列番号-4から4つ分の要素をsliceします
ele2 = array.slice(-4,4)
puts ele2
#=> 3, 4, 5, 6

# 配列はもとのままです
puts array
#=> [0,1,2,3,4,5,6]
“`

**slice!**(破壊的メソッド)だとオブジェクト自身の内容は変更される
例)

“`ruby
string = “this is a string”
string.slice!(2) #=> “i”
string.slice!(3..6) #=> ” is ”
string.slice!(/s.*t/

元記事を表示

【Rails】ajax化とは

##ajax化とは
Asynchronous JavaScript + XML の略で、非同期通信と呼ばれる通信方法のこと。
Webブラウザ上で非同期通信を行い、ページ全体の再読み込み無しにページを更新する。

##同期通信、非同期通信とは?
**◆同期通信**
クライアントとサーバー間の通信においては、通常、同期通信と呼ばれる方法が用いられ、“一瞬画面が白く“なった後、画面が切り替わるような通信は、全てこの同期通信となる。

ページが一瞬真っ白になってから表示されるまでの間は、“ユーザーは他の操作を何もする事が出来ない。“また、同期通信は“ページ全体を1から作成して表示させている“ので、どうしても表示までの“時間がかかる。“

[![Image from Gyazo](https://i.gyazo.com/d839480fa2bd646c00eadd4e729af8ab.png)](https://gyazo.com/d839480fa2bd646c00eadd4e729af8ab)

**◆非同期通信**
一方、非同期通信では、クライアントからのリクエスト送信後、

元記事を表示

インフラ素人が3週間でWebサービスのインフラを0から構築するためにやったこと

#目次
[1. インフラ設計](#1-インフラ設計)
[2. ネットワーク構築](#2-ネットワーク構築)
[3. サーバ・DB構築](#3-サーバdb構築)
[4. Lambdaによる自動化](#4-lambdaによる自動化)
[5. Amazon SES・SNS](#5-amazon-sessns)
[6. 開発環境構築(docker)](#6-開発環境構築docker)
[7. jenkins・phpmyadminなど開発ツール設定](#7-jenkinsphpmyadminなど開発ツール設定)
[8. VPN接続](#8-vpn接続)
[9. 起きた変化](#9-起きた変化)
[10. おまけ](#10-おまけ)

# はじめに
インフラ素人同然レベルだった私が実務において、Webアプリケーションのインフラを0から構築することになりました。

期間は約3週間、**インフラ設計から行い、構築したインフラ上でWebサービスが稼働できる状態**まで持っていくことがゴールになります。 

約3週間の間、AWSやミドルウェア周りの技術に触れ、今まで考えてもみなかった知識の習得や、多くの

元記事を表示

[Ruby] irbを使ってこなかった、自称エンジニア

# はじめに
プログラミングスクールに通い、3ヶ月が経ちました。
学習中はirbやrails cなどを使い学んできたが、実際にオリジナルアプリを作る時に全く使っていない。。。
このままでは自称ミュージシャン、自称芸人と並んで自称エンジニアになる気がしたので、「irb」について記事にしました。

# irbってなんなんだ?

REPL(Read-eval-printloop、対話型評価環境)
### つまりREPLとは
プログラミング言語の実行環境の一つで、利用者が入力欄にキーボードなどから式や文を一行入力すると、即座に解釈・実行して結果を返し、再び入力可能になるもの。インタプリタの一種。

### Rubyに用意されているirbと呼ばれるREPL

# どのような時に使うのか
###・動作確認に使われる

その他動作確認では、
〇〇.rbとファイルを作り
     ↓
テキストエディタでコードを記述し
     ↓
ターミナルで%ruby 〇〇.rb と打ち込むと確認できます。
が、手間がかかりますよね?

【devise】暗号化前後のパスワードが一致しているか判定するメソッド

## 実現したいこと
Railsでdevise gemを使っている環境にて、暗号化前のパスワードが暗号化後のパスワードと一致しているか確認したい。
例えば、以下のようなケースです。

– 「このパスワードで設定したはずだがログインできず、パスワードがちゃんと設定されてるか確認してほしい」という問い合わせに対して調査する場合
– 有効期限を持たせた複数のパスワードを、過去履歴を含めてDBに保持しており、古いパスワードが入力された場合に「それは古いパスワードです」とアラートを出したい場合

deviseでは、パスワードは暗号化されDBに保存されているため、DBのレコードを参照するだけだと、元のパスワードがどんなものだったかわかりません。

## 解決方法
「入力されたパスワードを自力で暗号化したものでDBを検索する」という方法もありますが、そこまでしなくても一発でわかる`valid_password?`メソッドがdeviseで用意されています。
レシーバにはActiveRecordインスタンス(パスワードが保存されたレコード)、引数に暗号化前のパスワードを指定します。

## 基本例

[Ruby] Stringクラスのinclude?メソッド

学習したことのアウトプットとして

# include?メソッド
Rubyの組み込みライブラリ
指定した値が含まれているかを判定するメソッド
指定した値が含まれている場合はtrueを、含まれていない場合はfalseを返り値として返す

### Arrayのinclude?メソッドを使用する場合
指定した値が、配列中に含まれているかを判定する

“`ruby
a = [ “a”, “b”, “c” ]
a.include?(“b”) #=> true
a.include?(“z”) #=> false
“`

### Stringのinclude?メソッドを使用する場合
文字列中に部分文字列が含まれていれば真を返す

“`ruby
“hello”.include? “lo” #=> true
“hello”.include? “ol” #=> false
“hello”.include? ?h #=> true
“`

※補足等がありましたらコメントいただけると幸いです

Neri を使って Ruby スクリプトを実行ファイル(.exe)に変換して配布する

Ruby で書かれたスクリプトを Ruby の入っていない Windows 環境に向けて配布するツールとしては、[OCRA](https://github.com/larsch/ocra) という gem が有名です。

しかし OCRA にはいくつかの欠点[^1]があったため、[Neri](https://github.com/nodai2hITC/neri/blob/main/README.ja.md) という gem を作成しました。このたび ver 1.0 を公開し、今までより多くの Ruby スクリプトを実行ファイルに変換できるようになったので、Neri を使って Ruby スクリプトを実行ファイルに変換するチュートリアルを書いてみたいと思います。

[^1]: 作成当時は OCRA には「日本語ユーザー名の環境では実行できない」という欠点があったのですが、現在は解消されたようです。ただ、x64 版の Ruby を使っていると libssp-0.dll や libgmp-10.dll がデフォルトでは同梱されずエラーになることがあるようで、その場合

“`
ocra

rails 7.0では`config/initializers`配下のファイルが少なくなっている

# 概要

`rails new`直後の`config/initializers`配下の初期化ファイルの数が多くユーザの認知的負荷につながっていました。
その中には必ずしもすべてのアプリケーションに必要とは限らない設定や、過去のアップグレードの中で既に不要になっている可能性がある設定が存在していたため、今回ファイル構成が見直され不要あったと判断されたファイルが削除されました。

## rails7.0以前

バージョン7.0以前のrailsでは`rails new`時にアプリケーションの初期設定のファイルが`config/initializers`配下に10ファイル作成されていました。

“`
$ rails -v
Rails 6.1.4.4
$ rails new sample_app
$ tree config/initializers/
config/initializers/
├── application_controller_renderer.rb
├── assets.rb
├── backtrace_silencers.rb
├── content_security_

「フィボナッチ数を出力せよ」をRubyで

https://qiita.com/Nabetani/items/2441696a019317173f61

鍋谷さんの課題をやってみた。

#コード

めっちゃ恥ずかしいのだけれど、素朴なやり方しか思いつかなかった。

“`ruby:Ruby
b, c = ARGV.map(&:to_i)
tm = Time.now

nxt = 1 + c
b1 = 1
s, t = 0, 1
(0..).each do |n|
break if Time.now – tm > 1.0
if nxt == n
str = s.to_s
result = “f(#{n})=”
result << if (l = str.length) <= 5 str else str[0, 2] + "(ommit #{l - 4} digits)" + str[-2, 2] end puts result b1 *= b nxt = b

【Ruby】処理に名前をつけて使おう② calculate_price_with_taxメソッド

※初心者向け
※アウトプット練習の為

開発環境
rails 6.1.4.1
ruby 2.6.5

##問題内容##
以下のプログラムを実行するとエラーが起きます。
①エラーが起きた原因
②正しいソースコード(引数を用いたコードにしましょう)
をそれぞれ答えてください。
**実行したプログラム**

“`ruby
price = 300

def calculate_price_with_tax
tax = 0.1
puts price + price * tax
end

calculate_price_with_tax

“`

##解答##
**①エラーが起きた原因**
メソッドの外側で定義した変数は、メソッドの内側では使えない。そのため、1行目のpriceはcalculate_price_with_taxメソッドの中では使えずにエラーが起きる。

**②正しいソースコード**

“`ruby
price = 300

def calculate_price_with_tax(price)
tax = 0.1
puts price + price * ta