Mapleトップページ
サポート・マニュアル

FAQ自分で作ったMapleプログラムをパッケージ化して他者に配布するにはどうすればよいですか?

自作プログラムの再配布には主に2つの方法があります。もっとも単純な方法は自作関数をテキストファイルとして保存し配布する方法です。自作の関数を myfunc として定義した場合、 save コマンドで指定したファイル名で自作関数のコードを保存することができます。外部ファイルで保存したプログラムを読み込むには read コマンドを用います。以下の例を参照してください。

>interface(echo=3):# Maple 言語が読まれるようにエコーレベルを上げる
>myfunc:=proc(N)return(N+1);end proc:#自作関数定義
>save myfunc,"C:\\myfunc.m";#自作関数を myfunc.m で保存
>restart;#カーネルを初期化
>read "C:\\myfunc.m";#保存ファイルを読み込み
>myfunc(10);#適宜値を代入し計算を実行

ここで保存した myfunc.m ファイルを他者に配布できます。
なお、save コマンドによる保存は、テキスト形式での保存となるため自由にコードを改変することが可能です。コードの変更を許可したくないような場合、またはコードを公開したくない場合は、次に説明する LibraryTools パッケージを利用したバイナリによるライブラリ保存を用いてください。

① LibraryTools パッケージを使うと、自作の関数(群)をバイナリのライブラリ(*.lib ファイル)として保存することができます。ライブラリへの保存には、

  1. 定義したすべての関数群をライブラリへ登録する
  2. 定義した関数群のうち必要な関数のみをパッケージ化してライブラリへ登録する

の 2 つの方法があります。
関数群を単純にライブラリへ登録した場合、登録されているすべての関数群を利用することができます。一方、パッケージ化して登録された場合、ユーザーは許可された関数についてのみ利用できます。なお、パッケージ化には module 構文を用います。

定義したすべての関数群をライブラリへ登録する場合

まず、自作の関数群を定義します。

> myfunc1 := proc(N) return(N^2+1); end proc:
> myfunc2 := proc(N) return(N^2-1); end proc:


LibraryTools パッケージを呼び出し C:\直下のmylib.lib ライブラリを作成して定義した 2 つの関数を登録します。

> with(LibraryTools):
> Save(myfunc1, myfunc2, “C:\\mylib.lib”);


Maple カーネルを初期化します。

> restart;

mylib.lib ライブラリを利用するには Maple の環境変数 libname に mylib.lib の存在するディレクトリを追加します。

> libname := “C:\\”, libname;

以上で定義した myfunc1 と myfunc2 を利用できます。

> myfunc1(10);
> myfunc2(10);


他のユーザーにこのライブラリを使用させる場合は、C:\内の mylib.lib ファイルと mylib.ind ファイルの 2 つを配布してください。

定義した関数群のうち必要な(公開可能な)関数のみをパッケージ化してライブラリへ登録する場合

ライブラリ化した関数群は Maple の環境変数 libname にライブラリの場所を指定するだけで定義した関数を利用できました。一方で、内部処理のためのサブルーチンや変数を秘匿したい場合は、module 構文を用いて必要な関数群のみを利用可能にするパッケージ化が有効です。パッケージ化を行うには option package 文を module の定義で用います。パッケージ化されたライブラリは、libname へのディレクトリの追加を行った上で with コマンドによる呼び出しが可能になります。
例えば、次のようなパッケージ化するコードを用意します。

> restart;
> mymodule := module()
 export myfunc1; # myfunc1のみユーザーが利用可
  local myfunc2;? # myfunc2は内部用
 option package;? # このモジュールをパッケージとして宣言
# myfunc1, myfunc2の実体を定義
  myfunc1 := proc(N)
  return(myfunc2(N)^2+1);
 end proc;
 myfunc2 := proc(N)
 return(N^2-1);
  end proc;
end module:

以上で mymodule というモジュールが構成できました。ライブラリとして保存し Maple カーネルを一旦初期化します。

> with(LibraryTools):
> Save(mymodule,“C:\\mymodule.lib”):#ライブラリへ登録
> restart;

定義したパッケージを読み込むため、libnamemymodule.lib のパスを追加し with コマンドでパッケージを呼び出します。

> libname := “C:\\”, libname;
> with(mymodule);
> myfunc1(10);

mymodule の定義において myfunc2local として宣言されているため、mymodule をロードしてもユーザーは myfunc2 を利用することはできません。

また、パッケージ化したライブラリを再配布するときは ind ファイルと lib ファイルの双方を配布し、同一ディレクトリに保存する必要があります。


FAQ Mapleへ



お問い合わせ サイバネットシステム株式会社 システムCAE事業部
TEL: 03-5297-3255 (受付時間 9:00〜12:00 / 13:00〜17:30 ※土日祝及び弊社休業日を除く)
メールでのお問い合わせ  お問い合わせフォーム  お問い合わせ一覧

モデルベース開発