Python WebAcademy Blog

NiceGUI 4.0がリリース。PythonだけでWeb画面を作れるツールの大掃除版で、エラーにならずに動きが変わる点を初心者向けに解説

|

2026年11月4日、PythonだけでWebの画面を作れるNiceGUIの4.0.0が公開されました。3.x系で非推奨だった機能を取り除く大掃除の版で、Python 3.11以上とFastAPI 0.143.1以上が必要になりました。空にした入力欄の値やHTMLのidの付け方など、エラーを出さずに動きが変わる点を、3.19.0と4.0.0で動かした結果とともに整理します。

2026年11月4日、PythonだけでWebの画面を作れるフレームワークNiceGUIの4.0.0が公開されました。2日前の11月2日に出た3.19.0に続く、メジャーバージョンの更新です。

リリースノートによると、4.0は大掃除の版です。3.x系で非推奨になっていた機能を取り除き、いくつかの既定の設定を正し、同梱しているJavaScriptのライブラリを新しくしています。

多くのアプリは、小さな手直しで動くと説明されています。ただし、エラーを出さずに動きが変わるものもあるので、今回は3.19.0と4.0.0で実際に動かしながら、気をつけたい点を見ていきます。

まずはNiceGUIとはどんなものか

最初に、NiceGUIを知らない方のために、どんなフレームワークなのかを簡単に紹介します。NiceGUIは、ボタンや入力欄、グラフなどの部品を、Pythonのコードだけで並べてWebの画面を作れるフレームワークです。

内部では、Webの土台にFastAPIを、画面の部品にVue.jsとQuasarというJavaScriptのライブラリを使っています。HTMLやJavaScriptを書かずに、管理画面や機械の操作画面などを作れるのが特徴です。

最小のアプリを動かしてみた

まずは、NiceGUIのアプリがどんな見た目のコードなのかを確かめておきましょう。名前を入力してボタンを押すと、あいさつを表示する小さなアプリです。

from nicegui import ui

name_input = ui.input("お名前")


def greet():
    if not name_input.value:
        ui.notify("名前を入力してください")
    else:
        ui.notify(f"こんにちは、{name_input.value}さん")


ui.button("あいさつする", on_click=greet)

ui.run()

4.0.0を入れた仮想環境で動かすと、NiceGUI ready to go on http://localhost:8080のような表示が出て、ブラウザで画面を開けるようになります。手元では、ポートを指定して起動し、ページが返ってくることを確かめました。

部品を作る関数を順に呼ぶだけで、画面に上から並んでいくのがわかりますね。空かどうかの確かめ方にnotを使っているのは、後で紹介する4.0の変更に合わせたものです。

同じ仲間のツールとの比較

PythonだけでWebの画面を作れるツールは、ほかにもあります。代表的なものと比べると、次のような位置づけです。

ツール 特徴
Streamlit 上から順に書いたスクリプトが、そのまま画面になる
Dash 部品を並べ、コールバックで変わった部分だけを更新する
NiceGUI 部品をwith文で入れ子にして並べ、イベントで直接書き換える

Streamlitについては、こちらで紹介しています。【関連記事】PythonのStreamlitとは?

先日の記事では、Dashの4.5も取り上げました。【関連記事】Dash 4.5がリリース

必要なものが新しくなった

続いて、4.0で変わった必要な環境を見ていきましょう。リリースノートには、3.19から4.0への最低限の条件の変化が、表で示されています。

項目 3.19 4.0
Python 3.10 3.11
FastAPI 0.109.1 0.143.1
Pillow(matplotlibの追加機能) 12.3 13.0
Chrome、Edge 111 121
Safari 16.4 17.2

PyPIの記録でも、4.0.0が必要とするPythonは3.11以上になっていました。古いブラウザで画面を見ている利用者がいる場合は、特に注意が必要です。

httpxが入らなくなった

もう1つ大事なのが、HTTPのクライアントhttpxが、自動では入らなくなったことです。リリースノートによると、同じ使い方ができるhttpx2に切り替えるか、自分でhttpxを依存関係に書くよう案内されています。

NiceGUIを入れたついでにhttpxが入っていて、それを使っていた方は、上げたあとにimportのエラーが出るかもしれません。

リリースノートが勧める上げ方

リリースノートには、上げるときの手順もていねいに書かれています。4つの段階を、表にまとめます。

段階 やること
1 まず最新の3.19に上げ、アプリとテストを動かして、非推奨の警告をすべて直す
2 上で紹介した、必要な環境を確かめる
3 mypyやpyrightで型を確かめ、取り除かれた書き方の残りを見つける
4 エラーにならない動きの変更を、一通り確かめる

いきなり4.0に上げるのではなく、まず3.19で警告をなくしておくのがポイントです。非推奨の警告は、4.0で取り除かれる機能を事前に教えてくれていたからです。

型チェックの道具については、こちらで紹介しています。【関連記事】mypy 2.4がリリース

エラーにならずに動きが変わる点

ここからが、一番気をつけたいところです。リリースノートには、13項目もの動きの変更が並んでいます。

初心者にも関係しそうなものを、順番に見ていきましょう。

空にした入力欄はNoneではなく空文字に

まずは、入力欄の変更です。リリースノートによると、ui.inputやui.textareaなどの文字の入力欄を空にしたとき、値はNoneではなく、空の文字列''になりました。

# 空かどうかを確かめるときは、Noneと比べずにnotを使う
if not name_input.value:
    ui.notify("名前を入力してください")

value is Noneで空かどうかを確かめていたコードは、4.0では空のまま先へ進んでしまうおそれがあります。リリースノートでは、上のようにnot valueで確かめるよう案内されています。

なお、数値の入力欄ui.numberや、選択欄ui.selectは、これまでどおりNoneを使うと書かれています。

HTMLのidの付け方が変わった

2つ目は、画面の部品に付くHTMLのidです。リリースノートによると、idがc12のような形から、ng-12のような形に変わりました。

実際に、部品を1つ作って、そのidを2つの版で確かめてみました。

from nicegui import ui

with ui.element() as box:
    ui.input()

print(box.html_id)

手元のPython 3.11で、3.19.0と4.0.0を、それぞれ新しい仮想環境に入れて確かめた結果です。3.19.0にはhtml_idという属性がないので、同じ規則で組み立てたidを表示しています。

NiceGUI 3.19.0
c4

NiceGUI 4.0.0
ng-4

CSSやJavaScript、画面を自動で操作するテストなどで、c4のようなidを直接書いていた場合は、4.0では見つからなくなります。リリースノートでは、element.html_idを使うよう案内されています。

重い処理を別のプロセスで動かす方法が変わった

3つ目は、run.cpu_boundという、重い計算を別のプロセスで動かす仕組みです。リリースノートによると、新しいプロセスの作り方の既定が、spawnという方式になりました。

手元で、プロセスの作り方を表す設定を確かめると、3.19.0ではNone、4.0.0ではspawnになっていました。spawnでは、新しいプロセスがモジュールの変数を引き継がないので、if __name__ == '__main__':の中で定義した関数などは使えなくなります。

複数のワーカーを指定するとエラーに

エラーになる変更の中にも、親切になったものがあります。リリースノートによると、環境変数WEB_CONCURRENCYを2以上にすると、ValueErrorになるようになりました。

ワーカーとは、Webサーバーで、リクエストを並行してさばくためのプロセスのことです。NiceGUIは、複数のワーカーに対応していません。

3.19.0と4.0.0で試してみた

実際に、WEB_CONCURRENCY=2を付けて、小さなアプリを起動してみました。

NiceGUI 3.19.0
You must pass the application as an import string to enable "reload" or "workers".

NiceGUI 4.0.0
ValueError: NiceGUI does not support multiple workers yet. Remove `workers=...` or unset `WEB_CONCURRENCY`.

3.19.0では、土台のuvicornから、何のことかわかりにくい案内が出ただけでした。4.0.0では、NiceGUIは複数のワーカーにまだ対応していないので、設定を外すように、と原因と直し方をはっきり教えてくれます。

ホスティングのサービスによっては、WEB_CONCURRENCYを自動で設定するものもあります。デプロイしたら急に動かなくなった、というときは、まずこの環境変数を確かめてみてください。

新しくなったところ

大掃除だけでなく、嬉しい改善も入っています。リリースノートから、主なものを紹介します。

改善 中身
Python 3.15への対応 3.15で動くように
メモリの使用量 つないでいる利用者1人あたりのメモリをおよそ14%削減
表の部品 ui.tableに、ページ送りの表示を切り替えるpagination_controlsを追加
依存ライブラリ Starlette 1.10、uvicorn 0.54などに更新
画面の部品 Quasarを2.18.5から2.35.2に、AG Gridを34.2.0から36.2.0に更新

土台のStarletteの最近の変更については、こちらで紹介しています。【関連記事】Starlette 1.9と1.10がリリース

取り除かれた機能

リリースノートには、取り除かれた機能の一覧と、代わりに使うものも載っています。たとえば、ui.add_scssとui.add_sassは取り除かれ、ui.add_cssを使うよう案内されています。

ほかにも、ui.tabsの外にui.tabを置くとRuntimeErrorになるなど、間違った使い方が、はっきりエラーになるよう変わりました。

上げる前にやっておきたいこと

最後に、NiceGUIを4.0へ上げる前に確かめておきたいことを整理します。

順番 確認すること
1 3.19に上げて、非推奨の警告をすべて直したか
2 Python 3.11以上、FastAPI 0.143.1以上になっているか
3 入力欄の値を、is Noneで確かめていないか
4 c12のようなidを、CSSやテストに直接書いていないか
5 WEB_CONCURRENCYが設定されていないか

私は10年ほどエンジニアとして開発に関わってきましたが、メジャーバージョンを上げるときに一番怖いのは、エラーが出る変更よりも、静かに動きが変わる変更です。今回のように、リリースノートに動きの変更が一覧でまとめられているのは、本当にありがたいことだと感じます。

まとめ

2026年11月4日、NiceGUI 4.0.0が公開されました。3.x系で非推奨だった機能を取り除く大掃除の版で、Python 3.11以上とFastAPI 0.143.1以上が必要になっています。

空にした入力欄の値が空文字になる、HTMLのidの形が変わるなど、エラーを出さずに動きが変わる点もあります。上げる前に、まず3.19で警告をなくし、リリースノートの移行の手引きを一読しておきましょう。

ここまでお読みいただきありがとうございました。

参考情報

次のアクション

記事で学んだ内容を実際に動かしてみよう

Python WebAcademyでは、ブラウザ上でコードを書きながら基礎から実践まで体系的に学べます。

Python WebAcademyの学習画面

あわせて読む

関連記事

ブログ一覧へ

Python学習ロードマップ

まずはこの3講座から

記事で気になったテーマを、順番に手を動かしながら学べます。

ロードマップを見る