19r6では,プロジェクトフォルダーを共有することにより,リモートクライアントからデザインモードにアクセスできるようになりました。これは18r4でサーバーと同じマシン上で起動した4D Remote(ローカルクライアント)であればデザインモードにアクセスできる仕組みを拡張するものです。
プロジェクトモードでは,構造的なバイナリファイルであるストラクチャファイルではなく,標準テキストファイルの集合を扱います。チーム開発においては,Gitのようなバージョン管理システムを併用することが想定されています。Gitワークフローは,4Dに限らず,多くの開発チームで採用されています。バージョン管理システムを活用することにより,アジャイル開発に則ったリリースや継続的なメンテナンス(CI/CD)を実施することができます。外部コードエディターを利用することもできます。
バイナリモードに慣れたデベロッパーの中には,こうしたことをメリットとは考えず,クライアントで同時開発ができないのであれば,プロジェクトモードに移行することはできない,という意見が挙がりました。今回の新機能はそうしたニーズに応えるものです。
開発部は,Gitのようなバージョン管理システムを推奨しています。プロジェクトモードは,そのような開発スタイルを想定したアーキテクチャだからです。とはいえ,デベロッパーが望むのであれば,さらにプロジェクトモードに切り替えることが容易になるのであれば,ファイル共有を利用した簡易的なシステムがあっても良い,と判断しました。
インタープリター版のプロジェクトに開発モードで”接続”した場合,メソッドエディター・フォームエディター・ツールボックスなどの排他的ロックは,オペレーションシステムではなく,4D Serverと4D Remoteの間で管理されることになります。そのため,外部エディターで同時にソースコードを編集することはできません。この場合,サーバーに接続することは,クライアント側のファイルシステム上で共有フォルダーの場所を指定する行為を指します。例外は,サーバーと同じマシンで起動したローカルクライアントで,その場合,開発モードではなく,従来の要領でサーバーに接続します。
クライアント側でメソッド・フォーム・ストラクチャ・データベース設定・ドキュメンテーション・ユーザー/グループ・メニュー・ヘルプTips・リスト・フィルター・スタイルシートなどを更新すると,サーバーに通知が送信され,プロジェクトがリロードされます。実行中のメソッドやフォームは,閉じられた後に更新されます。フォームやメソッドはファイル単位でロックされます。ツールボックスはページ単位でロックされます。データベース設定は全体がロックされます。コンパイルを実行できるのは1度に1台のマシンだけです。
下記のコマンドはバイナリモードと同じ要領で使用できます。
下記のコマンドは対象メソッドがロックされていなければ成功し,ロックされていればエラーを返します。
開発モードで接続したという情報は .4DLink ファイルに反映されます。その場合,プロジェクト名にはサーバーの公開名とアドレスに “(development mode)” という文字列が追加されます。
フォルダー共有は,Windows/macOSそれぞれのオペレーションシステムが提供する基本的な仕組み(AFP, SMB/CIFS)を使用することができます。アクセス速度が問題であれば,NAS(Network Attached Storage)の導入を検討すると良いかもしれません。
Windows版のアプリケーション(4D.exe)のエイリアスに .4DProject ファイルのエイリアスをドラッグ&ドロップしてプロジェクトを開くことはできません。これは仕様です。
4Dのコンパイラーは,64
ビット整数をサポートしていません。SQLはコンパイルの対象外であるため,例外的に64
ビット整数型フィールドが扱えます。64
ビット整数型のコンパイルをサポートするためには,コンパイラーの全面的な書き換えが必要となり,これには2ないし5年の歳月がかかると想定されています。現時点で64
ビット整数型のサポートは計画されていません。
バリアント型やオブジェクト型は,マクロ(プリプロセッサ)によって展開される擬似的なデータ型なので,コンパイラーを全面的に書き換えることなく,比較的短期間でランゲージに追加することができました。オブジェクト記法も同様です。
PostgreSQLなど,64
ビット整数型のプライマリーキーを使用するような外部システムと連携する場合,32
ビット整数型のフィールドでは同期ができない,という問題に直面します。プライマリーキーは,基本的にシーケンス番号であり,実際に64
ビット整数の最大値(符号付きで9,223,372,036,854,775,807
=922京3372兆368億5477万5807)まで使用することはないとはいえ,32
ビット整数の最大値(2,147,483,647
=21億4748万3647)では足りなくなる恐れがあります。
そのようなわけで,19r6では,実数型を53
ビット整数として使用できるようになりました。
Support of larger integers than integer32
4Dの実数型はIEEE 754準拠の倍精度浮動小数点数であり,符号1
・仮数52
・指数11
の64
ビット(8
バイト)で成り立っています。53
ビットあれば,MAX_SAFE_INTEGERつまり9,007,199,254,740,991
=9007兆1992億5474万991までの整数を安全に,つまり誤差を生じさせることなく,加算や現在ができます。
これまでのバージョンでは,おおきな実数を文字列に変換すると12
桁の指数表現になり,整数であれば精度が失われました。19r6では,IEEE 754に変換しても精度が失われない整数(15
から17
桁)を収めた実数は,整数のまま文字列に変換されるよう仕様が見直されています。JSON・XMLドキュメントの実数⇆文字列変換は,整数は整数のまま出力されるようになりました。そのような整数をメソッドエディターに入力した場合,指数表現には変換されず,整数は整数のままトークナイズされるようになりました。
テーブルリストのダークモード設定は,環境設定>アピアランスではなく,ストラクチャー設定>インタフェース>アピアランスで決まります。前者はアプリ共通のインタフェース,後者はプロジェクト毎のインタフェースに適用される設定です。テーブルリストはデザインモードではなく,ユーザーモードの一部なので,ストラクチャー設定が適用されます。カレントテーブルの入出力フォームがダークモードで表示されるかどうかは,ストラクチャー設定とフォーム毎のプロパティで決まります。
Mac版のビルドアプリケーションをネットワーク経由で配付するためには,アプリをコード署名する必要があります。アプリの構成ファイルを署名後に変更すると,コード署名が無効となるので,アプリの中に暫定的なファイルを含めることは推奨されていません。これにはWebサーバーのTLS証明書も含まれます。証明書には,有効期限があるためです。Mac版では,データベースフォルダー内の証明書を暗黙的に使用するのではなく,新しいWEB Server
コマンドを使用し,certificatesFolder
でアプリ外のパスを指定するようにしてください。
ODBCドライバー経由でOracleデータベースにアクセスする場合,文字セットの設定をUnicodeにする必要があります。
環境変数NLS_LANG
は<LANG>_<SUBLANG>.AL32UTF8
というフォーマットで設定することができます。区切り文字がアンダースコアとピリオドであることに留意してください。デフォルトはWE8MSWIN1252
のように特定の文字セットとなっています。多言語のデータを扱うためには,SUBLANG
に加えてAL32UTF8
も設定する必要があるかもしれません。たとえば,下記のように設定することができます。
NLS_LANG=JAPANESE_JAPAN.AL32UTF8
クライアント側でトランザクション中にオブジェクト型フィールドを何度か更新した場合,entity.save(dk
auto merge)
が成功しないことがあります。
クライアント/サーバー版のORDAでは,トランザクションを確定またはキャンセルした後,サーバー側で更新されたエンティティを明示的にリロードする必要があるかもしれません。たとえば,クライアント側でトランザクション中にエンティティを更新した場合,その時点ではクライアント側にあるエンティティのスタンプ値はインクリメントされておらず,古いスタンプ値のままとなっています。そのようなときは,一旦,トランザクションを確定またはキャンセルした後,エンティティを保持している変数にNull
をセットする,dataClass.get()
entity.reload()
などの方法で最新のエンティティをサーバーからリロードした上で次のトランザクションを開始することができます。
Windows版でSET DATABASE PARAMETER
でDirect2D status
をDirect2D disabled
にセットした場合,Write Proエリアは使用できなくなります。これは仕様です。v17のWrite Proエリアは,GDI/GDIPlusモードが残されていたので,Direct2Dモードが無効にされていてもレンダリングすることができました。これは,デバッグ目的の措置であり,Direct2Dのない環境でWrite Proエリアは正式にサポートされていませんでした。
必要要件: Windows上では,4D Write Proの機能はDirect2Dに依存しています。Windows 7またはWindows Server 2008以降のマシンでは,必要なバージョンのDirect2Dを利用可能にするために,Windowsプラットフォーム更新プログラムがインストールされていることを確認して下さい。
アプリの高DPI設定が有効にされている場合(19r4以降のデフォルト),Direct2Dモードは必須であり,無効にすることはできません。その場合,SET DATABASE PARAMETER
でDirect2D status
をDirect2D disabled
にセットしても無視されます。