Qodly Studio は,4D ServerとORDAをバックエンドとする本格的なWebアプリケーションをローコードで開発するためのツールです。4D 20 R2以降のデザインモードに組み込まれており,パートナープログラムのシルバーまたはゴールドメンバーであれば,使い始めることができます。
4D 20 R8以降,4DとQodly Studio の組み合わせはQodly Pro と呼ばれています。それまでの名称はQodly Studio for 4D でした。(”Pro”ではない)Qodly は,4Dがクラウドサービスとして展開しているプラットフォーム (PaaS) のほうを指します。Qodly は,Amazon Web Services (AWS) データセンターにホスティングされた専用のアプリケーションサーバー(Qodly Server)をバックエンドとしており,開発〜運用〜保守まで,すべてブラウザで完結し,4Dや4D Serverは使用しません。
Qodly Pro を使った開発は,通常,4D Developer Professionalとブラウザの組み合わせで進めます。Qodly Studio のGUIでフロントエンドをデザインし,4Dのデザインモードでバックエンドの開発をする,というスタイルです。適宜,ブラウザでアプリケーションの出来栄えを確認します。アプリケーションを1から作り上げることもできますが,既存の4Dアプリケーション(プロジェクトモード移行済み)にWebインタフェースを追加するようなケースが基本的に想定されています。クラウドサービスのQodly とは違い,バックエンドはフルスペックの4D Serverなので,既存のメソッドやロジック,プラグインやコンポーネントなど,すべての資源を有効に活用することができます。
Qodly Pro で開発したアプリケーションは,4D Server(ライセンスコード:4USE
)で運用します。HTTPサーバーを使用しますが,Web Application Expansion(ライセンスコード:4UWE
)は使用しません。ブラウザからQodly にログインしたユーザーは,ログアウトするまで,4D Serverの接続クライアント1
名としてカウントされます。必要であれば,4D Client Expansion(ライセンスコード:4UCL
)を追加して,同時接続ユーザー数を拡大することができます。
4Dで開発されたアプリケーションは,クライアント/サーバー版に移行した場合でも,基本的にシングル版と同じような感覚で使うことができますが,ネットワーク経由で複数のユーザーが同時にアクセスするようになると,それまで気づかなかった課題がみつかるかもしれません。それで,日常的には4D Developer Professionalで開発し,時折,4D Serverで動作を確認することがベストプラクティスとなっています。
その点は,Qodly Pro も同じです。開発環境の4Dには存在せず,運用環境の4D Serverだけに存在する課題があるかもしれません。そのようなときは,4D ServerとQodly Studio の組み合わせでQodly Pro を使うことができます。つまり,サーバー側でQodly Studio を起動して,サーバー側のコードのテストやデバッグを実行することができます。
Qodly Pro は,4Dの開発ツールセットに含まれています。2025年以降,4Dが提供する開発ツールは,すべてパートナープログラムに集約され,買い切りライセンスは,2024年12月31日に販売を終了しました。パートナープログラムのメンバーシップには,ブロンズ・シルバー・ゴールドの3段階があり,利用できるサービスやツールセットの内容に違いがあります。
Qodly Pro のライセンスは,4D Developer Professional(ライセンスコード:PNDP
)に含まれています。このライセンスがアクティブであれば,「デザイン>設定」および「ファイル>Web管理」メニューに「Qodly Studio へのアクセスを有効化する」というチェックボックスが表示されます。前者はカレントプロジェクト,後者はすべてのプロジェクトが対象です。このライセンスは,シルバーおよびゴールドメンバーの特典です。
4D Server側でQodly Pro を使用するためのライセンスは,4D Developer Bundle(ライセンスコード:PNDB
)に含まれています。このライセンスがアクティブであれば,サーバー側の「ファイル>Web管理」メニューにも「Qodly Studio へのアクセスを有効化する」というチェックボックスが表示され,「ウィンドウ」メニューからQodly Studio にアクセスすることができます。 このライセンスは,ゴールドメンバーの特典ですが,シルバーメンバーも追加で購入することができます。
4D Developer Bundleは,プロジェクトモード向けに組み直された新しい開発ツールセットです。
ゴールドメンバーには,パートナープログラム更新時に下記のライセンスが付与されます。
1番のDeveloper Professionalは,複数の開発者が別々のプロジェクトまたはプラットフォームを担当する一般的なチーム体制に向いています。開発用のPCまたはMac3台に1本ずつライセンスを登録します。
以前は,Team Developer Professionalライセンスを選択することもできました。Team Developer Professionalは,複数の開発者がクライアントからサーバーに接続し,それぞれのマシンからリアルタイムで同時にアプリケーションを開発するようなバイナリモードのチーム体制に向いています。クライアント/サーバー環境でコンパイルを実行することができます。開発用のPCまたはMacサーバー1台にライセンスを登録します。このライセンスは2024年の更新を最後に提供を終了しました。
Developer Bundleは,プロジェクトモードを想定した新しいオプションです。プロジェクトモードでは,リアルタイムでサーバー側のストラクチャファイルを同時に改修するのではなく,Gitなどのバージョン管理システムを活用し,チームのメンバーが開発したコードを共有リポジトリに結合する「継続的インテグレーション」方式が推奨されています。サーバー/クライアントの場合,2台のマシンを使用する代わりに,同じマシン上でサーバーとクライアントの両方を起動し,ローカル接続でデザインモードを使用します(リモートクライアントもデザインモードにアクセスできますが,開発モードでない限り,コードを編集することはできません)。Developer Bundleの4D Serverには,2ユーザーまで接続することができます。開発用のサーバー兼クライアントPCまたはMac3台に1本ずつライセンスを登録します。
開発ツールのQodly Studio は,4Dまたは4D Serverで使用することができます。4Dの場合,バージョン20 R2以降,4D Serverの場合,バージョン20 R8以降が対応しています。ただし,プロジェクトモード限定です。
4DでQodly Studio を使用するためのライセンスは,パートナープログラムのシルバーおよびゴールドメンバーの特典である4D Developer Professional(ライセンスコード:PNDP
)に含まれています。
4D ServerでQodly Studio を使用するためのライセンスは,パートナープログラムのシルバー追加パックまたはゴールドメンバーの特典である4D Developer Bundle(ライセンスコード:PNDB
)に含まれています。
パートナープログラムには,テスト用の4D Server(ライセンスコード:PNSS
)も含まれています。サーバーアプリケーション(Qodly を含む)をテストするためのライセンスですが,このライセンスで開発ツールのQodly Studio を使用したり,開発したサーバーアプリケーションを配付・運用したりすることはできません。そのためには,4D Serverの買い切りまたはサブスクリプションライセンスを購入してください。
なお,4D Serverの買い切り(ライセンスコード:4USE
)またはサブスクリプションライセンス(ライセンスコード:4RSE
)には,サーバー/クライアント環境の開発ライセンスが含まれているので,バージョン条件が満たされていれば,4D ServerでQodly Studio を使用することができます(20 R8以降でライセンスを更新していれば,メンテナンスが終了した後もQodly Studio を使い続けることができます)。
最後に、パートナーは14日評価版のサーバーアプリケーションをビルドすることができます。この設定でビルドしたアプリケーションは、初回の起動時にインターネット経由で評価ライセンス(ライセンスコード:EVSE
)をダウンロードし、評価期間中は通常版の4D Serverと同じように動作します。
License | Qodly Studio for 4D | Qodly Studio for 4D Server | Test Qodly | Deploy Qodly |
---|---|---|---|---|
PNDS |
||||
PNDP |
✅ | ✅ | ||
PNDB |
✅ | ✅ | ✅ | |
PNSS |
✅ | |||
EVSE |
✅ | ✅ | ||
4USE |
✅ | ✅ | ✅ | |
4RSE |
✅ | ✅ | ✅ |
PNDP
PNSS
EVSE
4USE
or 4RSE
PNDB
or PNDP
PNDB
or PNSS
EVSE
4USE
or 4RSE
20r8以降,フォームのプロパティでフォームクラスを定義することができます。DIALOG
のformData を省略してフォームを実行した場合,自動的にフォームクラスがインスタンス化されてForm
オブジェクトとなります。
サブフォームにもForm
オブジェクトの概念がありますが,フォームクラスが自動的にインスタンス化されるかどうかは,フォームの「式の型」で決まります。「式の型」が「オブジェクト」であれば,Form
オブジェクトはインスタンス化されません。この方法は,DIALOG
にformData を渡す用法に似ており,既存のオブジェクト(エンティティなど)をサブフォームにバインドしたいケースにおいて有効です。自動的にフォームクラスがインスタンス化されることを望むのであれば,「式の型」を「オブジェクト」以外に設定してください。
20r8以降,GET SERIAL INFORMATION
は廃止予定(_O_
)コマンドに類別されています。コマンドから返されるシリアル情報は,4Dのライセンスに固有の識別子なので,4Dのライセンスに紐づいたプラグインやコンポーネントのライセンスを発行するために用意されました。
より一般的な使い道として,サーバーに接続しているクライアント数や接続数の上限をコマンドから取得することもできました。コマンドは引き続き機能しますが,今後は後継のLicense infoを使用することが勧められています。
旧コマンドはクライアント側でも情報を返しますが,スレッドセーフではありません。新コマンドはサーバー側で実行する必要がありますが,スレッドセーフです。また,旧コマンドよりも詳細な情報が返されます。
新旧コマンドの対比については,下記の表を参考にしてください。
_O_GET SERIAL INFORMATION | License info |
---|---|
key | info.key |
user | info.userName |
company | info.companyName |
connected | 1 (4D Local mode)info.products.query("name == :1"; "4D Client").first().usedCount |
maxUser | 1 (4D Local mode)products.query("name == :1"; "4D Client").first().allowedCount |
product
に返されるライセンス名とシリアル情報は下記のとおりです。サーバー(4D Server)のユーザー数は,クライアント数ではなく,サーバー本体の情報(常に1
)です。
name | id |
---|---|
4D | 808464433 |
4D Volume Desktop | 808464437 |
4D Server | 808464440 |
4D Client | 808464441 |
Compiler | 808464692 |
Qodly Studio | 808465458 |
Internal ODBC Commands | 808465720 |
4D Write Pro | 808464697 |
4D View Pro | 808465207 |
4D for OCI | 808465208 |
4D ODBC Pro | 808464946 |
4D SQL Server | 808464949 |
4D SQL Server - Local | 808530485 |
4D SQL Server - 1 Connection | 825242165 |
4D Web Application | 808464945 |
4D Web Application for 4D Client | 808465209 |
4D Web Application - 1 Connection | 825242161 |
4D Web Services | 808465464 |
4D Web Services for 4D Client | 808465465 |
4D Web Services - 1 Connection | 825242680 |
4D REST Only | 808464439 |
4D REST - Test (3 Clients) | 808465719 |
シリアル情報よりもクライアント接続数に関心がある場合,ユーザーの種別(RESTまたは4D Client)やセッション情報,経過時間などを返すLicense usageのほうが便利です。こちらもサーバー側で実行する必要がある点に留意してください。
Macでシステムオブジェクトに「自動」の色を割り当てると,その塗りつぶしや線の色はいわゆる「まっ黒」つまり#000000
ではありません。
ライトモードの場合,OBJECT GET RGB COLORS
は「自動」に対して#000000
を返しますが,印刷やPDFで確認すると,実際には「まっ黒」ではないことに気づきます。
var $fg; $bg; $ag : Text
OBJECT GET RGB COLORS(*; $object; $fg; $bg; $ag)
以下の例では,上のページのオブジェクトは線の色が「自動」に設定されているため,若干,薄い黒が出力されています。
対照的に,下のページのオブジェクトは線の色が「black」に設定されているため,完全な黒が出力されています。
プレビューのカラーピッカーでPDFの色を確認すると,黒に見える色は#272727
,つまり「とても暗いグレー」です。
HTMLでは,メディアクエリを使用して,デバイスのメディアタイプに応じて異なるスタイルを適用するのが一般的です。
4DにもCSSメディアクエリが用意されていますが,唯一サポートされているメディアフィーチャーはprefers-color-scheme
だけです。
以下のCSSはエラーになるわけではありませんが,4Dでは効果がなく,画面と印刷でスタイルが切り替わることはありません。
@media print {
text.normal {
stroke: red;
}
input.normal {
stroke: red;
}
line.normal {
stroke: red;
}
}
代替策として,フォームをオブジェクトに読み込み,使用する直前にcss
プロパティを変更することで,スタイルシートを切り替えることができます。
/SOURCES/
フォルダーに以下のファイルが存在する場合:
@media (prefers-color-scheme: light){
text.normal {
stroke: automatic;
}
input.normal {
stroke: automatic;
}
line.normal {
stroke: automatic;
}
}
@media (prefers-color-scheme: dark){
text.normal {
stroke: automatic;
}
input.normal {
stroke: automatic;
}
line.normal {
stroke: automatic;
}
}
text.normal {
stroke: black;
}
input.normal {
stroke: black;
}
line.normal {
stroke: black;
}
{
"$4d": {
"version": "1",
"kind": "form"
},
"css": [
"/SOURCES/screen.css"
]
}
FORM LOAD("black")
とすれば,画面用のCSSが使用されます。一方,
$form:=JSON Parse(File("/SOURCES/Forms/black/form.4DForm").getText(); Is object)
$form.css:=["/SOURCES/print.css"]
FORM LOAD($form)
とすれば,印刷用のCSSが使用されます。
もちろん,印刷専用のフォームであれば,CSSを切り替えたりせず,はじめから自動の代わりに黒を全面的に使用したほうが合理的でしょう。
4D 20でストラクチャファイルをプロジェクトモードに変換した場合,Windows版の過去バージョンで作成したフォームの入力エリアに表示した文字の末端(特に数字など丸みのある文字の曲線部分)が欠けてしまうことがあります。
4Dは,19r4以降,高解像度ディスプレイに対応しています。これはGDIスケーリング(画像や文字サイズを引き伸ばすことで高解像度ディスプレイに対応する便宜的な仕組み)ではなく,テキストのレンダリングをGDIからDirectWriteに移行することによって実現した本格的な対応です。
GDIを使用していた過去バージョンで作成されたフォームを4D 20のDirectWriteモードで表示した場合,まったく同じようにテキストがレンダリングされることはありません。
バイナリモードには互換性オプションの「フォームでのテキストレンダリングではDirectWriteを使用する」が用意されていますが,プロジェクトモードではこのオプションが表示されません。過去バージョンで作成されたバイナリモードのフォームを4D 20に変換した場合,このオプションを有効化することは任意となっていますが,バイナリモードのフォームを4D 20でプロジェクトモードに変換した場合,このオプションは強制的に有効化されます。アップグレードの原則は「互換性を重視」ですが,プロジェクトモード変換の原則は「最新の仕様に移行」だからです。
もし,どうしても過去バージョンと同じようなテキストのレンダリングを希望し,高解像度ディスプレイ対応を諦めても良いのであれば,直接,settings.4DSettings ファイルを編集することができます。
<?xml version="1.0" encoding="UTF-8"?>
<preferences stamp="…">
<com.4d>
<database>
<misc win_form_text_directwrite="false"/>
</database>
</com.4d>
</preferences>
ただし,4D 19 R4以降は全体として「高解像度ディスプレイ対応アプリケーション」なので,高解像度ディスプレイではフォームの表示が不自然になるかもしれません。その場合,4D.exeと同階層のResources フォルダーにあるinfo.plist ファイルを編集し,高解像度ディスプレイ未対応当時の動作に戻すことができます。
<key>WinDPIAwareness</key>
<string>0</string>
いずれも暫定的な措置であり,GDIモードが将来的にサポートされるわけではありません。過去バージョンで作成したフォームの入力エリアに表示した文字の末端(特に数字など丸みのある文字の曲線部分)が欠けてしまう場合,そのような入力エリアのフォントやサイズを見直すことが勧められています。
それぞれのモードでテキスト入力に数字を表示しています。プロパティは下記のとおりです。
MS Pゴシック
13
6
および9
の左側が欠けていることに気づきます。
スタイルシートのフォントサイズを変更します。オブジェクトの高さは自動的に調整されます。
16
20
スタイルシートのフォント名をMS Pゴシック
ではなく,よりモダンなものに変更します。
游ゴシック