🐍

pythonでアプリ開発できるフレームワーク: Fletを使ってみた

2023/02/23に公開

「アプリ開発してみたいんだけど、アプリ向けの言語の経験ないんだよなぁ。キャッチアップ大変そうだなぁ……」と思ったことはないですか? 私はあります。慣れた言語でアプリ開発できたらなといつも思っています。

この記事は、「pythonでFlutterアプリが作れる」という一文に魅力を感じる人向けに、そんな夢みたいなフレームワークFletについてざっくりお伝えする記事です。

TL;DR

  • Fletはpythonで書いたコードをFlutterアプリとしてビルドしてくれるフレームワーク
    • 今はpythonのみ対応、これから色々な言語に対応していく予定らしい
  • ドキュメントが充実している
  • pythonを触ったことがあれば使いやすい
  • 細かいデザインの制御には(多分)向いてない
  • Flutterの構造に慣れる為に触ったり、シンプルなアプリを開発したりするのには良さそう

こうして記事を書いてはいますが、正直習うより慣れろでIntroductionやってみる方が良いと思います。

Fletとは

https://flet.dev/

Flet is a framework that enables you to easily build realtime web, mobile and desktop apps in your favorite language and securely share them with your team. No frontend experience required.
(翻訳)Flet は、お気に入りの言語でリアルタイムの Web、モバイル、およびデスクトップ アプリを簡単に構築し、それらをチームと安全に共有できるようにするフレームワークです。フロントエンドの経験は必要ありません。

フロントエンドの経験は必要ないとはっきり書かれている通り、基本的にpythonの構文に慣れている状態でのドキュメントを読めば大体の構築はできるようになっています。

現在使える言語はpythonだけですが、Go, C#やその他の言語も今後使えるように拡張していく予定と書かれています。

ただ、後でも触れますが、Flutterラッパーとも言えるフレームワークなので、Flutterの機能全てをフルに使って実装したい場合には結局Flutter(Dart言語)を使う必要がありそうです。

Fletの始め方

まずはインストール:

pip install flet

基本的な書き方は下記です:

import flet as ft

def main(page: ft.Page):
    # ここに描画
    pass

ft.app(target=main)

これで、python ファイル名.py すればウィンドウが立ち上がります。
ちなみに、最後の行をft.app(target=main, view=ft.WEB_BROWSER)に書き換えるとwebブラウザで開くこともできます。

基本的にここからは、main関数の引数として指定したpageに設定値や要素を追加していく形になります。
例えば:

def main(page: ft.Page):
    # 設定値: theme_modeを更新
    page.theme_mode = "LIGHT"
    # テキストを作成
    t = ft.Text(value="Hello, world!", color="green")
    # pageのcontrolsにテキストを追加
    page.controls.append(t)
    # pageの描画を更新
    page.update()
    # append(), update()のワンライナー: page.add()もある

hello world


公式のtutorialsに具体的なアプリの例があるので(todoアプリからソリティアまで)、「こういうことができるんだな〜」と軽く眺めた後にControlsのドキュメントを見ながら何か作ってみると良さそうです。

https://flet.dev/docs/tutorials

https://flet.dev/docs/controls

作ってみたもの

テキストクリックで進む+選択肢分岐、単一のセーブ&ロードができるアプリのデモを作ってみました。
(画面サイズとかは全然考慮できてないです)

test_momotaro

実際のコード:

https://github.com/SawaTszm/playground/blob/main/tutorial-flet/src/novel.py

使ってみた感想

アプリ開発のスタートとして触れて良かった

アプリ内でやりたいことを考えるベースとして、慣れ親しんだ言語(python)で組み立てられるのはストレスや手が止まるところが少なく済んで良かったです。

最終的な結論として今後はFlutterをちゃんと触ろう……と思って少しずつ勉強&実装していますが、「Fletで触ったアレだ!」となる部分も多々あり、Flutterの構造に慣れる足がかりとしてとても良い経験になったと思います。

細かい設定が反映できない場合がある

基本的な構造は既に実装されてますが、細かいデザインに必要なプロパティが設定できない部分がありました。
例えばContainer.decorationプロパティ。FlutterではBoxDecoration classを使って背景のイメージ画像やborderなどの要素を指定できますが、Fletではまだ用意されていません。

また、「これどうやるんだろう」と思って調べる時、公式ドキュメント以外の情報があまりない(ほとんどFlutterの記事が引っかかる)のも、本格的に触る時には少し大変になるかなと思いました。

まとめ

Fletは、pythonで書いたコードをFlutterアプリとしてビルドできるフレームワークです。

pythonで複雑すぎないアプリを作りたい人や、Flutterアプリ開発のなんとなくの構造を実際に動かしながら掴みたい人にはおすすめです。

Discussion