TimeSlotTrackerで作業時間を計測集計する

# 目的

大量の小さいタスクを抱えている。タスクごとの作業時間を把握管理したい。


# 制約

お客様環境で利用したい。

個人契約ウェブアプリ利用や個人購入アプリの持込みは不可。

但し、githubなど禁止されていないサイトからライセンス上問題のないアプリであれば利用可能。


# （参考）いままで

フリーランス時代は、PerlでWebアプリを自作して、まぁまぁ機能していた。（今でも個人タスクでは利用してる）

しかし上記の制約で、お客様環境では利用不可。

現環境では、Excelベースの作業時間表をつくって枠ごとに集計したりしてた。

ただ、タスク増えすぎて限界に達していたのと、単軸ではなく「いろんな切り口」での数字報告を求められるようになった。
さすがに限界に達し、なにか探し始めた、というのが今回の経緯。


# 候補さがし

[SourceForge](https://sourceforge.net/)の[Time Tracking Software](https://sourceforge.net/directory/time-tracking/)から、[Windows](https://sourceforge.net/directory/time-tracking/windows/)を条件に見てまわった。

で、候補に挙がったが本記事で紹介するもの。

- [TimeSlotTracker](https://sourceforge.net/projects/timeslottracker/)

Javaアプリです。


# インストール

例によって[Scoop]で。

[Scoop]:<https://qiita.com/tags/scoop>

なんと `extras` に入ってます。

```
scoop install timeslottracker
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/bef6df97-9258-fded-3737-9016ac4b2586.png)

appsフォルダ配下にjarファイルが展開されるだけ、という漢らしい仕様。

jarでJavaアプリの起動が関連づけられていないので、こんなん準備して関連付けした。

```launchJavaApp.cmd
java -jar %*
```

関連付けを設定できたら、jarファイルをダブルクリック[^88]。

[^88]:のちにjavaw.exeで個別アプリ専用のショートカットを作成するはめになった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/fb348ef5-2fcb-4096-1748-24d2d89a52b5.png)

それらしい画面でてきました。

# 操作

## タスクの登録

タスク階層を登録してみる。 `Ins` キーがショートカットになっている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/a5432d88-ac03-0964-53bd-ba581b1cd541.png)

## 時間記録を開始

作業時間記録を開始。ショートカットは `スペース` 。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/d9b913f3-d493-55eb-4f7f-79d310d2e4b4.png)


## 別のタスクを続けて入力

同様にタスク登録する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/197c6185-d110-9064-ecc3-a33a52650471.png)


## 当日のタスク利用状況

Ctrl-dで確認可能。（スクリーンショット略）

---

...すいません、がんばって作ろうと思ったけど力尽きました。。。。

興味のある人は、インストールの項を参考に実際に触ってみてください。


# 不満点

## 操作性

キーボードショートカット等々で気に食わないふるまいがそれなりにある。

forkして勝手に直したら何とかなりそうだけど、、、まだ実現に至っていない。


## 集計の貧弱さ

見落としていたらごめんなさい。
まだそんなに見れていないとは思う。。

ただ雑感として、各メニューを叩いてみた感じだと、レポート機能が予想外に貧弱でした。。。

HTMLにもPDFにもできるように見えるものの、結局多階層や複数軸での集計は考慮できていないというか、発展途上のように見えた。


## データの保存

これは記さざるをえまい。。。

（といいながら、アプリ自体の評価を下げたくなかったので最後にもってきた）

デフォルト設定では、記録した内容はユーザーホーム直下に **XMLとして** 保存される。

```timeslottracker.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TimeSlotTracker SYSTEM "timeslottracker.dtd">

<TimeSlotTracker>

  <attributeType
     category="net.sf.timeslottracker.data.SimpleTextAttribute"
     name="Project manager"
     description=""
     defaultValue=""
     usedInTasks="true"
     usedInTimeSlots="false"
     hiddenOnReports="false"
     showInTaskInfo="false"
     showInTimeSlots="false"
     autoAddToTimeSlots="false"
  />
  <attributeType
     category="net.sf.timeslottracker.data.TextAreaAttribute"
     name="Long description"
     description="A long description - multiline edit object"
     defaultValue=""
     usedInTasks="true"
     usedInTimeSlots="true"
     hiddenOnReports="false"
     showInTaskInfo="false"
     showInTimeSlots="false"
     autoAddToTimeSlots="false"
  />
  <attributeType
     category="net.sf.timeslottracker.data.IntegerAttribute"
     name="Project number"
     description=""
     defaultValue=""
     usedInTasks="true"
     usedInTimeSlots="false"
     hiddenOnReports="false"
     showInTaskInfo="false"
     showInTimeSlots="false"
     autoAddToTimeSlots="false"
  />

  <root taskId="_1" name="Your tasks" description="">
    <task taskId="_2" name="Paid projects" hidden="false">
      <task taskId="_4" name="Bank data integration" hidden="false">
        <attribute type="Project number" ><![CDATA[34]]></attribute>
      </task>
    </task>
    <task taskId="_3" name="SourceForge" hidden="false">
      <task taskId="_5" name="TimeSlotTracker" hidden="false" description="http://sourceforge.net/projects/timeslottracker/">
        <attribute type="Project number" ><![CDATA[344]]></attribute>
        <attribute type="Project manager" ><![CDATA[zgibek]]></attribute>
        <attribute type="Long description" ><![CDATA[TimeSlotTracker is a tool for registering and reporting time slots.
Written in Sun Java, using Swing for GUI, XML for data and XSLT for making reports.]]></attribute>

(以下略)
```

これは衝撃だった。。。

なんか異常にバックアップ作成してる様子だったけど（詳細略）、そういう事情か。。

（その後、アプリで不整合状態が発生したのか、「保存できない、データ捨てるか？」という例外エラー画面に一度遭遇した）

せめてsqliteとかで抱いて欲しかった。。

（とはいえ自前で手を入れるほどの根性は無し）

ストレージのクラス化は定義されているものの、実装はこのまま放置されている模様。


# 現時点での結論

とりあえず他に選択肢もないので、試用継続中です。

「タスクレベルごとの集計値」の切り口の取り方が、既存Excelより少しだけマシになったのが救い。

とはいえ、いつバックアップ以前の全データがロストするのだろうかとドキドキしています。

不健全極まりないので、引き続き他のアプリを模索していきます。


# 余談：作業時間計測が、いかに重要かという話

ここから余談です。。

フリーランス時代も含め、作業工数読みは大変苦手でした。。

思えば最初期のころ、10万円（単価は失念）として見積もった仕事が2時間で完成してしまったことがあって、そのトラウマから過小な見積もりをする日々が続きました。

フリーランス時代は、見積過小でも負担になるのは（独り身の）自分の労働力なので、まぁ踏ん張ればいいやと思ってましたが。。。

困ったのは今の環境、つまり雇用下に入ってからでした。

もちろん給与として費用が発生してしまうので、コストを自主的な裁量の下に置けなくなったというのもありましたが、雇用下にあると残業規制などの制約も発生するし、なにより周囲を巻き込んでしまうので、、、

そんなこんなでフリーランス時代以上に真面目に記録に努めはじめたところ、驚愕の発見がありました。。。

**「俺、毎日トータルで30分もトイレ行っとる。。。」**

別にウ○コで籠る時間が異様に長かったわけではなく、ちょっと考えて以下のふたつの理由があるのは分かりました。

  1. 職場に無料利用可能な「緑茶」のベンディングマシンがあった。
  1. 執務室がトイレのちょうど反対側で、フロアの端から端までゆうに100m歩く必要があった

ただでさえ利尿効果でトイレの回数増えてるのに、遠いので回数増えたら相当な時間になってるという話でした。。。

当時でも1日8時間で予定計上してましたので、 **その1/16（6％強）が実際には使えない時間なのだ** というのは、もう衝撃でした。

もちろん、だからお茶を飲む回数を減らしてトイレに行く回数を減らす、という話ではなくて（苦笑）。

そのぶんをどこかに乗せないと数字が合わないので、今までは過大と思っていたマージンを普通に積むようになりました。
（そのせいで他者評価や自己評価が下がろうと知ったことか、これが俺の真の実力だ！）

また「トイレへの移動中も課題の施策の時間に充てる」くらいの習慣改善はしたかもしれません。。
（もはや日常になってしまって覚えていない）

とくに時間読み、工数読みが苦手な方こそ、「まずは」あらゆる作業時間を計測する習慣をお勧めしておきます。


# 余談の余談：時間読みができることになる最大のメリット

どんどん脱線してますが、、

ある程度の時間読みが出来るようになることの最大のメリットは「不機嫌にならずに済む」ことです。

というのも、何に（あるいは「誰に」）時間を喰われているかが分かるようになるので、いろんな工夫の余地が生じます。

たとえば、メールはこの時間に開いて集中的に消化しようとか。。

この時間は誰かの電話は受けないとか。。

（あ、とりあえずこのへんで止めておこう）


# 余談の余談の余談：未知のタスク

いちおう書いておきますが、こんだけ頑張っても、未知のタスクの時間読みには無力です。

でもこれが第一歩。記録することで、未知のタスクが「読めるタスク」へ変わっていくのです。。
（と信じたい）


# さいごに

チャンネル登録お願いします！！（ユーチューバー風に）

じゃなかった、面白かったら「いいね」押してくださいね。