resty コマンドラインツールのデモンストレーション
このチュートリアルでは、OpenResty に付属する resty
コマンドラインツールの使用方法をご紹介いたします。
cd ~
export PATH=/usr/local/openresty/bin:$PATH
which resty
通常、以下のパスに配置されています。
-V
オプションを使用してバージョン番号を確認することができます。
resty -V
OpenResty の事前ビルドされた Linux バイナリパッケージをご利用の場合は、openresty-resty
パッケージをインストールする必要があります。
dnf list installed openresty-resty
これは openresty
メインパッケージには含まれていないためです。
例えば、resty
コマンドを使用して “hello world” を実行するのは非常に簡単です。
resty -e 'print("Hello World")'
-e
オプションにご注目ください。
あるいは、ターミナル上で Lua スクリプトを実行することもできます。
echo 'print("Hello World")' > hello.lua
cat hello.lua
resty hello.lua
このため、OpenResty を使用して新しいコマンドラインアプリケーションを作成するのにも適しています。
ここでは、ノンブロッキング I/O も実装可能です。
time resty -e 'ngx.sleep(1) ngx.say("done")'
cosocket API を使用して openresty.com の 443 ポートに接続してみましょう。
resty -e 'local sock = ngx.socket.tcp() print(sock:connect("openresty.com", 443))'
または、軽量スレッドを使用することもできます。
resty -e 'ngx.thread.wait(ngx.thread.spawn(function () print("in thread!") end))'
Lua モジュールも簡単に使用できます。test
モジュールを作成してみましょう。
mkdir lua/
vim lua/test.lua
lua/test.lua
ファイルは以下のようになります。
local _M = {}
function _M.hello() print("Hello") end
return _M
そして、-I
オプションを使用して lua/
ディレクトリを Lua モジュールの検索パスに追加します。
resty -I lua/ -e 'require "test".hello()'
-I
オプションがない場合、モジュールを見つけることができません。
resty -e 'require "test".hello()'
これは、lua/
ディレクトリがデフォルトで Lua モジュールの検索パスに含まれていないためです。
resty.shell
のような標準的な Lua モジュールを直接ロードすることもできます。
resty -e 'local ok, stdout = require "resty.shell".run([[echo ok]]) print(stdout)'
このモジュールは、少量の shell コマンドをノンブロッキングで実行するために使用されます。
--shdict
オプションを使用して lua 共有メモリディクショナリを定義することもできます。
resty --shdict 'dogs 10m' -e 'print(ngx.shared.dogs:set("age", 11))'
複数の共有ディクショナリをこのように定義できます。
resty --shdict 'dogs 7m' --shdict 'cats 5m' -e 'print(ngx.shared.dogs, " ", ngx.shared.cats)'
カスタムの nginx 設定コードを簡単に注入することもできます。
resty --http-conf 'lua_regex_match_limit 102400;' -e 'print "ok"'
LuaJIT の JIT コンパイラを使えます。
ホットな Lua スクリプトを作成してみましょう。
echo 'local a = 0 for i = 1, 1e8 do a = a + 1 end print(a)' > bench.lua
cat bench.lua
そして、JIT コンパイラを完全に無効化します。
time resty -joff bench.lua
比較のため、JIT コンパイラを有効にした場合の速度を確認することができます。
time resty bench.lua
あるいは、-jv
オプションを使用してコンパイルされた Lua コードパス、つまり「トレース」を確認することもできます。
resty -jv bench.lua
さらに詳細な情報として、コンパイルされたバイトコードダンプ、IR コードダンプ、マシンコードダンプなども確認できます。
resty -jdump bench.lua
サポートされているすべての機能は、-h
オプションでいつでも確認できます。
resty -h
または、restydoc
ツールを使用してドキュメントを参照することもできます。
restydoc resty-cli
事前ビルドされたバイナリパッケージを通じて openresty
をインストールした場合は、openresty-doc
または openresty-restydoc
パッケージをインストールする必要があります。
dnf list installed openresty-doc
restydoc
ツールについては、別の専用のビデオチュートリアルでより詳しく説明いたします。
著者について
章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。
章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty XRay(マイクロサービスおよび分散トラフィックに最適化された多機能
翻訳
英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!