LightCode による Python と HTML5 連携を用いた軽量 EXE パッケージング

LightCode 概要と特徴

LightCode は WebView2 を基盤とした開発フレームワークであり、HTML5 を利用してユーザーインターフェースを構築し、それを軽量な EXE ファイルとして配布することを可能にします。従来の Python における GUI 開発は、見た目の美しさや開発効率の面で課題がありましたが、LightCode を利用することで Web 技術の柔軟性と Python の機能性を組み合わせることができます。

本ツールの特徴は、HTML5 で描画された画面から Python のロジックを直接呼び出せる点、および逆に Python から HTML5 へメッセージを送信できる双方向通信にあります。最終的には、これらの要素を単一の EXE ファイルにまとめて配布可能です。

環境設定

プロジェクトの根幹となる設定は project.json ファイルで行います。ここでは使用する Python のバージョンや、ダウンロード時に利用するミラーサーバーを指定できます。

{
    "pyVersion": "3.11.8",
    "pythonProxy": "",
    "pipProxy": ""
}
  • pyVersion: 使用する Python のバージョンを指定します。
  • pythonProxy: Python インストーラーのダウンロード元ミラー。空欄の場合は既定の阿里云ミラーが使用されます。
  • pipProxy: パッケージインストール時の pip ミラー。空欄の場合は既定の阿里云 pip ミラーが使用されます。

プロジェクトの初期化

まず、作業ディレクトリを作成し、プロジェクトを初期化します。以下のコマンドでは C:\Dev\LC_Demo をプロジェクトフォルダとして指定しています。

LightCode.exe -d -w C:\Dev\LC_Demo

Python ランタイムのインストール

次に、プロジェクト内に Python 環境をセットアップします。設定ファイルで指定されたバージョンが自動的にダウンロードおよび展開されます。

LightCode.exe -e -w C:\Dev\LC_Demo

実行後、コンソールにはダウンロードおよびインストールの進行状況が表示され、完了すると成功メッセージが出力されます。

インターフェースとロジックの実装

プロジェクトフォルダ内に index.html を作成し、UI と Python 連携のコードを記述します。以下の例では、黒を基調としたコンソール風の画面を用意し、Python の標準出力をキャプチャして Web 画面に表示する仕組みを実装しています。

<html>
<head>
    <style>
        html, body {margin: 0; padding: 0; background-color: #1a1a1a; color: #eee}
        .msg-info {color: #00ff00}
        .msg-error {color: #ff3333}
    </style>
</head>
<body>
    <div id="consoleOutput"></div>
</body>
<script>
    function renderMessage(text, isError) {
        var elem = document.createElement(isError ? "div" : "div");
        elem.className = isError ? "msg-error" : "msg-info";
        elem.innerText = "> " + text;
        document.getElementById("consoleOutput").appendChild(elem);
    }

    Native.captureConsoleOutput(function (output, isStdOut) {
        renderMessage(output, !isStdOut);
    });

    Native.initPython("3.11.8");
    Native.runPythonScript(`
import time
def process_task():
    for i in range(5):
        time.sleep(0.5)
        print(f"Task progress: {i+1}/5")
    raise RuntimeError("Simulated Critical Error")

process_task()
`);
</script>
</html>

このコードでは、JavaScript 側で renderMessage 関数を定義し、Python スクリプトからの出力を受け取って DOM に追加しています。Python 側では簡易なループ処理を行い、完了後に意図的な例外を発生させてエラーハンドリングの挙動を確認します。

アプリケーションの実行

開発中の動作確認は、以下のコマンドで実行できます。

LightCode.exe -d -w C:\Dev\LC_Demo

起動後、Web 画面内に Python の処理ログが順次表示され、最後に発生した例外メッセージも赤色で表示されることを確認できます。

EXE ファイルへのパッケージング

配布用のファイルを生成する際、リソースディレクトリの扱いを設定する必要があります。project.json にて pkgResDir パラメータを調整します。

{
    "pkgResDir": true
}
  • true: リソースファイル(.res ディレクトリ)を EXE 内部に圧縮して格納します。ファイルサイズを小さく抑えたい場合に適しています。
  • false: リソースファイルを EXE と同じ階層に展開します。リソース容量が大きい場合に推奨されます。

設定完了後、以下のコマンドでパッケージングを実行します。

LightCode.exe -p -w C:\Dev\LC_Demo

この手順により、Python 仮想環境を含むすべての依存関係が単一の EXE ファイルに統合されます。本構成の場合、完成したファイルのサイズは約 11MB 程度に収まります。

タグ: lightcode webview2 Python exe-packaging html5-ui

7月8日 18:31 投稿