Luli

Lua言語用ソースコード静的解析ツール

そのコード、luli が直します

お知らせ

  • 2015/06/15
    luli ver.1.0.5 をリリースしました。
    Lulifile の ngx オプションが機能しない件を修正しました
    Lulifile に indent-size オプションを追加しました
  • 2015/04/30
    luli ver.1.0.4 をリリースしました。
    -ngx オプションを追加しました。ngx モジュールを無視するようになります。
  • 2014/06/05
    luli ver.1.0.3 をリリースしました。
    複合名によるモジュールのロードに対応しました。
  • 2014/05/26
    luli ver.1.0.2 を リリースしました。
    使用する Unicode ライブラリを変更しました。
  • 2014/05/20
    luli ver.1.0.1 を リリースしました。
    モジュールのロードに関するエラーが表示されない現象を修正しました。
  • 2014/04/30
    luli ver.1.0.0 を リリースしました。

luliとは?

luli は、株式会社時雨堂が開発・販売する Lua 言語用ソースコード静的解析ツールです。
Lua 言語(※1)を静的に解析し、ソースコードに対し厳密な検査を行うプログラムです。

(※1)Lua 言語は高速な動作や高い移植性、組み込みの容易さなどの特長を持ち、非常に動的で柔軟な仕様の言語である反面、
開発者によってソースコードにばらつきが生じたり、プログラムを実行してみないとミスに気付かなかったりといった問題が
起こりがちです。

luli を導入することにより、Lua で書かれたソースコードのミスを簡単に発見したり、
プロジェクトやチーム単位でソースコードのコーディングスタイルを統一したりすることができます。
その結果、これまでソースコードの確認や修正にかかっていた時間を短縮し、開発やメンテナンスの負荷を軽減することが可能です。

luliの特長・詳細

コーディングスタイルを統一する

luli は、プロジェクトやチーム内でソースコードのコーディングスタイルを統一させるのに役立ちます。
各開発者ごとにソースコードがばらつくことを防ぎ、誰にも読みやすく保つことが可能です。
また、luli があれば、開発の際にいちいちコーディング規約と突き合わせて確認する必要はありません。(※2)

(※2)Lua 言語には正式なコーディングスタイルがないため、 luli 用のコーディングスタイルを用意しました。
今後のバージョンでは、プロジェクトに合わせてコーディングスタイルをカスタマイズできるようにする予定です。

  • 文法エラーを検査し、実行できないコードをリポジトリに残さないようにする
  • アンチパターンを発見する
  • 変数名や関数名のスペルチェックを行う
  • 外部ファイル (ライブラリ) の情報を含む検査を行う
  • サーバでリポジトリに対して実行したり、設定ファイルをプロジェクトやチームで共有したりする

効率の良い開発を支援する

Lua で書かれたプログラムは、実行してみないとミスに気付かないという問題が起こりがちでした。
luli は、ソースコード内のバグにつながりやすいミスをプログラムの実行前に指摘し、実行回数を大幅に削減することができます。
また、その際 luli の実行にかかる時間はごくわずかです。 luli は強力な型システムと高速さを備えた OCaml 言語で実装されており、
エラーの原因を瞬時に発見します。

  • クライアントだけでなくビルドサーバなどと連携してエラーを発見する
  • 実行時に発生する可能性のあるエラーを発見する
  • cocos2d-x 向けの支援を行う
  • Vim や Emacs 等のエディタと連携させることで、コードの編集後、瞬時にエラーを発見する
  • 型情報を推測する (ベータ機能)

動作サンプル

実行ボタンを押し、luli から指摘されたミスを修正したら、再度実行ボタンを押しましょう。

ライセンス料金

ユーザライセンス

ユーザ 年額料金(税別)
1 12,000
10 108,000

luli を使用するユーザ数に合わせて購入いただくライセンスです。

【 例 】 1つのプロジェクトで5人のプログラマがそれぞれ luli を使用する場合
¥12,000 × 5ユーザ = ¥60,000 (年額)
  • ※ luli を複数台のマシンにインストールして使用しても、同一ユーザが使用するのであれば、追加のライセンス料金は発生しません。
  • ※ ユーザAが luli を使用しなくなった場合、その後代わりにユーザBがそのライセンスを引き継いで使用しても、追加のライセンス料金は発生しません。

インストールライセンス

サーバ 年額料金(税別)
1 600,000

luli をインストールするサーバの台数に合わせて購入いただくライセンスです。
主に不特定多数のユーザが使用するようなサーバにインストールすることを想定したライセンスです。

【 例 】 ビルドサーバ1台とリポジトリサーバ1台にそれぞれ luli をにインスト−ルして使用する場合
¥600,000 × 2台 = ¥1,200,000 (年額)
  • ※ luli をビルドサーバやリポジトリサーバにインストールした後、何人のユーザが使用しても、追加のライセンス料金は発生しません。

機能一覧

コーディングスタイルの検査

  • インデントの検査
    • タブとスペースの混在を検出する
    • 不適切な深さのインデントを検出する
  • スペースの検査
    • 演算子の前後のスペースの過不足を検出する
    • 括弧(丸括弧、角括弧、波括弧)の前後のスペースの過不足を検出する
    • コンマ、ドット、コロンの前後のスペースの過不足を検出する
    • 行末の不要なスペースを検出する
  • 改行の検査
    • ファイルの末尾の空行を検出する
  • コメントの検査
    • "--"(ハイフン2つ+スペース1つ)で始まっていないコメントを検出する
    • 直前に2つ以上のスペースがないインラインコメントを検出する
  • 行と文の検査
    • 一行の文字数が 80 文字以上である行を検出する(基準となる文字数は変更可)
    • 一行に複数の文が記述されている行を検出する
    • 終端にセミコロンのある文を検出する
  • リテラルの検査
    • ダブルクオートで囲まれた文字列を検出する

ソースコードの解析

  • 変数の解析
    • 未使用のローカル変数を検出する
    • 未代入の変数を検出する(可能であればスペルミスを指摘する)
    • 既存の変数を隠蔽しているローカル変数を検出する
    • 重複するローカル変数定義を検出する
    • 初期値に匿名関数を代入しているローカル変数定義文を検出する
    • グローバル変数として定義されている変数を検出する
    • グローバル変数への再代入を検出する
    • グローバル関数として定義されている関数を検出する
    • 大文字を含む(snake_case でない)識別子を検出する
  • 式の解析
    • 空の文字列を連結している式を検出する(文字列へのキャストを目的とした文字列連結演算子の使用)
    • テーブルのインデックスに 0 (数値リテラル)を指定している式を検出する
  • モジュールの解析
    • モジュールの循環参照を検出する
  • 制御フローの解析(実験的機能)
    • 実行されないブロックを検出する
    • 意味のない条件式を検出する
    • 不要な括弧で囲まれている式を検出する
  • 型情報の解析(実験的機能)
    • 実引数の数の過不足を検出する(標準ライブラリの関数のみ)
    • 実引数の型の間違いを検出する(標準ライブラリの関数のみ、実引数はリテラルと一部の式のみ)

テキストエディタとの連携

  • テキストエディタから luli を実行するプラグイン(Vim, Emacs)
  • ソースコードの解析情報を利用する(実験的機能、現在は Vim のみ)
    • 変数・関数の型情報を表示する
    • リテラルが初期値に代入されている変数の内容を表示する
    • 変数・関数が定義されている箇所に移動する

スクリーンショット

コマンドラインのサンプル

Vim プラグインのサンプル

動作環境

  • Mac OS
    • 10.10
  • Linux
    • CentOS 6.6
    • Ubuntu 14.04
  • Windows (対応予定)

製品サポート

  • 製品の技術的なお問い合わせに対する回答
    • サポート専用のEメールアドレスにて受付
    • 当社営業時間(平日10:00-17:00)内の対応
  • 製品アップデータの提供

お問い合わせ

  • 製品に関するご質問・ご要望は、下記までお寄せください。
    • luli@shiguredo.jp