動かざることバグの如し

近づきたいよ 君の理想に

ruby

Rubyで文字列がBase64として有効かどうかを確認する

艦橋 Ruby 3 コード Rubyの標準ライブラリにはBase64モジュールがありますが、文字列がBase64として有効かどうかを確認するメソッドはない。 ただ、Base64.decode64とBase64.strict_encode64を使ってチェックする方法がある。サンプルコードは以下 require '…

Rubyで特定の文字列が有効なXMLかどうかを確認する

環境 Ruby3 コード Rubyを使用して特定の文字列が有効なXMLかどうかを確認するメソッドは以下 require 'nokogiri' def valid_xml?(string) doc = Nokogiri::XML(string) doc.errors.empty? end もしXMLの構造に問題があれば、errorsメソッドはNokogiri::XML:…

RubyでIPからリモートホストを取得するとSocketだと怒られる件

環境 Ruby 3.2 RubyでIPからリモートホストを取得したい 以下は、Rubyを使用してIPアドレスからリモートホスト名を取得する方法についての情報です。 例えば、133.159.148.245から245.148.159.133.rev.vmobile.jpを取得することができます。 以前はSocketラ…

Rubyのrest-clientの使い方

環境 Ruby 3.x rest-clientとは rest-client/rest-client: Simple HTTP and REST client for Ruby, inspired by microframework syntax for specifying actions. rest-client は、RubyでRESTful APIを簡単に扱うためのライブラリです。GETやPOSTメソッドを使…

Pryのスクロール時に表示がバグる問題

pryのlsバグる問題 こんな感じになってしまう 解決方法 export PAGER=" less --raw-control-chars -F -X" 詳しい話 qiita.com

RubyのMechanizeでフォーム送信する

環境 Mechanize 2.7 やりたいこと Mechanizeでスクレイピングするときに、フォーム送信したい ログイン処理とかもこれに含まれる agent = MyMechanize.new agent.get "https://example.com/login" form = agent.page.form(id: "login") form.field_with(name…

Ruby irbするとreadlineエラーになる件

環境 Mac OS rbenv + ruby-build 結論 readline入れろ brew install readline が、残念ながらこれだけだとライブラリのパスがruby-buildから見えないので、 RUBY_CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline)" rbenv install 3.0.0 する…

JavascriptのencodeURIComponent()した文字をRubyでデコード

結論 javascriptエンコード側 encodeURIComponent('ニンテンドースイッチ') // => "%E3%83%8B%E3%83%B3%E3%83%86%E3%83%B3%E3%83%89%E3%83%BC%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81" Rubyデコード側 require 'uri' URI.decode_www_form_component("%E3%83%8B…

Rubyで2つの配列を同時にeachさせる

環境 ruby 2.7 やりたいこと 普通にコード見たほうが10000倍早い odd = [1,3,5] even = [2,4,6] odd.zip(even) do |x, y| p [x, y] end すると出力は $ ruby multi.rb [1, 2] [3, 4] [5, 6] となる そうじゃないって場合 あなたが探してるのは多分こっ…

Rubyでクラスメソッドを上書きする方法

環境 Ruby 2.6 やりたいこと 方法1 class_eval class Cat def self.hello "nyaa" end end Cat.class_eval do def self.hello "bowwow" end end puts Cat.hello 方法2 define_singleton_method class Cat def self.hello "nyaa" end end orig = Cat.method(…

Rubyでメソッドを色んな方法で上書きしてみる

環境 Ruby 2.6 やりたいこと 使ってるGemの挙動を一部変えたくて、インスタンスメソッドを上書きしたい できれば黒魔術にならずにシンプルに変えたい コード例ではCatクラスがあって、本来はhello()で「nyaa」を返すが「bowwow」に変更したい うまくいかない…

RubyのMechanizeでフォームなしでPOST送信

環境 ruby 2.6 やりたいこと Mechanizeでフォーム送信はできるが、普通はすでにページに存在するフォームに対してsubmitするのが一般的 ここではあえてコードだけでデータを付けた状態でフォーム送信をしてみる コード agent = Mechanize.new url = "https:/…

Rubyで配列からマッチした要素のindexを取得したい

Rubyの記事久々すぎて書き方忘れたw 環境 ruby 2.7 やりたいこと タイトル通りだが、例えば a〜zの配列でaとkにマッチする要素を取得するときはselectでいける array = ("a".."z").to_a array.select{|item| item == "a" || item == "k" } # => ["a", "k"] …

RubyでHTMLの特殊文字をエスケープしたい

やりたいこと & を &amp; に変換したい またはその逆 コード Rubyにはcgiモジュールが標準で入っているので CGI.escapeHTML を使う require 'cgi' CGI.escapeHTML '<a> &' # => "&lt;a&gt; &amp;" 逆もまた然り CGI.unescapeHTMLを使えばおk irb(main):016:0> </a>…

Rubyでattr_accessorを動的に追加したい

Rubyなんもわからん 環境 Ruby 2.6 経緯 例えば以下のようなUserクラスがあったとする。ここでは検証のために attr_reader ではなく attr_accessor を使っているのでご了承 class User attr_accessor :name, :age def initialize @name = "太郎" @age = 20 e…

UbuntuでNokogiriをインストールエラーになったときの対処法

環境 Ubuntu 18.04 Ruby 2.3 発端 わりと頻出ライブラリのNokogiriだが、 bundle install nokogiri ができない。 以下のような長いエラーが出る。結局のところ「You have to install development tools first.」と言われているが、build-essential入れてるん…

Rubyは何故 if else ではなく if elsif なのか

背景 例のごとくツイッターしてたらこんなツイートが流れてきた。 rubyきもelseifをなんでelsifって書かないとだめなん?Matzさんには悪いけど、これは嫌だ— ぬーばー またの名をぴろまね (@noober_ava) August 14, 2019 これは他の言語やってて、そのあとに…

RubyでSelenium+Capybaraで簡単スクレイピング

環境 Ruby 2.x Capybara 3.28.0 やりたいこと Selenium構文ツラいからCapybara使いたい人生だった(使った require "selenium-webdriver" require "capybara" require "capybara/dsl" include Capybara::DSL Capybara.configure do |capybara_config| capyba…

RubyでHeadless Chromeを操作してスクレイピング

環境 ruby 2.5 概要 RubyでスクレイピングするならMechanize一択だが、昨今のサイトではJavascriptが動かないとデータが取れないサイトも多い。 PhantomJSが死んでしまった今、Headless Chromeが1番いいのだが、Puppeteerはちょっと、、て時にRubyでやりた…

AWSを使ったRspecテストにはモックを使うと簡単

環境 Ruby 2.6 AWS SDK for Ruby V3 やりたいこと Rubyを使ってS3とか扱うこと全然あると思う。例えば以下はバケット一覧を取得して表示するコード require 'aws-sdk-s3' client = Aws::S3::Client.new( region: 'ap-northeast-1' ) bucket_data = client.li…

Rubyで外部コマンドを実行するならopen3が1番よさそう

環境 ruby 2.5 やりたいこと Rubyでは様々な方法でコマンドを実行できるが、1番シンプルなのはバッククオートを使う方法だと思う p `date` # dateコマンドを実行 これは本当に楽なのだが、欠点が一つあって標準出力は取れるが、標準エラー出力、さらに結果…

RubyKaigiのRubyDebugCheatSheetで気になったやつ

NaCl(オープンソース・フロンティア - ネットワーク応用通信研究所)さんが配ってたRubyのデバッグに使えるテクニック集。 コードに書き起こしておいたほうが、コピペもしやすいと思うのでメモ ppでオブジェクトと整形表示 メソッドがある事自体は知っていた…

Mac Mojaveでgem install nokogiriのインストールでエラーになる対処法

毎回忘れるのでいい加減備忘録 環境 MacOS Mojave Ruby 対処法 NOKOGIRI_USE_SYSTEM_LIBRARIES=1 bundle install するだけ 偉大な参考サイト 【Ruby2.0.0 or 1.9.3 on Rails4.0】 Nokogiri 1.6.0 インストールできない?! - TACATAKATACA BLOG

Pumaより速い「Falcon」を試す

RubyKaigi 2019のスライドでちょっと話に出てたので初めて知った 試してみる Falconとは Railsに使うミドルウェアといえば、Unicorn、Pumaあたりが有名だが、falconはわりと新興である。 速さの秘訣は Unicorn マルチプロセスで(Webrickよりかは)速い Puma…

RubyからPythonのMatplotlibグラフを生成する

Rubyでも簡単にグラフ画像を生成したい人生だった やりたいこと RubyからMatplotlibのグラフ画像を生成する。 Rubyでグラフ生成ならtopfunky/gruffが有名だが、最近はあまりメンテされてる感じがないし、どうせならMatplotlibの知見を活かしたい 環境 Ruby 2…

RubyでFile.read()を使うときは注意が必要だった(過去形)

まとめ Ruby 2.6以前ではFile.read()の引数に|から始める文字列を渡すと、それがそのままコマンドとして実行されてしまう ので、WEBアプリケーションで第三者から受け取ったパラメータをFile.read()に渡すのはセキュリティ的に危険 Ruby 2.6.0で修正されたの…

RubyのREXML::Document でXMLをパースする

rubyでXMLを扱いたい人生だった 環境 Ruby 2.5 概要 RubyでXMLをパースする手段はいろいろあるが、ここでは特にライブラリを追加インストールすることなく、標準ライブラリだけで実行可能なREXML::Documentを使うことにした。 で「ruby XML」でググると一番…

jemallocを有効化したRubyをインストールしてRailsで使う

環境 Ruby 2.6.2 Rails 5.1 概要 Ruby、特にRailsだとけっこうメモリ大食いマンになる傾向がある。(Chromeのことを笑えないぐらいには で、いろいろググってたらjemallocを有効にしらRubyだとメモリの消費が減るらしい。ってことで試してみた。 ただしRuby…

Capistrano3でdefault_envとかwithinが効かないとき

環境 Capistrano 3.11 症状 Capistranoは非常に便利なデプロイツールで、Railsをデプロイするなら必須だと思う。いろいろ機能があって、その中でもdefault_envでexecuteするときの環境変数を設定できたり、withinでそのディレクトリの中で実行とかできる。。…

rbenvでインストールした全バージョンのrubyに一括gem installするスクリプト

何がしたいか VS codeを使うようになったんだけど、Rubyの保管をするために拡張機能でsolargraphをインストールした castwide/vscode-solargraph: A Visual Studio Code extension for Solargraph これは非常に便利で、まぁruby書くなら必須拡張機能だよね、…