最短でOutSystems 11（Webアプリ開発）のオンライントレーニングを受けてみた

## 背景
自社システムのローコード開発をしているんですが、使っているローコードツールが自社製＆自社でしか使っていないようなツールなので、「メジャーなツールってどんな感じなんだろう？」とか思っていました。
基本的にローコードツールは無料で使えるものが少ないのですが、メジャーなツールの中でOutSystemsは無料で使えるため試してみました。

## 方法
#### まずは
タイトルの通りWebアプリ開発のオンライントレーニングを受けてみました。
[OutSystems](https://www.outsystems.com/ja-jp/training/courses/114/developing-web-apps-outsystems-11/?LearningPathId=2 "Webアプリ開発（OutSystems 11）")

でもでも・・・24時間もかけてられん！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/1c4fa933-e471-7617-970e-08fa06c1b78a.png)

#### 時短の方向性を探る
トレーニングの構成はおおむね以下の通りです。
1. 動画の説明を見る
1. 選択式のテストを受ける
1. 実際に演習問題を通して開発する

なかでも動画の説明を見るのがつらかったです。基本英語しかないので字幕を見る感じですし、そんなに重要な説明していないように感じて・・・。なので別に動画見なくてもいいや、となりました。
というのも3章まで選択式のテストを受ける中で、別に動画を見なくてもわかるものが多かったからです。

①OutSystems関係なく、一般的な知識で解ける問題。例えば以下の問題は交差エンティティを知っていれば解ける（答えはB）
> 多対多のリレーションで、交差エンティティに最低限必要なアトリビュートは何ですか。
> A.各親エンティティを参照する複合キー。
> B.識別子と各親エンティティに対する外部キー。
> C.各親エンティティに対する外部キーと交差レコード数。
> D.Id、Label、Order、Is Active。

②OutSystems関係あるんだけど、まあだいたい想像がつく（一般的なフレームワークでも単純な主キーしか認めていないものもあるんだからローコードツールはそれなりに制約強いでしょ。ということで答えはB.Fase）
> エンティティ識別子は単純な主キーまたは複合キーにすることができます。
> A.TRUE
> B.FALSE

開発経験次第では答えられない人もいると思います（私もこたえられないものそこそこありました）が、演習問題を解けばわかる問題がほとんどでした。
ということで4章以降は演習→テストの順で受講し、動画はみませんでした。結果、全部終わるまでに10時間もかかりませんでした。でも動画を見た3章までよりも理解度が下がっているとは思いません。
なので個人的にはこの受け方を推奨しますが、あくまで開発経験によります。理解が追い付かない場合は動画を見るのが良いかと思います。

## 内容
### 出来上がったもの
* 映画一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/8bf522b1-d5d4-d6a4-b2b8-ad3b8d9eee9c.png)
* 映画詳細画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/878076d8-900c-6fb9-ce7e-4f6d7900619b.png)
* スタッフ一覧画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/9f535433-622b-9984-eac7-821faa6a8fd7.png)
その他、ユーザ一覧、ユーザ詳細画面も作りました。

トレーニングの詳細を説明します。

### トレーニング内容
#### Web開発の概要
アプリケーションを作成。所謂HelloWorldです。
#### データモデリング
データベースの作成。
#### 基本的な画面開発1
基本的な画面の作成。これで最終的な４画面ができます。つまり一覧表示と詳細画面です。といっても一覧画面は検索機能はありませんし、詳細画面は編集できません。新規登録機能もありません。
#### データリレーションのモデリング
データベースのリレーションを定義します。1:1とかn:nの交差エンティティとか。
#### 基本的な画面開発2
映画の要素にジャンルを追加します。そして一覧画面に検索機能を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/73b42d78-b066-e2db-0511-63d7bb315296.png)
また詳細画面で編集して保存、新規登録機能ができるようになります。一気にWebアプリっぽくなりますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/5cd22985-f7f2-16ab-c20b-0c65534ed394.png)

あと映画に関連する人を追加する画面を追加します。

#### ロジックとバリデーション
エンティティのカプセル化とエラーチェックをします。ここら辺からOutSystemsらしさが強く感じられるようになります。なかなかエンティティのカプセル化ができるローコードツールはないですよね。
デバッグ実行もここで試します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/345ffc45-9d6b-93b3-5973-10518b1ddcfd.png)

#### Ajaxと再利用可能なUI
コメントエリアをAjaxで登録・更新できるようになります。
また再利用可能なコンポーネントを作成します。下図の☆で評価値を示すコンポーネントを作成しました。☆をクリックしたときのアクションも再利用可能な形で実装しています。このトレーニングの中で一番感動しました！！！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/db7c84eb-6f55-426f-b6bd-d82d5194858b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/08591010-f714-d5b5-1056-ea0e2d573ad6.png)


#### セキュリティとセッション処理
画面単位・項目単位でセキュリティの制御をします。以下はログインユーザのロールに応じて、編集の可否を分けています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/4d30ccdb-2221-c72b-4bbb-4082d3e05295.png)
セッションに検索条件を保持するようにしています。検索条件に入力している「Avatar」は画面遷移して戻ってきても残ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/cfb6dd50-13ac-cbfb-27b0-cf53b3295178.png)
#### Webサービス
既存のAPIを使用して、映画の画像を取得します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/c025a301-2bec-888d-abf3-c113de48247a.png)

#### テーマと高度なUI
ＨＰのロゴやヘッダーの背景や全体の背景のイメージを実装します。なんかほとんどここら辺はCSSを組むのと手間は変わらない感じでした。CSS知らなきゃ組めん。。。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518616/93e598e5-c5d1-0b52-1408-566f32b330d6.png)


## 感想
ローコードツールとノーコードツールの2種類が一緒くたに語られることが多いですが、OutSystemsは間違いなくローコードツール、かつ実装経験のある開発者が活用すべきものだと感じました。共通化、構造化ができるように設計されていて、エンドユーザや業務ＳＥじゃ使いこなせないツールだと思います。
個人的には市民開発はノーコードに任せるべきであると思います。しかしローコードツールを利用した市民開発はほぼ100%、間違いなく、絶対的に保守性を保つことはできないと感じています。市民開発という一般ユーザに魅力的な要素を捨てきれないローコードツールが大きい中、開発者によせたOutSystemsは感動的なほどに魅力的でした。やっぱりローコードはノーコードと差別化しなければ生き残れなくて、生き残りの糸は開発者みんなが理解している保守性であり、クリーンコードだなと思います。