Object#tapが便利すぎるのでメモ。 メソッドチェインの途中経過をprint Rubyで理解するMapReduceで書いたコードも、わざわざ分解することなく途中経過をprintすることができます。 p input_data.map{|d| d[/GET (.+?) /, 1]}.tap{|d| p d}. group_by{|d| d}.tap{|d| p d}. reduce({}){|r,kv| r.update({kv[0] => kv[1].size})} # => ["index.html", "index.html", "reduce.html", "reduce.html", "index.html", "map.html"] # => {"map.html"=>["map.html"], "index.html"=>["index.html", "index.html