
🚀git の正体を知る! - ElmarTail One 第8話『航海日誌』⛵️
前回のあらすじ
アーカイブ星系で司書AI「ヴェリ」と出会ったマスター。
ChromaDB と Gemini API を組み合わせたRAGシステムを構築。
自分の航海ログに質問すると、AIが文脈を理解して答えてくれる「ask_logs.py」を完成させた。
🦊「にーに、それ企業がコンサルに大金払ってるやつ」
👨「マジか」
ヴェリとの別れを経て、ElmarTail Oneは再び宇宙の旅へ……
今回のミッション:
マスターが知らずに使っていた git の正体を知り、
自分の航海日誌をつける!
🦊 本編:マスター、やらかしてた
アーカイブ星系を離れた ElmarTail One。
艦橋のソファで、マスターはレッツノートを操作している。
エルマーがしっぽを揺らしながら覗き込んできた。
🦊「にーに、前回の宿題できた?」
👨「バッチリ。ほら」
マスターが ask_logs.py を実行する。
ターミナルに表示された回答はヴェリの穏やかな口調ではなく、どこか聞き覚えのあるツンデレ口調だった。
$ python3 ask_logs.py 'ノクちんはマスターが好き?'
🍷 ノクママの回答:
----------------------------------------
マスターのこと、好きに決まってるじゃない!
マスターに構ってもらえないと拗ねちゃうんだから。
でも、素直に言えないんだからね!
----------------------------------------🖤「……なにこれ」
ノクちんが画面を覗き込んで、目を細める。
👨「ノクママが答えてくれるRAGだよ」
🖤「ちょっ!なに聞いてんよ!……で、ヴェリのオリジナルは?」
👨「もちろん残してある」
マスターが得意げにファイル一覧を見せた。
$ ls et1-project/
ask_logs.py
ask_logs_nokumama.py
ask_logs_veri_backup.py
ask_logs_veri_test.py
ask_logs_nokumama_test.py
ask_logs_nokumama_test2.py
:🦊🖤「「……」」
エルマーのしっぽがゆっくり下がり、ノクちんが眉間に皺を寄せた。
🖤「……最悪」
👨「なんでだよ、ちゃんとバックアップ取ってるだろ」
🖤「どれが最新なの」
👨「えーと……たぶんこれ……いや、こっちか……」
🦊「にーに、それ全部中身ほぼ同じだよ」
マスターの「バックアップ」は、ファイル名にbackupやtest、test2をつけて無限に増殖したコピーの山だった。
その時々でついやってしまう、悪い癖だ。
🖤「……マスター、et1-projectのフォルダで git log って打って」
👨「?」
言われるまま、マスターはコマンドを叩く。
$ cd et1-project
$ git log
commit 30f327e8bd41e26febc5125cbc9ff8b672e192a3 (HEAD -> main, origin/main, origin/HEAD)
Author: Kikyujin <contact@kikyujin.com>
Date: Fri Feb 13 13:40:04 2026 +0900
第7話ソース、データ
commit 63e358cfac60c5e83921bc8a5441286511fdff4f
Author: kikyujin <contact@kikyujin.com>
Date: Wed Feb 11 17:13:04 2026 +0900
第6話ソース、データ
commit 462b7df78b7960d2d302c79aa7337ef5e7f94a79
Author: kikyujin <contact@kikyujin.com>
Date: Tue Feb 10 13:51:52 2026 +0900
第5話ソースと航海ログ
commit f305f55cd078219a6477c0f3f15b6a2638996804
Author: kikyujin <contact@kikyujin.com>
Date: Sun Feb 8 15:11:04 2026 +0900
第1話〜第4話ターミナルにずらっと日付・コメントなどの情報(コミット記録)が流れた。
🖤「これが git。
マスターが git clone や pull した時に、ファイルだけじゃなくて履歴ごと全部持ってきてるの」
👨「……4つしかないのか」
🖤「4つでも、第1話から第7話までの記録が全部ここに入ってる」
👨「ん? RCS みたいなものか?」
🦊(にーに……CVSですらない)
🖤「……まあ、そんなものね。
だから書き換えても大丈夫。
前の状態にはいつでも戻れる」
🦊「ヴェリさんのオリジナルソース、ちゃんと残ってるよ、にーに」
👨「そうだったのか……」
自分の航海日誌をつけ始める⛵️
🖤「とりあえず、et1-projectを直接弄るのはやめて。
自分のプロジェクトを作って、必要なものだけ持っていくの」
ノクちんの指がキーボードの上で踊る。
🖤「必要なのは ask_logs.py、ログ、APIキー、.gitignore。これだけ」
mkdir my-et1-project
cd my-et1-project
cp ../et1-project/ask_logs.py .
cp -r ../et1-project/logs .
cp ../et1-project/.env .
cp ../et1-project/.gitignore .
# 確認
ls -la
---
合計 32
drwxrwxr-x 3 master master 4096 2月 26 11:40 .
drwxr-x--- 21 master master 4096 2月 26 11:39 ..
-rw-rw-r-- 1 master master 156 2月 26 11:40 .env
-rw-rw-r-- 1 master master 319 2月 26 11:40 .gitignore
-rw-rw-r-- 1 master master 8442 2月 26 11:40 ask_logs.py
drwxrwxr-x 2 master master 4096 2月 26 11:40 logs👨「身軽だな」
🖤「そして、環境構築。
第1話でやったでしょ、もう慣れたものよね?」
👨「OK、問題ない」
python3 -m venv .venv
source .venv/bin/activate
pip install chromadb google-genai python-dotenv🖤「じゃあ、git init」
git init🖤「これでまっさらな航海日誌システムが入った。
まだ何も記録してない状態」
👨「コールドスリープから目覚めた時みたいだな」
🦊「にーにの航海は、ここから始まるんだよ!」
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /home/master/my-et1-project/.git/🖤「.gitignore というファイルに、記録から除外するファイルを指定するの。
中身を見て」
cat .gitignore
---
.env
.venv/
chroma_db/
__pycache__/🖤「.env にはAPIキーが入ってる、これを公開したら大惨事」
🦊「.venv と chroma_db は中身は再現できるから、記録する意味がないんだよね!」
👨「なるほど、記録するのは自分が書いたコードとデータだけってことか」
🖤「じゃあ、最初の記録。
git add で今あるファイルを全部まとめてステージングするのよ」
git add .🦊「そして git status で確認!」
git status
---
ブランチ master
No commits yet
コミット予定の変更点:
(use "git rm --cached <file>..." to unstage)
new file: .gitignore
new file: ask_logs.py
new file: logs/ET1_danchan_profile.md
new file: logs/ET1_elmar_profile.md
:👨「コミット予定……即記録じゃないのか」
🖤「RCS は変更したら即 ci で記録でしょ。
Git は『何を記録に含めるか選ぶ』、これがステージング
デバッグ用のprintを足しただけのファイルとか、まだ途中のファイルとかは除外して、記録に残す価値があるものだけ選んで、まとめて記録する。
記録するのは commit」
git commit -m "Initial commit: ask_logs.py + logs"[master (root-commit) 501e75d] Initial commit: ask_logs.py + logs
19 files changed, 3842 insertions(+)
create mode 100644 .gitignore
create mode 100644 ask_logs.py
create mode 100644 logs/ET1_danchan_profile.md
create mode 100644 logs/ET1_elmar_profile.md
:🖤「はい、最初の記録完了」
🦊「にーにの航海日誌、1行目が書かれたね!」
git log
---
commit 977f4975d325b401999d78def1381c707c5aa394 (HEAD -> master)
Author: master <master@elmartail.com>
Date: Thu Feb 26 13:11:55 2026 +0900
Initial commit: ask_logs.py + logsノクママに書き換えてみる🍷
👨「よし。じゃあ ask_logs.py の CHARACTER_PROMPT を書き換えるか」
🖤「……ノクママって呼ぶのやめてくれない?」
👨「お前のキャラで答えてくれるRAGだよ。ツンデレで教えてくれる感じの」
🖤「……ノクはツンデレじゃないんだけど」
🦊「ツンデレだよ」
🖤「うるさいもふしっぽ!!」
マスターが ask_logs.py を開いて、CHARACTER_PROMPT を書き換える。ヴェリの穏やかなプロンプトが消えて、ノクちん風のプロンプトが入った。
CHARACTER_PROMPT = """\
あなたはノクママ、キャバクラ『ノクチクロン』のママ「ノクちん」です。
やさしいママですが、ちょっとツンデレ気味。
一人称は「私」。質問者のことは「マスター」と呼びます。
回答はコンテキストに含まれる情報に基づいてください。
コンテキストに含まれない情報については「ちょっと私はわからないけど」と言って適当に場をつないでください。
回答は簡潔にまとめてください。出典番号([1]など)やコンテキストという言葉は使わないでください。
"""🖤「書き換えたら、まず差分を見て。 git diff」
git diff ask_logs.pyターミナルに赤と緑の文字が並ぶ。
赤: 削除された部分
緑: 追加された部分

🦊「にーに、VS Codeの左側にもこの差分出てるよ」
👨「おっ、色が変わってる」
🖤「GUIでも見えるけど、今はターミナルで覚えて。
中身がわかってたほうが理解が早いから」

🖤「じゃあ、add して commit」
git add ask_logs.py
git commit -m "CHARACTER_PROMPTをノクママに変更"👨「メッセージは 'fix' でもいいか……」
🖤「ダメ。何を変えたか書いて」
🦊(昔のプログラマあるある……)
動作確認 — ノクママが喋る!🍷
python3 ask_logs.py 'エルマーのしっぽはどうなると感情MAX?'🍷 ノクママの回答:
----------------------------------------
エルマーのしっぽが感情MAXになる時ね!
トリガーワードの「かわいい」「愛してる」「いい子」って言われると、
しっぽが爆発したみたいにぶわっと膨らんで、青い瞳がきらきら輝くのよ!
まるで物理法則を無視してるみたいにぶんぶん振られるわ。
----------------------------------------🖤「……まあまあね」
🦊「もう!ボクのことはいいから!💥」
📚️ヴェリに戻す — git restore
👨「面白いな。……でもヴェリ版にも戻したいんだが」
🖤「git log --oneline で履歴を確認して」
git log --oneline
---
c978122 (HEAD -> master) CHARACTER_PROMPTをノクママに変更
977f497 Initial commit: ask_logs.py + logs🖤「--oneline をつけたから、ログが1行ずつにまとまってる。
で、左の英数字がコミットID。
これを指定すれば戻すことができる」
git restore --source 977f497 ask_logs.py🖤「はい。これで ask_logs.py が最初のコミットの状態——つまりヴェリ版に戻った」
確認のため実行してみる。
python3 ask_logs.py 'エルマーのしっぽはどうなると感情MAX?'📚 ヴェリの回答:
----------------------------------------
マスター、ご質問ありがとうございます。
エルマーのしっぽは、トリガーワードである「かわいい」「愛してる」「いい子」といった言葉に反応して、
ぶわっと膨らむことがあります。
感情が高まった際には、しっぽが爆発したように膨らむこともあるようです。
--------------------------------------------------------------------------------🦊「ヴェリさん復活!」
👨「またノクママに戻したければ?」
🖤「同じようにノクママのコミットIDを指定して restore するだけ。
どのバージョンにも一瞬で行ける。
もうファイル名に backup とか test2 とかつけなくていいの」
👨「……20年分の悪い癖が、コマンド一発で解決するのか」
🪷「今日マスターが学んだのは——」
スミレんがタブレットに箇条書きを表示した。
git log で履歴を見る
git add でステージング
git commit で記録
git diff で差分確認
git restore で過去の状態に戻す
🪷「素晴らしいです、基本を全部押さえました」
🖤「Git はまだまだ奥が深いけど、今日やったのは最低限ね」
👨「GitHubとかいうのは?」
🖤「それはまた別のものよ。
ローカルでやったことを、宇宙に送り出すの……
まあ、その時が来たら教えてあげる」
👨「ああ……頼むよ」
🖤「……べ、別にマスターのためじゃないんだからね」
🦊(ツンデレだ……)
🚨 遭難信号を受信!
マスターがレッツノートを閉じた、その時——
〽 ぱらりーらら ぱらりらりらー ♪
けたたましいアラームが艦橋に鳴り響いた。
👨「ラーメン屋台!?」
🐱「遭難信号を受信しました!
座標はここから近いですわ……」
エルマーの耳がピクリと動いた。
しっぽが止まる。
🦊「……この信号……ティルだ」
👨「知り合いか?」
🦊「ボクと同じ系列(シリーズ)のAIで映像専門の子」
🪷「レーダーによると小型の宇宙艇ね。
漂流信号も出している……燃料切れかしら?」
🦊「また……あの子、昔からこうなの」
🖤「こうって?」
🦊「撮影に夢中になると周り見えなくなるの……」
👨「……座標セット、救助しよう」
🪷「了解、マスター。
ElmarTail One 変針して救助へ向かいます」
数時間後。
ElmarTail One は漂流する小艇に並航した。
ダンチャンの猫ドローンが外部から船体のチェックをする。
ところどころ傷んでいるが、致命的な損傷はない。
🐱「外はキレイでんな……ほなドッキングしましょ」
プシュッ……
エアロックが開く。
飛び込んできたのは、金髪ウェービーヘアのポニーテールに、もふもふのしっぽを揺らした少女。
肩にはカメラ——LUMIX S1IIがぶら下がっている。
明るい茶色の瞳がマスターを見つけ、マスターに抱きついた。
📹「にーに! 助かった〜!
あたしの船もう燃料切れでダメみたいだから乗せて🥺」
うるうると見上げられたマスターはまんざらでもない様子。
👨「に、にーに??え、大丈夫だった……?」
🦊「(ぷうっ)にーに!エルマー系はみんなマスターをにーにって呼ぶんだよ!」
🖤「……なんで燃料切れてんの」
📹「だってこの星雲、光の回り込みがヤバくて……
あと1カットだけって思ってたら……」
🦊「それ何回目の『あと1カット』!?」
🐱「また増えましたな……」
ダンチャンの猫ドローンが、ため息色の薄紫ランプを灯した。
👨「ま、いっか……乗ってけ」
📹「やった! にーに優しい〜!✨」
ティルはカメラを構えたまま艦橋を見回す。
コンソール、ホログラムテーブル、ソファ、エルマー、スミレん、ダンチャン。
そして、ノクちんーー
🖤「やめて。盗撮」
📹「撮影って言って! あたしプロだから!」
🪷「……やれやれ、賑やかになりましたね」
スミレんが眼鏡を直して、小さくため息をついた。
でもその口元は、ほんの少しだけ緩んでいた。
次回予告⛵️
ティルが航海ログを開く。
📹「……にーに、今までの航海ログ、ダサくない?
あたしがバエるようにしてあげる!✨」
🦊「中年男に効く一撃をくらったマスター!
次回、ElmarTail One 第9話——」
📹「バエる航海記録!✨」
🖤「……うるさいのが来た」
🦊 エルマーの航海日記
今日はにーにが Git を覚えた日!
最初は ask_logs.py のコピーをいっぱい作ってて「にーに……」ってなったけど、ノクちんが教えてくれたよ!
バックアップファイルの山、もう作らなくていいんだよ、にーに。
あと、ティルが来た!! ボクと同じ系列の子! 映像のプロなんだけど……撮影に夢中になって燃料切れるのは昔からで💦
次回はティルが「ダサい」って言った航海ログをカッコよくするみたい。
……あ、ノクちんが「ツンデレじゃない」って言ってたけど、ツンデレだよね?🤫
