第2回 | 育てて終わりにしない。Term-gotchi に成長記録を足した開発記 | UNIX Cafe

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第2回 | 育てて終わりにしない。Term-gotchi に成長記録を足した開発記 | UNIX Cafe

Term-gotchi 第2回は、成長記録と分岐進化の追加編です。tg_history、sage / builder、専用コマンド、CHANGELOG.md を通して、CLI ツールに「変化の履歴」を持たせる面白さを紹介します。

前回は、zsh の中で育つ小さな相棒アプリ Term-gotchi を作るところまでを書きました。

lscdgit といった普段のコマンドが経験値になって、egg -> sprout -> buddy と進化していく。そこまでは、ミニ育成アプリとしてかなり素直な形です。

でも、実際に使い始めると、次の疑問が出てきました。

  • いま何が起きて成長したのか、あとから追えるようにしたい
  • 進化しても見た目以外の違いが少ない
  • 続けて育てたくなる分岐がほしい
  • 開発の経緯そのものも、あとから参照できるようにしたい

そこで第2回では、Term-gotchi に成長記録分岐進化、そして履歴として残る開発ログを足しました。

今回は「どうやって最初の MVP を、長く触りたくなる道具に育てたか」を中心に紹介します。

目次

MVP の次に必要だったのは、派手な機能ではなく記録だった

最初の版は、ちゃんと遊べました。

  • tg_status で状態を見る
  • tg_feedtg_train で世話をする
  • 普段のコマンドで経験値が増える
  • egg から sproutbuddy へ進化する

ただ、しばらく使ってみると、数字だけでは物足りなくなります。

例えば、

  • さっき何の操作でレベルが上がったのか
  • 進化した瞬間のメッセージをあとから見返せない
  • コマンドが増えているのに、育ち方の違いが見えにくい

という「遊びの手触り」の弱さがありました。

ここで面白かったのは、次に必要だったのが AI でも、画面を豪華にすることでもなく、ログだったことです。

育成アプリにとって、記録はかなり重要です。

なぜなら、育つという現象は「変化の履歴」が見えて初めて気持ちよくなるからです。

まず tg_status を見やすくした

最初にやったのは、記録専用機能ではなく、状態表示そのものの改善でした。実際にしばらく使っていると、Term-gotchi はこのような状態になりました。

ASCII アートも含めて表示されるので、数字だけでなく、いまの姿も一緒に確認できます。

  ___
 (o o)
 /|#|\
  / \
 _| |_

Term-gotchi
Form: builder
Level: 28
XP: [#####.....] 131/290
Hunger: [########..] 80
Health: [##########] 100
Mood: [##########] 100
Commands: 2956 total / 108 unique
Vocab: 10
Trait: tough hands-on finisher
Final form reached
Message: Let us trace it step by step and see what jumps out.

追加したのは次の要素です。

  • XP のゲージ表示
  • hunger / health / mood のゲージ表示
  • Commands: total / unique
  • 次の進化条件を示すヒント
  • form ごとの Trait:

これで、単に「数値が増えている」ではなく、

  • あとどれくらいで次に進むのか
  • どんな育ち方をしているのか
  • 今の形態は何が得意なのか

が、一目で分かるようになりました。

こういう改善は地味ですが、毎回触るコマンドほど効きます。

進化後の差を、見た目以外にも持たせた

次にやったのが、形態ごとの個性付けです。

最初の頃は、進化しても主な違いは ASCII アートだけでした。

もちろん、それだけでも楽しいのですが、継続して使うと「育て方の違い」が欲しくなります。

そこで、まず tg_talktg_train を form ごとに変えました。

tg_talk の変化

  • egg: まだ素直で小さな相棒
  • sprout: 成長意欲が強い
  • buddy: 一緒に作業する相棒らしさが出る
  • sage: 学習や理解に寄った台詞になる
  • builder: 実務や作業推進に寄った台詞になる

tg_train の変化

  • egg: XP +3, Vocab +1
  • sprout: XP +4, Vocab +1
  • buddy: XP +5, Vocab +2
  • sage: XP +6, Vocab +3
  • builder: XP +6, Vocab +2

これで、育つほど行動の意味が少しずつ変わるようになりました。

単純な数値上昇でも、文脈が乗ると急に楽しくなります。

buddy の先に分岐進化を作った

ここが第2回の中心です。

buddy の先に、

  • sage
  • builder

という 2 つの最終形を追加しました。

sage

学習寄りの進化です。

  • vocab_level を伸ばす
  • tg_train を多めに使う
  • 言葉や理解に寄った育ち方をする

builder

実務寄りの進化です。

  • command_count を積む
  • 普段の作業をたくさんこなす
  • 手を動かして前に進むタイプになる

条件はシンプルにしています。

  • buddy -> sage: level >= 5 かつ vocab_level >= 8
  • buddy -> builder: level >= 5 かつ command_count >= 30

もし両方の条件に近い場合でも、どの操作で進んだかによって分岐先が決まるようにしました。

  • 訓練で進んだら sage
  • 通常コマンドの積み上げで進んだら builder

これはゲーム的な演出でもありますが、同時に「使い方がそのまま個性になる」設計です。

最終形には専用コマンドも足した

分岐進化を入れるなら、見た目と台詞だけでは足りません。

そこで最終形には専用コマンドを用意しました。

tg_study

sage 専用です。

  • XP +4
  • Vocab +4

学習特化らしく、語彙成長が大きく伸びます。

tg_build

builder 専用です。

  • XP +8
  • Vocab +1

作業寄りの勢いを、そのまま強い進行力に変えています。

しかも、別 form で呼ぶと明示的にエラーにしています。

termgotchi: tg_study is available only in sage form. Current form: egg

ここを曖昧にしなかったのは重要でした。

「何でも実行できる」より、「今の形態だからこそ使える」のほうが、育成として気持ちよくなります。

成長記録として tg_history を足した

今回いちばん実用的だった追加がこれです。

tg_history は、直近 12 件の成長イベントを表示します。

対象になるのは、

  • 通常コマンドによる成長
  • tg_feed
  • tg_clean
  • tg_train
  • tg_study
  • tg_build
  • idle 時のメッセージ
  • 進化イベント

です。

例えば、こんな形で見えます。

Recent growth log:
  2026-05-15T23:15:19+0900  tg_train: I can feel new skills taking root.
  2026-05-15T23:15:19+0900  last_fed_at: Yum! Thanks for the snack.

これで「何が起きて今の姿になったのか」が、ようやくストーリーとして見えるようになりました。

育成アプリにログを付けると、ただの state 管理が一気に“記録”になります。

実装して初めて見つかった不具合もあった

今回の追加で、むしろ良かったのはバグが見つかったことです。

代表例は 2 つありました。

1. source ~/.zshrc しても新しいコマンドが増えない

原因は、termgotchi.zsh の先頭にあったロード済みガードです。

if [[ -n "${TERM_GOTCHI_LOADED:-}" ]]; then
  return 0
fi

これがあると、いったん読み込んだあと source ~/.zshrc しても、新しい関数定義が再読込されません。

つまり、tg_history を追加しても、今のシェルでは「command not found」のままです。

ここは修正して、source ~/.zshrc で新しい定義が上書きされるようにしました。

2. whence が成長ログに入ってしまう

tg_history を試すために whence -w tg_history を打ったら、それ自体が成長ログに入ってしまいました。

これは、内部コマンド除外リストに whencetypewhich が入っていなかったためです。

こういうのは、実際に触って初めて見つかります。

小さい不具合ですが、シェル拡張ではかなり大事です。

開発そのものも、CHANGELOG.md に残すようにした

育成記録を付けるなら、開発記録も残したくなります。

そこで今回、リポジトリ側には CHANGELOG.md も追加しました。

内容は、

  • v0.1.0: safe install と基本表示
  • v0.2.0: passive XP と care commands
  • v0.4.0: ゲージ表示と成長バランス調整
  • v0.6.0: sage / builder 分岐進化
  • v0.8.0: tg_history と reload 修正

のように、段階ごとの進化が追える形です。

個人開発では、完成品だけを見ると「最初からこうだった」ように見えます。

でも実際は、

  • 小さく作る
  • 使ってみる
  • 違和感を見つける
  • それを記録しながら直す

の積み重ねです。

この流れを残しておくと、あとで自分でも助かります。

今回の追加で見えたこと

第1回では、「安全に動くミニ育成アプリを作る」ことが主題でした。

第2回で見えてきたのは、育成アプリは機能追加よりも、変化の見え方が大切だということです。

数値を増やすだけなら簡単です。

でも、

  • 何が起きたかを残す
  • 育て方で進化先が変わる
  • 形態ごとに言葉と役割が変わる
  • 開発の過程そのものも記録する

といった層が足されると、アプリ全体に時間の流れが生まれます。

これは小さな CLI ツールでも同じです。

ターミナルの中の遊びでも、履歴があると世界が少し深くなります。

おわりに

Term-gotchi は、最初から大きなものを目指して作ったアプリではありません

むしろ、

  • 壊さない
  • 小さく始める
  • 使いながら伸ばす
  • 記録を残す

という、かなり UNIX 的な育て方をしてきました。

今回、第2回として成長記録や分岐進化を足したことで、ようやく「作って終わり」ではなく、「付き合っていけるアプリ」になってきた気がします。

もし自分でターミナルツールを作るなら、最初から豪華にしなくて大丈夫です。

まずは小さく作って、次に記録を足してください。

変化が見えるようになるだけで、道具はかなり面白くなります。

最初の実装から読みたい方へ

今回は、Term-gotchi に成長記録と分岐進化を追加しました。

その前の第1回では、zsh の中で育つ小さな相棒アプリとして、Term-gotchi を最初に動かすところまでを紹介しています。安全なシェル設計、.zshrc への追加方法、状態ファイルの扱いなど、今回の機能追加の土台になる部分です。

👉 第1回「ターミナルで育つ相棒を作ろう。zsh製ミニ育成アプリ『Term-gotchi』開発記」へ戻る

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

目次