Starlette 1.0 正式リリース!FastAPIの土台が安定版に——Claudeスキルで1.0対応コードを生成する方法も解説

元記事を読む
キュレーターコメント

FastAPIユーザーの多くがStarletteを間接的に使っているにも関わらず、その存在を意識していない——そんな「土台の1.0リリース」を、LLM活用の実験と絡めて語るWillisonならではの記事。Starletteの`lifespan`移行ポイントとClaudeスキルの活用事例の両方が刺さる、バックエンドエンジニア必読の内容です。

概要

Starlette 1.0がついにリリース。FastAPI開発者は必読

Pythonの非同期Webフレームワーク Starlette がバージョン1.0に到達した。「知名度のわりに利用者が多いフレームワーク」という評がぴったりな存在だが、その理由は明快だ。FastAPIの内部基盤がStarletteだから。FastAPIが注目を集めるたびに「下敷きになっているStarletteの存在」が霞みがちだったが、今回の1.0リリースでStarlette自身も表舞台に立った。

Simon Willison(Datasette作者)がこのリリースを「really big deal」と表現していることからも、Pythonエコシステムにとっての重大さが伝わってくる。Starletteは2018年にKim Christieが開発を始め、ASGIベースのフレームワーク群の中でも特に洗練されたデザインが特徴だった。2025年9月にはStarletteとUvicornのリポジトリがMarcelo Trylesinski(FastAPIメンテナー)のGitHubアカウントへ移管され、長期的な開発体制が整備されている。

1.0の最重要変更点:lifespanによる起動・終了処理

0.x系との後方互換性を破る変更がいくつかあるが、最も重要なのは 起動・終了処理の書き方の変更 だ。

従来の on_startup / on_shutdown パラメータは廃止され、lifespanという非同期コンテキストマネージャベースの仕組みに統一された。

from contextlib import asynccontextmanager
from starlette.applications import Starlette

@asynccontextmanager
async def lifespan(app):
    async with some_async_resource():
        print("起動時に実行")
        yield
        print("終了時に実行")

app = Starlette(routes=routes, lifespan=lifespan)

yield の前が起動処理、後が終了処理という直感的な構造で、FastAPIユーザーにはおなじみのパターンだろう。リソースの初期化とクリーンアップを一箇所にまとめられる点が大きなメリットだ。Starletteはこれを先行して採用しており、FastAPIでも同様のAPIが使われている。

「LLMがStarlette 1.0対応コードを書けない」問題をClaudeスキルで解決

ここからが本記事で最も面白い実験の話だ。

Starletteの設計哲学は「Flask的なシンプルさ+asyncioネイティブ」。1つのPythonファイルでアプリが完結するため、LLMによるコード生成との相性が抜群。しかし問題がある。1.0で破壊的変更があったため、学習データが古いモデルは0.x系の書き方で出力してしまう。

Simon WillisonはこれをClaudeの 「スキル」機能 で解決した。手順はシンプルだ:

  1. claude.aiのチャットで「StarletteをGitHubからクローンして、1.0の全機能をカバーするスキルドキュメントを作成して」と指示
  2. ClaudeがGitHubからリポジトリを自動取得し、包括的なスキルドキュメントを生成
  3. 「Copy to your skills」ボタンで自分のスキルに追加
  4. 以降のチャットでは1.0対応コードが生成されるようになる

これは「モデルのファインチューニングなしに最新ライブラリに対応させる」というアプローチで、新しいAPIが登場するたびに使える汎用的な手法だ。

実際に生成されたタスク管理アプリ

「プロジェクト・タスク・コメント・ラベルを持つタスク管理アプリをStarletteで作って」と一言プロンプトするだけで、ClaudeはGitHub Issuesライクな完全なアプリを生成した。使用技術は以下の通り:

  • Starlette 1.0(ルーティング・テンプレート)
  • SQLite + aiosqlite(非同期DB)
  • Jinja2(HTMLテンプレート)

特筆すべきは、Claudeが自ら TestClient を使ってAPIの動作確認コードも生成・実行したこと。スタッツ確認・一覧取得・作成・コメント追加まで網羅したテストをシングルセッションで完結させた。Claude Codeが注目される昨今だが、「通常のClaudeチャット+スキル」という構成でも十分なコーディングエージェントになり得ることを示している。

まとめ:Starlette 1.0は「安定したFastAPI基盤」への重要な一歩

Starlette 1.0のリリースはPythonのWeb開発において地味ながら重要なマイルストーンだ。FastAPIを本番運用している開発者は lifespan への移行対応を確認しておく価値がある。また「最新ライブラリ対応のコードをLLMで生成する」というClaudeスキル活用の発想は、日々新しいAPIが登場するAI時代に非常に実用的なアプローチといえる。まずは公式リポジトリのリリースノートとSimon Willisonのブログで詳細を確認してみてほしい。