Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

ruby

Kernel.#__method__はメソッド名自身を返す

Kernel.#__method__はメソッド名自身を返す変数です。 Kernelクラスにくっついたもので、組み込み変数ではないので注意。 def testMethod "This is " + __method__.to_s end testMethod #=> "This is testMethod" エイリアスを貼った場合、呼び出し先が優先…

pry#show-sourceは自前定義クラスやモンキーパッチの大元を見に行くことができる

…あたりまえと言えば、あたりまえなのですが… 以前記事を書いたshow-sourceはメソッド以外にも、クラスを見にくこともできます。pry上で次のようなクラスを定義したとします。 class Hoge def initialize(val) val.to_s end def method_missing(name, *args,…

Object#public_methodsに偽の値を渡すと、スーパークラス由来のメソッドを除外してくれる

class Hoge def initialize(val) val.to_s end def method_missing(name, *args, &blk) 42 end end などというクラスがあった場合、何もつけずにpublic_methodsをやると 198個(awesome_printのモンキーパッチを含む)のメソッドが出てきます。 Hoge.new(…

Hashに破壊的に要素を追加したり更新をする場合はupdateで十分

既存のhashの要素を追加したり、Hash同士をくっつけたりする場合はHash#updateがあれば大抵は事足ります。 見ての通り、破壊的メソッドなので使用には注意が必要です。 非破壊なものを望む場合は、Hash#mergeが使えます。 中身の更新 {a: 1, b:2}.update(b: …

メソッドがどのクラス|モジュールにくっついているか調べる

Rubyにおいては、メソッドはMedhodクラスという入れ物で管理されています。 こいつをつかうと、 buff = String.new.method(:upcase) #String#upcase() Awesome_printのapメソッドのようなカーネルにくっついているメソッドもこの通り。 buff = AwesomePrint.…

nilや空文字が入った配列を接続して文字を作る際のtips

Effective_Rubyによれば… 「Rubyは型判断システムの関係でnilが入り込むのだから、最初っから対策をねじ込んでおけ(意訳)」との事。 実際のところ nilが含まれている配列を"-"で繋げて一つの文にする事を考えます。 ["Shuzo", nil, "Kino", nil].join('-')…

Rubyにおける定数

あまり使う局面はないかもしれませんが、Rubyでも定数を使うことができます。 FOO = "yeah!" puts FOO #=> yeah! 一応、上書きすることもできますがエラーがおきます。 FOO = 12 #(pry):22: warning: already initialized constant FOO #(pry):19: warning: …

「,=」と出ていたら、それは多重代入です。

Rubyにも多重代入があります。 a, b = [1, 2] ap a #=> 1 ap b #=> 2 コーディング規則では大抵推奨されてない方法です。ところがドッコイ、awesome_printのようなスゴイヤバイ級Rubyistが集うgemだとそうでもないようです。 たとえば、次のような記法が… va…

awesome_printでRubyオブジェクトをさらに見やすくする(その5)

awesome_printには色を指定するオプションがあるのですが… その関係なのかなんなのか、色をつけるメソッドが付加されます。 "hoge".red #"\e[1;31mhoge\e[0m" "hoge".redish #"\e[0;31mhoge\e[0m" 公式によると、サポートしている色は次の通り :gray, :red, …

awesome_printでRubyオブジェクトをさらに見やすくする(その4)

awesome_printはrails consoleでも活用できます。 下準備 Gemfileのdevelopmentグループに、pry-railsとawesome_printを記述 group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug…

awesome_printでRubyオブジェクトをさらに見やすくする(その3)

awesome_printはObject#methodsの使い勝手もグレードアップします。例えばpでやった場合 "".methods #=> [:<=>, :==, :===, :eql?, ..., :__send__, :__id__] ppでやっても pp "".methods #[:<=>, # :==, # :===, #..., # :__send__, # :__id__] と、大して…

awesome_printでRubyオブジェクトをさらに見やすくする(その2)

前回紹介したawesome_printは凄まじいgemです。 オブジェクトの可視化に抜群の効果を発揮します。 その上、ppにはないような機能を多数備えています。 オプションを使う 長い出力を中途省略する ap (1..0xffff).to_a, limit: true [ [ 0] 1, [ 1] 2, [ 2] 3,…

awesome_printでRubyオブジェクトをさらに見やすくする(その1)

awesome_printはREPL(IrbとかPry)においてRubyオブジェクトを見やすくするgemです。 有名どこはpやppがありますね。 導入法 $ gem install awesome_print 実際のところ まずは、pの表示を見てましょう。 p [ false, 42, %w(forty two), { :now => Time.now, …

slopでCLIアプリの引数をよろしくやる

slopでCLIアプリの引数をよろしくやるgemです。 require 'slop' opts = Slop.parse do |o| o.banner = "usage: connect [options] ..." o.string '-h', '--host', default: "localhost" o.integer '-p', '--port', default: 80 o.on '--version', '-v' do pu…

LinuxやOS X環境でプロキシ鯖を立ち上げて楽をする

プロキシ鯖を使うと、WEBアプリ開発で何かと開発で楽をできます。 仮鯖を立ち上げて、同一ネットワーク中の他の人に動作検証をお願いしたりだとか。 設定を適切に書き換えれば、社内用のアプリを作る際にも便利です。 OS X用はPow OS X用には、Powという素敵…

スクリプト中でpryを実行してデバッグの手間を減らす

スクリプト中にpryのバインディングポイントを設定することで、 printfデバッグをせずとも変数の状態やらメソッド実行時の挙動やらを調べることができます スクリプト中に記述 $ ruby test2.rb From: /Users/shuzo_kino/test2.rb @ line 4 : 1: require 'pry…

rubyでopenCVを使う

rubyでも画像処理の定番ライブラリopenCVを使うことができます。 導入 まずopenCVがなければ導入します。 $ brew install opencv次に、gem「ruby-opencv」を入れます。 導入時にライブラリのインストール先を指示する必要があります。 brewで導入した場合は…

pryの独自コマンドで、日常のシェル芸をちょっと楽にやる

pryには独自のコマンドが実装されており、 うまく使うと時間の短縮になります。 .hogehoge ドットのあとに、代表的シェルコマンドを実行するとそのまんま使えます。 シェル芸やる程ではないけどチョット凝ったことをしたい場合なんかには使い出があるかもし…

pryの出力を弄る

Pryの出力はPry#configで色々と弄る事ができます。 たとえば、出力を弄りたい場合上記に加えてprintをつなげた上で、procオブジェクトを渡します。実際に Pry.config.print = proc { |output, value| output.puts "#=> #{value.inspect}" } とやると、 >> 1 …

pry画面から、simple-promptに移行できる

pry起動時にsimple-promptオプションを入れてあげると、 最小表示のpryが立ち上がります。pry画面からもsimple-promptに移行する方法があります。 pry(main)> simple-prompt >> 参考もと pry help

pryのコマンドshow-sourceでメソッドの実装をみてみる

pryのコマンドの一つ「show-source」を使うと、メソッドの実装を確認できます。 素のpryには入っていないので $ gem install pry-docであらかじめ導入しておきます。 組み込みメソッド > show-source String#+ From: string.c (C Method): Owner: String Vis…

Kernel.#at_exitで終了時の挙動を記述する

そう滅多に使うものではないでしょうが…Kernel.#at_exitを使うと、終了時の挙動を記述することができます。 $ pry [1] pry(main)> at_exit {puts "出かける時は鍵を忘れずにね(戒め)"} => #<Proc:0x007fabc1be71b0@(pry):1> [2] pry(main)> "hoge" + "fuga" => "hogefuga" [3] pry(main)> </proc:0x007fabc1be71b0@(pry):1>…

%wリテラルで空白を扱う場合は「\」を入れる

%wリテラルは空白区切りで配列を作ってくれる構文です。 %w!hoge huga piyo! #=> ["hoge", "huga", "piyo"] ここで、バックスラッシュを入れてあげると、ちゃんと空白文字を含めた文字列を生成してくれます。 %w!hoge\ huga piyo! #=> ["hoge huga", "piyo"]…

rescue修飾子でエラー時にやる処理を定義

rescue修飾子は、後置きのif同様、処理の後ろに書いてエラー時の挙動を定義できる構文です。 使い方によっては、三項演算子以上にスマートに書くことができます。 1/0 rescue "ゼロ除算ですか? いい根性してますね?" #=> "ゼロ除算ですか? いい根性してま…

CSVパースの際、コンバータは自前で設定できる。

CSVパースの際、時刻や数値をコンバートできる…というネタを扱いました。 なんと、このコンバータは自前で生成できます。パラメータはProcクラスで定義されています。 converter = ->(field, field_info) { return field.upcase rescue field if field_info.…

RubyのCSVパーサには適切なクラスに読み替えてくれる便利オプションがある

CSV形式、便利ですよね。 エクセル方眼紙方式のまま処理するより圧倒的に高速ですし。RubyでCSVを扱うときは、標準添付ライブラリーを使えば良いのですが… なんと、これのパーサにはか適切なデータに読み替えてくれるクラスが標準で搭載されています。 CSV.p…

rbenv-gem-rehashを使うと、毎回rehashを打たないで済む

そこで登場するのが、rbenv-gem-rehash。 一度アドオンとして登録すれば、あとはrehashをしなくて済みます。 導入 rbenv 0.4以降の対応なので、 自前の環境を念のため確認。 $ rbenv -v rbenv 0.4.0大丈夫なら、git経由で突っ込みます。 $ git clone https:/…

Time#strftimeのフォーマット文字列に関するあれこれ(その2)

今回はTime#strftimeの便利ショートカット集です。 now => 2014-12-30 22:42:52 +0900 をもとに、見ていきます。 便利ショートカット %c: 日付と時刻 now.strftime("%c") #=> "Tue Dec 30 22:42:52 2014" %D: 日付 (%m/%d/%y) now.strftime("%D") #=> "12/30…

Time#strftimeのフォーマット文字列に関するあれこれ(その1)

Time#strftimeは、曜日、年度指定のよくあるフォーマット文字列以外にも便利なショートカットがあります。 実例 20文字詰め、全文大文字で月の英語名を出す 月の英語名は「%B」です Time.now.strftime("%B") #=> "December" ここに文字詰め「_NUM」を突っ込…

Rubyでプレゼンテーションファイルをつくる

puppetlabs/showoff · GitHub Showoffは、RubyでCSSベースのプレゼンテーションファイルを生成できるツールです。sinatraベースのプレゼンテーションエンジンです。 なので、使い勝手はまんまsinatraです。 導入&おためし schacon/showoff-wrangling-git · …