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

Ruby で URL から正規表現で各種文字列(ファイル名など)を抽出する

結論 RFC3986 に従います(後述)。 たとえば対象とする URL が https://pbs.twimg.com/media/FAlJ_JsUUAAgOSq?format=jpg&name=orig であったとします。そのとき、以下のように抽出できます。 url = 'https://pbs.twimg.com/media/FAlJ_JsUUAAgOSq?format=j…

Ruby で Unicode エスケープシーケンスをデコードする

結論 URI#decode_www_form_component を使いましょう。 具体例 以下、エスケープシーケンスをくくるためにダブルクォートを用いることに注意です。 [1] pry(main)> URI.decode_www_form_component("\xE3\x81\x82\xE3\x81\x84\xE3\x81\x86") => "あいう" 検索…

Lita を Heroku で用いる際にヘルスチェックのエンドポイントを作る(Webサーバ機能を使う)

Lita とは www.lita.io 結論 まず以下のようなハンドラーを作ります。 module Lita module Handlers class Healthcheck < Handler http.get '/healthcheck' do |_request, response| response.body << 'OK' end Lita.register_handler(self) end end end そ…

Ruby 3 を用いると Lita にて Webサーバー が応答できずに落ちるので注意する

Lita とは www.lita.io 結論 2021/07/25 時点では、以下のソースにあるように Ruby 3 で escape メソッドが削除されたため、Webサーバ の応答をしようとすると落ちます。 github.com 以下のようにコメントが書いてあります。 # The http_router gem still us…

Lita の config ファイルにおける Redis のアドレスの指定方法

Lita とは Ruby製の ChatBot フレームワークです。 www.lita.io 設定ファイル内での Redis のアドレスの指定方法 lita_config.rb というファイルに設定を書き込んでいきます。その際、Redis のアドレスを指定するには以下のように書きます。 (前略) config…

Lita のローカル開発時にレスポンスを確認するには @Lita をまず先頭に入力する

Lita とは Ruby製の bot のフレームワークです。 docs.lita.io 結論 ローカル(シェル)で動作確認する際には @Lita を先頭に付けないとポストが受け付けられません(レスポンスが返ってきません)。 以下のように、@Lita を先頭につけて bot に話しかける必…

Mac で mimemagic をインストールしようとした際にエラーが出る場合の対処法

gyazo.com 現象 以下のようなエラーメッセージが出る場合です。 An error occurred while installing mimemagic (0.3.9), and Bundler cannot continue. Make sure that `gem install mimemagic -v '0.3.9' --source 'https://rubygems.org/'` succeeds befo…

Twitter REST API の trends で用いる WOEID の一覧(日本)

結論 以下のとおりです。 Kitakyushu: 1110809 Saitama: 1116753 Chiba: 1117034 Fukuoka: 1117099 Hamamatsu: 1117155 Hiroshima: 1117227 Kawasaki: 1117502 Kobe: 1117545 Kumamoto: 1117605 Nagoya: 1117817 Niigata: 1117881 Sagamihara: 1118072 Sappo…

VSCode の Ruby Test Explorer を用いる際にテスト対象 Spec が表示されない場合

結論 設定の Test Framework の項目で明示的にテストに用いるフレームワーク*1 を指定するといける場合があります。 gyazo.com *1:RSpec とか Minitest とか

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 が出る場合の対応

結論 リトライをする(こちらのせいではない)。 具体的方法 以下にリトライをするための方法が書いてあります。 github.com client.request_options.retries = 3

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)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念で…

Powered by はてなブログ