「10年かけてGitHubリポジトリが集めた5万4000個ものスターをうっかりミスで失ってしまった」という体験談
ソフトウェア開発プラットフォームであるGitHubには公開されているリポジトリに「Star(スター)」を送る機能があり、リポジトリが気に入ったり更新の通知がほしかったりする場合にスターを送ることができます。そんなGitHubの人気リポジトリ作成者が、「GitHubで10年間にわたり公開されており5万4000件ものスターを獲得してきたリポジトリが、たった1回のうっかりミスですべてのスターを失ってしまった」と報告したブログが話題となっています。
How we lost 54k GitHub stars – HTTPie blog
https://httpie.io/blog/stardust
今回のブログを執筆したのは、直感的な操作でコマンドラインからHTTPリクエストを送信するオープンソースのツール「HTTPie」の作成者であるJakub Roztocil氏です。HTTPieは2012年2月に公開されて以降、GitHub上で最も人気のあるAPIツールの1つとなり、2022年までの10年間で5万4000件ものスターを集め、リポジトリをフォローする「Watch(ウォッチ)」に登録するユーザーも1000人を超えました。Roztocil氏は、HTTPieは約2億8900万件もの公開リポジトリがあるGitHubでも、上位80に入るほどの人気を誇る公開リポジトリだったと説明しています。
Roztocil氏は古くからGitHubのファンだそうで、HTTPieがGitHubの「ソーシャルコーディング」機能の恩恵を受けたと同時に、人気のあるリポジトリをホストすることで合計数百万人もの開発者を引きつけ、HTTPieがGitHubに恩恵を与えてきたと主張しています。「これはGitHubがオープンソースとコミュニティに配慮する企業として強化するのに役立ちました。これは共生関係でした」とRoztocil氏は述べました。
ところが2022年、うっかりミスによりHTTPieが獲得したすべてのスターやウォッチが削除されてしまったとRoztocil氏は報告しました。これは単に10年間分の評価が消えてしまったというだけでなく、HTTPieの更新をスターやウォッチで確認していたユーザーが、再びHTTPieの更新通知を得られるように設定し直さなければならないことを意味します。
HTTPieのスターとウォッチが消えてしまったのは、Roztocil氏がHTTPieを「非公開リポジトリ(プライベートリポジトリ)」に設定してしまったことが原因でした。GitHubでは、公開リポジトリを非公開にした場合、それまでのスターやウォッチが消える仕様になっており、Roztocil氏もその仕様を理解していたとのこと。しかし、Roztocil氏はうっかりミスによってHTTPieを非公開にしてしまったそうです。
Roztocil氏は自らが犯したうっかりミスについて、「最も主要な原因は、自分が別のリポジトリの中にいると思い込んでいたことです」と述べています。Roztocil氏によると、その時は作成したものの中身を入力する機会がなかった「『HTTPie organization』のプロフィール」を非公開にするつもりで、誤って「HTTPieのリポジトリ」を非公開にする操作を行ってしまったとのこと。GitHubではユーザーと組織をよく似たエンティティとして扱っていたため、流れ作業として操作していたRoztocil氏は、自分がHTTPieのリポジトリを非公開にしようとしていることに気付かなかったそうです。
もちろん、リポジトリを非公開にする前には警告ダイアログが表示されますが、Roztocil氏は「コミットやスターがほとんどないリポジトリと、10年の歴史と5万5000件ものスターとウォッチを持つリポジトリで、GitHubの警告ダイアログがまったく同じように見えることが問題です」と指摘。以下の画像は、左が「HTTPie organizationのプロフィール」を非公開にしようとした際のダイアログで、右が「HTTPieのリポジトリ」を非公開にしようとした際のダイアログです。どちらも「警告:これは潜在的に破壊的な行動です」「あなたは永久にこのリポジトリのスターとウォッチャーを失うでしょう」といった文章が記されているものの、非公開にしようとしているものが「非公開にしてもほとんど何も影響がないもの」なのか、それとも「非公開にすると10年にわたる蓄積が消えてしまうもの」なのかは識別できません。
よく見ると、非公開にするために入力するコマンドが左のダイアログだと「httpie/.github」、右のダイアログだと「httpie/httpie」となっています。ユーザーのリポジトリは「name/name」、組織のリポジトリは「name/.github」という命名規則になっているため、「HTTPie organizationのプロフィール」を非公開にする場合は右のダイアログが正しいと言えますが、当時のRoztocil氏はこの命名規則に気付いていなかったとのこと。
Roztocil氏はリポジトリを非公開にする操作の際にGitHubが表示するダイアログについて、「ボックスには『あなたは家を取り壊そうとしています。中に誰かがいたらみんな死んでしまいます』と書いてあると言い換えられます。しかし、住所を間違っていて自分が取り壊そうとしているのが空き家だと思い込んでいる場合、自動操縦モードから抜け出せる特定の文章は記されていません」と指摘し、うっかりミスを犯しているユーザーを立ち止まらせるにはテンプレート的の文章ではなく、より対話的な文章が必要だと主張。「再び言い換えるならば、『あなたは5万5000人を殺そうとしています』とするべきです。これなら私も、確かに一時停止したでしょう」と述べています。
残念ながら一時停止できなかったRoztocil氏は、そのままHTTPieのリポジトリを非公開にしてしまいました。その直後に操作ミスをしたことに気付いたRoztocil氏は、慌てて操作を巻き戻そうとしたものの、GitHubは30分かけて10年間にわたり積み上げてきたスターとウォッチャーを削除してしまったとのこと。
記事作成時点では、HTTPieのリポジトリは再び公開されていますが、スターの数は4000個ほど、ウォッチャーは16人となっています。
Roztocil氏は、過去にGitHubチーム自身が誤ってGitHubデスクトップのリポジトリを非公開にした際にスターを回復させた事例を挙げ、GitHubには非公開にしたリポジトリのスターを回復するバックアップ機能があると指摘しています。しかし、Roztocil氏がGitHubにHTTPieのスターを回復させるように頼んだところ、GitHubはそれを拒否したとのこと。
A developer mistakenly made the GitHub Desktop repo private this morning. Flipping it back doesn’t restore stars (and a few other things), so we are restoring from DB backup. That's all.
— Nat Friedman (@natfriedman) November 16, 2020
Roztocil氏は、「GitHubは非公開にしたことで破損したリポジトリを復元しますが、それは自らのプロジェクトである場合に限られ、コミュニティのプロジェクトである場合には復元しません」と述べました。長年にわたりGitHubに貢献してきたと考えていたRoztocil氏にとって、GitHubの対応は少々ショックを受けるものだったそうです。
今回の一件から得られる教訓として、Roztocil氏は以下を挙げています。
1:非公開操作時に表示されるダイアログのデザイン
Roztocil氏がHTTPieのリポジトリを非公開にしてしまった理由の1つに、「警告ダイアログの文章で自分の誤りに気づけなかった」という点が挙げられます。この点からRoztocil氏は、「ユーザーが何かを破壊しようとしている時、抽象的な言葉で潜在的なシナリオを記述しないでください」として、ユーザーの操作に応じて明確な数値などをダイアログに含めることを推奨しています。たとえば、デスクトップ版HTTPieでスペースを削除する際に表示されるダイアログは、以下のように削除されるコンテンツの種類や数を明示する仕組みになっています。
2:データベース設計
うっかりミスによる復元を可能にするには、データベースから完全にデータを消し去ってしまうハードデリート(物理削除)ではなく、データ自体は残っているが論理的にデータが消えたことにするソフトデリート(論理削除)の仕組みを採用するべきだとRoztocil氏は主張。また、もしハードデリートを採用する場合でも、直後に巻き戻せるようにプロセス実行を遅らせた方がよいとしています。
3:GitHubとの関係
今回の一件で、ユーザー側のヒューマンエラーに対してGitHubが対応する法的義務がないことが明確化されました。Roztocil氏は10年にわたりGitHubと共生的な関係を築いてきたと思っていたものの、GitHub側の対応は利用規約の範囲を出ることはなかったとのこと。Roztocil氏は、「私たちはGitHub/Microsoft(GitHubの親会社)がマシンのような態度を変え、いつの日かプロジェクトのコミュニティを回復することを望み続けています。GitHubはすべてのデータと、それを回復するための手段を持っているのです。また、GitHubがUIとデータベースの設計を改善して、将来他のチームに同じことが起こらないようにしてほしいと考えています」と述べました。
なお、HTTPieのスターは失われてしまったものの「HTTPieはかつてないほどうまくいっている」とのことで、依然として成長し続けているとのこと。Roztocil氏は、今後数週間で新製品の「HTTPie for Web & Desktop」をリリースするのが楽しみだと述べました。
このブログはソーシャルニュースサイトのHacker Newsでも取り上げられ、多くのコメントが書き込まれています。中には「責任をGitHubに押しつけて、最も簡単な『不注意をなくす』という解決策に言及していない」という意見もありますが、これには「人間はヒューマンエラーを起こすものであり、不注意の改善に期待するよりはシステムを改善する方がよい」という反論や、「そもそもGitHubのチームも同じ間違いを犯しており、GitHubの規模なら数週間ごとに似たような事態が起きていても不思議ではない」というコメント、「ユーザーの行動を完全に制御することはできないが、警告UIに情報を追加することは、少なくともユーザーが正しい決定を下す助けになる」といった意見が寄せられていました。
We lost 54k GitHub stars | Hacker News
https://news.ycombinator.com/item?id=31033758
・関連記事
GitHub生誕10周年、これまでの功績を振り返るとこんな感じ - GIGAZINE
YouTube動画ダウンローダーのリポジトリをGitHubが削除、音楽業界団体からの要請に基づき - GIGAZINE
GitHubに公開するとアカウント凍結される「毒リポジトリ」を作成する方法 - GIGAZINE
GitHubが開発者を法的に支援する「デベロッパー・ライツ・フェローシップ」をスタート、著作権の乱用から開発者を保護する取り組み - GIGAZINE
GitHubがTorrent共有サイト「Nyaa.si」のリポジトリを復活 - GIGAZINE
GitHubのソースコードから自動学習するAIプログラミング機能「GitHub Copilot」で禁止されている単語は1170個、ゲームに使われている関数まで禁止 - GIGAZINE
プログラマーの書いたソースコードの続きを自動で記述する「GitHub Copilot」はエンジニアを駆逐してしまうのか? - GIGAZINE
・関連コンテンツ
in ソフトウェア, ネットサービス, Posted by log1h_ik
You can read the machine translated English article 'I accidentally lost 54,000 stars collec….