クリスマスキャロル (1)
そのコメントに気付いたのは、12 月11 日、終電近くのことだった。
//もう12 月で、今年の終わりが近付いてるのに、毎晩遅くまでキーボードを叩いてる。誰か教えてよ。これ何かの×ゲーム? もうすぐクリスマスだってのがよけい空しいんだけど......e.k
ぼくは疲労も忘れてニヤリと笑った。これはJava の1 行コメントの体裁をとった心の叫びそのものなんだろう。誰だか知らないが、考えることは同じだ。このプロジェクトに参加しているプログラマなら、多かれ少なかれ同じ思いを抱いているに違いない。
このコメントを書いたのは誰なんだろう。ぼくは冷たくなったカップから室温になったコーヒーをすすりながら考えた。一プログラマとして参加しているぼくに、プロジェクトの全体像などはわからない。わかっている――というか知らされている――ことは、どこかの官庁――省なのか庁なのかは知らされなかった――で、かなり古くから――いつからかも知らされていない――使用されているシステムの改修であることと、実装に携わるプログラマだけでも数百人、設計や要件定義、諸々の中間要員を含めると、数千人規模が携わっていて、動いているお金は億単位になるだろう、ということぐらいだ。
e.k というイニシャルのプログラマ――コメントの文体から察するに女性――に同志愛的な共感をいだいたものの、その意を相手に伝えるのはほぼ不可能だった。コロナ禍の最中に開始されたプロジェクトのため、ほとんどの実装やテストはリモートで行われているので、プログラマ同士が顔を合わせる機会はない。そもそも機密保持――ぼく自身、機密保持契約書や誓約書の類に印鑑を30 回以上押した――の都合上、他のプログラマの名前どころか、参加している会社名さえ知らされていないのだから。
とはいえ、そこは人間のやること。抜け道はある。それがソースコメントだった。大抵は次にソースを読み書きするプログラマへの伝達事項だ。「この下の行を消すとIOException が発生するから触るな」「TODO 不要だと確信できたら消してもいいよ」「このメソッド、どうして動いてるのか私にはわからない」といった類だ。中には「このクソコード書いたの誰」「例外キャッチしてないのは俺のせいじゃねえ。アホ課長の指示によるものだ」といった罵詈雑言から、「奇跡のコード」「額に入れてルーブル美術館の壁の一つに飾るに値する美しいロジック」などの賛歌もある。
そんなことを考えている間に、会社を出なければならない時刻になっていた。ぼくはソースを保存しようとしたが、ふと衝動に駆られて、さっきのコメントの下にカーソルを置いてキーを叩いた。
//同感。まさに、クリスマスなんてなければ、いつも通りの何にも変わらない夜なのに、だね
何年か前のドラマの主題歌になったJ-POP の一節だ。思い直して最後の「だね」を「ですね」に変え、m.h とイニシャルを付け加えてから保存した。リポジトリにプッシュすると、ぼくは急いで帰り支度をして会社を飛び出した。
何とか間に合った終電の窓から暗い夜空を眺めながら、ぼくはさっきのコメントをe.k なるプログラマが読むことはないだろう、と考えていた。20,000 行を超えるソースで、ぼくに課せられた担当範囲はまだ残っている。顔も名前も所属も知らないアサイン担当者が、途中なのに他のプログラマに振り分けすることはあり得ない。たとえ担当範囲を完了したとしても、e.k が再び担当することは、もっとあり得ないだろう。それでもぼくは、自分のささやかな反抗に満足して、e.k の幸運を祈った。
◇ ◇ ◇ ◇ ◇
翌朝、短くも深い睡眠で多少なりとも理性を取り戻したぼくは、いつもより早く出社し、PC が起動するのを待っていた。昨日、衝動的にあんなコメントを記述したことに対する後悔の念が脳裏を占有していたのだ。
プッシュしたソースはいくつもの元請け―下請けのピラミッドを上方向に流れていく。スケジュールとステップ数だけを重視する中間のシステムエンジニアが、個々のソースに目を通す可能性は低かったが、万が一の気まぐれで、あのコメントが誰かの目に留まったら? 苦情か叱責か、とにかくうちの会社の営業が青くなるようなメールが、下方向に送られてくることだろう。その手の文言は、下方向に落ちていくにつれて、まるで伝言ゲームのように無駄な文章が追加されていくに決まっている。
ぼくは急いでリポジトリを参照した。幸い、昨夜プッシュしたソースは、誰からも参照されていないようだ。ぼくはソースを開き、m.h で検索をかけた。該当部分が開いたので削除しようとマウスを動かし......手を止めた。
//あら素敵な言葉ね。何かの引用? まあどうでもいいか。同じ思いでいるのが私だけじゃないってことがわかっただけでうれしい。今夜のビールはm.h さんの健康を祈って乾杯させてもらうわね。e.k
ぼくが書き込んだコメントの下に、1 行の空白を挟んで記述されていた。
しばらくの間、ぼくの口はポカンと開いたままだった。昨日の夜――正確には日付が変わっていたので今日だが――、このコメントがなかったのは神に誓ってもいい。あったら気付かなかったはずはない。もちろん長時間のコーディングで、目も頭も疲れ切っていて見逃したという可能性もあるにはあるが......いや、そんなはずはない。いくらなんでも、自分がそんなことも気付かないほどの精神状態にあったとは考えにくい。何より「あら素敵な言葉ね」という書き出しは、明らかにぼくのコメントに対するアンサーになっている。
「どういうことだ......」
ぼくは呟くと、コメントの削除を中断して、PC をロックした。社内は静まりかえっている。誰かが出てくるまで、まだ1 時間はあるだろう。混乱した頭を整理しようと開発室を出て、コーヒーメーカーに向かうと、コーヒーの準備をした。
素敵な言葉ね。
誰かの悪戯、というのが一番現実的な線だろう。プログラマではなく、リポジトリの管理権限を持っている誰かだ。ぼくより遅い時間まで仕事をしていた誰かが、たまたまソースを参照して、コメントを発見した。ふざけていないで仕事しろ、と文句を言うのではなく、奇妙なユーモア精神から、あのコメントを追記した。わざわざ最終更新日時やユーザを変えないような操作と共に。
いや、ありえない。ぼくは首を横に振って、その考えを退けた。これまでの例から言って、うちの上位のリポジトリアドミニストレータが、そのようなユーモアを解するとは思えない。むしろ、嬉々として責め立ててくることだろう。プログラマ層が品質と作業量のストレスにさらされているように、アドミニストレータは納期など別種のストレスにさらされているのだ。鬱憤をぶつける機会を逃すなどあり得ない。
もう一つ、思いついた可能性は、さらに恐ろしいものだった。
ぼく自身があれを記述し、さらにそれを忘れているとしたら......
自分がそこまで追い込まれているとは思えない。いや、思いたくはない。だが、正気と狂気の狭間を行き来しているような状態の人間が、正確な自己評価をできるはずがないのかもしれないではないか。
ぼくはコーヒーの香りにも気付かず、その場に立ち尽くしていた。頭の中を様々な考えが渦巻いている。もし、横から声をかけられなかったら、いつまでもそうしていたかもしれない。
「お、細川、早いな」
夢から叩き起こされたように飛び上がったぼくは、怪訝そうな顔を向けている藏見に気付いた。去年、中途採用されたプログラマで、ぼくと同年代の男だ。一カ月とか三カ月の短いスパンで、いろんなクライアント企業の常駐していることが多いが、今月は社内で開発している。
「なんだよ」藏見は笑った。「寝ぼけてるのか。お、コーヒーできてるじゃんか。もらうよ」
大きなマグカップにコーヒーを注ぎ、スティックシュガー2 本を投入した藏見に、ぼくは問いかけようとして止めた。何を訊けばいい? 自分の記述したコメントに対して、まるで誰かが返事をしたかのようなコメントが、同じソースに追記されていたんだが、どういうことだろうな、とか? 同情に満ちた目を向けて「お前、疲れてるんだよ」と言ってくれれば御の字だ。悪くすれば、ぼくの精神状態に疑問符を付けるかもしれない。ぼく自身がそうしたように。
「どうだ、そっちの仕事は」生クリームを追加投入し、決まり通り50 円のチケットを缶に入れた藏見は、ぼくの葛藤に気付くことなく訊いてきた。「かなり難易度高めだって聞いたけど」
「ああ、まあね」ぼくも本来の目的を思い出して、自分のカップにポットからコーヒーを注いだ。「毎日、終電コースだ」
「昔のシステムの改修だっけ?」
「そう」ぼくはため息をついた。「そのせいで下らん縛りが多すぎる」
ぼくを含めて、このプロジェクトのプログラマたちの苦労は、その縛りのせいで2、3 割は増加しているに違いない。JDK バージョン15 だが、コーディングルールはJDK1.4 時代のものが使われている。そのためラムダ式やstream() は使用禁止だ。その他、三項演算子が使用禁止だったり、Apache Commons などのオープンソースライブラリは使用に厳しい制限――使用申請して認められれば使用できるが、申請から許可までに数ヶ月かかることが多く、実質的には使用不可のようなものだ――がある。
「いっそ作り直せばいいのにな」藏見が気軽に言った。
「いろいろ事情というかしがらみがあって、そうはいかんみたいだ」
プロジェクトの話を聞いたとき、ぼくも先輩プログラマの東海林さんに同じ愚痴をこぼしたことがある。東海林さんは苦笑しながら「ソフトウェアは作り手の想像以上に長く使われることがある。俺たちはそれを想定してコーディングすべきだ。たとえ仕様書に書いてなくてもな」と答えた。業界の全員がそれを理解していたら、2000 年問題のバカげた騒ぎは起こらなかったのにな、と付け加えたものだ。
しばらく無駄話をしている間に、ポツポツと出社してくる社員も増えてきた。ぼくは話を切り上げて、このプロジェクト用に仕切られた開発室に戻った。PC の画面ロックを解除する。エディタ上には例のソースが開かれたままになっていた。
コメントも残ったままだった。
素敵な言葉ね。
ぼくはスクロールキーを何度か叩いて、コメントが見えない位置までソースを移動させた。そして、昨日の作業の続きに取りかかった。
気が付くと、昨日と同じような時間になっていた。ぼくは伸びをして凝り固まった肩を弛緩させると、ソースをスクロールした。もちろんコメントは変化していない。ぼくはしばらくモニタを見つめた後、キーを叩いた。
//誰だか知らないけど、つまらないイタズラなら、これっきりにしてもらいたい。ちょっとふざけて書いただけなのに。わざわざ手間かけて更新時間まで操作する意味がわからんよ。
少し考えた後、ぼくは改行した。
//イタズラじゃないというなら、どうやったかぜひ教えてほしいね。m.h
ソースを保存してプッシュすると、ぼくはPC をシャットダウンして、逃げるように会社を後にした。
◇ ◇ ◇ ◇ ◇
翌朝、ソースを開いたぼくは、コメントが追記されているのを見ても驚かなかった。今度はブロックコメントだ。
/*
m.h さん、ちょっと混乱してるんだけど。イタズラって何のこと? あたしが何をしたって? 更新時間の操作って何?
言っておくけど最初にイタズラしたのは、そっちだと思うわよ。あたしの愚痴コメントの後にわざわざ、↑x5 なコメント書いたんだから。でも、あたしは怒ったりしてない。仲間がいるんだな、って思っただけ。うれしいとも思った。
でも、m.h さんが、もうやめろと言うなら止めにする。さようなら。e.k
p.s. あの日はホントにm.h さんの健康を祈ってビールを開けたのよ!
*/
もし誰かが見ていたら不安に感じるほど長い時間、ぼくはモニタを注視し、コメントを何度も読んだ。そして、次の行に書き込んだ。
/*
e.k さん、すみません。何がどうなっているのかわからなかったから、イタズラと書いてしまいました。本当に何がなんだかわからないんだ。
ぼくはあなたのコメントを見つけて、ちょっとふざけてコメントを追記した。そして保存してプッシュした。次の朝、同じソースを開いてみたら、「素敵な言葉ね」というあなたのコメントが追記されていることを発見した。ぼくがコメントを書いてから次の朝までに、ソースを誰かが触った形跡はなかった。今日も同じ。
ポルナレフ風に言うなら、ありのままに起こったことを話すぜ、というやつです。
m.h
*/
ぼくはソースを保存すると、一度、エディタを閉じた。声に出さずに10 数えると、再びソースを開く。m.h で検索すると、さっき書き込んだばかりのコメント箇所に行き着いた。
追記されているコメントはない。
リポジトリにプッシュしていないからか。そう考えて、ソースを閉じると、リポジトリエディタからプッシュを実行した。ローカルのヒストリーにプッシュ履歴が反映されたことを確認して、もう一度、ソースを開く。
やはり追記はされていなかった。
これで何らかの理由をつけて――たとえばぼくが自分で無意識に記述した説を採用するとかして――この現象をきれいさっぱり頭から消し去る、という選択もできた。だが、すでにぼくはこの一連の事象に興味を持ってしまっていた。別の言い方をするなら、溢れる好奇心が恐れとか気味悪さを払拭してしまったのだ。
これまでは、夜、日付が変わってからコメントを追記して、プッシュしていた。それがこの事象が発生する条件なんだろうか。確かめる方法は一つしかない。
ぼくは一度、頭を仕事に切り替えた。深夜0 時を過ぎるまで待たなければならない。幸い、仕事は山積していた。
◇ ◇ ◇ ◇ ◇
次の朝、e.k からの新しいコメントが追記されていた。ぼくは自分の予想が当たったことに満足感を憶えた。
この事象は一日に一回しか発生しない。
/*
え、どういうこと?
ごめん、あたしも混乱しているみたい。
ポルナレフって昔のマンガの登場人物じゃなかった? ま、それはいいんだけど、あたしがやったのも、m.h さんと同じなのよ。コメントを書いて、次の日に見たら、m.h さんのコメントが下に書いてあったのよ。
ちょっと違うのは、あたしは「プッシュ」ってのをやってないってこと。そもそもプッシュって何?
e.k
p.s. こういうこと言っていいのかわからないんだけど、何だか楽しくなってきちゃってるあたしがいる。m.h さんはどう?
*/
ぼくも楽しくなってきてるよ、e.k さん。
/*
ぼくの方でわかっているのは、このやり取りは、一日一回しかできないってことぐらいです。
そっちはソース管理の方法が違うのかな? プッシュというのは、リモートリポジトリにローカルのファイルをアップロードすることです。
確かに楽しくなってきてます。これってプログラマの性かな。
m.h
*/
/*
提案なんだけど、敬語やめない?
(って、あたしの方はそもそも敬語使ってないけどね)
同じ仕事してるわけだしね。仲間で友だちじゃん。
うちはそういうソース管理はやってないなあ。
単にサーバに保存するだけ。
e.k
*/
その日から、e.k さんとソースを介した通信をやり取りするのが日課となった。
/*
そうなんだ。まあ、会社によってやり方が違うのは当然かもね。
あ、さっそく敬語やめにしたよ。
e.k さんの年齢聞くのはルール違反? ちなみにぼくは37 才。
m.h
*/
/*
もちろんルール違反......って言いたいところだけど、まあ、いまどきそんなこと気にするのもおかしいよね。
あたしは28 才。ちなみに独身。
e.k
*/
/*
こっちは結婚してるよ。
m.h
*/
/*
そっか、残念。こういう出会いもあっていいかと思ったんだけどね。
って、冗談。一応、彼氏いるし。
e.k
*/
ぼくたちは、どちらも相手の会社や本名を訊こうとはしなかった。一つには例の機密保持契約にあからさまに違反することになるためだが、別の懸念もあった。この不思議な通信が成立するためには、何らかの条件があることが明白だったからだ。一日一回のみ、というルールの他にも、それはあるかもしれない。たとえば、お互い、相手の素性が不明確である、とか。ぼくは、あえてそれを試そうとは思わなかったし、e.k さんも同様だった。
/*
あー、本当にもうすぐクリスマスじゃん。
どうせ仕事で終わるのかと思うといやになるなあ。
3 連休なのにね。
e.k
*/
そのコメントを読んだ日、ぼくは笑いながら返事を書いた。
/*
確かにぼくもクリスマスも仕事になりそうだよ。大晦日と正月はかろうじて休みを確保したけどね。
でも、e.k さん、ちょっとカレンダー間違ってない?
今年は25 日は月曜日だから、三連休じゃないよ。
m.h
*/
/*
何言ってるの?
25 日は火曜日じゃん。
あたしが言ってる連休ってのは、22(土) ~ 24(月) のこと。
普通、クリスマスっていったらイブの方が盛り上がるじゃん。
e.k
*/
/*
なんか話が食い違ってるような気がする。
一応訊くけど、何年の話をしてる?
m.h
*/
返って来た答えは驚くべきものだった。
/*
もちろん24 年だけど? そっちは何年の話なのよ?
e.k
*/
ぼくはモニタを穴が空くほど見つめた。
24 年? 一体、何の話を......
次の瞬間、ぼくは雷に打たれたような衝撃を受けた。急いでブラウザを開き、目的のサイトにアクセスする。
平成24 年。西暦2012 年。12 月22 日から23 日は確かに連休だ。このプロジェクトでは、日付は和暦で表示することになっている。e.k さんはその慣習で24 年と答えた。
ソフトウェアは作り手の想像以上に長く使われることがある。
(続)
コメント
匿名
新作キタ━━━━(゚∀゚)━━━━!!
SQL
細川って20代後半くらいだと思ってたよ
匿名
”愛の手紙”か”大正ロマンス”系のお話ぽい。期待。
2012は目立った災害はなかったので安心して読めそう。
匿名
”愛の手紙”か”大正ロマンス”系のお話ぽい。期待。
2012は目立った災害はなかったので安心して読めそう。
匿名
タイトルからすると未来からもやってくるのか。例年の事件に絡まるのか。
匿名
お帰りなさい。凄く心待ちにしてました!!
しばらくの間月曜日が楽しみになります。
匿名
2012だとgitは使ってなかったな。SVN一択だったからpushは確かに判らないかも
匿名
タイトルからすると未来からもやってくるのか。例年の事件に絡まるのか。
匿名
今風にいうと「君の名は。」でしょ
愛の手紙ってそれ自体がタイムマシンじみてて笑ってしまった。
匿名
/*
そっか、残念。こういう出会いもあっていいかと思ったんだけどね。
って、冗談。一応、彼氏いるし。
m.h
*/
ここは、「e.k」ですかね?
リーベルG
匿名さん、ご指摘ありがとうございます。
e.k でした。
匿名
人形つかいから12年、魔女の刻からも6年って考えると細川くん37歳も確かにそれくらいか感があるな
SQL
確かにリアルタイムで年齢重ねるなら妥当な年齢かもしれないですね!
東海林さん定年間近かな
それとも生涯現役かな
匿名
あかんティンダロスの猟犬案件か
ななし~
> 仲には「このクソコード書いたの誰」
"中"ですね。
ソース管理、その頃はCVSだったかなぁ...
リーベルG
ななし~さん、ありがとうございます。
「中」でした。