Lua の Windows へのインストールと使い方

Lua は組み込み向けのスクリプト言語です。
今回は Lua の Windows へのインストール、使い方や exe の作り方について説明します。 また、 Emacs 用の編集モードの設定についても解説しています。

Lua とは

Lua はブラジル製のスクリプト言語で、ポルトガル語で「月」という意味らしいです。
Lua の大きな特徴は次の 2 つです。
  • 高速
  • 組み込み向け

高速

Lua の動作速度はスクリプト言語の中ではトップクラスです。
LuaVM という独自の 仮想マシン(VM) 上で動作し、これが速さの大きな要因の一つだと思います。 Ver. 1.9 以降の Ruby 、 Python の PyPy 、 JavaScript の V8 エンジンなど 高速化のためにスクリプト言語は内部的に VM を使うような流れにあります。 そんな中、 Lua は最初から VM を使うように設計されています。

VM では JIT コンパイルを行うとより高速化が期待できます。 本家の LuaVM はそこまではやっていないようですが、 JIT コンパイルまで行う LuaJIT も開発されています。

組み込み向け言語

Lua の売りはなんといっても、C, C++ アプリへの組み込みやすさです。

エディターをはじめとして、設定や機能拡張のためアプリケーションでスクリプト言語を使えるようにしたいことは多いです。 実際 Emacs では Lisp のインタープリターを内臓していますし、 MS Office では VBA が使えます。
Lua はそんなアプリへの組み込みをしやすいように作られており、ゲームの開発などでよく使われているらしいです。

因みに Emacs とよく比べられる Vim にも Vim 用のスクリプトはあります。 しかし、 Lisp のようなちゃんとした言語とは言い難く、この点に関しては Vim は各段に劣っていると思います。
そう思っている人は多いみたいで、 Lua 内蔵の Neovim のプロジェクトが立ち上がり、 多くのスポンサーを得たそうです。 なお、 Lua が組み込みやすいのは C, C++ で書かれたアプリです。 Java や .NET のような VM のアプリであれば、 JRuby, IronRuby といったその VM のスクリプト言語の方が移植しやすいです。 さらに最近では C, C++ でも Ruby を組み込み向けにした mruby という選択肢もあります。

言語仕様

言語仕様的には Lua はかなりシンプルです。 汎用プログラミング言語としては必要最小限の機能しかないといっても過言ではありません。
しかし、 Lua の良さは先ほどのアプリケーションなどへの 組み込みのしやすさ にあります。シンプルさによって軽量な処理系となり、組み込みしやすさにつながっています。 手軽に組み込める言語としては十分な機能だと思います。


言語の印象はというと、私は手続き型の JavaScript というイメージです。
テーブルという型が特徴的でオブジェクトと連想配列を兼ねていて、この辺はすごく JavaScript っぽいと感じます。 Lua ではさらに配列も兼ねています。

JavaScript のようにプロトタイプのオブジェクト指向もできるのですが、もともと手続き型として設計されていたらしく、ちょっと無理矢理感があって、やっぱり手続き型の言語だと感じました。
ただ、機能的にちゃんと準備されていないけど、"頑張ればできなくはない" という事が多いのも Lua の一つの特徴だと思います。

インストール

バイナリーの選択とダウンロード

Lua のバイナリーパッケージはいくつかのサイトで公開されています。
本家サイトからたどると Windows のバイナリーは 2 つのサイトが紹介されています。
  1. Lua Binaries Download
    exe のファイルだけでなく、組み込み用 dll のバイナリーも配布されています。 ただ、リンク先が間違えているのか、若干リンクがたどりづらいです。
  2. Lua - Joe DF's Builds
    exe と srlua が配布されています。最新版(5.3.0)が配布されています。(2015-3-14 時点)
このほかにも以下のサイトで配布されています。 ここのバイナリーはインストーラー形式で一見良さそうなのですが、開発が止まっているのか、バージョンが少し古いです。
最新版があり、わかりやすいので、ここでは 2 番目のサイト で説明を進めたいと思います。
インストーラーではないですが、インストールもそんなに難しくはないです。

まず、インストールする環境にあわせて 32 ビットまたは 64 ビット版の圧縮ファイルをサイトからダウンロードします。 lua_dl.png

なお srlua は Lua スクリプトから実行ファイル形式(exe)のプログラムを作るためのツールです。
こちらも後で使い方を説明していますので、興味がある場合はダウロードしてください。

インストール

ダウンロードした圧縮ファイル(lua-X.X.X_WinYY_bin.zip)を好きなところに展開します。 これだけで最低限のところは完了です。
よく使う場合には、さらに展開したフォルダーを環境変数 PATH に追加して下さい。

展開されたフォルダーには以下のファイルが入っています。
  • lua.exe
  • luac.exe
  • lua53.dll


srlua の圧縮ファイル(lua-X.X.X_WinYY_bin.zip)の場合も展開し、 PATH に追加します。 バージョンが同じであれば、 lua.exe と同じフォルダーに入れても構いません。
こちらには次のファイルが入っています。
  • glue.exe
  • srlua.exe
  • lua53.dll

使い方

Lua の主な使い方について紹介します。
  1. lua : スクリプトの実行
  2. lua -i : 対話モード
  3. luac : バイトコンパイル
  4. glue, srlua : exe ファイルの作成

スクリプトファイル

使い方の前に、 先にソースファイルについて簡単に説明します。

Lua ではファイルの拡張子には lua が使われます。

hello.lua :
-- サンプルファイル
print("Hello world!")
ソースファイルの文字コードはなんでも構いませんが、 Lua では日本語(マルチバイト)文字を認識しているわけではありません。 文字列の出力として日本語を表示したい場合、 Windows であれば Shift-JIS で書けばそれをそのまま表示します。

ただし、 UTF-8 を使う場合、スクリプトとして実行する時には BOM 付きでもなしでもいいのですが、 後で紹介する exe ファイルを作る場合は BOM なし にしていないとエラーとなります。

lua.exe : スクリプトの実行

スクリプトとして使う場合には、 lua にソースコードを渡して実行します。 これが Lua の一番基本的な使い方だと思います。
~/lang/lua/hello $ lua hello.lua 
Hello world!
-e オプションでワンライナーの実行もできます。
~/lang/lua/hello $ d:/usr/prog/lua/lua.exe -e "print(\"Hello world!\")"
Hello world!
また、ヘルプを表示する場合は -h オプションです。

lua.exe (-i) : 対話モード

lua(.exe) を -i オプションを付けて起動すると対話(インタラクティブ)モードで起動します。
~/lang/lua $ lua.exe -i
Lua 5.3.0  Copyright (C) 1994-2015 Lua.org, PUC-Rio
> 1 + 1
2
> print("Hello world!")
Hello world!
> 
引数にファイルを渡していた場合はファイルをロードして対話モードに入ります。

luac.exe : バイトコンパイル

luac を使うとソースファイルを中間コードであるバイトコードにコンパイルすることができます。 バイトコードは LuaVM 上で使うコードで、 Java でいえば、 class ファイルを作成するような処理です。
生成されるファイルのファイル名は-o オプションで指定します。(省略時 luac.out)
~/lang/lua/hello $ luac.exe -o hello.luac hello.lua 
~/lang/lua/hello $ ls
hello.lua  hello.luac
~/lang/lua/hello $ lua.exe hello.luac
Hello world!
luac はあまり使うことはないと思いますが、 バイトコードを直接実行した方が解析処理が減る分、多少速くなります。
なお、-s オプションをつけるとデバッグ情報を削るので、少しサイズが小さくなります。

実行ファイルの作成

gluesrlua.exe を使うと、 lua のスクリプトファイルを実行可能な exe ファイルにすることができます。

ただし、 C++ のように機械語にコンパイルするのではなく、 srlua.exe と動作させたい lua のスクリプトファイルを glue プログラムでくっつけるような感覚です。
  $ glue "srluaのPATH" "スクリプトファイル" "生成ファイル名"
~/lang/lua/hello $ glue d:/usr/prog/lua/srlua.exe hello.lua hello.exe
引数の srlua.exe はコマンドとして使うわけではないので、 ファイルの場所がわかるようにパスで指定する必要がありますし、 .exe も省略できません。


なお、 生成したファイルの実行には luaXx.dll も必要です。 exe と同じフォルダーまたはパスの通ったフォルダーにおいて置かなければならず、 配布する場合などには注意が必要です。

Emacs モードの設定

Lua のソースファイルの編集には Emacs を使います。 Lua 編集のための Emacs の設定について説明します。


Lua 用の Emacs モードは lua-mode で、 これはパッケージマネージャーから簡単にインストールすることができます。 インストールすると .lua のファイルを開いた時に lual-mode になります。



lua モードとして特有なコマンドは次の 2 つです。
コマンド 機能
C-c C-f カーソル位置の関数の説明を表示。
C-c C-l バッファーを実行


関数の説明はブラウザーを起動して対応箇所の説明を表示します。 ただし、説明は英語です。


また、 Emacs では編集中のコードを Lua のインタープリターに渡すことができます。 C-c C-l
でバッファー全体を実行します。
インタープリターは lua-default-application の変数で指定することができます。
ただ、 デフォルトで "lua" なので、パスが通っているところにおいていれば、特に指定する必要はありません。 設定する場合は以下のような記述を ~/.emacs.d/init.el に記述します。
(setq lua-default-application "d:/usr/prog/lua/lua.exe")
なお、 私の環境では Windows のせいか上手く実行しませんでした。



関連記事
Prev.    Category    Next 

Facebook コメント


コメント

コメントの投稿

Font & Icon
非公開コメント

このページをシェア
アクセスカウンター
アクセスランキング
[ジャンルランキング]
コンピュータ
114位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
15位
アクセスランキングを見る>>
カレンダー(アーカイブ)
プルダウン 降順 昇順 年別

12月 | 2025年01月 | 02月
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -


はてな新着記事
はてな人気記事
ブロとも申請フォーム
プロフィール

yohshiy

Author:yohshiy
職業プログラマー。
仕事は主に C++ ですが、軽い言語マニアなので、色々使っています。

はてブ:yohshiy のブックマーク
Twitter:@yohshiy

サイト紹介
プログラミング好きのブログです。プログラミング関連の話題や公開ソフトの開発記などを雑多に書いてます。ただ、たまに英語やネット系の話になることも。