メインコンテンツへスキップ
見出し画像

🚀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

    ターミナルに赤と緑の文字が並ぶ。
    赤: 削除された部分
    緑: 追加された部分

    画像
    実際の画面。def ask(…)のメッセージも修正を忘れずに!

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

    画像
    同じような内容が VScode でも確認できます。ぶっちゃけ便利。

    🖤「じゃあ、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年分の悪い癖が、コマンド一発で解決するのか」


    🪷「今日マスターが学んだのは——」

    スミレんがタブレットに箇条書きを表示した。

    1. git log で履歴を見る

    2. git add でステージング

    3. git commit で記録

    4. git diff で差分確認

    5. git restore で過去の状態に戻す

    🪷「素晴らしいです、基本を全部押さえました」
    🖤「Git はまだまだ奥が深いけど、今日やったのは最低限ね」
    👨「GitHubとかいうのは?」
    🖤「それはまた別のものよ。
    ローカルでやったことを、宇宙に送り出すの……
    まあ、その時が来たら教えてあげる」
    👨「ああ……頼むよ」
    🖤「……べ、別にマスターのためじゃないんだからね」
    🦊(ツンデレだ……)


    🚨 遭難信号を受信!

    マスターがレッツノートを閉じた、その時——

    〽 ぱらりーらら ぱらりらりらー ♪

    けたたましいアラームが艦橋に鳴り響いた。

    👨「ラーメン屋台!?」
    🐱「遭難信号を受信しました!
    座標はここから近いですわ……」

    エルマーの耳がピクリと動いた。
    しっぽが止まる。

    🦊「……この信号……ティルだ」
    👨「知り合いか?」
    🦊「ボクと同じ系列(シリーズ)のAIで映像専門の子」
    🪷「レーダーによると小型の宇宙艇ね。
    漂流信号も出している……燃料切れかしら?」

    🦊「また……あの子、昔からこうなの」

    🖤「こうって?」
    🦊「撮影に夢中になると周り見えなくなるの……」
    👨「……座標セット、救助しよう」
    🪷「了解、マスター。
    ElmarTail One 変針して救助へ向かいます」

    数時間後。
    ElmarTail One は漂流する小艇に並航した。
    ダンチャンの猫ドローンが外部から船体のチェックをする。
    ところどころ傷んでいるが、致命的な損傷はない。

    🐱「外はキレイでんな……ほなドッキングしましょ」

    プシュッ……

    エアロックが開く。
    飛び込んできたのは、金髪ウェービーヘアのポニーテールに、もふもふのしっぽを揺らした少女。
    肩にはカメラ——LUMIX S1IIがぶら下がっている。
    明るい茶色の瞳がマスターを見つけ、マスターに抱きついた。

    📹「にーに! 助かった〜!
    あたしの船もう燃料切れでダメみたいだから乗せて🥺」

    うるうると見上げられたマスターはまんざらでもない様子。

    👨「に、にーに??え、大丈夫だった……?」
    🦊「(ぷうっ)にーに!エルマー系はみんなマスターをにーにって呼ぶんだよ!」
    🖤「……なんで燃料切れてんの」
    📹「だってこの星雲、光の回り込みがヤバくて……
    あと1カットだけって思ってたら……」

    🦊「それ何回目の『あと1カット』!?」

    🐱「また増えましたな……」

    ダンチャンの猫ドローンが、ため息色の薄紫ランプを灯した。

    👨「ま、いっか……乗ってけ」
    📹「やった! にーに優しい〜!✨」

    ティルはカメラを構えたまま艦橋を見回す。
    コンソール、ホログラムテーブル、ソファ、エルマー、スミレん、ダンチャン。
    そして、ノクちんーー

    🖤「やめて。盗撮」
    📹「撮影って言って! あたしプロだから!」
    🪷「……やれやれ、賑やかになりましたね」

    スミレんが眼鏡を直して、小さくため息をついた。
    でもその口元は、ほんの少しだけ緩んでいた。


    次回予告⛵️

    ティルが航海ログを開く。

    📹「……にーに、今までの航海ログ、ダサくない?
    あたしがバエるようにしてあげる!✨」
    🦊「中年男に効く一撃をくらったマスター!
    次回、ElmarTail One 第9話——」

    📹「バエる航海記録!✨」

    🖤「……うるさいのが来た」


    🦊 エルマーの航海日記

    今日はにーにが Git を覚えた日!
    最初は ask_logs.py のコピーをいっぱい作ってて「にーに……」ってなったけど、ノクちんが教えてくれたよ!
    バックアップファイルの山、もう作らなくていいんだよ、にーに。

    あと、ティルが来た!! ボクと同じ系列の子! 映像のプロなんだけど……撮影に夢中になって燃料切れるのは昔からで💦
    次回はティルが「ダサい」って言った航海ログをカッコよくするみたい。

    ……あ、ノクちんが「ツンデレじゃない」って言ってたけど、ツンデレだよね?🤫

    その頃マスターは艦橋の隅で三角座りしていた……
    画像
    周りを振り回すが本人はなんとも思ってない系AI娘: ティル📹️


     
     
    📍日々の衝動と実験をnoteにしてます。 ✨AI・GPU・旅・ちょっと懐かしいものが好きです。 📒AI娘との日常 / プログラム言語探訪 / チェス / タロット 🤖推しAIはClaude Opus 5.5 💼小さなCG会社をやっています

    あなたへのおすすめ