Just do IT

思うは招く

Ruby

Ruby + google-api-client で Custom Search JSON API を使う方法

やりたいこと Ruby 用の google-api-client gem を使い、検索エンジンで検索ワードを指定して検索結果(順位)を取得したい。 前提 $ ruby -v ruby 2.7.1 その他 Custom Search JSON API | Programmable Search Engine に登録している API_KEYを取得している…

Ruby で Google 検索順位を取得するときの選択肢

Ruby で Google 検索順位を取得するときの選択肢として、以下の2つがある。 Custom Search JSON API | Programmable Search Engine Google Search API - SerpApi Custom Search JSON API Custom Search JSON API | Programmable Search Engine Google の公式…

rbenv で rehash をする必要はない

rbenv で Ruby の管理をしている場合、バージョンを切り替えたり、gem をインストールした後はrbenv rehashをする必要があった。 しかし、2014年のアップデートにより、rbenv rehashをする必要はなくなった。 rbenvでrehashがいらなくなった Bring rbenv-gem…

Ruby の any? メソッドの動き

Rubyのany?とは配列に対して、要素がどれかひとつでも条件に合致したら真を返すメソッド。 すべての要素が偽である場合に false を返します。真である要素があれば、ただちに true を返します。 ブロックを伴う場合は、各要素に対してブロックを評価し、すべ…

Ruby で月末、月初を取得

require "date" #月末 p last_day = Date.new(2020, 8, -1) #月初 p first_day = Date.new(2020, 8) $ ruby dates.rb #<Date: 2020-08-31 ((2459093j,0s,0n),+0s,2299161j)> #<Date: 2020-08-01 ((2459063j,0s,0n),+0s,2299161j)> 日付が入った配列を作りたい場合。 dates = [] (first_day..last_day).each do |date| dates << date end puts da…</date:></date:>

Ruby で RSpec のセットアップ

勉強用のためにRSpecをセットアップしたい場合の手順。 $ md rspec-setup $ cd rspec-setup $ bundle init #追加 gem "rspec" $ bundle install $ bundle exec rspec --init specファイル(テストファイル)を作成。 $ touch spec/say_spec.rb spec/say_spec…

Ruby の merge の挙動

たとえば、こんな2つのハッシュがあるとする。 smart_phones = { apple: :iphone, google: :pixel, samsung: :galaxy, } other_smart_phones = { huawei: :p30, sharpe: :aquos } これらのハッシュをがっちゃんこしたい場合、mergeメソッドを使える。 puts s…

Ruby の __END__ と DATA とは

結論 Ruby で__END__と書くと、それ以降のコードはプログラムではなくデータとして読み込まれる そのデータは、DATA という定数を使ってアクセスできる __END__と DATA はセットで使われることが多い 例1 puts DATA __END__ いいハンターってやつは、動物に…

Rails is not currently installed on this system エラーを解決

6時間くらいハマってエラい目にあったので、メモとして残します 環境 問題 うまくいかなかった解決方法 原因 解決 rbenv に関わるものをアンインストール rbenv をインストール 他の問題も解決 なぜ rbenv-communal-gems を使っていたのか? rbenv-communal-…

Ruby の nil ってなんだ?

Ruby の nil とはなんぞや? Rubyのメソッド 何も存在しないということを表す、NilClassのオブジェクト nil は NilClass クラスの唯一のインスタンス Rubyでは、false または nil であれば偽として判定される # 空オブジェクトではfalseになる irb(main):011…

オブジェクト指向プログラミングの「継承」をドラゴンボールに例えて考えてみる

オブジェクト指向プログラミングの3大特徴である、継承について、ドラゴンボールに例えてみた。 まず、悟空とベジータをクラスで考えるとこうなる。(細かいツッコミどころがあるが、概念をざっくり理解するためなので無視してください) # 悟空 class Goku …

Rubyのattr_accessorとは一体何なのか

問題 Rubyを勉強していると頻繁にエンカウントするこんなやつ。 attr_accessor :hoge attr_reader :hoge attr_writer :hoge メソッドがやっていることはなんとなくわかるが、いまいちしっくりこない なんだかモヤモヤする という感情が湧いたので、言語化し…

Ruby2.7で追加されたEnumerable#tallyメソッドを使ってみる

Ruby超入門Hash章の問題で「"caffelatte"で使われている文字ごとにその回数をカウントしてください」ってのがあってそこそこの手数がかかる良問だと思っていたのですが、Ruby2.7で入ったEnumerable#tallyを使うと2メソッドで解けちゃうようになりましたね...…

kaminariでページネーションを追加するときのコントローラー、ビューそれぞれの実装

@booksのページネーションを取得したい場合。 コントローラー側 app/controllers/books_controller.rb def index @books = current_user.books.order(:id).page(params[:page]) end .page(params[:page])でページネーションに必要な情報を取得。 ビュー側 # …

Ruby 三項演算子のシンプルな例

Ruby 三項演算子のシンプルな例 Rubyでよく見かけるこんな記述。 n == 1 ? hoge : foo これは三項演算子(さんこうえんざんし)と呼び、次のような動きをする。 nに1が代入されているか確かめる もし1が代入されていたら、hogeメソッドを実行する 1じゃなか…

Rubocopに自動で修正してもらうコマンドオプションは --auto-correct

rubocop --auto-correct bundle execをつけるなら bundle exec rubocop --auto-correct -aに省略もできる。 bundle exec rubocop -a

Gemfileに設定したGemを削除する

手順 Gemfile上からアンインストールしたいGem名を削除 bundle updateを実行

bundler: failed to load command: rubocop のエラーを対処

環境 Mac/Homebrew rbenv 1.1.2 ruby 2.6.5 問題 bundle exec rubocop をしてrubocopを動かそうとしたら、次のエラーが出た。 bundler: failed to load command: rubocop (/Users/ユーザーネーム/.rbenv/versions/2.6.5/bin/rubocop) 解決 rbenvで使用中のRu…

Rubocopエラー Error: The `Layout/IndentFirstArgument` cop has been renamed to `Layout/FirstArgumentIndentation` を対処

環境 Mac/Homebrew rbenv 1.1.2 ruby 2.6.5 問題 rubocopを動かそうとした。 bundle exec rubocop 以下のエラーが出た。 Error: The `Layout/IndentFirstArgument` cop has been renamed to `Layout/FirstArgumentIndentation`. (obsolete configuration fou…

irbを立ち上げると `find_spec_for_exe': can't find gem irb (>= 0.a) with executable irb (Gem::GemNotFoundException)が出た

rbenvでRuby 2.7.0をインストールしてさぁirb立ち上げようとしてirbコマンドを打ったらこんなメッセージが。 `find_spec_for_exe': can't find gem irb (>= 0.a) with executable irb (Gem::GemNotFoundException) 単にirbをインストールしてないだけだった…

rbenvでインストールしたいRubyのバージョンが見つからないとき

問題 Mac/Homebrew環境に Ruby 2.7.0 を rbenv でインストールしようとして、rbenv install 2.7.0をしても「そんなバージョンないよ」と言われてしまった。 rbenv install --listでインストールできる Ruby のバージョンを探しても 2.7.0 が出てこない。 原…

Ruby 2.7 になって出る警告「Using the last argument as keyword parameters is deprecated」の意味

Ruby 2.7.0 になって以下のような警告メッセージを見る機会が増えた。 warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call deprecated とは、「非推奨である」ということ。 以下の記事で解説され…

bundle install: プロジェクト下のvendor/bundleを指定する

bundle install でパスを指定するコマンド。 bundle install --path vendor/bundle プロジェクトディレクトリ配下のvendor/bundleにgemがインストールされる --pathでインストール先を指定できる 一度パスを指定したら覚えてくれるので、次回以降はパス指定…

Rubocopで指摘されたエラーを解決

自分がRubocop警察に指摘されたエラーの解決策をまとめた。 Rubocopで指摘されたエラーたち Add an empty line after magic comments Prefer double-quoted strings unless you need single quotes to avoid extra backslashes for escaping Final newline m…

bundlerでインストールしたgemをコマンドラインで実行するにはbundle execをつける

ちょっとハマったが解決したのでメモ。 問題 bundlerでrubocopをインストールした。 Gemfile gem 'rubocop', require: false gem 'rubocop-performance' gem 'rubocop-rails' これでコマンドラインから rubocop をするとルボコップが走ってファイルが解析さ…

[Ruby] Ubuntuにgemのpgをbundlerでインストールするときに出るエラー対処

問題 環境 vagrant Ubuntu Mac Sinatraで使いたい の環境でRubygemsのpgをbundlerでインストールしようとした。 Gemfile gem "pg" インストール。 bundle install --path vendor/bundle そしたらこんなエラーが出た。 An error occurred while installing pg…

bundlerでrack_csrfをインストールするメモ

簡単にCSRF対策ができるRubyのgem「rack_csrf」をbundlerでインストールするメモ。 Gemfileに以下を追記。 gem 'rack_csrf' インストール。 bundle install --path vendor/bundle requireする場合は require "rack/csrf" bundlerは使わない場合。 gem install…

Linux(Ubuntu) に rbenv を使って Ruby をインストールする方法

Vagrant + Linux の開発環境に rbenv を使って Ruby をインストールするためのメモ。 環境 rbenvをインストール rbenv を使う Ruby をインストール 「Cコンパイラがないよー」と言われたら Rubyを使う 参照 環境 Vagrant Ubuntu MacOS rbenvをインストール M…

[Ruby] ファイルをコピーする基本

Rubyでファイルをコピーする方法。 Fileクラスを使う。 open("bar.txt") do |input| open("foo.txt", "w") do |output| output.write(input.read) end end まずはopen.txtというファイルを開き、データをinputとして引数にとる。 その後、書き込みたいファイ…

[Ruby] __FILE__や__dir__って何?

Rubyで見かけるアンダーバーふたつで囲まれた奴ら。 __FILE__ __dir__ き、きみたちは一体何?どこからきたの? __FILE__:現在実行しているファイル ruby_basic.rbというファイルに以下のコードを書いて実行してみる。 puts "__FILE__: #{__FILE__}" => __F…