質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

0回答

894閲覧

Rubyで作業時間を管理するコマンドラインツールを作成したい

suzuryu.07

総合スコア3

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2021/11/03 07:11

編集2021/11/04 08:47

解決したいこと

現在、Rubyを用いて小マンドラインツールを作成しています。内容としては、オプションを指定してタスクの作業時間を管理する CLI です。制限や仕様があり、以下のようになっています。

  • 制限
  1. クラスを用いた設計をする
  2. 対話型ではなく、バッチ処理をすること
  3. 実行時のパラメータが適切でない場合、使い方を表示する
  4. Gem やoptparse は使用しなこととする。
  • 仕様

実行時

ruby ファイル名.rb <option>
  • -s <タスク名>:タスクの開始時間を記録する
  • -f <タスク名>:タスクの終了時間を記録する
  • -vt:今日のタスク一覧(タスク名、開始時間、終了時間、実績時間)と作業の合計時間を表示する。
  • -vw:直近7日間の日別作業時間を表示する。

疑問

タスクをどのように管理するのか(配列か辞書か)、オプションによる処理をどこに記述すればよいのかがあやふやで悩んでおります。

開発環境

Ruby 2.6.6

考えたソースコード・設計

タスクとオプションをオブジェクトとして、TaskクラスとOptionクラスを抽出しました。

ruby

1class Task 2 attr_accessor :task_name, :start_time, :ending_time, :actual_time 3 4 def initialize(task_name, start_time, ending_time: "", actual_time: "") 5 @task_name = task_name 6 @start_time = start_time 7 end 8 end 9 10 class Option 11 def judge(option_kind) 12 case option_kind 13 when "-s", "--start" 14 record_start_time 15 when "-f", "--finish" 16 record_ending_time 17 when "-vt", "--view-total" 18 show_todays_task 19 when "-vw", "--view-week" 20 show_week_tasks 21 else 22 # オプションが適切でないので、使い方を説明する処理を記述 23 end 24 end 25 26 def record_start_time 27 # Taskクラスからインスタンスを作成して、配列に追加する処理を記述 28 end 29 30 def record_start_time 31 # Taskインスタンスの ending_time に終了時刻を記録させる処理を記述 32 # そのタスクの実績時間も計算して、actual_time に記録させる処理を記述 33 end 34 35 def show_todays_tasks 36 # タスクを格納している配列から、インスタンスを取り出し、本日のタスクを表示させる処理を記述 37 # 同時に、作業時間を合計する処理を記述し、ループ処理を抜けた後、表示させる処理を記述 38 end 39 40 def show_week_tasks 41 # 直近7日間の日別作業時間を表示させる処理を記述 42 # Time クラスで、直近7日間を取得 43 end 44 end 45 46 entered_option = Option.new 47 entered_option.judge(ARGV[0])

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問