Fletでマルチプラットフォームアプリを構築:FlutterのUIをPythonの世界へ

Python tutorial - IT technology blog
Python tutorial - IT technology blog

なぜFletはPython開発者の「救世主」なのか?

Pythonスクリプトのインターフェースを作るためだけに、HTMLやCSSと格闘することに嫌気がさしているなら、Fletこそがあなたのためのツールです。以前は、Tkinterの古臭いUIや、PyQtの複雑さに甘んじるしかありませんでした。Fletは、FlutterのUIライブラリ全体をPythonに持ち込むことで、その状況を一変させます。DartやJavaScriptのコードを一行も書くことなく、洗練されたアプリをすぐに手に入れることができます。

実際、Fletはデータダッシュボードや社内アプリの開発に非常に効果的です。Web UIのコーディングに3日費やす代わりに、わずか2時間ほどでリアルタイム対話型のアプリを完成させることができました。最大の強みは集中管理された状態(ステート)管理メカズムであり、PythonコードでUIを極めてスムーズに制御できます。

30秒で環境構築

始めるには、Python 3.8以上が必要です。ターミナルで以下のコマンドを入力して、最新バージョンをインストールしましょう:

pip install flet

最新のコンポーネントを使用するためにアップデートしたい場合は、upgradeパラメータを追加してください:

pip install flet --upgrade

注意:仮想環境(venv)の使用をお勧めします。これによりライブラリが分離され、後のデプロイ時のバージョン競合を避けることができます。

最初のアプリを作成する:標準コードサンプル

Fletの構造は非常にシンプルです。すべてはmain関数とPageオブジェクトから始まります。Pageを、コントロール(UI部品)を自由に配置できる白いキャンバスと考えてください。

実践的なコード構造

import flet as ft

def main(page: ft.Page):
    page.title = "ItFromZero Demo"
    page.theme_mode = ft.ThemeMode.LIGHT
    # 画面上のコンポーネントを中央に配置
    page.vertical_alignment = ft.MainAxisAlignment.CENTER

    lbl_hello = ft.Text(value="ItFromZeroへようこそ!", size=25)

    def btn_click(e):
        lbl_hello.value = "Fletは本当に速いですね!"
        # UIを即座に更新
        page.update() 

    page.add(
        lbl_hello,
        ft.ElevatedButton("今すぐクリック", on_click=btn_click)
    )

ft.app(target=main)

CSS不要のレイアウト術

Fletでは、RowColumnがUIを配置するための2つの主要ツールです。複雑なFlexboxを心配する必要はありません。レゴブロックを組み立てるように、それらを入れ子にするだけです。

  • Container: 角丸、背景色、パディングの設定に使用します。divタグのように柔軟ですが、より簡単に設定できます。
  • ResponsiveRow: これは、アプリをiPhoneから4Kディスプレイまで最適に表示させるための鍵となります。画面サイズに応じて、コンポーネントが12カラムのうちいくつ占有するかを指定できます。

TextField経由でユーザー入力を処理し、形式(メール、電話番号)をチェックする必要がある場合は、toolcraft.app正規表現テスターを試してみてください。Pythonコードに組み込む前にパターンを素早くテストでき、デバッグ時間を大幅に短縮できます。

状態管理:黄金律

最もよくあるミスは、page.update()コマンドを忘れることです。Fletはリソース節約のため、画面を自動的に再描画しません。TextやSliderの値を変更するたびに、ユーザーに変更が反映されるようupdateを呼び出してください。

アプリの実用化

Fletは複数の実行モードをサポートしています。デスクトップアプリとしてウィンドウで表示することも、ブラウザで直接実行することも可能です。

Webアプリ化

最後の行の小さなパラメータを変更するだけで、アプリがWebサイトになります:

ft.app(target=main, view=ft.AppView.WEB_BROWSER, port=8550)

localhost:8550を開くと、アプリが動作しているのがわかります。この方法は、ブラウザのモバイルシミュレータでUIをテストするのに非常に便利です。

.exeまたは.appファイルへのパッケージング

製品が完成したら、Pythonをインストールしていない人にも送れるようにパッケージ化できます:

flet pack main.py --icon icon.ico --name "MyApplication"

個人的な経験から言うと、シンプルなexeファイルは通常25〜30MB程度になります。出力ファイルのサイズを最小限に抑えるために、圧縮する前にvenv内の未使用のライブラリを削除しておきましょう。

Fletコードをよりプロフェッショナルにするための3つのアドバイス

  1. コンポーネントの分割: すべてを1つのファイルに書かないでください。管理しやすくするために、UIを個別のクラスに分割しましょう。
  2. Asyncの使用: アプリがAPIを呼び出す場合は、常にasync def mainを使用してください。これにより、サーバーからのデータを待っている間にUIがフリーズするのを防ぐことができます。
  3. アセット(Assets): 画像やフォントはassetsフォルダに配置してください。これにより、パッケージング時にFletが自動的に認識します。

Fletは、PythonによるUI開発의あり方を変えつつあります。多くを学ぶ必要はありません。Pythonのロジックをしっかりと把握していれば、モダンでプロフェッショナルなアプリケーションを作成することができます。

Share: