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

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

【Ruby/Rails】Herokuでアプリケーションを公開する手順

# はじめに
## 前提
個人的な備忘録
ruby 2.6.5 / Rails 6.0.3.4 / Mysql2

# 手順
## rails_12factor インストール
“`ruby:Gemfile
group :production do
gem ‘rails_12factor’
end
“`
bundle install => **master にcommit**

## Herokuにアプリを作成
“`:ターミナル
% heroku create アプリ名
“`
アプリ名は _(アンダーバー)使えない

## Herokuにアプリができているか確認
“`:ターミナル
% git config –list | grep heroku
“`

## Mysqlの設定
clearDBアドオンを行う

“`:ターミナル
% heroku addons:add cleardb
“`

これによりDBがHerokuのデフォルトDB(PostgreSQL)からMysqlに変更

## Mysql2(Gem)への対応
URLを再設定する

“`:ターミナル
% he

元記事を表示

[Rails]マイグレーションファイルについて勉強してみた!(テーブルへのカラム追加)

#はじめに
Railsを操作していると、何となく存在は知っているけど、それがどういう役割を果たしているのかよく分かっていないファイルやコマンドが数多くあることに気づきました。
その中の一つが、マイグレーションファイルです。

モデルを作ると、なぜか知らんがマイグレーションファイルが出来上がっていて、`rails db:migrate`を打ち込むと、“schema.rb“にテーブルデータとして反映する…
それぐらいの認識でしたが、そこについて深掘りして解説していきます!

#マイグレーションファイルとは
マイグレーションファイルは、データベースを生成する際の設計図になるものです。
また、マイグレーションファイルを実行することで、記述した内容に基づいたデータテーブルが生成されます。

#マイグレーションファイルを生成する
ターミナルに、以下のように打ち込み、モデルを作成すると、自動的にマイグレーションファイルも生成されます。

“`ruby:基本構文
rails g model モデル名 #ここでは、モデル名を「book」とします
“`

“`ruby:db/migrate

元記事を表示

Rails / Ruby : Mail の HTML テキスト を取得する方法

Rails で、 ActionMailer::Base を継承した Mailer クラス では `mail` というメソッドを使って メールオブジェクトを作成します。
その返り値のメールオブジェクトのメソッド `deliver` を呼び出すとメールが送信されます。

## HTML をテキストとして取得

この HTML のメールの本文をテキストで取得する場合は次のようにメソッドを呼び出します。

“`ruby
mail.html_part.body.to_s
“`

この `html_part` は Rails が使用している Gem mail で定義されています。

“`ruby:2020-11-14時点でのコード
# Accessor for html_part
def html_part(&block)
if block_given?
self.html_part = Mail::Part.new(:content_type => ‘text/html’, &block)
else
@html_par

元記事を表示

既存のRailsアプリにVuetifyを導入した

# はやさを求めるなら
 Vue.jsが無事にできるようになったので、Vuetifyも、という手筈になった。Vuetifyとは素敵なコンポーネントがつまったフレームワークである。いちから作らなくてもボタンとかスライドとか、いちいちかっこいいやつがある。かっこいい。

 早速ドキュメントをみながら導入を試みた。しんどかった。全部英語だった。

https://vuetifyjs.com/en/getting-started/installation/

# 無からインストール

 はじめは既存のものに導入とか考えずに、無からやってみた。まずはVueのCLIというやつが必要らしい。公式を参考に入れよう。

https://cli.vuejs.org/

“`terminal
$ yarn global add @vue/cli
“`

 そして`vue`コマンドでつくる。

“`terminal
$ vue create my-app
“`

 数多くのファイル群ができるが、そこで以下のコマンドを入力する。

“`
$ yarn serve
“`

 この`yarn ser

元記事を表示

【Rails】updateアクション実行時にパスワードなどのバリデーションを通過させる方法

ユーザーのプロフィール情報を更新して保存するといった処理を実装するとき、ユーザーが変更したい情報のみを入力して、そのほかのフォームのバリエーションチェック(特にパスワード)はスキップさせたい!といった場面ってあるかと思います。今回はそのやり方を紹介します。

#実装方法
バリデーションオプションにある、“:onオプション“を使います。例えば“on: :create“とすることによってレコードの新規作成時のみバリデーションチェックを行うことができます。
私の場合、利用規約と個人情報のチェック(acceptedカラム)にもバリデーションチェックを行っていたため、updateアクション時にもこのバリデーションチェックが発動してしまい、ユーザー情報の変更ができないという状態になってしまっていました。“:onオプション“でユーザーの新規登録時のみバリデーションチェックを行うようにすることで、これを回避することができます。

“`ruby:user.rb
validates :password, presence: true, length: { minimum: 6 }, on:

元記事を表示

メタプログラミングRuby(第I部・水曜日まで)を読んでいく

# 1章 頭文字M

– メタプログラミングとは、コードを記述するコードを記述することである。

## イントロスペクションとは?

> プログラミングやRubyでは一般に、イントロスペクションとは実行時にオブジェクト、クラスなどを見てそのことを知る能力です。

cf. [Rubyのイントロスペクション
](https://riptutorial.com/ja/ruby/topic/8752/ruby%E3%81%AE%E3%82%A4%E3%83%B3%E3%83%88%E3%83%AD%E3%82%B9%E3%83%9A%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3)

例:

“`rb
# 以下は、クラス定義です

class A
def a; end
end

module B
def b; end
end

class C < A include B def c; end end ## イントロスペクション # Q. Cのインスタンスメソッドとは何ですか? # A. C.instance_methods # [:c,

元記事を表示

【解決法】Address already in use【cloud9】

【Address already in use】 の出現

cloud9上で Webサーバ:Puma ライブラリ:Sinatra 使用中のこと。

rbファイルの内容変更し、ターミナルでサーバを再起動しようとしたところ、

`$ ruby  ○○.rb -o $IP -p $PORT
`
に対して、

`〜〜〜〜〜〜〜〜〜   Address already in use
`
が返されました。
調べてみると、既に別のターミナルでSinatraを起動しているため開けないというエラー。

ですが、別のターミナルはそもそも開いていなしどうすれば・・・・。

【解決法】

直前、cloud9使用中にターミナル終了せずにタブを閉じてしまったことが原因のようでした。
なので、

`$ killall ruby
`
kill コマンドですべて終了してから再び起動したところ、無事に解決できました。

よく分からなくなったら、killコマンドですね!

元記事を表示

RubyのTime, Dateオブジェクトについて解説

## Time, Date オブジェクトとは?

日付や時間を表すオブジェクトです。

## Time オブジェクトの扱い方

### 現在時刻

例えば now メソッドで現在時刻を取得できます。

“`
irb(main):020:0> Time.now
=> 2020-11-13 23:26:39.001668 +0900
“`

### 任意の時刻

newメソッドで任意の日時を表す Time オブジェクトを生成できます。

“`
irb(main):021:0> datetime = Time.new(2020, 1, 1, 12, 30
)
=> 2020-01-01 12:30:00 +0900
“`

### 表示フォーマットの指定(Time)

strftime メソッドを使うことで指定したフォーマットで日時を表示できます。
例えば **2020-01-01 12:30** というようなフォーマットで表示させるには次のように書きます。

“`
irb(main):021:0> datetime = Time.new(2020, 1, 1, 12, 30
)

元記事を表示

RubyのRangeオブジェクトについて解説

## Rangeオブジェクトとは?

ある値の範囲を扱うためのオブジェクトのことです。
例えば 1~3 を表すときは次のように表現します。

“`
irb(main):001:0> 1..3
=> 1..3
irb(main):002:0> (1..3).class
=> Range
“`

to_a というメソッドを使って配列(Array)に変換することも出来ます。

“`
irb(main):003:0> (1..3).to_a
=> [1, 2, 3]
irb(main):004:0> (1..3).to_a.class
=> Array
“`

ちなみにドットを3つにすると、最後の値を含まない Range オブジェクトを作れます。

“`
irb(main):006:0> (1…3).to_a
=> [1, 2]
“`

また、アルファベットについても Range オブジェクトを生成できます。

“`
irb(main):011:0> (‘a’..’e’).to_a
=> [“a”, “b”, “c”, “d”, “e”]
“`

## Range オブジ

元記事を表示

RubyのHashオブジェクトについて解説

## Hash とは?
Hash オブジェクトとは key と value の組み合わせでデータを表現できるオブジェクトのことです。

## Hash の書き方

Hash は中括弧とコロンを用いて作成します。

“`
irb(main):082:0> user = { name: ‘Masuyama’ }
=> {:name=>”Masuyama”}
“`

## Hash 値の取り出し型

先ほどのようなコロンを用いた記法の場合、key は symbol オブジェクトとなっているので
hash オブジェクトで symbol を指定することで対応する値 (value) を取り出すことができます。

“`
irb(main):083:0> user[:name]
=> “Masuyama”
“`

## Hash の書き換え

特定の key を指定して値を代入することで、値を書き換えることもできます。

“`
irb(main):095:0> user = { name: ‘Masuyama’ }
=> {:name=>”Masuyama”}
irb(main):096:0

元記事を表示

RubyのArrayオブジェクトについて解説

## Arrayオブジェクトとは?

いわゆる「配列」のことで、複数のオブジェクトを格納できるオブジェクトです。

“`
irb(main):039:0> [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
“`

## Array の操作

push メソッドを使うと末尾にオブジェクトを追加できます。

“`
irb(main):040:0> arr = []
=> []
irb(main):041:0> arr.push(100)
=> [100]
“`

他にも末尾に追加する記法があるので紹介します。

“`
irb(main):046:0> arr = []
=> []
irb(main):047:0> arr << 100 => [100]
“`

## Array にオブジェクトを代入

まず、普通に Array を作ってみます。シングルクォートで囲った文字列を Array に格納してみます。

“`
irb(main):052:0> arr = [‘String1’, ‘String’]
=> [“String1”, “String”]

元記事を表示

RubyのEnumeratorオブジェクトについて解説

## Enumerator とは?

ざっくり言うと、Ruby で繰り返しを行いたいときに Enumerator オブジェクトが使われます。
例えば回数を繰り返したい数に times メソッドを付加すると、それはもう Enumerator オブジェクトになります。
※この説明は完全ではありませんがイメージとして掴むためには十分かと思います。

“`
irb(main):031:0> 3.times
=> #
“`

## 実際に繰り返し処理を行いたいとき

基本的には Enumerator オブジェクトを使いながら、ブロックを記述します。

“`
irb(main):035:1* 3.times do |i|
irb(main):036:1* puts i
irb(main):037:0> end
0
1
2
=> 3
“`

i が変わりつつ 0, 1, 2 と増えながら繰り返されていることが分かりますね。

## ブロック処理以外の繰り返し

中括弧でブロックを表現することもできます。

“`
irb(main):038:0>

元記事を表示

RubyのSymbolオブジェクトについて解説

## Symbol オブジェクトとは?

シンボルは任意の文字列と一対一に対応するオブジェクトです。
by 公式

## 文字列との違いは?

まず、コロン「:」を文字列の前につけて symbol object を生成します。

“`
irb(main):001:0> :name
=> :name
irb(main):002:0> :name.class
=> Symbol
“`

一見、文字列と同じようにみえますが ruby は symbol object を **整数** として扱います。
これは完全に内部的な話となりますが、symbol は文字列と違い整数として処理される分、高速に処理が行われます。

## symbol は何がよいの?

例えば中身が同じ文字列を生成したとき、
String object では例え中身が同じでも別な object を生成することになりますが
Symbol object では同じ object を指すことになるため、メモリの消費が抑えられます。

String での例をみてみます。

“`
irb(main):014:0> string1 =

元記事を表示

RubyのStringオブジェクトについて解説

irb を使いながら、Ruby の String オブジェクトについて解説していきます。

## String オブジェクトとは?

文字列を扱うオブジェクトのことです。
シングル or ダブルクォーテーションで囲うと String オブジェクトになります。
class メソッドで確認してみましょう。

“`
$ irb
irb(main):001:0> “文字列”.class
=> String
“`

## String オブジェクトの機能

よく使う String オブジェクトのメソッドを紹介します。

### upcase メソッドで大文字化

“`
irb(main):002:0> ‘String’.upcase
=> “STRING”
“`

### downcase メソッドで小文字化

“`
irb(main):007:0> ‘String’.downcase
=> “string”
“`

### 文字の切り出し

slice メソッドを使うと指定した文字列分を切り出せます。
下の例では 0 文字目から 2 (3 の一つ手前) まで切り出しています。

元記事を表示

トップページにおしゃれな背景画像を使うだけでそれっぽいサイトになる説を検証してみた

# はじめに
## なぜやるか
就活用のポートフォリオを作っていて第一印象がなんだか安っぽいな〜と感じたので少し手を加えてみる

## 作っているもの
記事投稿アプリ(Qiitaに近い)

## before
![スクリーンショット 2020-11-13 20.33.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771826/9a75f9f4-8766-c30f-78c3-6bd91f161b89.png)

非ログインユーザーでも閲覧できるようにしたいので、頭にログインページは設けず。
その結果、初めてのユーザーにとってどうしたらいいの?というインターフェースになってしまっている。

## after
![スクリーンショット 2020-11-13 20.34.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771826/6db567d6-ba7f-e77a-012d-faa09b3d9bf7.png)

とり

元記事を表示

ハッシュ・配列の新規追加方法

#はじめに
 最近はRailsフレームワークを使っているので、ついつい忘れていた学習初期の内容を改めてまとめておく。

##ハッシュに新たにバリューとキーを追加する

“`ruby
hash = {}

hash[:name] = “やました” #ハッシュにないキーは新たに追加
hash[:name] = “かねむら” #すでにあるキーはバリューが更新される

puts hash[:name] #出力するときは、角括弧にシンボルでキー名
hash = {name: “かねむら”} #最終的なハッシュはこういう状態
“`

##配列

“`ruby
arrays = []
hash = {name: “かねむら”}

arrays << hash #配列にハッシュの形のまま追加する puts arrays[0][:name] #=>“かねむら”
puts arrays
#=>{:name=>”かねむら”}
“`

##最後に
 Railsを使っていると中でハッシュを使っているんだろうなぁと思うことはあったが、Rubyでの扱いを完全に忘れていた。

元記事を表示

Rubyのirb(interactive ruby)を実行する方法

## irb とは?

irb は interactive ruby の略です。
ruby の式を標準入力から簡単に入力/実行するためのツールです。
by 公式

## irb で出来ること
ターミナルからirbというコマンドを使うと、ターミナル上でrubyを一行ずつ実行することができます。
簡単に ruby を試したいときには非常に有力なツールです。

いちいちファイルを作成する必要もないので、ちょっとした ruby コマンドを実行したいときには非常に便利です。

## irb のインストール

gem で簡単にインストールできます。

“`
$ gem install irb
Fetching irb-1.2.7.gem
Fetching io-console-0.5.6.gem
Fetching reline-0.1.8.gem
Building native extensions. This could take a while…
Successfully installed io-console-0.5.6
Successfully installed reline

元記事を表示

Railsで検索バーを設ける〜複数テーブルを結合させて検索を行う

# はじめに
今回は、投稿データ(Post)を検索バーでキーワード検索を行い、表示させる。また、複数のテーブルを結合させて、その範囲で検索できるように実装していきます。

# 完成イメージ
※後日掲載予定

# 環境
MacOS 10.15.7
ruby 2.6.5
Ruby on Rails 6.0.0

# 執筆者の状況

###テーブル
![searchFunction1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/683220/f2c6251a-407e-f77c-a4ea-1ea784ca7072.png)

利用者を「User」、投稿を「Post」、画像を「Image」、都道府県を「Prefecture」(seedデータ)としてテーブルを作成しております。
(テーブルの中身は投稿用に簡略化してます)

リレーションは次の通りです。

“`ruby:user.rb
has_many :posts, dependent: :destory
“`

“`ruby:post.rb
bel

元記事を表示

rbenvを用いて任意バージョンのRubyの環境構築を行う方法

この記事では rbenv を用いて任意のバージョンの Ruby 環境を構築する方法を紹介します。

## rbenv とは?

rbenv **とはバージョンの異なるrubyをまとめて管理するツール**のことです。

rbenvを利用することで異なるバージョンのrubyを一元管理することができ、
さらに任意のバージョンにいつでも切り替えられるようになるため
任意のバージョンで Ruby を使うことができます。

例えば自己学習を進めているときに、例えばある教材では ruby 2.5.2 を使うといっているのに
別な教材では ruby 2.7.0 を使うように指示が出ていると、バージョン間の差異によりエラーが発生して詰まることがあります。

rbenv を使うことで、いつでも好きなバージョンを使うことが出来るので
少なくともバージョン間の差異によるエラーは抑制することができます。

## rbenv のセットアップ

それでは実際に rbenv をセットアップしていきましょう。

### rbenv をインストール

rbenv は HomeBrew でインストールできます。
以下のコ

元記事を表示

【Active Record】ヒアドキュメントを活用して条件付LEFT JOINを行う

## テーブル
### notes
| id | title | body |
| —- | —- | —- |
| 1 | おはよう | おはおはおはおは |
| 2 | こんにちは | こんこんこんこん |
| 3 | こんばんは | こんこんこんこん |

### likes
| id | note_id | user_id |
| —- | —- | —- |
| 1 | 1 | 1 |
| 2 | 2 | 2 |
| 3 | 2 | 2 |
| 4 | 3 | 3 |

## やりたいこと
「notesの全レコードと、noetsに結合したlikesレコード(user_id = 1)の情報を取得」

## 結論
“` sample.rb
# user.id = 1
user = User.find_by(email: “test@gmail.com”)
Note.joins(
<<~SQL LEFT OUTER JOIN `likes` ON `likes`.`note_

元記事を表示

OTHERカテゴリの最新記事