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

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

【Rails6】Dockerによる開発環境構築

#はじめに

先日開発環境にDockerを導入しましたが、記事に書いてあるコードをほとんど模写したような状態であったため、本日改めてコードの意味を確認するため、記述していきます。

なお、環境構築を行うにあたり、参考にさせて頂いた記事は以下です。

[docker ruby(2.6.5)・mysql(5.6.47)・rails(6.0.0)の開発環境構築](https://qiita.com/Tomohisa_koyama/items/5f2d32fd0677aa244b72)
[既存のRailsアプリの開発環境にDockerを導入する手順【Rails, MySQL, Docker】](https://qiita.com/DaichiAndoh/items/66bf631f72698b5c2a53)
[Docker + rails6 + MySQL + bootstrap,jqueryまで環境構築完全ロードマップ](https://qiita.com/rakko1124/items/ff698a966b94ebe8aa7e)
[Docker公式:Railsクイックスタート](https

元記事を表示

Rubyのブロックの書き方

## 概要
Rubyの理解を深めるためにブロックについて学習をしたのでアウトプットしていきます。

## ブロックとは

– `do〜end`のことをRubyではブロックと呼ぶ。
– `|i|`の i はブロック引数と呼ぶ。

例題があったほうが理解しやすいのでたとえばこのような問題。(他に解き方はありますが今回は`times文`)
**ブロックとは`times`メソッドの引数のことです。ブロックの内容で繰り返し処理を行うように`do〜end`に書くことで繰り返しています。**

>【問題】
1〜10までの数値を順番に足し合わせて、最後に全て足した結果をターミナルに出力する

“`ruby
sum = 0

10.times do |i|
sum += i + 1
end

puts sum

# ターミナル出力結果
# 55
“`

## ブロックの書き方

上の問題では`do〜end`を使いました。他にもブロックの書き方はあります。
たとえばこのようになります。

“`ruby
sum = 0
10.times { |i| sum += i + 1 }

puts

元記事を表示

Deviseのモヤモヤを解消して快適なRailsライフを送ろう!

この記事は[Zenn](https://zenn.dev/)に投稿した記事の転載です。
https://zenn.dev/kitabatake/articles/start-to-like-the-devise

この記事は、Railsのユーザー認証機能のgemとして有名なDeviseを使っていて感じがちな、モヤモヤを解消することを目的としています。
私自身がモヤモヤを感じていたため、このようなタイトルにしましたが、単に「Deviseに対する理解を深める」目的で読んでいただければと思います。

[Devise](https://github.com/heartcombo/devise) はとても便利ですよね。
installして、configファイルを設置して、モデルの設定をして、routes.rbに`devise_for`を書くだけで導入できます。
たったこれだけで、、

– ユーザーの新規登録画面の作成
– ログイン画面の作成
– パスワードを忘れた際の画面の作成
– `authenticate_user!`や`user_signin?`のようなユーザー認証向けの各種メソッドの付与

元記事を表示

Jbuilderのレンダリング時間をjsonapi-serializerで改善するTips

RailsのViewでJbuilderを使用していて、collectionのレンダリングが遅いなと感じたことはないでしょうか?
その場合、jsonapi-serializer で手軽に改善できるかもしれません。
jsonapi-serializer の詳しい使い方は [公式ドキュメント](https://github.com/jsonapi-serializer/jsonapi-serializer) を見ていただくとして、本記事では Jbuilder を jsonapi-serializer で置換する際のTipsを書きます。
なお完全に置換するのではなく手軽に検証するために Jbuilder と jsonapi-serializer を共存させるハイブリッド形式にしています。(効果が確認でき必要であれば全置換すればいいと思います)

# おことわり

とある事情により本記事を書いており、主に時間の制約により以下の注意点があります。

* 実際のプロジェクトで以前に対応した内容を基に本記事を書いています。結構速くなった記憶はあるのですが、何倍速くなったとか、実際のベンチマークを提示す

元記事を表示

RubyのRefactoring(感想のみ)

\![macOS-11.0.1]() \![ruby-2.6.1p33]()

**執筆中**

# はじめに

本記事では[ **リファクタリング:Rubyエディション** ](https://www.fukkan.com/fk/CartSearchDetail?i_no=68327896)(ジェイ・フィールズ, シェーン・ハービー, マーティン・ファウラー 著 / 長尾高弘 訳)を参考にしながら、

本の内容に沿った演習(Refactoring)を実践した内容をまとめていきます。

私ごとではございますが、昨日5年(執筆現在:2020/12/25)付き合っていた彼女と別れました。ですので、今泣きながら記事を書いています。画面が見えません。

# 目次

1. [授業内容](#rubyの再帰recursion)

1. [再帰とは](#再帰とは)

元記事を表示

Ruby学習#8 Working With String

“を出力する場合、バックスラッシュ \
mac だと Option + ¥マーク
#8 Working With String
puts “Giraffe\” Academy”
# Giraffe” Academy

phrase = “Giraffe Academy”
puts phrase
#Giraffe Academy
puts.upcase()
#GIRAFFE ACADEMY
puts.downcase()
#giraffe academy
phrase = ” Giraffe Academy ”
puts phrase.strip()
#Giraffe Academy
#スペースとれる
puts.phrase.length()
#15
puts phrase.include? “Academy”
#true
puts phrase.include? “Academys”
#false
puts phrase[0]
#G
puts phrase[3]
#a
puts phrase[0,3]
#G

元記事を表示

[5分]超簡単なRailsAPIを作ってみる

##はじめに
railsAPIを作ってみたので備忘録として残す。
次回はswaggerなどのAPIドキュメントの導入をやってみる

##Rials APIの作り方
rails newに–apiを付ける

“`
rails new rails-test-api –api
“`

##簡単な使い方
CRUDを生成する
今回は掲示板CRUDを作成

“`
rails generate scaffold Board title:string text:string
rails db:create
rails db:migrate
“`

アプリケーションを起動

“`
rails s
“`

http://localhost:3000/boards に接続

[]が表示されるCurlでPOSTを叩く

“`
curl -X POST -H “Content-Type: application/json” -d ‘{“title”: “test”, “text”: “テストです”}’ http://localhost:3000/boards
“`
※Curlの叩き方は[こち

元記事を表示

db:migrateの際に「private method `String’ called ~ 」エラー

##はじめに
マイグレート時に下記のエラーがでたので備忘録として書く

“`
== 20~~~~~~~~~~~ CreateBoards: migrating =====================================
— create_table(:boards)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

private method `String’ called for 〜〜〜〜〜〜〜〜〜
“`

マイグレーションファイル

“`
class CreateBoards < ActiveRecord::Migration[6.0] def change create_table :boards do |t| t.String :title t.String :text t.timestamps end end end ``` ##対処方法 string

元記事を表示

bundle install でCould not locate Gemfile

##はじめに
bundle installでCould not locate Gemfileエラーが出たので対処

##解決方法
現在いるディレクトリにGemfileがないとの事
単純なミスだった。。。
Docker構築すれば陥らないミスなのでDocker環境を作りましょう笑

##参考

元記事を表示

Commandまとめ

\![Mac OS X-10.15.7]() \![ruby-2.7.1p83]()

# Command まとめ

忘れがちなコマンド

## emacs command:

| method | 出力結果 |
|:——–|:—————-|
| C-spacs | コピペ |
| C-w | 選択範囲を切り取る|
| C-y | 貼り付け |
| M-w | 選択範囲をコピー|

## emacs カーソル移動

| method | 出力結果 |
|:——-|:———–|
| C-a | 行の先頭に移動|
| C-e | 行の末尾に移動|
| C-p | 1行上に移動|
| C-n | 1行下に移動|

元記事を表示

Rubyの入出力

\![Mac OS X-10.15.7]() \![ruby-2.7.1p83]()

# 出力

“`el
print(“hello world”)
“`

実行結果

“`el
$ruby print.rb
hello world
“`

改行されない
他のRubyの出力方法はいろいろある
[Commandまとめ](https://qiita.com/cyoukou/items/27ae8fe873157d31252b)に載せている

# 入力

## ARGV(argument vector)

“`el
puts “hello #{ARGV[0]}”
“`

とコーディングして

“`el
$ ruby hello_name.rb Cyoukou
“`

とすると

“`el
hello Cyoukou
“`

と出力される
pu

元記事を表示

Rubyの変数とMethod

\![Mac OS X-10.15.7]() \![ruby-2.7.1p83]()

# 変数

Pythonと似てて、Rubyは型宣言をする必要がない
受けとった引数ARGV[0]を適当な変数に代入して出力せよ

“`el
name = ARGV[0]
puts name
“`

実行結果

“`el
$ ruby name.rb Rudy
Rudy
“`

変数を使って足し算してみる

“`el
num = ARGV[0].to_i
sum = num + num
puts sum
“`

実行結果

“`el
$ ruby name.rb 1
2
“`

# Method

関数などのまとまりはmethodを定義することになる
これもPythonの関数定義と少し似ている

“`el
def メソッド名 (引数1, 引数2)
処理

元記事を表示

WHATWG Living StandardとHTMLパーサ

この記事は[ドワンゴ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/dwango) 最終日の記事です。年の瀬ですね。

# はじめに

本記事は、WHATWG Living Standardに準拠することを目的としたHTMLパーサである「[gammo](https://github.com/namusyaka/gammo)」の紹介を目的としている。gammoが実現していることを詳細に伝えるため、単なるgemの紹介に留まらず、HTMLの歴史や昨今のHTMLを取り巻く状況を簡単に解説し、WHATWG Living StandardにおけるHTML文書の解析アルゴリズムについて、実例と共に紹介する。

本記事で紹介するgammoの開発に取り掛かった理由は、主に以下の二点が挙げられる。

– [WHATWG Living Standard](https://html.spec.whatwg.org/multipage/)に準拠したHTMLパーサをRubyGemsの中から見つけられなかったため。
– 現在HTMLパーサの

元記事を表示

表がクロスした箇所の登録・更新機能の作成方法

#作成の背景
現在、野球のスコアブックを記録するアプリの作成を実施しています。
野球の1回、1打席目の人の成績を登録したいという場合に、
スコアブックにて1回と1打席がクロスした箇所をクリックすれば登録フォームが表示できる機能があればと考えミニアプリを作成して挙動の確認を実施することにしました。

#ミニアプリの仕様
生徒がどの科目で何点とったかが分かるマトリックス表を作成しました。
表のクロスした箇所をクリックすると点数を記入できるようにしていきます。
また、既存に入力した項目に関しては入力値の更新ができるようにします。

###DB設計
[![Image from Gyazo](https://i.gyazo.com/2b34ed22d24988def54a2b340a9386c6.png)](https://gyazo.com/2b34ed22d24988def54a2b340a9386c6)

###完成イメージ図
[![Image from Gyazo](https://i.gyazo.com/1dfd3ddda0970e324dd1fc44ca4db2f6.gif)](ht

元記事を表示

RubyでXPath 1.0 パーサを実装した

この記事は[ドワンゴ Advent Calendar 2020](https://qiita.com/advent-calendar/2020/dwango) 16日目の記事です。アドベントカレンダーが好きすぎて、これに加えて最終日も書かせていただきます。急拵えなので内容は薄いですが、興味があればお付き合いください。

# はじめに

この記事で紹介するXPath 1.0パーサは、ドワンゴ Advent Calendar 2020 最終日にて紹介予定のHTMLパーサである「[gammo](https://github.com/namusyaka/gammo)」向けに開発したものである。

最終日の内容はHTMLパーサに特化したものとなるため、この記事ではgammoが構築したDOMツリーをtraverseするための仕組みとして、XPath 1.0を実装した話を紹介する。

# XPath 1.0

XPath 1.0は1999年に勧告されたXSLT 1.0と同時に公表されたもので、現在の最新バージョンである3.1と比較すると非常に機能が少ないシンプルな仕様となっている。
XPath 1.

元記事を表示

【Ruby On Rails】特定のidに紐づいた複数レコードのカラム情報をまとめて取り出し表示させる方法

# 前提

このようなテーブルがあったとします。

hoges テーブル

|id |text |content_id |
|—|—|—|
|1 |morning |1 |
|2 |afternoon |2 |
|3 |evening |2 |
|4 |night |3 |
|5 |midnight |3 |
|6 |late night |3 |

# 考え方
特定のidに紐づいた複数レコードのカラム情報をまとめて取り出すには、ビューの中で”インスタンス変数.each”という形でeachメソッドを使用すれば、データ情報を複数表示することが可能。

# 書き方

1. eachメソッドを使用するには、配列を渡さなければいけない。whereメソッドを用いることで、条件に合致するオブジェクトを配列として取り出す。今回の場合は、Hoge(hogesテーブル)を指定し、whereメソッドを用いて、paramsで運んできたidがcontent_idと一致しているものを@hogesに代入。

“`ruby:hoges_controller.r

元記事を表示

gem update時の確認でやっていること 見ているところ

この記事は [Ubiregi Advent Calendar 2020](https://qiita.com/advent-calendar/2020/ubiregi) 24日目のエントリです。

gem の更新は放っておくといつの間にか差分が大量になっていて確認作業が大変になったり、
無用心に breaking change のある更新を行なってしまうとアプリケーションが壊れてしまったりしまいますね。
そうならないように日頃 gem updateをしていることだと思います。

gem updateの仕方自体は手動で `bundle update` したり [Dependabot](https://dependabot.com/) を導入したりがあると思いますが、今回はそれらによって生まれた更新内容を見ていく手順を書いていこうと思います。

まずはCHENGELOGをみます。

# CHENGELOGから読み取る内容

## CHANGELOGを見て影響が小さいとわかる場合

例ですが、変更が小さくこまめに更新があるgemといえば `aws-sdk-~~~` が代表的かなと思ってい

元記事を表示

ActiveRecordでnew => build => save! するとどうなる

関連付けのあるモデルにおいて、親レコードをnew => 子レコードをbuild => 親レコードをsave! したときの挙動が複雑な気がしたのでメモ。

(理解力が不足しているだけかもしれない。)

検証環境: ActiveRecord 6.0.2.1

# 結論を言葉で

– has_oneでは親レコードと子レコードのvalidityは独立している。
– has_manyでは子レコードが1つでもinvalidなら親レコードもinvalidになる。

親レコードをsave!したとき、

– 親レコードがinvalidならraiseする
– 親レコードも子レコードもvalidな場合、insertがtransactionで囲まれて実行される
– 親レコードがvalidで子レコードがinvalidな場合(上記の性質によりhas_oneでのみありうる)、親レコードのinsert処理のみが実行される

### 追記

has_oneにもhas_manyにもvalidateというオプションが存在し、デフォルトがhas_oneだとfalse, has_manyだとtrueになっているため本記事の挙動

元記事を表示

古いRuby環境と古いRailsを動かすのにすこしハマった

### 古い実行環境を構築する必要が発生した

Xcodeのアップデートや `brew upgrade` 等を行っていたら、
動いていた Rails アプリが動かなくなったので `rbenv` で Rubyからインストールし直した時にハマったメモです。
全然動かなくなったので `Gemfile.lock` も削除(リネーム)してから行いました。

#### 環境

| プログラム | 動いていたバージョン | 動かなくなったバージョン | 現在のバージョン |
|:-:|:-:|:-:|:-:|
| bundler | 1.13.2 | 2.2.3 | 1.13.2|
| Ruby | 2.3.0 | 2.3.0 |2.3.0 |
| Rails | ~> 4.2 | ~> 4.2 | ~> 4.2|
| PostgreSQL | 11 | 13 | 13|
| Xcode | 11.x | 12.3 | 12.3|

#### 最初の `bundler` インストール手順(動かなくなったバージョン)

“`shell
% rbenv uninst

元記事を表示

【初学者必見】 投稿時刻の表示を日本時刻に変更してみた 【l(エル)メソッド】

Railsで作ったアプリのデータベースから情報を引っ張り出してcreated_atやupdated_atを出力すると日本時刻ではありません。
そのため、
1. 設定ファイルで時刻を日本時刻に変更する
2. l(エル)メソッドを用いて時刻を表示する
を実行し、直していきます。

# 1. 設定ファイルで時刻を日本時刻に変更する
その前に↓
> ## 設定ファイルってなに??
>railsでは、configディレクトリにて実行環境に関する物を管理しています。
>configディレクトリのapplication.rbファイルでは、そのRailsアプリケーションの開発環境すべてにおいて共通となる設定が記述されています。

まず、config/application.rbファイルを開き、以下の設定を追加します。

“`ruby:config/application.rb
module ”アプリ名”
class Application < Rails::Application # Initialize configuration defaults for originally gen

元記事を表示

OTHERカテゴリの最新記事