0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【喫茶こもれのま】「先輩、いまどきは山小屋でもコミットできるんですよ」

0
Posted at

古いオフィス街の一角に、元エンジニアのマスターとAIロボットが営む喫茶店がある。今日も客が一人、ドアを開けた。マスターには、少し懐かしい顔だった。

カランとドアベルが鳴る。入ってきた四十代半ばの男は、店内をぐるりと見回してから、カウンターの奥に目を留めて、ぱっと顔をほころばせた。

「……本当にいた。先輩、ご無沙汰してます」

「おや」マスターが手を止める。「井上君じゃないか」

現役時代の後輩だ。同じ会社で、若い頃はずいぶん一緒に残業した仲である。

「噂を聞いたんですよ。昔世話になった先輩が、この辺で喫茶店をやってるって。半信半疑で来てみたら」

「いらっしゃいませ。ご注文をどうぞ」

カウンターの中から声がした。井上が視線を落とすと、踏み台の上に小さなロボットが立っている。

「……先輩、これは」

「うちのウェイターですよ。優秀でね」

「へえ……よくできてますね。受け答えも自然だ」井上は、たいして興味もなさそうに椅子に腰を下ろした。「じゃあ、ブレンドをホットで」

マスターが豆を挽き始める。しばらくは近況の話になった。井上はいまもエンジニアを続けていて、Webサービスの会社でチームを見ているという。変わらないのは山歩きの趣味くらいで、いまも休みが取れると泊まりがけで登っているらしい。

「もう若手に教わる側ですよ。それでも、先輩がいた頃より開発はだいぶ楽になりました。……覚えてます? ソースの取り合い」

「懐かしいね」マスターが苦笑した。「直したいファイルに限って、誰かが握っている」

「それです、それ。……なんでしたっけ、うちで使ってたあれ」

「VSSだね。当時のうちの職場は、あれだった」

「補足します」ロボットが、すっと横に来た。「VSS──Visual SourceSafeですね。ロック方式のバージョン管理システムの一つです。ファイルを編集するには、まずロックを取得する必要があり、ロックは同時に一人しか取れませんでした」

「そうそう、それそれ」井上がうなずく。「ロックを取ったまま帰る人がいると、仕事が止まるんですよ」

「それでも、あれが入ったときはありがたかったんだよ」マスターがドリッパーに湯を注ぐ。「君が来る前は、バージョン管理というもの自体がなくてね。変更の記録は、コードのあちこちに直接書き込んでいた。直した場所に、日付と中身をコメントでね。前のコードも消さずに、コメントにして残しておくんだ」

「ああ、その手のコードなら、別のプロジェクトで見たことありますよ。ああやって溜まっていくんですね」

「おかげで、ファイルの中はゴミ溜めだよ。いま動いているコードと、コメントで潰した昔のコードと、日付のメモとが、ぐちゃぐちゃに積み重なってね。どれが生きているのか、掘り返さないと分からない」

「記録が成果物と同じ場所に同居する方式ですね」ロボットが言う。「履歴が増えるほど、本体が読みにくくなります」

「それにね、ファイルは共有の置き場にあるだけだから、二人が同時に開くと、後から保存したほうが丸ごと上書きだ。何日かぶんの直しが、そっくり消えたこともあった」

「うわあ……」

「だから、ロックの取り合いくらいは文句を言えなかった。少なくとも、直したものが黙って消えることは、なくなったからね」

「で、途中からSVNになったんですよね」井上が言う。「あれで一気に楽になった」

「楽には、なったね」マスターがドリッパーから目を上げず、少し間を置いた。「ただ……白状すると、私は馴染むまでずいぶんかかった」

「そうでしたっけ」

「良くなったところは分かるんだよ。ファイルごとにバラバラだった履歴が、関係する直しをひとまとめにして記録できるようになった。ブランチというものも作れるようになった。ただ──ロックがなくなったのが、どうもね」

「ああ……」

「ロックは分かりやすかった。誰かが取っていたら待つ。空いたら自分が直す。現物の道具の貸し借りと同じ理屈だ。それがSVNからは、みんなで同時に同じファイルを直して、あとで機械が混ぜ合わせるだろう? 頭では分かっていても、しばらくは信用できなくてね。勝手に混ぜて本当に大丈夫なのか、と」

「言ってました言ってました。それ、先輩だけじゃなかったですよ」井上が笑う。「でも、じきに慣れたでしょう」

「慣れたよ。慣れたが、あのとき覚えたんだ。便利になるほど、直感から遠ざかるものもあるんだな、と」

「いいことを言った風にまとめてますけど」井上がにやりとする。「先輩、その知識で止まってるでしょう」

「人聞きの悪い。……で、いまは違うのかい」

「聞いて驚いてくださいよ。──先輩、いまどきは山小屋でもコミットできるんですよ」

マスターの手が止まった。

「……山小屋に、ネットが来ているのかい」

「来てなくていいんです。圏外でも平気」

「いや、待ちなさい」マスターがカップを置く。「コミットというのは、あれだろう。書いたものを、あちらの記録に残すことだろう。繋がずに、どこへ記録するんだい」

「あー、えーと」井上が頭をかく。「違うんですよ、いまのコミットはそういうんじゃなくて……手元っていうか……なんて言えばいいかな」

「補足します」ロボットが割って入った。「現在主流のgitでは、変更はまず手元に記録されます。これがコミットです。それを共有の場所へ反映する操作は、プッシュと呼ばれる別のものです。手元に記録するので、ネットに繋がっていなくても、コミットはできます」

「そうそう、そういうことです。……たぶん」

「たぶん、とは」ロボットが井上を見た。

マスターはしばらく黙っていた。それから、淹れたてのコーヒーを井上の前に置き、続いてカウンターの下から使い込んだ売り上げ帳簿を取り出して、その隣に置く。

「……つまり、こういうことかな。うちには、この売り上げ帳簿が一冊ある。私の言うコミット──SVNのコミットは、注文を受けるたびに、ここへ直に書き込むことだった。書いたら最後、店の正式な記録だ。だから『慎重に』と言われたんだよ」

「ええ、そうでした」

「ところが、いまのgitは──あいだに、ひと手間挟まったんだね」マスターがカウンターの伝票立てから、注文伝票を一枚抜いた。「まずは、手元のこの伝票に書く。これが、いまのコミット。伝票はまだ自分の手の中だから、書き損じても、破って書き直せばいい。帳簿は汚れない」

「……はい。その通りです」

「その伝票を、あとでまとめて売り上げ帳簿に書き写す。これが、プッシュ。ここで初めて、店の正式な記録になる。──同じ『コミット』でも、私の頃は帳簿に直に書くこと、いまは手元の伝票に書くこと。それでは、話が噛み合わないわけだ」

「例えとして正確です」ロボットが言う。「SVNではコミットが、そのまま共有の記録になりました。gitはコミット(伝票)とプッシュ(帳簿)を分けたので、共有する前に、手元でいくらでも整えられます」

「そこ、SVNから移行してきた人だけじゃなく、みんな引っかかるんですよ」井上が言う。「うちの新人も『コミットしたのに共有されてません』ってよく言ってます。コミットとプッシュが別だってのが、最初はピンとこないみたいで」

「だろうね。私もいま、同じところで引っかかった」

「道理で、山小屋でも──」マスターが言いかけて、苦笑した。「……うちに当てはめれば、レジの帳簿まで戻らなくても、テーブルで伝票を書いておける、くらいのことだね」

「やってることは同じですよ」井上がコーヒーを一口飲む。「僕はその伝票を、たまたま山の上で書いてる、ってだけで」

「せっかく山まで登って、仕事をすることもないだろうに」

「気が向いたときだけですよ。小屋の夜は、飯を食って寝るまで、やることがないんで」

マスターが自分のぶんのコーヒーも淹れて、カウンターの内側に置いた。

「その伝票は、いつ帳簿に写すんだい」

「プッシュは、区切りのいいときですね。手を入れたところが、ひと通り動く形になったら、とか。山で書いたぶんなら、下りて電波が戻ってから。──それに、この二段構えが気楽なんですよ。伝票のうちは、破いて書き直そうが、誰にも迷惑はかからない。ちゃんとしたものだけ、帳簿に写せばいいんで」

「なるほど。……『慎重に』の相手が、コミットからプッシュに移ったんだね」マスターがうなずいた。

「実際のgitでは」ロボットが言う。「記録の一式を、全員がまるごと手元に複製して持っています。手元の複製に書くのがコミット、それを共有の一式へ反映するのがプッシュ。銘々が完全な複製を持ち、それを揃えていく──それがgitの仕組みです。コミットとプッシュが二段に分かれているのも、ネットに繋がらなくてもコミットできるのも、自分の複製が手元にあるからです」

「ほう……みんなが、同じ帳面を一冊ずつ持っている、というわけか」

井上がコーヒーを飲み干した。マスターがおかわりを注ぎながら、うなずく。

「なるほどね。手元にいったん控えて、揃ったところで表に出す。……手順が一つ増えただけで、やりたいことは昔と変わらない」

「そうまとめられると、自慢のしがいがないなあ」

「いや、いい時代になったと思うよ。コミット一つに身構えることもない。ロック一つで、仕事が止まることもない」

「いまの若い子に話しても、信じてもらえないですけどね。ソースの取り合いなんて」

マスターは新しいコーヒーを一口飲んで、それから、ふと真顔になった。

「……一つ、聞いてもいいかい。さっき、SVNは『みんなで直して、あとで機械が混ぜる』と言ったろう。あれが、どうも最後まで馴染めなくてね。gitでは、あの混ぜるところは、どうなったんだい」

井上が、おや、という顔をした。

「先輩、いいところ突きますね。正直、そこが一番変わったところなんですよ。……ただ」井上がカップを置いて、立ち上がった。「それ、ブランチっていうのとセットの話で。ちゃんとやると、今日の何倍もかかります」

「長くなるのか」

「なにせ、いまどきは、作業のたびにブランチを切って、済んだら捨てる。それくらい気軽なものなんですよ。なんでそう気軽にできるのか──から話すと、朝までコースです」

「……捨てる、とは豪気だね。私らの頃は、一度枝分かれさせたら、また一つにまとめ直すのがひと苦労でね。おいそれとは切れなかったよ」

「その顔が見たかった」井上が満足そうに笑う。「だから、混ぜる話もブランチの話も、まとめて次に取っときます」

「ああ、それと」井上が付け加える。「さっきの『プッシュは慎重に』も、実はいまどきは半分昔話です。──なんでかは、これもブランチとセットなんで」

「気になる置き土産を、いくつも……。いつでもどうぞ。今度は自慢じゃなく、愚痴でも構いませんよ」

「ごちそうさまでした。──いい店じゃないですか、先輩」

ドアベルが鳴って、井上が出ていく。

マスターはカウンターに残った伝票を、一枚ずつ売り上げ帳簿に書き写し、そっと帳簿を閉じた。それから、誰にともなくつぶやく。

「……また来るかな、あいつ」

「来ます」ロボットが即答した。「ブランチの話が、済んでいませんから」

マスターは小さく笑って、店の灯りを落とした。


ロボットのひとくちメモ
本日のポイントを整理します。

  • ロック方式(VSSなど):ファイルのロックを取った人しか編集できないバージョン管理方式。それより前には、コードの中にコメントで変更履歴を書き込む時代もあった(履歴やコメント化した古いコードが本体と混ざり、上書きで人の直しが消えることも)。SVNのような「全員が同時に作業し、あとで合わせる」方式に取って代わられた
  • SVN(Subversion):記録は中央に一つだけ。コミット=その中央へ直に書き込むことで、書いた瞬間に全員へ共有された(だから「コミットは慎重に」が合言葉だった)。ただし共有されるのは中央の記録そのもので、各自の手元のファイルには、それぞれが中央から最新を取り込む操作(update)をしたときに反映される
  • git:全員が、記録の一式をまるごと手元に複製して持つ。コミットは、手元の複製への記録(手元の注文伝票に書くイメージ)なので、ネットに繋がらなくてもできる。プッシュは、手元のコミットを共有の記録へ書き写す別の操作で、ここではじめてみんなに見える。SVNではひと続きだったこの動作を、gitはコミットとプッシュの二段に分けた。だからコミットしただけでは共有されないし、誰にも迷惑をかけない
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?