OutSystemsは魔法じゃないと気付いたとある会社員の学び



はじめに


OutSystemsとは?

OutSystemsの超概要をご覧下さい。


言いたいこと

  • OutSystemsは優れたツールです
  • しかしながら、OutSystemsにもよくないところはあります
  • それらを理解した上でOutSystemsを使わないと「思ってたんとちがう」となります

これまでの経緯

  • 2014年にOutSystemsをあるプロジェクトに導入
  • 導入当初は自分でOutSystemsを使うよりも企画、マネジメント中心
  • 2017年からシステム開発について真面目に勉強するように(DDD、クリーンアーキテクチャー、JavaScript、Python、C#、テストコード、Git、アジャイル・・・)
  • この半年ほどは自分でもOutSystemsを利用するように

するとどうなったか?

  • PythonならできるxxxがOutSystemsではできんやん!
  • Jasmineなら簡単に書けるテストコードがOutSystemsだと面倒臭い!

などと今更気付く(2014年に気付いていれば・・・)。みなさんに同じ思いをしてもらいたくないので、OutSystemsのイマイチと思うところを共有します。


OutSystemsのイマイチなところ

  • DBと密結合
  • Actionの引数にActionを設定できない
  • ビルド(Publish)が遅い
  • 周辺ツールが充実していない
  • IDEが弱い
  • コードがテキストじゃない

DBと密結合

  • テストにDBが必須
  • テストデータの分離ができない
    • 自動テストのデータとマニュアルテストのデータの分離
    • チーム間で利用するデータの分離

Actionの引数にActionを設定できない

例えばActionを渡せると以下のように書ける(わかりやすくするためJavaScriptで書いています)。

テスト実行ユーティリティ.js
function testExecution(testScenario, fn) {
  var testResult = fn(testScenario);
  saveTestResult(testScenario, testResult);
}
呼び出し処理.js
var testScenarios = getTestScenarios(getActionName(testAction));
for(var i = 0; i < testScenarios.length; i++) {
 testExecution(testScenarios[i], testAction);
}

Actionを渡せないと以下のように書くことになる。

呼び出し処理.js
var testScenarios = getTestScenarios(getActionName(testAction));
for(var i = 0; i < testScenarios.length; i++) {
 // 自分でテストを実行し、結果を保存する必要がある
 var testResult = testAction(testScenarios[i]);
 saveTestResult(testScenarios[i], testResult);
}

ビルド(Publish)が遅い

  • 昔と比べて速くなった
  • OutSystems11になってできたService eSpaceは特に速い
  • それでもTDDする(レッド、グリーン、リファクタリングのループを回す)には遅い

周辺ツールが充実していない

  • OutSystemsにはForgeというマーケットプレイスのようなものがあり、BSDライセンスモデルにもとづきソフトウェアが公開されている
  • しかし、テストツールはあまり充実していない。カバレッジを取得するツールもない

IDEが弱い

  • JavaScriptのエディタには以下の機能がない
    • フォーマッター
    • リンティング
    • コード補完
  • IDEはオープンソースでもなく、APIも公開されていないため、自分たちでは機能拡張できず、世の中のエディタとの格差は開いていく一方では?

コードがテキストじゃない

  • OutSystemsのコード(設計情報)はメタデータとしてDBMSに格納されている。これをXMLとして取り出すことはできる
  • アイコンの座標なども格納しているためサイズが大きい。過去バージョンも全て保持するため、定期的に削除しないとパンクする(1つのeSpaceが1GBを超えることはよくある)
  • 「StaffってEntityどこにあったっけ?」となっても簡単には探せない(ツールを作れば簡単に探せます)
  • コードの共有が難しい
    • 「このActionでエラー出てるんですけど原因わかりますか?」といった問合せをStack OverflowにしようとしたときにeSpaceを添付するしかない(普通のプログラミング言語ならばテキストのコピー&ペーストで済む)
    • その上、Intellectual Property Protection (IPP) という機構があるため、他人の(ライセンスの異なる)eSpaceは自分の環境にはPublishできない
    • GitHubのような「設計図共有サイト」もなくノウハウが貯まりづらいのでは?

最後に

  • 色々とネガティブなことを書きましたが、ローコード開発の市場規模は急速に拡大しており、2022年には2兆円を超えると言われています
  • その中でリーダーのポジションであるOutSystemsはシステム開発の有力な選択肢のひとつです
  • OutSystemsはメリット、デメリットを理解した上で正しくお使い下さい


ボツロゴ