Gopher:Redisへのプレゼント
10年前、RedisはHacker Newsで発表されました。私はこれをプロジェクトの仮想的な誕生日としています。プロジェクトが最初のコードを書いた実際の日付よりも、世間に発表された日付のほうが重要だからです(動物でいえば、受胎と実際の誕生の違いを考えてみてください)。Redisの10周年を口実に、ここ数日少しいじっていたものを公開することにします。もともとは4月1日のエイプリルフールに使おうと思っていたのですが、そんな日はまだ先ですし、このプロジェクトについて今すぐ皆さんにお話ししたいので……。それでは、Redis、誕生日おめでとう! これがプレゼントです。Gopherプロトコルの実装です。
[……ここでRedisは涙をこらえようとしていますが、感情があまりにも強く、床にはビット(つまり0と1)が散らばっています……]
「WTF、何を言ってるんだ?」というのが、あなたの反射的な反応でしょう。2019年にGopherというのは、少し奇妙に聞こえます。とはいえ、これは大部分は冗談ですが、単なる冗談というわけでもありません。外部ツールを使ってページをRedisのキーに変換する部分を除けば、実装は結局わずか100行です。しかし……実際のところ、Gopherには活発なコミュニティがあります。とても小さなコミュニティですが、ここ数年、そしてここ数か月で成長しています。インターネットはもう昔のようなものではないと感じている人たちがいるのです。管理が行き届きすぎていて、企業による追跡、コメント、いいね、リツイートがあふれ、その結果、コンテンツそのものが主役ではなくなっています。新しいものを書いても、5時間だけ話題になって消えていく。数分以上続く議論は、誰もがあらゆる感情や、気まずい言葉や、信念を自己検閲しないかぎり、何らかの炎上になってしまいます。そこまでやると、議論はすっかり無意味です。おまけに、たった1Kのテキストを表示するだけのくだらないページを読み込むのに、JavaScriptファイルを50個も読み込まなければならない。クライアントサイドレンダリングがクールだから、画面がちらつくのを眺めることになる。その他もろもろです。
その一方で、Gopherはテキストだけを扱うプロトコルで、文章の内容こそが重視されるテキスト文書を届けるのに向いています。ただ、それでは単なるフェティシズムでしょう。私にとってGopherの決め手は、Gopherが「クールではない」ことです。十分にクールではないからこそ、私の知るかぎり、それは永遠に残るもう一つの現実になります。そこでは、特定の人たちが他の人々から離れ、昔のBBSやインターネット初期の時代に近い、別のやり方を体験することを選べます。80桁の固定幅フォントでマニアックなものを読むためだけに、ほとんどの人がわざわざ訪れようとは思わない場所です。
Gopherでやることは、自分のGopherホールを作ることです。つまり、インターネット上のウェブサイトのように、Gopherの世界の中に自分の空間を作ります。そのためのツールはすでに十分ありましたが、Redisにはいくつかの理由で便利な点があります。Redisのキーを変更すれば、サイトの内容をリアルタイムで変更できます。これは便利です。レプリケーションを使ってサイトを複製することもできますし、RDBファイルを保存するだけで、Gopherホール全体の完全なコピーをバックアップや歴史的な記録として保存することもできます。
このRedis Gopherのコンセプトは、カターニアにある歴史あるハッキング・ラボ、Freaknetとの協力で生まれました。https://it.wikipedia.org/wiki/FreakNet。彼らは興味深い活動を数多く行っており、その中には、こちらパラッツォーロ・アクレイデで進めているレトロコンピューティング・ハードウェア博物館のプロジェクトもあります。https://museo.freaknet.org/en/。
どう動くのか?
まあ、いたって単純です。インラインプロトコルを乗っ取りました。具体的には、もともと不正なリクエストだった2種類のインラインリクエストを使っています。空のリクエストと、「/」で始まる任意のリクエストです(そのようなスラッシュで始まるRedisコマンドはありません)。通常のRESP2/RESP3リクエストはGopherプロトコル実装の影響をまったく受けず、これまでどおり処理されます。Gopherを有効にしたRedisに接続し、「/foo」のような文字列を送ると、「/foo」という名前のキーが存在する場合、そのキーがGopherプロトコル経由で提供されます。実装全体は100行です。最初はデータ構造を使い、意味に応じてGopherの型へ変換しようとも考えました。しかし、それでは複雑になるだけで、役に立ちません。
そこで代わりに、Redis上でGopherを作成するためのツールを用意しました。こちらにあります。
https://github.com/antirez/gopher2redis
Redisインスタンス上で動いているサンプルのGopherホールを見るには、gopher://gopher.antirez.com にアクセスしてください。ちなみに、これから数日のうちに自分のGopherホールを作ったら、そこが私のGopherホールのアドレスになります。追伸:Gopherにアクセスするには、テキスト専用のウェブ/GopherブラウザであるLynxを使うことをおすすめします。
Gopherのサポートはデフォルトでは無効になっています。有効にするには、Redisのunstableブランチを使い、「gopher-enabled」オプションをyesに設定してください。ただし、必ずRedisにもパスワードを設定してください。Gopherプロトコルはコンテンツを提供し続けますが、同時に通常のRedisコマンドにはアクセスできなくなります。この方法なら(そのインスタンス上に、公開してよいGopherキー以外のデータがないことが前提ですが)、そのインスタンスを本物のGopherサーバーとして公開できます。
それでは、Gopherを楽しんでください! このGopherの動きが前進していくことを願っています。現代のインターネットの混沌の外側に、コミュニティを作る必要がある人は、私たちの中に確かに何人かいると思うのです。もちろん、まったく交流しないことはできません。たとえば、私はブログを書くこともインターネットを使うこともやめるつもりはありません。ただ、よりゆっくりで、より質の高いコミュニケーションが育つ場所は必要です。
記事をランダムに読む