Ruby関連のことを調べてみた2020年05月27日

Ruby関連のことを調べてみた2020年05月27日
目次

MySQLのモードに関して

# 自分のローカルで設定されているモード

“`
$ mysql –version
mysql Ver 14.14 Distrib 5.7.29, for osx10.15 (x86_64) using EditLine wrapper
$ mysql -uroot -p
mysql> select @@global.sql_mode;
+——————————————————————————————————————————————————+
| @@global.sql_mode |
+——————-

元記事を表示

【Ruby】僕がしていたモジュールにしていた勘違い【初学者】

Rubyの勉強中の僕がしていたモジュールに関する勘違いを勝手に紹介します。

⬇勘違いしていたときのコード⬇
ruby_module1.png
⬇正解コード(間違いがあればご指摘いただけると幸いです)⬇
ruby_module2.png
違いとしてはモジュールの記述されている「thinkable.rb」に
“`require “./human”“`
があるかないかの違いです。
実際、あってもなくても実行結果に変化はありませんがこの記述は

元記事を表示

こんなソースコードはイヤだ-クォーテーションはシングルなのダブルなの?

プログラムのソースコードのより良い書き方をまとめていこうと思います。

# クォーテーションはシングルなのダブルなの?

“`sample.sh
name=”Taro”
age=19
country=’Japan’
greeting=”I am $name. I am ${age} years old. I live in $country”
echo $greeting
“`

[どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/ja/bad_source_code/entry/single_or_double_quotation)

元記事を表示

ruby subメソッドで使用した正規表現について

address=”都道府県,市区町村,番地,建物名部屋番号”
という変数があり、ここから、番地を取得したいとします。
結論からいうと、

address.split(“,”)[2]

ですが、
正規表現でチャレンジしました。

まずはsubで、戦闘の「都道府県,」を消して、それを2回繰り返そうと思いました。
のこった「番地,建物名部屋番号」から、「,」以降を消して終わりです。

まずは1回だけのバージョンでテスト
address.sub(/.+,/,”)
「都道府県,」のみが消える予定です。

結果
“建物名部屋番号”
となっちゃいました。

/.+,/の部分が「都道府県,」になるだろうと予測したのですが、
「都道府県,市区町村,番地,」になっちゃいます。

試しに
address.sub(/,/,”)
としてみると
「都道府県市区町村,番地,建物名部屋番号」
となり、最初の1個目をちゃんとけしてくれます。

なぜに???

・・・・・
まぁ番地のみ取得という問題は解決しているので
そういうもんだろうと今は割り切って次に進みます。
まだまだ、勉強中なもので、、、
今後勉強していけば

元記事を表示

Rubyの文字列とシンボルの違い【初学者】

初投稿です。

誤りがあればご指摘お願いします。

#文字列とシンボルの違い

文字列とシンボルは見た目は似ていますが別物。

どう違うかと言うと与えられるオブジェクトIDが違います。

文字列の場合、同じ文字列を2つ用意した場合でも与えられるオブジェクトIDは異なるものになりますが、シンボルの場合、同じ文字列を2つ用意した場合でも同じオブジェクトIDが与えられます。

具体的に見てみるとこんな感じです。
Ruby_symbol1.png
実行結果
Ruby_symbol2.png【Ruby/Rails】破壊的メソッドを利用した時にNoMethodErrorが出た時に対処したこと

## 起きたエラー

filter!の類の破壊的メソッドを使った時にNoMethodErrorが出ました。

対処出来たのでメモがてら残します。(間違ったら優しく教えてください…。)

## 再現する方法

“`object_controller.rb
def index
@object = Object.all
@object.filter! do |o|
o.id != 1
end
end
“`

※命名適当なのは勘弁してください。

オブジェクトをallとかで配列で取得した時に、filterみたいな非破壊的メソッドは使えたのですが、filter!みたいな破壊的メソッドで条件に一致しないオブジェクトを弾いた配列を作ろうとしてました。

ですが、一番最初の見出しの通りNoMethodErrorを吐きました。

## 対処した方法

“`object_controller.rb
def index
@object = Object.all
@object.to_a.filter! do |o|
o.id != 1
end
end
“`

元記事を表示

カレンダー作成問題(たのしいRuby 練習問題)

# はじめに

『プロを目指す人のためのRuby入門』通称チェリー本を学習後、
インプットしたものを手を動かして実践してみたいなと思ったら、作者の記事を見つけました。
[「アウトプットのネタに困ったらこれ!?Ruby初心者向けのプログラミング問題を集めてみた(全10問)」](https://blog.jnito.com/entry/2019/05/03/121235)

ここに載っている一問目
>「たのしいRuby」に載っている、オーソドックスなカレンダー作成問題です。
>DateクラスのAPIさえわかれば、あとは基礎的なプログラミング知識だけでコードが書けると思います。
>>Date クラスを使って、今月の1日と月末の日付と曜日を求め、次のような形式でカレンダーを表示させてください

こんな感じにするのが目標

“`
May 2020
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26

元記事を表示

Rubyがrbenvからではなく、Macにデフォルトでインストールされているバージョンが参照されていた

## rbenvとMacのデフォルトでインストールされているRubyのバージョンの相違
作業を開始しようとしていつものように`bin/rails s`をしたら以下のようなメッセージが出てきました。

“`
$ bin/rails s
Your Ruby version is 2.6.3, but your Gemfile specified 2.6.5
“`

システムで設定されているRubyのバージョンを確認するとrbenvで2.6.5をインストールしているはずなのに2.6.3になってしまっています。

“`
$ ruby -v
ruby 2.6.3p62 (2019-04-16 revision 67580) [universal.x86_64-darwin19]
“`

念のためrbenvで指定しているバージョンも確認しましたが、2.6.5で間違いはないです。

“`
$ rbenv versions
system
* 2.6.5 (set by /Users/ユーザー名/desktop/ディレクトリ名/.ruby-version)
2.7.0
“`

##

元記事を表示

Kinx 要素編 – 演算子オーバーライド

# 演算子オーバーライド

## はじめに

**「見た目は JavaScript、頭脳(中身)は Ruby、(安定感は AC/DC)」** でお届けしているスクリプト言語 [Kinx](https://github.com/Kray-G/kinx)。ライブラリ… ではないですが、ライブラリ作成で便利な機能。

今回は演算子オーバーライドです。

* 参考
* 最初の動機 … [スクリプト言語 KINX(ご紹介)](https://qiita.com/Kray-G/items/ca08b6fb40d15dd0ec76)
* 個別記事へのリンクは全てここに集約してあります。
* リポジトリ … [https://github.com/Kray-G/kinx](https://github.com/Kray-G/kinx)
* Pull Request 等お待ちしております。

Ruby の何でもオブジェクト方針は一貫した思想という意味で美しいとも思うのだが、`1+1` の意味を変えるのは百害あって一利無しと思います。できても良いと

元記事を表示

オレオレRailsコーディング規約

# あらすじ
吾輩は末端エンジニアである。名前はしょった。先日、急遽あるRailsアプリの引継ぎ業務に駆り出された。吾輩はここで始めて、アプリのコードを見た。しかもこのコードがまあ追いにくい。ブチギレ寸前である。

# アンチパターン
というわけで本題。
先に、ここでいうアンチパターンというのは一般に流布されているそれとはまるで別物であるということは先にお伝えしておきたい。あくまで個人的なベストプラクティスであり、引き継ぐならこうなっていて欲しい(欲しかった)という願望である。

## 1. 1つのディレクトリ内に無駄にファイルが多い

今、ここに猫がいる。猫はかわいい。神は猫をこう定義した。

“`ruby:./cat.rb
class Cat
def comment
puts “かわいい”
end
end
“`

猫は猫耳と尻尾、そして肉球でできている。
神はかわいい猫をこう定義し直した。

“`ruby:./cat.rb
class Cat
def initialize
@parts = [
CatEar.new,
Ca

元記事を表示

renderとredirect_toの違い

## render
次に指定するViewを指定している。
今持っている変数で新しいViewを構成する。

## redirect_to
次に指定するメソッドを指定している。
ブラウザに対して指定したメソッドにHTTPリクエストを送るように司令する。
リクエストが二回発生してしまうことになる。

例:
=> GET home/show
<= redirect_to => Get home/index
<= home/index

元記事を表示

100日後に1人前になる新人エンジニア(6日目)

#100日後に1人前になる新人エンジニア(6日目)
どうもこんばんは。今日のお題はテストです。
Railsってテストがいくつかあってそれらの特徴についてまとめてみたいと思います。

今日取り上げるテストは2つです。
● Minitest
● RSpec
の2つです。私はRails Tutorial と プロを目指す人のためのRubyという書籍を読んでいたのですが、これらで取り上げられていたのはどちらもMinitestでした。

しかしながら実際の私の業務ではRSpecを使用するため
双方の特徴を知りたいなと思い本日まとめたいと思います。

##Minitest
minitestはRubyと一緒にインストールしてありますので、特にセットアップなどは必要なく、またRuby on Railsにおいてもデフォルトで入っているテストフレームワークであります。とのこと。
実際requireでMinitestを記述するだけで使える様になります(簡単!)

その他の特徴としては
● RSpecよりもロード時間が短い
● 必要最低限の機能を備えている(プラグインで追加する)
● Rubyの文法がわかれば

元記事を表示

Ruby : Nokogiriはバイナリモードで読んだhtmlの文字コードを自動で判別しにいく

#はじめに
open-uriでhtmlを読み込み、Nokogiriでパースしてスクレイピングを行っていたのですが、その際Nokogiriのエンコーディングを`nil`に(もしくは省略)しても文字化けを起こすことなくパースができていました。
open-uriでhtmlを読むときはバイナリで読み込まれるので、バイナリで読み込まれたhtmlを、エンコーディング`nil`にしてNokogiriでパースするとどうなるか、ということに焦点をしぼって検証してみました。

#HTML.parseのエンコーディングを「nil」にしてみる

Nokogiriでhtmlをパースするときのエンコーディングを`nil`としてみます。HTML.parseの第三引数に`nil`を設定します。
今回読み込むのは以下のhtmlです。ファイルはShift_JISで書かれています。

“`hello.html


こんにちわ




元記事を表示

5秒で直す Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib

## 結論
`brew switch openssl 1.0.2s` で直る。

バージョンは環境によって異なるので、 `ls /usr/local/Cellar/openssl` で存在するバージョンを調べて
`brew switch openssl バージョン名` とする。

## 検証環境
* ruby 2.5.0p0
* Mac Book Pro (Catalina 10.15.4)

## 背景
`pod install` 時にこのエラーが出た。
rubyのopensslのバージョンが固定されていることが問題みたい。
他の記事を参考に`brew update && brew upgrade`してみたが直らず。
「rubyを再インストールする」という解決法もあるみたいだが、rubyの再インストールは面倒くさい。。。

と思っていたら、スタックオーバーフローに書いてある方法で速攻で解決した。
https://stackoverflow.com/questions/59006602/dyld-library-not-loaded-usr-local-opt-openssl-lib-

元記事を表示

rails db:〇〇 まとめ

## rails db:migrate
DBにmigrationファイルの実行
自動的に db:schema:dump も実行され、schema.rbも更新される
## rails db:rollback
migrationファイルの実行前にDBを戻す
## rails db:schema:load
schema.rbの内容を現在参照しているDBに適用
空のDBにロードする時に使う
## rails db:schema:dump
DBをschema.rbに反映
## rails db:create
DBの作成
## rails db:drop
DBの削除
## rails db:reset
下記の省略
rails db:drop
rails db:create
rails db:schema:load
スキーマファイルだけを利用
## rails db:migrate:reset
下記の省略
rails db:drop
rails db:create
rails db:schema:load
マイグレーションファイルを直接利用
## rails db:seed
テーブルに初期データが追

元記事を表示

Rails deviseのエラーメッセージ を日本語化するまでの道のり

Rails初学者です。今回はRailsのdeviseログイン機能でのエラーメッセージを日本語化したく、少々つまずいたので覚書きとしていきます。

前提

– deviseのログイン機能が実装できている

## gemインストール
### devise日本語用のgemを追加

“`ruby:Gemfile
gem ‘devise-i18n’
gem ‘devise-i18n-views’
“`
“`
$ bundle install
“`

### deviseの日本語用ファイルを生成

“`
$ rails g devise:views:locale ja
  create config/locales/devise.views.ja.yml
“`
日本語のエラーメッセージファイルが生成される

## 日本語用ファイルをdeviseから取得
### config/application.rbを編集
‘config.i18n.default_locale = :ja’ を追加
デフォルトでは英語の`:en`が設定されているので、日本語の`:ja`に変更する

元記事を表示

Rails でアプリを作成する際の初期作業まとめ

## はじめに
railsでアプリを作成するときに毎回のように設定していることがあるので、初期の設定をまとめておきます。
作業は以下の流れになります。

・アプリ作成
・データベース作成
・gem導入
・Haml導入
・テーブル作成
・コントローラ、ビュー作成
・jquery導入

## アプリ作成
まずはターミナルからコマンド入力でアプリを作成します。

railsのバージョンは使い慣れているものを指定するのが良いかと思います。
(今回はバージョン5.2.3、データベースはmysplを使用)
アプリを保存するディレクトリで以下を実行します。(今回はアプリ名はsample)

“`:ターミナル
$ rails _5.2.3_ new sample -d mysql
“`
作成したアプリのディレクトリに移動しておきます。

“`:ターミナル
$ cd sample
“`

## データベース作成
データベースを作成します。

“`:ターミナル
$ rails db:create
“`
developmentとtest用のデータベースが作成されるはずです。
(Sequel Pr

元記事を表示

【初心者向け】Herokuでデプロイしたら code=H10 desc=”App crashed” とか言われた時の解決法

#環境
– Ruby 2.5.1
– Rails 5.2.3

#エラー内容

Herokuで初めてデプロイした際に
「Application error」が解決できずに時間を取りましたので備忘録。

デプロイは「Verifying deploy… done.」
と成功しているようなのに、ブラウザが添付画像のようになって開かない…?なんで…?

![Application error](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/84308945cc9dcd981c2d383e42478eb7.png)

#エラー原因を特定したい

“`:ターミナル
$ heroku logs –tail
“`

言われた通り実行してみる。

すると大量のコードが…
ただ、最後に目立つエラーコードが。

“`ruby:ターミナル
heroku[router]: at=error code=H10 desc=”App crashed” method=GET path=”/” host

元記事を表示

【Ruby/Rails】クラスでユニークな値を設定する

rubocopでは、loop + break を推奨されます。

## loop + break版
“`ruby
class SomeClass
def set_state
return true if state.present?

self.state = loop do
random_str = SecureRandom.urlsafe_base64
break random_str unless self.class.exists?(state: random_str)
end
end
end
“`

## while版
“`ruby
class SomeClass
def set_state
return true if state.present?

begin
self.state = SecureRandom.urlsafe_base64
end while self.class.exists?(state: state)
end
end
“`

元記事を表示

#Ruby の正規表現置換でマッチ結果に対してメソッド実行する ( 例: 小文字を大文字にする例 )

– カッコを使ってキャプチャする
– gsub + ブロック記法で マッチ結果に対して好きなメソッドを実行できる

“`rb
“ab cd ef”.gsub(/(ab|ef)/) { “#{$1.upcase}” }
# => “AB cd EF”
“`

# Bad Case

ブロックでないと、複数個のマッチ結果がある場合に、置換結果が全て同じものになってしまう

“`rb
“ab cd ef”.gsub(/(ab|ef)/, “#{$1.upcase}”)
# “EF cd EF”
“`

# 参考

[How to change case of letters in string using RegEx in Ruby – Stack Overflow](https://stackoverflow.com/questions/15627434/how-to-change-case-of-letters-in-string-using-regex-in-ruby)

# Original by Github issue

https://github.com/YumaI

元記事を表示

OTHERカテゴリの最新記事