インフィニットループ 技術ブログ

2016年06月13日 (月)

著者 : d-inoue

怠け者学生バイトの出勤退勤報告

sloth-153779_640
こんにちは。学生バイトのd-inoueです。
学生バイトの皆さんは、出社時にバイト窓(アルバイトが所属するSkypeチャット)に

[作業予定]
- kanikama
- 星のかけら集め
出勤しました。今日もよろしくお願いします。

なんていうふうに、出社を報告して、やることを宣言していると思います。私は入社からしばらく、その日ごとにこれをぷちぷち手打ちしていましたが、ある日、これじゃだめだ、と思いました。そこで、

[作業予定]
- インフラ作業
- kanikama
- 星のかけら集め
出勤しました。今日もよろしくお願いします。
インフラ作業行きます。
遅れてすみません。
[作業報告]
- kanikama (3.5h)
- 星のかけら集め (0.5h)
- インフラ作業 (h)
お先に失礼します。お疲れ様です。

なんてテキストファイルを用意して、その日に必要な行をコピペすることにしました。
しばらくはこれで幸せに過ごせました。が、行を選んでコピペするのも辛くなってきたので、先週、スクリプト書きました。

出社したとき用のスクリプト

kita.rb

#!/usr/bin/ruby
# coding: utf-8
require 'optparse'
works = {
  'i' => 'インフラ作業',
  'k' => 'kanikama',
  'h' => '星のかけら集め'
}
strs = works.map do |k, v|
  [k, "- " + v]
end.to_h
available_opts = works.keys.join
params = ARGV.getopts(available_opts)
enabled_opts = params.select do |k, v|
  v == true
end.keys
out = Array.new
out << '[作業予定]'
enabled_opts.each do |i|
  out << strs[i]
end
out << ''
out << '出勤しました。今日もよろしくお願いします。'
puts out

配列の操作を簡単に書けるのが ruby の良いところだと思います。オプションの解析も getopts で楽にできます。
usage としては、その日にやる作業をオプションで指定してやります。例えば、 kanikama (※仮のプロジェクトチーム名)と星のかけら集めをやる予定なら、

$ ./kita.rb -kh

と。この場合、出力は

[作業予定]
- kanikama
- 星のかけら集め
出勤しました。今日もよろしくお願いします。

となります。

帰るとき用のスクリプト

会社に来たからには、帰らねばなりません。帰るとき用のスクリプトも書きました。
kaeru.rb

#!/usr/bin/ruby
# coding: utf-8
require 'optparse'
works = {
  'i' => "インフラ作業",
  'k' => "kanikama",
  'h' => "星のかけら集め"
}
available_opts = works.keys.join + 't:'
params = ARGV.getopts(available_opts)
enabled_opts = params.select do |k, v|
  v == true
end.keys
time = Hash.new
total_time = params['t'].to_f
time['h'] = 0.5
if enabled_opts.size == 1 then
  main_work = enabled_opts.join
  time[main_work] = total_time
end
if enabled_opts.size == 2 then
  main_work = enabled_opts.select do |work|
    work != 'h'
  end.join
  time[main_work] = total_time - time['h']
end
strs = works.map do |k, v|
  [k, "- " + v + " (#{time[k].to_s} h)"]
end.to_h
out = Array.new
out << '[作業報告]'
enabled_opts.each do |i|
  out << strs[i]
end
out << ''
out << 'お先に失礼します。お疲れ様です。'
puts out

これも、やった作業はオプションで指定してやります。勤務した時間は -t オプションに渡してやります。例えば kanikama と星のかけら集めをやって 8 時間勤務した場合は

$ ./kaeru.rb -kht 8

と。出力は

[作業報告]
- kanikama (7.5 h)
- 星のかけら集め (0.5 h)
お先に失礼します。お疲れ様です。

となります。星のかけら集めは 0.5 h かかるものとして、スクリプトに組み込んであります。やった仕事が 2 項目のときはこのように時間を自動で計算して出力します。

$ ./kaeru.rb -khit 8

のように、やった仕事が 3 項目以上のときは、

[作業報告]
- インフラ作業 ( h)
- kanikama ( h)
- 星のかけら集め (0.5 h)
お先に失礼します。お疲れ様です。

というふうに、時間のところは空欄にして出力します。
kanikama 以外のチームの方でも、スクリプトのハッシュ ( works ) のなかみを編集すれば使えます。

コピーも怠けるには

./kita.rb -kh | xsel --clipboard --input

と、パイプで xsel に渡してやります。これで、出力がクリップボードに載ります。私はよく使うので、
xsel –clipboard –input に cb というエイリアスをつけています。

エンジニア募集!

インフィニットループでは、エンジニア(正社員・アルバイト)を募集しています。なんでもスクリプトを書いて怠けてしまう解決してしまうエンジニアの方、ぜひ下記のページからご応募ください!

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!