[KE1.6.12/2.0.4] ジョブフローエディタの機能拡張
# 1. はじめに
このメモでは Kompira 1.6.12 および 2.0.4 で導入されたジョブフローエディタの機能拡張について説明します。

## 1.2. 注意点
- この機能拡張でジョブフローの補完入力機能が改善していますが、編集中のジョブフローの完全な構文解析を行なっているわけではないため、適切な補完候補が表示されない（適切でない補完候補が表示される）場合があります。
- この資料で紹介しているキーボード操作や画面表示は Windows でのものになります。Mac や他の OS ではキーボード操作や画面表示が異なっている場合があります。また、OS や他のアプリケーションによってキーボード操作が優先的に処理される場合があります。そうしたときは OS や他のアプリケーション側のキーバインド設定の変更を検討してください。現時点では Kompira 側でキーバインドを自由に設定する機能はありません。

# 2. 新機能
## 2.1. リアルタイムコンパイルによるエラー表示
- エディタでジョブフロー編集時にリアルタイムにコンパイルを行ない、エラーを検出した場合はエディタ上で識別できるように表示します。
    - このとき静的な構文エラーなどだけでなく、参照オブジェクトの存在チェックも行なうようにします。
    - 参照オブジェクトの存在が確認できない場合などを示すために、既存の「エラー」情報に加えて新たに「警告」情報を導入します。
    - エラーや警告が表示されている状態でもジョブフローの「保存」はできます。

- 以下のように、エラーの箇所は赤く、警告の箇所は黄色くハイライト表示されます。
![image.png](https://image.docbase.io/uploads/c5805ae2-ecd6-423c-85fc-051611a5a032.png =WxH)

- エラーや警告部分にマウスカーソルを合わせると、エラーや警告の内容が表示されます。
![image.png](https://image.docbase.io/uploads/555d444c-aa57-4559-8d7e-7b8e8fe504d7.png =WxH)

- **【注意点】**
    - 現在のバージョンではジョブフローのコンパイルを Kompira サーバ側で行っています。
    - ジョブフローのソースコードが長いほど、Kompira サーバの負荷が高い状況にあるときほど、コンパイルに時間がかかりエラーの表示が遅延します。
    - 複数人が同時にジョブフローを編集しているような場面では、Kompira サーバの負荷が上昇しやすくなります。

## 2.2. エラー箇所の位置情報の詳細化
- ジョブフローのエラー箇所はこれまで「行番号」でしか識別できませんでしたが、行番号／列番号による範囲で識別できるようにします。
    - エラーや警告の位置を、先頭位置から終端位置という「範囲」で識別できるようにします。これにより、例えば1行のうちに複数のエラーや警告がある場合でも、その箇所を識別しやすくなります。
    - ただし、エラーの種別によっては従来通り行単位でのエラー表示になる場合があります。

![image.png](https://image.docbase.io/uploads/c5805ae2-ecd6-423c-85fc-051611a5a032.png =WxH)

## 2.3. ジョブフローの表示画面と編集画面の統一化
- ジョブフロー詳細画面やプロセス詳細画面でのジョブフローのソースコードの表示を、ジョブフローの編集画面と統一します。
    - ジョブフローを表示する画面では編集画面と同じエディタを読み込み専用モードで利用することで、コードのハイライト（色付け）などスタイルを統一します。ただし、背景色については表示時と編集時で区別できるように異なる配色にしています。

- 保存したジョブフローの詳細画面の例
![image.png](https://image.docbase.io/uploads/52907f54-54ad-45dd-9a6b-6950d406d405.png =WxH)

## 2.4. ジョブフロー補完機能の追加
- ジョブフローのソースコード編集時に、**「Ctrl + スペース」（Mac では 「Alt + スペース」）** を押下することで、ジョブフローのオブジェクト名やフィールド名などを補完入力できるようなります。（同操作による補完機能は以前からありましたが、補完できる情報が大幅に改善しています。）

![image.png](https://image.docbase.io/uploads/9f25a2a5-2d6d-47e7-af74-b09c24cfc1a5.png =WxH)

- この操作を行なうと、その時点のカーソル位置によって補完する情報をエディタが判断します。
- 複数の補完候補がある場合はメニューが表示されます。
    - メニューから上下カーソルキーで選んで（Home/End/PageUp/PageDn キーも使えます）エンターキーで決定します。またはマウスで選択することもできます。
    - メニューが表示されている状態でさらに文字を入力すると、入力した文字に該当する候補に絞り込まれていきます。
    - メニューが表示されている状態で ESC キーを押すと補完機能がキャンセルされます。
- 補完候補が一つであった場合はメニューは表示されずに直接補完されます。また、補完候補が一つもなかった場合は何も起きません。

### 2.4.1. 補完される情報
補完できる情報としては以下のようなものがあります。カーソル位置によっては複数の候補が組み合わせて表示される場合があります。

- **結合子 \<CONNECTOR>**
    - ソースコード上でジョブの直後などで補完すると、結合子が候補となります。
- **変数名 \<VARIABLE>**
    - ソースコード上で変数名と判断している識別子が候補となります。
    - `$STATUS` や `$RESULT` など特殊変数も候補となります。
- **オブジェクトパス \<OBJECT>**
    - `../` のように入力した時点で補完すると、カーソル位置に先行するディレクトリ（ここでは親ディレクトリ）に含まれる子オブジェクトが候補となります。
    - `[../]` のように「実行ジョブ」の中での補完であると判断すると、先行するディレクトリの子孫オブジェクトのうちの、ジョブフローまたはスクリプトジョブに絞り込んで補完します。
    - `<../>` のように「イベントジョブ」の中での補完であると判断すると、先行するディレクトリの子孫オブジェクトのうちの、チャネルオブジェクトまたはメールチャネルオブジェクトに絞り込んで補完します。
- **プロパティ名 \<ATTR>、メソッド名 \<METHOD>**
    - `/root.` のようにオブジェクトに続けてドット `.` を入力した時点で補完すると、カーソル位置に先行するオブジェクト（ここでは /root）のプロパティ名、メソッド名が候補となります。
    - プロパティ名およびメソッド名は、先行するオブジェクトの型に合わせて候補が表示されます。
- **フィールド名 \<FIELD>**
    - `/root[` のようにオブジェクトに続けてブラケット `[` を入力した時点で補完すると、カーソル位置に先行するオブジェクト（ここでは /root）のフィールド名が候補となります。
    - また、`/root.` のようにオブジェクトに続けてドット `.` を入力した時点で補完した場合も、先行するオブジェクトのフィールド名が候補となります。
    - フィールド名は、先行するオブジェクトの型に合わせて候補が表示されます。
- **設定オブジェクトの要素名 \<CONFIG>**
    - `/system/config.data.` のように設定オブジェクトの `data.` に続けて補完すると、当該設定オブジェクトで定義されているデータの要素名が候補となります。
- **ライブラリ関数名 \<FUNCTION>**
    - `../libs/libLogger.` のようにライブラリオブジェクトに続けてドット `.` を入力した時点で補完すると、カーソル位置に先行するライブラリオブジェクトで定義されている関数名が候補となります。
- **組み込み関数 \<FUNCTION>**
    - `=` や `,` の後など式の途中で補完すると、組み込み関数が候補となります。
- **組み込みジョブ \<EXEC-JOB>, \<BLOCK-JOB>, \<LOCAL-JOB>, ...**
    - `->` のような結合子の後などジョブの合間で補完すると、組み込みジョブが候補となります。

## 2.5. オブジェクトリンク押下によるポップアップ表示
- ジョブフローの表示画面または編集画面において、オブジェクトリンクを押下すると対象オブジェクトをポップアップで開きます。
    - Alt キー（Mac では Option キー）を押しながらクリックすると、ポップアップではなく別タブで開きます。

![image.png](https://image.docbase.io/uploads/c218a3c6-adf1-4853-a219-1af02e4ac6df.png =WxH)

## 2.6. テキストエディタのメニューの日本語表示
- ジョブフローエディタなど Kompira 上のテキストエディタのメニューが日本語で表示されるようになりました。

![image.png](https://image.docbase.io/uploads/4c10ac65-9e58-479e-8245-568658c68b08.png =WxH)

※ このスクリーンショットは Windows で取得したもので、Mac ではキーバインドが異なります。

## 2.7. ジョブフローエディタの「開発」メニュー [1.6.12.post1]
- ジョブフローエディタに「開発」メニューが追加されました。
    - 「開発」メニューには「エラーチェックの実行」と「自動エラーチェックの有効化」があります。
    - 「エラーチェックの実行」は自動エラーチェックの状態に関わらず即時にエラーチェックを実行します。
    - 「自動エラーチェックの有効化」はトグルになっていて、有効なときはチェックマークが表示されます。

![image.png](https://image.docbase.io/uploads/12f64431-0a1c-4fec-ad3b-5e64ff5bfe36.png =WxH)

※ ジョブフローのエラーチェックはサーバ側で処理する仕組みになっているため、サーバに追加の負荷をかけることになります。ジョブフローが大きい場合や複数人で編集を行なっている場合、またジョブフローが常時動作しているような場合には、エラーチェック処理の反応が遅くなったり動作中のジョブフローの処理遅延の要因になりえます。「自動エラーチェックの有効化」をオフにしておけば、ジョブフローを編集するたびのエラーチェックは行われないため、サーバの負荷を抑えることができます。その場合でも「エラーチェックの実行」により任意のタイミングでエラーチェックを行なうことができます。

# 3. 関連する変更点
## 3.1. 【重要】ジョブフロー型定義の変更
-  **"errors" フィールドの定義変更（Dictionary 型 ⇒ LargeText 型）**
    -  従来は `{行番号: エラー情報, ...}` というデータ構造でしたが、エラー箇所の位置情報の詳細化のためには適していないため、フィールド型としては LargeText 型に変更して、エラー情報は JSON 化して保存するようにしました。
    -  このフィールドは "invisible" 修飾子が付けられているため、編集画面や詳細画面では見えませんし、エクスポートデータなどにも出力されません。ただしデータベース上には記録されており、そのデータ構造の変更になりますので、データベースを直接参照しているような場合には修正が必要になります。

## 3.2. スクリプトオブジェクトの表示画面の統一化
- スクリプトオブジェクトの表示画面もジョブフローと同様に編集画面との統一化を行ないました。

## 3.3. フィールド修飾子のポップアップエディタ強化
- 型オブジェクトなどの編集画面において、フィールド修飾子をポップアップエディタで編集できるようになっていますが、このエディタにおいて編集時に JSON 形式のエラー位置を表示できるようになりました。