基本的なAliceScriptライブラリの開発

このチュートリアルでは、簡単なAliceScriptライブラリを作成することで.NETライブラリがどのようにAliceScriptで動作するかを学習します。


taiseiue | 2024-11-21

対応バージョン>=Alice3.0

はじめに

Visual Studio等で、クラスライブラリプロジェクトを作成してください。

次の表を参照して、ターゲットとなるAliceScriptの実装とライブラリのバージョンを合わせてください。

AliceScriptの実装 .NETバージョン
AliceScript .NET Core3.1
AliceSister .NetFramework 4.5
Losetta .NET6.0

適用対象

AliceScript2.3以前のバージョンに対応したライブラリを開発したい場合は、FunctionBaseを使用したAliceScriptライブラリの開発を参照してください。

ライブラリエントリポイントの作成

AliceScriptによってライブラリが、.NET相互運用ライブラリであると認識されるためには、publicかつAliceScript.Interop.ILibraryが実装されている事が必要です。

初めに、それぞれの実装に応じたライブラリを参照する必要があります。たとえば、AliceScriptで実装しているならAliceScript.dllの参照が必要です。

プロジェクトに、次のクラスを追加します。

MyLibrary.cs
using AliceScript;
using AliceScript.Interop;

namespace MyLibrary
{
    public class MyLibrary :  ILibrary
    {
        public string Name => "MyLibrary";

        public void Main()
        {
            //ライブラリエントリポイント
            Alice.RegisterFunctions<MyLibrary>();
        }
    }
}

関数の定義

関数バインドというテクノロジーを使用し、現在のMyLibraryクラスに静的メソッドを実装することで、AliceScriptで使用できる関数を定義できます。

ここでは、名前を渡すと「Hello,名前」という文字列が返却される関数を作成しましょう。関数の名前はGreetにします。(もちろん、異なる名前でも構いません。)

MyLibraryクラスに次のように追記します。

MyLibrary.cs
using AliceScript;
using AliceScript.Interop;

namespace MyLibrary
{
    public class MyLibrary :  ILibrary
    {
        public string Name => "MyLibrary";

        public void Main()
        {
            //ライブラリエントリポイント
            Alice.RegisterFunctions<MyLibrary>();
        }

        // ここから追記
        public static string Greet(string yourName)
        {
            return "Hello," + yourName;
        }
    }
}
  • 関数が定義されているクラス名は、そのまま名前空間の名前になります。
  • AliceScriptに公開するメソッドは、静的メソッドかつpublicである必要があります。
  • メソッド名は、そのまま関数の名前になります。
  • メソッドの引数や戻り値に使用できる型については、マーシャリングを参照してください。

完成

これでライブラリは完成です。実際に使ってみましょう。

Note

ここでは、aliceコマンドが使用可能な状態である前提で進みます。そうでない方は、alice.exeが導入されている場所にパスを通してください。

プロジェクトをビルドして、出力先のディレクトリでターミナルを開きます。 ターミナルで対話実行モードでaliceを起動します。具体的には、aliceコマンドを実行します。

初めに、次のように入力してビルドされたライブラリを読み込みます。(ファイル名は適時読み替えてください。)

AliceScript
import("MyLibrary.dll");

次に、名前空間を読み込みます。

AliceScript
using MyLibrary;

さて、最期に先ほど作成した関数を呼び出してみましょう。

AliceScript
greet("Alice");//出力例:Hello,Alice

これでチュートリアルは完了です。