Haxe/Nekoでコマンドラインツール制作入門


Haxeでは制作できるのは、JavaScriptや、Flash、スマホアプリだけではありません。Neko出力を使うことで簡単にコマンドラインツールを制作することが出来ます。

FlashDevelopにはHaxe/Nekoのプロジェクトがあるので、これを選択することで簡単にHaxe/Nekoのツールを制作することができます

こんにちは!!

srcフォルダに以下のようなHaxeファイルを書きます。

src/Main.hx
class Main {
    static function main(){
        Sys.println( "こんにちは!!" );
    }
}

HaxeからNekoへコンパイルする。

コマンドラインからコンパイルする場合、以下のようなコマンドを使います

haxe -cp [ソースの入ったフォルダ] -main [メインクラス] -neko [出力ファイル(*.n) ]

例:

haxe -cp src -main Main -neko test.n

生成したNekoファイルを実行する。

さきほどの例で生成したtest.nファイルは以下のコマンドで実行できます。

neko test.n
こんにちは!!

基本的な使い方

標準出力

class Main {
    static function main() {
        Sys.print( "Hello, " ); //Helloを出力
        Sys.println( "World" ); //Worldを出力して改行
    }
}

パラメータを取得

Sys.args()関数を使うことで、パラメータとして与えられた文字列を取得することが出来ます。

class Main {
    static function main() {
        var args = Sys.args();
        Sys.println( args[0] + ", " + args[1] );
    }
}

コマンドを実行すると

neko Test.n -hoge fuga

以下のような出力がされます

-hoge, fuga

標準入力

import haxe.io.Input;

class Main {
    static function main() {
        var input:Input = Sys.stdin();

        input.readLine(); //標準入力を一行読み込み
        input.readAll();  //標準入力を最後まで読み込み
    }
}

ファイル操作

import haxe.io.Output;
import sys.FileSystem;
import sys.io.File;

class Main {
    static function main() {
        if ( FileSystem.exists( "tmp" ) ) { //ファイルの有無を調べる
            if (! FileSystem.isDirectory( "tmp" ) ) { //ディレクトリかどうかを調べる。
                FileSystem.deleteFile( "tmp" ); //ファイルを消去
                FileSystem.createDirectory( "tmp" ); //ディレクトリを作成
            }
        }else{
            FileSystem.createDirectory( "tmp" ); //ディレクトリを作成
        }

        var file:Output = File.write( "tmp/Main.hx" ); //ファイルへの書き込みを開始。

        //ファイルへの書き込み
        file.writeString( 
            "class Main{ static function main(){ Sys.println( \"hello\" ); } }"
        );

        file.close(); //ファイルへの書き込みを終了

        //コマンドを実行
        Sys.command( "haxe", ["-cp","tmp","-main","Main","-neko","tmp/Hello.n" ] );
    }
}