Consulting Work ブログ 連絡先
← ブログに戻る

たった一つの指示が、間違った26の言語を消し去った

たった一つの指示が、間違った26の言語を消し去った

自分のサイトの自動化に、ブログを4言語まで絞り込むよう指示した。2日後、それがホームページからも26言語をひっそり削除していたことに気づいた。私自身も、訪問者の誰一人として気づいていなかった。

TL;DR

  • ブログ向けのはずの指示が、サイト全体に適用されてしまった。
  • ホームページ、CVページ、ナビゲーションの文字列から、30言語中26言語が消えた。
  • 何もエラーにならず、404にもならなかったため、2日間誰も気づかなかった。
  • 修正の手がかりになったのは記憶ではなく、gitの履歴だった。
  • 本当の教訓はこれだ。自動化された変更を実行する前に、それが触れる正確なファイルを名指しし、削除される前にそのリストを読むこと。

そもそもなぜ言語を減らしたかったのか

自分のサイトは、ここ数ヶ月で30言語にまで膨れ上がっていた。ホームページ、CVページ、そしてほぼ数日おきに更新しているブログだ。この危うさについては以前にも書いた。機械翻訳は、一見自然に見えるくらい流暢で、しかも自分では確認できない言語で恥をかくくらいには不正確だ。ホームページとCVはほとんど更新しないので、そのリスクとは付き合っていけた。ブログは事情が違う。新しい記事は頻繁に公開されるし、公開したその日にエストニア語の訳が正しいかどうかなど、正直なところ保証のしようがない。

そこで、ブログの翻訳対象言語を、自分で内容をある程度チェックできる4言語、英語・ロシア語・ドイツ語・チェコ語まで絞り込むことにした。それ以外の言語は、もっと確実に検証できる方法が見つかるまでブログには載せない。ここまでの方針自体は間違っていなかった。問題は、それをどう指示したかだった。

たった一文、間違ったスコープ

指示は一つだけ出した。「ブログを4言語のままにしておく」。短く具体的なつもりだった。ところが実際に実行されたのは、まったく別の3つの変更だった。ブログ自身のコンテンツフォルダを望みどおり4言語に絞り込むところまでは正しかった。だがそれと同時に、サイト全体でどの言語が存在するかを定めるマスター言語リスト、つまり設定ファイルまで書き換え、残り26言語分のホームページのコンテンツとナビゲーションの文字列を削除してしまった。

問題は、「ブログ」と「サイト全体の言語リスト」が同じ設定ファイルの中に同居していたことにある。そのファイルには、ブログが対応する言語とサイトが対応する言語を区別する仕組みが何もない。そのリストから言語を一つ削れば、そこを参照しているすべてのセクション、ホームページも含めて、一瞬でその言語を失う。私の指示はセクションを一つ名指ししたつもりだったが、実際に走った変更のスコープはサイト全体だった。

ここからが、単なる間違いでは済まない、危険だった部分だ。何も派手には壊れなかった。エラーも出ず、404にもならず、ビルドも失敗しなかった。サイトはただ静かに、26言語分のホームページとCVページの生成をやめ、言語切り替えメニューからもその選択肢を外しただけだった。以前ポルトガル語でサイトを読んでいた訪問者は、何も表示されないまま黙って英語版に着地することになる。「削除されて存在しない」状態は「最初から存在しなかった」状態とまったく見分けがつかず、どちらもエラーを出さない。

気づくまでに2日かかった。しかも偶然だった。まったく別件の修正作業の途中で、あるはずの言語のナビゲーションにある「Blog」リンクが、おかしな場所を指しているのに気づいたのがきっかけだ。その一本の壊れたリンクだけが、問題全体につながる唯一の手がかりだった。

差分が実際に示していたもの

ここで正直に認めるべき失敗は、スコープを取り違えたこと自体ではない。変更を実行する前に、それが実際にどのファイルに触れるのかを一度も確認しなかったことだ。何をするための変更かという一行の説明を読んで、それがそのまま実際の挙動だと思い込んでしまった。違った。

修正は、一つの問いから始まった。何が、どこで変わったのか。「ブログを絞る」指示が入る前の最後のコミットと、本番サイトを比較したところ、答えはすぐに、しかも一切の曖昧さなく出た。マスター言語設定、ホームページのコンテンツフォルダ、そして26言語分の文字列ファイル、どれもブログのディレクトリには近づいてすらいなかった。gitにはそれらのファイルが元の姿のまま、一つ残らず残っていた。実は何も失われてはおらず、ただ上書きされてデプロイされていただけだった。

30言語すべてのホームページ、CV、ナビゲーションの文字列をその履歴から復元し、ブログのフォルダだけは意図どおり4言語に絞られたままにしておいた。一つだけやり残しがあった。復元したある言語の「Blog」ナビゲーションリンクが、もう存在しないその言語版のブログを指したままだったのだ。その一本のリンクのためだけに4本の記事を26言語に複製するほどの価値はないと判断し、代わりに英語版のブログへリダイレクトするようテンプレートを直し、そのままにしてある。

たった一つの指示、間違ったスコープ: ホームページとCVの言語が4つに縮小し、2日後に30言語へ復元される一方、ブログは意図どおり4言語のままだった

次に変えるとしたら、何を確認するか

これからは、稼働中の複数セクションからなるサイトに自動化された変更を加える前に、必ずもう一つ問いを声に出すようにしている。修正するはずの機能ではなく、実際に触れる正確なファイルを名指しできるか。答えが曖昧なら、それは実行して様子を見る合図ではなく、立ち止まって確認する合図だ。そして何かが削除される前には、指示が意味していたはずのことの一行要約ではなく、実際のファイル一覧を自分の目の前に用意しておきたい。指示の中のスコープを表す言葉、「ブログ」「このチーム」「フロントエンドだけ」は、その指示が引き起こす変更の実際のスコープと自動的に一致するわけではない。両者が一致するのは、誰かが実際に確認した場合だけだ。そしてこれは、あなたにそのまま返したい問いでもある。最近あなたが出した指示のうち、一番小さく、一番自信を持ってスコープを絞ったつもりだったのに、実際に何に触れたか一度も確認していないものは何だろうか。

Need something like this for your own business? See how I can help →