このドキュメントでは、4D 20 R10 と比較して4D 21 LTSで導入されたすべての新機能を紹介します。各機能には、実用的な例を示すブログ記事への直接リンクと、技術的な詳細を示すドキュメントへの直接リンクが含まれています。
👉4D 20 R2からR9で導入された機能を見逃した方は、それぞれの機能で追加された主要な機能の全リストをお見逃しなく-それらはこの記事の一番下のFeature Release の詳細 にリンクがまとめられています。
このドキュメントは10のセクションに分かれています:
AIの統合
クラウドベースまたはローカルでホストされたAIモデルとの通信を簡素化する4D AIKitや、ネイティブなベクトルフィールドの導入など、4D 20 Rxの旧バージョンで導入されたAI機能に加えて、4D 21 LTSではさらに一歩踏み込み、AIをより実用的に、より統合し、ビジネスアプリケーションで直接使用できるようにする新機能をもたらしています。
セマンティッククエリ(セマンティック検索)
4D 21 LTSではセマンティック検索をORDAクエリに直接統合できるようになりました。別々のプロセスに依存する代わりに、レコードのベクトルフィールドを参照ベクトルと比較し、最も関連性の高い結果を即座に返すことができます。そして、全て皆様がすでに使用しているORDA グラマーで書くことができます。
このクエリは、必須プロパティvector と、類似度の手法を指定するmetric (デフォルトはコサイン)や類似度のしきい値を指定するthreshold などのオプション属性を持つシンプルなパラメータオブジェクトを受け付けます。
// ステップ 1: 意味的に一致させたいプロファイルの種類を定義する
$searchText:="senior project manager with strong HR background, based in France"
// ステップ 2: AI クライアントを作成する(ローカル baseURL はオプション)
$client:=cs.AIKit.OpenAI.new()
$client.baseURL:="http://127.0.0.1:1234/v1"
// ステップ 3: 検索テキスト用の埋め込みベクトルを生成する
$embedResult:=$client.embeddings.create($searchText; "text-embedding-mxbai-embed-large-v1")
$semanticVector:=$embedResult.vector
// ステップ 4: 類似度オブションを指定したセマンティッククエリオブジェクトをビルドする
$semanticQuery:={vector: $semanticVector; metric: "cosine"; threshold: 0.4}
// Step 5: クエリを実行する — 意味的な合致と従来のフィルターを組み合わせる
$results:=ds.Profiles.query("yearsOfExperience >= 5 & expertise >= :1"; $semanticQuery)
ベクトル条件は従来のORDAロジックとシームレスにブレンドが可能なので、1つのクエリでセマンティック類似度と従来のフィルタを組み合わせることができます。しきい値を調整することで、結果は広範でノイズの多いものから局所的で正確なものへと変化し、複雑さを増すことなく、文脈を考慮した意味のある結果を得ることができます。すべてのプロセスは、すでに皆様がよくご存知のORDAの文法内にとどまり、これによってクエリをすっきりさせ、表現力を高め、保守しやすくします。
AIツールの呼び出しとレスポンスフォーマット
AIツール呼び出し とレスポンスフォーマットは、ビジネス固有の機能 をAI手動の会話に直接統合する機能で4D AIKitを拡張します。ツール呼び出しにより、アプリケーションから選択した機能(「利用可能な商品カテゴリーをリストアップする」や「売れ筋商品を取得する」など)を呼び出し可能なツールとして公開することができます。AIモデルがあるツールが必要だと判断すると、4D AIKitは自動的に登録した4D関数を呼び出し、その結果をレスポンスに統合します。これにより、大規模なデータセットのアップロードや再トレーニングなどをすることなく、AIがライブのアプリケーション固有のデータをもってユーザーのクエリに回答できるようになります。ユーザーが“カテゴリー別の売れ筋商品トップ10は?”と質問すると、モデルはあなたの関数を呼び出し、実際のビジネスデータを取得し、自然言語で答えを返すことができます。
さらに、4D AIKitは構造化されたレスポンスフォーマットをサポートし、これにより下流プロセスとの統合をより信頼性の高いものにします。レスポンスは、プレーンテキストだけでなく、レスポンスを厳密なJSONオブジェクトとして要求したり、あるいは定義したJSONスキーマに従わせることもできます。これは、ユーザーからの構造化されていない入力を予測可能なデータに変換する必要がある場合や、AIが生成したコンテンツを手作業でクリーンアップすることなく自動ワークフローに流し込む必要がある場合に特に便利です。
セマンティッククエリ、ツール呼び出し、構造化されたレスポンスフォーマットを組み合わせることで、4DのAIは単なる会話レイヤーではなく、関連するビジネスデータを取得し、アプリケーション内で安全にロジックを適用し、ワークフローにシームレスに適合する構造化された出力を提供することができる、完全に統合されたシステムコンポーネントとなりました。そして今、 AIKit はオープンソース化され、完全な透明性とコントロールが可能になり、ビジネスの用途のために適用、拡張、進化することも可能となりました。
ネットワークスイッチング
4D 20 R2で導入されたQUICプロトコルは、特に高レイテンシやロスの多い環境において、より高速で弾力性のある通信を実現しました。4D 21 LTSでは、QUICが推奨ネットワークレイヤーとなり、デフォルトのServerNetに代わって、信頼性の高い最新のデプロイメントに大きな一歩を踏み出しました。
シームレスなネットワーク切り替え
4D 21では、ネットワークインターフェースを切り替えても、4Dリモート接続が中断されることはありません。イーサネットからWi-Fiへの移動、アダプタの変更、あるいはラップトップをスリープ中に異なるネットワーク環境に移動させたとしても、クライアントは自動的に4Dサーバーとのセッションを再確立し、データを失うことなく実行を継続します。これは、QUICプロトコルによって可能になったもので、ネットワーク状況の変化に対して、高速で信頼性の高い再接続を可能にします。
ワークフローはシームレスに保たれます。実行コンテキストは保持され、プロセスは中断したところから再開します。サーバー側では、クライアントのIPアドレスが管理ダイアログ、診断ログ、Session属性でリアルタイムに更新され、管理者の完全な透明性を確保します。これにより、ネットワーク状況が頻繁に変化するモバイル環境においても、4Dリモートははるかに堅牢になります。
ORDA
4D 20 R10では、ORDAには、エンティティの初期化のためのConstructor 、変更を追跡するためのonTouch を導入し、これによりビジネスロジックとデータを近づけました。4D 21 LTSでは、この進化はライフサイクルイベントのフルセットを導入することで完結し、これにより開発者はエンティティのライフサイクルのすべての段階を正確にコントロールできるようになりました。
エンティティの新しいライフサイクルイベント
エンティティの操作は、ライフサイクルイベントを全てカバーする完全なセットを提供します。これにはvalidateSave、saving、afterSave、validateDrop、dropping、afterDrop-が含まれます。これによって、エンティティの保存と削除のすべての段階を3つの異なるフェーズでカバーします:
-
Before → 無効な操作を検証し、即座にブロックする。
-
During → リアルタイムでビジネスルール、同期ロジック、ログを適用する。
-
After → 結果に関係なく、フォローアップタスク、統合、通知を実行する。
実際の現場ではこれは、保存の前に入力を検証し、操作の実行中にロジックを実行し、プロセスが終了したら結果を処理できる、ということを意味します。
イベントは、属性とエンティティの両方のレベルで実装できます。検証イベントはエラーが発生すると即座に処理を停止しますが、Afterイベントは常に実行されます。
ロジックをORDAデータクラスに集中させることで、エンティティの動作は自己完結し、保守が容易になります。ビジネスルールはトリガーに隠されることがなくなり、アプリケーションは設計上一貫性を保ち、外部からの接続でもネイティブなイベントフックを介して直接接続することができます。ORDAプロジェクトでは、トリガーはもはや必要ありません。ライフサイクルイベントにより、ORDAのフルパワーをよりクリーンで保守しやすい方法で利用できます。
4D Qodly Pro
4D Qodly Proを使えば、HTML やJavaScriptを一行も書くことなく、現代的なブラウザベースのインターフェースでビジネスアプリケーションを拡張することができます。ビジュアルなドラッグ&ドロップエディターを使って、レスポンシブなWebフォームを構築し、それを既存の4Dビジネスロジックに直接接続できます。
4D 21 LTSからは、Webエリアを使って、Qodly Proのページを従来の4Dフォームに直接埋め込むこともできます。これをユーザーの視点から見ると、別ウィンドウや追加ライセンスの必要もない、まるで1つのシームレスなインターフェースのように感じられます。埋め込まれたQodly Pro ページは、4D リモートクライアントと同じセッションとライセンスを共有するため、透明性が保たれると同時に、追加コストもかかりません。
クライアント/サーバーアプリケーションと4D Qodly Pro 間でのセッションの共有と相互作用
4D 21では、4Dリモートセッションとそのライセンスは、クライアント/サーバーアプリケーションのWeb エリア内に表示される4D Qodly Pro アプリケーションと共有することができます。これはつまり、余分なライセンスを消費することなく、デスクトップフォームと4D Qodly Pro ページの間で同じセッションコンテキストがシームレスに流れることを意味します。
認証と権限は自動的に保持され、セッションデータは、Web ページをデスクトップからのコンテキストで初期化するために渡すことができます。例えば、現在選択されていたエンティティの詳細を表示するということが可能になります。
セッション共有と同時に、新しい4D Qodly Pro のアクションは、4Dフォームと4D Qodly Pro ページ間での直接の双方向のやり取りを可能にします。開発者は、4D Qodly Pro ページからは、WA SET CONTEXT コマンドで初期化された$4d オブジェクトを通して、4D内の関数を呼び出すことができます。逆に、4D フォームはQodly ソースを直接更新することができ、両方の環境で状態とロジック同期されることを保証します。
これらの機能強化により、冗長なログイン、追加のライセンス、あるいは複雑な統合作業といったものをすることなく、セッション、インタラクション、コンテキストを統合して、従来の4D フォームと現代的な4D Qodly Pro ページ組み合わせることを容易にします。
ビルトイン国際化(i18n)
4D Qodly Proは、ビルトインの国際化(i18n)を提供しています。
サポートされている言語は、新しいLocalizationセクションでロケールとして定義され、ここでは翻訳キーと値を管理し、コンポーネントに割り当てることができます。言語の選択は、ビルトインのUserLanguage QodlySourceによって処理され、ユーザーの選択がリアルタイムで適用されます。
自動フォールバックは、セッションデータ、ブラウザのデフォルト、またはプライマリロケールをカバーし、ネイティブの右から左(RTL)サポートは、アラビア語のような言語を自然に感じさせます。言語を切り替えるとコンテンツが即座に更新され、スムーズでパーソナライズされたユーザーエクスペリエンを保証します。
これにより、UIを再設計したり複雑さを追加することなく、新しい市場への進出、オンボーディング摩擦(導入摩擦)の軽減、ユーザーの信頼性の強化が可能になります。ローカル向けでもグローバル向けでも、あなたの製品はユーザーの言語にすぐに対応できます。
Qodlyページイベントレポート
4D Qodly Proの新しいQodlyページイベントレポートは、ページ上の全てのイベントを分かりやすく表示します。それがたとえ標準アクション、ナビゲーションアクション、クラス関数、ダイアログアクションなどどこで起きたものであろうと、何のイベントが宣言され、どこで実装され、どの順番で実行されるかがわかります。
イベントフローを透明にすることで、デバッグをスピードアップし、ハンドラの重複や欠落を即座に発見し、最適化を容易にします。チームでの共同作業がより容易になり、ページの動作を正確に把握することで自信もつきます。
小規模なアプリ開発でも大規模なソリューションでも、イベント管理に明快さ、正確さ、効率性をもたらすシンプルな方法です。
キャンバスズームコントロール
4D Qodly Proのページエディターでは、複雑なレイアウトの作業を簡単にするために、キャンバスのズームコントロールを導入しました。キーボードショートカットやマウスホイールナビゲーションに対応し、ツールバーから直接、ズームイン、ズームアウト、ビューのリセットができるようになりました。
現在のズームレベルはインターフェイスに表示されるため、開発者はキャンバス上のコンポーネントの表示と配置を正確にコントロールできます。
これらの機能強化により、ナビゲーション、デザインの正確性、全体的な使いやすさが向上し、ページエディタが最新のビジュアル・デザイン・ツールの基準に合致するようになりました。
Qodly Studioの自動セットアップ
4DデザインモードからQodly Studioを初めて起動すると、自動セットアップウィザードが起動するようになりました。必要な設定-RESTサーバーの有効化、スケーラブルセッション、Webサーバーポート-が検出され、それらを有効にするかどうかを質問されます。
承認されると、必要に応じた設定で再起動され、Qodly Studioがブラウザで開きます。拒否された場合、変更は行われません。ワークフローはスムーズで速く、特に新規ユーザーにとって便利なものと言えるでしょう。
これによりQodly Studioを起動する際に、手動による事前設定が不要になりました。初めての開発者でも、ワンクリックで生産性が向上します。
4Dコンポーネント
4D 20と21では、コンポーネントの使い方が劇的に改善されました。依存関係マネージャにより、それが公開であるか非公開であるかに関わらず、コンポーネントを簡単に追加、メンテナンスできるようになりました。また、4D 20 R10からは、コンポーネント編集の新しいモデルが導入され、ホストプロジェクトから直接コンポーネントメソッドの編集やデバッグができるようになりました。
シームレスなコンポーネント統合へ向けて
4Dでのコンポーネント開発は、大きな飛躍を遂げました。コンポーネントのメソッドやクラスは、共有されているかどうかに関わらず、コンポーネントを個別に開き直したりすることなくホストプロジェクトから直接、表示と編集ができるようになりました。インタープリタモードであれば、すべてのメソッドをその場で 編集できるようになり、コンポーネント全体をホストUIから作成することもできます。このとき、名前空間、ファイル、ストラクチャーを初期化し、そのあとにインタープリタモードですぐに編集できるようになります。
コードだけでなく、読み取り専用のフォーム、フォルダ、定数、コマンド、プラグイン、さらにはコンポーネント固有のゴミ箱まで、可視性が拡大しました。定数は、ソースコンポーネントへのリンクを維持するため、アプリ全体の一貫性を確保します。一方、新規作成フローは、依存関係を自動的に配線し、新しいモードでもレガシーモードでも両方で構造を設定します。
これにより、コンポーネントの反復がより速くなり、モジュール化がよりスムーズになり、プロジェクトがよりクリーンで透明なものになります。これは、コンポーネントをホスト・プロジェクトのワークフローに近づける重要なマイルストーンであり、また計画はここで終わりません。更なる新機能も予定されています。
オプションのコンポーネント管理
4D 21にはもはや、標準の4Dコンポーネントは含まれません。その代わりに、依存関係の追加ダイアログで必要なコンポーネントを宣言すると、4Dが自動的にそのコンポーネントを取得し、オンデマンドでインストールします。そこから、4D AI Kit、4D NetKit、4D View Pro、SVGなど、GitHubでオープンソースとして公開されている4Dコンポーネントの完全なカタログに直接アクセスできます。これにより、必要なものだけをインストールする柔軟性が得られると同時に、コンポーネントの内部を調べたり、改良に貢献したり、進化するニーズにプロジェクトを合わせることが容易になります。
-
依存関係の集中:必要なコンポーネントのみがインストールされます。
-
バージョンの整合:依存関係は、デフォルトで現在の4Dバージョンに従います。これによって手動でチェックすることなく、互換性を保証します。
4D 21にアップグレードする際、既存のプロジェクトは必要なコンポーネントを自動的にダウンロードし、バイナリデータベースはインストーラーまたはダウンロードポータル経由で引き続きアクセスすることができます。
4D Netkit
4D NetKitは当初、電子メールやカレンダーなどのサービスをカバーするMicrosoft 365とGoogleのネイティブに統合することに重点を置いていましたが、最新の認証とセキュリティのためのより深いツールボックスへと着実に進化してきました。今日では、Microsoft 365によるシングルサインオンを可能にするだけでなく、幅広いIDプロバイダーとの統合のためのOpenID Connect の完全なサポートも提供しています。
認証結果のカスタムURL
cs.NetKit.OAuth2Provider.new() コマンドのauthenticationPage およびauthenticationErrorPage 属性は 、静的なファイルパスに加え、完全な URL をサポートするようになりました。認証フローは、ローカルのHTMLファイルに縛られることがなくなり、4D Qodly Pro、独自のサーバー、サードパーティーのサービスなど、あらゆる環境でホストされている動的ページにリダイレクトすることができます。
カスタムサクセスページとカスタムエラーページは、既存のインフラを維持しながら柔軟性を高めます。URLはアプリとは独立して更新でき、再ビルドすることなく新しいUXやブランディングを反映できます。URLとファイルパスの両方をサポートすることで、後方互換性を確保しながら、よりダイナミックで統合されたログインフローを実現します。
OpenIDのstateとNonce管理
認証フローは、state とnonce パラメータのサポートにより、OpenID Connectに完全に準拠するようになりました。
-
state により、アプリはリダイレクト先のコンテキストを追跡し、リターン時に検証することができます。
-
nonce は、トークンの固有性を強制することで、リプレイ攻撃を防ぎます。
これらのパラメータは NetKit 内で自動的に処理されるため、追加の実装をすることなく改ざんやインジェクションから保護されます。
開発者は、カスタムのトークン検証レイヤーを構築することなく、Google、Microsoft、Oktaといった最新のIDプロバイダーと安心して統合することができます。
HTTPサーバー
4DのHTTPサーバーは、単純なリクエスト処理を超えて成長を続けています。4D 21では、リダイレクト、カスタムヘッダー、キャッシュポリシー、CORSなど、HTTPレスポンスヘッダーとルールをフレームワークレベルで直接一元管理できるため、リバースプロキシや手動でのヘッダー管理が不要になります。
カスタムHTTPレスポンスルール
4DのHTTPレスポンスヘッダーは、サーバーレベルで設定できるようになりました。新しいHTTPRules.json ファイルまたは起動時のsettings.rules パラメータを使用して、開発者はURLパターンに検知してマッチしたレスポンスルールを定義できます。サポートされているルールは以下の通りです:
-
removedHeaders: 不要なヘッダーを削除します(例えば、より厳格な監査のためにServerヘッダーを削除します)。
-
addedHeaders:Content-Security-Policy、X-Frame-Options、Permissions-Policyなどのセキュリティヘッダーを注入します。
-
denyAccess: 機密性の高いパスへのアクセスを403 ステータスでブロックします。
-
redirection: 画像、CSS、JavaScriptのリクエストをCDNにルーティングします。
-
status: レスポンスのステータスコードを明示的に定義します。
4D内で直接ヘッダーを処理することで、外部のリバースプロキシや手作業によるヘッダーインジェクションへの依存が大幅に減り、インフラがスリムになります。一貫性が向上し、RESTを含むすべてのWebレスポンスに対してフレームワークレベルでポリシーが適用されます。
ビルトインTLS/SSLサポートによるセキュアなTCP通信
TCP接続 は、TLS/SSL暗号化をネイティブにサポートするようになりました。 4D.TCPConnection.new() の新しいパラメータoptions の TLS 属性を設定することで、余分な設定やラッパーなしで暗号化されたセッションを作成できます。
-
標準ポートとセキュアポートは並行して実行できます。
-
ハンドシェイクが完了すると、暗号化されたメッセージは接続を介してシームレスに流れます。
-
TLS 1.3がデフォルトのプロトコルで、高いセキュリティと、最新のエンドポイントとの互換性を保証します。
これは、機密データが保護される設計となっており、これによりコンプライアンスが容易になり、セキュアなメッセージングがもはや回避策ではなく、標準の手段となったことを意味します。
ローカルファイルの代わりにWindows証明書ストアを使用
HTTPS リクエストでは、HTTPRequest およびHTTPAgent クラスのstoreCertificateName パラメータを使用して、Windows キーチェーンから証明書を直接取得できるようになりました。これにより、証明書ファイルをローカルに保存・管理する必要がなくなります。
システムレベルの保護と集中管理により、手動でファイルを操作する必要がなくなります。証明書の取り扱いは、より安全で一貫性があるものとなり、チームやマシン間での管理がより容易になります。
RESTと4DACTIONの統合セッション管理
4D 21では、それがREST接続、SOAP呼び出し、4DACTIONリクエストのいずれから発生したものであっても、すべてのオープンなWebセッションを検査する包括的な方法が追加されました。
-
すべてのアクティブなセッションがリアルタイムで一覧表示されるため、管理者はアクティビティとリソースの使用状況を見落とすことなく完全に把握できます。
-
セッションは、Session.setPrivilege() を介してユーザー名でラベル付けでき、これにより接続したユーザーの特定、アクションのトレース、ライセンスの管理が容易になります。
-
セッションは、スレッドセーフで自動的に最適化されるため、高負荷時でもリソースの効率的な使用と信頼性の高いパフォーマンスが保証されます。
これにより、開発者と管理者は、より明確なモニタリング、より強力な監査、安定性の向上を実現しながらも、規模に応じてよりスムーズなAPIの実行が可能になります。
コアライブラリと依存関係のアップグレード
4D 21 LTSでは、Xerces、libldap、ICU、Chromium (CEF)、OpenSSL、libZip、LZMA、ZLib、Libuv、BoringSSL、PDFWriterがアップグレードされ、スタック全体を現代化することで、セキュリティを強化し、安定性を向上させ、現在のプラットフォームとの互換性を確保しました。
4Dランゲージ
4D 20と4D 21との間の4Dプログラミング言語の違いは非常に大きく、数行で要約することはできません。Rリリースの間に、4D言語は最新のシンタックス、より強力な型指定、より優れたエラーハンドリング、そして新しいコマンドが追加されました。4D 21 LTSでは、コーディングがよりシンプルで一貫したものになるよう、さらなる改良が続けられています。
16進文字列から数値への変換
String コマンドで、16進文字列を直接数値に変換できるようになりました。解析ユーティリティを書いたり、バイナリ文字列のトリックに頼る必要はもうありません。文字列を渡すだけで、数値の結果を得ることができます。
これは一見些細な追加のように思えますが、外部API、低レベルのフォーマット、16進数を返す外部ソースなどを統合する際の摩擦を取り除いてくれる画期的な新機能といえます。
新しい文字列trim関数
新しいコマンドtrim 、trimStart 、trimEnd を使用すると、文字列から空白や特定の文字を取り除くことが簡単にできるようになります。これらはJavaScript やPython での同様のコマンドと同じように動作し、どのような文字セットでも動作します。
手動のトリムロジックはもう必要ありません。データはよりクリーンになり、フォーム入力の検証はより簡単になり、コードはモダンな言語全体と同様の書き方になります。
4Dのライセンスは、よりスマートで自動化されました。4D 21では、サインイン時にデベロッパーライセンスが自動的に取得され、アクティベートされるため、これまで更新やセットアップに時間がかかっていた手動ステップが不要になりました。
パートナー開発者ライセンスの自動取得
4Dは、パートナー開発者ライセンスが変更されるたびに、自動的にライセンスを取得し、アクティベートします。そのため、使用しているそれぞれのマシンに手動でライセンスを入力する手間がなくなりました。サインインすると、4Dは、4D Motorを通じてパートナープログラムのアカウントをチェックし、お使いのプラットフォームで利用可能なDeveloperまたはDeveloper Proライセンスを検出し、即座に登録します。利用可能なライセンスが1つだけの場合、アクティベーションは自動的に行われます。利用可能なライセンスが複数見つかった場合、どれを使用するかを質問されます。