$30 off During Our Annual Pro Sale. View Details »

[OutSystems] OutSystems が誘う Null がない世界の罠

kata_junn
December 23, 2021

[OutSystems] OutSystems が誘う Null がない世界の罠

× "さそう"
〇 "いざなう"
文章版はこちら:https://qiita.com/kata_junn/items/5018b3b42c142d7e4997

kata_junn

December 23, 2021
Tweet

More Decks by kata_junn

Other Decks in Technology

Transcript

  1. OutSystems が誘う Null がない世界の罠
    片野 潤一
    伊藤忠テクノソリューションズ株式会社
    アジャイル営業推進部
    あつまれ OutSystems Developer! 開発者超会議

    View Slide

  2. Java
    Struts/Spring/MyBATIS
    2005 2014
    OutSystems
    Developer@3人(6か月)
    Developer && TL@約10人(24か月)
    OutSystems 推進
    2019 2020
    Scrum on AWS
    Role:Developer
    TypeScript
    Serverless
    Dynamo, Lambda, S3, SQS, Kinesis,
    Athena
    Angular
    認定スクラムマスター(CSM)
    AWS Certified DevOps Engineer - Professional
    OutSystems Expert Traditional Web Developer
    OutSystems Architecture Specialist
    好き:リアル脱出ゲーム、低温調理、スパイス、モブプロ、DQW、ゼルダ
    20%
    OutSystems
    OutSystems 推進
    Expert Service
    BootCamp 講師
    PoC 提案+実施
    プロジェクト支援
    now!!
    2
    片野 潤一(かたじゅん) Twitter:@kata_junn

    View Slide

  3. あるよ!!!
    OutSystems プロジェクトで Null に困ったことが…
    ないよ!!! 使ってないよ!!!
    Zoom の ↓ の機能で枠内に✓とかつけてね!

    View Slide

  4. 今日の話が響きそうな人
    ⚫ OutSystems を調べている人
    ⚫ OutSystems に触り始めた人
    ⚫ OutSystems の Null で困っている人
    4

    View Slide

  5. View Slide

  6. View Slide

  7. 明日(12/23)の 7:00 に公開!!見てね!!

    View Slide

  8. OutSystems には Null がない

    View Slide

  9. OutSystems は Null を意図的に排している
    ⚫ 初期値は「型に応じたデフォルト値」
    ⚫ Null~という Built-in Function(?)もデフォルト値を返す
    ⚫ ex. NullIdentifier() は 0
    ⚫ 理由は不明
    ⚫ NullPointerException 回避(推測)
    ⚫ Null チェックの根絶(推測)
    ⚫ 宗教的な理由(推測)
    ⚫ 学習の容易さアピール(推測)

    View Slide

  10. Null がないと困ることあるの?

    View Slide

  11. めっちゃある

    View Slide

  12. Null とデフォルト値の両立が難しい

    View Slide

  13. OutSystems アプリ → 内部DB/外部DB/Consume REST
    ⚫ 内部 DB or 外部 DB
    ⚫ SQL query で “NULL” を頑張って書けば良い
    ⚫ また、前提として画面からの入力値を全て Text で受ける必要がある
    ⚫ Built-in Validation くんの存在価値 is 何
    ⚫ 外部DB
    ⚫ Entity の Default Value Behavior の設定でデフォルト値を Null に変換可能
    ⚫ ただし、デフォルト値と Null 値の両立ができない
    ⚫ Consume REST
    ⚫ デフォルト値で送信するか、キー自体を消すかの選択が可能
    ⚫ OnBeforeRequest で文字列操作(null に置換)すれば良いが精神が死ぬ
    ⚫ OutSystems 開発の悪いところが凝縮されている感

    View Slide

  14. 内部DB/外部DB/Expose REST → OutSystems アプリ
    ⚫ 基本的に Null は全てデフォルト値に変換されて入ってくる
    ⚫ Null を送ってきたのかデフォルト値を送ってきたのか判別ができない
    ⚫ Expose REST の場合、undefined も判別不可
    ⚫ Expose REST は介入ワンチャン
    ⚫ OnRequest で JSON を文字列解析すれば null や undefined のキーは判別可能
    ⚫ ただ、キーがわかったところでメタプログラミングできないため、「このキーだった
    ら Null として扱う」のような、プロパティを文字列指定するような柔軟性の無い実
    装を余儀なくされる
    ⚫ OutSystems 開発の(略

    View Slide

  15. 個人的所感
    ⚫ Null がないのは「学習が簡単なように見せかけている」だけ
    ⚫ NullPointerException や Null-check 等の煩雑さに蓋をしている
    ⚫ 外部システムとの I/F で致命的になり得るユースケースが多い
    ⚫ 対応は不可能ではないが、スクラッチの方が素直で品質も保持しやすく本末転倒
    ⚫ Null を完全排除しているのは筋が悪い
    ⚫ 拡張性や柔軟性、外部接続性をアピールしているのだから選択肢は欲しい
    ⚫ NEO でも Null は導入されないとかなんとか(噂)
    ⚫ 今のところ NEO への唯一の失望ポイント

    View Slide

  16. まとめ
    ⚫ OutSystems で Null を扱うのは大変難しい
    ⚫ AOP 等が無いので透過的に実装することができない
    1つ1つの I/F に個別に似たような処理を実装する必要があり、人を精神的
    に追い込むには十分な面倒さ
    ⚫ 特に連携する外部システムで
    OutSystems のデフォルト値と Null
    に明確な意味の違いを持つ場合、面倒な実装や調整が求められる
    ⚫ とりあえず Null の Idea に LIKE してね!!!!
    ⚫ https://www.outsystems.com/ideas/213/null-values/

    View Slide

  17. “ガソリンタンクを持っていない車と、空のガソリン
    タンクは、概念的に異なるものだ
    J.セルコ『プログラマのためのSQL 第2版』p.102

    View Slide

  18. ご清聴ありがとうございました
    みなさんの回避策も
    聞きたいです!

    View Slide