Pythonのコードをローカル環境に構築することなく、ブラウザ上ですぐに実行したいと考えている方は少なくありません。環境構築は初学者にとって大きなハードルとなることが多く、インストール作業でつまずいて学習が止まってしまうケースもあります。
オンライン実行環境を活用すれば、パソコンへのインストールは一切不要で、ブラウザを開くだけでPythonのコードをすぐに動かせます。AI・データ分析の学習やコードの簡単な動作確認にも非常に便利です。
この記事では、Pythonをブラウザ上で実行できるサイトの使い方から、Webアプリとして公開する方法まで、目的別に具体的な手順を解説します。
目次
- PythonのコードをWeb上で実行できるサイト(実行環境)
- Google ColaboratoryでPythonを実行する
- PaizaCloudでPythonを実行する
- ReplitでPythonを実行する
- PyScriptを使ってPythonをWebブラウザで動かす方法
- script type="py"でHTMLにPythonを埋め込む
- NumPyなどの外部ライブラリを読み込む
- ブラウザ実行で発生する制約を把握する
- PythonでWebアプリを実行する際のツールの選び方
- Flaskで簡易なWebアプリを実行する
- FastAPIで非同期APIを実行する
- StreamlitでデータアプリをWeb上で実行する
- PythonのWebアプリをクラウドで実行して公開する方法
- Streamlit Community Cloudにデプロイする
- AWS Lambdaでサーバーレス実行する
- PythonのWeb実行に関するよくある質問
- ブラウザで実行するPythonはなぜ遅いですか?
- スマホのブラウザからでもPythonを実行できますか?
- WebアプリにSQLやHTMLの知識は必要ですか?
PythonのコードをWeb上で実行できるサイト(実行環境)
Pythonのコードをオンラインで実行できる環境として、代表的なサービスを3つ紹介します。いずれもブラウザから利用でき、学習・短いコードの実行向けに最適です。
- Google Colaboratory
- PaizaCloud
- Replit
なお、無料枠には実行時間・保存・公開範囲の制限があるため、利用前に公式サイトで最新情報を確認してください。ローカルへのインストールは不要ですが、ファイル連携や本格開発では制限がある場合があります。
それぞれ特徴が異なり、AI・データ分析に特化したものやファイル管理や複数言語対応に優れたものなど用途によって使い分けられます。各サービスの仕様・料金・制限は変更される可能性があるため、利用前に公式サイトで最新情報を確認してください。
それでは各サービスの使い方について、実行できるサンプルコードを交えながら解説していきます。
Google ColaboratoryでPythonを実行する
Google Colaboratory(以下、Google Colab)は、Googleが提供するクラウドベースのJupyterノートブック環境です。Jupyterノートブックとは、コードと説明文を「セル」という単位で組み合わせて記述・実行できる形式のことで、Google Colabはこれをブラウザ上で動かせるようにしたサービスです。
GoogleアカウントさえあればNumPyやpandasなどのデータ分析ライブラリが最初から導入された環境を無料で利用できます。ただし、無料版にはセッション継続時間の上限やアイドル時の接続切断などの制限があるため、長時間の処理には注意が必要です。
GPUも無料枠で利用できますが、利用状況や時間帯によって制限・停止されることがあり、常に利用できる保証はありません。
Google Colabでは、以下のようにセルにコードを入力して実行します。
# 基本的なPythonコードの実行例
print("Hello, Google Colab!")
# リストの作成と操作
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(f"フルーツ: {fruit}")
# NumPyを使った計算
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(f"平均値: {arr.mean()}")
上記のコードをセルに貼り付けて、セル左端の実行ボタン(▶)をクリックするか、Shift + Enterキーを押すことで実行できます。実行結果はセルの直下に表示されます。
| 特徴 | 内容 |
|---|---|
| 料金 | 無料(有料プランあり・無料版は利用制限あり) |
| 実行形式 | ノートブック(セル単位) |
| 主な用途 | AI・データ分析・機械学習 |
| ライブラリ | NumPy・pandas等が事前導入済み(定期的に更新されます) |
Google Colabはデータ分析やAIの学習を始める方にとって最適な選択肢のひとつです。Googleドライブと連携してノートブックを保存・共有できるため、チームでの作業にも向いています。
PaizaCloudでPythonを実行する
PaizaCloudは、ブラウザ上で動作するクラウドIDEです。IDEとはIntegrated Development Environment(統合開発環境)の略で、コードの編集・実行・ファイル管理などをひとつの画面でまとめて行える開発ツールのことです。
PaizaCloudはPythonだけではなく、PHP、Node.js、Rubyなど複数の言語に対応しており、ファイルシステムも利用できるため、複数のファイルを組み合わせたプログラムも実行できます。なお、無料プランはサーバー1台・作成から24時間経過するとデータが完全に消去されるなどの制限があるため、長時間の作業や保存しておきたいコードがある場合は有料プランの検討を推奨します。
以下は、PaizaCloudでPythonファイルを作成して実行できるサンプルコードです。
# main.py として保存して実行
def greet(name):
return f"こんにちは、{name}さん!"
def calculate_area(width, height):
return width * height
# 関数の実行
print(greet("Python"))
area = calculate_area(10, 5)
print(f"面積: {area} 平方メートル")
PaizaCloudでは、エディタエリアにコードを入力したあと、ターミナルでpython main.pyと入力することでプログラムを実行できます。ターミナルとは、コマンドを文字で入力してコンピュータに指示を与えるインターフェースのことです。
- 複数ファイルを扱ったプログラムの実行
- ターミナル操作の練習
- Webサーバーを立ち上げた動作確認
PaizaCloudは、ローカルに近い開発体験をブラウザ上で再現できる点が強みです。実務に近い環境でPythonを学びたい方やファイル操作を含む処理を試したい方に向いています。
ReplitでPythonを実行する
Replitは、ブラウザ上で動作するオンラインIDEのひとつです。プロジェクト単位でコードを管理でき、他のユーザーとリアルタイムで共同編集する機能も備えています。
共有設定によっては、URLを共有するだけで誰でも同じコードをブラウザ上で実行・確認できるため、コードレビューや学習仲間との共有に適しています。AIによるコード補完機能も内蔵されていますが、利用プランによっては制限がある場合があります。
以下は、ReplitでPythonを実行できるサンプルコードです。
# Replitで実行できる基本的なPythonプログラム
def fizzbuzz(n):
result = []
for i in range(1, n + 1):
if i % 15 == 0:
result.append("FizzBuzz")
elif i % 3 == 0:
result.append("Fizz")
elif i % 5 == 0:
result.append("Buzz")
else:
result.append(str(i))
return result
# 1から20までFizzBuzzを実行
output = fizzbuzz(20)
for item in output:
print(item)
Replitでは、コードを入力した後に画面上部の「Run」ボタンをクリックするだけでプログラムを実行できます。実行結果は右側のコンソールエリアに表示されます。
| サービス | 特徴 | 向いている用途 |
|---|---|---|
| Google Colab | GPU利用可(無料枠は制限あり)・ライブラリ豊富 | AI・データ分析 |
| PaizaCloud | ターミナル操作・複数ファイル(無料版は24時間でデータ消去) | 実務に近い開発体験 |
| Replit | 共同編集・AI補完(プランにより制限あり) | チーム学習・コード共有 |
Replitは、コードを他者と共有しながら学習したい方や共同でプログラムを作成したい場面に特に向いています。無料プランでも基本的な実行・共有機能を利用できるため、まずは気軽に試してみるとよいでしょう。
PyScriptを使ってPythonをWebブラウザで動かす方法
PyScriptは、HTMLファイルにPythonコードを直接記述し、CDN(コンテンツ配信ネットワーク)経由でブラウザ上でPythonを実行できるフレームワークです。CDN版はオフライン環境では動作しませんが、必要ファイルをローカルに同梱すればオフライン構成も可能です。
以下の3つの操作を順に解説します。
- script type="py"でHTMLにPythonを埋め込む
- NumPyなどの外部ライブラリを読み込む
- ブラウザ実行で発生する制約を把握する
それぞれの手順を理解することによって、ローカル環境を構築せずにブラウザ上でPythonを動かす仕組みを実践的に習得できます。
それでは各項目について、詳しく解説していきます。
script type="py"でHTMLにPythonを埋め込む
現行のPyScript(2023.09.1以降)では、<script type="py">形式が公式推奨の記法です。以前の<py-script>カスタム要素はPyScript公式ドキュメントに基づき後方互換として残っていますが、旧記法であるため新規に書く際は<script type="py">を使用してください。
PyScriptを使うには、まずHTMLの<head>タグ内にPyScriptの読み込みタグを追加します。インストール作業は不要です。
以下は、PyScriptを使った最小構成のHTMLサンプルです。バージョン番号はPyScript公式リリースページで最新の安定版を確認して置き換えてください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PyScript サンプル</title>
<!-- LATEST パスは2023.11.1以降廃止。バージョンは公式リリースページで最新版を確認して置き換えること -->
<link rel="stylesheet" href="https://pyscript.net/releases/2025.11.1/core.css">
<script type="module" src="https://pyscript.net/releases/2025.11.1/core.js"></script>
</head>
<body>
<h1>ブラウザで実行するPython</h1>
<!-- 現行推奨の記法: <script type="py"> -->
<script type="py">
print("Hello, PyScript!")
result = 2 ** 10
print(f"2の10乗は {result} です")
</script>
<!-- print()の出力を表示するには <py-terminal> 要素を配置する -->
<py-terminal></py-terminal>
</body>
</html>
このHTMLファイルをブラウザで開くと、PyScriptがページ読み込み時にPythonコードを実行します。print()の出力は、<py-terminal>要素が存在する場合はそちらに表示され、ない場合はブラウザの開発者コンソールに出力されます。
ページ上に出力を表示したい場合は、上記のように<py-terminal>要素を配置してください。
PyScriptの内部では、WebAssembly(WASM)とPyodideが動作しています。WebAssemblyとは、ブラウザ上でバイナリ形式のコードを高速に実行するための技術仕様です。
PyScriptはPythonインタープリターをWebAssemblyにコンパイルした仕組みを採用しており、Pyodide(CPythonをWebAssemblyに移植したもの)のほかにMicroPython系の実装も扱えます。
NumPyなどの外部ライブラリを読み込む
PyScriptでは、<script type="py">タグのconfig属性を使って外部ライブラリを読み込めます。利用できるのはPyodideが事前にビルドしているパッケージに限られており、任意のPyPIパッケージが使えるわけではありません。
C拡張に依存するパッケージはビルド済みホイールがなければ動作しないため、事前にPyodide対応パッケージ一覧で確認してください。以下は、NumPyを使った数値計算のサンプルです。
なお、インラインJSONによるconfig指定はクォーテーションのネストで構文エラーを起こしやすいため、実際のプロジェクトでは外部ファイル(pyscript.toml や pyscript.json)を指定する方法が公式推奨です。NumPyはPyodide(Pyodide実行エンジン)を使う必要があるため、MicroPython環境では動作しない点に注意してください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PyScript NumPy サンプル</title>
<!-- LATEST パスは2023.11.1以降廃止。バージョンは公式リリースページで最新版を確認して置き換えること -->
<link rel="stylesheet" href="https://pyscript.net/releases/2025.11.1/core.css">
<script type="module" src="https://pyscript.net/releases/2025.11.1/core.js"></script>
</head>
<body>
<!-- config属性でパッケージを指定する(初心者向け簡易版。本格利用は外部設定ファイル推奨)-->
<script type="py" config='{"packages":["numpy"]}'>
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(f"配列: {arr}")
print(f"合計: {np.sum(arr)}")
print(f"平均: {np.mean(arr)}")
print(f"標準偏差: {np.std(arr):.4f}")
</script>
<py-terminal></py-terminal>
</body>
</html>
上記のコードでは、<script type="py">タグのconfig属性にJSON形式でパッケージ名を指定しています。NumPy以外にも、Pyodideが対応しているパッケージ(PandasやSciPyなど)を同様に列挙できます。
なお、Matplotlibはパッケージ名を指定して読み込めますが、ブラウザ環境での描画には追加設定が必要な場合があります。1つのHTMLページに複数のconfig設定を置くことはできないため、読み込みたいパッケージはまとめてひとつのconfig属性に記述してください。
ページ初回読み込み時にライブラリのダウンロードが発生するため、NumPyやPandasを指定した場合は数秒から十数秒の待機時間が生じます。ブラウザのキャッシュが有効な場合は2回目以降の待機時間が短縮される場合がありますが、ブラウザのキャッシュ制御の仕組み(Service Worker)の設定や通信環境によって変わります。
ブラウザ実行で発生する制約を把握する
PyScriptはブラウザのサンドボックス環境(外部リソースへのアクセスを制限した安全な実行領域)内で動作するため、通常のCPython環境と同じ前提では使えない機能があります。実装前にこれらの制約を理解しておくことで、開発上の手戻りを防げます。
主な制約は以下の通りです。
| 制約の種類 | 具体的な内容 |
|---|---|
| time.sleep非推奨 | ブラウザのメインスレッドをブロックするためUIが固まる。非同期処理(asyncio.sleep)への切り替えを推奨 |
| ソケット通信不可 | TCPやUDPの外部通信はブラウザのセキュリティモデルにより行えない。Fetch APIやWebSocketを代わりに使う |
| ローカルファイルアクセス制限 | Pyodideには仮想ファイルシステムがあるが、ローカルのファイルシステムへのアクセスはブラウザのセキュリティ制約を受ける |
| マルチスレッド制限 |
threadingモジュールの動作が制限される。PyScript Workerを使う回避策がありますが、追加の実装コストが発生します |
| 呼び出しスタック上限 | WebAssemblyのスタックサイズ制限により、再帰の深さが通常のCPythonより小さい値(目安として数百〜数千程度)で上限に達する場合がある |
これらの制約は、PyScriptが依存するWebAssemblyおよびブラウザのセキュリティモデルに起因するものです。HTTPを通じたデータ取得はFetch API経由で対応でき、UIの非同期更新にはJavaScriptとの連携機能を活用することで多くのユースケースをカバーできます。
ブラウザ上でPythonを実行する手段として、PyScriptは手軽さと拡張性のバランスが取れていますが、サーバーとのリアルタイム通信やファイル処理が主な用途の場合は、後述するFlaskやFastAPIなどのサーバーサイドフレームワークが適しています。
PythonでWebアプリを実行する際のツールの選び方
PythonでWebアプリやAPIをサーバー上で動かすには、フレームワーク・ツールの選択が開発効率と性能を大きく左右します。フレームワークとは、Webアプリ開発に必要な機能をあらかじめまとめたライブラリ群のことです。
代表的なものとして、以下の3つがあります。なお、StreamlitはWebフレームワークではなくデータアプリ構築ツールですが、Pythonで手軽にWebアプリを実行できる手段として本記事で紹介します。
- Flask
- FastAPI
- Streamlit
FlaskとFastAPIはHTTPリクエストを受け取って処理を行うサーバーサイドフレームワークで、Streamlitはデータ可視化アプリに特化した独自の実行モデルを持つツールです。用途が異なるため、下表を参考に目的に合わせて選択してください。
| フレームワーク/ツール | 向いている用途 | 難易度 |
|---|---|---|
| Flask | 入門・小規模Webアプリ・社内ツール | 低 |
| FastAPI | API開発・ML/AIモデル公開・非同期処理 | 中 |
| Streamlit | データ可視化・AIデモ(Webフレームワークではなくデータアプリツール) | 低 |
それでは各フレームワーク・ツールについて、詳しく解説していきます。
Flaskで簡易なWebアプリを実行する
Flaskは、シンプルで学習コストが低いPythonの軽量Webフレームワークです。WSGI(Web Server Gateway Interface)という仕組みを採用しており、ブロッキング型(同期処理)で動作します。
WSGIとは、PythonアプリケーションとWebサーバーをつなぐ標準インターフェース規格のことです。
同期処理の性質上、構造がシンプルで理解しやすいため、Webアプリ開発の入門や小規模なサービスの構築に適しています。GunicornやuWSGIなどの本番用WSGIサーバーと組み合わせることによって、本番環境での運用も可能です。
以下のコードは、Flaskをインストールして「Hello, World!」を返すWebアプリを起動するサンプルです。
# まずターミナルでインストール
# pip install flask
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "<h1>Hello, World!</h1>"
@app.route("/hello/<name>")
def hello(name):
return f"<p>こんにちは、{name}さん!</p>"
if __name__ == "__main__":
# 開発・検証専用。本番環境でのdebug=Trueの扱いは直後の解説を参照
app.run(debug=True)
上記のコードをapp.pyとして保存し、python app.pyを実行すると、ローカルの5000番ポートでサーバーが起動します。ブラウザからhttp://127.0.0.1:5000にアクセスすると「Hello, World!」が表示され、http://127.0.0.1:5000/hello/太郎にアクセスすると「こんにちは、太郎さん!」と返します。
注意: debug=Trueは開発・検証時のみ使用してください。本番環境でdebugモードを有効にすると、デバッガーが外部に公開され、ブラウザから任意のPythonコードを実行されるセキュリティリスクがあります。
本番環境への公開時は必ずdebug=Falseにするか、Gunicornなどの本番用WSGIサーバーを使用してください。
Do not use the development server when deploying to production. It is intended for use only during local development. It is not designed to be particularly secure, stable, or efficient.
出典:Flask公式ドキュメント - Deploying to Production
FastAPIで非同期APIを実行する
FastAPIは、ASGI(Asynchronous Server Gateway Interface)という規格を採用したWebフレームワークです。ASGIはWSGIとは異なり、非同期処理(async/await)やWebSocketなども扱えるインターフェースで、複数のリクエストを効率よく並行処理できます。
AI・機械学習モデルをAPIとして公開する用途で広く採用されており、型ヒントを活用したバリデーション機能も備えています。
FastAPIは型ヒント(Pythonの変数・引数に型情報を付与する記法)を活用しており、リクエストパラメータのバリデーション(検証)や、Swagger UIによるAPIドキュメントの自動生成機能を標準で備えています。実行にはASGIサーバーであるUvicornが必要です。
以下のコードは、FastAPIとUvicornをインストールしてAPIを起動するサンプルです。
# まずターミナルでインストール
# pip install fastapi uvicorn
from fastapi import FastAPI
from typing import Optional # Python 3.9以前との互換性を考慮した記法。Python 3.10以降はstr | Noneも使用可
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello, World!"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
# 起動コマンド: uvicorn main:app --reload
# ブラウザで http://127.0.0.1:8000 にアクセス
# APIドキュメントは http://127.0.0.1:8000/docs で確認可能
上記のコードをmain.pyとして保存し、ターミナルでuvicorn main:app --reloadを実行すると、8000番ポートでAPIサーバーが起動します。http://127.0.0.1:8000/docsにアクセスすると、Swagger UIによる対話型のAPIドキュメントが自動生成されており、ブラウザ上からAPIの動作を確認できます。
StreamlitでデータアプリをWeb上で実行する
Streamlitは、データ分析や機械学習の結果をWebアプリとして手軽に公開するために設計されたデータアプリ構築ツールです。基本的なUIはPythonコードのみで構築でき、HTMLやJavaScriptの基礎知識がなくてもインタラクティブな画面を作れます。
ただし、カスタムコンポーネントの実装には別途JavaScriptの知識が必要です。
FlaskやFastAPIとは異なり、Streamlitはルーティング(URLとページの対応付け)を定義する必要がなく、スクリプトを上から順に実行するとそのままWebページが生成されます。ウィジェット操作があるとスクリプト全体が再実行される仕組みで、データ分析結果の可視化ダッシュボードやAIモデルのデモアプリ作成に適しています。
以下のコードは、Streamlitをインストールして、スライダーとグラフを持つデータアプリを起動するサンプルです。
# まずターミナルでインストール
# pip install streamlit pandas
import streamlit as st
import pandas as pd
import random
st.title("データ可視化アプリのサンプル")
st.write("スライダーでデータ件数を変えると、グラフが更新されます。")
# スライダーウィジェットを配置
num_rows = st.slider("データ件数", min_value=10, max_value=100, value=30)
# ランダムなデータフレームを生成(スライダー操作のたびに再生成されます)
data = pd.DataFrame({
"日付": pd.date_range("2024-01-01", periods=num_rows, freq="D"),
"売上": [random.randint(100, 1000) for _ in range(num_rows)],
"訪問者数": [random.randint(50, 500) for _ in range(num_rows)],
})
# 折れ線グラフを表示
st.line_chart(data.set_index("日付"))
# 生データをテーブルで表示
st.dataframe(data)
# 起動コマンド: streamlit run app.py
# ブラウザで http://localhost:8501 が自動的に開く
上記のコードをapp.pyとして保存し、streamlit run app.pyを実行すると、ブラウザが自動的に起動して8501番ポートのアプリが表示されます。スライダーを動かすとグラフが更新されることが確認でき、HTMLやJavaScriptを一切書かずにインタラクティブなUIが実現します。
PythonのWebアプリをクラウドで実行して公開する方法
PythonでWebアプリを作成したら、クラウドにデプロイすることによって、外部からブラウザでアクセスできる状態で公開できます。デプロイとは、ローカル環境で動いているアプリをサーバー上に配置して外部から利用可能にする作業のことです。
ただし、認証・公開範囲・ネットワーク設定によってはアクセスが制限される場合もあります。本記事では初心者向けに代表的な2つの方法を紹介します。
- Streamlit Community Cloudにデプロイする
- AWS Lambdaでサーバーレス実行する
Streamlit Community Cloudは無料枠があり、GitHubリポジトリと連携するだけでデプロイが完了します。AWS Lambdaはサーバーレスアーキテクチャを採用しており、リクエストが来た時だけコードが実行されるため、コスト効率が高い運用が可能です。
それぞれの手順について、詳しく解説していきます。
Streamlit Community Cloudにデプロイする
Streamlit Community Cloudは、StreamlitアプリをGitHubリポジトリから直接デプロイできる無料枠のあるホスティングサービスです。無料プランには公開アプリ数やリソースの制限があるため、最新の制限内容は公式ドキュメントで確認してください。
コマンドラインの操作をほとんど必要とせず、GitHubへのプッシュをトリガーに自動で再デプロイが行われる設定にできるため、継続的な開発に向いています。
デプロイに必要なファイル構成は、以下の通りです。
| ファイル名 | 役割 |
|---|---|
| app.py | Streamlitアプリの本体コード |
| requirements.txt | 依存ライブラリの一覧(依存がある場合に配置。バージョン指定可) |
Streamlit自体はCommunity Cloudにデフォルトで用意されているため、StreamlitのみのアプリはStreamlit単体をrequirements.txtに記載しなくても動作する場合があります。pandasなど追加の依存ライブラリがある場合は、requirements.txtを用意して記載してください。
以下は、デプロイ対象となるStreamlitアプリのサンプルコードです。CSVファイルをアップロードして内容を表示するシンプルなWebアプリとして動作します。
import streamlit as st
import pandas as pd
st.title("CSVビューアー")
st.write("CSVファイルをアップロードして内容を確認できます。")
uploaded_file = st.file_uploader("CSVファイルを選択してください", type="csv")
if uploaded_file is not None:
df = pd.read_csv(uploaded_file)
st.write(f"行数: {len(df)}行、列数: {len(df.columns)}列")
st.dataframe(df)
このコードと同じディレクトリに、依存ライブラリを記述したrequirements.txtを用意します。バージョンを固定指定することで環境の再現性を確保できますが、省略した場合は最新版がインストールされます。
以下の例は記載例で、実際には最新の安定版に合わせて変更を検討してください。
# バージョンは再現性確保のために固定している(省略時は最新版が入る)
# 以下は記載例。実際には最新の安定版に合わせて変更してください
streamlit>=1.35.0
pandas>=2.2.0
デプロイの手順は、以下の通りです。
- GitHubリポジトリに
app.pyとrequirements.txtをプッシュする - Streamlit Community Cloudにサインアップ(GitHubアカウントで連携可能)
- ダッシュボードの「New app」ボタンをクリックする
- リポジトリ・ブランチ・メインファイルのパスを選択する
- 「Deploy」ボタンをクリックしてデプロイを開始する
デプロイが完了すると、リポジトリ情報を含む形式のURLが発行されます(例: https://ユーザー名-リポジトリ名-ファイル名.streamlit.app)。以降はGitHubにプッシュするたびに自動でアプリが更新されるよう設定できるため、手動での再デプロイ作業を省けます。
AWS Lambdaでサーバーレス実行する
AWS Lambdaは、サーバーレス(サーバーの管理をクラウドプロバイダーに委ね、コード実行時のみリソースが割り当てられるアーキテクチャ)を採用したサービスで、サーバーを常時稼働させることなくPythonのコードをクラウドで実行できます。
リクエストがない間はLambda本体のコスト発生はありませんが、Amazon API GatewayやCloudWatch Logs、データ転送など周辺サービスは別途料金が発生するため、合計コストは構成に応じて確認が必要です。
以下は、API GatewayのリクエストをLambdaで受け取り、HTMLレスポンスを返すサンプルコードです。クエリパラメータをHTMLに直接埋め込む場合はXSS(クロスサイトスクリプティング)対策のエスケープ処理が必要です。
本番利用時はhtml.escape()等を使用してください。
import json
import html as html_module # htmlモジュールをインポート(変数名との混在を避けるためエイリアスを使用)
def lambda_handler(event, context):
"""
API Gatewayからのリクエストを受け取り、HTMLを返すLambda関数。
eventにはHTTPリクエストの情報が格納されている。
"""
# クエリパラメータから名前を取得(存在しない場合は"World"を使用)
query_params = event.get("queryStringParameters") or {}
name = html_module.escape(query_params.get("name", "World")) # XSS対策のエスケープ
response_body = f"""<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Lambda Hello</title>
</head>
<body>
<h1>Hello, {name}!</h1>
<p>このページはAWS Lambdaで生成されました。</p>
</body>
</html>"""
return {
"statusCode": 200,
"headers": {"Content-Type": "text/html; charset=utf-8"},
"body": response_body,
}
このコードを使ってLambda関数をデプロイし、ブラウザからアクセスできるようにするための手順は、以下の通りです。
- AWSマネジメントコンソールでLambdaを開き、「関数の作成」をクリックする
- 「一から作成」を選択し、ランタイムで最新のサポート対象Pythonバージョンを選ぶ。最新の対応バージョンはAWS公式のランタイムサポートページで確認すること
- コードエディタに上記の
lambda_handler関数を貼り付け、「Deploy」をクリックする - API Gatewayのコンソールで「HTTP API」を作成し、Lambda関数とインテグレーションする
- APIのエンドポイントURLをコピーしてブラウザでアクセスする
上記の手順が完了すると、発行されたエンドポイントURLに?name=Pythonのようなクエリパラメータを付与してアクセスした際に、「Hello, Python!」と表示されるHTMLページが返されます。外部ライブラリが必要な場合は、依存ライブラリを含めたZIPファイルをアップロードするか、Lambdaレイヤーという機能を使って追加します。
また、APIエンドポイントを公開する際はアクセス過多による予期しない高額請求(いわゆるクラウド破産)のリスクがあります。AWSコンソールでの予算アラート設定を事前に行うことを強く推奨します。
| 項目 | Streamlit Community Cloud | AWS Lambda |
|---|---|---|
| 料金 | 無料枠あり(公開アプリ数等に制限) | Lambda単体は月100万リクエスト・400,000 GB秒(約40万GB秒)まで無料枠。API Gateway等は別途課金 |
| 向いている用途 | データ分析・機械学習のUIアプリ | APIエンドポイント・軽量Webページ |
| デプロイの手軽さ | GitHubと連携するだけ | AWSの設定が必要 |
手軽に公開したい場合はStreamlit Community Cloud、スケーラブルなAPIやHTTPレスポンスを返す用途にはAWS Lambdaが適しています。目的に合わせて選択してください。
PythonのWeb実行に関するよくある質問
ブラウザで実行するPythonはなぜ遅いですか?
ブラウザ上でPythonを動かす場合、Pyodide(CPythonをWebAssemblyにコンパイルしたもの)のダウンロードと初期化にネットワーク通信コストがかかります。また、WebAssembly(WASM)を経由する分、ネイティブのCPythonと比べて実行時のオーバーヘッドも生じます。
計算量が少ない処理であれば速度差が問題になりにくいですが、本格的なデータ処理や多数のリクエストをさばくAPIには、サーバーサイドのフレームワークを選ぶとよいでしょう。
スマホのブラウザからでもPythonを実行できますか?
Google ColaboratoryやPaizaCloudなどのオンライン実行環境は、スマホのブラウザからでもアクセス・実行できます。ただし、画面サイズの制約からコード編集の操作性が落ちるため、コードを書く作業には不向きです。
すでに作成したノートブックの確認や短いコードの実行確認程度であれば、スマホ環境でも十分に活用できます。本格的な開発作業はPCブラウザで行うことを推奨します。
WebアプリにSQLやHTMLの知識は必要ですか?
Streamlitのような、PythonだけでUIを構築できるツールを選べば、HTMLやCSSの知識なしでWebアプリを作成できます。一方、FlaskやFastAPIでは、レスポンスとして返すHTMLテンプレートを扱う場面があるため、HTMLの基礎知識があると開発がスムーズです。
データベースと連携するアプリを作る場合は、SQLの基礎知識も役立ちます。ただし、SQLAlchemyなどのORMを使うことによって、SQL文を直接書かずにデータベース操作を行う方法も広く採用されています。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
共通テスト「情報Ⅰ」2年目で変わる、日本の教育と学び方
gitでブランチ(branch)を切り替える方法
git cloneでブランチを指定する方法
64GBのメモリが必要な人・不要な人の特徴
PCを再起動するコマンド一覧
CapsLock以外で大文字になる原因【Windows編】
パソコンで大文字になるのを解除する方法
面白いAIの活用事例を業界別に紹介
Gitでcommit(コミット)を取り消す方法
ITやプログラミングに関するニュース
サイボウズがkintone AIを正式提供、β版から約1年を経てクレジット制を導入
ロゼッタのラクヤクAIがCSRドラフト作成期間を90%以上短縮、従来4週間を約2日に
AI CROSSが不動産業界向け生成AI伴走支援を開始、アスコットの業務AI実装を実践サポート
日本情報クリエイトが「オーナー提案AIロボⅡ」売買査定を刷新、月1万円からW査定が回数無制限に
Wur株式会社がAI新規事業診断サービス「MVP事業診断レポート」をリリース、12の質問で事業構想を約10分で分析
バトンズがM&A専門家向け「AI概要書」β版を提供開始、企業概要書のドラフトを最速3分で自動生成
SCSKが観光DXサービス「Connexia」を開発、首里城公園でNFT活用の周遊促進が始動
Verdent AI発表、エンジニア不要でソフトウェアを構築する「AIエンジニアリングチーム」が登場
ゼネラルBREXAテクノロジーが外食・小売向けAIサービス「aimana」を開発、店長の意思決定をデータで支援
田中組がKencopa工程AIエージェント製品版を先行利用開始、建設現場の工程管理属人化を解消へ
