5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

git は「保管庫」として使え——非エンジニアのための git 活用術

5
Posted at

はじめに

プログラマーにとって git は「変更履歴を管理するツール」です。でも私は違う使い方をしています。

ただの保管庫として使っています。

私は82歳の俳句作家です。プログラミングの専門知識はありません。でも Emacs が好きで、自分のサイト管理や設定ファイルの管理に長年 Linux を使ってきました。

そんな私が長年悩まされてきたのが世代バックアップの問題です。

.muttrc
.muttrc.bak
.muttrc.bak2
.muttrc.20260101
.muttrc.old

「念のため消さずにとっておいたファイル」が気づけばどこにでも散らばっている。どれが何の版なのかもわからない。そんな .bak ファイルの山に悩まされてきました。

ある日気づきました。git はこの問題を完全に解決できる、と。


プロセスはどうでもいい

プログラマーにとって git のコミットメッセージは重要です。「なぜこの変更をしたか」を記録するのが目的だからです。

でも私の目的は違います。あの頃のファイルが取り出せればいい。 それだけです。

だからコミットメッセージは auto で十分。git commit -m "auto" を cron で毎晩自動実行すれば、それだけで完璧な保管庫ができあがります。

# crontab: 毎晩23時に自動コミット
0 23 * * * cd ~/dotfiles && git add -A && git commit -m "auto"

git commit は「今日の状態を瓶に詰めて棚に並べる」作業。棚にはいつでも過去の瓶が並んでいる。必要なときに取り出せばいい。それだけです。


取り出しが面倒という問題

git を保管庫として使うアイデアはシンプルですが、一つ問題がありました。過去のファイルを取り出すコマンドが面倒なのです。

git log --oneline          # どのコミット?
git show abc1234:.muttrc > /tmp/.muttrc.old  # コマンド長い…

これを毎回調べてやるのは億劫です。せっかくの保管庫も、取り出しが面倒では使えません。

そこで Emacs の ivy を使って、数ステップで完結するコマンド git-peek を作りました。(Claude と一緒に)


自動化の仕組み

「保管庫」として機能させるには、毎晩自動でコミット&プッシュする仕組みが必要です。

Dropbox/makefile の git-push ターゲット

各リポジトリに git ターゲットを持つ Makefile を置き、~/Dropbox/makefile からまとめて呼び出します。

## 各リポジトリの日次 auto-commit + push
git-push:
    $(MAKE) -C ${HOME}/Dropbox/GH git
    $(MAKE) -C ${HOME}/Dropbox/minorugh.com git

各リポジトリの git ターゲットはこんな形です:

git:
    git add -A
    git commit -m "auto: $(shell date '+%Y-%m-%d %H:%M:%S')" || echo "No changes"
    git push

cron で毎晩自動実行

autobackup.sh を cron に登録して毎晩23時50分に自動実行します。

# crontab
50 23 * * * /usr/local/bin/autobackup.sh >> /tmp/cron.log 2>&1

autobackup.sh~/Dropbox/makefile の各ターゲットを順番に呼び出すラッパーです。git のコミット&プッシュはその中の一工程に過ぎません。寝ている間に自動で「瓶詰め」が完了している、という仕組みです。

push 先は GitHub と Xserver に同時送信

.git/configpushurl を2つ設定することで、GitHub と自前サーバー(Xserver)に同時にプッシュしています。これでバックアップの二重化も実現しています。

[remote "origin"]
    url = git@github.com:minorugh/dotfiles.git
    pushurl = git@github.com:minorugh/dotfiles.git
    pushurl = ssh://minorugh@sv13268.xserver.jp:10022/home/minorugh/git/dotfiles.git

git-peek の使い方

スクリーンショット

git-peek

左サイドバーにコミット一覧、右にリアルタイムプレビュー。先頭行(背景色付き)に選択中のファイル名が表示されます。

ソースコードは GitHub で公開しています:https://github.com/minorugh/git-peek

操作の流れ

  1. git リポジトリ配下のバッファで M-x git-peek
  2. 現在のバッファが git 管理下のファイルであれば ivy をスキップして直接コミット一覧へ(dired からの起動など一致しない場合は ivy でファイルを選択)
  3. 画面が左右に分割され、左サイドバーにコミット一覧、右にプレビューが表示される
  4. カーソル移動に連動して右側のプレビューがリアルタイム更新される
  5. RET でプレビューバッファにフォーカス移動し、下まで自由にスクロールして内容を精読
  6. 「これだ」と確信したら s で保存
  7. ~/Dropbox/backup/tmp/YYYYMMDD_ファイル名 に保存され、dired で保存先が開く

削除済みファイルは M-x git-peek-deleted で同様に操作できます。

コミット選択画面でのキー操作

サイドバー(git-peek-commits

キー 動作
/ SPC 次のコミットへ移動+プレビュー更新
/ b 前のコミットへ移動+プレビュー更新
RET プレビューバッファへフォーカス移動
s 選択したバージョンを保存
C-d 全文表示 ↔ diff 表示をトグル
? キーガイドをミニバッファに表示
q / C-g キャンセル(元のウィンドウに戻る)

プレビュー(git-peek-preview

キー 動作
RET / f サイドバーへフォーカス復帰
s 選択したバージョンを保存
? キーガイドをミニバッファに表示
q / C-g キャンセル(元のウィンドウに戻る)
その他 通常のスクロール操作(自由)

C-d を押すたびに全文表示と diff 表示が切り替わります。全文表示のときはそのファイルのメジャーモード(例: emacs-lisp-mode)が、diff 表示のときは diff-mode が自動で適用されます。

プレビューウィンドウについて

コミット一覧でカーソルを動かすたびに、右側のプレビューウィンドウが自動更新されます。

RET でプレビューバッファにフォーカスを移動すると、自由にスクロール・検索ができます。
このときモードラインの色が変わり、現在位置を視覚的に確認できます。
RET または f でサイドバーに戻り、次のコミットの選択を続けられます。

プレビューバッファは buffer-read-only で保護されているため、うっかり編集してしまう心配はありません。


まとめ

git は非エンジニアこそ使うべきツールだと思っています。

  • .bak ファイルの山とおさらばできる
  • 自動コミットで手間いらず
  • 今開いているファイルなら ivy をスキップして即コミット一覧へ——起動が一瞬
  • ivy でファイルを選ぶだけでコミット一覧が開く(現在のバッファが自動プリセット)
  • カーソル移動に連動したリアルタイムプレビューで、目当ての版を素早く確認できる
  • RET でプレビューに移動して下まで精読、s で保存
  • サイドバー先頭行に選択ファイル名を表示——今どのファイルを見ているか一目瞭然
  • プレビューにフォーカスがあるとモードラインの色が変わる——今どこにいるか一目瞭然
  • ? でキーガイドをミニバッファに表示
  • C-d で全文表示 ↔ diff 表示をその場でトグル
  • 削除済みファイルの過去バージョンも取り出せるgit-peek-deleted
  • q で元のウィンドウ配置にそのまま戻る

「プロセスを管理するツール」ではなく「過去を保管する棚」として git を使う——この発想の転換が、非エンジニアにとっての git の正しい使い方ではないでしょうか。

Emacs ユーザーでなくても、git loggit show を覚えるだけで同じことができます。ぜひ試してみてください。


コードと記事は Claude と一緒に作りました。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?