Diary over Finite Fields

515ひかるの日記と雑文

文書のバージョン管理って重要だけどうまくやれている気がしない話

最近思うんだけど、Git/GitHub やその周辺ツール(GitHub Actions/CircleCI/Travis CI/Drone io etc..) に慣れすぎてなんでもかんでも Git で管理しようと自然に思っている気がする。

でも現実そんな何でもかんでも Git で管理すればいいというものでもなくて、それは例えばこういうブログ記事みたいなもの(たかだか数千文字しかないのに何を管理したり、何度も何度も推敲することがある?)とか、とりあえず書き始めた段階の小説とか、まだ形にもなっていないソフトウェアとかだ。

僕はバージョン管理好きだし、特に集団でひとつのファイルをいじるときには必須だと思っているけれど、とはいえ Git に苦手なことはいっぱいあるし、Git 自体そんなに簡単なものではないし(もう5年以上使っているけど未だに知らんかったーってよく言う)、GitHub 社とかをそこまで無条件に信頼していないし。当たり前のように Git を使えというプログラマはあまり信用できない。少なくとも Wiki ツールとかってバージョン管理は内包していても Git をインターフェースからは意識させないようにしているのはそれなりの合理性があるのだと思う。esa.io とか Confluence とか。

最近自分が文章を書くときは主に3つやり方がある。

  1. そのままエディタに書いて Git 管理しない。このブログみたいに数百文字〜3,000字程度までの記事を書いているときはほとんどこれ。管理も推敲もしないからバージョンを管理する必要がない。公開した後間違いに気づいたらそのまま公開版を直す。
  2. 長い文章、具体的には1万文字を超えるようなもの。1回書き終えたと思うまでバージョン管理はしない(手動で適宜バックアップは取る)。こういう文章は推敲が必要なので GitHub/GitLab あたりにプライベートリポジトリを作って管理
  3. ソフトウェアに関するドキュメントを書くとき、これはレビューをされたいので GitHub の PR などで過程も含め全て管理する

3.は特定の人が読む、自分以外も管理する文書なのでちょっと例外的だけど、1, 2 については自分しか関与しないから究極何をどうやってもいい。ぼくは 1. については Markdown を直に書き出してすぐさま公開する*1し、2. については完成するまでは Google Docs を使う。Google Docs はスマホからも編集できるから選定した。僕は布団で寝っ転がりながら文書を書くことがわりとあるため、長い文章を書くときはスマホが使えないのはかなりの痛手だ。長い文章が完成してからはいろいろなアウトプットがあって一概には言えない。どこにアップロードしたいか、PDFにしたいのかHTMLにしたいのかプレインテキストのままでいいのかなどいろいろなアウトプットがあるし。PDFやHTMLを作る場合は GitLab CI でビルド自動化をしてもいいかなとは思う。

要するに文書のバージョン管理をする必要がある = そこそこの規模の文書、ということ。その場で書いて書き捨てるようなシェル芸のコードを Gist や GitHub にいちいちアップしないように、小規模の文書であればそもそも版の管理なんてする必要がない。これは割と当たり前にすぎて誰もわざわざ言わない話。

そして次に、これはあくまで個人の感想だけど、大規模な文書であっても Git の差分が日本語の文章で役に立った経験がほとんどない。結局ひとつのコミットの適切な粒度がなにかがわからないし、うまくコミットできるほど人類は優れていないんじゃないか。いや僕が強烈にダメ人間という可能性はあるけれど。確かにかつて消しすぎたものをリストアしたとかそういう経験はある。だけどそれは Git とかバージョン管理とかいうよりバックアップだよな?

なんか当たり前にすぎることを言っている気がしてきた。とりあえず、Git を使う者は全てのファイルをバージョン管理したくなるんだ。知ってる、それは僕も経験した。でもそれはハンマーを持つと全てが釘に見えるとか、ありとあらゆる文書が Excek 方眼紙であるとかいう地獄とかと同じ道へと進んでいるんじゃないかということが言いたかった。

ところで、今月末で Bitbucket から Mercurial のリポジトリが消える。

bitbucket.org

バージョン管理という意味では Git 一強の時代がまだまだ続きそうな気配で、これからもますます Git を知ると全てを Git で管理する人が増えそうではあるが、しかし、個人的には Git/GitHub はあくまでもプログラマのためのツールであり一般人のためのツールではないと思う。

*1:Netlify を使ってデプロイしているサイトは、ブログ記事を GitHub に push していることが前提なので結局 Git 管理してしまっているけど、ぶっちゃけヒストリーを見たことほとんどない。