ruby
環境 Capistrano 3.11 症状 Capistranoは非常に便利なデプロイツールで、Railsをデプロイするなら必須だと思う。いろいろ機能があって、その中でもdefault_envでexecuteするときの環境変数を設定できたり、withinでそのディレクトリの中で実行とかできる。。…
何がしたいか VS codeを使うようになったんだけど、Rubyの保管をするために拡張機能でsolargraphをインストールした castwide/vscode-solargraph: A Visual Studio Code extension for Solargraph これは非常に便利で、まぁruby書くなら必須拡張機能だよね、…
完成コード require 'json' require 'slack-notifier' def hello(event:, context:) begin if event.dig('queryStringParameters', 'message').nil? raise "require message" end notifier = Slack::Notifier.new( "HOOK_URL", channel: "#speed_test", user…
Q. RubyのCSV読み込みが遅い A: Rubyのバージョンを2.6以上にしろ 以上 理由 なぜRubyのバージョンを上げるとCSVのパースが速くなるのか。理由は単純で効率化されているから 以下のサイトがめっちゃ詳しく解説している。 www.clear-code.com 実際にベンチマ…
使用例 require 'parallel' require 'open-uri' array = Parallel.map(1..10, in_threads: 2) do |num| num ** 2 end p array すでに先人様が解説してくださってるので詳しいことは書かない 使い方の解説 【Ruby】Parallelで並列処理 - しめ鯖日記 勘所 Ruby…
スプラで待機している最中に考えてた。 その時は自分含めて5人いて、2人と3人にチーム分けしたかったのだが、それをRubyの1ライナーでやりたい。どうしようか 5人をAさん〜Eさんとする。ここまでは共通だと思う。 %w(Aさん Bさん Cさん Dさん Eさん).sh…
環境 Capistrano 3.11 current_pathとかshared_pathとかユーザーがsetでセットする変数とは別に、最初から定義されている便利な変数もいくつかある。これをうまく活用するとタスクがスッキリするのでメモ 変数一覧 変数名 例 deploy_to /var/www/article_vot…
環境 Capistrano 3.11 最近はめっぽう聞かないが、gitにはサブモジュール(git submodules)という機能がある。 この機能自体は便利なんだろうけど、それをCapistrano経由でデプロイしようとすると厄介な話になってくる。というのもCapistranoはgit submodul…
mechanizeとは言わずとしれたRubyのスクレイピングツールである。 で、例えば以下のようにページ内のaタグからリンク先のURLを取得したいとする。 url = "https://stackoverflow.com/questions/34471102/python-nameerror-name-include-is-not-defined" agen…
かなりニッチなニーズかもしれないけどメモ やりたいこと 例えば以下のようなバージョンの配列があったとして versions = ["1.1", "2.0", "1.1.4", "1.6", "2.4.1"] これを古→新順にソートしたいとする 解決策1 ライブラリを使う 探したらあった なんとGith…
環境 rbenv 通常rbenvは/etc/profile.dか~/.bashrcなどの読み込み時にロードされる。 が、シェルスクリプトからだとロードされないのでrbenvが無い環境扱いになってしまう。 ので、以下のように明示的にrbenvを読み込ませる必要がある。 #!/bin/bash export …
環境 ruby 2.5 RestClient 2.0.2 やりたいこと rubyにrest-clientというHTTPクライアントがある。 RestClientで404とか500とかエラーになった場合例外が発生してしまう。 よって以下のように例外をキャッチするようにする。 begin res = RestClient.get(url)…
rubyでなんかバッチ回してたら、普段見ないエラーに遭遇した rake aborted! ArgumentError: comparison of Float with -6.94 failed ウチなんも悪いことしてないのにとか思ってたけど、やっぱり悪かった 原因 NaNのせい 当然だが、rubyでは0で割ろうとする…
環境 ruby 2.4 やりたいこと 業務処理とか書いてて、特定の日が出勤日かどうか判別したい時がある。 ここでいう出勤日というのは 月曜日〜金曜日 勤労感謝の日とか元旦とかの定められた祝日ではない を指す。 それをtrue/falseで返してくれるメソッドがほし…
WindowsとかいうゴミOSを考慮するせいで、もうすぐ東京オリンピック開催の2020年に近づいたというのにShiftJISで出力したいケースがある。 .encode()使えばいいんでしょ? RubyはもともとUTF-8なのでUTF-8→ShiftJISの変換になりstr.encode(Encoding::Windows…
1行なので解説も何もないが rubyでは[1, 2, 3].include?(3)のようにすると配列の中に特定の値が含まれているかを一発でチェックできるが、確認したい値が複数ある場合はその都度include?を実行しなければならなくて面倒 だけど > (%w"1 2 3 4" & %w"2 3").an…
いわゆるWEBサイトのベンチマークはApache Benchがいちばん有名だが、いかんせんインストールしてやらなきゃいけなくて面倒 Rubyでサクッと負荷テストしてみたかったので作ってみた 環境 ruby 2.x rest-clientを使ってる コード 10並列で計1000リクエスト実…
常識すぎるのか、ググってもなかなか出てこなかったのでメモ 可変長引数とは rubyでは仮引数名の頭に「*」をつけると可変長で受け取ることができる。 def myfunc(*args) p args end myfunc(1, "hello", true) # => [1, "hello", true] 問題点 が、ここで配列…
rubyでJSONをパースするときはJSON.parseが一般的だがojライブラリを使ったほうが速いらしい。 ohler55/oj: Optimized JSON A fast JSON parser and Object marshaller as a Ruby gem. が、このライブラリ自体は結構昔からあるし、Ruby 2.5時代でも本当に有…
RubyてかRailsか ary.group_by(&:itself).map{|k, v| [k, v.size]}.to_h でいける irb(main):010:0> ary = %w(a b b a c) => ["a", "b", "b", "a", "c"] irb(main):011:0> ary.group_by(&:itself) => {"a"=>["a", "a"], "b"=>["b", "b"], "c"=>["c"]} irb(ma…
はてなブログ芝生で使ったのでメモ Ruby akerl/githubchartでいける gem install githubchartをして githubchart -i example.json example.svg でおk。入力のJSONファイルはgithubchart/input.jsonを参考に。出力はSVGのみ コマンドじゃなくてRubyから呼び…
やり方は以下 require 'uri' text = <<~EOL 夏目漱石: http://www.aozora.gr.jp/index_pages/person148.html 森鴎外: https://ja.wikipedia.org/wiki/%E6%A3%AE%E9%B4%8E%E5%A4%96 EOL URI.extract(text).uniq.each {|url| text.gsub!(url, '')} puts text …
結論 なんとかできる ビルドできない問題 Ruby 2.5.0がリリースされて、早速ruby 2.5.0をインストールしようとしたが、 rbenv install 2.5.0 エラーになる。どうもビルドでコケるっぽい。 prelude.c: In function ‘prelude_eval’: prelude.c:204: error: #pr…
やりたいこと Google Compute Engine APIを使ってインスタンス一覧をRubyで取得したい おおまかな手順は以下 認証に必要なJSONを取得 JSONを使ってgoogle-api-clientでAPIを叩く 認証に必要なJSONを取得 まずは認証に必要な権限を得るべく設定して、JSONをダ…
DateTimeはあくまで日ベースなので単純には秒の差が取得できない 方法1 (DateTime - DateTime)はRationalになるので、1日を秒に変換した、「24 * 60 * 60」をかけて秒に変換する require "date" date1 = Date.today date2 = Date.today - 3 puts ((date1 -…
ファイル一覧取得自体はDir.globでできるので、 それをsort_byを使ってファイル更新日時順にソートすればおk Dir.glob("/data/*.json").sort_by{ |f| File.mtime(f) }.each do |file| end ただこのやり方だとファイルの数だけFileオブジェクトが生成される…
単純にそのホストのポートがListenしてるかの確認はソケット接続を使うとサクッといける コード require "socket" begin s = TCPSocket.open('example.com', 80) rescue puts 'ng' else puts 'ok' ensure s.close end ポイントは2つ。 接続できなかったとき…
画像処理の王者ことImageMagick。rubyでImageMagickを扱うには、RMagick一択だと思っていたが、最近だとMiniMagickというのもあるらしい MiniMagickのメリット メンテナンスがRMagickより盛ん 書き方がRMagickより直感的(主観 メモリの使用量が少ないらしい…
久々にbundle installでコケた $bundle Fetching gem metadata from https://rubygems.org/.......... Fetching gem metadata from https://rubygems.org/. Resolving dependencies... Using rake 12.3.0 Using concurrent-ruby 1.0.5 Using i18n 0.9.1 Usin…
一番有名なtwitter gemを利用してRubyでTwitterに画像つきのツイートを投稿するメモ 色んな人がすでに書いているが、どうもやり方が変わってるらしくてできなかった まずはGemfileにgem "twitter"に追加して以下 require 'twitter' tw = Twitter::REST::Clie…