Luaに関する10のコト。Luaはもう駆逐されてしまったのか
みなさんは、Lua(ルア)をご存知でしょうか。一部の技術者は「Luaは落ち目であり、他の言語に駆逐された」と評価されています。本当でしょうか。結論をいえばLuaはまだ駆逐されてはいません。その理由を『Luaに関する10のコト』と題して網羅的に解説します。
Luaとは
『Lua』(ルア)とは、ポルトガル語の「月」を語源とするスクリプト言語です。
スクリプト言語はプログラミング言語の分類の一つであり「台本・脚本」という意味があります。とくに「分かりやすく、より簡単に記述できるもの」を指します。
Luaの利点
■クロスプラットフォームであり、言語に依存せず機能を搭載できる
■オブジェクト指向プログラミングが可能であり、ガベージコレクションなどの機能を最初から有する
■スクリプト言語・組み込み言語としては最速の部類に入る
Luaは、Windows、Mac、Linux、etc、といった様々なOS上で動作します。
またLuaはオブジェクト指向プログラミングが可能であり、ガベージコレクションなども搭載しています。さらに各種言語用のバインダー(後述)も多く開発されたことや、スクリプト言語としても最速クラスであったため、組み込み用の言語として長年使われてきました。
Luaの欠点
■Luaは標準ライブラリが少なく、他のライブラリを用いると依存性が高まる
■オブジェクト指向の定義方法が言語に規定されていない
■Luaは言語仕様・その構造的に、セキュリティ確保が難しい
まず、Luaは標準で使えるライブラリの数が少ないという欠点があります。Luaが標準的にサポートするのは、CのAPIを用いて実装できる範囲(参考)に留まるため、他の機能は組み込む側に委ねられています。環境毎に互換性が減り、依存性が高くなります。
またLuaは、オブジェクト指向プログラミングに対応しています。オブジェクトはハッシュテーブルで定義され、シンタックスシュガー(糖衣構文)により効率的にアクセスできます。されどLuaによるオブジェクト指向の実装方法は利用者に任されており、プロジェクト毎に実現方法が異なる可能性がある点は、明確な欠点となります。
更にLuaはメタテーブルの使用が必要となる場面が多く、これらのアクセスを禁止することができません。なぜならメタテーブルにはシステム的な情報と一緒に、オブジェクト指向やリフレクションに必要な情報も記録されているからです。加えてLuaは難読化が可能ですが、多くの場合リソースとしてローカルファイルに保持されるため、改ざんによるセキュリティリスクが他の言語より高いという欠点を有します。
Luaをスクリプトとして採用するには
■C言語(本家)
■C++(Sol2)
■Java(JNLua)
■C#、VB.Net(LunaRoad)
LuaはCをメインとしていますが、多くの言語でバインダーが公開されています。バインダーとは、Luaと変数やオブジェクト(インスタンス)をバインド(接続)して使うためのライブラリのことです。
なお、ここであげた例は一例であり、別のプログラミング言語を使用する場合等は
「http://lua-users.org/wiki/BindingCodeToLua」へアクセスして確認できます。
Luaを採用したシステム例 – Wikipedia
ここからは、Luaを採用したシステム例を3つ紹介します。
『Wikipedia』(ウィキペディア)は、『MediaWiki』(メディアウィキ)を用いた世界的に有名な、事典プロジェクトです。詳細は掲載しているリンクをたどってください。このメディアウィキにはテンプレート機能があります。そのテンプレート機能では詳細な制御内容を書く場合に煩雑となるため、Luaを用いて内容を記述することができます(参考)。
Luaを採用したシステム例 – FlashAir
『FlashAir』はTOSHIBAが開発するWi-Fi内蔵の高機能SDカードです。『FlashAir W-03』シリーズ以降、内部にLuaを用いた機能拡張が可能になっています。使用する機器はSDカードにさえ対応していればよいため、Wi-Fi未対応のデジタル一眼レフカメラをクラウド対応機のように振る舞わせることや、ポメラDM100はEvernote連携などが可能になっています。
またUSBタイプのSDカードリーダーを常にコンセントに接続しておけば、メディアサーバーやウェブサーバーを構築したり、PCに接続してGPIO制御ボードの代わりにするといった応用的な使い方も可能です。
Luaを採用したシステム例 – Mdiapp+ SE
『Mdiapp+ SE』(通称:マルチプラスSE)は、日本人開発者が主導するペイントソフトです。主にデジタル漫画を描く機能を中心に開発されていますが、水彩塗りや厚塗りといった表現も可能です。特に、ブラシスクリプトと呼ばれるLuaを用いたオリジナルのブラシを開発し使うことが可能です。なお、拙作のオリジナルブラシも公開しており、多くの利用者から支持を得ています(参考1、参考2)。
Luaの開発環境
Luaを公式サイトからインストールすれば、コマンドラインで使える対話型の実行環境・開発環境が仕えます。またはIDE(統合開発環境)を利用するなら『Eclipse』プラグインの『ldt』(Lua Development Tools)や、Windowsなら『vscode-lua』や、『Lua IDE Decoda』も選択できます。
また、入門用途であれば『codepad』を用いてウェブサイトだけで動作確認が可能であり、Luaの習熟は比較的簡単だといえます。
Luaでのデバッグ方法
Luaでデバッグを行う場合は、標準ライブラリである「debugパッケージ」を使うか、デバッガを用います。
また組み込み用のLuaであれば、スタブコード(環境固有のAPIに対する振る舞いをデバッグ用に仮作成したコード)の定義が必要となります。
Luaで使えるデバッガとしては『LUPE』(CUI、Lua自体による実装)と、『Lua IDE Decoda』(IDE)などがあります。特に、DecodaはLuaを実装したアプリケーションの実行可能ファイル(exe)を指定すると、スタブを自動生成する機能を有しており、ぜひ活用したい機能となっています。
Luaが駆逐されない5つの理由
本文で解説した3つの理由
■既に様々なシステムで採用されているから
■高速であり、組み込み用途に向いているから
■無料で高機能なIDEが登場し、デバッグ機能を有しているから
さらに今後の動向における2つの理由
■IoTやネットワーク制御において今後の需要増加が見込めるから
■UnityやCocosなどのゲームエンジンの需要増により、Lua自体の需要増も見込めるから
Luaは、『R』(統計に特化した言語)や、Python(AI方面の開発言語として注目)と比べると、魅力が少なく見えているかもしれません。しかし今後IoTの発展によりLuaの需要も再度高まることと、ネットワーク制御の分野でLuaは地位を確立しているため心配は無用です。
そしてUnityやCocosなどのオープンなゲームエンジンへの需要も増加しており、Luaが近い内に駆逐されてしまうことはないと断言し、この記事を終えます。最後まで読んでくださり、ありがとうございました。
▼キャパの公式Twitter・FacebookではITに関する情報を随時更新しています!