ruby

vscode-ruby-lsp 動かずハマった

「rubocop がない」って怒られて動かず。 どうやら、vscode のワークスペースに Gemfile 置いて、rubocop を記載して bundle install しないとダメらしい。 諸事情あり、Gemfile 置いてなかったのだった。 (Dockerfile のほうで gem 入れてて、コードはコン…

Google::Cloud::Storage::File#exists? はファイルが存在しない場合にエラーログを出力する

bucket = Google::Cloud::Storage.new(project_id: gcp_project).bucket(gcs_bucket) file = bucket.file(file_path, skip_lookup: true) do_something if file.exists? みたいなコード書いた場合、ファイルが存在しない場合は file.exists? がちゃんと fals…

ruby の google-cloud-bigquery は ALTER TABLE SET OPTIONS に対応してない?

Google::Cloud::Bigquery.new.query( <<~QUERY ALTER TABLE dataset.table SET OPTIONS (expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)) QUERY ) このコード、動かないっぽい... Library/Ruby/Gems/2.6.0/gems/google-cloud-big…

また sublime linter で rubocop が動かなくなった!

と思ったら、rbenvで切り替えたversionにrubocop入れてないだけだった…

attrbuteに対する||=でハマる。

class some_class attr_accessor :hoge def some_method hoge ||= "value" end この5行目で、hogeのアクセサが呼ばれるのではなく、hogeという新しい変数が定義されてしまう… @hoge ||= "value" とするしかない。

$PROGRAM_NAME と __FILE__

結論 $PROGRAM_NAME はmainの実行ファイル名。 __FILE__ はそのコードが書かれているファイルの名前。 検証 以下をを同じディレクトリにおいて実行。test.rb #!/bin/env ruby require './test_class' p $PROGRAM_NAME p __FILE__ p 'Now call class.' tc = T…

Bundler.require したら system関数に環境変数が追加されててトラブった

rubyのスクリプト内で、system関数使って Treasure Data のコマンド(tdコマンド)を打つというのをやったらちゃんと動かなかった。 (本来は、Treasureのrubyライブラリ使うべきなんだろうが、ライブラリの使い方調べる時間が惜しくてひとまずやっつけでこ…

Bundler.require の使い方

ソース・ファイルが複数になる場合(クラスやモジュールを使う場合)は、mainのファイルで Bundler.require するのがたぶん正解。 一箇所で Bundler.require しておけば、呼び出し先ファイルでもgemをrequireできる。 再利用性も考え、クラスやモジュールで …

ruby のトップレベルでの変数定義

http://www.oki-osk.jp/esc/ruby/tut-03.html#3 トップレベルでのインスタンス変数は, トップレベルでのメソッド定義本体など,同じ self 値を共有する範囲で通用する…ように見えるかもしれませんが, それをあてにしてはいけません。 トップレベルで定義し…

windows のホームディレクトリ(C:\\Users/xxx)配下では rubocop が正常に動かない?

以下のようなエラーが出て動かない。 different prefix: "c:/" and "C:\\Users/xxx" C:/Ruby193/lib/ruby/1.9.1/pathname.rb:465:in `relative_path_from' C:/Ruby193/lib/ruby/gems/1.9.1/gems/rubocop-0.20.0/lib/rubocop/path_util.rb:10:in `relative_pa…

rubyでハマったしょうもないとこでハマった・・・

hash記法で { hoge: "fuga"} とすべきところを { hoge : "fuga"} としてエラーが出て (・・;?シンボルとコロンの間にスペースいれちゃダメ・・・