Ruby
プログラミング
初心者向け

超初歩的なRubyのスクリプトで残業代を計算する。

元ネタはこちら

Rubyでユーザのキーボード入力を対話的に受け取るRubyスクリプト

最近、仕事する時間が長くなってきて、コンソール上でこっそり残業代を計算するスクリプトが欲しいなーと思ったのでRuby超初心者が書いてみました。


やりたかったこと


  • スマホを取り出して電卓アプリを起動するものもはや面倒なのでなるべくキーボードから手を離さずになにか計算したい。

  • RubyのMatzさんの講演会を聞いたのでとりあえずなんでもいいからRubyでなにか書きたかった。

  • まあ、とりあえずやることが大事というモチベーションを維持したい。


実行環境

OS: MacOS

Ruby: ruby 2.3.7

特にOSによる環境差異はないと思うのでRuby入れれば動くはず


ちょっと時間がかかったこと

問題点

gets.chompで対話的に入力値を取れるかな思ったけどString型になってしまうことを理解していなったので計算実行時こんなエラーが起きた

How_much_money.rb:51:in `calc_money': undefined local variable or method `"\u201D\u3042\u306A\u305F\u306E\u6B8B\u696D\u4EE3\u306F"' for #<HowMuchMoneyClass:0x00007fc50a8c4e58> (NameError)

from How_much_money.rb:58:in `<main>'
MacBook-Pro:Ruby pcuser$ ruby How_much_money.rb
How_much_money.rb:51: syntax error, unexpected tIDENTIFIER, expecting keyword_end

解決策

計算のためには整数でないといけないのでInt型に変換するようにgets.to_iで数値を受け取って上げればおK


スクリプト本体

コンソールで使う場合は以下のように実行

$ ruby How_much_money.rb

今のこんな感じで出力されます。(要改良)

----------------------------

自分の残業代を計算しますか?
計算する場合は yes、キャンセルする場合は no と入力して下さい.
yes
計算を実行します.
----------------------------
基準とする時給を入力してください
入力例:)1250
900
----------------------------
仕事をした時間を入力してください。
入力例:)80
40
あなたの残業代は 36000 円です

今の所こっそり感はゼロですが、まあ気にしない

特にひねりはないですがソースはこんな感じ


ruby How_much_money.rb


#!/bin/env ruby

## ----------------------------
# ユーザからのキーボードの入力を受け取り、
# yes と入力されたらスクリプトを実行する、no と入力されたらスクリプトを終了します.
## ----------------------------

class HowMuchMoneyClass

def initialize

puts <<-EOT
----------------------------
自分の残業代を計算しますか?
計算する場合は yes、キャンセルする場合は no と入力して下さい.
EOT

end

def get_keyboard_input_yes_no

case gets.chomp
when "yes", "YES", "y"
puts " 計算を実行します."
when "no", "NO", "n"
puts " スクリプトを終了します."
exit 1
else
puts " yes または no を入力して下さい."
confirm = HowMuchMoneyClass.new
confirm.get_keyboard_input_yes_no
end
end

def calc_money
# 計算する場所
puts <<-EOT
----------------------------
基準とする時給を入力してください
入力例:)1250
EOT
base_monoey = gets.to_i
puts <<-EOT
----------------------------
仕事をした時間を入力してください。
入力例:)80
EOT
money_time = gets.to_i
#計算結果を返す
result = base_monoey * money_time
puts "あなたの残業代は #{result} 円です"
end
end

confirm = HowMuchMoneyClass.new()
confirm.get_keyboard_input_yes_no
confirm.calc_money



感想

コンフィグファイル的なやつを入れれば、コンソールに金額とかの情報を載せずともできそうなので今度改良してみようかなと思いました。

シェルとかPythonとか自分の好きな言語でこういうツールを作ってみるのもいいかもしれないですね。

他の人みたいにエクセレントな設計とかできないので思いついたものから地味にやっていくのがいいかな