Edited at

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はメリット、デメリットを理解した上で正しくお使い下さい


https://nippori30.herokuapp.com/newgame/



ボツロゴ