いくつか方法がありますが、MATLAB Web App Serverを使う方法が他言語を全く書かずにWebアプリ化できるので、最も簡単です。他にはMATLAB Production Serverを使う方法が拡張性も高いです。それ以外にもMATLAB CompilerやCompiler SDKでMATLABスクリプトを実行ファイルやライブラリファイルにしてサーバーに置き、サーバーアプリケーション(NodeJS、PHPやJavaなど)からキックする方法などがあります。
2019/5/14 更新
(1) MATLAB Compilerを使ってWebアプリを作成し、MATLAB Web App Serverにホストする方法
セキュリティの関係からインターネット上ではなくイントラネット上での使用が推奨されていますが、App Designerで作成したGUIのアプリケーションを、HTMLやJavaScriptなどを書くことなく手軽にWebアプリケーション化できます。手元にApp Designerのアプリが無い場合でも、ドキュメントにWebアプリのサンプルもありますのですぐにお試しいただけます。
(2) MATLAB Production Serverを使った方法
下記の(3)や(4)の方法ではMATLAB Runtimeの起動時間が掛かったり、ユーザー数が増えて同時アクセスが大量に来た場合にサーバーのリソースが枯渇したりするのがネックになります。その際には MATLAB Production Server というサーバー製品を使うのがオススメです。RESTful APIというWebアプリケーションでよく使われるAPIがサポートされていたり、Java、Python、.NET、C++などからのアクセスもできるようになっているので、Webアプリケーションとの親和性が高く、インタフェースの実装に掛かる手間も少なくて済みます。また、キューイングの機能やMATLAB Runtimeの起動時間がないという特徴があるのでユーザーからの大量の同時アクセスに対して待ち時間なく処理を返すことができるようになります。
(3) MATLAB Compilerを使ってスタンドアロンアプリを作成しWebサーバーから呼び出す方法
MATLAB ComilerでMATLABのスクリプトからスタンドアロンのアプリケーション(Windowsならexeファイル、Linuxならshファイル)が作成できますので、これをサーバー側に置き、サーバープログラムから実行します。 ここでは簡単な例として、魔方陣行列をリターンするMATLABスクリプトをexeファイルに変換し、サーバープログラムとしてNodeJSを用いたWebアプリケーションの作成法を記します。MATLABスクリプトで結果をファイル(ここではresult.csv)に保存し、これをサーバープログラムから読み込ませます。
コンパイルするMATLABのスクリプト(magicSquare.m)
function out = magicSquare(n)
csvwrite('result.csv', out);
これをMATLAB CompilerでコンパイルしてmagicSquare.exeを作成し、後述するapp.jsと同じフォルダーに置きます。また、サーバーマシンにコンパイルしたMATLABと同じバージョンのMATLAB Runtimeをインストールする必要があります。インストーラーは こちら にあります。 サーバープログラム(NodeJSのapp.js)
var express = require('express');
var path = require('path');
var csv = require('comma-separated-values');
var child_process = require('child_process');
var qs = require('querystring');
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', function (req, res) {
res.sendFile(path.join(__dirname, 'index.html'));
app.post('/execMatlab', function (req, res) {
req.on('data', function (data) {
req.on('end', function () {
var inputData = qs.parse(body);
// execFile: executes a file with the specified arguments
child_process.execFile('magicSquare.exe', [String(inputData.inputNum)], function (error, stdout, stderr) {
console.error('stderr', stderr);
console.log(stdout.toString());
var csvData = fs.readFileSync('result.csv', 'utf-8');
var csvArray = new csv(csvData);
csvArray.forEach(function (array) {
res.writeHead(200, {'content-type': 'application/json'});
res.end(JSON.stringify(resultData));
var server = app.listen(3000, function () {
console.log('Server listening on port 3000');
クライアント(index.html)
<title>Magic Square</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="https://code.jquery.com/jquery-2.2.3.min.js"></script>
Matrix Order: <input type="number" id="inputNum" value="5" required/><br/>
<button onclick="exec()">Run</button>
<div id="result"><div class="data"></div></div>
var inputNum = $("#inputNum").val();
$.post('/execMatlab', {inputNum: inputNum}, function (data) {
for (var i = 0; i < data.length; i++) {
displayResult += String(data[i]) + '<br/>';
$(".data").replaceWith(displayResult);
サーバー側でNodeJSのライブラリなどをインストール(npm install)した後に、プログラムを実行します。
WebブラウザからサーバーのURL(下記の例ではhttp://localhost:3000)にアクセスし、画面からRunボタンを実行することでmagicSquare.exeからリターンされる魔方陣行列が表示されます。
(4) MATLAB Compiler SDKを使った方法
MATLAB Compiler SDKは共有ライブラリを作成できますので、MATLABスクリプトを例えばJavaやPythonなどのライブラリに変換し、JavaやPythonなどのサーバープログラムと連携してキックすることができます。