Gopher:Redisへのプレゼント
原文は Salvatore Sanfilippo により に公開されました。 このブログを購読する
10年前、RedisはHacker Newsで発表された。僕はこれをプロジェクトの仮想的な誕生日としている。プロジェクトの最初の1行のコードが書かれた日よりも、公に発表された日の方が重要だと考えているからだ(動物でいえば受胎と実際の誕生の違いのように考えてほしい)。このRedisの10周年を口実に、ここ数日ちょっといじっていたものをリリースしようと思う。もともとはエイプリルフールのネタにするつもりだったのだが、その日はまだ遠いし、今すぐこのプロジェクトについて話したい……。というわけで、ハッピーバースデー、Redis!これが君へのプレゼントだ。Gopherプロトコルの実装である。
[…ここでRedisは涙をこらえようとするが、感情が抑えきれず、床にはビット(つまり0と1)が散らばっている…]
「はぁ?何言ってんだ?」と思うのが当然だろう。2019年にGopherというのは確かに奇妙に聞こえる。ただ、これは*単なる*冗談というわけでもない。とはいえ、大部分は冗談なのだが。実装自体はたった100行のコードに過ぎないし、ページをRedisのキーに変換する外部ツールを除けばの話だが。でも……実はGopherの周りには今もアクティブなコミュニティが存在する。とても小さいが、ここ数年、数ヶ月のあいだに着実に成長しているコミュニティだ。インターネットはもはや昔のものではないと感じている人たちがいる。過剰な統制、企業による追跡、コメント、いいね、リツイート。コンテンツがもはや主役ではないほどだ。何か新しいものを書いても、5時間もてはやされたかと思えば消えてしまう。数分以上まともな議論を続けようとすれば、何らかの炎上にならずに済むことはもはやない。炎上を避けようとすれば、参加者全員があらゆる感情や、ちょっとでも厄介な言葉、信念を自己検閲しなければならず、結局議論自体がほとんど無意味なものになってしまう。極めつけは、たかだか1KBのテキストを読むだけのしょうもないページを読み込むのに、50ものJavaScriptファイルを読み込まなければならず、クライアントサイドレンダリングがクールだからと画面がチカチカする、といった具合だ。
一方でGopherはテキスト専用のプロトコルで、書いた中身そのものに重きを置いたテキストだけのドキュメントを届けるのに最適だ。しかし、それだけなら単なるフェティシズムに過ぎない。僕にとってGopherの決め手は、それがダサい(UNCOOL)ということだ。僕の知る限り、永遠にダサいままであり続けるからこそ、ある種の人たちが他とは一線を画し、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ブラウザであるLynxを使うことをおすすめする。
Gopherサポートはデフォルトでは無効になっている。有効にするには、Redisのunstableブランチを使い、「gopher-enabled」オプションをyesに設定してほしい。ただし、必ずRedisにパスワードを設定すること。Gopherプロトコルは引き続きコンテンツを提供するが、同時に通常のRedisコマンドにはアクセスできなくなる。この方法なら(そのインスタンスにGopher用のキー以外に公開すべきデータがないと仮定すれば)、そのインスタンスを真のGopherサーバーとして公開することができる。
では、Gopherを楽しんでほしい!このGopherの試みが前に進むことを願っている。現代のインターネットの混沌の外にコミュニティを作る必要がある人は、僕たちの中にも確かに何人かいると本気で思っている。もちろん、一切の関わりを断つことが可能だと言っているわけではない。例えば、僕自身ブログをやめたりインターネットを使うのをやめたりするつもりはまったくない。ただ、よりゆっくりとした、より質の高いコミュニケーションが育つ場所が必要なのだ。
記事をランダムに読む
コメント
ログインしてコメントする