- 1. .bashrcと.bash_profileの違い
- 2. type: :mailer以外のrspecだとActionMailer::Base.deliveriesが空っぽ
- 3. ssh接続をする際に「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」
- 4. herokuデプロイ
- 5. Railsで大量データを削除する方法と懸念点
- 6. [Rails]N+1は悪!発生したらとりあえず解消せよ!!という考えは危険
- 7. [Rails]strftimeあれこれ
- 8. Railsアプリで初めて自作ヘルパーを使ってリファクタリングした話
- 9. 【Ruby】複数の条件下で、配列から特定の値を取り出す方法【select・each】
- 10. 個人的に頻繁に使ったRSpec集
- 11. Ruby 自作クラスの配列をソートする
- 12. 【Rails初心者必見】Ruby on Railsでversion指定をしてWebアプリを作成する方法
- 13. Ruby と Python で解く AtCoder ARC080 D シミュレーション
- 14. Rubyでリスキーダイスを作ってみた
- 15. インスタンスメソッドとクラスメソッドの違い
- 16. データの並び替え降順、昇順/Railsでまとめてみた
- 17. なぜファイル末尾に改行を入れるのか
- 18. マイグレーションファイルがダブっちまった
- 19. hamlでクラス名やid名に変数を使う
- 20. Rails 6.0で”Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1.”という警告が出たときの対処法
.bashrcと.bash_profileの違い
# .bashrc/.bash_profile/.profile それぞれに何を書くのか
– ~/.bash_profile
-> 余計なものを書かない。
ログイン時に一回だけ実行する設定を書く
.profileと.bashrcを読み込む設定だけ書く– ~/.bashrc
シェルを起動するたびに実行したい設定を書く
ex.) EDITOR変数, プロンプト設定– ~/.profile
bashに依存しないものを書く
ex.) 環境変数, GUI設定# 上記を踏まえての設定
“`
.bash_profile
# .profileを読み込む
if [ -f ~/.profile ] ; then
. ~/.profile
fi
# .bashrcを読み込む
if [ -f ~/.bashrc ] ; then
. ~/.bashrc
fi
“`“`
.bashrc
# gitのブランチ名と改行
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_com
type: :mailer以外のrspecだとActionMailer::Base.deliveriesが空っぽ
# 困った
request specなどでも
`ActionMailer::Base.deliveries` を使ってテストがしたいのに
`type: :mailer` 以外のrspecだと `ActionMailer::Base.deliveries`が []のままで困ったきっとtype: :mailerの時は何かが裏で勝手にincludeとかしてるんだろうなーと思って
# 調べてみる
[rspec の type: :model とかについて](https://blog.kyanny.me/entry/2016/03/15/025321)
という記事を見つけた
どうやらそういうことらしいtypeに応じてここにあるものが読み込まれるのかな?
https://github.com/rspec/rspec-rails/blob/master/lib/rspec/rails/example/ってことで試してみる
# 解決
“`rb:rails_helper.rb
RSpec.configure do |config|
.
.
.
config.include RSpec
ssh接続をする際に「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」
同じIPアドレスでサーバを用意した場合、SSHで接続するときに下記のようなエラーがせることがある
“`
$ ssh root@123.123.123.123
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote
herokuデプロイ
データベースをpostgreSQL以外を使っている場合はそのデータベースのgemをコメントアウトして、
Gemfileの一番下に本番環境ではpostgreSQLを使うことを宣言してbundle installする。“`ruby:Gemfile
# gem ‘mysql2’, ‘>= 0.4.4’, ‘< 0.6.0' group :production do gem "pg" end ``` jQueryにてテンプレートリテラルを使用した場合は下記の文章をコメントアウトする。 ```ruby:environments/production.rb # config.assets.js_compressor = :uglifier ``` あとはherokuで登録が完了していればログインする。 ```ruby:ターミナル $ heroku login ``` その後、GitHubで管理しているアプリをheroku上に作成する。 ```ruby:ターミナル $ heroku create アプリ名 ``` GitHubでcommitとPushをしてmasterにマー
Railsで大量データを削除する方法と懸念点
# はじめに
皆様、こんにちは!
佐久間まゆちゃんのプロデューサーの@hiroki_tanakaです。私はRailsアプリケーションの保守に関わっているのですが先日、本番環境に大量の不要データが存在していることが判明しました。
それがキッカケでRailsでの大量データの削除方法を検討したので、調べたことをまとめました。# Railsにおけるdestroyとdeleteの違い
まず、Railsには2つのデータ削除メソッドのdestroyとdeleteがあります。
それぞれの違いを簡単にまとめたいと思います。### destroy/destroy!
ActiveRecordを介して指定した1レコードを削除します。
ActiveRecordを介するためcallbackメソッド(`before_destroy`や`after_destroy`など)やvalidationが機能します。
また、削除対象のModelに`dependent: :destroy`が設定されている関連Modelが存在している場合は、設定されているModelも一緒に削除します。
destroyは実行時にエラーが
[Rails]N+1は悪!発生したらとりあえず解消せよ!!という考えは危険
# N+1
それは諸悪の根源!パフォーマンスの敵!!
見つけたらすぐに撃退すべき悪しき存在です!!!と思われている方が多いと思います。
実際その通りで、ネットで調べてもN+1を解消するノウハウが溢れています。
基本的にはノウハウ通りに修正すれば良いのですが、まれにN+1は解消しない方が良いパターンもあるので具体例を交えて紹介します。
# この記事で話したいこと
この記事で話したいことは、なぜN+1は直すべきなのか?ということです。
N+1はあまりに有名すぎて直すノウハウはたくさんありますが、なぜ直すべきなのかが忘れられている感があります。
1つ言っておきたいのは、N+1を直すのはクエリー発行数を減らしたいからではないです。パフォーマンスを改善したいからです!
言い換えるとクエリー数が減ってもはフォーマンスが改善しないのであればN+1を直す必要はないのです。# N+1とは
最初に典型的なN+1を復習しておきましょう。
下記のモデルを使って説明します。
* ユーザー(user)は複数の記事(articles)を持っている
* 記事には複数の写真(images)を添付
[Rails]strftimeあれこれ
# 前置き
現在Railsでマッチングアプリ作成中ですが、strftimeをよく使うので、すぐ見れるよう書き方をまとめておきます。# strftimeって?
日時データを好きなようにビューに表示出来るメソッドです。# やってみよう
今回はcreated_atでやっていきます。
デフォルトだとこうですね。後ろの+0900は使わなさそうですね。
2020-05-22 16:11:01 +0900“`ruby
created_at.strftime(“%Y-%-m-%-d %-H:%M”)# 表示 2020-5-28 20:25
“`こんな風に文字列変換出来ます。
適当に記号並べているわけではありません。笑下記に書式を一部添付しておきます。
もっと知りたい方はこちらにあります。
引用元[pikawaka](https://pikawaka.com/rails/strftime)| 書式 | 返り値 | 説明 |
|:–|–:|:–|
| %Y | 2019 | 西暦を4桁の数で取得する※西暦1年は「0001」 |
| %m | 01 | 月を必ず2桁
Railsアプリで初めて自作ヘルパーを使ってリファクタリングした話
#はじめに
今までRuby on Railsでアプリケーションを作成していて
ふと気になったことがありました。コントローラー作成時に毎回ついてくるコイツ
〇〇_helper.rb
このファイル何に使うんだろ…。
ヘルパーって書いてあるからヘルパーメソッドに関係しているのかな…??この時、私は
“わざわざ同時に作成される物だからきっと便利なファイルに違いない”
と、興味の向くままにQiitaで解説記事などを調べてみました。#結論
自作のヘルパーメソッドを記述するファイルのようです。
(自作ヘルパー == カスタムヘルパー と言うらしい)
ヘルパーメソッドは今日の今日までGemに用意されているモノしか使用したことがなかったので
これは便利そうだ、と直感で思いました。#さっそく使ってみた
他の方のQiita記事を参考にさせていただき
今回は個人開発したアプリのコードリファクタリングに使用してみました。
コントローラー内のリファクタリング内容を本記事の内容にします。###環境
Rails 5.2.3
Ruby 2.5.1###使い方
まずはリファクタリングを
【Ruby】複数の条件下で、配列から特定の値を取り出す方法【select・each】
## できるようになること
複数の条件を用いて、配列から特定の値を見つけることができます。例)1~10までの数字のうち、5以下かつ2で割れるものを導き出しなさい。
みたいな問題が解けるようになります。## 方法
Array#eachとArray#selectを使います。“`ruby
numbers = (1..10).to_a
rule = [[“<", 5],["%", 2]] rule.each do |b| numbers.select! do |a| if b[0] == "<" a <= b[1] else a % b[1] == 0 end end end p numbers # [2,4] ``` ## つまりどう言うことか 条件(今回はrule)をeachで回して、その中に判別したいもの(今回はnumber)を入れる必要があります。かつて、逆にして困っており、最近この方法に気づいたのでまとめさせていただきました。 何か同じ悩みで引っかか
個人的に頻繁に使ったRSpec集
RSpecを書いているうちに、「これとよく似た比較書いたけどどのプロダクトのどのSpecだっけ?」って探して時間を取られた事があったので、ここに記事としてまとめておきます。未来の自分と他の開発者の方に役立つ事を願って。
## エラーログが出力されている事を確認。
“`ruby
it ‘エラーログが出力される事’ do
expect(Rails.logger).to receive(:error).with(/code: 400/)
# 以下、テストしたい処理を書く
end
“`ポイントとしては
– expectをitの一番最初に書く。こうしないとログの出力メソッドがreceiveによって捕捉されません。
– `with`の中に、含まれていてほしいメッセージを書く。そのまま書くと完全一致にならないとパスしないので、スラッシュで囲むことで、特定のメッセージを含んでいた場合のケースを書くことができます。いわゆる正規表現。[参考にしたサイト](https://relishapp.com/rspec/rspec-mocks/v/3-2/docs/setting
Ruby 自作クラスの配列をソートする
#Ruby 自作クラスの配列をソートする
**100日後に1人前になる新人エンジニア(8日目)です**
あれ自作したクラスの入った配列ってどうやってソートするんだっけ…
って今日ちょっと詰まってしまったのでメモとして残しておきます。###自作のクラス
“`user.rb
class User
attr_accessor :name, :age, :heightdef initialize(name, age, height)
@name = name
@age = age
@height = height
end
enduser1 = User.new(“foo”, 15, 190)
user2 = User.new(“bar”, 80, 150)
user3 = User.new(“baz”, 28, 168)
users = [user1, user2, user3]
“`こんな感じで自作のユーザークラスを作りそれらをusersという配列に入れる
このusersの並べ替えについて今日は考える**とりあえずソートし
【Rails初心者必見】Ruby on Railsでversion指定をしてWebアプリを作成する方法
## 開発環境
ruby 2.6.4
Rails 6.0.2.2
## やりたいこと
Rails初心者にとって開発環境を整えるのは難しいですよね
環境構築で挫折してほしくないんです!そこで今回は環境設定の一部ではありますが、Railsのバージョン指定して新規プロジェクトを作成していきます
## versionを指定して新規プロジェクトを作成する
### ステップ1. 特定のRailsのバージョンをインストール
“`
$ gem install rails -v 6.0.2.2
“`## ステップ2. インストールしたRailsを確認
“`
$ gem list rails
“`## ステップ3. インストールしたRailsのバージョンを指定して新規プロジェクトを作成
“`
$ rails _6.0.2.2_ new twinz_blog
# twinz_blogの箇所にはアプリ名を入れてください
“`すごく簡単にできましたね!
## 参考文献
【Rails初心者必見】Railsのversionを指定して新規プロジェクトを作成する方法
https:
Ruby と Python で解く AtCoder ARC080 D シミュレーション
# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Regular Contest D – Grid Coloring](https://atcoder.jp/contests/arc080/tasks/arc080_b)*
Difficulty: 855今回のテーマ、シミュレーション
内容は難しいところはないと思いますが、実装に手間がかかりそうな問題です。
“`exsample2
1 2 2 3 3
4 4 4 4 3
5 5 5 5 5
“`
与えられた数値で上から順に左右に塗りつぶせばOKです。
# Ruby Array
“`ruby.rb
h, w = gets.split.map(&:to_i)
_ = gets.to_i
a = gets.spl
Rubyでリスキーダイスを作ってみた
rubyの練習でハンターハンターに登場するリスキーダイスを作ってみた。
1から20の数字があり20が大凶です。“`ruby
def risky_daice
array = []
puts ‘何回振ろうかな’
stop = gets.to_i
puts ‘ダイスを振るよ’
while true
deme = rand(1..20)
num = array.push deme
if deme == 20
puts deme
puts ‘あーあ出ちゃった’
p “#{num.count}回目で大凶がでた”
break
elsif num.count == stop
puts deme
puts ‘そこでやめ’
p “#{num.count}回振れたよ。また挑戦してね”
break
else
puts deme
end
end
end
risky_daice
“`
“`ruby
-> % ruby risk
インスタンスメソッドとクラスメソッドの違い
Rubyに関して学習中に表題の部分で混乱してしまったので、
整理するためにもまとめて見ました。※誤っている点がありましたら、ご指摘いただけると幸いです。。。
#インスタンスメソッドとクラスメソッドの違い
class Example
def index
end
end①example = Example.new
example.index //インスタンスから呼び出す →○②Example.index //クラスから直接呼び出せない →こちらを使用する際はメソッドにself.をつける(self.index)
index //もちろんこれではエラー表示
要するに、基本メソッドを呼ぶ際は、インスタンスを作成してそこからよび起こす(①)。
→インスタンスメソッド②のようにインスタンスの作成をせずともメソッドを呼び起こす方法。
→クラスメソッドといったようなイメージ。
クラスメソッドの使用のメリットとしては、他インスタンスの情報を含まないメソッ
データの並び替え降順、昇順/Railsでまとめてみた
投稿したデータや記事の並び替えを変える際に、descが降順?降順?で毎回ググって調べていたのでまとめました。
“`ruby:board.rb
class Board < ApplicationRecord scope :desc, -> { order(created_at: :desc) } #作成の降順
scope :asc, -> { order(id: :asc) } #idの昇順 デフォルトでasc(昇順)で表記されるので明示的に書くことは少ない
end
“`
なぜファイル末尾に改行を入れるのか
Rubyのプログラムを書いていてふと思ったのでメモ。
[なぜ最終行に改行を入れるのですか?](https://teratail.com/questions/71778)
>POSIX上、テキストファイルは「行」の集合体で、そして「行」は「0文字以上の文字+改行」からなっている、とのことです(Qiita)。
Rubyのコードでも、(よほど変なことをしない限り)それに従わない必要性のある理由もないことでしょう。C言語においても、改行で終わらないコードは正しく動くことが保証されません。– そう決まっている
– 改行がなかったらエラーが起きるかもしれないということみたいですね。
# VSCodeでファイル保存時に自動で改行うを入れる設定
1. ツールバー > Code > Preferences > Settings で設定を開く
2. 「insert newline」で検索
3. 「Files: Insert Final Newline」の項目にチェックを入れる
マイグレーションファイルがダブっちまった
## 近況報告
絶賛就活中でございます。最近やっているのは習慣化ですね。最近,英語と筋トレを習慣化させることができました。いきなり英語は飽きると思ったので,Gacktの母音発音のyoutubeをみて簡単な文を音読しています。考えが改まったことがひとつ,Google翻訳ってあるじゃないですか。あれ,全然翻訳してくれないからゴミだと昔は思っていたんですけど,実際は自身の発音がゴミだったってことがわかりましたw 筋トレは腹筋スクワットメインの運動を自重かつ強度をあげて20分だけ行なっています。腹筋が生まれて初めて横以外に割れそうな勢いです。そしてここ数日で始めたのは朝型転換です。ここ二ヶ月日付が変わったらアマゾンなプライムでビデオ見まくっていたので,生活習慣の改善として行なっています。##今回のお題
**マイグレーションファイルがダブってる**
始めたての初心者がいつの間にかハマるやつですね!・・・はい,やらかしました。
⇨**解決策は片方を消す。以上。**##マイグレーションファイル
●マイグレーションファイルは噛み砕くとテーブルの設計図です。
rails db:mig
hamlでクラス名やid名に変数を使う
アプリ開発中にクラス名にインデックスをつけたいときがあり、書き方が分からずつまづいたので、同じような方がおられましたら参考にしてください。
### 基本
まず、基本的なクラス名id名の書き方は「.」「#」始まりで書き始めます。“`
#クラス名
.item_name
%p.item_name#ID名
#item_name
%p#item_name
“`###変数を使った書き方
そして今回わたしがつまづいたのはeach文の中で変数名を使った書き方です。
下記の書き方で適用されました!“`
-@items.each_with_index do |item, i|
%div{class: “#{item.name}”}
%p{class: “item_name_#{i}”}
“`クラス名を{}で囲うと、適用されます!
each文ではない場合でも同じ書き方で適用されます“`
%div{class: @item.name}
“`
Rails 6.0で”Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1.”という警告が出たときの対処法
## はじめに
MySQLを使っている既存のRailsアプリケーションをRails 6.0にアップデートすると、次のような警告が出ることがあります。
“`
DEPRECATION WARNING: Uniqueness validator will no longer enforce case sensitive comparison in Rails 6.1. To continue case sensitive comparison on the :name attribute in User model, pass `case_sensitive: true` option explicitly to the uniqueness validator.
“`> (翻訳)
> 非推奨の警告: UniquenessバリデータはRails 6.1で「強制的に大文字小文字を区別する比較」をしなくなります。Userモデルの`:name`属性について引き続き「大文字小文字を区別する比較」を使い続けたい場合は、uniquenessバリデータに対して明示的に`case_sensiti