ユーザ作成プログラムを配布するには
Mindの実行ファイルを複写して他のディレクトリへ、あるいは他のPCに持っていくなど、他の環境に移した上で動作させるには多少の注意が必要になりますが、他のプログラム言語にくらべるととても簡単です。ここではユーザが作成したプログラムをパッケージ化したり他者に配布する方法について説明します。
まず、Mind9で開発したプログラムは、GUIアプリケーション、コンソールアプリケーションともに自己完結しており、他のソフトウェアをOSにインストールする必要はありません。たとえば、配布先で .NET をインストールしておく、あるいは Javaランタイムをインストールしておくといったような必要はなく、ここで示す手順でプログラムをパッケージ化しておけば別の環境で直ちに走行できます。
再配布できるファイルについて
READMEファイル(Mind9\README-mind9-windows.txt)の中の「ライセンス」セクションに再配布に関する注意書きがありますので併せてお読み願います
ユーザが作成した成果物(プログラムのソースコード、ドキュメント、実行ファイル)に、その実行に必要となるランタイムファイル(MindのランタイムとTcl/Tkのランタイム)を加えたものが再配布可能なものとなります。
前記成果物およびランタイムファイル以外のファイル群は配布できません。たとえば、bin/ に含まれる各種ツールの実行ファイル、file/ や guilib/ その他に含まれるソースコード、ライブラリファイルなどは再配布できません。
GUIアプリケーションの場合
GUIアプリケーションを他環境で動作させるために必要なファイルは以下の通りです。
以下の説明では仮に、ユーザ作成プログラムを test1 (ソースファイルは test1.src) とします。
(標準構成)
プログラム格納場所\
|
+-- test1.exe ←ユーザプログラムの起動用実行ファイル
+-- test1.mco ←ユーザプログラムのMコード(実質的実行ファイル)
+-- mrunt102.exe ←Mindランタイム(GUIアプリケーション用)
|
+- ( msvcrt.dll ) (←必要であれば)
|
+-- tcl86t.dll ←GUIで必須なTcl/Tkランタイム(インターフェース部)
+-- tk86t.dll ←同上
+-- zlib1.dll ←同上
|
+-- tclruntime\ ←Tcl/Tkランタイム本体が入る(これはフォルダ)
|
+--
+--
注:test1.exeはアプリケーションに関係なく固定で
約200KBのサイズです
注:mrunt102.exeは アプリケーションに関係なく固定で
約400KBのサイズです
注:tclruntime フォルダはアプリケーションに関係なく
固定で約8MBのサイズです
Mindで作成したアプリケーションが複数のフォルダに分かれている場合ですが、それぞれにTcl/Tkランタイムを格納する方法では
tclruntime\ フォルダ(約8MB)のディスク消費が重複するため、以下の代替構成が使えます。
(代替構成)
プログラム格納場所1\
|
+-- test1.exe ←ユーザプログラム1の起動用実行ファイル
+-- test1.mco ←ユーザプログラム1のMコード(実質的実行ファイル)
+-- mrunt102.exe ←Mindランタイム(GUIアプリケーション用)
|
+- ( msvcrt.dll ) (←必要であれば)
|
+-- tcl86t.dll ←GUIで必須なTcl/Tkランタイム(インターフェース部)
+-- tk86t.dll ←同上
+-- zlib1.dll ←同上
プログラム格納場所2\
|
+-- test2.exe ←ユーザプログラム2の起動用実行ファイル
+-- test2.mco ←ユーザプログラム2のMコード(実質的実行ファイル)
+-- mrunt102.exe ←Mindランタイム(GUIアプリケーション用)
|
+- ( msvcrt.dll ) (←必要であれば)
|
+-- tcl86t.dll ←GUIで必須なTcl/Tkランタイム(インターフェース部)
+-- tk86t.dll ←同上
+-- zlib1.dll ←同上
tclruntime\ ←Tcl/Tkランタイム本体が入るフォルダ
| (プログラム1とプログラム2で共用する)
+--
+--
上記のようなファイル群をたとえば ZIp ファイルに固めて他環境に持って行き、そこで解凍すればその環境でMindのGUIアプリケーションが走行できます。
アプリケーション自身の実行ファイル(.exe, .mco)のほかにMindのランタイムとTcl/Tkのそれが加わることでパッケージサイズのことを気にされるかも知れません。確かに tclruntime\ は多少大きいですが、複数のMindアプリケーションを含めた場合、tclruntime\ は共有されるので1つあれば良く、多くのプログラムを収容するほどパッケージに占めるランタイムサイズの割合は小さくなります。
注1: msvcrt.dll については、READMEファイル(Mind9\README-mind9-windows.txt)の中の「解凍とインストール」−「Cのランタイムについて」のセクションで解説しているのでお読み願います。
注2: 上の図には記しませんでしたが、まれに、Mindのアプリケーション起動時に vcruntime140.dll が見つからないというエラーが出ることがあり、その注意書きが、プログラミングマニュアル(GUI編)−「3.Mindの原理(コンパイラの使い方)」−
「小さなGUIアプリケーションの起動テスト」 のセクション(グレーの囲み記事)で解説しているのでお読み願います。
コンソールアプリケーションの場合
コンソールアプリケーションを他環境で動作させるために必要なファイルは、GUIアプリケーションのそれに比べると大幅に少なくなります。
先と同様に、ユーザ作成プログラムを test1 (ソースファイルは test1.src) と仮定します。
(標準構成)
プログラム格納場所\
|
+-- test1.exe ←ユーザプログラムの起動用実行ファイル
+-- test1.mco ←ユーザプログラムのMコード(実質的実行ファイル)
+-- mrunt002.exe ←Mindランタイム(コンソールアプリケーション用)
|
+- ( msvcrt.dll ) (←必要であれば)
注:test1.exeはアプリケーションに関係なく固定で
約45KBのサイズです
注:mrunt002.exeはアプリケーションに関係なく固定で
約400KBのサイズです
アプリケーション自身の実行ファイル(.exe, .mco)のほかにMindのランタイムが加わることでパッケージサイズのことを気にされるかも知れませんが、mrunt002.exeは比較的小さく、パッケージが大きくなるほどのものではありません。
また、1つのフォルダに複数のコンソールアプリケーションを含めた場合、mrunt002.exeは共有されるので1つあれば良く、多くのプログラムを収容するほどパッケージに占める mrunt002.exe の割合は小さくなります。
注1: msvcrt.dll については、READMEファイル(Mind9\README-mind9-windows.txt)の中の「解凍とインストール」−「Cのランタイムについて」のセクションで解説しているのでお読み願います。
注2: Mindを開発しているPCの中で、アプリの .exe と .mco ファイルのみを他のディレクトリに複写し、そちらで起動してみると動作します。しかしそれを見て「mrunt002.exeは不要だ」と思わないでください。(開発PCにUSBメモリを刺してそこに複写した場合も同様です)
コマンド プロンプトでのMind作業中は Mind9\bin にPATHが通っていることから、そのようなケースでは mrunt002.exe が無くても起動できます(Mind9\bin\mrunt002.exeが密かに起動するため)。
しかしこれは不完全な状態であり、たまたま動いたにすぎません。どのような状況であっても動作するには mrunt002.exe の複製は必要です。