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で警告をなくし、リリースノートの移行の手引きを一読しておきましょう。
ここまでお読みいただきありがとうございました。