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

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

「アプリケーションが壊れているのに検知できないテストコード」を書かないようにするための、べからず集

## はじめに

テストコードを書くことは重要です。
テストコードがないアプリケーションよりもテストコードがあるアプリケーションの方が望ましいことは間違いありません。

ですが、テストコードも書き方を間違えると、アプリケーションが壊れているのに正しく検知できないテストを書いてしまう可能性があります。

この記事ではそんな「アプリケーションが壊れているのに正しく検知できないテスト」のコード例を「〜するべからず(〜してはいけない)」の形式で紹介し、その修正方法を説明していきます。

サンプルコードはRailsアプリケーションをRSpecでテストする場合はを想定したものになっていますが、基本的な考え方自体は他の言語やテスティングフレームワークでも適用可能なはずです。

### おことわり:RSpecに詳しいみなさんへ

本記事ではRSpecに不慣れな人がこの記事を読むことも想定して、あえてRSpecらしいテストコード(RSpecに詳しくないと理解しづらいコード)を避けている部分があります。

“`ruby
# たとえば、こんなふうにbe_truthyを使ったり・・・
expect(user

元記事を表示

選択肢の「その他」を選んだ時のテキスト入力

フォームで選択肢を実装した場合、その他項目を設けてその他が選択された時はテキスト入力を必須とする実装をしたい時がある。
割とどこにでもある実装だが、バリデーションも含めてちゃんと実装しようとすると、「あれ、どうやるんだっけ?」となったのでメモとして残す。

# 概要
例えば会員登録するユーザーの職業情報を得るために、いくつか選択肢を用意し、選択肢に当てはまらない場合はフリーテキスト入力を必須となるようにしたい。
その場合、フリーテキスト欄をその他が選択された場合だけ表示、それ以外の場合は非表示という実装をJavaScriptで行う以外に、Modelのvalidationにも記述する必要がある。
選択できる職業は、エンジニア、マーケッター、デザイナー、オペレーション、マネジメント、その他の6種類とし、その他が選択された時だけフリーテキスト欄入力を必須とする。

## Schema
テーブルのカラムには、下記の2つのカラムをつける。(カラムの追加方法などはここでは省略)
db/schema.rb

“`ruby
create_table “users”, force: :cascade

元記事を表示

【Rails】 FullCalendar カレンダー内でのドラッグによるイベント新規作成方法

# はじめに
Rails アプリケーションにて、 FullCalendar カレンダー内でのドラッグをするとイベントを新規作成できる方法について説明します。
scaffold で Eventモデルを作成しているため、最低限の作業量でカレンダーに機能を追加する方法を実現しています。

### イメージ

赤色の矢印方向へドラッグすると、、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308256/a4c69f44-9dac-d832-a849-86af8e4fbaf9.png)

新規でイベントが作成できる方法について説明します!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308256/91b1245b-07d6-affb-8fc9-6d215efcdf85.png)

#### 関連リンク
関連リンクを下記に載せておくので、必要であれば参考にしてください。。

* 【Rai

元記事を表示

[git rebase] ブランチにmasterの情報を持ってきて作業するにはどうすればいいの?

**やり方や仕組みを記述したちゃんとした記事はたくさんありますのでリンクをご参照ください。**

ブランチで作業してるけど、作業中に他のメンバーがマスターにマージしてマスターの情報が
新しくなった!
という時に、作業中の自分のブランチにマスターの最新情報を追加して自分がマージ
した時のコンフリクトを最小限に抑えたい&マージされた内容をもとに実装をしたい
と言ったことを考え使うコマンドがリベースという認識でおります。
(もっと他にあると思いますが、自分なりの解釈です)

##環境
■GithubDesktop使用
■ターミナル
■プルリクはしていません(プルリクあげてるものはGithubでプルリクをcloseしています)
[プルリクエストをクローズする](https://help.github.com/ja/github/collaborating-with-issues-and-pull-requests/closing-a-pull-request)
■commitはしてます

猿とおんなじレベルの自分でも理解できるように自分なりに噛み砕いて記述します。
実行したこととエラーについて

元記事を表示

脱Webpacker Rails

## Rails + Webpack
Rails6.0からデフォルトでWebpacker(WebpackをRailsでラップしたGem)が搭載されていますが、無駄に処理がわかりにくくなっており、使い勝手がよくありません…
脱Webpackerをして、RailsにWebpackを導入してみます。
以下にボイラーテンプレートを置いておくので、よければ参考にしてください。

https://github.com/Tak-Iwamoto/rails-webpack-boiler-template

## 1. Rails関連
– 以下のGemは使用しないので削除する。

“` Gemfile
//
gem ‘sass-rails’, ‘>= 6’
gem ‘webpacker’, ‘~> 4.0’
gem ‘turbolinks’, ‘~> 5’
//
“`

– app/assets, app/javascriptを削除する。
– asset precompileを無効にする。
config/application.rbに以下の設定を追加し、
assets precompileを

元記事を表示

[RuboCop] UnknownEnvironment 警告の解決方法

対象 ver: rubocop (0.71.0)

## テストで Rubocop が警告を吐く [ C: Rails/UnknownEnv: Unknown environment staging?. ]
Rails アプリに staging 等の環境を追加して `Rails.env.staging?` といった処理を書くと、RuboCop に警告されます

出力されたログ ※一部を省略しています

“`
$ rails rubocop

Inspecting 50 files
…………………C……………………….

Offenses:
app/controllers/hoge_controller.rb:51:60: C: Rails/UnknownEnv: Unknown environment staging?.
if Rails.env.production? && Rails.env.staging?

元記事を表示

Railsでシンプルな検索機能を実装する

RailsでGem等を使わず、余計なメソッドを作ったりもせずにとにかくシンプルに検索機能を実装する方法です。

今回はtitleというカラムを持つpostsテーブルを検索するという状況設定で話をします。

#フォームを作る
index.htmlに検索フォームを作ります。
検索はテーブルに変更を与えないため、form_tagを使用します。

“`erb:view/index.html.erb
<%= form_tag('/search', :method => “get”) do %>


<% end %>
}
“`

#コントローラーに検索用のアクションを定義する
2行目で検索フォームから送信された値をkeywordというパラーメーターで受け取っています。
3行目ではtitleに@keywordを含む列を検索し、@postsに代入します。

“`ruby:posts_controller.rb
def search
@keyword = p

元記事を表示

RubyでStackdriver Monitoringにカスタム指標を書き込む

とあるRuby製のシステムの監視で、Stackdriver Monitoring の**カスタム指標**を使う機会があり、Rubyからカスタム指標を扱う方法を調査した。

# カスタム指標とは

Stackdriver Monitoring の[カスタム指標](https://cloud.google.com/monitoring/custom-metrics?hl=ja)を使うと、独自の指標を Stackdriver で収集、モニタリングできるようになる。つまり、Metrics Explorer の以下のようなあたりに項目が追加され、その指標のグラフ化や、アラートの基準として使うことができるようになる。

スクリーンショット 2020-01-28 20.08.21.png

前述のシステムでの使用例としては、バッチ

元記事を表示

Action Cableへのidの受け渡し

[Action Cableの設定でつまずいたこと](https://qiita.com/kazama0119/items/755e8ff6f77aafb830d7)をする際につまずいたので備忘録も兼ねて共有します。

##わからなかったこと
`channel.rb`の`speak関数`が実行した際に、user_id と chatroom_id を含むテーブルを作成したいが、`channel.rb`で id を取得する仕方がわからない

##コードの説明

###html.erbですること

1.属性値として`data_user` と `data_room` を設定する
2.その値として`current_user.id` と `@chatroom.id` を与える
(current_userにはログイン中のユーザー情報。@chatroomには、現在いるチャットページの情報が入っています。)

“`html.erb