コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Ruby

sidekiqの終わらせ方

公式のwikiより、イマイチ意味が理解できてなかったので再整理も込めて。 出典元 Signals · mperham/sidekiq Wiki · GitHub 止め方 新たなプロセスの受付を止める TSTP のシグナルを送る $ ps -ef | grep sidekiq 779199931 22540 18659 0 9:28PM ttys013 0:…

Rubyのblockはrescueで拾えるし、eachの場合は後続処理は実行される

あれ、そうなんだ!というの、原理としてはなんとなくわかるが情報のソースがないのでとりあえずできるよというところまで 環境 $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] コード例 def kicker(array) vals = array.each_with…

Rubyで 0 を 判定するなら zero? のほうがスマート

若干ポエム寄りな話。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] ドキュメント曰く 自身がゼロの時、trueを返します。そうでない場合は false を返します。 - instance method Numeric#zero? (Ruby 2.6.0) 使う利点 if a …

Rubyにはいずれかが真になるかを調べる one? というメソッドがある

なるほどこういうのも有るのかというやつ、昨日の投稿とセットでお楽しみください。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 使い方 ブロックを用いない場合 いずれかが真だったらtrueを返す [true,false,false].one? #…

Rubyのおいて判定などに用いる「偽」はnilとfalse、それ以外が「真」となる。

特にPHPから来た人には頭に入れておいたほうがいいやつ。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] どういうことか FalseClassであるfalseと何もない nil のみが偽を表すもので、それ以外は全て真になる。 ドキュメント…

RubyのExceptionにはbacktraceというデバッグ用の情報が引き出せるメソッドがある

いつもメソッド名を忘れるのでメモ 環境 $ ruby -v ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux] リファレンス instance method Exception#backtrace (Ruby 2.6.0) 使い方例 Railsなどだと途中で拾って握り潰す場合などに使ったりする def err…

Rubyで特定の文字コードにて変換できない文字を消したいときは encodeでオプションを駆使すると消せる

明示的に歯抜けにさせるというコマンドはないが、あわせ技でできる 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] やり方 encode メソッドにはオプションとして未定義なものはリプレースする :undef => :replace …

RubyのRangeオブジェクトで次の内容を差配しているのはsucc(next)メソッドの結果

次をどうやって判定しているんだろう、と思ったらこんなメソッドあるんだ的なメモ 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] ドキュメント Range#each は各要素の succ メソッドを使用してイテレーションする…

Rubyでカウントアップ/ダウンをするメソッドあれこれ

逆引き的にお送りします。 環境 $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] メソッド 一定回数やる場合の times x回繰り返すというときにつかえるもの、indexに入るのは0から 5.times { |n| p n } # 0 # 1 # 2 # 3 # 4 指定し…

Rubyでeach.with_indexを使うと n+1みたいなことをしなくてもいい感じに1からはじまる値が取得ができる

配列の長さが個数を兼ねているときによく考えるネタ。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 実例 要件 配列に画像のファイル名が入っているので No.1:添字0の画像名、No2:添字1の画像名 というように表示したい 対象…

Rubyの and と && は使い方によって優先度の影響で振る舞いが変わるので気をつける

DoubleRenderError避けに使う書き方で render :hoge and return みたいになぜandを使うのかという話。 実例 たとえばこんな感じで test.rb を作る def normal(val) p val and return p "end of normal" end def shortcut(val) p val && return p "end of sho…

Rubyで環境変数を取るときはENVオブジェクトを使えばとれる

当たり前の話だけどそれにちょっとトリビアをつける 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bin/rails -v Rails 5.2.2 使い方 ENV[{{キー名}}] で値が取れる $ HOGE=huge irb と起動すれば ENV["HOGE"] #=> "huge" …

BOM付きのCSVをRubyのCSVクラスでreadする

header:true しようとしたらできなかったのでそのメモ 環境 $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] どういうことか BOM付きのファイルを CSV クラスで読み込むと、先頭行にBOMの情報がついてしまう。そのため、headerのオ…

Rubyの positive? や negative? は0を含めない

以上ではなく、それより上。そりゃ文字通りなんだけどさネタ。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 挙動 positive?とnegative? は以下の感じ。 1.positive? #=> true -1.positive? #=> false 0.positive? #=> false…

Webmockでform送信されるリクエストをモックする

割と考えればわかりそうなことだが、ピンと来なかったのでメモとして書く 環境 webmock (3.5.1) やり方 WebMockのwithに以下の記述を書き足す headers: { "Content-Type": "application/x-www-form-urlencoded" } 例 user_idの100がformでPOSTでされたときに…

RSpec3の配列系マッチャを利用シーン別に逆引き表を作ってみた

RSpec3から結構選択肢があるようなので一覧表にしてみる 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bundle exec rspec -v RSpec 3.8 - rspec-core 3.8.0 - rspec-expectations 3.8.2 - rspec-mocks 3.8.0 - rspec-rails…

Rubyで初期値設定を行うときは || を使って nil 判定をする自己代入式を使うと便利

x ||= 10 みたいな形でORの仕組みを使って初回だけ値を入れるやり方を考える 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] 考え方 たとえば、インスタンス変数に 「すでに a に 値が入っていれば値をそのまま使…

Rubyのgem、configで使う設定値のymlには環境変数を指定することができる

erb的な書き方はできるんですよ、というメモ 環境 rails (5.2.2.1) config (1.7.1) 書き方 <%= %> の記法で書く。 キー名: <%= ENV["指定したい環境変数名"] %> 実践 以下のように記述する sample: <%= ENV["SAMPLE_SAMPLE"] %> 環境変数を指定しないとnilに…

RubyのCSVライブラリは header: true とすると1行目の行情報でハッシュのように扱える

トリビア風タイトルネタ 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 実例 例えばこんなCSVがあった場合 no,name,age 1,Taro,20 2,Ziro,31 3,Saburo,33 名前のnameだけ出力したいなぁとかなると、CSVの1行目を削ってからRea…

Faraday(にてNet::HTTPを使う場合)で証明書検証をスキップする

2日連続Faradayネタ 環境 faraday (0.15.4) 考え方 FaradayではHTTP接続のadapterが指定できるので、そちらで Net::HTTP を使えばSSLの認証モードとして証明書検証が失敗しても続ける指定ができるのでそちらを使う やり方 Faraday.new do |faraday| faraday.…

RubyのFaradayで送信するURLはURIエンコードを勝手にかけてくれる

表題の通りネタ 環境 faraday (0.15.4) 実演 下記の用にクライアントクラスを作る client = Faraday.new do |faraday| faraday.response :logger #ログが見れる用に faraday.adapter Faraday.default_adapter # デフォルトアダプタ指定 end まずは普通のパラ…

Rubyで , 区切りの代入は配列扱い

タプルっぽい動きではあるが、そういう機構ではない。 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin18] どういうものか a,b = 1,2 のような記述の話。 上記のような個別になるが、格納先がひとつだと配列として入る…

Rubyでサッとカウントアップのループを書く書き方

本当にメモ書きレベルのトリビア 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 書き方 範囲式の x..y を使って書く 例 (1..4).each { |inc| p inc } #1 #2 #3 # カウントダウンしたい場合 reverse_eachを使うこともできるが…

Faradayで普通のフォームのようなPOSTする

すげー当たり前だけど、Faradayがらみは application/json の事例しかないので改めて書いてみる 環境 faraday (0.15.4) 考え方 POST リクエストは、ふつう HTML フォームを介して送信され、サーバーに変化をもたらします。この場合、 <form> 要素の enctype 属性も</form>…

RailsでのRSpec実行時乱数の状態を実行毎に変わらないように固定する

RSpecでsampleするとコケるんだけど特定しづらい…みたいな奴を解消する。 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] $ bin/rails --version Rails 5.2.2 $ bundle exec rspec --version RSpec 3.8 - rspec-core 3.8.0 - r…

RailsでIDを指定したリソースに対して、更に持つリソースを持つ情報を別コントローラーに割り当てるときのroutes.rbの書き方

あれ、どうやるんだっけ?というときのメモ 環境 $ bin/rails --version Rails 5.2.2.1 例 例えばユーザID100が所持する本が欲しい場合、以下のURLが思いつく https://example.com/users/100/books みたいな場合 resources :users do get ":id/books" => "us…

Rubyにおける%記法と%iと%wの挙動

よくRubocopに直された状態になり、あれ、これ何と同じなんだっけ?ってなるのでメモ %(パーセント)記法 %を使う記法はリファレンスにも%記法として紹介されている。 リテラル (Ruby 2.6.0) - %記法 %wと%W 小文字のダブリューで始まるとシンボルとして生成…

Timeのmktimeをすると、タイムゾーンはシステムに依存する様子

おお…なるほど…?という実装。あんまり明記されていないので言い切れない感じのタイトル。 環境 マシンA $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-linux] $ date 2019年 4月 10日 水曜日 06:39:32 UTC マシンB $ ruby -v ruby 2.3.7p45…

RubyでYAMLのstamp型を読み込むと、それっぽい文字列があってもそのままだとタイムゾーン情報文字列が出てくれない

動作原理までは突き止められていないのでただのメモ 環境 $ ruby -v ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-darwin18] 例 例えばこんなyamlを text.yaml として用意する stamp1: 2005-01-01 00:00:00 +09:00 stamp2: 2005-01-01 00:00:00 +10:00…

Rubyのcase文において、複数対象したい場合は , 区切りで指定できるし、その定義は配列を使うこともできる

滅多に大量のwhenとかしないんですが、やる場合のメモ 環境 $ ruby -v ruby 2.6.2p47 (2019-03-13 revision 67232) [x86_64-darwin18] 実例 対象の値が taro か ziro の場合だけ同じ反応をするようなcase文を書く , で区切る場合 NAME_KEYS = "taro","ziro" …