4D 21 LTSの新機能

このドキュメントでは、4D 20 R2から4D 21までに追加された、4D 21 LTSで導入されたすべての新機能を紹介しています。各機能には、実用的な例を示すブログ記事へのリンクと、技術的な詳細を示すドキュメントへのリンクが含まれています。

また、blank のタグが付いたセクションは、特に 4D 20 R10 以降の新機能にフォーカスしています。

このドキュメントは、10のセクションに分かれています:

4D 21: あなたのAIエンジン

4D 21は、4Dを独自のAIエンジンに変え、実際のビジネスアプリケーション向けに構築された高機能なAIツールキットを提供します。クラウドまたはローカルにホストされたモデルとの通信、ベクトルの生成と保存、ORDAでのネイティブなセマンティック検索の実行、ビジネスロジックをAI主導の会話に直接接続することができます。

アプリケーションが新しいものであれ、何十年も前のものであれ、AIは既存のコードの自然な拡張となります。ネイティブなベクトルサポート、合理化されたモデルコミュニケーション、インテリジェントな動作を日常的なワークフローに組み込むためのツールにより、4D 21はAIの統合をスムーズに、実用的に、そしてすぐに役立つものにします。

ビルトイン4D AIKitコンポーネントでAI機能を追加

4D AIKitはビルトインの4Dコンポーネントで、あなたの4D環境にOpenAI互換の機能を直接もたらします。わずか数行のコードで、4Dの外に出ることなく、プロセスを自動化し、ユーザーエクスペリエンスを豊かにし、インテリジェントな機能をビジネスロジックに統合することができます。

AIKitには、以下をサポートするために設計された30以上のクラスが含まれています:

  • テキスト生成とチャットベースのインターフェース

  • 画像タグ付け、オブジェクト認識、詳細な分析

  • 音声からテキストへの書き起こし

  • プロンプトからのビジュアル生成

  • テキストコンテンツのモデレーション

AIKitはまた、クラウドベースとローカルにホストされたモデルの両方をブレンドする高度なワークフローを可能にします。テキスト分析と画像分析を1つのフローで組み合わせることで、ソーシャルメディア自動化ツール、AIを活用したコンテンツパイプライン、または動的な学習体験を構築できます。

AIエンベディング(埋め込み)とセマンティック検索のためネイティブなベクトルサポート

インテリジェントな機能は、たった1つの基本要素から始まります:ベクトルです。構築しようとしているものが、意味検索、推薦システム、文書の分類、画像グルーピングなどなんであろうと、、ベクトルこそが意味というものを表す構造です。4D 21では、ベクトルはプラットフォームのネイティブとなり、ファーストクラスの一部になります。

4D.Vector は、AIエンベディング(埋め込み)の保存と操作のために特別に設計された、新しいビルトインクラスです。高次元の数値データをメモリ効率の良い形式で保持し、コサイン類似度ドット積ユークリッド距離のような主要な類似度演算を4D内部で直接サポートします。これにより、セマンティッククエリが高速かつ正確になり、データモデルと完全に統合されます。

ベクターをデータベースに保存し、クラス型属性で使用し、完全な一致ではなく、意味に基づいてデータをソート、比較、分類する機能を構築することができます。これは、最新のAIを活用したワークフローの主軸であり、これが4Dネイティブなものとなりました。

これを補完するために、4D AIKitOpenAIのembeddings APIを介したネイティブなベクトル生成を導入しています。新しいOpenAIEmbeddingsAPI.create() メソッドは、1回の呼び出しで文字列やコレクションを 4D.Vectorインスタンスに変換します。トークン処理も、HTTP処理も、JSONパースも必要ありません。一度生成されたベクターは、類似性スコアリング、セマンティックフィルタリング、ランキングシステム、ORDAクエリなどにシームレスに統合することが可能です。

4D.Vector+AIKitエンベディングは、セマンティックインテリジェンスのための完全なパイプラインを提供します:

  • エンベディングの生成
  • 埋め込みデータを効率的に保存
  • ネイティブで比較、スコアリング
  • 4Dで直接セマンティッククエリを実行

これはランゲージとデータレイヤーに組み込まれたAI対応アーキテクチャです。

セマンティッククエリblank

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("YourApiKey")
$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}

// ステップ 5: クエリを実行 — 意味的な合致と従来のフィルターを組み合わせる
$results:=ds.Profiles.query("yearsOfExperience >= 5 & expertise >= :1"; $semanticQuery)

ベクトル条件は従来のORDAロジックとシームレスにブレンドされるので、1つのクエリでセマンティック類似度と従来のフィルタを組み合わせることができます。しきい値を調整することで、結果は広範でノイズの多いものからピンポイントで正確なものへと変化し、複雑さを増すことなく、文脈を考慮した意味のある結果を得ることができます。すべてのプロセスは、すでに知っているORDAの文法内にとどまり、クエリをすっきりさせ、表現力を高め、保守しやすくします。

AIツールの呼び出しとレスポンスフォーマットblank

AIツール呼び出し構造化されたレスポンスフォーマットは、ビジネス固有の関数AI主導の会話に直接統合する機能で4D AIKitを拡張します。ツール呼び出しでは、「利用可能な商品カテゴリーをリストアップする」や「売れ筋商品を取得する」など、アプリケーションから選択した機能を呼び出し可能なツールとして公開することができます。AIモデルがツールが必要だと判断すると、4D AIKitは登録した4D関数に呼び出しを自動的にルーティングし、結果をレスポンスに統合します。これにより、大規模なデータセットのアップロードや再トレーニングを必要とせずに、AIがライブのアプリケーション固有のデータでユーザーのクエリに回答できるようになります。ユーザーが“カテゴリー別の売れ筋商品トップ10は?”と質問すると、モデルはあなたの関数を呼び出し、実際のビジネスデータを取得し、自然言語で答えを返すことができます。

さらに、4D AIKitは構造化されたレスポンスフォーマットをサポートし、下流プロセスとの統合をより信頼性の高いものにします。プレーンテキストだけでなく、レスポンスを厳密なJSONオブジェクトとしてリクエストしたり、あるいは定義したJSONスキーマに従わせることもできます。これは、ユーザーからの非構造化入力を予測可能なデータに変換する必要がある場合や、AIが生成したコンテンツを手作業でクリーンアップすることなく自動ワークフローに流し込む必要がある場合に特に便利です。

セマンティッククエリ、ツール呼び出し、構造化されたレスポンスフォーマットを組み合わせることで、4DのAIは単なる会話レイヤーではなく、完全に統合されたシステムコンポーネントとなり、関連するビジネスデータを取得したり、アプリケーション内で安全にロジックを適用したり、またワークフローにシームレスに適合する構造化されたアウトプットを提供することができます。そして今、 AIKitがオープンソース化されたことで、あなた自身のビジネス要件に沿ってこれらを形成、拡張、進化させる能力を得るとともにそれらを完全に可視化することができます。

ネットワーク

4D 21は、今日のコネクティビティに対する期待に応えるために構築された、最新のパフォーマンス重視の基盤により、ネットワークレイヤーを再定義します。実行しようとしているのが高レイテンシのクライアント/サーバー・ワークロードの実行、セッション途中でのネットワーク切り替え、TCPやUDPを介したデバイスの統合、繰り返されるHTTPコールの最適化であろうと、スタック全体がより高速な接続、より強力な回復力、より厳密な制御を実現するように設計されていますQUICは、よりスムーズで低遅延なリモート・セッションのための推奨されたトランスポート・プロトコルとなり、TCPはTLSときめ細かなタイムアウト処理による非同期APIを獲得し、UDPは新しいイベント駆動型ソケットAPIを備え、HTTPリクエストは専用エージェントによる持続的接続管理の恩恵を受けます。これらのアップグレードは、アプリケーションのネットワーク通信の各レイヤーにスピード、安定性、柔軟性をもたらします。

QUIC: より弾力性のあるクライアント/サーバー接続性

QUICは、4Dクライアント/サーバー接続をより弾力的で信頼性の高いものにするために設計された最新のネットワークレイヤーです。4D 21では、コンパイルされたアプリケーションでも、ストラクチャー設定、ユーザー設定、データベース設定から直接QUICを有効にすることができ、これによって再ビルドの必要なく容易にテストと運用ができるようになります。

実際のワークロードでは、QUICはServerNetよりも優れたパフォーマンスを発揮し、不安定な接続や遅延の大きい接続をよりスマートに処理します。これは、ユーザーへの迅速なインタラクション、Wi-Fiやモバイル・ネットワーク上でのスムーズな動作、そして全体的により回復力のあるエクスペリエンスを実現できることを意味します。

ServerNetは引き続きサポートされますが、QUICは現在、現代のインターネットトランスポート規格の恩恵を目的とした新規導入においては推奨される選択肢となっています。既存の環境を移行する前に、インフラストラクチャがUDPをサポートしているかどうかを確認してください。

QUICによるシームレスなネットワーク・スイッチングblank

QUICを使えば、ネットワークインターフェースを切り替えても、4Dリモート接続が中断されることはありません。イーサネットからWi-Fiに移行しても、アダプタを変更しても、別のネットワーク上のラップトップを起動しても、クライアントは自動的に4D Serverとのセッションを再確立し、データを失うことなく実行を継続します。QUICは、変化するネットワーク状況下でも高速で回復力のある再接続を可能にし、モバイルや不安定な環境でもスムーズなエクスペリエンスを実現します。

実行コンテキストが保持され、プロセスは中断したところから再開されます。サーバー側では、クライアントのIPアドレスが管理ダイアログ、診断ログ、Session属性でリアルタイムに更新されるため、管理者は完全に把握することができます。これにより、ネットワーク状況が頻繁に変化する場合でも、4Dリモートの堅牢性が大幅に向上します。

最新のセキュアなTCPネットワーク(クライアント、サーバー、TLS)

4D 21は、従来の4Dインターネットコマンドに代わる、完全モダンなTCPネットワークスタックを提供します。

この TCPConnectionクラスは、オブジェクト指向のAPIと、onConnectiononDataonShutdownonErrorなどのコールバックにより、クライアント側の通信を処理します。Blobやテキストを送信したり、発生したイベントに反応したり、外部デバイスやサービス、カスタムのプロトコルに簡単に接続したりすることができます。

この TCPListenerクラスはこの機能のサーバー側を補完します。これを使用することで特定のポートをリッスンしたり、新規の接続を許可または拒否したり、許可された各クライアントを専用のTCPConnection インスタンスに渡すことができます。これにより、軽量なサービスやデバイスゲートウェイを4Dで直接構築するための一貫したモデルが提供されます。

すべてを安全にするために、TCP接続はネイティブのTLS/SSL暗号化をサポートするようになりました。4D.TCPConnection.new() の新しいoptions パラメータで TLS 属性を 有効にすることで、TLS 1.3 をデフォルト・プロトコルとして、暗号化されたセッションを自動的に確立します。標準ポートとセキュアポートは並行して実行でき、ハンドシェイクが完了するとすぐに暗号化通信が開始されます。

TCPコネクションは、.connectionTimeout プロパティも公開し、ストールしたコネクションや無応答のコネクションを放棄するまでの待ち時間を直接コントロールできます。これを使用して待ち時間のしきい値を調整したり、ネットワーク状態が悪いときに速やかに接続を解除することで、UIのフリーズや終わらない待ち時間などを回避したりすることができます。

これらの機能を組み合わせることで、カスタムTCPプロトコルを実装し、クライアントとサーバーの両方のネットワーキング・ソリューションを完全に4Dで構築するための、モダンで柔軟かつ安全な基盤を提供します。

新しいudpコマンド

新しい4D.UDPSocket クラスは、UDPプロトコルを使用したリアルタイムでイベントドリブンな通信を完全にコントロールすることができます。クライアントとサーバーの両方のモードをサポートし、IoTメッセージング、リアルタイム・デバイス・モニタリング、内部シグナリングなどのユースケースにおける高速でコネクションレスなデータ伝送に最適化されています。

このクラスは完全なイベント駆動型で、onDataonErroronTerminate などのコールバックをサポートしています。開発者は、send() を使用してパケットを送受信し、4D.UDPEvent を使用してパケットのメタデータを分析し、統一された4DTCPUDPLog.txt ファイルにトラフィックを記録することができます。

プリエンプティブ・スレッドをサポートするUDPSocketクラスは、同時接続実行環境で効率的に動作し、レガシーなInternet Commandsプラグインを最新のオブジェクト指向のコマンドに置き換えます。

httpエージェントでhttp接続をカスタマイズ

4D 21はHTTPエージェントを導入し、アプリケーションがHTTPサーバーに接続する方法をより細やかにコントロールできるようになりました。エージェントは、コネクションの持続性と再利用を管理し、リクエストごとに新しいコネクション(特にTLS/SSL)を再ネゴシエートする手間を回避します。

デフォルトでは、すべてのHTTPRequest コマンドは、接続を維持するビルトインのエージェントを使用します。より多くの制御が必要な場合は、独自のエージェントを作成して、以下のような動作を微調整することができます:

  • keep-alive の処理

  • 最大同時接続数

  • 接続タイムアウト

  • エージェントレベルでのTLS/SSL設定

エージェントの使い方は簡単で、エージェントを一度作成し、それをリクエストオプションに渡します。HTTPAgent は共有オブジェクトなので、同じサーバへのすべてのリクエストに対して単一のエージェントを保持することもできますし、複数のサーバにまたがって再利用し、それぞれが独自のコネクションプールを保持することもできます。

HTTPエージェントは、特に外部APIとのやり取りが多いアプリケーションにおいて、繰り返されるコールをより速く、より予測しやすく、より管理しやすくします。

ORDA

4D 21は、ORDAをより深いライフサイクル制御とより洗練されたデータハンドリングで拡張し、開発者がよりクリーンで自己完結したビジネスロジックを構築できるようにします。新しいライフサイクルイベントコンストラクタのサポート、よりスマートなエンティティフィルタリングメモリクリーンアップ機能により、データレイヤーは単なるストレージシステムではなく、モデルに組み込まれた応答性の高いルールに基づくエンジンとなります。

完全なエンティティ・ライフサイクル・イベント・モデルblank

4D 21は、ORDAエンティティのための完全で統一されたライフサイクルモデルを導入しています。フォームやAPI、トリガにルールを分散させる代わりに、データクラス内で直接ビジネスロジック全体を定義できます。

このライフサイクルは、エンティティが作成された瞬間から始まります。エンティティのコンストラクタを使用すると、デフォルト値を割り当てたり、コンテキスト固有のロジック(現在のユーザやセッションなど)を初期化したり、属性に自動的に値を代入したりすることができます。エンティティがメモリ内で変更されると、onTouch イベントがリアルタイムで変更に反応し、保存操作を開始する前に、値の正規化、ルールの適用、依存する更新の準備が簡単にできます。

エンティティが保存されると、4D 21は3段階のシーケンスを実行します:validateSave saving そしてafterSave の3つです。これにより、無効な操作を早期にブロックし、保存の進行中にビジネス・ロジックを適用し、操作が完了したらフォローアップ・アクションをトリガーすることができます。削除についても同じ3段階のパイプラインがあり、validateDrop dropping afterDrop の3つで、これらを使用して不正な削除の防止、関連データのクリーンアップ、削除後のロジックの一貫した実行が可能です。

すべてのイベントは、エンティティ・レベルと属性レベルの両方で利用できます。バリデーションイベントは、ルールが満たされていない場合に操作をブロックすることができ、ポストイベントは、操作が失敗した場合でも常に実行されるため、モデル全体で信頼性が高く、予測可能な動作を保証します。

このロジックをORDAデータクラス内に統合することで、エンティティの動作は予測可能で、自己完結し、アプリケーション全体で一貫したものになります。ビジネスルールは、もはやトリガーの中に隠されたものではありません。外部システムはネイティブのイベントフックを通して、クリーンに統合することができます。ORDAベースのプロジェクトでは、従来のトリガーはもはや必要ありません。ライフサイクルイベントは、よりクリーンで保守性の高いアーキテクチャにおいてORDAのフルパワーを発揮します。

エンティティセレクションのデータ制限

ビジネスアプリケーションにおいて、誰がどのデータを見るかを制御することは非常に重要です。

4Dの既存のアクセス許可システムは、ユーザがアクセスできるかどうかをデータクラス単位で制御しますが、4D 21で導入された新しいrestrict() 関数は、そのアクセスをさらに洗練させます。この関数を使用すると、セッション値やユーザーのロール、その他の実行時ロジックに基づいて、エンティティセレクションにコンテキストフィルタを適用することができます。

コード全体に手動でフィルタを適用するのではなく、restrict() 関数を使用して、データクラスの内部でフィルタを定義します。例えば、営業担当者は自分が管理する顧客のみを表示するように制限することができ、その一方で管理者はデータセット全体を表示することができます。これらはすべて、query()all() のような読み取り操作のたびに自動的に決定されます。

このような一元的なアプローチにより、セキュリティが強化されるだけでなく、Webとクライアント/サーバの両方のコンテキストにおいて、ロジックをクリーンで一貫性のあるものに保つことができます。

自動ギャップ除去によるクリーンなエンティティセレクション

ユーザーが選択範囲からエンティティを削除すると、通常、インターフェースは空のプレースホルダで乱雑になりがちです。これは、フローを壊すだけでなく、摩擦を増やし、UIの応答性を低下させます。

4D 21では、新しいclean() 関数が、これを1行で解決します。ドロップを実行した後、.clean() をエンティティセレクションに対して呼び出すだけで、削除されたエンティティによって残されたギャップが自動的に削除されます。これはシームレスかつ効率的で、手動で再構築することなく、洗練された中断のないビューを復元します。

この小さな追加は、インターフェースの品質とユーザーエクスペリエンスの大きな改善につながります。また、UIだけにとどまりません。$entityset REST APIは、clean パラメータもサポートしており、これによって、削除後でもAPIレスポンスが隙間のないきれいなデータを返すことができます。

デスクトップインターフェースを開発している場合でも、Webクライアントで作業している場合でも、この機能によってデータ・ビューが整頓され、ユーザーインタラクションがスムーズになります。

4D Qodly Pro

4D Qodly Proを使えば、HTMLやJavaScriptを一行も書くことなく、最新のブラウザベースのインターフェースでビジネスアプリケーションを拡張することができます。ビジュアルなドラッグ&ドロップエディターで、レスポンシブWebフォームを作成し、4Dビジネスロジックに直接接続することができます。

Qodlyページは、Webエリアを使って、従来の4Dフォームに直接埋め込むことができます。ユーザーから見ると、全てが1つの統一されたインターフェースのように感じられます。別ウィンドウや追加ライセンスは必要ありません。埋め込まれたQodlyページは、4Dリモートクライアントと同じセッションとライセンスを共有するため、透明性が保たれ、 追加コストもかかりません

もし、これが実際にどのように素早く実装されるかをご覧になりたい場合は、4D Qodly Proの公式ウェビナーのリプレイをご覧ください。

アプリケーションを書き換えることなく、最新のウェブインターフェースを構築

4D Qodly Proを使えば、Webフレームワークを学んだり、ロジックを書き換えたり、別々のコードベースを管理することなく、既存の4Dアプリケーションの上に、モダンなブラウザベースのインターフェースを作成することができます。ページをビジュアルにデザインし、データをビジュアルにバインドし、アクセスをビジュアルに保護し、APIをビジュアルに公開します。その結果、より少ないコード、より少ない複雑さ、UIとビジネスロジックの断絶なしに、Webへの速やかなパスが実現します。

  • アーキテクチャーを再構築することなく、デスクトップアプリケーションを拡張したり、ウェブに移行することができます: Qodly Pagesは、既存のORDAモデルとサーバークラスの上に存在します。あなたのロジック、データベース、セキュリティルールはそのまま残ります。

  • 再利用可能なコンポーネントを使用して、レスポンシブなインターフェースを視覚的に構築できます: コンポーネントをキャンバスにドラッグし、サイドパネルで設定し、コードを書くことなく Qodly sourcesにバインドします。作り込まれたコンポーネントと既製のテンプレートにより、一貫したスタイリングで素早く画面を組み立てることができます。

  • フロントエンドの複雑さを取り除き、開発をスピードアップ: データバインディング、フォーマット、条件付きステート、イベント、ナビゲーションはすべてビジュアルで行われます。HTML、CSS、JavaScriptは必要なく、4DロジックとQodly Studioのパネルだけです。

  • 既にお持ちの4Dクライアントライセンスをを使用する: Qodlyページが4DリモートクライアントのWebエリアに埋め込まれると、同じセッションとライセンスの下で実行されます。ユーザーには統一されたインターフェースが表示され、導入はシンプルで費用対効果に優れています。

  • 使い慣れたドラッグ&ドロップ操作で、チームの生産性を維持します: Qodly Studioは、4Dフォームエディタをモデルにしているので、新しい開発者がプロジェクトに参加しやすく、経験豊富な4Dチームがより速く作業できるようになっています。

  • デザイン、ロジック、データの全てが同じ環境にあります: Qodly Studioがレイアウトを処理し、Qodly Pagesが構造を定義し、ビジネスルールはクラスに格納されます。全てをここで管理でき、外部ファイルや分離されたフレームワークに散在するものはありません。

  • ダイナミックな振る舞いを視覚的に構築: 条件付き状態や非条件付き状態により、ユーザーの役割やデータの変更、UIインタラクションなどにページを適応させることができ、またこれらを単一のパネルから設定することが可能です。要素がいつ、どのような理由で表示、変更、または反応するかを正確に確認できます。

  • ロール、権限、アクセスルールを視覚的に定義: 専用のインターフェースにより、ロール階層の構築、権限の割り当て、最終的な権限の確認が一目でできます。アプリケーションのどの部分を誰が読み取り、更新、削除、実行できるかを明確にします。

  • サーバーロジックをシンプルで視覚的なHTTPハンドラとして公開: クラスを選び、メソッドを選び、URLパターンを定義すると、Qodlyがルーティングを処理します。レイヤーやフレームワークを追加することなく、簡単にAPIを公開したり、外部システムを統合することができます。

  • 4D Server上で直接ページをデバッグ可能: UIの変更を即座にプレビューし、Qodly sourcesを検査し、Qodly Pro内で4Dデバッガーを使用します。

カスタムコンポーネント:独自のビルディングブロックでQodlyを拡張する

4D Qodly Proはカスタムコンポーネントもサポートしています。これによって、ビルトインのツールキットを超えてUIを拡張する方法を提供しています。

  • 独自のReactコンポーネントで新しい機能を追加: 複雑なウィジェット、特殊なビジュアライゼーション、ユニークなインタラクションをReactコンポーネントとしてビルドし、それをQodly Studioに直接アップロードすることができます。

  • プロジェクト間で再利用したり、コミュニティ内で共有したりすることも可能: カスタムコンポーネントは、一度インストールすればネイティブコンポーネントと同じように動作し、ドラッグ&ドロップ、データのバインド、スタイルの適用、イベントのトリガーがまったく同じように行えます。

  • 開発を効率的に: 特化したUIを毎回作り直す代わりに、コンポーネントを一度インストールすれば、どこでも使用できます。

  • 他のUIとスムーズに融合: Qodlyがコンポーネントをランタイム内で効率的に動作させる一方で、あなたは外観、動作、統合をコントロールすることができます。

また、アクティブなコミュニティがカスタムコンポーネントを継続的に共有しているため、すべてを自分で構築することなく、ツールボックスを充実させることができます。

Qodly Studioの自動セットアップblank

4DデザインモードからQodly Studioを初めて起動すると、自動セットアップウィザードが起動します。全ての必要な設定、つまりRESTサーバーの有効化、スケーラブルセッション、Webサーバーポートなどが検出され、それらを有効にするプロンプトが表示されます。

承認されると、必要に応じてサービスが再起動され、Qodly Studioがブラウザで開きます。拒否された場合、変更は行われません。ワークフローはスムーズで速く、新しいユーザーでもハンズフリーで操作できます。

クライアント/サーバーアプリケーションと4D Qodly Pro間の共有セッションと相互作用blank

Qodlyページが4DリモートクライアントのWebエリア内に表示されると、同じセッション、同じライセンスで動作します。つまり、余分なライセンスは消費されず、同じセッションコンテキストがデスクトップフォームと4D Qodly Proページの間をシームレスに流れます。

認証と権限は自動的に保持され、セッションデータは、例えば、現在選択されているエンティティの詳細を表示するなど、デスクトップからのコンテキストでWebページを初期化するために渡すことができます。

セッションの共有と同時に、4D Qodly Proのアクションは、4Dフォームと4D Qodly Proページ間の直接的な双方向インタラクションを可能にします。Qodlyページから、WA SET CONTEXT コマンドで初期化された$4d オブジェクトを通して、4D関数を呼び出すことができます。逆に、4DフォームはQodlyソースを直接更新することができ、両方の環境で同期された状態とロジックを保証します。

これらの機能強化により、従来の4Dフォームと最新のQodlyページを1つのアプリケーションで簡単に組み合わせることができ、セッション、インタラクション、コンテキストを統一しながら、冗長なログイン、余分なライセンス、複雑な統合作業を避けることができます。

ビルトインされた多言語化(i18n)blank

4D Qodly Proには国際化(i18n)が組み込まれているので、アプリケーションは複数の言語や地域設定にシームレスに対応できます。

サポートされている言語は、新しいLocalizationセクションでロケールとして定義され、翻訳キーと値を管理し、コンポーネントにバインドすることができます。言語の選択は、ビルトインのUserLanguage Qodly Sourceによって処理され、ユーザーの選択がリアルタイムで適用されます。

自動フォールバックは、セッションデータ、ブラウザのデフォルト、またはプライマリロケールをカバーし、ネイティブの右から左(RTL)サポートは、アラビア語のような言語を自然に感じさせます。言語を切り替えるとコンテンツが即座に更新され、スムーズでパーソナライズされた体験が生まれます。

これにより、UIの再設計や複雑さを追加することなく、新しい市場への進出、システム導入時の摩擦の軽減、ユーザーの信頼性の強化が可能になります。ローカルでもグローバルでも、あなたの製品はユーザーの言語に対応できます。

Qodlyページ イベントレポートblank

イベントレポートは、標準アクション、ナビゲーションアクション、クラスファンクション、ダイアログアクションのいずれから発生したものであっても、ページ上のすべてのイベントをわかりやすく統一して表示します。どのイベントが宣言され、どこで実装され、どの順番で実行されるかがわかります。

イベントフローを透明にすることで、デバッグをスピードアップし、ハンドラの重複や欠落を即座に発見し、最適化を容易にします。チームでの共同作業がより容易になり、ページの動作を正確に把握する自信がつきます。

小規模なアプリケーションから大規模なソリューションまで、イベント管理に明快さ、正確さ、効率性をもたらすシンプルな方法です。

キャンバスズームコントロールblank

4D Qodly Proのページエディターには、複雑なレイアウトの作業を簡単にするキャンバスズームコントロールが含まれています。キーボードショートカットやマウスホイールナビゲーションに対応し、ツールバーから直接、拡大、縮小、表示のリセットができるようになりました。

現在のズームレベルはインターフェースに表示されるため、開発者はキャンバス上のコンポーネントの表示と配置を正確にコントロールできます。

これらの機能強化により、ナビゲーション、デザインの正確性、全体的な使いやすさが向上し、ページ・エディタが最新のビジュアル・デザイン・ツールの標準に沿うようになりました。

データベース

4D 21は、より堅牢で、より信頼できる、スケールしてもより良いパフォーマンスをもたらす機能により、データモデルの基盤を強化します。オブジェクトフィールドに直接クラスを割り当てることができるようになり、これによりオブジェクトの検証が保証され、より安全な、型指定がされたモデルを実現します。レコードのセレクションは、バックグラウンドでデータが変更されても一貫性を維持するようになり、長時間実行される操作でも安定した結果を保証します。またUUID v7の新しいサポートにより、識別子が時間順に並べられるようになるとともにインデックスが作成しやすくなり、分散システム間での大規模なデータセットにおいても並べ替えが容易になり、クエリが高速になります。

ストラクチャーエディタのクラス指定オブジェクトフィールド

ストラクチャーエディタで、オブジェクトフィールドを特定のクラスに割り当てることができるようになりました。これは単なるメタデータではなく、4Dが複数のレベルで保証するいわば契約です。

オブジェクトフィールドにユーザークラスを割り当てると、次のようなことができます:

  • プロパティレベルでのオートコンプリート

  • コンパイル時のシンタックスチェック

  • オブジェクト形状のランタイム検証

オブジェクトが宣言されたクラスと一致しない場合、4Dはエラーを生成します。ストラクチャーはスキームとなり、データはクリーンな状態を保ちます。また、4D.Vector と組み合わせると、クラス内に型指定されたベクトル属性を定義することで、すべてのエンティティが独自のセマンティックな”指紋”を持つことを意味し、これによって類似性のスコアリング、AIによるソート、インテリジェントな提案が可能になります。

レコードのセレクションの一貫性を保つ

4D 21では、レコードが削除され、バックグラウンドで新しいレコードが作成されても、レコードのセレクションが安定した状態をキープすることを保証することで、データの信頼性を強化します。

以前のバージョンでは、レコードを削除すると内部スロットが解放され、そのスロットが後に新しく作成されたレコードで再利用される可能性がありました。

現在では、一度セレクションが作成されると、それが存在し続ける限りは一貫した状態を保ちます。削除されたレコードはセレクションから消え、新しく作成されたレコードがセレクションに紛れ込むことはありません。これは従来のQUERYによるセレクションとORDAのエンティティセレクションの両方に適用されます。

このアップデートにより、ループ、メールの併合、バックグラウンドタスク、あるいは長期間使用し続けるようなセレクションは、意図したとおりに動作します。予期せぬ振る舞いも、余計なチェックも必要ありません。

v7 UUIDのサポート

UUID 生成がさらに進化しました。 Generate UUID は、バージョン7の識別子をサポートするようになりました。つまり、あなたのUUIDは普遍的に固有であるだけでなく、時系列でソート可能で、よりデータベース・フレンドリーとなり、最新の分散システム用に適した設計となりました。

内部的には、バージョン7のUUID はタイムスタンプデータを埋め込んでおり、順序付けられたストレージに理想的で、またインデックスを付けやすくしています。これは小さな変更かもしれませんが、スケール性とクエリパフォーマンスに大きな影響を与える変更です。

4Dコンポーネント

4D 21は、コンポーネント開発に2つの大きな進歩をもたらしました。それは、完全にモダンな依存関係マネージャと、プロジェクト内でのシームレスなコンポーネント編集です。オプションのコンポーネント管理で “必要なものだけ “ロードし、GitHubから直接コンポーネントをプルし、すべてを4Dのバージョンに自動的に合わせ、再帰的な依存関係の解決と競合の回避を4Dに任せることができます。同時に、コンポーネントのコードをホストプロジェクト内で直接表示、編集、デバッグすることができ、これによってコンポーネントを多用したプロジェクトの開発をより速く、よりクリーンに、そしてより簡単にメンテナンスすることができるようになります。これらの変更により、チームやプロジェクト全体でコンポーネントを構築、共有、拡張するための合理的で予測可能なワークフローが実現します。

シームレスなプロジェクト内コンポーネント統合blank

4Dでのコンポーネント開発は、大きく前進しました。コンポーネントのメソッドとクラスは、共有されているかどうかに関わらず、ホストプロジェクトで直接表示・編集できるようになりました。これにより開発の途中でコンポーネントを個別に開いたり、集中を削がれてしまうようなことがなくなります。すべてのメソッドをその場で編集できるようになり、コンポーネント全体をホストUIから作成することができます。これらは名前空間、ファイル、ストラクチャーが全て初期化された状態で作成し、インタープリタモードですぐに編集できるようになりました。

コードだけでなく、読み取り専用のフォーム、フォルダ、定数、コマンド、プラグイン、さらにはコンポーネント固有のゴミ箱まで見ることができるようになりました。定数は、ソースコンポーネントへのリンクを維持し、アプリ全体の一貫性を担保します。一方、新規作成フローは、依存関係を自動的に配線し、マネージドモードとレガシーモードの両方で構造を設定します。

これらの変更により、コンポーネントとの反復がより速くなり、モジュール化がよりスムーズになり、プロジェクトがよりクリーンで透明なものになります。コンポーネントをホストプロジェクトのワークフローに近づける重要なマイルストーンであり、今後さらなる改善が追加される予定となっています。

選択的なコンポーネント管理blank

4D 21では、もはや標準の4Dコンポーネントを内蔵していません。その代わりに、依存関係の追加ダイアログ自分に必要なコンポーネントを選択すると、4Dが自動的にコンポーネントを取得し、オンデマンドでインストールします。この方法を通して、4D AI Kit、4D NetKit、4D View Pro、SVGなど、GitHubでオープンソースとして公開されている4Dコンポーネントのカタログ全体に直接アクセスすることができます。これにより、必要なものだけをインストールする柔軟性が得られると同時に、コンポーネントの内部を調べたり、改良に貢献したり、進化するニーズにプロジェクトを合わせることが容易になります。

  • 選択された依存関係:必要なコンポーネントのみがインストールされます。

  • バージョンの整合:依存関係は、デフォルトで現在の4Dバージョンに従います。これにより手動でチェックしなくても互換性が確保されます。

4D 21にアップグレードする際、既存のプロジェクトは必要なコンポーネントを自動的にダウンロードすることができ、バイナリデータベースの場合はインストーラーまたはダウンロードポータルを使用することで引き続きこれらの機能にアクセスできます。

“4Dのバージョンに追随する”で依存性の互換性を自動化

4Dのバージョンに追随するルールは、依存関係を4D環境と自動的に同期することで、依存関係の管理を簡素化します。これにより、互換性の問題を減らし、時間を節約することができます。

  • 自動的な互換性:依存関係を4Dのバージョンに合わせるので、手動でのトラッキングは必要ありません。
  • 簡素化されたアップデートとダウングレード:4Dをアップグレードまたはダウングレードすると、依存関係は自動的に更新されます。
  • 信頼性の高い依存関係の解決:システムは、LTSとRリリースの構造化されたタグの命名規則に基づいて依存関係を解決します。

githubネイティブなコンポーネント統合と依存関係コントロール

4D 21のコンポーネント統合は、現在開発が実際に行われている方法に合わせて設計されています。チームはコードを共有する、内部ライブラリは進化する、公開されたコンポーネントは改善される。これらは、すべてがGitHubを通じて動きます。新しい依存関係システムは、あなたのプロジェクトをこれらのリポジトリに直接接続するため、手動で操作することなく、コンポーネントがインストールされ、更新され、そのソースに沿った状態を維持します。

コンポーネントが参照されると、4D はそれをGitHub から直接取得し、セマンティックなバージョンルールを適用します。安定性が重要な場合はバージョンを凍結し、アップグレードをコントロールしたい場合はバージョンを安全な範囲にとどめ、開発中でバージョンを行ったり来たりするような場合には最新のリリースに従うことができます。新しいバージョンがGitHub で公開されると、4D はそれを即座に知らせてくるので、1つのコンポーネントやセット全体をワンステップでアップデートすることができます。

これはプライベートリポジトリでも問題なく動作します。トークンを一度追加しさえすれば、あとは4Dが処理し、内部コンポーネントを公開のものと同じようにスムーズに取得します。

これにより、クリーンで予測可能なフローが生まれます。すべてのコンポーネントは追跡可能になります。すべてのアップデートは意図的なものです(意図しないアップデートでエラーが起きることはありません)。すべての依存関係は、それを定義するコードベースとのつながりを失いません。これによりコンポーネントの採用が容易になり、メンテナンスが軽くなり、チーム間でコードを共有することがワークフローの自然な一部となります。

再帰的な依存関係の解決と管理

コンポーネントマネージャは、依存関係のツリー全体を理解します。コンポーネントがプロジェクトに入ると、4Dはそれが必要とする依存関係を分析し、必要なものを自動的にロードし、コンフリクトが表面化しないようにチェックします。

この再帰的なロードによって、二次的な依存関係が分からなくならないようにします。バージョン範囲はインテリジェントに解決されるので、ビルドを壊すことなく、複数のコンポーネントが同じライブラリを使用することができます。また、サイクル(依存関係の無限ループ)が発生した場合、4Dはそれを根本からブロックすることで、プロジェクトの安定性を保ちます。

これにより、宣言された依存関係、間接的な依存関係、あるいはどのコンポーネントが何を必要としているかなど、アプリケーションの依存関係の構造を明確に把握することができます。コンポーネントの追加、更新、削除はツリーを通して伝搬されるので、手動でクリーンアップすることなく、プロジェクトの一貫性を保つことができます。

ローカルコンポーネントの追加と削除

4D 21のローカルコンポーネントの管理は、よりスムーズで分かりやすくなりました。プロジェクト依存関係インターフェースは、コンポーネントの追加、削除、整理を、ファイルシステムに触れることなく、あるいはプロジェクト設定を探し回ることなく、一箇所で行うことができます。

全ては2つのファイルを使用して管理されます。dependencies.jsonは一貫性を保つためにプロジェクトの依存関係を一元管理し、environment4d.jsonはカスタマイズ可能なコンポーネントパスを処理します。ローカルのコンポーネントを追加すると、4Dは自動的に正しいエントリーを書き込みます。コンポーネントが他の場所にある場合は、両方のファイルが更新され、macOS でもWindows でも、どのマシンでもプロジェクトがきれいに開くようになります。コンポーネントの削除も同じ流れで行われ、偶発的な破損を避けるために確認プロンプトが表示される一方、設定を安定させるために自動クリーンアップが行われます。

変更を有効にするには再起動が必要ですが、4Dは明確な通知であなたをガイドします。このプロセスによって、摩擦を減らし、セットアップ時間を短縮し、必要としてるコンポーネントへのより速く、より信頼性の高いアクセスを提供します。

宣言された名前空間を使用してコンポーネント間でクラスを共有

4D 21は、コンポーネントの相互作用をよりシンプルにします。コンポーネントが名前空間を宣言すると、そのすべてのクラスが自動的に同じホストプロジェクト内の他のすべてのコンポーネントで利用可能になります。

このため、特別な設定や回避策が不要になり、必要なコンポーネントをインポートするだけで、cs.<namespace> を通して、そのコンポーネントのクラスをコード内で直接使用することができます。

このアプローチにより、コンポーネントベースの開発は、よりモジュール化され、予測可能なものとなり、保守が容易になります。

シリコンmacOS の公証のために更新されたコンポーネント構造

4D 21は、シリコンベースのmacのためのAppleの公証要件に沿うためにコンポーネント構造を再設計しています。コンポーネントは、完全な4Dアプリケーションと同じレイアウトに従うようになり、これにより公証の信頼性が向上し、開発者が以前のフォーマットで直面していた構造的な問題が取り除かれました。

メタデータは、ビルド時に自動的に生成されるようになりました。CFBundleDisplayNameCFBundleShortVersionStringCFBundleVersion、著作権情報などのフィールドは、ビルド設定から直接入力されます。Build4Dを使用する場合、これらの値はbuildApp.4DSettingsから取得されるため、コンポーネントは余分な設定なしに正しくパッケージ化されます。

この新しい構造は、4D 20 R720 LTSのような古い4Dバージョンと互換性がないことに注意してください。4D 20 R8でビルドされたコンポーネントは、この新しい構造を導入しており、古いコンポーネントをロードすることができますが、古いバージョンでは、更新されたレイアウトを使用してビルドされたコンポーネントをロードすることはできません。

4D NetKitとメール機能

4D NetKitは、単なるMicrosoft 365とGoogleのユーティリティのセットから、より深い認証とコミュニケーションのフレームワークへと成長しました。Microsoft 365を通してアプリケーションにSingle Sign-On機能を提供し、OpenID Connectを完全にサポートすることでその機能を拡張し、さまざまなIDプロバイダーへの扉を開きます:Google、Okta、エンタープライズIAMシステムなど、標準規格を話すものならこれを使用することができます。

その結果、ログインフロー、トークン処理、電子メール操作、カレンダー統合などが、もはや無理矢理結合された外部システムのように感じられることはありません。これらはアプリケーションの基盤の一部となり、安全で、モダンで、直感的なものとなります。

完全なGmailメッセージとラベル管理

4D 21のGmail機能は、単純な “メールを送信する “というエントリーポイントから、プログラムで管理可能な “完全なメールボックスへ” と成長しました。あなたのアプリがOAuth 2.0で認証されると、Gmailは、扱いづらいリモートサービスではなく、あなたのロジックに追加されたレイヤーのように振る舞います。

まずは送信機能です。構造化されたメールを作成し、SMTPリレーやレガシー・プロトコルの脆弱性に困らされることなく、Gmail APIを通じて送信することができます。これはクリーンで、簡単で、安全な方法です。

次は受信トレイ機能です。自分のデータ構造に適用するのと同じ精度で、受信トレイを読み出し、形を整え、再編成し、きれいにすることができます。

4D 21では以下のようなことができるようになりました

  • システムラベルやカスタムラベルを含む、Gmailの完全なラベルリストを取得する

  • あらゆるラベルのメッセージIDを取得(受信トレイ、ゴミ箱、未読、フォルダ)

  • オンデマンドでメールコンテンツ全体をロード

  • 1回の呼び出しでメッセージを削除またはゴミ箱へ移動

  • 1回のリクエストで最大100通まで、複数のメールを一度に取得

  • ラベルの割り当てまたは削除(これには仕事 + 重要などの組み合わせも含まれます)

  • プログラムによるラベルの作成更新削除

  • 未読数や総メッセージ数など、ラベルのメタデータを取得

これは単なる「メールへのアクセス」ではなく、「メールの自動化」です。

Gmailの下書きを作成・管理

4D 21では、メールボックス内に直接Gmailの下書きを作成することができます。これはどのラベルでも適用することができ、また送信する必要もありません。このようにして再利用可能なテンプレートをGmailの適切なラベル下に保存しておけば、必要な時にすぐに取り出して編集し、送信することができます。

Gmail APIを使用すれば、メッセージを下書き(デフォルトのDRAFTラベルまたは独自のカスタムラベル付き)として追加し、後で開いて修正し、標準のGmailフローで送信することができます。下書きが不要になったら、もちろん削除することができます。

MICROSOFT 365メールのプロパティを更新

4D 21では、Microsoft 365のメッセージを直接コントロールできます。 Office365.mail.update() を使用することで、受信したメール、または下書きのメールのプロパティを更新することができます。元々は、メールの.isReadフラグを変更したいという要望が発端でしたが、この機能はそれを超えてさらなる進化を遂げています。

Microsoft Graphを通じて、既読ステータス、カテゴリ、重要度などの属性を調整できます。また、下書きのメールを扱っている場合は、件名や本文のようなより深い要素を更新することもできます。こうすることで手作業や外部ツールを使わずに、メールボックスの状態をワークフローと同期させることができます。

メッセージを処理済みとしてマークしたり、レビューのためにタグを付けたり、ビジネスルールに基づいて再分類したり、後で完成させるために下書きメッセージを準備したりと、アプリケーションがどのように反応するかを決定します。全ては1つのAPI、1つの認証フロー、1つの一貫したモデルの下に留まります。

複数のメールボックスの未読メール数の取得

4D 21では、未読メール数のチェックがより効率的になりました。IMAPTransporter.getBoxList() 関数をしようすると、メールボックスのプロパティ未読件数の両方を1回のリクエストで返せるようになりました。

未読数、合計数、最近のメール数など、すべてのメールボックスの概要が必要な場合は、 “withBoxInfo”オプションを有効にすることで、一度にすべてを取得することができます:

var $boxes := $transporter.getBoxList({withBoxInfo: True})
特定のメールボックスのカウントだけが必要な場合は、コレクションでそのメールボックスの名前を渡すだけです:
$boxes := $transporter.getBoxList({ withBoxProperties: False; withBoxInfo: True; names: ["INBOX"; "Drafts"] })
このような改良により、サーバーの呼び出し回数を減らしながら、最新の未読数を簡単に更新できるようになりました。同じ機能強化が 4D NetKitのGmail APIにも適用され 、IMAPとGmailの両方の統合で一貫した効果を得ることができます。

Googleのユーザー情報/ディレクトリ情報へのアクセス

4D 21は、アプリケーションにGoogleユーザーデータへの直接アクセス機能を提供します。これによってインターフェースのパーソナライズ、コミュニケーションフローの自動化、ドメイン全体のディレクトリでの作業を容易にします。OAuth 2.0で認証されると、現在のユーザーの基本的なプロフィールから、完全な連絡先リストや組織の記録まで、あらゆる情報を引き出すことができます。

以下のような情報を取得することができます:

  • 現在認証されているユーザーの詳細

  • ドメインプロファイルと連絡先ディレクトリ

  • リソース名とフィールド・マスクを使用した特定のユーザー・レコード

これらの機能により、誰がログインしているかを表示したり、適切な受信者を自動的に取得したり、手動で検索することなく組織データを同期したりと、アプリを使用する人に適応させることができます。

Google & Microsoft 365の完全なカレンダー管理

4D 21のカレンダー管理は、新しいcs.NetKit.Office365.calendar と、cs.NetKit.Google.calendar クラスを使用することによって、単純に情報を取得する段階から完全なコントロールへと大幅に移行します。あなたのアプリケーションは、GoogleカレンダーでもMicrosoft 365でも、カレンダーを読み出し、イベントを取得し、会議のライフサイクル全体を管理することができます。OAuth 2.0接続を1回行うだけで、スケジュール管理ワークフローは外部システムではなく、まるであなたのアプリの拡張機能のように振る舞い始めます。

これによってあるアカウントにリンクされている全てのカレンダーを取得し、あなたのロジックが気になる予定を選び出し、共有範囲、制限、繰り返し頻度などのフィルターを使ってそのイベントをロードすることができます。そこから、会議の開始・終了時間、出席者、リマインダー、カテゴリー、繰り返しルール、さらにはTeamsやGoogle Meetのようなビデオ会議リンクなど、会議そのものを自由に定義することができます。

イベントの作成、更新、削除は一回の関数呼び出しで行えます。イベントがキャンセルされた場合には、出席者に自動的に通知されます。更新された場合は、プラットフォームが詳細の再送信を処理します。これによってあなたの仕事は、HTTPコールを管理したり、複数のシステム間のAPIの違いを調整したりすることではなく、ワークフローそのものを定義することへと変容します。

4D 21では、次のようなことができます:

  • GoogleとMicrosoft 365のカレンダーを取得する。

  • 開始時間/終了時間、フィルター、オプションの拡張機能を使ってイベントをロードする。

  • 出席者、説明、リマインダー、リンクを含んだミーティングの作成

  • イベントを再作成することなく、重要なフィールドのみを更新する。

  • イベントを完全に削除しつつ、プラットフォームに通知を処理させる。

Oauth2、Openid 接続と認証コントロールの強化

4D 21での認証がよりスムーズに、より安全に、より柔軟になりました。4D NetKitは、Microsoft、Google、GitHub、Okta、その他のOAuth2互換のサーバなど主要なプロバイダとの間のOAuth2とOpenIDのフロー全体を管理します。その一方で、余計なコードのレイヤーを追加することなく、セキュリティ、表示、コールバックなどの振る舞いを完全にコントロールすることができます。

4D NetKitは、クライアントID、リダイレクトURI、スコープ、トークン取得、リターンフローなど、やりとり全体を自動的に処理します。認証に成功すると、アプリケーションは独自のHTMLページを直接ユーザーに表示することができ、これによってクリーンで完全に統合されたエクスペリエンスを保つことができます。

以下は、この一つに統合された機能における改善点です:

  • OAuth2認証フローの強化 4D NetKitは、Microsoft、Google、GitHub、または任意のカスタムOAuth2サーバのようなプロバイダのための完全なOAuth2交換を管理し、クライアントID、リダイレクトURI、スコープ、トークン取得、および最終的なリターンを処理するようになりました。これにより、使いづらいシステムページやわかりにくい遷移をすることなく、アプリに直接戻ることができるため、よりスムーズなログインエクスペリエンスが実現します。認証が成功したら、独自のHTMLページを表示することができるので、フローは統合され、モダンで、完全にあなたのコントロール下にあるように感じられます。

  • PKCE(Proof Key for Code Exchange)プロテクションを使用したより安全な認証: cs.NetKit.OAuth2ProviderPKCEEnabled を有効にすることで、すべての認証コード交換が暗号を使用して保護されます。これは、特にデスクトップやネイティブ・アプリケーションにとって重要で、返された認証コードが元のリクエスト・クライアントによってのみ使用されることを保証することで、傍受やリプレイ攻撃からアプリケーションを保護します。新しい暗号化コードを追加で記述することなく、セキュリティを大幅にアップグレードできます。

  • エンタープライズ級のセキュリティのための証明書ベースの OAuth2 認証: クライアントシークレットに依存する代わりに、秘密鍵と証明書の拇印を使用して認証できます4D NetKitは、自動的にアサーションをビルドして署名するため、リスクを劇的に低減し、Microsoft Identity Platformで要求されるような最新のエンタープライズセキュリティプラクティスに適合します。パーミッションをServiceに設定し、.privateKey.thumbprint cs.NetKit.OAuth2Provider オブジェクトに渡すことで、完全な証明書ハンドシェイクとトークン交換が安全かつ一貫して異なる環境の間で実行されます。

  • OAuth ログインフローの表示をカスタムして制御: cs.NetKit.OAuth2Provider の認証情報でbrowserAutoOpenFalse に設定することで、ログイン画面の表示場所を完全に制御できます。Webエリア内に表示したり、ダイアログに埋め込んだり、あるいはUIに合わせたガイド付きワークフローに統合したりできます。セキュリティフローは4D NetKitによって管理されたままですが、それをどのように表示するかはあなたのものになり、ログインエクスペリエンスをとってつけたものではなくよりネイティブなものにすることができます。これは独自のブランドを展開するアプリケーションや、スムーズなログインフローが必要なアプリケーションにとっては理想的なシナリオといえます。

  • OAuth2コールバックにホストWebサーバーを使用: OAuthレスポンスは、ホストWebサーバーのポートを通して直接返せるようになりました。4D NetKit は、リダイレクト URI に基づいて自動的に正しいサーバーを選択します:ホストサーバーと一致するポートはホストサーバーに送られ、80 や 443 のような標準的なポートはデフォルトのホストサーバーに送られ、それ以外は内部の NetKit サーバーへとフォールバックします。ホストサーバーを使用する場合は、HTTPハンドラを追加してコールバックをキャッチすれば、NetKit.OAuth2Authorization.getResponse がやり取りを完了させます。これにより、セカンダリリスナー、ポートの重複、設定の複雑さが回避され、認証フローがすっきりとし、導入が容易になります。

  • stateとnonceの処理によるOpenID Connectへの準拠blank: 認証フローは、statenonce を完全にサポートするようになりました。アプリケーションは、リダイレクトの正当性を検証し、トークンの一意性を自動的に強制できます。state は、レスポンスがリクエストと一致することを保証することで、CSRFのような改ざんから保護します。nonce は、トークンが新しくかつ一意であることを保証することで、リプレイ攻撃を防ぎます。4D NetKitはこの2つのパラメータを内部で管理するため、追加のカスタム認証レイヤーを構築することなく、Google、Microsoft、Oktaといった最新のOpenIDプロバイダを統合することができます。

  • 認証の成功とエラーの結果のカスタムURL blank:cs.NetKit.OAuth2Provider.new() コマンドのauthenticationPageauthenticationErrorPage 属性は、完全なURLを受け入れるようになり、これによりユーザーが認証に成功した後に目にするページを完全に管理することができるようになりました。成功ページやエラーページは、ローカルのHTMLファイルに制限されることなく、4D Qodly Proアプリ内、自身のウェブサーバー、またはサードパーティのサービスなど、どこにでもホストすることができます。これにより、デプロイや再構築の必要がない、4Dアプリケーションから独立して更新可能な、ダイナミックで、ブランド化された、コンテキストの流れを汲むレスポンスを提供することができます。

HTTPサーバー

4D 21は、HTTPサーバーを、より高機能で、より安全で、より開発者に優しいレイヤーへと拡張します。レスポンス・ルールをアプリケーション全体で定義したり、クリーンなハンドラー・マッピングを通してリクエストをルーティングしたり、構造化されたWebコンテンツを返したり、あるいはセッション公開のリスクを負うことなく外部システムを統合することができます。WebSocketクライアントのフルサポートにより、リアルタイム通信が容易になり、よりスマートな認証フローオプションにより、ライセンスの使用状況を管理できます。すべてが、ルーティングの簡素化、セキュリティの強化、Webエンドポイントの通信方法の合理化を目的として設計されています。

カスタムHTTPレスポンスルールblank

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レスポンスに対してフレームワークレベルでポリシーが適用されます。

リクエストハンドラによる構造化されたHTTPルーティング

4D 21ではHTTPリクエストハンドラが導入され、これを使用することで、サーバーがどのようにWebリクエストに対して応答するかを決定する、よりクリーンでモジュール化された方法を提供します。大規模なOn Web Connectionブロックを記述する代わりに、URLパターンをクラス関数にマッピングすることで、ルーティングの整理、テスト、メンテナンスが容易になります。

新しい 4D.IncomingMessageクラスと 4D.OutgoingMessageクラスを使うことで、URL、ヘッダ、パラメータ、ボディコンテンツを検査することができ、それによって構造化されたレスポンスを返すことができます。これは使用目的がユーザーの認証であろうと、ファイルを提供であろうと、ページのリダイレクトであろうと、アップロードの管理であろうと、問題ありません。

すべての設定はHTTPHandlers.jsonで行われ、各エントリで以下を定義します:

  • マッチを検知するURLパターン

  • 受け入れるHTTP動詞(GET、SET、POST、など)

  • リクエストを処理するシングルトンクラスとメソッド

これにより、リクエストルーティングの正確な制御、ビジネスロジックのすっきりとした分離、認証リダイレクト、ファイル処理、さらにはユーザーをQodlyページに転送するようなシナリオのビルトインサポートが可能になります。

ワンタイムパスコードによるセキュアでセッションセーフな統合

4D 21では、ワンタイムパスコード(OTP)とセッションリストアツールが追加され、これを使用することで、セッションクッキーを公開したりユーザーフローを壊すことなく、Webアプリケーションをサードパーティシステムに簡単に接続できるようにします。

Session.createOTP()を使うと、現在のWebセッションにリンクされた1回限りのパスコードを生成できます。これにより、4Dセッションクッキーを公開することなく、このOTPを外部サービス、例えば、メール検証リンクや在庫処理コールバックなどに安全に送信することができます。リクエストが戻ってくると、4Dは以下の要素を使用して自動的に正しいセッションを復元します:

  • 許可されていれば、URL 内の$4DSIDを使用

  • プロバイダがstateパラメータのみをサポートしている場合にはSession.restore()を使用

これにより、マルチステッププロセスに渡ってユーザーコンテキストに一切触れることなく、傍受のリスクを防ぎ、外部APIとのよりクリーンな統合をサポートします。

リアルタイム通信のためのWebSocketクライアントのサポート

リアルタイムアップデートは、ダッシュボードからIoTインターフェースまで、最新のアプリケーションに不可欠な機能といえます。これをサポートするために、4D 21では 4D.WebSocketクラスを導入し、WebSocketサーバに接続するWebSocketクライアントを簡単に構築できるようにしました。

WebSocketは全二重接続を作成し、即座にメッセージを送受信することができます。すでにこれまでも、4D.WebSocketServer を使って独自の WebSocket サーバーをホストすることができましたが、クライアントが実装されたことにより、外部サーバーに接続し、メッセージを交換し、その外部サーバーのイベントに反応することもできるようになりました。

そのためには、onMessage、onOpen、onTerminate、onErrorなどのコールバックを持つハンドラークラスを定義し、以下のコードでクライアントを作成するだけです:

Form.webSocket := 4D.WebSocket.new($url; cs.WSConnectionHandler.new())

そこから、あなたのアプリは、メッセージを即座に受信したり、リアルタイムで更新をプッシュすることができ、これらはチャット機能、ライブダッシュボード、IoTデバイスなどに最適です。

カスタムWebSocketクライアントヘッダー

セキュリティトークン、アプリのメタデータ、カスタムIDなど、WebSocketハンドシェイク中に追加情報を渡す必要がある場合、4D 21では、WebSocketクライアントから直接カスタムヘッダーを定義できます。

カスタムヘッダを定義するには WebSocket ハンドラークラスにheaders 属性を追加するだけです。このオブジェクトは、標準的なHTTPヘッダーと同じように、キーと値のペアで動作します:

This.headers := New object("x-authorization"; $token) 
This.headers.Cookie := "yummy_cookie=choco; tasty_cookie=strawberry"

これらのヘッダーは、接続が開始されると自動的に送信され、サーバーコードを変更することなく、WebSocket セッションの認証、カスタマイズ、設定をするための柔軟な方法を提供します。

この新機能はトークンベースのセキュリティ、マルチテナント設定、またはデータを受信し始める前にクライアントの自己紹介が必要なワークフローに最適です。

outgoingmessageクラスでカスタムのWebコンテンツを配信する

4D 21では、OutgoingMessage クラスが導入され、WebやRESTエンドポイントからファイル、画像、バイナリデータなどのカスタムコンテンツを簡単に返すことができるようになりました。スカラー値やORDAエンティティという制約はなくなり、完全なWebとして準備のできたレスポンスをブラウザに直接送信できるようになりました。

このクラスでは、ヘッダを設定したり、レスポンスボディを定義したり、HTTPステータスコードを選択することができ、どのようにコンテンツが配信されるかを完全にコントロールすることができます。これは、PDFをダウンロードしたり、画像を提供したり、バイナリー・ペイロードを返したりするようなユースケースに最適です。

これをさらにスムーズにするために、4DはonHTTPGet キーワードをサポートするようになりました。これが公開された関数に追加されると、その関数はシンプルなブラウザのGETリクエストで呼び出せるようになり、これはユーザーフレンドリーなリンクやファイルの直接ダウンロードなどに最適といえます。

強制ログインでライセンス消費をコントロール

4D 21では、強制ログインモードを導入しています。これは、ユーザーが実際に認証するまで、RESTリクエストが4D Clientライセンスを消費しないようにするモードです。Qodlyページの読み込み、フォームの表示、記述的RESTコールなどをしただけではライセンスを消費されず、認証に成功したもののみライセンスを使用するようになります。

これにより、ログイン画面によってリソースがブロックされることもなくなり、不必要なライセンス使用が削減され、ライセンスがいつどこで誰に割り当てられるかを完全に制御できるようになります。ユーザーがログアウトすると、ライセンスは即座に解放されます。

4D Write Pro

4D Write Proは、ドキュメントをより簡単に構築し、よりスマートにフォーマットし、よりパワフルに自動化する新しいツールで大きく前進します。表はデータにインテリジェントに適応し、レイアウトは視覚的にあるいはプログラム的に形成しやすくなり、ドキュメントは問題なく数千行にスケール可能で、PDF/A、添付ファイル、e-invoiceのサポートによりエクスポートがより高機能になりました。そしてついに4D Write Pro に統合されたAIアシスタントが、4D Write Proの中で直接、コンテンツの作成、改良、改善をサポートします。

4D Write ProにおけるAI文書作成アシスタント

4D Write Proは、AIによるライティングアシスタントを搭載しました。OpenAI APIに接続すると、文章をより分かりやすくしたり、ミスを修正したり、テキストを整形したり、あるいは単に適切な言葉を見つけたりするためのサポートがリアルタイムで得られます。

API キーをWP SetAIKey を使用して設定することで、AI 機能を有効化できます。有効化すると、インターフェースに新しいAIボタンが表示され、便利なツールに素早くアクセスできるようになります。

このアシスタントとチャットすることで例えばアイデアを得たり、言い回しを改善したり、あるいはスランプを解消したりすることができるかもしれません。さらに、コンテンツの要約、テキストの翻訳、文法のチェック、流れを良くするためのセクションの書き換えなど、あらかじめ定義されたアクションを使えば、さらにスピーディーに作業が進めることができるでしょう。

AIが作成したコンテンツを挿入する際は、プレーンテキスト、完全なスタイル付き、後で使用するためにコピーしてとっておくなど、文章への適用方法を選択することができます。またビルトインの履歴機能により、過去のプロンプトを再確認したり、以前の回答を開いたりなど、作業内容を見失うことなく結果を再利用することができます。

pdf/aエクスポート、添付ファイル、電子請求書のサポート

4D 21では4D Write Proは拡張され、アーカイブ可能なPDFの作成、添付ファイルの埋め込み、電子請求書の生成のための完全なツールセットを提供します。これらの改良の中心は、PDF/Aファミリーのサポートです。PDF/Aファミリーは、文書を何十年も読み続けられるように設計されたPDFの保存に特化したバージョンで、そのほかにも電子請求書のような新しいワークフローを可能にします。

PDF/A-3は、法律、医療、技術、会計、建設、公共事業など、業界や業種を問わず、文書内に添付ファイルを直接埋め込むことができるという点で際立っています。新しいfile書き出しオプションを使えば、テキストファイル、画像、XML、その他のドキュメントを1つのPDFにまとめることができます。

書き出しのワークフローは、すでにご存知の流れと変わりません。まずはインターフェースから、またはプログラムで、PDF/A-2PDF/A-3などのフォーマットを選択します。PDF/A-3を使用する場合、添付ファイルはエクスポートオプションを使用することで簡単に含めることができ、関連するすべての情報をまとめた自己完結型のアーカイブを作成したい場合に最適です。

この機能強化により、4D Write Proは電子請求書の生成も可能になりました。最新の電子請求書は通常、PDF/A-3と、FACTUR-X(フランス)ZUGFeRD(ドイツ)のような標準化されたフォーマットで請求書の詳細を含む、構造化されたXMLファイルを組み合わせて使用します。4D Write Proでは、エクスポート時にfacturXオブジェクトとfileコレクションを通してXMLを追加することで、これらのハイブリッド請求書を作成することができます。

インターフェースとコードからの高度なセクションコントロール

4D 21では、ドキュメント全体の流れをより細やかにコントロールできるようになりました。セクションとサブセクションは、隠された内部機構のようなものではなくなり、インターフェースから視覚的に、またはコードで正確に設定することができるツールになりました。

セクション・コントロールはシンプルなメニューでより豊富なオプションを表示できるようになり、区切りの挿入、異なる先頭ページの定義、左右ページの分割、特定の範囲からのヘッダーとフッターの除去などが可能になりました。これまでは特殊な属性を詳しく調べる必要があったりしたものが、必要な瞬間にクリックするだけで素早く設定できるようになりました。

プログラミングの面では、新しいセクション管理コマンドにより、文書の残りの部分を邪魔することなく、構造要素をきれいに削除したりそれらをリセットしたりできます。

  • WP DELETE SECTIONは、書式を崩したり、インデックスの順番をめちゃくちゃにすることなく、セクション全体、そのコンテンツ、ヘッダー、フッター、アンカー要素を削除します。

  • WP DELETE SUBSECTIONは、アンカーされた画像やテキストボックスを含む、”異なる最初のページ “や “異なる左右のページ “に結びついた属性を消去します。

  • WP RESET ATTRIBUTESは、セクションまたはサブセクションレベルの設定をオーバーライドし、その箇所が継承すべき設定へとワンステップで戻すことができます。

これらの機能拡張を組み合わせることで、スムーズなトップダウンのワークフローが実現します。レイアウトを形成する際はインターフェースから直感的に編集でき、ロジックが必要に応じてセクションをリセット、削除、再編集する必要がある場合は、プログラムで正確に制御することができます。

wk page sizeでワンステップでページサイズを設定

4D 21では、新しい4D Write Proドキュメント属性、wk page size が追加され、ドキュメントの全体的なサイズをより簡単に定義できるようになりました。幅と高さを別々に設定する代わりに、1つの値で両方を一度に適用できるようになりました。

以下の中から選択できます:

  • ビルトインのプリンターフォーマット

  • 独自のカスタムフォーマット

  • あらゆるISOサイズ (A0-A10、Bシリーズ、Cシリーズ、DL、リーガル、タブロイドなど)

つまり、現在選択されているプリンターを気にすることなく、印刷または書き出し用の文書をデザインできます。準備しているものが、手紙、請求書、小冊子、あるいはカスタムのレイアウトのいずれであっても、適切なサイズの設定がよりシンプルに、より速く、より一貫したものになりました。

写真やテキストボックスの周りをテキストで囲む

4D 21では、画像やテキストボックスにテキストを回り込ませる機能が追加されました。これはドキュメントのレイアウトにさらなる柔軟性をもたらします。新しいアンカーモードにより、画像やテキストボックスにテキストを回り込ませることができ、制約のない視覚的に魅力的なドキュメントを作成できます。

4D Write Proのインターフェースが改良され、画像やテキストボックスの表示方法を選択できるようになりました。image/anchorLayouttextBox/anchorLayoutの標準アクションに新しい値が追加されました。また、新しい属性を使ってプログラミングでこれらの設定を調整することもできます:wk text wrap top bottom wk text wrap squarewk text wrap square left wk text wrap square right wk text wrap square largestなどです。

これらの折り返し設定は、SVG、PDF、埋め込みHTMLにエクスポートするときや、Word文書をインポートまたはエクスポートするときにも保持されます。

スマートな表組デザインとセル結合

4D 21は、4D Write Proでの表の作成とフォーマットを、開発者とエンドユーザーの両方にとってはるかに簡単にする2つの大きな改良をもたらします。

テーブルウィザードを使えば、データソースや数式を理解しなくても、データベースのデータからテーブルを生成することができます。開発者から提供されたテンプレートを使用すれば、フィールドの選択、ラベルの翻訳、ビジネス特有の計算式の準備、グラフィックスタイルの適用を、すべてガイド付きインターフェースで行うことができます。

テーブルが作成されると、新しいセルマージ機能により、レイアウトと構造を完全に制御できます。表がプログラムで自動的に埋められたものでも、インターフェースを使用して手動で埋められたものでも、セルを水平方向垂直方向、またはブロック単位でマージできます。マージは、インターフェース(ツールバーボタンとコンテクストメニュー)、標準アクション(cell/mergecell/split)、または新しいWP TABLE MERGE CELLSWP TABLE SPLIT CELLSコマンドを使用したコードで実行できます。

これらのツールを併用することで、どのようなドキュメントやデータ・プレゼンテーションのニーズにも適応する、よりクリーンで柔軟なテーブルを簡単にデザインすることができます。

表の行と列の数が無制限に

4D 21では、4D Write Proの表のこれまでの1,000行の制限を撤廃しました。これにより、長い請求書、カタログ、ディレクトリ、その他あらゆるデータドリブンドキュメントを、なんの制約なしに生成することが可能になります。

表がデータソースにリンクされている場合、ヘッダー、ソートブレーク、追加の行、キャリーオーバーが含まれていても、エンティティセレクションまたはコレクション内のすべての項目が行を生成できるようになりました。これにより、レイアウトを構造化したまま、大規模なドキュメントを自由に作成できるようになりました。

空のデータソースの管理

4D 21では、リンク先のデータソースにデータがない場合に、表をどのように表示させるかをより自由にコントロールできます。新しいwk empty datasource 属性を使えば、このような場合にどのような処理を行うかを正確に決めることができ、ドキュメントが常に意図的で洗練されたものになります。

実際の振る舞いは、以下から選択できます:

  • データ行を表示する (デフォルト)

  • ヘッダ行とそれに続く行を保持したまま、データ行を非表示にする

  • 意味のあるコンテンツを提供しなくなった場合、テーブル全体を非表示にする

  • 空の状態の行のために特別に設計されたプレースホルダ行を表示する

非表示にした表の境界線を一時的に表示する

4D 21では、visibleTableBorders プロパティを導入することで、表の扱いがより簡単になりました。これは、非表示の境界線を一時的に点線で表示するビューオプションです。これにより、特にセルが結合されたときに、ドキュメントの最終的な外観を変えることなく、表の構造を確認することができます。

このオプションは、ツールバーまたはサイドバーから直接切り替えることができ、編集中により鮮明なビューを提供し、レイアウトの正確性と管理のしやすさを維持します。

フォーミュラに名前を付ける

フォーミュラは4D Write Proのドキュメントで大きな役割を果たしますが、これまでは、その表示、値、式、記号がテンプレートを読みにくくすることがありました。4D 21では、数式に名前を付けることができるので、各数式が何を表しているのかをユーザーがより明確に理解でき、ドキュメントのメンテナンスが簡単になります。

数式そのものを表示する代わりに、シンプルで意味のあるラベルを表示することができます。これにより、特に数式が複雑になる場合、テンプレートがはるかに直感的になります。

この改良をサポートするために、2つのコマンドが更新されました:

  • WP INSERT FORMULAフォーミュラとその名前を含むオブジェクトを受け付けるようになりました。

  • WP GET FORMULAS各フォーミュラをその名前とともに返すようになり、ドキュメント全体の数式の検査と管理が簡単になりました。

コマンドシンタックスの改良

4D 21は、4D Write Proに一連の改良を加え、コードの書きやすさ、メンテナンスのしやすさ、柔軟性を向上させました。多くのコマンドは、オブジェクトやコレクションなどの現代的な引数タイプを使用できるようになり、いくつかのコマンドは、有用な結果を返す関数にアップグレードされました。また新しいヘルパーを使用すれば、セクション、ページ、表などを扱うのがシンプルになりました。

ここでは、新機能を簡単にご紹介します:

  • よりクリーンな属性処理: WP SET ATTRIBUTES に単一のオブジェクトを渡すことができるようになり、複数のフォーマットプロパティを一度に適用できるようになりました。
  • より柔軟な表の操作: WP TABLE APPEND ROW では、フォーミュラ、名前付きフォーミュラ、値の完全なコレクションも使用できるようになりました。
  • 画像処理がより簡単に: WP INSERT PICTURE は、挿入された画像要素を返す関数になりました。また、 4D.File の値も 使用できるようになり 、画像の保存方法や読み込み方法について、より多くのオプションが用意されました。
  • インポート/エクスポートコマンドの近代化: WP IMPORT DOCUMENT WP EXPORT DOCUMENT WP Add picture などのコマンドが 4D.File 型を受け取れるようになりました さらに WP INSERT DOCUMENT コマンドは、その実際の振る舞いをより適切に表せるように WP Insert document body に改名されました。
  • レンジを返すようになったコマンド:  フォーミュラ、ブレーク、文書本文を挿入する際に、これらのコマンドは使用可能な範囲を返すようになりました。
  • ドキュメント構造への簡単なアクセス: 新しい関数 This.sectionIndexThis.sectionNameThis.pageIndex などの新しい関数により、数式内で現在のセクションやページを直接参照できるようになりました。

カスタムホワイトスペースオプションでメールフォーマットをコントロール

MIMEエクスポート時にCSSのwhite-spaceの値を選択することで、きれいで一貫性のあるメールフォーマットを保証します。このオプションは、特定のメールクライアントがwhite-space:pre-wrapを誤って解釈することで発生する不要な改行を回避し、代わりに white-space:normalを使用することで表示の互換性を高めることができます。

4D View Pro

4D 21における 4D View Proは、大容量のスプレッドシートを処理する新しい方法、よりスマートなExcelワークフロー、よりレスポンシブで開発者に優しい機能により、大きく進化しました。圧縮されたフォーマットにより、重いドキュメントの読み込みと保存がより速くなり、カスタム関数がよりパワフルになり、SpreadJSのアップグレードにより作成できるものの幅が広がり、インポート/エクスポートオプションの改善により、データの正確性とコントロールがより簡単になりました。

より良いパフォーマンスのための圧縮されたドキュメントフォーマット

4D 21では、大きく複雑な4D View Proのドキュメントをより効率的に処理する2つの方法が導入されました:新しい.sjs圧縮ファイルフォーマットと、BLOBとしてのドキュメントのインポート/エクスポートのサポートです。

.sjsフォーマットは、ExcelのXMLレイアウトに似た、複数の小さなJSONファイルで構成された軽量で圧縮された構造です。ファイルサイズを小さくし、読み込みを高速化し、大きなスプレッドシートをより確実に扱うことができます。VP IMPORT DOCUMENTVP EXPORT DOCUMENT を使って、標準の.4vpファイルと同じようにインポート、エクスポートできます。

これを補完するために、4Dは圧縮されたBLOB形式をサポートし、同じパフォーマンス上の利点を直接データベースに与えるようになりました。VP EXPORT TO BLOB を使ってドキュメントを非同期に BLOB として保存し、VP IMPORT FROM BLOB を使っていつでも再読み込みすることができます。これにより、ファイルシステムに依存することなく、重い View Pro ドキュメントを簡単に保存、取得、処理することができます。

どちらの形式も、パフォーマンスを向上させ、ストレージを合理化し、大規模な View Pro コンテンツをよりスムーズに処理できるように設計されています。

改善されたカスタム関数

4D 21では、関係するセルの数を事前に知ることなく、スプレッドシート内の列や行のコンテンツに対するカスタム計算が可能になりました。これは、複数のセル範囲やオブジェクトをカスタム数式に渡すことで、4Dメソッド内ですべてのセル内容を含むコレクションやオブジェクトを取得できるようになるためです。

SpreadJS 16.2のアップデートとリボンの強化

4D 21には、SpreadJS 16.2の統合による4D View Proのメジャーアップグレードと、その新機能を活用するためにデザインされたリボンのアップデートが追加されています。

以下は、SpreadJSの新機能です:

  • フォーミュラエディタパネルにより、長い数式の読み取り、編集、デバッグが容易になりました。

  • フォーミュラの再計算をコントロールする手動計算モード

  • フォーミュラの編集中のクロスシート参照

  • ピボットテーブルの改良:フィールドごとに小計位置を設定。

  • 新しいチャートツール:ウォーターフォールチャート、スムーズな折れ線書式、複数選択範囲から作成されたチャート。

  • コンパクトな分散の可視化のためのロリポップ分散スパークライン

  • ヘッダーをドラッグすることで、行や列を移動したり挿入したりできます。

  • ペーストスペシャルの追加オプション(コメント、検証、幅、フォーマット…)。

  • カスタマイズ可能な色とアイコンによるシートタブのスタイリング

  • ピクセル単位のスクロールによるスムーズなフィードバック

  • Excelのインポート時の、ソート条件を維持することで、Excelを開いたときに見た目が突然変わらないようにすることができます。

  • ワークブックの機能強化:ゼロの表示/非表示、パスワードで保護されたシート、デフォルトのセル値、表へのカットセルの挿入。

以下は、アップデートされたリボンの新機能です:

  • フォーミュラ編集、テーマ、色、フォントを直接リボンからコントロール。

  • ドラッグ・トゥ・ムーブが有効な場合に、行や列を移動/挿入するためのオプション。

  • SpreadJSの新機能を使用して素早く作成し、フォーマットするための更新されたチャートコントロール。

エクセルのインポート/エクスポートの改良

4D 21では、VP EXPORT DOCUMENTそして VP IMPORT DOCUMENTコマンドのインポート/エクスポートオプションを拡充することにより、4D View ProでExcelファイルをより柔軟に扱うことができるようになりました。

エクスポート時には、実に細かい部分まで設定できるようになりました。例えば、生成されたワークブックに何が含まれるか、バインディングソース、スタイル、数式、マージされたセル、計算データ、未使用の名前、ヘッダーが固定化された行や列として動作するかどうかまで、正確に決定できるようになりました。また、パスワード保護を追加したり、あるいはキャッシュされた計算データを含めることでワークブックの読み込みを高速化することもできます。

インポート時には、書式、数式、凍結されたヘッダー、スタイルの保持や、再計算、動的参照、開くモード(通常/レイジー/インクリメンタル)をコントロールできる新しいオプションが追加されました。これにより、Excelファイルは、4D View Proのインターフェースで、クリーンかつ一貫して読み込まれます。

すべての設定は、1つのexcelOptionsオブジェクトにまとめられ、コードを読みやすく、メンテナンスしやすくしつつ、既存のプロジェクトとの互換性を保つことができます。

カスタム関数をサポートした信頼性の高いインポート

4D 21は、 VP IMPORT DOCUMENTVP IMPORT FORM BLOB 、そして VP IMPORT FROM OBJECTなどのインポートコマンドは、すべてのカスタム関数の計算が終了した後にのみコールバックをトリガーするように変化したことにより、これにより、印刷、エクスポート、保存のような後続アクションのタイミングを予測することができます。

今回のアップデートでは VP FLUSH COMMANDSを拡張し、保留中の計算がすべて完了した時点で実行される非同期コールバックを受け付けるようになりました。これにより、インターフェースをブロックしたり結果が不完全になるリスクを負うことなく、操作を安全にキューに入れることができます。

これらの改善により、カスタム数式に依存するドキュメントの作業が容易になり、エラーが減少し、インポートから最終出力までのワークフローがスムーズになります。

セキュリティ

4D 21は、暗号化された通信から、より安全なデータの取り扱い、よりスマートな証明書管理まで、あらゆるレイヤーでセキュリティを強化します。自動TLS証明書は、運用をシンプルにし、RSAとECDSAキーの拡張サポートは、あなたの暗号オプションを近代化し、新しいCA検証ツールは、信頼されていないネットワーク上のクライアント/サーバトラフィックを保護するのに役立ちます。HTTPS リクエストは、オペレーティングシステムから直接認証情報を取得できるようになり、 暗号署名はテキストデータとバイナリデータの両方でクリーンに動作し、セッション監視により、 管理者はアクティブなすべての Web アクティビティを統一されたリアルタイムビューで確認できます。フォーミュラの貼り付けのような日常的なタスクでさえ、より安全な環境の恩恵を受け、主要なライブラリのアップグレードにより、アプリケーションは最新の強化された基盤上で確実に実行されます。

クライアントとサーバー間の通信用に自動生成されるSSL/TLS証明書

4D 21は、4D Serverにバンドルされていた古いデフォルトのSSL/TLS証明書を削除することで、セキュアな運用を簡素化します。その代わりに、サーバーが暗号化された接続を使用してアプリケーションを起動すると、Resourcesフォルダーにユーザーが提供した証明書があるかどうかをチェックします。見つからない場合、4Dは自動的に一時的なSSL/TLS証明書を生成します。

つまり、クライアントとサーバーの暗号化通信を有効にするためだけに、証明書を提供する必要がなくなったのです。サーバーを再起動するたびに、新しい証明書が生成されるため、セキュリティが向上すると同時に、わざわざ手動でセットアップする必要もありません。(:これはWebサーバーには適用されません。ブラウザとの互換性のために、CAによって検証された証明書が必要です。)

ECDSAによるSSL/TLS証明書サポートの拡張

4Dは長い間、SSL/TLS通信の安全性を確保するためにRSA証明書をサポートしてきました。4D 21では、これに加えてECDSA証明書も使用できるようになり、多くのプラットフォームで採用されつつある最新の代替手段を提供します。

クライアント/サーバー間の通信やHTTPSリクエストの安全性を確保するために、4D 21はRSAとECDSAの両方に対応しており、ワークフローを変更する必要はありません。key.pemcert.pemファイルを所定の場所に置くだけで、あとは4Dが処理します。

クライアント・サーバ・セキュリティのための認証局検証の強化

4D 21は、クライアントが信頼できる認証局(CA)に対してサーバー証明書を検証できるようにすることで、クライアント/サーバー間のセキュリティを強化しています。これにより、接続先のサーバーが本物であることが保証され、中間者攻撃 (MITM)を防ぐことができます。

CAの検証を有効にするには、buildApp.4DSettingsで2つの値を指定します:

  • 信頼できるCAの署名を含むファイルへのパス

  • サーバ証明書のドメイン名

複数のサーバーが関係している場合は、許可されるドメイン名のリストを指定することもできます。この情報により、クライアントはサーバーの証明書が有効なCAによって署名されていることと、意図したドメインと一致することの両方を確認します。そうでない場合は、接続が拒否されます。

これにより、パブリック・ネットワークや信頼されていないネットワーク上で実行されるデプロイメントを保護する重要なレイヤーが追加されます。

ローカルファイルの代わりにWindows証明書ストアを使用blank

HTTPSリクエストでは、HTTPRequest およびHTTPAgent クラスのstoreCertificateName パラメータを使用して、Windowsキーチェーンから証明書を直接取得できるようになりました。これにより、証明書ファイルをローカルに保存・管理する必要がなくなります。

システムレベルの保護と集中管理により、手動でファイルを操作する必要がなくなります。証明書の取り扱いは、よりセキュアに、より一貫性のある形になり、チームやマシン間での管理が容易になります。

強制ログインがREST認証の新しいデフォルトに

4D 21では、RESTアクセスのデフォルトのセキュリティモデルとして強制ログインモードが採用されることとなりました。旧来の認証メカニズムに依存する代わりに、すべてのRESTリクエストは、ds.authentify 関数を介して明示的なログインが必要となりました。

新しいプロジェクトでは、forceLogintrueに設定されたroles.jsonファイルが自動的に含まれ、権限が割り当てられるまでRESTアクセスが許可されません。既存のプロジェクトは、ストラクチャー設定ダイアログの専用ボタンを使ってこのモデルに切り替えることができます。

この更新により、すべてのプロジェクトが最新の権限ベースのセキュリティ・モデルに移行し、保守が容易になり、精度が大幅に向上しました。Qodly StudioのRoles & Privilegesエディターを使って権限を管理し、データストアや関数のどの部分を公開するかを正確に定義できるようになりました。

強制ログインにより、REST APIはデフォルトで保護され、アプリケーション全体のアクセスを制御する明確で一貫した方法を提供します。

Blobサポートによる暗号署名と検証の簡素化

4D 21では、 4D.CryptoKey.sign() そして 4D.CryptoKey.verify() を拡張し、 テキストBlobの両方を受け付けるように拡張することで、暗号ワークフローを合理化しました。署名や検証の前に、バイナリデータをテキストに変換したり、その逆に変換したりする必要がなくなります。

これにより、ファイル、バイナリー・ペイロード、構造化データをより簡単に扱うことができ、署名や検証のコードをクリーンかつダイレクトに保つことができます。

RESTと4DACTIONの統合されたセッション管理blank

4D 21では、REST接続、SOAPコール、4DACTIONリクエストのいずれから発生したものであっても、すべてのオープンなWebセッションを検査する包括的な方法があります。

  • すべてのアクティブなセッションがリアルタイムで一覧表示されるため、管理者はアクティビティとリソースの使用状況をすべて把握できます。

  • セッションは、Session.setPrivilege() を介してユーザー名でラベル付けでき、接続ユーザーの特定、アクションのトレース、ライセンスの管理が容易になります。

  • セッションはスレッドセーフで自動的に最適化されるため、高負荷時でもリソースの効率的な使用と信頼性の高いパフォーマンスが保証されます。

これにより、開発者と管理者は、より明確なモニタリング、より強力な監査、安定性の向上を実現しながら、規模に応じてよりスムーズなAPIの実行が可能になります。

フォーミュラの安全な貼り付け

異なる環境で作業する際のデータを保護するために、4Dは外部ソースからの数式を値としてのみペーストするようになりました。

これは、マルチスタイルのテキストフィールドと4D Write Proドキュメントに適用されます:

  • コピーされたフォーミュラが一度も実行されていない場合、そのソースがプレーンテキストとして貼り付けられます。

  • フォーミュラが評価されていた場合、結果の値(テキストまたは画像)のみがペーストされ、基本的なロジックはペーストされません。

同じアプリケーション内でコピーされた数式は、通常どおり貼り付けられます。しかし、別々のアプリケーションや環境間でコンテンツを移動する場合、4Dは自動的に数式を削除し、機密データへの意図しないアクセスを防ぎます。

コアライブラリと依存関係のアップグレードblank

4D 21 LTSでは、Xerces、libldap、ICU、Chromium (CEF)、OpenSSL、libZip、LZMA、ZLib、Libuv、BoringSSL、PDFWriterをアップグレードし、セキュリティを強化し、安定性を向上させ、今日のプラットフォームとの互換性を確保するために、スタック全体を近代化しました。

4Dランゲージ

4Dプログラミング言語は、これまでにない大きな進化を遂げました。4D 21 LTSに至るRリリースを通して、より明確な構文、より安全なエラー処理、最新のクラス機能、より強力な型付け、リアルタイムのコード検証、そしてREST、セッション、HTTP、データ同期などのためのより豊富なツール機能が追加されました。

取り掛かっているプロジェクトがWebサービスの構築、データの操作、コードの構造化、ワークフローの最適化であろうと、新しいランゲージ機能により、自由にコードを書くことができ、安全性が強化され、日々の開発がより速く、より予測可能になります。

コードライブチェッカー

4D 21では、コードライブチェッカーが導入されています。これは、記述中のミスをリアルタイムで検出する検証システムです。シンタックス、クラス名、関数名、パラメータリスト、型の互換性をチェックし、打ち間違え、型のミスマッチ、無効な参照が実行時エラーになる前に発見できるようにします。

チェッカーは、入力中やシンタックスチェック、コンパイル中にバックグラウンドで動作します。ドット記法を使用するクラスで動作し、シンタックスファイルを含むコンポーネント・クラスにも同じルールを適用します。コードに一貫性がない場合は警告が表示され、実行時にエラーが発生した場合はエラーメッセージが表示されます。

アプリケーション、セッション、RESTにまたがって使用できるシングルトン

4D 21では、シングルトンを導入しています。これは、必要な時にどこからでもアクセスできる1つのオブジェクトを作成する新しい方法です。シングルトンは、インタープロセス値や中央ユーティリティをホストしたり、工場のようなパターンのためのビルディングブロックとして機能し、共有ロジックを集中管理するためのクリーンで信頼性の高い場所を提供します。

シングルトンは2つのコアタイプを定義できます:

  • プロセス・シングルトン:各プロセスに固有

  • 共有シングルトン:アプリケーション全体で共有されるシングルトンです。

シングルトンクラスの作成は簡単です。クラスのコンストラクタにsingleton キーワードを追加します(あるいは共有シングルトンの場合にはshared singleton)。そこから、シングルトンインスタンスは、me 属性を通して常に利用可能になり、そのクラスが管理するものに対して、アプリケーションに単一のソースを与えます。

4D 21ではまた、セッション・シングルトンが追加され、各ユーザーに独自の分離されたインスタンスを提供します。これは、複数のプロセスが同じユーザーのリクエストを処理するWebやクライアント/サーバー環境で理想的です。セッション・シングレットンを使うと、ショッピング・カートやユーザー固有の作業リストを管理するようなタスクがシンプルで安全になります。

最後に、共有シングルトンREST APIQodly Pagesとシームレスに統合できるようになりました。共有シングルトンで公開された関数は、データクラスのメソッドと同じように、RESTを通して直接呼び出したり、Qodly Studioでイベントアクションとして選択することができます。アクセスはロールと権限で完全に制御され、APIのセキュリティと操作方法を明確にします。

これらの機能を組み合わせることで、一貫性のあるスケーラブルな方法で、グローバルな値、ユーザーごとのデータ、そしてソリューションの各レイヤーで共有されたアプリケーションロジックを管理することができます。

メソッドのパラメータ宣言の簡素化

4D 21は、メソッドの引数の宣言方法を効率化します。#DECLARE プロトタイプを使用することで、compiler_メソッドで引数宣言を繰り返す必要がなくなります。コンパイラは、プロトタイプ宣言をクラス関数署名と同じように扱い、冗長性を減らし、型の安全性を強化します。

既存のコードは以前と同じように動作しますが、プロトタイプ宣言とレガシー宣言の間で型が不一致になるとエラーが発生するようになり、問題を早期に発見できるようになりました。また、パラメータが2度宣言された場合や、プロトタイプが許容する以上の引数でメソッドが呼び出された場合にも警告が表示されます。

このアップデートにより、時間を節約し、混乱することなくコンパイル時の実行時エラーを防ぐことができます。

変数とプロパティの1行での宣言と初期化

4D 21では、変数とクラスプロパティの宣言と初期化を1行で行えるようにすることで、コードを効率化します。これにより、宣言部分を見るだけで何がしたいのかを一目で分かるようになります。

4Dに値から型を推測させることもできます:

var <variableName> := <value>
property <propertyName> := <value>
あるいは、型を明示的に宣言することもできます。これは、型の混同を避けたい場合やコンパイラによる完全な明示が必要な場合に便利です:
var <variableName> : <type> := <value>
property <propertyName> : <type> := <value>
型推論による型指定は単純な値には有効ですが、クラス属性、プロセス間変数、型が不明な式など、コンパイラが推論できないものには明示的な型指定の方が安全です。この統一されたシンタックスは、乱雑さを取り除き、明確で意図的なコードを書くのに役立ちます。

簡素化された不定数変数の宣言

4D 21では、柔軟な数のパラメータを受け付ける関数をより簡単に書くことができます。宣言の最後のパラメータとして”… “シンボルを使うことで、その関数が任意の数の引数を受け付けることを示すことができます。

また、型を指定することで、入力されるすべてのパラメータが期待したものと一致するかどうかを4Dに確認させることもできます:

#DECLARE(... : Real) : Real

あるいは、何でも受け入れたい場合は、型付けしないままにしておくこともできます:

#DECLARE(...)
この小さな追加機能により、可変個関数をより明確に、より安全に、より一貫性をもって書くことができるようになりました。

現代的で構造化されたエラー処理(try-catch、try()、throw)

4D 21は、コード全体のエラーを管理するための、よりクリーンで予測可能な方法を提供します。4D 21では、グローバルハンドラや予期せぬダイアログがフローを中断することなく、意図的にエラーを発生させ、発生した箇所で正確にキャッチすることができ、またそれをスマートにリカバリすることができます。

  • Try-Catchブロックによる制御されたリカバリ: 複数のステートメントをTry … Catch … End try で囲みます。Tryブロックの中で何かが失敗すると、実行はそのままCatchブロックにジャンプします。ダイアログは表示されず、ON ERR CALL もトリガーされません。これにより、作業をロールバックしたり、詳細をログに記録したり、構造化された読みやすい方法でフォールバックパスを続行したりすることができます。

  • Try(Expression) によるインラインエラー処理: Try() 、成功した場合は結果を返し、エラーが発生した場合は未定義を返します。同じ変数とコンテキストを使用して、Last errors を即座にチェックできます。エラー・ロジックを緊密かつローカルに保つことができます。

  • カスタム・エラーを発生させるためのthrow: 新しいthrow コマンドを使って、問題が発生した瞬間、無効な状態、仮定が崩れた状態、実行を停止しなければならないビジネスルールを知らせることができます。これらのエラーは、ネイティブの4Dエラーとまったく同じように動作し、Try()Try–CatchON ERR CALL でキャッチすることができます。単純なメッセージを発生させたり、プレースホルダを使用してXLFベースのエラー定義を再利用することができます。

これらのツールを組み合わせることで、アプリケーション・ロジックのあらゆる部分に対して、クリーンで、書きやすく、安全な、統一されたモダンなエラー・モデルを提供することができます。

グローバルスタンプによるインクリメンタル同期

4D 21は、もともと4D for Mobileのために導入されたグローバルスタンプシステムを、インクリメンタル同期を必要とするあらゆるワークフローに拡張します。これを使用することで、データセット全体を転送する代わりに、最後の更新以降に変更されたレコードだけを同期することができます。

データ変更追跡を有効にすると、4Dは自動的に、作成、変更、削除されたレコードにスタンプを割り当てます。2つの機能で完全にコントロールできます:

  • .getGlobalStamp():データストアの現在の変更スタンプを取得し、時間の経過とともに何が変更されたかを追跡できます。

  • .setGlobalStamp():デフォルトの動作を上書きする必要がある場合に、スタンプ値を手動で更新できます。

スタンプは全てのデータ変更を反映するため、SQLレプリケーションに依存することなく、4D REST Serverを通じて、何が変更されたかをクエリしたり、削除されたレコードを検出したり、高速で信頼性の高いインクリメンタル同期を実行したりすることが容易になります。

multisort()による複数コレクションの同期

関連する複数のコレクションを扱う場合、特にデータが4Dの外から来た場合、ソートと整列が難しくなります。4D 21では、新しい関数multiSort() を使用することで、1回の呼び出しで複数のコレクションを同期してソートできるようになりました。

この関数は、以下のことができます:

  • 1つのコレクションをソートし、他のコレクションを自動的に並べ替える

  • カスタムソートフォーミュラの適用

  • 複数レベルのソートルールの定義

  • 単純な値とオブジェクトの両方を扱う

  • 値が等しい場合に安定した順序を維持

外部システムから受信した配列を整列する場合でも、アプリ内の複数のコレクションを調整する場合でも、 multiSort() を使用すると、プロセス全体がより速く、よりクリーンで、より信頼できるものになります。

オブジェクトとコレクションのシンプルな参照比較

4D 21では、2つのオブジェクトやコレクションがメモリ上で同じ参照を指しているかどうかをチェックするのがとても簡単になりました。また、「=」演算子や「#」演算子を使って内容を比較するのではなく、参照を直接比較できるようになりました。

これにより、2つの変数がまったく同じオブジェクトやコレクションを参照しているかどうかをすばやく確認できるようになり、特に共有参照や入れ子構造、オブジェクトの配列を扱うときに便利です。

これらの比較は、配列関数やクエリ、その他の操作でも使用でき、参照処理を言語全体でより一貫性のあるものにします。

共有クラスによる共有オブジェクトの簡素化

4D 21は共有クラスを導入し、Use…End use ブロックを手動で管理することなく、共有オブジェクトを合理的に扱う方法を提供します。

クラスのコンストラクタにshared キーワードを追加することで、new() を呼び出すたびに自動的に共有オブジェクトが作成されます。また、クラス関数を“shared “とマークすることで、その関数が基礎となる共有オブジェクトを変更することを示すことができます。そうすることで、4Dは自動的にロックのワークフローを処理し、共有オブジェクトのコードを、通常のオブジェクトを扱うのと同じように自然に感じられるようにします。

共有クラスは、ワーカー内でタスクを実行したり、プロセス間で状態を調整したり、共有結果を安全に保存したりすることを容易にします。非共有クラスは共有クラスから継承できますが、その逆は許されないので、クラス階層を適切に計画する必要があります

セッションコマンドでクライアント/サーバーセッションをサポート

4D 21では Sessionコマンドを拡張し、4Dアプリケーションの既存のWebセッションとモバイルセッションに加えて、クライアント/サーバー接続とストアドプロシージャをカバーするようになりました。これにより、すべての実行コンテキストでセッションレベルの情報にアクセスできるようになりました。

新しい ClientServerSessionクラスは、4Dリモートセッションのために用意されています:

  • id: セッション識別子

  • info: マシン、ユーザー、環境の詳細

  • storage:同じセッション内の全てのプロセスが利用可能な共有オブジェクト

  • userName:セッションに関連するユーザー

これにより、プロセス間でのデータ共有、ユーザー固有のコンテキストの追跡、ウェブ、モバイル、クライアント/サーバー、ストアドプロシージャのどの環境で実行しても一貫した動作をする一般的なセッションを意識したコードの記述が容易になります。

すべてのセッションタイプでセッションストレージにアクセス

クライアント/サーバー、ウェブ、モバイルなど、アプリケーションのさまざまな部分でユーザーデータの一貫性を保つには、これまで余分な作業が必要でした。各セッションは独自のストレージを保持するため、共有情報を取得するために別のセッションにアクセスする簡単な方法はありませんでした。

4D 21は新しいコマンドでこれを解決しました:Session storage by idです。このコマンドを使えば、どのように作成されたかに関係なく、アプリケーショ ンのどのセッションのストレージにもアクセスできるようになります。セッションIDが分かれば、自分のセッションと同じように、共有ストレー ジを読んだり更新したりすることができます。

これによって、複数の環境にまたがって働くユーザの継続性を簡単に維持することができます。例えば、ユーザーがウェブアプリからログインしたときに顧客レコードを保存し、後でクライアント/サーバーセッションから同じレコードにアクセスすることができます。

セキュアで簡単なデバッグのためのセッション権限の検査

ユーザがアクセスできる範囲をコントロールすることは、アプリケーションをセキュアにするための重要な要素です。4D 21では、セッション特権が強化されたため、これらの権限をより見やすくなりました。

認証時にロールを通して割り当てられる権限は、ユーザーが実行できるアクションを決定します。デバッグを容易にするために、新しいgetPrivileges() 関数を使用して、これらの権限をセッションで直接検査できるようになりました。これにより、どの権限がどの時点で有効なのかを明確に把握することができます。

また、同じ情報を返す新しいRESTエンドポイント(/$info/privileges) もあり、異なる環境間でのアクセス権を簡単に確認することができます。

これらの追加により、セキュリティ・ルールが期待通りに機能していることを確認し、ユーザが意図したデータや機能のみにアクセスできるようにすることができます。

プロセスとセッション管理の改善

4D 21は、プロセスやセッションの検査、追跡、管理を容易にし、アプリケーション全体のコントロールと明確な可視性を提供します。情報を取得し、アクティビティを監視する方法を効率化するために、いくつかのコマンドが強化、追加されました。

以下が新機能です:

  • Process info は、完全なオブジェクトを返すようになり、プロセス・プロパティが読みやすく、使いやすくなりました。また、新しいcreationDateTime プロパティが追加され、各プロセスがいつ作成されたかを追跡できるようになりました。

  • Session info では、セッションIDから直接セッションの詳細を取得できるようになり、余分なステップや追加の検索を避けることができます。

  • Process number が更新され、名前だけでなくプロセスIDからもプロセス番号を取得できるようになりました。

  • Process activity がセッションIDによるフィルタリングをサポートし、特定のセッションに関連付けられたプロセスのみを素早くリストアップできるようになりました。

開発とテストのためのセッション管理の簡素化

4D 21では、開発中のセッション処理がよりスムーズになりました。Session コマンドは、スタンドアロンやシングルユーザー環境でも有効なオブジェクトを返すようになり、余分なチェックやフォールバックロジックが不要になりました。

このアップデートにより、環境を切り替えたり、回避コードを追加することなく、セッションデータの操作、ロールベースの制限のテスト、クライアント/サーバー動作のシミュレーションが容易になりました。

スタンドアロンモードでも、以下のコマンドが使えるようになりました:

  • Session

  • Session info

  • Session storage

これらのシミュレートされたセッションは、開発とテストのためのもので、クライアント/サーバセットアップと同じように、認証、Restrictイベントによるデータフィルタリング、共有セッションストレージなどの機能を構築し、デバッグすることができます。

本番のスタンドアロン・アプリケーションでは、ユーザー固有のデータについてはStorage に頼ることになりますが、開発では、この変更によってワークフローが合理化され、環境間の一貫性が向上します。

“FORMULA FROM STRINGでより柔軟なフォーミュラ実行

4D 21は、実行コンテキストを選択できるようにすることで、Formula from string の動作を拡張しています。特に、フォーミュラがメソッドを呼び出したり、ホスト・データベースで定義された変数にアクセスする必要がある場合に便利です。

以前は、フォーミュラは常に作成されたコンテキストで実行されていたため、コンポーネントがホストプロジェクト内の非共有メソッドを参照するフォーミュラを実行することはできませんでした。現在では、フォーミュラを実行する場所を決めることができます:

  • sk execute in host database:ホスト・プロジェクトで数式を実行し、そのメソッドと変数にアクセスできるようにします。

  • sk execute in current database:デフォルトの動作で、コンポーネント内での実行を維持します。

この小さな追加により、より柔軟なコンポーネント設計が可能になり、ホストデータベースにシームレスに呼び出す機能(4D Write Proのカスタムインターフェースなど)を構築できます。

より柔軟なログファイル管理

4D 21では、運用時にアプリケーションがログ(ジャーナル)ファイルをどのように管理するかをより自由にコントロールできます。

他のバックアップパラメータを上書きするのと同じように、ログファイルを使用する設定を上書きできるようになりました。このオプションを有効にすると、新しいデータファイルが作成されたときに、ログの作成または選択が要求され、そのパスがデータファイル内に保存されます。このオプションが有効な状態でログがないデータファイルを開くと、4Dはログの作成または選択を要求します。

以前は、この設定は常にカタログファイルに保存されていました。現在では、バックアップパラメータファイルを使って、ストラクチャーの隣、データの隣、またはストラクチャー自体の中に置くことで、どこから来るかを決めることができます。これにより、メインのプロジェクトファイルを変更することなく、異なる環境にデプロイする際の柔軟性が高まります。

PHPコマンドの非推奨化とビルトインインタープリターの削除

PHPはかつて、4Dのウェブ開発における重要なギャップを埋めていました。ZIPやハッシュ、LDAPのようなタスクを、4D 言語がネイティブのソリューションを提供する前に処理していました。しかし現在ではこれらの機能が 4D 自体の一部となったため、4D 20 R3 で組み込みの PHP インタプリタが削除され、PHP コマンドセットは 4D 21 で非推奨フェーズに入りました

PHP Execute は引き続き動作しますが、外部の PHP インタープリターが必要になります。これにより、PHPのバージョンを更新したり、セキュリティパッチを適用したり、 追加モジュールを読み込んだりする際の柔軟性が向上します。長期的に使用する場合は、システムワーカーを通して PHP コードを実行することを推奨します。

互換性を保つためにコマンドは利用可能ですが、新しい開発はシステムワーカーベースの実行に移行した方がメンテナンスが容易で将来の安定性も確保できます。

カスタムの日付・時刻フォーマット

特定の地域やプロジェクトの要件に合わせて日付や時刻が必要な場合、デフォルトのシステムフォーマットでは必ずしも十分ではありません。4D 21では、フォームに値を表示する場合でも、文字列に変換する場合でも、正確なカスタムフォーマットを定義できるようになりました。

今回のアップデートでは、柔軟なフォーマットオプションが以下のコマンド・機能に追加されました:

  • String コマンドは、完全なカスタムフォーマット文字列をサポートするようになりました。

  • OBJECT SET FORMAT コマンドは、カスタム書式をフォームオブジェクトに直接適用できるようになりました。

  • インターフェースには、フォーマットのパターンを視覚的に定義するための「カスタム」オプションが追加されました。

四半期番号や週番号から、ローカライズされた曜日名や詳細な時刻表現まで、すべてを単一の共有された書式設定シンタックスで制御できます。これにより、ドキュメント、インターフェース、生成されたテキストで日付や時刻がどのように表示されるかを完全にコントロールできるようになります。

ストラクチャー定義をHTMLとしてエクスポート

4D 21は、ストラクチャー定義をHTMLとして直接エクスポートすることで、ストラクチャー定義の共有方法を簡素化します。以前は、ブラウザがHTMLとしてレンダリングするXML+XSLのペアに依存していましたが、最近のブラウザのセキュリティは、ローカルファイルが特定の外部リソースを読み込むことをブロックします。

新しくなった書き出しでは、ファイル → 書き出し → ストラクチャー定義をHTMLに書き出し…を選択すると、どのブラウザでもきれいに開くスタンドアロンのHTMLファイルが生成されるようになりました。必要なアセットはすべて付属のhtml_export_resourcesフォルダに配置され、必要に応じてカスタマイズすることができます。

また、EXPORT STRUCTURE のオプションのパラメータを使用することで、XML形式とHTML形式のどちらかを選択し、プログラムでHTML形式にエクスポートすることもできます。

フォームオブジェクトにおけるダイナミックなフォーミュラ

4D 21では、フォーミュラベースのデータソースのおかげで、フォームオブジェクトの柔軟性が格段に向上しました。オブジェクトを固定フィールドやポインタにバインドするだけではなく、OBJECT SET DATA SOURCE FORMULA を使って直接フォーミュラに接続することができます。

これにより、計算、コンテキスト、その他のダイナミックロジックに基づいて値が自動的に更新されるので、適応性の高いフォームを構築したり、UI要素をオンザフライで生成したりすることができるようになりました。

また、これを lk selected items expression のようなリストボックス定数と組み合わせることで 、リアルタイムに適応するフォームの動作が得られので、コードを何度も複製する必要がなくなる一方、レスポンシブネスが向上します。

16進数文字列から数値への変換blank

4D 21の String コマンドは、16進数文字列を直接数値に変換できるようになりました。もう解析ユーティリティを書いたり、バイナリ文字列のトリックを扱ったりする必要はありません。文字列を渡すだけで、数値に変換された結果を得ることができます。

これは、小さな新機能かもしれませんが、外部APIや低レベルのフォーマット、16進数を返すシステムを統合する際の摩擦を取り除く、大きな新機能です。

新しい文字列のトリミング関数blank

新しいコマンド、trimtrimStarttrimEnd を使用すると、文字列から空白や特定の文字を簡単に取り除くことができます。これらはJavaScriptやPythonと同じように動作し、どのような文字セットでも動作します。

手動のトリムロジックはもう必要ありません。データはよりクリーンになり、フォーム入力の検証はより簡単になり、コードはモダンなランゲージでの動作と同様の振る舞いになります。

バージョン管理システムにおけるカタログ管理の改善

以前は、テーブル、フィールド、リレーションの色や位置のようなプロジェクトの詳細はすべてcatalog.4DCatalogに保存されていました。現在では、この情報はcatalog_editor.jsonという別のファイルに分割されて保村されています。

これにより、特に複数の開発者が関わっている場合、変更管理や作業のレビューが容易になります。この変更により、誰かがテーブルやフィールドを調整しても、カタログファイルは変更されずに残ります。

これはコンフリクトを防ぎ、変更のレビューをよりシンプルにするのに役立ちます。さらに、古いプロジェクトでもこの新しい設定に切り替えるオプションを追加しました。誤ってこの機能をオンにしてしまっても、ご心配なく!古い設定に戻すことで簡単に元に戻せます。

直接型指定で変数宣言をシンプルに

4D 21の新しい直接型指定機能は、“Compiler” メソッドを不要にし、変数宣言をシンプルにします

この変更により、開発者はプロセス変数やインタープロセス変数をコード内で直接宣言できるようになり、コードが整理されまたカプセル化が強化されます。コンパイラは、コンパイルに時間がかかりエラーの原因となり得る型推論に依存する代わりに、型付けされていない変数に遭遇したときに一時停止し、効率を犠牲にすることなく型の安全性を確保します。ダイレクト・タイピングは、新しいプロジェクトではデフォルトで有効になっており、既存のプロジェクトでは、コンパイラの設定でこの機能を簡単に切り替えることができるため、スムーズに移行することができます。これは、4D開発者にとって、柔軟性と制御性が大幅に向上したことを意味します。

デバッグエクスペリエンスの向上

4D 21では、デバッガとリモートデバッガが大幅に改善されました。

式の自動保存機能により、以前に評価した式を再入力する必要がなくなり、より良いデバッグ体験を保証します。また新しい“ピン”機能により、重要な式に常にアクセスできるようになります。

また、式ウォッチャーで ローカル変数ライン式カスタム式をよりコントロールできるようになりました。

最後に、 再設計されたインターフェースは、よりクリーンで直感的なデバッグ環境を提供します。

コード&フォームエディタ

4D 21では、4D開発環境が大きく前進しました。4D 21 LTSに至るフィーチャーリリースを通して、コードとフォームエディターは、よりスマートな警告、より強力なバリデーション、よりクリーンな編集ツールを追加し、そして潜在的な問題がランタイムに発生することがないように、よりクリアに可視化されるようになりました。

行おうとしていることが、ビジネスロジックの改良、ダイナミックなインターフェースの構築、大規模なコードベースのメンテナンスであっても、これらの機能強化により、明確で信頼性の高いコードを書くという重要なことに集中できるようになります。ノイズを減らし、ミスを早期に発見し、フォームのナビゲーションを合理化することで、エディタはより迅速で予測可能な開発ワークフローをサポートします。

グローバル警告表示のカスタマイズ

    プロジェクトが成長するにつれ、コード内の警告の数は急速に拡大していきます。そのうちの一部は必要不可欠なガードレールですが、それ以外のものはあなたのコーディングスタイルやアーキテクチャには当てはまらないかもしれません。4D 21では、どの警告が重要かを完全にコントロールすることができます。

    プロジェクトレベルで、コードエディタとコンパイラダイアログに表示する警告の種類を定義することができます。これにより、無関係と思われる警告を非表示にし、問題の早期発見に役立つ警告に注意を向けることができます。

    これはまた、ローカルなコントロールも可能です。警告がグローバルに表示または非表示になった場合でも、おなじみの//%W+および//%W-スイッチを使用して、コードの特定のセクションで警告を有効または無効にすることができます。

    この柔軟性により、集中力を維持し、ノイズを減らし、アプリケーションの構築方法に合わせて警告システムを調整することがより簡単になります。

    非推奨のランゲージ要素に対する警告

    4D 21は、非推奨のランゲージ要素を使用した場合に警告を表示することで、コードを最新の状態に保つことができます。例えば以下のような、推奨されなくなったコマンド、定数、引数、型指定指示子は警告の原因となります。:

    • C_LONGINT($1)

    • C_BOOLEAN($draw)

    • _O_USE INTERNAL DATABASE

    これらの要素はまだ動作しますが、コード補完には表示されなくなり、より新しくサポートされたシンタックスに移行するよう促します。

    お望みであれば、ストラクチャー設定でこれらの警告をオフにすることができます。

    検査を容易にするために、Command name コマンドはスレッドセーフかどうかの情報に加えて非推奨かどうかの詳細も返すようになったので、これを使用することでコマンドを更新すべきかどうかを素早くチェックすることができます。

    よりスマートでリアルタイムなフォームのシンタックスチェック

    4D 21は、より深く、よりスマートにフォームのシンタックスをチェックするように改善されたことで、早期に問題を発見し、無駄な試行錯誤を減らし、よりクリーンなコードを書けるようにサポートします。

    フォームにクラスを関連付けることができるようになり、Form.myProperty のような式が完全に検証されるようになりました。エディタは、メソッドコードとプロパティリストの両方で、入力中にこれらの式をチェックするので、コンパイルを待つことなく、すぐにエラーを検知することができます。

    DIALOG でフォームを開くと、オブジェクトが提供されていない場合でも、4Dは割り当てられているクラスを自動的にインスタンス化します。これによって、余計な設定をすることなく、Form オブジェクトの振る舞いを一貫性のあるものにします。

    コードエディターでは、Form のオートコンプリートが可能になり、クラスプロパティや関数が一覧表示されるため、名前の入力ミスを防ぎ、より明確で発見しやすいコードを作成できます。

    FORM EDITコマンドの改良

    4D 21では、FORM EDIT コマンドを拡張することで、フォーム編集をより速く、直感的に行えるように改善されました。 フォームを開いたときに、その中の特定のフォームオブジェクトを自動的に選択し、検査や調整が必要な要素に直接ジャンプできるようになりました。

    これは、分析ツール、エラーレポート、リファクタリングユーティリティを使用する場合に特に便利です。特定のオブジェクトを探すためにフォーム内のページを必死に探す必要はなく、その代わりに1つのコマンドでそのオブジェクトに直接アクセスできます:

    FORM EDIT($formName; $objectName)
    グループ内であってもオブジェクトを即座に選択することで、そのプロパティに即座にアクセスすることができ、デバッグやクリーンアップの作業をスピードアップさせることができます。

    Visual Studioのコード拡張

    AIがサポートする開発は、日常的なコーディングの一部になりつつあります。コードを書くことやエラーを検出することから、CSS、フォーム・クラス、フォーム・メソッドまで実装した完全な4Dフォームの生成まで、AIによって作業のスピードが変わります。Visual Studio Code内にCopilotが含まれたことと、4D Analyzerと4D Debugger拡張機能の完全なサポートにより、これまで以上にコードをクリーンに、検証しやすく、デバッグしやすさを保ちながら、自信を持って書くことができるようになります。これは、AIによるコーディング支援にとどまりません。よりスマートに、より速く、よりコントロールされた開発ワークフローを提供します。

    Visual Studio Codeで4Dコードをフォーマットする

    4D 21は、VS Code拡張機能に嬉しい改善をもたらしました。ビルトインされたコードフォーマットです。

    VSコードで4Dのメソッドやクラスを編集することが多い場合、4D内部で使用されているスタイルにマッチした書式が表示されるようになり、どちらの環境でも一貫性が保たれ、切り替えがしやすくなりました。

    VS Codeの他のランゲージと同じように、ファイル全体をフォーマットすることも、選択範囲だけをフォーマットすることもできます。フォーマッターは、VS Codeのインデント設定を尊重しながら、インデント、スペーシング、コマンド、キーワード、定数の大文字小文字を処理します。

    VS Codeに直接4Dドキュメントを表示する

    4D-Analyzerエクステンションは、Visual Studio Codeエディタでコーディング中にドキュメントを参照するための便利なショートカットを追加します。

    4Dコマンド、クラス、クラス関数の上にカーソルを置くと、ツールチップに簡単な説明が表示されます。一番下の“Show 4D Documentation” (4Dドキュメントを表示)リンクは、ブラウザで自動的に開かれる4D公式ドキュメントのページへと直接ジャンプします。

    ワークスペースのシンタックスチェック

    4D-Analyzer拡張機能は、Visual Studio Code に完全なワークスペースシンタックスチェックをもたらします。編集中のファイルだけを検証するのではなく、VS Code は4D プロジェクト全体をスキャンし、問題を即座にハイライトします。

    エラーや警告は、VS Code のProblems パネルに表示され、4Dメソッドやクラスごとにグループ化されます。シングルクリックで、その行に直接移動できるので、クリーンアップが素早く、予測可能になります。また、インラインハイライトとツールチップは、問題が発生した箇所で問題を理解するのに役立ちます。

    Tool4Dの自動ダウンロード

    4D-Analyzer 拡張機能のバージョン0.2.0 では、ユーザーや開発者が4D アプリケーションを手動でインストールしてそのパスをエクステンションのパラメータに入力するのではなく、エクステンションが自動的にtool4dのバージョンをダウンロードし、システム上の場所に保存し、バックグラウンドで起動します。この簡素化により、VS Code for 4D での開発を開始するプロセスを合理化し、開発を強化することができます。

    GitHub Codespaces

    GitHub の Codespaces は、Visual Studio CodeやCodespacesアプリケーションを介してどこからでもリポジトリの編集を可能にすることで、リモート開発を簡素化します

    4Dプロジェクトの統合により、開発者はコードハイライトやオートコンプリートなどの機能を提供する4D-Analyzerのようなツールでコーディング体験を向上させることができます。上のセクションで見たように、4D-Analyzerは、あなたが定義したtool4dアプリケーションのバージョンを自動的にダウンロードし、更新します。4Dは、Codespace環境でこれを可能にするために、GitHub専用のtool4dをリリースしました。

    Visual Studio Codeで4Dコードを直接デバッグする

    4D 21は、 Visual Studio Code用の新しい 4D-Debugger 拡張機能 を導入し、ブレークポイントの設定、コードを1行ずつ実行する、変数のインスペクションなどのパワフルな機能でデバッグを強化します。このツールは、4D-Analyzerの上に構築されるためスムーズに統合され、デバッグをより速く、より直感的にします。

    VS Codeマーケットプレイスから4D-Debugger 拡張機能をインストールしてください。マシン上で4D Serverが動作しているようにした上で、.vscode/launch.jsonファイルを使用して接続を設定します。デフォルトのデバッガーポートを使用して、既存のサーバーに接続することもできます。

    ユーザーインターフェース

    ウィンドウのカスタマイズから、より良いスクロール、アイコンのコントロール、よりクリーンなバージョン管理カタログまで、4D 21のUIレイヤーは、より柔軟でかつ開発者に優しくなりました。これらの機能強化は、洗練されたモダンなインターフェースを構築するのに役立つだけでなく、コラボレーション、デバッグ、メンテナンスも簡素化します。

    新しいウィンドウタイプでアプリの外観をカスタマイズ

    2つの新しいウィンドウタイプにより、ウィンドウのタイトルバーを自分でデザインすることができるようになり、ボタンや検索ボックスなどの独自の要素を追加できるようになりました。これは、アプリケーションの外観を完全にあなたの仕様に合わせることができる新たな自由を意味します。

    しかし、それだけではありません!開発プロセスを効率化するための新しいコマンドもいくつか導入されました:

    • Windows のタイトルバーやmacOS のDock でウィンドウを縮小することができる、REDUCE RESTORE WINDOW
    • Windows のタイトルバーまたはmacOS のDock でウィンドウが縮小されているかどうかを知る、 Is Window Reduced
    • ウィンドウが最大化されているかどうかを知る、Is Window Maximized

    各ウィンドウタイプのカスタムアイコン

    SET WINDOW DOCUMENT ICON コマンドを使用すると、各ウィンドウタイプにカスタムアイコンを定義することで、ユーザーのナビゲーションとエクスペリエンスを向上させることができます。このコマンドを使用すると、ウィンドウにアイコンまたはドキュメントを設定し、インターフェースをより視覚的に魅力的にすることができます。アイコンはウィンドウそのものととWindows タスクバー内にも表示され、ひと目見ただけでそのウィンドウだと判別することができます。この機能では、アイコンをドキュメントに関連付けることもサポートし、さらなるカスタマイズオプションを提供します。

    サブフォームでのスクロール動作の強化

    4D 21では、アプリケーションでサブフォームをよりスムーズに、より直感的に操作できるようになりました!

    サブフォーム内のリストをスクロールしようとして、サブフォーム全体が動いてしまい、イライラしたことはありませんか?あるいは、サブフォームをスクロールしようとしても、リストボックスが動かないという経験をしたことはありませんか?

    4D 21では、改善された新しいサブフォームスクロール動作で、この問題を解決します。

    時間型カラムとフッターに “ヌルのときブランクにする”を導入

    4D 21では、“ヌルのときブランクにする(blank if null)”プロパティが、リストボックスの “時間”型のカラムとフッターで使用できるようになりました

    プロパティリストの表示テーマやまたはプログラミングによって、その振る舞いを簡単に定義できます。この機能強化により、シンプルなチェックボックスでもコード行でも、より明確で直感的な結果が得られるようになりました。

    埋め込みWebエリアを初期化するカスタムパラメータ

    4D 21では、アプリケーションの組み込みWeb エリアを簡単にカスタマイズできます!このエリアはブラウジングにChromium を使用しており、開発者は時々Chromium の動作を調整する必要があります。

    これまでは、複雑なコードの変更が必要でした。しかし、4D 21では、“4DCEFParameters.json”というファイルを作成し、そのファイル内で必要なカスタマイズを指定するだけです。これにより、管理が非常に簡単になり、カスタマイズが正しく適用されるようになります。

    例えば、この機能により、以前は不可能だったWeb エリアでの動画の自動再生が可能になります。

    $4Dを使用して埋め込みWebエリアでクラスを使用する

    Web エリアにおいてどの関数が$4dを通して公開されるかを正確に定義することで、Web エリアでの4Dメソッドへのアクセスをコントロールできます。4D 21の新しい WA SET CONTEXTコマンドを使えば、クラスメソッドやオブジェクトベースのコンテキストを使って、利用可能な関数をカプセル化し、制限することができます。これによってセキュリティが向上し、コードが整理され、またメンテナンスも容易になります。

    ラベルウィザードのフォーミュラ編集とセキュリティの向上

    4D 21では、ラベルウィザードコンポーネントが改善され、ラベルへのフォーミュラの挿入や修正がより簡単で安全になりました。専用のボタンやメニュー項目を使用してフォーミュラをすばやく追加し、またそれをフォーミュラエディタで直接検証できるようになりました。

    このアップデートにより、悪意のあるフォーミュラをフィルタリングしてセキュリティを強化し、許可されていないコマンドをブロックすることで有効なフォーミュラの作成を保証します。編集も簡素化され、ダブルクリックするだけで数式を開き、変更を加えることができます。

    ノンブロッキング印刷

    4D 21では、ノンブロッキング印刷が導入され、複数の印刷ジョブの同時実行が可能になり、アプリケーションの応答性が向上しました。新しいプロジェクトでは、これはデフォルトで有効化され、シームレスなエクスペリエンスが保証されますが、古いアプリケーションでは、ストラクチャー設定の互換性オプションで有効にする必要があります。