[[📒Articles]] > [[📒2026 Articles]]
![[2026-04-01-1.webp|cover-picture]]
[[🦉KOKUKOKU]](刻刻)という時間記録ツールをつくりましたので紹介します。
## はじめに
これまで私は[[🦉Silhouette]]という自作の[[Obsidianプラグイン]]を使って、タスクごとに時間を記録してきました。
```console
- [x] タスクA @pjA `00:30`
- [_] タスクB @pjA `00:45`
- [x] タスクC @pjB `00:50`
- [x] タスクB @pjA `00:20`
- [~] タスクD @pjB `01:05` `計測中`
- [ ] タスクF @pjC
```
詳細は以下の記事に詳しく書いています。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
📘オブシディアの1日から紐解くObsidianの使い方
</div>
<div class="link-card-v2-content">平日の1日を追いながら、Obsidianでのデイリーノート運用、SilhouetteやVarious Complementsなど自作プラグインを使ったタスク管理・議事録・ドキュメント連携の実例を、ミネルヴァとオブシディアが紹介します。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/%F0%9F%93%98Articles/attachments/2025-12-25.webp" />
<a data-href="📘オブシディアの1日から紐解くObsidianの使い方" class="internal-link"></a>
</div>
%%[[📘オブシディアの1日から紐解くObsidianの使い方]]%%
しかし、複数の[[AIエージェント]]を走らせて作業をする場面が増えてきた今、**タスクごと**に時間を記録するという方式は成立しにくくなってきました。なぜか? ある瞬間には1人の人間と1つ以上[[AIエージェント]]によって、**常に複数のタスクが同時に進行している**からです。
```console
- [x] タスクA @pjA `00:30`
- [~] タスクB @pjA `00:45` `計測中`
- [~] タスクC @pjB `00:50` `計測中`
- [~] タスクD @pjB `01:05` `計測中`
- [ ] タスクF @pjC
タスクBは人間、C,DはAIがやっている......全部『計測中』でよいのか?
```
### タスクの作業時間が計測できない
同時に進行しているタスクすべてを計測するという方針もあります。ただ、それで計測できるのは各タスクの[[リードタイム]]です。作業時間の把握には使えません。特に仕事の報告で必要なのは『作業時間』であることが多いです。
だからと言って『メインで取り組んでいるタスクのみを計測する』というような方針は混乱を招きます。どれがメインなのか? なぜか? [[マルチタスク]]の1つが完了したときに毎回『今のメインは何か?』を問い直すのか? ......など考えることが尽きません。[[マルチタスク]]でただでさえ[[コンテキストスイッチ]]のコストが肥大化しているのに、そんなことのために貴重な脳のリソースを割り当てたくはないでしょう。
### プロジェクト単位で計測する
タスクレベルの計測が困難である以上、計測の単位をもっと大まかにするべきと考えました。プロジェクト単位の計測です。
```console
- pjA `02:40`
- pjB `01:30`
- pjC `00:35`
これでいいのでは......
```
仕事で必要な計測単位はプロジェクトであることがほとんどですし、個人としての計測単位もそうだと思います。私のようにタスク単位でガチの計測をし、後でグルーピングしている人は少数派でしょう。5年くらいタスク単位の時間を計測してきましたが、ぶっちゃけ **タスクの時間を記録しておいて役立った記憶は皆無** です。
> [!question]- 同時に進行しているタスクのプロジェクトが異なる場合は?
> 今メインで取り組んでいると**認識している**プロジェクトを計測します。
>
> 測定単位をプロジェクトにしても、異なるプロジェクトのタスクを同時に進める瞬間は必ず存在します。これをなくすことは不可能なので、必要としている計測単位が複数にまたがる場合はよしなに対処します。
### 『休憩』の意識を強く持つ
人間は[[マルチタスク]]ができません。[[マルチタスク]]をしているつもりでも、タスク間で[[コンテキストスイッチ]]が高速に起きています。タスクの切り替えを頻繁に行うと、脳に強い負荷がかかるため、脳が疲弊します。
私の体感ですが、[[AIエージェント]]を使って[[マルチタスク]]を進めているときの脳の疲れは、1つのタスクに集中して取り組んでいたときの**4~5倍にも及ぶ**と思っています。脳が疲弊してはアウトプットのクオリティが大幅に低下してしまいます。いくら[[AI]]が一瞬でつくってくれたものでも、期待通り動かなければ単なる資源と時間の無駄遣いです。
これを防ぐために大切なのは『定期的な休憩』だと思います。言い方を変えると、**『[[マルチタスク]]を連続して行う上限時間の設定』** でしょうか。個々のタスクやプロジェクトにかけた時間ではなく、**いま連続してどれくらい作業をしているか?** の測定が必要になってきます。
## KOKUKOKU(刻刻)
『プロジェクト単位の計測』と『連続作業時間の上限設定』、この2つを実現するツールとして[[🦉KOKUKOKU]]をつくりました。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://github.githubassets.com/favicons/favicon.svg" />
<span class="link-card-v2-site-name">GitHub</span>
</div>
<div class="link-card-v2-title">
GitHub - tadashi-aikawa/kokukoku: A Hammerspoon Spoon for tracking time spent on each project.
</div>
<div class="link-card-v2-content">
A Hammerspoon Spoon for tracking time spent on each project. - tadashi-aikawa/kokukoku
</div>
<img class="link-card-v2-image" src="https://opengraph.githubassets.com/8978ef9236bb16a174770c992fd40063e40cc58e371e6d78f5a02b17262c6e82/tadashi-aikawa/kokukoku" />
<a href="https://github.com/tadashi-aikawa/kokukoku"></a>
</div>
以下の動画は、定義された3つのプロジェクトに対して測定対象を切り替えたり、測定を休止(休憩)したりしているデモです。
<iframe width="560" height="315" src="https://www.youtube.com/embed/ZqZ_CU7rxPk?si=UE0sKHLn-1bNKrrZ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## インストール
最新情報は[セットアップ(日本語)](https://github.com/tadashi-aikawa/kokukoku/blob/main/README.ja.md#%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97) をご覧ください。
参考までに、2026/04/01 時点での手順を紹介しておきます。
### **準備:** [[Hammerspoon]]や[[Spoon]]がインストールされていない場合
```console
brew install --cask hammerspoon
open -a Hammerspoon
```
```console
mkdir -p ~/.hammerspoon/Spoons
curl -L https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpoonInstall.spoon.zip -o /tmp/SpoonInstall.spoon.zip
unzip -o /tmp/SpoonInstall.spoon.zip -d ~/.hammerspoon/Spoons
```
### `init.lua` の作成
`~/.hammerspoon/init.lua`
```lua
hs.loadSpoon("SpoonInstall")
spoon.SpoonInstall.repos.kokukoku = {
url = "https://github.com/tadashi-aikawa/kokukoku",
desc = "KOKUKOKU Spoon repository",
branch = "spoons",
}
spoon.SpoonInstall:andUse("Kokukoku", {
repo = "kokukoku",
fn = function(s)
-- 設定は好きに変更する
s:setup({
projects = {
{ id = "work", name = "Work", icon = "💼" },
{ id = "meeting", name = "Meeting", icon = "🗓" },
{ id = "break", name = "Break", icon = "☕", isBreak = true },
},
hotkey = { modifiers = { "alt" }, key = "t" },
})
end,
})
```
#### 起動
[[Hammerspoon]]の `reload` または再起動をします。`hotkey` で設定したキーを押して、アクティブモニタの中央に[[🦉KOKUKOKU]]のパネルが表示されればOKです。
## 主な機能
主な機能は4つです。
### プロジェクトごとの作業時間計測
計測中のプロジェクトはレコードが強調表示されます。
![[2026-04-01-11-28-08.avif|frame]]
*[[🦉KOKUKOKU]]のパネル*
計測プロジェクトの変更方法は3つあります。
- 上下キーや`j/k`キーで対象を選択し、`Enter` を押す
- 左側に記載された数字キー (`1~9`) を押す
- マウスポインタでクリックする
切り替わると[[🦉KOKUKOKU]]のパネルは自動的にフェードアウトします。自動で閉じたくない場合は `ui.closeOnSwitch = false` を設定してください。
```lua
{
ui = {
closeOnSwitch = false,
},
}
```
プロジェクトのアイコン画像や表示名は `projects` 設定配下から指定します。
```lua
{
projects = {
{
id = "minerva",
name = "Minerva",
icon = "https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-image-large.webp",
},
{
id = "oss",
name = "OSS活動",
icon = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSmrGmeBv3SOLSKz6OlTVlVYkfH9_W3BBgdrA&s",
},
{ id = "env", name = "環境整備", icon = "💻" },
},
}
```
### 連続稼働時間表示
[[🦉KOKUKOKU]]の上部に表示される時間は『連続稼働時間』です。各プロジェクトの累計計測時間の合計ではありません。
![[2026-04-01-11-35-55.avif|frame]]
『連続稼働時間』とは、**休憩せずに連続で計測している時間の合計**です。つまり、[[🦉KOKUKOKU]]で真面目に計測をしていれば、**休憩なしで作業している時間**となります。
一度『休憩』すると『連続稼働時間』は `00:00:00` にリセットされます。
### アラート
連続稼働時間は可視化されるだけでなく、一定時間に達したらアラートを出すこともできます。設定の `alert.continuousWork.thresholds` に秒数を指定する必要があります。
```lua
{
alert = {
continuousWork = {
thresholds = { 60*30, 60*60 }, -- 30分 と 60分 でアラート
message = "%d分経過しました。休憩しましょう", -- メッセージテンプレート(%d = 分数)
},
},
}
```
[[macOS]]の通知機能を使うため、『設定』で[[Hammerspoon]]の通知を許可しておく必要があります。
![[2026-04-01-11-42-43.avif]]
*自動消去を防ぐなら『通知パネル』にもしておく*
### クリップボードコピー
各プロジェクトの累計計測時間をクリップボードにコピーできます。
```markdown
- **Minerva**: `02:13`
- **OSS活動**: `00:40`
- **環境整備**: `00:07`
```
デフォルトでは `c`キー ですが、設定で変更可能です。
```lua
{
keymap = {
copyToClipboard = "c", -- クリップボードにコピー(デフォルト: "c")
},
}
```
また、フォーマットは `ui.copyTextFormat` と `ui.copyTextSeparator` で変更できます。
```lua
{
ui = {
copyTextFormat = "- {name}: {hh}:{mm}:{ss}", -- コピー時の行フォーマット
copyTextSeparator = "\n", -- コピー時の行区切り文字
},
}
```
## 私の設定
最後に私の[[🦉KOKUKOKU]]の設定を共有します。
`~/.hammerspoon/init.lua`
```lua
hs.loadSpoon("Kokukoku")
spoon.Kokukoku:setup({
projects = {
{
id = "minerva",
name = "Minerva",
icon = "https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/minerva-image-large.webp",
},
{
id = "oss",
name = "OSS活動",
icon = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSmrGmeBv3SOLSKz6OlTVlVYkfH9_W3BBgdrA&s",
},
{ id = "env", name = "環境整備", icon = "💻" },
},
hotkey = { modifiers = { "command" }, key = "f18" },
alert = { continuousWork = { thresholds = { 60 * 60 } } },
ui = {
fontName = "CaskaydiaCove Nerd Font",
copyTextFormat = "- **{name}**: `{hh}:{mm}`",
},
keymap = {
startBreak = "r",
reset = "R",
},
})
```
最新の設定は以下で更新しておりますので、そちらをご覧ください。
<div class="link-card-v2">
<div class="link-card-v2-site">
<img class="link-card-v2-site-icon" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/favicon-64.png" />
<span class="link-card-v2-site-name">Minerva</span>
</div>
<div class="link-card-v2-title">
🦉KOKUKOKUのマイ設定
</div>
<div class="link-card-v2-content">私の🦉KOKUKOKUの設定。</div>
<img class="link-card-v2-image" src="https://publish-01.obsidian.md/access/35d05cd1bf5cc500e11cc8ba57daaf88/Notes/attachments/mynote.webp" />
<a data-href="🦉KOKUKOKUのマイ設定" class="internal-link"></a>
</div>
%%[[🦉KOKUKOKUのマイ設定]]%%
## まとめ
マルチエージェント時代の時間記録に必要な要件を整理し、それを実現するために作成したツール『[[🦉KOKUKOKU]]』を紹介しました。
我々はまだ[[AI]]による激しい変化の渦中だと思っています。そのため、この考え方・やり方も半年後にはまた変わっているかもしれません。
正直、時代についていくのは大変ですが、古いやり方・慣れ親しんだやり方に固執せず、時代の移り変わりと共にアンラーニングして常に自身を進化させていきたいと思っています。