LoginSignup
3
5

More than 5 years have passed since last update.

Ruby の Debug に便利そうな SeeingIsBelieving をエディタに組み込む

Last updated at Posted at 2017-01-02

概要

Seeing Is Believing

チェインで記述しているコードを一行ごとに評価して、結果を表示してくれる Gem。

例えばこんなコードがあったら

(1..10).map {|i| i * 2 }
  .select {|i| i % 5 == 0 }
  .map(&:odd?)

こうなる

(1..10).map {|i| i * 2 }     # => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
  .select {|i| i % 5 == 0 }  # => [10, 20]
  .map(&:odd?)               # => [false, false]

途中でバグを埋め込んでないか確認するのに便利そう。
Vim, Emacs, Atom, Sublime, TextMate と色々なエディタに組み込めるようなので、Sublime に入れてみる。

入れてみる

まずは、install する

gem install seeing_is_believing

なんか変なの表示された

Fetching: seeing_is_believing-3.1.1.gem (100%)
              .7
     .      .M
      .  . .N
      M.  ..O
     =. .. .M
     N . .  .N
      O.. . . O
        MN:. . M
           OM...N
             N .OM                 .NM8MMMMMM
             O ..N             ...MM=:Z7?Z7??MMMMIMMOM8N
             M...O        ,MMMMMMMMMM$$:=ZZ$~:$?7ZMMMMM8?M
           .N .  M       MMI$7:==?:77MMMM7$O~+~ZO~~I=7ZMMMM
           O$...N        M=$ZZI=MMM7ZZI=?MMZ+:$I?8Z~?ZO~=ZIMM
        .MN ...O         M~?Z==ZZZ=MM$$=$ZZMMO=~~?$=$Z~~OO+=MM
        OM ...,M      DAAAAAAAAAAAAAAAAAAAAAAAM=Z=+OOI=+ZO$O+MM
      NOM.. . N     DAAAAAAAAAAAAM?:DAAAAAAAAAAAAM$ZZ?$+IZ7+8?M8
     NOM.....O     DAAAAAAAAM:....DAAAAAAAAAAAAAAM78OI+D=78=$MM
    NO.. ...MN     DAAAAAAAM.......DAAAAAAAAAAAAAM,MMMO7?I8Z7OM
   MN.... ..O       DAAAAAM.........DAAAAAAAAAAAAM..~MM?NMM7O8MM
  NOM..  ..MN        DAAM............DAAAAAAAAAAM.......MM7.MMM
 NOM.. .. .OM         M................DAAAAAAAM...........MM:M
 NOM. .. ..NO        M...................~DAAM..............I,,M
 NOM.. .. .MN       MM...ZMMMMMM.............................=MM
 NOM. . ... O       M..MMMNMMMMMMMMZ..........................$MI
 NOM8.. .. .MM      MZMMMMMMMMMMMMMMM.........M~...............MM
  NOM .. . . NOM    M........................8M$................MM
   NOMO. . . . .    M.MMMMMMMMMMMMNMMMMNMMMMMM..................MM,
     NOMM8.  .     M:MM  MM......................................MM
           .    .MMMM     MMMM.............7ZMM..................MM
               .MNOM      MMMMMMMMMMMMMMMMMMM....................OMM
                 H         MMMMMMMMMMMMMMMMM.......,..............MM
                            MMMMMMMMMMMM=.........MM..............MMN
                              :MMMM................M.......M......MMM
                                 MMM..............MN.....:7.......MMM .MMMMMM
   Seeing                        MMMM.........M...M.....M.........MMMM......MM
                                 M..MMM.......M...M....=I........MM.........M
      is                         M..MMMM.....M....M....M.....MMM:..........MM
                                MM..M  MMM...M...MM...M....MMM.............M,
  Believing                    .M..MM   MMMMMM...M....M...................MM
                       ..MMMMMMMM..M   M..MMM...MM...OM..............MN..MM
                     M.............M  MMM..MM...MMMMMMM.............M..+MM
                     :MM7....M..IMM  D ..M?M...MM     M...........MM..MM,
                          .M..M..    ... gM+...M      NM........MMM..MM
                                  .MM+gZMM.....M       MMMMMMMMMM....M
                                  MI..8MM,....MM           .MMM..M..M
                                 MMM...MMMM..MI       ..OMMM..OMM..MM
                                M...MD....M M        M.....NMM..MM..M
                                MMMM.....M ..M      .M:...M....M....M
                                           MM          MMMM......MMMI
Successfully installed seeing_is_believing-3.1.1
Parsing documentation for seeing_is_believing-3.1.1
Installing ri documentation for seeing_is_believing-3.1.1
Done installing documentation for seeing_is_believing after 0 seconds
1 gem installed

RSpec の Progress Bar をカスタマイズするで AA の辛さを知ったから、尊敬するな...

install が終わったら Sublime の Package 管理のディレクトリに移動して、
sublime-text-2-and-3-seeing-is-believing を SeeingIsBelieving という名前で clone してくる

cd ~/Library/Application\ Support/Sublime\ Text\ 3/Packages
git clone git@github.com:JoshCheek/sublime-text-2-and-3-seeing-is-believing.git SeeingIsBelieving

最後に、setting を自分の環境に合わせて書き換える。

私の場合、rbenv を使っているので ruby_command はそのまま、Ruby の version は 2.3.0 なので RBENV_VERSION を書き換える。

{
  "ruby_command": "~/.rbenv/shims/ruby",
  ...
  "environment_variables": {
    "RBENV_VERSION": "2.3.0",
    "LANG": "UTF-8"
  },
  ...

準備完了!!

使ってみる

Sublime で以下のコードを書いて

(1..10).map {|i| i * 2 }
  .select {|i| i % 5 == 0 }
  .map(&:odd?)

⌥ + ⌘ + B

(1..10).map {|i| i * 2 }     # => [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
  .select {|i| i % 5 == 0 }  # => [10, 20]
  .map(&:odd?)               # => [false, false]

おー!
もっとわけわからないコードを書いてみると

(1..10).map {|i|
    a = i * 2
    b = i * 3
    a + b
  }.select {|i|
    n = (i + 4) * 3 - 4
    n % i == 1
  }.map(&:odd?)

⌥ + ⌘ + B

(1..10).map {|i|         # => 1..10
    a = i * 2            # => 2, 4,  6,  8,  10, 12, 14, 16, 18, 20
    b = i * 3            # => 3, 6,  9,  12, 15, 18, 21, 24, 27, 30
    a + b                # => 5, 10, 15, 20, 25, 30, 35, 40, 45, 50
  }.select {|i|          # => [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
    n = (i + 4) * 3 - 4  # => 23,    38,    53,    68,    83,    98,    113,   128,   143,   158
    n % i == 1           # => false, false, false, false, false, false, false, false, false, false
  }.map(&:odd?)          # => []

おー!!
途中にバグがあった場合はエラーを表示してくれます。

(1..10).map {|i|         # => 1..10
    {i: i}               # => {:i=>1}, {:i=>2}, {:i=>3}, {:i=>4}, {:i=>5}, {:i=>6}, {:i=>7}, {:i=>8}, {:i=>9}, {:i=>10}
  }.select {|i|          # => [{:i=>1}, {:i=>2}, {:i=>3}, {:i=>4}, {:i=>5}, {:i=>6}, {:i=>7}, {:i=>8}, {:i=>9}, {:i=>10}]
    n = (i + 4) * 3 - 4  # ~> NoMethodError: undefined method `+' for {:i=>1}:Hash
    n % i == 1
  }.map(&:odd?)

# ~> NoMethodError
# ~> undefined method `+' for {:i=>1}:Hash
# ~>
# ~> path/to/hoge.rb:5:in `block in <main>'
# ~> path/to/hoge.rb:4:in `select'
# ~> path/to/hoge.rb:4:in `<main>'

おー!!!
表示した値は ⌥ + ⌘ + V で非表示にできます。

たまに途中で Debug したいときとか tapp を使って途中結果を表示させたりしていたんですが、これで一発でわかりますね。便利!

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5