OutsystemsPlatform：超高速開発ツールを知ってみよう！

# 記事の概要
*  一部では有名なローコード型の超高速開発ツール「OutsysytemsPlatform」(以下OSP)についての記事です。
*  「そもそもOSPって何なの？超高速開発ってどういうことなの？」というような人向けの内容です。
*  OSPや超高速開発ツールに興味を持ってもらえれば嬉しいなという気持ちで執筆しています。

# OSPとの出会い
*  筆者は２年前のある日、プログラミングの「プ」の字も知らない状態で「アジャイル開発＋OSPでサービス作る」的なプロジェクトにアサインされました。
*  そこから紆余曲折ありながらも色々な方々に支援をもらって「アジャイル開発＋OSP」の案件を何個かやってきて、開発が楽しいと思うようになりました。
*  今までナレッジや気づきを纏めたり共有する機会がなかったので、記事にしていこうと思います。

# 超高速開発ツールって？
*  ただの高速開発ツールではありません。「超」高速開発ツールです。
*  色々調べても絶対の定義はないようなので、自分はざっくり次のようなイメージだと理解しています。
    *  高速開発ツール（もしくは、一般の開発ツール）
        *  「設計→実装→適用」という流れがある中で、主に開発者の「実装」部分の高速化をサポートする。（例：Eclipse、IntelliJなど）
    *  超高速開発ツール
        *  利用者はGUIで「設計」するだけ。
        *  「実装→適用」部分はツールがやってくれる。
*  似たような別軸だと、「ノーコード開発ツール」と「ローコード開発ツール」という分類もあるようです。（ちょっとややこしい）
    *  ノーコード型
        *  利用者は全くコーディングをしない。
        *  ツールの実行エンジンが提供できる範囲内のアプリケーションのみ作ることができる。
    *  ローコード型
        *  利用者のコーディングを代わりにやってくれる。
        *  利用者はあまり意識しないが、結局裏ではコーディングしていることになるので、何でも作ることができる。
*  こういうツールが流行っている背景は色々あると思いますが、筆者は次のように捉えています。
    *  ビジネス面
        *  VUCAの時代→完全な計画は無理なので、さくっと作ってさくっと検証したい。
        *  デジタルトランスフォーメーションの推進。
    *  開発面
        *  社内システムを内製化したい。
        *  個人の技量によらず、ある程度の品質を担保したい。

# OSPって？
*  Outsystems社が提供する「ローコード型 超高速開発プラッットフォームサービス」です。（[参考：公式サイト](https://www.outsystems.com/ja-jp/)）
*  具体的にツールが提供してくれるコンポーネントについてざっくり説明すると次の通りです。

| コンポーネント | 概要 | 備考 |
| -------- | -------- | -------- |
| Platform Server     | 実行サーバにインストールされるOSPの中核機能。受け取った設計情報を解釈してコンパイル〜デプロイまで実施する。  |   -   |
| Service Studio     | GUIでモデル設計するエディタ。モデリングすれば、１クリックでPlatform Serverに情報を送り、すぐにアプリを使える状態にできる。  | これがいわゆる「ローコード開発ツール」のイメージに相当して、開発者が長時間使い続ける部分です。    |
| Integration Studio     | コーディング用のエディタ。Service Studioだけではまかないきれないレベルの処理をプログラミングし、Service Studioで利用できるパーツを作成する。     | ローコードの趣旨として頻繁に使うものではないですが、どうしても必要な場面はあります。（例：OSのディレクトリへのアクセスなど深い層の処理、外部連携のための処理 など） |
|Service Center     | 各環境（開発・検証・本番）の中に存在するアプリの管理ツール（例：ログ確認、環境変数設定、バッチコントロールなど）。ブラウザかService Studioからアクセス可能。各環境ごとに存在。 | 高速開発を支援するためにあらかじめ準備されている機能です。大体の環境管理がここで可能です。 |
|Life Time     |各環境を横断的に管理するためのツール。（例：デプロイ実施、バージョン管理、システムユーザ管理など） | 高速開発を支援するためにあらかじめ準備されている機能です。このツールを通して堅牢なデプロイを担保します。  |
*  特徴として言えるのは、コーディングだけにフォーカスを当てているわけではなく、デプロイやアプリ管理など開発に必要な機能を統合的に提供している点です。

# Service Studioについて少し詳しく
*  代表的なコンポーネントであるService Studioについてもう少し詳しく説明します。何となくローコード開発のイメージを持っていただければ幸いです。
*  OSPでは次の４つのレイヤーでモデリングを実施します。
 
| レイヤー | 概要 |
| -------- | -------- | 
| Data | 主にエンティティ定義を実施する。そのほかにも、構造体・環境変数・セッション変数なども定義可能。 | 
| Logic | 共通処理やビジネス処理を定義する。 |
| Interface | 画面とその入出力を定義する。 | 
| Processes | イベントドリブンのプロセスや、タイマー（バッチ処理など）を定義する。 | 

＜イメージ：「Data」レイヤーの編集↓＞
![Data.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228392/21a3c0e6-08ca-70d5-79b4-d1314241f33e.jpeg)

＜イメージ：「Logic」レイヤーの編集↓＞
![Logic.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228392/33338689-7dfc-9bc1-2dbe-4b82bcd4e615.jpeg)

＜イメージ：「Interface」レイヤーの編集↓＞
![IF.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/228392/18965a39-20d2-3493-c0ff-b58308e4591f.jpeg)

※「Processes」レイヤーは割愛します。

*  必ずしも上記４つを使わないとアプリを作れないということではありません。簡単なWebアプリなら、DataとInterfaceのモデリングをするだけで作成可能です。
*  また、実際の開発では、上記４つを常に満遍なく使うというよりは、モジュール別に役割（データ処理系、画面系など）を持たせます。そのため、モジュールごとに利用するレイヤには偏りが出てきます。（[参考：OSPのプラクティス「４レイヤーキャンバス」]
(https://success.outsystems.com/Support/Enterprise_Customers/Maintenance_and_Operations/Designing_the_architecture_of_your_OutSystems_applications/01_The_4_Layer_Canvas)）




# OSPで開発してきた所感
*  良いところ
    *  作ったものをすぐに検証できるのでとても速い。
    *  無理なことはほとんどない。
    *  学習コストが低い。 
    *  Outsystems社や公式フォーラムのQAレスポンスが速い。
*  注意点
    *  規模が大きくなるとライセンスコストも大きくなる構造。
    *  ライセンスコストを抑えたい場合、ライセンスリソースの節約を意識した設計が必要となる。
    *  分散開発・共通化についても独特のノウハウが必要。
    *  テストをフルサポートするツールではないので、しっかりした設計・環境構築が必要。


# 最後に
*  書きたいことはまだ沢山ありますが、OSPはアジャイル開発との親和性が高く、良いツールだと考えています。
*  2019/12/05に「OutSystems Japan Tech Day」に参加したところ、次の話が非常に興味深かったです。
    *  最新技術へのチャレンジ：Reactの導入（Reactive Web）、AIによる操作サジェスション
    *  既存の課題解決への取り組み：ブランチングの強化（まだ開発途中とのこと）
*  今後もプラットフォームとして成長が期待できるので、興味を持たれたらぜひ触ってみてください！（[参考：学習用の個人向け無料版](http://www.bluememe.jp/outsystems/product/personal-environment.html)）