Help us understand the problem. What is going on with this article?

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

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

by shoji9x9
1 / 18

image.png


はじめに


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

image.png

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


ボツロゴ

image.png image.png


shoji9x9
2020年1月よりMaaS関係に従事。プライベートでは機械学習、Kaggleに取り組んでいます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした