プログラミング -> 言語 -> Ruby

RSpec で特定のテストだけを実行する方法

結論 --example オプションを使い、その値として「テストの名前」を入れます。 例 以下のような Spec があったとします。 feature 'おはよう' do scenario 'こんにちは' do # ここにテストが入る end end このとき、このテストを実行するためには次のコマン…

Ruby の Twitter の gem にて、凍結ユーザの 'name' は Twitter::NullObject で返ってくる

gyazo.com 結論 標題の通りなので、たとえばデータベースにユーザデータを格納しようとする際に name に NOT NULL 制約をかけていたりバリデーションをかけていたりすると、エラーになります。 対処法の一つとしては Twitter::NullObject のときは例外として…

Ruby の Twitter gem で DM を取得するときの注意点 (REST API)

結論 初回は @client.direct_messages_events(count: 1) で取得し、その戻り値から next_cursor を得て、それを用いて次回は @client.direct_messages_events(count: 1, cursor: next_cursor) で取得します。 next_cursor に nil が返ってきたら取得完了です…

Ruby で Google API を google-api-ruby-client を使って操作する際に Google::Apis::TransmissionError が出る場合の対応

結論 リトライをする(こちらのせいではない)*1。 具体的方法 以下にリトライをするための方法が書いてあります。 github.com client.request_options.retries = 3 *1:ただし、アルゴリズムが悪いことなどが原因のことはある

Ruby の all? メソッドはレシーバが [] の場合は true を返すので注意が必要

結論 標題の通りで、知っている人には当たり前なのですが、以下のような戻り値になります。 [].all? { |foo| foo == 1 } #=> true どうするか all? を使わないようにすればこのハマりやすい返り値から逃れられます。もし all? を使う場合には、レシーバが []…

Ruby で &(アンド、アンパサンド)一つの記号は何を意味するか

結論 配列を & で結びつける場合には、「論理積(積集合)」を配列で返す。 論理積の例 x = [1, 2, 3, 4, 5] y = [3, 6, 1, 9, 7] x & y #=> [1, 3] 補足 同様に、配列を |(縦線、パイプ、バーティカルバー)一つで結びつける場合には、「論理和(和集合)…

Ruby で変数名にハイフンを含ませると(一般的には)エラーになる

結論 以下のとおりです。 [1] pry(main)> foo_bar = 'hoge' => "hoge" [2] pry(main)> foo-bar = 'hoge' NameError: undefined local variable or method `foo' for main:Object from (pry):2:in `__pry__'

Ruby で「半角カナを全角カナに変換する」あるいは「全角数字を半角数字に変換する」方法

結論 unicode_normalize(:nfkc) メソッドを用います。 例 'アイウエオ'.unicode_normalize(:nfkc) #=> "アイウエオ" '123456'.unicode_normalize(:nfkc) #=> "123456"

fzf を pry(Rails コンソール)で使う方法

結論 1. rb-readline の gem をインストールする $ gem install rb-readline 2. .pryrc に以下のように書きます。 .pryrc は Ruby のスクリプトの形で書きます。 require 'rb-readline' require 'readline' if defined?(RbReadline) def RbReadline.rl_rever…

Ruby で Cloud Natural Language API を使う

Cloud Natural Language API とは GCP の テキスト分析用 API です。 使い方(導入) 公式ドキュメント が全てですが、一部ハマったところを書いておきます。 1. 認証用の JSON ファイルの取得 認証用の JSON ファイル(秘密鍵込み)は、GCP の「IAM と管理…

Ruby 2.7 で 'google-cloud-language' gem を使う場合には 'google-protobuf' gem を明示的に 3.11.1 にする必要がある

前提 2020/05/12 現在のお話です。 結論 具体例 具体的には、Gemfile を以下のようにすればいいでしょう。 gem 'google-cloud-language' gem 'google-protobuf', '3.11.1'

VS Code で Rubocop の設定をうまく引き継いでくれない問題への一つの結論

提示されました。

Twitter の gem を用いた際にツイートのオブジェクトをシリアライズしてそのまま保存する

前提 以下のコードにおいて tweet は Twitter::Tweet クラスのオブジェクトであるとします。 結論 tweet に対して to_json メソッドを用います。結果として得られる値は JSON の文字列なので、データベースにそのまま保存できます*1。 serialized_tweet_obje…

Faker を使って Pokemon の情報を用いる場合には Faker::Game::Pokemon というふうに Game という名前空間を指定する(ようになった)

結論 少し古い記事ですと、Pokemon の名前空間が Faker::Pokemon として紹介されていることがあります。たとえば、以下の Qiita の記事です。 qiita.com これが現時点*1では、Faker::Game::Pokemon となっています。古い情報を参考にするとエラーになるので…

Ruby の Headless Chrome 実装である Ferrum gem を触ってみました

Ferrum とは こちらの gem です。Ferrum とは「フェルム」のこと、すなわち「鉄」のことです*1。 github.com 特徴 「Puppetrer のような、ただ、Puppeteer よりもシンプルな」、Chrome の API を提供する gem とのことです。 As simple as Puppeteer, though…

Gyazo を Ruby を用いて API 経由で扱う方法

Gyazo には API が用意されているので、アプリケーション経由で画像を取り扱うことができます。 1. アプリケーションを登録する まずはアプリケーション登録をするために、登録ページに行きます。 gyazo.com 以下のようにしてアプリケーションを登録し、clie…

はてなブログ API 用の gem である "Hatenablog" を使ってみました

"Hatenablog" とは "Hatenablog" とは、はてなブログ API 用の gem です。 github.com 使い方 使い方は、作者の方の記事を読めばほぼ分かるかと思います。 blog.kymmt.com 併せて README を読むとよいでしょう。 github.com 使い方詳細 実際に使ってみました…

「リファクタリング:Rubyエディション」の復刊版が予約受付中

中古市場で高値が維持され続けてきた「リファクタリング:Rubyエディション」ですが、「復刊ドットコム」により復刻されることが決定しました。 www.fukkan.com 配送時期は2020/03/下旬で、価格は税込みで 8,800円 です。総在庫数は不明ですが*1、欲しい方(…

rbenv install をする際に「configure: error: something wrong with LDFLAGS=......」というエラーが出た際の解決方法の一つ

前提条件 環境は macOS だという前提条件にします。 結論 brew reinstall openssl を実行して openssl を再インストールします。私の場合はこれで解決しました。以下、インストール時のログです。

Ruby の &:upcase 記法を改めて整理してみる

Ruby において面食らう記法の一つは、map メソッドなどの引数に現れる、&:upcase というような、以下の3つの要素が同時に存在する記法だと思います*1。 アンド(アンパサンド) コロン 文字 上記の例では upcase 改めてこの記法について整理してみます。箇条…

Ruby で クロージャ を実装する(Proc オブジェクト を用いる)

クロージャ とは Wikipedia で「クロージャ」を見てみます。 ja.wikipedia.org クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念で…

bundler v2.1.2 にて --path オプションを追加したら DEPRECATED が出たので bundle config set path に移行した

流れ まず、Bundler を v2.1.2 にした $ gem update bundler を行って Bundler のバージョンを v2.1.2 にしました。 $ gem update bundler Updating installed gems Updating bundler Fetching: bundler-2.1.2.gem (100%) Successfully installed bundler-2.…

インストール可能な gem の バージョン番号 の一覧を表示する方法

結論 Itamae を例に取ります。インストール可能な Itamae のバージョン番号一覧を表示させるためには以下のコマンドを実行します。実行結果も付与します。 $ gem search ^itamae$ --all *** REMOTE GEMS *** itamae (1.10.6, 1.10.5, 1.10.4, 1.10.3, 1.10.2…

ImageMagick 7 で rmagick を使う方法

rmagick とは ImageMagick を扱う gem です。 github.com ImageMagick 7 では rmagick は使えない かなり以前からですが、ImageMagick 7 では rmagick を使うことができません。bundle install する際に以下のようなエラーが出て怒られます*1。 An error occ…

FactoryBot で Trait を定義したら NoMethodError: が出る場合

結論 引数を指定する際に {}(波括弧、ブレイス)を使いましょう。 具体例 ダメな例 FactoryBot.define do factory :user do trait :ikemen do name '太郎' end end end OKな例 FactoryBot.define do factory :user do trait :ikemen do name { '太郎' } end…

Ruby で require に書く場所は「コマンドを実行する場所からの相対位置」になる

実例 ./lib/x.rb というファイルが以下のようであったとします。 class X (中略) end また、./lib/a.rb というファイルが以下のようであったとします。 require './x' (以下省略) このとき、 カレントディレクトリが ./ であるときに $ ruby ./lib/a.rb …

RSpec で Headless Chrome を使う際に Chrome が Dev だったり Canary だったりする場合(安定版とは異なるバージョンの Chrome を使っている場合)の対処法

大原則 使用する Chrome に合った ChromeDriver を ダウンロード します。 合致するバージョンがない場合に以下を試します。 結論 エラーが出たときに出てくるエラーメッセージをよく読みます。 Webdrivers::VersionError: Unable to find latest point rele…

Visual Studio Code でリアルタイムに RuboCop の結果を表示する

必要なもの gem rubocop solargraph VSCode の拡張機能 ruby-rubocop Ruby Solargraph VSCode の設定方法 ruby-rubocop について 変更の必要なし Ruby Solargraph について Solargraph: Diagnostics の設定を true にする 動作確認をしてみる 下の画像はファ…

Ruby で ?(はてな、ハテナ、クエスチョンマーク)の後ろに文字を書いた場合の戻り値(返り値)は文字リテラルになる

なぜこの記事を書いたのか 最高クラスのググりにくさなので、何とかして引っかからないかと思い書きました*1。 答え 答えはズバリここです。 きっかけ 南谷さんのツイートがきっかけで調べたのですが、ほんとにググりにくかった……。 Matz が キーノートで ?a…

MySQL 8 を使っている場合に mysql2 の gem install で失敗するとき(Mac)

前提 gem install でインストールする場合です 結論 $ gem install mysql2 -- --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib" 参考

Powered by はてなブログ