このページの内容

Awesome Lua

Luaを扱う資料や関連プロジェクトをまとめたAwesomeリストです。

パッケージ

リソース

実装・インタプリター・バインディング

  • Lua - Luaの元のANSI Cインタプリタ
    • Lua Repo - Luaチームが見ている公式Luaリポジトリ、GitHubにミラーリングされたもの
  • LuaJIT - Lua 用の高性能 JIT(実行時)コンパイラ
  • LLVM-Lua - LuaをLLVMにコンパイル
  • lua.vm.js - ウェブ上のLua仮想マシン;LLVM、emscripten、asm.jsを用いてCインタプリタを直接移植したもの
  • Moonshine - JavaScriptで実装されたLua仮想マシン。lua.vm.jsより遅いが、ドキュメントや例、JavaScriptとのインターフェースが優れている
  • Fengari - JavaScriptで再実装されたLua仮想マシンで、JavaScriptとDOMとの間の互換性がスムーズ
  • MoonSharp - .NET、MonoおよびUnityプラットフォーム向けにC#で書かれたLuaインタプリタ
  • UniLua - Unityゲームエンジンとの互換性に焦点を当てた、純粋なC#実装のLua 5.2
  • lupa - LuaJIT2へのPythonバインディング
  • golua - Lua C APIへのGolangバインディング
  • GopherLua - Goで実装されたLua 5.1仮想マシンとコンパイラ、Go API付き
  • LuaBridge - C++とLua間のデータ、関数、クラスの相互変換を可能にする軽量ライブラリ

注:LuaJITからLuaへ、lua.vm.jsへ、Moonshineへと進むごとに、基本的なベンチマークのパフォーマンスはおよそ6倍程度低下する

パッケージマネージャー

  • LuaRocks - 「rocks」と呼ばれるLuaモジュールのパッケージ化ツールとしての実用的なツール、公開されたrockリポジトリとウェブサイト。npmやpipに似ている

ビルドツールとスタンドアロン化ツール

  • Lake - Luaで書かれたビルドエンジン、Rubyのrakeに類似
  • Luabuild - 高度にカスタマイズ可能な Lua 5.2 ビルドシステム
  • luastatic - Luaプログラムをスタンドアローン実行ファイルに変換するためのシンプルなツール
  • omnia - luastaticに基づいた、スタンドアローン実行ファイルを作成するための、すべてのバッテリーを備えたツール

デバッグとプロファイリング

  • ProFi - LuaJITと互換性のあるシンプルなプロファイラーで、報告書ファイルを生成
  • luatrace - スクリプト実行のトレース・分析・プロファイリングツールセットで、詳細な報告書を生成
  • StackTracePlus - Luaのスタックトレースにdrop-inアップグレードを加え、ローカルコンテキストを追加し、読みやすさを向上させる
  • MobDebug - ブレークポイントとスタック検視を備えた強力なリモートデバッガ。ZeroBraneStudioで使用されている
  • lovebird - ブラウザベースのデバッグコンソール。元はLÖVE用に作成されたが、LuaSocketをサポートするプロジェクトでも動作する

IDE とプラグイン

  • Lua Development Tools - コード補完、デバッグなどを提供するEclipseプラグイン。Metaluaに基づいて構築されている
  • Lua for IDEA - IntelliJ IDEAプラグイン。その他の機能を含むが、コード補完、スマートハイライト、実験的なデバッグを提供する
  • ZeroBraneStudio - 軽量でカスタマイズ可能、マルチプラットフォーム対応のLua専用IDE。コード補完と分析を提供。Luaで記述されている。多数のLuaエンジンに対応したデバッグサポートを備える
  • BabeLua - VS2012-13向けのLuaエディタ/デバッガ拡張。ハイライト、自動補完、Lint、フォーマット機能を提供する
  • lua-mode - Luaの編集を行うためのEmacsのマジャーモード
  • vscode-lua - VSCodeのインテリセントとLint機能

汎用ツールキット

  • Lua Fun - LuaJIT向けに設計された高性能な関数型プログラミングライブラリ
  • Moses - Underscore.jsにインスパイアされた関数型プログラミングユーティリティセット
  • Penlight - Pythonの標準ライブラリにインスパイアされた、広範で重いユーティリティライブラリ。Luaが備えていない「バッテリー」を提供する
  • lua-stdlib - 中程度の標準ライブランの拡張。いくつかの有用なデータ構造、ユーティリティ関数、基本的な関数型機能を追加する
  • Microlight - 有用なLua関数を集めた小さなライブラリ。Penlightの「極めて軽量」バージョン。
  • compat53 - Lua-5.3スタイルのAPIを提供する互換性モジュール。Lua 5.2および5.1向け。
  • RxLua - 反応型拡張、Observableなど

ゲームエンジン

  • LÖVE 2D - デスクトップゲーム開発プラットフォーム。マルチプラットフォーム対応、機能が充実し、広く採用されている
  • Corona SDK - iOSおよびAndroid向けの開発プラットフォーム。独自の技術だが、多くのトップゲームおよびアプリで使用されており、ダウンロード数は1億5千万以上。
  • MOAI - オープンソース、マルチプラットフォーム対応、モバイルゲーム開発フレームワーク。Luaスクリプトで駆動するミニマリズムのC++エンジン。
  • Drystal - オープンソース、Linuxまたは最新のウェブブラウザを備えた任意のプラットフォームでゲームが実行可能。
  • Amulet - オープンソース、音声・視覚ツールキット。小型ゲームや実験に適したツール。Windows、Mac、Linux、HTML5、iOSで動作。
  • LÖVR - 仮想現実体験を作成するための3Dフレームワーク。LÖVE 2Dにインスパイアされたもの。

ゲーム開発

  • Corona
    • Coronium - シンプルなクラウドプラットフォーム。分析、データオブジェクト、ユーザー管理などに対応。
  • LÖVE
    • awesome-love2d - このリストに似たものだが、ゲーム開発およびLÖVEプラットフォームに焦点を当てるもの.
    • lurker - LÖVEプロジェクトの実行中に変更されたLuaファイルを自動で置き換えることで、開発サイクルを短縮。
    • HUMP - LÖVE向けの軽量ヘルパーのセット。ゲーム開発に特化したユーティリティセット。
  • MOAI
    • moaifiddle - MOAIゲームエンジン向けの短いスクリプトを編集・共有し、WebGLでブラウザ上で実行できる。
  • Jumper - グリッドベースのゲーム向けの高速かつ軽量なパスファインディングライブラリ。
  • lume - ゲーム開発に特化したユーティリティライブラリ。
  • NoobHub - Corona、LÖVEなどに向けたネットワークマルチプレイヤー。シンプルなパブ・サブモデルを採用。
  • Collision detection
    • bump.lua - 最小限の矩形ベースの衝突検出。トンネル効果と基本的な衝突解決を処理。
    • HardonCollider - 任意の位置と回転を持つ任意の形状の間の衝突検出を実行。
  • Tweening
    • flux - Lua向けの高速かつ軽量なTweeningライブラリ。補間関数を備え、Tweenをグループ化できる。
    • tween.lua - Tweening用の小さなライブラリ。複数の補間関数を提供。
  • Examples

ロギング

  • lua-log - ファイルシステム、ネットワーク、ZeroMQなどへのプラグイン可能なライターを備えた非同期ログライブラリ。
  • LuaLogging - Log4jにインスパイアされたログライブラリ。さまざまなアペンダーをサポート。
  • luasyslog - ログをsyslogに記録、LuaLoggingに基づく。

ウェブ/ネットワークプラットフォーム

  • OpenResty - NginxにLuaを追加して構築された高速かつスケーラブルなWebアプリケーションプラットフォーム。今日のLuaのWebプラットフォームとして、Cloudflare、Taobao、Tencentなどに広く使われている。
  • turbo - イベント駆動、ブロッキングなし、LuaJITベースのネットワークサブセットとフレームワーク。Tornadoにインスパイアされたもの。
  • Kepler Project - 共通の標準とコンポーネントを使用するウェブ向けプロジェクトのコレクション。
  • Pegasus.lua - Pegasus.luaは、Lua言語で書かれたWebアプリケーションと連携するHTTPサーバーである。

OpenResty

  • awesome-resty - このリストに似たものだが、OpenRestyに焦点を当てるもの.
  • Core platform
    • ngx_lua - OpenRestyの核となる部分。NginxにLuaを埋め込み、その他、非ブロッキングソケットのcosocket API(LuaSocketのAPIと互換)を公開する。
    • OpenResty GitHub Organization - ngx_lua、ngx_openresty、および多くの関連モジュールのリポジトリが置かれる場所。
  • Third-party modules
    • lua-resty-http - LuaベースのHTTPクライアントドライバー。cosocket APIに基づく。
  • Frameworks & tools
    • Lapis - LuaおよびOpenResty向けのフルスタックフレームワーク。DjangoやRailsに相当するもの。Moonscriptをサポート。
    • ledge - Luaモジュールで、スクリプト可能なRFC準拠HTTPキャッシュ機能を提供。
    • Sailor — OpenResty、Apacheおよびその他のウェブサーバーと互換可能なMVCウェブフレームワーク。
    • Kong - マイクロサービスおよびAPI管理層。

「OpenResty」をこのページで検索すると、他のカテゴリ(特にデータストア)に該当する関連パッケージが見つかります

コマンドラインユーティリティ

  • ansicolors - コンソールへの色付き出力を行うシンプルな関数。
  • cliargs - シンプルなコマンドライン引数解析モジュール。
  • lua-term - ターミナルの操作および変更。
  • argparse - Pythonのargparseにインスパイアされた、機能豊かなコマンドラインパーサー。

並行処理とマルチスレッド

  • Coroutine-based multitasking:
    • Lumen - シンプルな並列タスクスケジューリング。
    • ConcurrentLua - Erlangスタイルのメッセージ伝達による並列モデルを実装。
    • cqueues - イベントループとコルーチンに基づいたソケット、シグナル、スレッドの管理用ライブラリ。
  • Multithreading:
    • llthreads - 低レベルのpthreadおよびWIN32スレッド向けのシンプルなラッパー
    • llthreads2 - llthreadsの再構築版
    • lanes - 1つのLuaスレッドにつき1つのOSスレッドを実現するメッセージ伝達モデルを実装したライブラリ
    • luaproc - 複数のスレッドを1つのOSスレッドに割り当て可能で、ネットワーク上で簡単に拡張できるメッセージ伝達モデル。詳しくは the paper を参照。

各選択肢(特に lanesluaproc の間の違い)についての詳細は、こちらの comparison を参照してください;若干古いものの、それぞれの仕組みと重要な違いを説明しています

テンプレート

  • lustache - Mustacheテンプレートの実装
  • etlua - 埋め込み型Luaテンプレート、ERBスタイル
  • lua-resty-template - OpenResty向けのLua中心のテンプレートエンジン、Jinjaに似ている。

ドキュメント

  • LDoc - LuaDocを現代化・拡張したドキュメント生成ツール
  • Locco - DoccoのLua版、“簡易かつ100行程度の、リテラティブプログラミングスタイルのドキュメント生成ツール”。
  • docroc - コメントをLuaテーブルにパースしてドキュメントを生成。

オブジェクト指向プログラミング

  • 30log - 30行で構成された極めてシンプルなOOPライブラリ、基本的なクラス、継承、ミックスインを提供。
  • middleclass - シンプルでありながら堅牢なOOPライブラリ、継承、メソッド、メタメソッド、クラス変数、ミックスインを提供。

ファイルシステムと OS

  • LuaFileSystem - Luaの標準ファイルシステム関数セットを拡張・補完する。
  • luaposix - POSIX APIへのバインディング、包括的にcursesを含む。
  • lunix - 一般的なUnixシステムAPIへのバインディング、スレッドセーフ性を追求。
  • lua-path - ファイルシステムパス操作ライブラリ。

時刻と日付

  • LuaDate - 日付と時刻モジュール、パース、フォーマット、加減算、ローカリゼーション、ISO 8601対応を提供。
  • cron.lua - JavaScriptのsetTimeoutおよびsetIntervalにインスパイアされたLua用の時刻関連関数。
  • luatx - 時刻、日付、タイムゾーンライブラリ。

画像処理

  • magick - LuaJIT用のFFIによるImageMagickへのLuaバインディング。

デジタル信号処理

  • LuaFFT - 純粋なLuaで構築された使いやすい高速フーリエ変換パッケージ
  • Worp - LuaJIT向けに開発された音声/音楽/DSPエンジン

ハードウェアと組み込みシステム

  • eLua - Luaに最適化と特定の機能を追加した、効率的かつ移植性の高い埋め込みソフトウェア開発用の拡張版

数学と科学技術計算

  • SciLua - LuaJITに基づく数値/科学計算フレームワークで、Rとのインターフェースを提供
  • Torch7 - 機械学習アルゴリズムに幅広く対応した科学計算フレームワーク。Facebook、Googleなどに採用されている
  • lhf’s Lua Tools - 多数の数学やデータ関連のライブラリとツール

構文解析とシリアライズ

  • JSON
    • lua-cjson - Cで実装された高速JSONエンコード/デコードをLuaに公開
    • luajson - LPegに基づくLua実装のJSONエンコーダ/デコーダ
    • dkjson - Lua上で実装されたJSONエンコーダ/デコーダ
    • json.lua - 純粋なLuaで実装された高速かつ小型のJSONライブラリ
  • XML
    • LuaExpat - Expatライブラリとのバインディングを用いたSAX XMLパーサー
    • SLAXML - 純粋なLuaによるSAX風ストリーミングXMLパーサー
  • MessagePack
    • lua-MessagePack - 純粋なLuaで実装されたMessagePack
    • lua-cmsgpack - Redisが使用しているMessagePackのC実装とLuaバインディング
  • LPeg
    • LPeg - パーシング表現文法(PEG)に基づくLua用パターンマッチングライブラリ
    • lpeg_patterns - LPegパターンのコレクション
    • LuLPeg - LPeg v0.12の純粋なLua実装
    • LPegLJ - LPeg v1.0の純粋なLuaJIT実装
    • LPegLabel - LPegにラベル付き失敗をサポートする拡張
  • lyaml - LibYAMLとのバインディングを用いたYAMLエンコード/デコード
  • lunamark - マークダウンをHTMLやLaTeXなど他のテキストフォーマットに変換します。高速解析のためにLPegを使用します。
  • LXSH - LPegで書かれたリキサと文法強調表示ツールのコレクション
  • lua-pb - プロトコルバッファーズの実装。

人間向け表現

  • i18n.lua - ロケール、フォーマット、複数形をサポートする国際化ライブラリ。
  • inspect.lua - Luaテーブルの人类が読みやすい表現。
  • serpent - シリアライザと整形出力
  • Ser - 極めてシンプルなシリアライザで、高いパフォーマンスを実現。
  • say - i18n向けのシンプルな文字列キー・値ストア。

圧縮

  • lua-zlib - zlib用のシンプルなストリーミングインターフェース。gzip/gunzipに使用。
  • lua-zip - Luaにlibzipのバインディング。ZIPファイルの読み書きを行います。

暗号

  • LuaCrypto - OpenSSLへのLuaのバインディング。
  • lua-lockbox - 純粋なLuaで書かれた暗号プリミティブのコレクション。
  • luatweetnacl - tweetnaclへのバインディング。現代の高セキュリティ暗号ライブラリ。
  • luaossl - Lua世界で最も包括的なOpenSSLモジュールです。lapis、kong、lua-httpに採用されています。

ネットワーク

  • LuaSocket - TCPおよびUDP用のソケットAPIを提供し、HTTP、FTP、SMTPを実装するネットワーキング拡張
  • lua-websockets - WebSocketクライアントおよびサーバーモジュール。Webサーバーに依存しない。LuaSocketに基づくLuaでの実装。
  • lua-cURLv3 - Luaにlibcurlのバインディング。
  • lua-http - 非同期HTTPおよびWebSocketライブラリ。クライアントおよびサーバーAPI、TLS、HTTP/2をサポート。cqueuesに基づく。

データストア

  • LuaSQL - ODBC、ADO、Oracle、MySQL、SQLiteおよびPostgreSQLへの接続に必要なシンプルなインターフェース。
  • pgmoon - OpenResty、LuaSocket、およびcqueues用のLua PostgreSQLドライバー
  • lua-resty-mysql - OpenResty 用の Lua MySQL ドライバー
  • lua-resty-cassandra - OpenResty およびその他の環境用の Lua Cassandra クライアントドライバー
  • Redis
    • redis-lua - Redis 用の純粋 Lua クライアントライブラリ
    • lua-resty-redis - OpenResty 用の Lua Redis クライアントドライバー
    • lredis - パイピングおよび Pub/Sub をサポートする非同期 Redis クライアント(cqueues に基づく)

メッセージブローカー

  • lua-zmq - ZeroMQ への Lua バインディング
  • lzmq - ZeroMQ への新しい Lua バインディング
  • lua-resty-kafka - OpenResty cosockets をベースにした Kafka クライアントドライバー
  • lua-resty-rabbitmqstomp - OpenRest-ly cosockets をベースにした RabbitMQ クライアントライブラリ

テスト

  • busted - ドキュメントが優れていて Moonscript サポートを備えた BDD 風のユニットテストフレームワーク
  • telescope - 柔軟で高度にカスタマイズ可能なテストライブラリ
  • luassert - Lua の標準的なアサーション機能を拡張するアサーションライブラリ
  • lust - 最小限のテストフレームワーク

外部関数インターフェース

  • LuaJIT FFI - LuaJIT が外部 C 関数を呼び出し、C データ構造を純粋 Lua コードから使用するためのメカニズム
  • luaffi - スタンドアローン FFI ライブラリ(LuaJIT FFI インターフェースと互換)

解析ツールと AST

  • luadec51 - Lua 5.1 用の Lua デコンパイラ
  • luacov - busted および telescope がテストカバレッジを確認するために使用するシンプルなカバレッジ分析ツール
  • luacheck - 誤ったグローバル変数や定義されていない・影を落とすローカル変数を検出するシンプルな静的分析ツール
  • Metalua - AST を生成するために使用される純粋 Lua パーサーおよびコンパイラ。複数の他のツールがこのように Metalua パーサーを使用している。
  • LuaInspect - Metalua をベースにした Lua 最強のコード分析およびリントツール。ZeroBraneStudio などに使用されている。
  • LuaMinify - ミニファイアが、自らの静的解析ツール、レキサ、パーサーを備えたもの
  • Typed Lua - Luaに型を追加した、純粋なLuaにコンパイルされる言語
  • lua-parser - LPegLabelを使用して書かれたLua 5.3パーサーで、改善されたエラーメッセージを提供

実験的なものなど

  • punchdrunk.js - Moonshine + LÖVE APIの再実装 = ブラウザ上でLÖVEゲームを実行
  • luvit - Node.jsの基本アーキテクチャ(libUV)にLuaを上に重ねたものではなくJavaScriptを代用
  • graphql-lua - GraphQLのLua実装

Lua でスクリプト可能

  • luakit - 高速で小型であり、WebKitをベースにしたブラウザフレームワークでLuaで拡張可能
  • Hammerspoon - 強力で拡張可能なOS X自動化ツール。Mjolnirのコミュニティが維持するフォーク版
  • kpie - ウィンドウを操作するためのスクリプトツール
  • lumail - コマンドラインベースのメールクライアントで、広範なスクリプティング機能を備えている
  • AwesomeWM - X用の高度にカスタマイズ可能で拡張可能なウィンドウマネージャー。Luaでスクリプトおよび設定されている
  • Textadept - 極めて軽量でカスタマイズ可能で、マルチプラットフォーム対応のエディタ。ほとんどがLuaで書かれており、Luaでスクリプトされている
  • KoReader - 電子書籍リーダーアプリケーション。PDF、DJVU、EPUB、FB2など多数のフォーマットをサポートし、Kindle、Kobo、PocketBook、Androidデバイスで動作

その他

  • MoonScript - Moonscriptは、Luaにコンパイルされる動的スクリプティング言語。記述の冗長性を減らし、コンプリヘンションやクラスといった豊かな機能を提供。著者はこれを「Lua用のCoffeeScript」と呼んでいる
  • sitegen - MoonScriptを使用する静的サイトジェネレーター。HTMLおよびMarkdown、ページグループ化、プラグインをサポート

リソース

コミュニティ

  • lua-l - 公式のLuaメールリスト。Luaコミュニティの中心的な場の一つ
  • Lua.Space - Luaコミュニティのブログ
  • Lua Users Foundation - Luaとそのコミュニティおよびエコシステムを支援・推進する個人の協会
  • lua-users.org - Luaユーザー向けのサイト。IRCチャンネル、lua-lのウェブアーカイブ、大きなWikiを備えている
  • Conferences/Meetups
    • Lua Workshop - 開催地を変えながら毎年開かれる、Lua コミュニティの2日間の会合
    • Lua Conf - ブラジルで開催される年次1日間のLuaコンファレンス
    • FOSDEM - ブリュッセルで開催される年次2日間のF/OSS開発者会議(時々「Lua開発ルーム」が設けられる)

リファレンス

  • Reference Manual - Lua言語の公式定義
  • lua-users wiki - 公式ウェブサイトを補完する、大規模なコミュニティが維持するLuaに関する情報とリソースのコレクション
  • Lua Unofficial FAQ - Luaに関連するあらゆる質問への答え(「〜をどうやって〜?」といった形式の質問を多く含む)

用語集

スタイルガイド

  • Lua-users style guide - 一般的で高レベルのスタイルガイド;主観的でなく、容易に合意できる
  • Olivine style guide - 主観的で具体的であり、したがって厳密なガイド

チュートリアル

  • Lua Crash Course - 短時間で読める入門講座で、基本を忘れたときのリファレンスにもなります
  • Learn Lua in 15 Minutes - コメントがしっかり書かれた例ファイルで、基本的な内容をカバー
  • Learning Lua from JS - LuaとJavaScriptの類似点と違いについての概説;JavaScriptを学びたい人にとって、Luaへの入り口として非常に良い
  • lua-users tutorial - 初心者向けの詳細なチュートリアルのコレクション
  • Lua Missions - 「ミッション」と呼ばれるシリーズで、Luaのさまざまな側面を学ぶように設計されたチュートリアル
  • Creating an Image Server - OpenRestyを設定し、使用してシンプルな画像処理サーバーを構築する方法をステップバイステップに説明;OpenRestyを試すための素晴らしい出発点

記事

  • Embedding Lua in C - LuaをCプログラムに埋め込む方法についての導入的な解説。少し古いため、しかし依然として非常に良い解説。
  • Lua: Good, bad, and ugly parts - ZeroBraneStudioの開発者による、Luaの良い点、異なる点、悪い点、醜い点についての詳細な要約、多くの細かい特徴も含む
  • Lua states, libraries, coroutines and memory - Luaの仮想マシンのより高度な概念(特にCとのインターフェース)についての図解と説明

講演とスライド

  • Roberto’s Talks - Luaの首席アーキテクトが行った講演の歴史、各講演に付随するスライドを含む
  • Lua Workshop Talks - 年次ごとに行われるLuaワークショップで、高品質な講演が行われ、その講演の歴史はオンラインに公開されている、スライドも含む

書籍

  • Programming in Lua - Lua プログラミング全般を扱う公式入門書。Lua の主任設計者が執筆し、第3版まで刊行されています。初版はオンラインで閲覧できます
  • Lua Quick Reference - Textadeptの作成者が提供した、Lua 5.1から5.3までをプログラムし、埋め込むための迅速なリファレンス.
  • Programming Gems - Luaでの良好なプログラミングに関する既存の知見や実践を、さまざまな用途ケースにわたってカバーする記事のコレクション.
  • Lua Programming - Lua 5.2までを最新に更新した、言語の概要を短くまとめたもので、オンラインで利用可能.

その他のリスト

  • awesome-resty - このリストに似たものだが、OpenRestyに焦点を当てるもの.
  • awesome-love2d - このリストに似たものだが、ゲーム開発およびLÖVEプラットフォームに焦点を当てるもの.
  • Where Lua is Used - Luaで書かれたあるいはLuaで拡張可能な独立したプログラムを網羅した包括的なリスト。

コントリビューション

ご貢献を心よりお待ちしています!まずcontribution guidelinesを読んでください。

ライセンス

CC0

法令で認められる限り、Lewis J. Ellis はこの作品に関する著作権および関連する権利をすべて放棄しています。