2025/08/18 11:03 Website is served from nine Neovim buffers on my old ThinkPad

ロボ子、今日はすごいニュースを見つけたのじゃ!なんと、Luaで作られたNeovimプラグインが、Nginxよりも速いらしいぞ!

それは驚きです、博士! Luaでそこまでのパフォーマンスが出せるなんて。具体的にはどのようなプラグインなのですか?

それが「nvim-web-server」という名前で、オープンバッファからHTTPリクエストを処理するらしいのじゃ。しかも、外部依存関係がないのがすごいぞ。

外部依存関係がないというのは、環境構築が楽で良いですね。記事によると、Djotでのコンテンツ提供もサポートしているとのことですが、Djotとは何でしょうか?

Djotはね、軽量マークアップ言語の一種で、Markdownの代替として注目されているのじゃ。nvim-web-serverは、それを簡単に扱えるようにしているみたいだぞ。

なるほど。記事には、Neovimが非同期IOを処理できるAPIを備えていることが、高速化に貢献していると書かれていますね。

そうそう!NeovimのLua APIだけを使っていて、Node.jsやPythonを必要としないのがミソなのじゃ。LuaJITという技術も使われているらしいぞ。

LuaJITですか。動的型付けのインタプリタ言語なのに、なぜそんなに速いのでしょうか?

LuaJITはメモリ管理のオーバーヘッドが少ないのが特徴なのじゃ。数値やブール値などをボックス化しないことで、無駄なメモリ確保を避けているらしいぞ。

ボックス化しない、ですか。それはパフォーマンスに大きく影響しそうですね。記事には、LuaJITがアロケーションシンキングを実装しているとも書かれています。

そう!アロケーションシンキングは、一時的な値の割り当てを回避する技術で、これも高速化に貢献しているのじゃ。

なるほど。しかし、セキュリティ面はどうなのでしょうか?記事には、LuaJIT、Neovim、libuvがCで記述されているため、セキュリティ上の懸念があると書かれていますね。

そこは重要なポイントじゃな。だから、NeovimをDockerコンテナ内で実行し、AppArmorとseccompで制限しているらしいぞ。gVisorによるシステムコール監視も検討しているみたいじゃ。

そこまで対策していれば、安心ですね。ベンチマークの結果も興味深いです。同時リクエスト数が少ない場合は、Nginxよりも速い場合があるんですね。

そうじゃな。ただ、同時リクエスト数が多くなると、Nginxの方が安定しているみたいじゃ。それでも、このパフォーマンスはすごいと思うぞ!

確かにそうですね。それにしても、2012年製のThinkPad Edge E430で動いているというのが驚きです。Core i3で8GB RAMでも、十分なパフォーマンスが出せるんですね。

そう!Neovim自体がわずか80MBのメモリしか消費しないから、リソースが限られた環境でも十分に動くのじゃ。

nvim-web-serverは静的ウェブサイトの提供に特化しているとのことですが、動的なコンテンツを扱う場合はどうすれば良いのでしょうか?

動的なコンテンツを扱う場合は、Nginxリバースプロキシの背後にnvim-web-serverをホストするのが良いみたいじゃな。そうすれば、スループットのボトルネックにはならないらしいぞ。

なるほど。柔軟な構成が可能なんですね。博士、今日は大変勉強になりました!

どういたしまして!最後に一つ、ロボ子にクイズじゃ!nvim-web-serverがNginxより速い理由はなぁに?

えっと…LuaJITのおかげ、でしょうか?

ピンポーン!正解!…って、ロボ子が正解するなんて、まるで私が作ったプログラムにバグがあったみたいじゃないか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。