4D v19から、簡単なコマンドでプロジェクトのコンパイルを開始することができるようになりました。これを何に使うのか、不思議に思うかもしれません。
あなたのチームは複数の開発者で構成されているかもしれません。だから、ソースコントロールサーバーにコードをプッシュするたびに、コンパイルを自動化してはどうでしょうか。エラーがすぐに検出されれば、それを確認するのはいつでも簡単です。
もうひとつのケースは、あなたのプロジェクトが複数のコンポーネントで構成されている場合です。コンパイル、ビルド、そしてコンポーネントをホストデータベースにコピーするメソッドを書けばよいのです。
このブログでは、独自の自動化ツールを作成するのに非常に便利な様々な技術的ポイントについて、アプリケーションの例とともに説明します。
コマンドラインから4Dアプリケーションを起動する
開くプロジェクトを指定し、起動するオプションを選択することで、コマンドラインから 4D を起動することができます。ここでは、アクションを自動化するのに非常に便利ないくつかのオプションについて説明します。
ヘッドレス
反復的なタスクや自動トリガータスクの実行には、インターフェースの存在は不要です。コマンドラインで“–headless“オプションを渡すと、4D、4D Server、またはマージされたアプリケーションは、インターフェイスなしで実行されます。
詳しくは、こちらのブログポストをご覧ください。ヘッドレス4Dアプリケーション
データレス
dataless“オプションは、4Dにデータファイルを開かないように要求することができます。例えば、コンパイルを開始するスクリプトを作成する場合、データファイルの読み込みは不要です。
はっきり言って、datalessモードはほとんど使われません。データレスモードで4Dを開くと、4D起動後に4Dコマンドを使用してデータファイルを開くことができません。詳細は、ドキュメントに記載されています。
ユーザーパラメータ
反復タスクを自動化することは、毎回全く同じことをすることを意味しません。 例えば、1時間ごとに簡単なチェックのためのオプションでタスクを起動し、毎晩、より時間とリソースのかかる別のタスクを実行することができます。
オプションの“–user-param“は、コマンドラインに文字列を渡すことができます。そして Get database parameterコマンドとuser param value 定数で、コマンドラインで渡された文字列を取得することができます。
$result:=Get database parameter(User param value;$userParam)
詳しくは、こちらの ブログ記事をご覧ください。
USING Aコマンドでプロジェクトをコンパイルする
コマンドのおかげで Compile projectコマンドのおかげで、プロジェクトのパスを渡すことで、そのプロジェクトのコンパイルを開始することができます。コマンドは、コンパイルを設定するためのオプション・オブジェクトも受け付けます。例えば、プロジェクトの依存関係、インテルとシリコンのターゲットなどを指定できます。
$status:=Compile project($file;$options)
エラーが発生した場合、コマンドは、エラーメッセージ、メソッド名、行番号からなるエラーのリストをオブジェクトとして返します。注意点として METHOD OPEN PATHコマンドを使用すると、該当する行で直接コードエディタを開くことができます。このコマンドのすべてのオプションを確認するには、このブログ記事またはドキュメントを読むことをお勧めします。
このコマンドが提供する可能性と、その適切な使い方を知ることは重要です。しかし、もう一つの素晴らしいニュースは、開発ライセンスなしで、“-dataless“と“–headless“オプションを使って、解釈モードでプロジェクトで実行することができるということです!ですから、例えばGitHubのgitアクションを使ってアプリケーションをコンパイルするために外部のサーバーソリューションを使用する場合、サードパーティのサーバー上でライセンスを注入する必要はありません。
ログファイルを生成する
自動タスクでは、タスクが実行されたことを知るために、また、問題が発生した場合にエラーを回復するために、ログが必要不可欠です。しかし、現実にはそう簡単ではありません。macOSとWindowsでは管理が異なる。サーバー上のファイルアーキテクチャが異なることもある。そして、スクリプトは、自分のサーバーの一つで実行されることもあれば、外部のサーバーで実行されることもある。
私たちが提案する解決策は LOG EVENTコマンドをInto system standard outputs 定数と一緒に使用することです。そうすれば、標準ストリームとエラーストリームをコマンドラインの1つまたは複数のファイルにリダイレクトすることができます。つまり、スクリプトを変更することなく、自分の環境に適応させることができるのは素直なことです。
最後になるが、スクリプトがいつ実行され、いつエラーが発生したかを知ることは有用である。そのためには Timestampコマンドはこれに最適です。このコマンドは文字列を返すので、ログファイルにミリ秒の精度で簡単に追加することができます。
LOG EVENT(Into system standard outputs;Timestamp+" - I am an information";Error information)
LOG EVENT (Into system standard outputs;Timestamp+" - I am an error";Error message)
具体的な例
さあ、どうでしょう。これまでのTipsに従って、GitHubで公開されているプロジェクトをコンパイルするためのプロジェクトを作成しました。user-param“に文字列化したオブジェクトを渡していますが、このオブジェクトには3つの属性が含まれています。
- path: コンパイルするプロジェクトのパス(必須属性)
- options: Compile Projectコマンドに渡されるオプション・オブジェクト(オプション属性)
- quit: false を渡すと、コンパイル後に 4D を閉じないようになります。
以下はコマンドラインの例です。パスを合わせることを忘れないでください。
シンタックスチェックを起動します。
- macOS
/.../Contents/MacOS/4D --structure /.../Tool_Compilation.4DProject --user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[]}}" --headless --dataless 2>.../errlog.txt 1>.../infolog.txt
- Windows
C:\...DD.exe --structure C:\...\Tool_Compilation.4DProject --user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[]}}" --headless --dataless 2>C:\...\errlog.txt 1>C:\...\infolog.txt
infolog.txtの中身です。errlog.txtは空です。
2021-08-25T17:38:52.197Z - Start script 2021-08-25T17:38:54.961Z - user-param: {"path":"/.../myProject.4DProject","options":{"targets":[]}} 2021-08-25T17:38:54.964Z - {"success":true,"errors":[]} 2021-08-25T17:38:54.999Z - End script
デフォルトの設定でコンパイルしています。
- macOS
/.../Contents/MacOS/4D --structure /.../Tool_Compilation.4DProject --user-param "{\"path\":\"/.../myProject.4DProject\"}" --headless --dataless 2>.../errlog.txt 1>.../infolog.txt
- Windows
C:\...DD.exe --structure C:\...\Tool_Compilation.4DProject --user-param "{\"path\":\"/.../myProject.4DProject\"}" --headless --dataless 2>C:\...\errlog.txt 1>C:\...\infolog.txt
Compile projectコマンドに渡されたオプションでコンパイルしています。
- macOS
/.../Contents/MacOS/4D --structure /.../Tool_Compilation.4DProject --user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[\"x86_64_generic\"]}}" --headless --dataless 2>.../errlog.txt 1>.../infolog.txt
- Windows
C:\...DD.exe --structure C:\...\Tool_Compilation.4DProject --user-param "{\"path\":\"/.../myProject.4DProject\",\"options\":{\"targets\":[\"x86_64_generic\"]}}" --headless --dataless 2>C:\...\errlog.txt 1>C:\...\infolog.txt
次はどうする?
さて、次はあなた次第です。タスクを自動化するためのアイデアやソリューションを、GitHubやフォーラムで遠慮なく共有してください。