このページでは、フレームワーク側(HaluServer)のディレクトリ構成と、各フォルダに配置するフレームワーク共通のファイルの役割、Webサーバー(halu.py)と設定ファイル(haluconf.py)、画面・バッチ・帳票のリクエスト処理の内部構造を説明します。
アプリケーション側のファイルの配置と規約は「HaluProject詳細」、データの経路は「データ移送の仕組み」を参照してください。
アプリケーションの開発では、DB接続先などの設定ファイル(haluconf.py)を除き、フレームワーク側のファイルは変更しません。
ディレクトリ構成
フレームワーク側(HaluServer)のフォルダ構成は次のとおりです。

Html
Htmlフォルダには、クライアントサイドの共通部品を配置します。
フォルダの構成は次のとおりです。
・js/:フレームワーク共通のJavaScript(Haluの基本クラス・Mixin、外部ライブラリ)
・SvelteComponent/:フレームワーク共通のSvelteコンポーネント(ダイアログなど)
・images/:フレームワーク共通の画像
各画面は、これらの部品を読み込んで利用します。
js
Html/js/には、すべての画面で共通して使用するJavaScriptを配置します。
・Halu独自のライブラリ:基本クラス(halumvc.js)と、基本クラスに組み込むフレームワーク共通のMixin(Controller・Model・View・入力チェックなどの共通処理)
・外部ライブラリ:jQuery、Bootstrapなど
画面タイプのMixinは、アプリケーション側(HaluProject)のHtml/js/に配置されています。内容は「HaluProject詳細>Html>js」を参照してください。
◇名前空間と基本クラス
Haluのクラスや共通の処理は、すべて$Hの名前空間に属します。
| 名前空間 | 内容 |
|---|---|
$H | Halu全体の名前空間(Haluの別名) |
$H.Application | 画面ごとの名前空間を配置する場所。 各画面のappspec.jsで $H.Application.{画面名}を作成する |
$H.Library | Mixinを配置する場所。 フレームワーク共通のMixinと、画面タイプのMixinが登録される |
$H.AppSpec・$H.Model・$H.View・$H.Controller | 各画面のAppspec・Model・View・Controllerの元になる基本クラス |
各画面のAppspec・Model・View・Controllerは、基本クラスを継承し、$H.LibraryのMixinを組み込んで構成します。
画面側での使い方は「HaluProject詳細>Html>Apps>名前空間」を参照してください。
◇リクエスト処理のクライアントサイド内部
ボタンやファンクションキーが操作されてトランザクションを実行するとき、画面では次の順に処理が進みます。
- Appspecの定義(
navButtonEvent/enterTabPFKey)に従って、操作されたボタンやキーに対応するControllerのメソッドが呼び出される - Controllerが
ajaxExecuteを呼び出し、Datasetの内容をtran.jsonのrequestにコピーする(空行は除く) requestInfoに登録したチェック処理を呼び出す。結果が成功でない場合は、送信せずに処理を終了する- 画面をロックして、
requestをサーバーに送信する - サーバーから返った
message.statusが"OK"の場合は、その値をtran.jsonのresponseに設定し、requestInfoに登録したレスポンス編集処理で画面に反映する。"OK"以外の場合は、エラー処理を呼び出す
※requestInfoは、トランザクションごとに、チェック処理・レスポンス編集処理・エラー処理の3つの処理名を定義する設定です。
◇関連ドキュメント
基本クラス($H.Modelなど)と、フレームワーク共通のMixin(ControllerMixinなど)のメソッドの詳細は、「ドキュメント>JSDoc(HaluServer)」を参照してください。
SvelteComponent
Html/SvelteComponent/には、すべてのアプリケーションが共通して使用する部品(Svelteコンポーネント)を配置します。
次のダイアログのコンポーネントが、1つのファイル(build/HaluComponents.js)にまとめられています。
| コンポーネント | 内容 |
|---|---|
AlertDialog | 通知を表示する |
ConfirmDialog | 一般的な確認を行う |
ExecuteDialog | 処理の実行前に、実行の確認を行う |
ServerDialog | サーバー処理の結果を表示する |
SelectDialog | ダイアログ用の画面をポップアップで表示する |
各画面のindex.htmlでこのファイルを読み込み、フレームワークの処理(Mixin)からダイアログを呼び出して使用します。
アプリケーション固有のコンポーネントは、「HaluProject詳細>Html>SvelteComponent」を参照してください。
Server
Serverフォルダには、サーバーサイドの共通処理(Libraries/)と、各サーバーのログ(Logs/)が配置されています。
あわせて、Webサーバーの起動ファイル(halu.py)と、動作環境の設定ファイル(haluconf.py)を説明します。
halu.py
halu.pyは、Webサーバー(uvicorn+Starlette)の起点となるファイルで、HaluServer/Halu/の直下に配置されています。リクエストのURLに応じて、画面のファイルの配信、アプリケーションサーバーへのリクエストの中継、ファイルのアップロードとダウンロードを行います。
主なURLは次のとおりです。
| URL | メソッド | 内容 |
|---|---|---|
/HaluASGI/Halumain | POST | 画面のリクエストをアプリケーションサーバーに渡し、レスポンスを返す |
/HaluASGI/Haluhtml | POST | 画面(index.html)を返す |
/HaluASGI/HaluUpload | POST | 画面からアップロードされたファイルを、UpLoadを含むパスに保存する |
/HaluASGI/HaluDownload | POST | DownLoadを含むパスのファイルを返す |
/Application/{パス} | GET | アプリケーション側(HaluProject)のHtml・Jsonフォルダのファイルを返す |
/System/{パス} | GET | フレームワーク側(HaluServer)のHtmlフォルダのファイルを返す |
ファイルの配信と保存は、対応するフォルダの配下に限られます。範囲外のパスは、エラーになります。
サーバー側のAPIには、認証・認可の検証がありません。
ログイン状態は画面のsessionStorageに保持され、サーバーは検証しません。
信頼できるネットワーク内での利用、またはリバースプロキシ側で認証をかける構成を前提としてください。
haluconf.py
haluconf.pyは、フレームワークの動作環境を設定するファイルです。Server/Libraries/halumain/にあり、フレームワーク側のファイルのうち、アプリケーションの開発者が編集する唯一のファイルです。
設定項目は次のとおりです。
| 設定項目 | 内容 |
|---|---|
serverpath・syspath・apppath | HaluServer、フレームワーク共通部品(HaluServer/Halu/System)、アプリケーション(HaluProject/Halu/Application)のパス。Windows用とLinux用があり、OSに応じて切り替えられる |
soffice | LibreOfficeの実行ファイルのパス。帳票のPDF変換に使用する。 Windows用とLinux用がある |
loglebel | ログの出力レベル。DEBUG・INFO・WARNING・ERROR・CRITICALのいずれか(初期値はDEBUG) |
appserver_address・appserver_port | アプリケーションサーバーのアドレスとポート番号(初期値はlocalhost・18800) |
printserver_address・printserver_port | プリントサーバーのアドレスとポート番号(初期値はlocalhost・18810) |
batchserver_address・batchserver_port | バッチサーバーのアドレスとポート番号(初期値はlocalhost・18820) |
def_database | DBの接続定義。DB名(辞書のキー)ごとに、dbdriver・hostname・portno・database・username・passwordを指定する |
def_databaseのキー(DB名)は、sql.jsonのdbnameに指定する名前と一致させます。dbdriverに指定できるのは'postgresql'です。
DBの接続定義の追加は、「開発手順>2. 開発の流れ>2-2. 設定ファイルを編集する」を参照してください。
Libraries
Server/Libraries/には、すべてのアプリケーションが共通して使用するPythonの処理を配置します。主な処理は次のとおりです。
・画面の処理:リクエストを受け取り、JSONの定義に従ってSQLを実行し、結果を返します。
・バッチ処理:バッチ起動画面から指示されたバッチを実行します。
・帳票出力:テンプレートのExcelにデータを書き込み、PDFに変換します。
・サーバーの設定と連携:DB接続先などの設定ファイル(haluconf.py)と、サーバー間の通信を担います。
・共通の処理:DB接続、ログ出力など、共通の処理を担います。
◇リクエスト処理のサーバーサイド内部
サーバーは、Webサーバー(halu.py)、アプリケーションサーバー、プリントサーバー、バッチサーバーの4つです。画面のリクエストは、次の順に処理されます。
- Webサーバーが、
/HaluASGI/Halumainでリクエストを受け取り、アプリケーションサーバーに渡す - Controllerが、validation.jsonの定義でリクエストの入力チェックを行う
- 入力チェックが正常で、tran.jsonの
request.modelが"yes"の場合は、Modelが、sql.jsonの定義でSQLを実行する。すべてのSQLが正常ならコミットし、エラーがあればロールバックする - すべてのSQLが正常で、
idがprintParamのSQLの定義がある場合は、プリントサーバーで帳票を出力し、その結果をレスポンスとする。idがbatchStartupのSQLの定義がある場合は、バッチを起動し、その結果をレスポンスとする - 4以外の場合は、Viewが、tran.jsonの
responseの定義でレスポンスを作成する。入力チェックまたはSQLでエラーになった場合は、そのエラーの情報(message)をレスポンスにする - レスポンスは、アプリケーションサーバーとWebサーバーを通して、画面に返される
各手順の前後に呼び出すフックは、「HaluProject詳細>Server>Apps>フックの呼び出しタイミング」を参照してください。
◇関連ドキュメント
フレームワーク共通のPythonの処理(Controller・Model・Viewなど)の詳細は、「ドキュメント>Docstring」を参照してください。
ログ
Server/Logs/には、各サーバーのログが出力されます。ログファイルは、サーバーやクラスごとに分かれています。
| ログ | 出力先 |
|---|---|
| 画面の処理(Webサーバー、アプリケーションサーバー) | Server/Logs/の直下 |
| バッチ処理 | Server/Logs/batch/ |
| 帳票出力 | Server/Logs/print/ |
ログファイルは、日付が変わると新しいファイルに切り替えられ、古いファイルは3世代まで保持されます。
ログの出力レベルは、haluconf.pyのloglebelで変更できます。
