share facebook facebook twitter menu hatena pocket slack

2017.03.29 WED

小ネタ道場一本勝負 〜 Rake からタスクを呼び出す際に実行されるコマンドの出力を止めたい 〜

川原 洋平

WRITTEN BY 川原 洋平

たのもう

Rake のタスク実行時に出力されるコマンド…

$ bundle exec rake spec
/path/to/.rbenv/versions/2.3.0/bin/ruby -I/path/to/vendor/bundle/ruby/2.3.0/gems/rspec-core-3.5.4/lib:/path/to2/vendor/bundle/ruby/2.3.0/gems/rspec-support-3.5.0/lib /path/to/vendor/bundle/ruby/2.3.0/gems/rspec-core-3.5.4/exe/rspec --pattern spec/\*\*\{,/\*/\*\*\}/\*_spec.rb
↑
↑ これの出力を止めたい!

ec2 'dev'
  should be stopped
  should have iam instance profile "xxxxxxxx"
  should have security group "xxxxxxxxx"

実行されるコマンド /path/to/.rbenv/versions/2.3.0/bin/ruby... の出力を止めたいのである。

技あり

以下のように書けば良かった。

require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new do |t|
  t.verbose = false
end
task :default => :spec

肝は t.verbose = false ですな。
実際に実行すると以下のように出力される。

$ bundle exec rake spec

ec2 'dev'
  should be stopped
  should have iam instance profile "xxxxxxxx"
  should have security group "xxxxxxxxx"

有効

ちなみに、Rake タスク内でシェルを実行する場合には以下のように書く。

namespace :foo do
  desc 'demo'
  task :bar do
   sh "echo 'bar'", verbose: false
  end
end

肝は verbose: false ですな。
実際に実行すると以下のように出力される。

$ bundle exec rake foo:bar
bar

もしくは、コマンドラインオプションで以下のように実行することでも出力を抑制出来る。

$ bundle exec rake --quiet foo:bar
$ bundle exec rake --silent foo:bar

--quiet--silent の違いはなんですか。

$ bundle exec rake --help | egrep 'quiet|silent'
    -q, --quiet                      Do not log messages to standard output.
    -s, --silent                     Like --quiet, but also suppresses the 'in directory' announcement.

以下のように --silent は ‘in directory’ の出力も抑制するとのこと。

bash-3.2$ mkdir tmp && cd tmp
bash-3.2$ bundle exec rake --quiet -T
(in /path/to/sandbox/rake-demo)
rake foo:bar  # demo

bash-3.2$ bundle exec rake --silent -T
rake foo:bar  # demo

ありがとうございました!

元記事はこちら

小ネタ道場一本勝負 〜 Rake からタスクを呼び出す際に実行されるコマンドの出力を止めたい 〜

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。