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

Google Sheets API (Ruby) で update_spreadsheet_value メソッドの引数の意味

前提 以下のようなメソッド実行例です。 便宜上、以降では以下のコメントに基づいて 1つめ、2つ目... という形で引数を呼ぶことにします service.update_spreadsheet_value( sheet_id, # 1つめ range, # 2つめ value_range_object, # 3つめ value_input_opti…

Twitter で凍結されたアカウント情報を取得しようとした場合のレスポンス

※ 2022年4月10日(日)現在の情報です 結論 Ruby (https://github.com/sferik/twitter) の場合 /path/to/vendor/bundle/ruby/3.1.0/gems/twitter-7.0.0/lib/twitter/rest/request.rb:97:in `fail_or_return_response_body': User has been suspended. (Twitt…

Ruby にてハッシュの「キーだけ」を加工したい場合には transform_keys メソッドを用いる

結論 たとえば、{ foo: 'bar', hoge: 'fuga' } というハッシュがあったとします。このハッシュの foo および hoge のそれぞれを大文字に変更したい場合には次のようにします。 { foo: 'bar', hoge: 'fuga' }.transform_keys { |key| key.upcase } 上記の戻り…

Danger (JS) を GitHub Actions で導入する

結論 作成するファイルは以下の 2つ です。 .github/workflows/danger_js.yml ファイル名は何でも良いです 単独のファイルとして切り出さず、既存の yml に内容を追加しても大丈夫です dangerfile.js ファイルの内容 2つのファイルの内容は次のとおりです。 …

Rakeタスク で引数を取る時にクォートで囲まないと zsh ではエラーが出る

実例 クォートで囲まないと NG。 $ bundle exec rails foo_task:barbar['hoge','fuga'] zsh: no matches found: foo_task:barbar['hoge','fuga'] クォートで囲むと OK。 $ bundle exec rails "foo_task:barbar['hoge','fuga']" (正常処理)

Twitter の API で取得できる media(画像)の URL は原寸大画像を示してはいない

結論 たとえば、API で取得できる media_url_https が https://pbs.twimg.com/media/FAlJ_JsUUAAgOSq.jpg であったとします。この URL に wget をしても原寸大画像は得られません*1。 常に原寸大画像を取得するためには https://pbs.twimg.com/media/FAlJ_Js…

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…

Powered by はてなブログ