NGW開発BLOG
← 記事一覧へ
·#059

ひとり開発でも、GitHubおいぼれになって、やっと腑に落ちた

リポジトリという言葉すら怪しく、commit・push・pull は呪文だった。バックアップのつもりで長年GitHubを使い、開発はいつも同じ一台。二台目を持ち歩きたくなって、ようやく同期の意味が腑に落ちた話。

少し、コーヒーブレイクの話をしよう。

白状すると、つい先日まで「リポジトリ」という言葉すら、よく分かっていなかったのである。

commitpushpull。画面のボタンには出てくる。それが何をしているのかはずっと霧の向こうで、押せば何か起きる呪文のようなものだった。むにゃむにゃと唱えると、たぶん保存される。そういう扱いである。

この年になって、やっとその霧が晴れた。晴れてみれば実にあっけない話で、そのあっけなさも含めて書き留めておきたい。

バックアップのつもりで押していた

GitHub 自体は、ずっと前から使ってはいた。理解して使っていたわけではない。消えたら困るから、どこかに置いておこう。 早い話がバックアップである。作業がひと区切りついたら、よく分からないままボタンを押す。エラーが出なければ、たぶん保存された。押した。よし。以上。そういう付き合い方だ。

それで困らなかったのには理由がある。開発はいつも同じ一台(MacStudio M1 Max・2022)でやっていたからだ。書くのも、直すのも、動かすのも、全部この机の上。GitHub はただの念のためのコピー先で、そこから何かを取り戻す必要が一度もなかった。送る一方(push)で用が足りていたのである。

だから pull の出番がない。出番がないから意味も知らない。知らなくても回る。ひとりで、一台で閉じている限り、人間はいつまでも学ばないのだ。

二台目が現れた日

風向きが変わったのは、まったく技術的でない理由からだった。

ときどき、遠くまで出かけてプレゼンをする。勤め先に命じられた出張ではない。NGW の営業である。自分たちで作った行政システムを、役所の方々に見てもらいに行く。遠方だと日帰りは難しく、ホテルに一泊して帰る。

そして、ホテルの夜は驚くほど暇なのだ。

テレビをつけると知らない土地の知らない祭りをやっている。それを十分ばかり眺めて消す。風呂は熱いかぬるいかのどちらかで、中間がない。窓の外は暗い。まだ九時である。せっかくだからブログでも書こうか、という気になるのは、ごく自然ななりゆきだった。

営業にはノートパソコン(MacBook Air M2・2022)を必ず持って行く。その場でデモ画面を動かして説明するためだ。常に最新の状態を映せるようにしてある、いわば営業用のデモ機である。ならば、と考えた。この MacBook で、移動中やホテルで記事も書けばいい。 書いたものは、帰ってきたら机の MacStudio で続きを見る。同じ記事を、二台の機械で行き来させたい。

ここで私は、ようやく壁にぶつかったのである。

片方で書いたものを、もう片方でどうやって受け取るのか。コピーして持ち歩くのか。USB か。……いや待て、それこそ GitHub の出番ではないか。二十年以上コンピュータで飯を食っておいて、この気づきである。遅い。

これは、CMSを使わない代償だ

考えてみれば、この悩みは CMS を使っていれば起きなかった。WordPress のような CMS なら、ブラウザで管理画面にログインするだけ。記事はサーバの向こうに一箇所だけあって、どの机から書いても同じそこが更新される。持ち歩くファイルなど、どこにもない。

このブログは、あえて CMS を使わない静的な作りを選んだ。その身軽さと引き換えに、記事はファイルとして手元の機械に宿る。だから二台目が現れた途端、二つを揃える段取り——同期——が要る。これは確かに、CMS を使わないことの代償である。

もっとも、その代償を埋める道具が、ほかならぬ GitHub だった。CMS の代わりに Git が真ん中に立つ。手放したはずの「どこからでも書ける」を、ずいぶん遠回りして取り戻したことになる。人は自分で捨てたものを、あとから別の名前で拾いに行く。

必要になって、やっと言葉が意味を持った

二台目が現れた瞬間、GitHub の役割が私の中で書き換わった。バックアップの置き場所から、二台をつなぐ真ん中へ。

そして、あれほど呪文だった三つの言葉が、急に意味を持ちはじめたのである。

  • commit(コミット) — 「ここまで」と区切って記録する。日記に日付を打つようなもの。
  • push(プッシュ) — その記録を、真ん中の GitHub へ送る
  • pull(プル) — 真ん中の GitHub から、最新を受け取る

流れにするとこうだ。

MacBook(ホテル)  ──push──▶  GitHub  ──pull──▶  MacStudio(机)

ホテルで書いて commit して push。帰宅して机で pull。それだけで、昨夜の続きがそこにある。

……たったこれだけのことなのだ。この三行を理解するのに何年かかったのか、考えると少々くらくらする。長年ボタンの上を素通りしていた言葉たちは、使う理由ができて初めてするりと腑に落ちた。知識が先にあって理解したのではない。やりたいことが先にあって、道具の名前が後から意味を持った。順番はいつもそうなのである。

痛い目を見ないためのコツも覚えた。編集を始める前に、まず pull 両方の机で別々に書き足すと、あとで話が食い違う。触る前に受け取る、終えたら送る。この順番さえ守れば、ひとりの二台はきれいに揃う。

コマンドは暗記、ボタンは目の前

正直に打ち明けるが、私はターミナルが得意ではない。おいぼれプログラマなりに少しは使える。だがその「少し」もコピペが主役である。どこかで見つけたコマンドを貼り付けて、Enter。画面にテキストがすらすら流れていく、あのカッコいい使い方は、いまだに敷居が高い。あれは映画の中の人がやることだと思っている節すらある。

ターミナルの難しさは、突き詰めると覚えていないと何も始まらないところにある。画面はいつも空っぽで、こちらが何をできるのかを教えてはくれない。真っ黒である。知っているコマンドだけが動く世界だ。

その点、エディタ(VSCode)のボタンはありがたい。更新、コミット、同期。できることが目の前に並んでいて、暗記していなくても手が出せる。押せば、さっきの pullpush が裏でちゃんと走る。覚えていないと入れない部屋の扉に、案内板が付いているようなものだ。

仕組みはどちらも同じ Git である。ならば敷居の低いほうから入ればいい。というわけで私は、なんの気兼ねもなくボタンを押す。押す。

ひとり開発でも、GitHub

チーム開発の道具だと思って、どこか自分には関係ないと構えていた。違ったのである。ひとりでも、二台目が現れた瞬間に GitHub は効いてくる。 バックアップとしてだけ使っていたものが、場所を越えて自分自身と作業を受け渡す仕組みに変わる。

出張のホテルで書いた数百文字が、翌日には自宅の画面に当たり前のように載っている。このささやかな地続き感が、思いのほか気持ちいいのだ。前の晩の自分が置いていったものを、翌朝の自分が拾う。ちょっとした文通である。

AIとの協働作業での学び

面白かったのは、言葉を完全に理解してから始めたのではないことだ。「出張に MacBook を持って行って、ホテルでブログを書いて、帰って机で続きを見たい」。やりたいことをそのまま言葉にしたら、リポジトリの共有も同期の段取りも AI と一緒に整っていった。手を動かしながら、commitpushpull の意味が後から追いついてきた。

もうひとつ。あれこれ覚えなくていい、覚えるのはたったひとつのアクションでいい、と AI が言うのである。

「必ずプルしてね」

これだけは守る。机に向かうときも、ホテルで開くときも、書き始める前にまず pull。あとの commitpush も、やりたいことに押されて自然と手が動く。だが触る前に受け取る、この一手だけは意識していないと抜ける。壁に貼っておきたいくらいだ。

学びは、たぶんこうである。分からない用語の前で立ち止まらなくていい。 やりたいことを具体的に口にすれば、道具のほうが寄ってくる。理解は、必要になった順番に、後からちゃんとついてくる。

……それにしてもだ。二十年以上プログラムを書いてきた男が、この年になって pull の意味に膝を打っている。しかもきっかけが「ホテルの夜が暇だから」である。ずいぶん立派な学びのように書いてきたが、要するに暇だったのだ。技術の習得というのは、案外こういう情けない動機からしか始まらないのかもしれない。