PythonをWebで実行する方法

【Python】Webで実行する方法

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

Pythonのコードをローカル環境に構築することなく、ブラウザ上ですぐに実行したいと考えている方は少なくありません。環境構築は初学者にとって大きなハードルとなることが多く、インストール作業でつまずいて学習が止まってしまうケースもあります。

オンライン実行環境を活用すれば、パソコンへのインストールは一切不要で、ブラウザを開くだけでPythonのコードをすぐに動かせます。AIデータ分析の学習やコードの簡単な動作確認にも非常に便利です。

この記事では、Pythonをブラウザ上で実行できるサイトの使い方から、Webアプリとして公開する方法まで、目的別に具体的な手順を解説します。



PythonのコードをWeb上で実行できるサイト(実行環境)

Pythonのコードをオンラインで実行できる環境として、代表的なサービスを3つ紹介します。いずれもブラウザから利用でき、学習・短いコードの実行向けに最適です。

  1. Google Colaboratory
  2. PaizaCloud
  3. 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だけではなく、PHPNode.jsRubyなど複数の言語に対応しており、ファイルシステムも利用できるため、複数のファイルを組み合わせたプログラムも実行できます。なお、無料プランはサーバー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つの操作を順に解説します。

  1. script type="py"でHTMLにPythonを埋め込む
  2. NumPyなどの外部ライブラリを読み込む
  3. ブラウザ実行で発生する制約を把握する

それぞれの手順を理解することによって、ローカル環境を構築せずにブラウザ上でPythonを動かす仕組みを実践的に習得できます。

それでは各項目について、詳しく解説していきます。


Python研修一覧はこちら

目的に合うPython研修を一覧形式から探したい方は、ぜひご利用ください。

Python研修を比較する

Java研修一覧はこちら

目的に合うJava研修を一覧形式から探したい方は、ぜひご利用ください。

Java研修を比較する

PHP研修一覧はこちら

目的に合うPHP研修を一覧形式から探したい方は、ぜひご利用ください。

PHP研修を比較する

新入社員研修

目的に合う新入社員研修を一覧形式から探したい方は、ぜひご利用ください。

新入社員研修を比較する

全ての研修からも探したい方はこちら

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が対応しているパッケージ(PandasSciPyなど)を同様に列挙できます。

なお、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は手軽さと拡張性のバランスが取れていますが、サーバーとのリアルタイム通信やファイル処理が主な用途の場合は、後述するFlaskFastAPIなどのサーバーサイドフレームワークが適しています。

PythonでWebアプリを実行する際のツールの選び方

PythonでWebアプリやAPIをサーバー上で動かすには、フレームワーク・ツールの選択が開発効率と性能を大きく左右します。フレームワークとは、Webアプリ開発に必要な機能をあらかじめまとめたライブラリ群のことです。

代表的なものとして、以下の3つがあります。なお、StreamlitはWebフレームワークではなくデータアプリ構築ツールですが、Pythonで手軽にWebアプリを実行できる手段として本記事で紹介します。

  1. Flask
  2. FastAPI
  3. 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の動作を確認できます。


Python基礎・実践(Django)

企業・法人向けのPython研修では、基礎から応用まで体系的に学べます。

Python研修の詳細

DX社員研修

企業・法人向けのDX研修では、実務に繋がるリスキリングでITレベルを向上させます。

DX研修の詳細

Javaエンジニア育成研修

企業・法人向けのJavaエンジニア育成研修では、Javaの基礎から応用まで確実に習得できます。

Java研修の詳細

新卒・新入社員向け研修

企業・法人に新入社員・新卒社員に向けたプログラミング研修を提供しています。

新入社員研修の詳細

コードキャンプのIT研修を全て見る

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つの方法を紹介します。

  1. Streamlit Community Cloudにデプロイする
  2. 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

デプロイの手順は、以下の通りです。

  1. GitHubリポジトリにapp.pyrequirements.txtをプッシュする
  2. Streamlit Community Cloudにサインアップ(GitHubアカウントで連携可能)
  3. ダッシュボードの「New app」ボタンをクリックする
  4. リポジトリ・ブランチ・メインファイルのパスを選択する
  5. 「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関数をデプロイし、ブラウザからアクセスできるようにするための手順は、以下の通りです。

  1. AWSマネジメントコンソールでLambdaを開き、「関数の作成」をクリックする
  2. 「一から作成」を選択し、ランタイムで最新のサポート対象Pythonバージョンを選ぶ。最新の対応バージョンはAWS公式のランタイムサポートページで確認すること
  3. コードエディタに上記のlambda_handler関数を貼り付け、「Deploy」をクリックする
  4. API Gatewayのコンソールで「HTTP API」を作成し、Lambda関数とインテグレーションする
  5. 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やプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

企業・法人向けのIT・プログラミング・生成AI研修を探す、比較する - IT・プログラミングを知って学べるコネクトメディア CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 3.5日の研修で、年間1,600時間の削減効果が見込まれる。東京きらぼしフィナンシャルグループのDX人材育成事例 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する