<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Webアプリ開発  |  Python-memo｜自動化・AI・Web開発の実験室</title>
	<atom:link href="https://python.cbagames.jp/tag/web%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA/feed/" rel="self" type="application/rss+xml" />
	<link>https://python.cbagames.jp</link>
	<description>Pythonで、できるをふやそう。</description>
	<lastBuildDate>Sun, 01 Feb 2026 08:30:48 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://python.cbagames.jp/wp-content/uploads/2025/06/cropped-497d491d54402de785c9e043bfa0620a-32x32.png</url>
	<title>Webアプリ開発  |  Python-memo｜自動化・AI・Web開発の実験室</title>
	<link>https://python.cbagames.jp</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【超簡単】StreamlitでPython製Webアプリを最速作成＆無料公開する方法</title>
		<link>https://python.cbagames.jp/2025/06/22/streamlit-webapp-beginner/</link>
					<comments>https://python.cbagames.jp/2025/06/22/streamlit-webapp-beginner/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Sun, 22 Jun 2025 03:14:22 +0000</pubDate>
				<category><![CDATA[Webアプリ開発]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Streamlit]]></category>
		<category><![CDATA[データ可視化]]></category>
		<category><![CDATA[デプロイ]]></category>
		<category><![CDATA[初心者向け]]></category>
		<category><![CDATA[自動化ツール]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=488</guid>

					<description><![CDATA[目次 はじめに｜Streamlitってなに？なにがすごいの？1. Streamlitの魅力とは？｜なぜ人気なのか🧑‍💻 1. PythonだけでWebアプリが作れる！⚡ 2. コードを保存すればすぐ反映｜リアルタイム更新 [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2"><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">はじめに｜Streamlitってなに？なにがすごいの？</a></li><li><a href="#toc2" tabindex="0">1. Streamlitの魅力とは？｜なぜ人気なのか</a><ol><li><a href="#toc3" tabindex="0">🧑‍💻 1. PythonだけでWebアプリが作れる！</a></li><li><a href="#toc4" tabindex="0">⚡ 2. コードを保存すればすぐ反映｜リアルタイム更新！</a></li><li><a href="#toc5" tabindex="0">📊 3. データ分析に強い！グラフや表が得意</a></li><li><a href="#toc6" tabindex="0">🌍 4. 無料で世界に公開できる！</a></li><li><a href="#toc7" tabindex="0">🔧 5. サイドバーやフォーム、マルチページまで対応！</a></li></ol></li><li><a href="#toc8" tabindex="0">2. Streamlitのインストールと基本の使い方</a><ol><li><a href="#toc9" tabindex="0">🔧 Step1：Streamlitをインストールしよう</a></li><li><a href="#toc10" tabindex="0">📝 Step2：アプリのPythonファイルを作成しよう</a></li><li><a href="#toc11" tabindex="0">🚀 Step3：アプリを起動してみよう</a></li><li><a href="#toc12" tabindex="0">🔁 コードを修正→即反映！</a></li><li><a href="#toc13" tabindex="0">💡 補足：エラーが出たら？</a></li></ol></li><li><a href="#toc14" tabindex="0">3. よく使うUIコンポーネントの紹介とサンプル</a><ol><li><a href="#toc15" tabindex="0">📝 テキストを表示する</a></li><li><a href="#toc16" tabindex="0">📊 表やデータを表示する</a></li><li><a href="#toc17" tabindex="0">🎨 画像や動画を表示する</a></li><li><a href="#toc18" tabindex="0">🧑‍🔧 入力ウィジェットを使う</a></li><li><a href="#toc19" tabindex="0">📦 サイドバーを使ってUIを整理</a></li><li><a href="#toc20" tabindex="0">🔁 処理中のスピナー表示</a></li></ol></li><li><a href="#toc21" tabindex="0">4. Webアプリをデプロイするには？｜無料でネット公開！</a><ol><li><a href="#toc22" tabindex="0">🧰 事前準備：GitHubアカウントを用意しよう</a></li><li><a href="#toc23" tabindex="0">🗂 Step1：アプリファイルをGitHubにアップロード</a></li><li><a href="#toc24" tabindex="0">🌐 Step2：Streamlit Cloudでアプリを公開！</a></li><li><a href="#toc25" tabindex="0">📎 公開されたURLを共有しよう！</a></li><li><a href="#toc26" tabindex="0">💼 補足：Snowflakeなど高度なデプロイも可能</a></li></ol></li><li><a href="#toc27" tabindex="0">5. さらに進んだ使い方｜複数ページ・レイアウト・セッション管理</a><ol><li><a href="#toc28" tabindex="0">📄 複数ページ構成にするには？</a><ol><li><a href="#toc29" tabindex="0">✅ やり方</a></li></ol></li><li><a href="#toc30" tabindex="0">🧱 レイアウトを整えるには？｜カラムやタブを使おう</a><ol><li><a href="#toc31" tabindex="0">📌 カラムで横並びに表示</a></li><li><a href="#toc32" tabindex="0">📌 タブ切り替えもできる！</a></li></ol></li><li><a href="#toc33" tabindex="0">💾 セッション状態を管理する｜st.session_stateの活用</a><ol><li><a href="#toc34" tabindex="0">例：カウンターを作る</a></li></ol></li><li><a href="#toc35" tabindex="0">📋 フォームでまとめて送信</a></li></ol></li><li><a href="#toc36" tabindex="0">6. 注意点とよくあるトラブル</a><ol><li><a href="#toc37" tabindex="0">🔄 ブラウザをリロードすると状態がリセットされる？</a><ol><li><a href="#toc38" tabindex="0">✅ 対策：st.session_state を使う</a></li></ol></li><li><a href="#toc39" tabindex="0">🐛 実行エラーが出る！ → エラーメッセージをよく読もう</a></li><li><a href="#toc40" tabindex="0">📂 ファイルアップロードがうまくいかない？</a><ol><li><a href="#toc41" tabindex="0">✅ よくある注意点</a></li></ol></li><li><a href="#toc42" tabindex="0">🐢 表示が遅い・重い</a><ol><li><a href="#toc43" tabindex="0">✅ 対処法</a></li></ol></li><li><a href="#toc44" tabindex="0">📦 バージョンアップで動かなくなる？</a><ol><li><a href="#toc45" tabindex="0">✅ 対策</a></li></ol></li></ol></li><li><a href="#toc46" tabindex="0">7. まとめ｜StreamlitでWebアプリ開発はここまで簡単！</a><ol><li><a href="#toc47" tabindex="0">✅ この記事で学んだこと</a></li><li><a href="#toc48" tabindex="0">あわせて読みたい</a></li></ol></li><li><a href="#toc49" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">はじめに｜Streamlitってなに？なにがすごいの？</span></h2>



<p>Pythonで作ったスクリプトを、<br><strong>できるだけ簡単に・無料でWebアプリとして公開したい</strong>と思ったことはありませんか？</p>



<p>FlaskやDjangoは本格的すぎるし、<br>HTMLやJavaScriptを一から学ぶのは正直ハードルが高い…。<br>そんな悩みを感じている人は、かなり多いはずです。</p>



<p>そこでおすすめなのが <strong>Streamlit（ストリームリット）</strong> です。</p>



<p>Streamlitを使えば、<strong>Pythonのコードを書くだけでWebアプリを作成でき</strong>、<br>ボタン・入力フォーム・グラフ・表なども驚くほど簡単に実装できます。<br>フロントエンドの知識は一切不要で、Jupyter Notebook感覚で使えるのが大きな特徴です。</p>



<p>さらに、作成したアプリは<strong>無料でインターネットに公開</strong>することも可能。<br>個人開発・学習用・社内ツールの共有まで、幅広く活用できます。</p>



<p>この記事では、</p>



<ul class="wp-block-list">
<li>Streamlitの基本的な仕組み</li>



<li>インストールから最初のWebアプリ作成</li>



<li>作ったアプリを無料で公開する方法</li>
</ul>



<p>までを、<strong>初心者でも迷わず進められるように</strong>順番に解説します。</p>



<p>「Pythonは書けるけど、Webアプリは初めて」という方でも大丈夫です。<br>実際に手を動かしながら、一緒にStreamlitでWebアプリを作っていきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc2">1. Streamlitの魅力とは？｜なぜ人気なのか</span></h2>



<p>Streamlitがここまで注目されている理由は、とにかく**「簡単で早い」**ことに尽きます。<br>でもそれだけじゃないんです。ここでは、初心者にこそ知ってほしいStreamlitの魅力を紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc3">🧑‍💻 1. PythonだけでWebアプリが作れる！</span></h3>



<p>通常、Webアプリを作ろうと思うと、HTML・CSS・JavaScriptなど、いろんな技術を覚える必要があります。<br>でもStreamlitなら、<strong>Pythonコードを書くだけでWeb画面が完成</strong>します。</p>



<p>たとえばこのコード一行だけで、画面に大きなタイトルが表示されます👇</p>



<pre class="wp-block-preformatted"><code>import streamlit as st<br>st.title("こんにちは、Streamlit！")<br></code></pre>



<p>これだけでOK！余計な設定やテンプレートは不要です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc4">⚡ 2. コードを保存すればすぐ反映｜リアルタイム更新！</span></h3>



<p>コードをちょっと書き換えたら、すぐにアプリも変わってくれたら便利ですよね？<br>Streamlitは<strong>リアルタイムでコードの変更が反映される</strong>ので、試行錯誤がサクサク進みます。</p>



<pre class="wp-block-preformatted"><code>streamlit run app.py<br></code></pre>



<p>このコマンドでアプリを起動すれば、あとは<strong>ブラウザを開いたままコードを直すだけ</strong>。自動でアプリがリロードされます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">📊 3. データ分析に強い！グラフや表が得意</span></h3>



<p>Streamlitはもともと<strong>データ分析のために設計されたフレームワーク</strong>です。<br>そのため、PandasのデータフレームやMatplotlibのグラフも、ほんの数行でWeb上に表示できます。</p>



<pre class="wp-block-preformatted"><code>import pandas as pd<br>st.dataframe(pd.read_csv("data.csv"))<br></code></pre>



<p>グラフ表示もこんなに簡単👇</p>



<pre class="wp-block-preformatted"><code>import matplotlib.pyplot as plt<br><br>fig, ax = plt.subplots()<br>ax.plot([1, 2, 3], [4, 6, 2])<br>st.pyplot(fig)<br></code></pre>



<p>データサイエンス系のツールと非常に相性がいいのが特徴です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">🌍 4. 無料で世界に公開できる！</span></h3>



<p>せっかく作ったアプリ、他の人にも使ってもらいたいですよね？<br>Streamlitなら、<strong>GitHubにアップするだけで無料でネット公開</strong>できます。</p>



<p>「Streamlit Community Cloud」という公式サービスがあり、わずか数クリックでデプロイが完了。サーバー構築も不要です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">🔧 5. サイドバーやフォーム、マルチページまで対応！</span></h3>



<p>シンプルなUIだけでなく、以下のような<strong>本格的なアプリ構成</strong>にも対応しています。</p>



<ul class="wp-block-list">
<li>サイドバー（<code>st.sidebar</code>）</li>



<li>フォーム（<code>st.form()</code>）</li>



<li>入力チェック</li>



<li>ページの分割（<code>pages/</code>ディレクトリ）</li>
</ul>



<p>ちょっとした業務ツールや分析アプリを自作したいときにもぴったりなんです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc8">2. Streamlitのインストールと基本の使い方</span></h2>



<p>では早速、Streamlitを使ってみましょう！<br>ここでは、インストール方法から最初のアプリの作成・実行までをステップバイステップで解説します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">🔧 Step1：Streamlitをインストールしよう</span></h3>



<p>まずは、Streamlitを自分のPCにインストールします。<br>Pythonがすでにインストールされていれば、以下のコマンドでOKです。</p>



<pre class="wp-block-preformatted"><code>pip install streamlit<br></code></pre>



<p>※エラーが出る場合は、<code>python -m pip install streamlit</code>を試してください。<br>対応バージョンは <strong>Python 3.7以上</strong> です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">📝 Step2：アプリのPythonファイルを作成しよう</span></h3>



<p>次に、Streamlit用のPythonファイルを1つ作成します。<br>ファイル名はなんでもいいですが、ここでは <code>app.py</code> にしておきましょう。</p>



<pre class="wp-block-preformatted"><code># app.py<br><br>import streamlit as st<br><br>st.title("こんにちは、Streamlit！")<br>st.write("これは最初のWebアプリです！")<br></code></pre>



<p>このように、普段のPythonコードに <code>st.〇〇()</code> の関数を追加するだけで、WebアプリのUIが作れてしまいます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc11">🚀 Step3：アプリを起動してみよう</span></h3>



<p>ターミナル（またはコマンドプロンプト）で、次のコマンドを実行してください。</p>



<pre class="wp-block-preformatted"><code>streamlit run app.py<br></code></pre>



<p>すると、自動的にブラウザが立ち上がり、アプリが表示されます。<br>※ブラウザが開かない場合は、<code>http://localhost:8501</code> にアクセスしてみてください。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">🔁 コードを修正→即反映！</span></h3>



<p>Streamlitはリアルタイム更新に対応しています。<br><code>app.py</code> を保存するたびに、ブラウザが自動で更新されるので、<strong>「書いて・見て・直す」が超スムーズ</strong>に行えます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">💡 補足：エラーが出たら？</span></h3>



<p>起動中にエラーが出た場合は、ターミナルに表示されたメッセージを確認してみましょう。<br>よくあるのは以下のようなものです：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>エラー内容</th><th>原因と対処</th></tr></thead><tbody><tr><td><code>ModuleNotFoundError: No module named 'streamlit'</code></td><td>→ pip install を忘れている場合があります。再度 <code>pip install streamlit</code> を実行しましょう。</td></tr><tr><td><code>OSError: [Errno 98] Address already in use</code></td><td>→ すでにStreamlitアプリが起動中か、ポートがかぶっている可能性があります。別のターミナルで確認し、不要なプロセスを終了しましょう。</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここまでできれば、**「StreamlitでWebアプリが作れるようになった」**状態です！<br>次は、<strong>実際に使えるUIコンポーネント</strong>を紹介していきます👇</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc14">3. よく使うUIコンポーネントの紹介とサンプル</span></h2>



<p>Streamlitのすごいところは、<strong>ほんの数行のコードで豊富なUIパーツを使える</strong>ところ。<br>しかも、Pythonのコードを書くだけでOKです。</p>



<p>ここでは、よく使う基本的なコンポーネント（ウィジェット）を実際のコード例つきで紹介していきます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc15">📝 テキストを表示する</span></h3>



<p>Streamlitでは、見出しやテキストも簡単に表示できます。</p>



<pre class="wp-block-preformatted"><code>st.title("タイトルです")<br>st.header("これはヘッダーです")<br>st.subheader("これはサブヘッダーです")<br>st.text("これは普通のテキストです")<br>st.markdown("**Markdown**にも対応しています！")<br></code></pre>



<p>💡 <code>st.write()</code> はなんでも表示できる万能関数なので、迷ったらこれを使うのがオススメ！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc16">📊 表やデータを表示する</span></h3>



<p>Pandasのデータフレームやリストもすぐに画面に出せます。</p>



<pre class="wp-block-preformatted"><code>import pandas as pd<br><br>df = pd.DataFrame({<br>    "名前": ["田中", "佐藤", "鈴木"],<br>    "年齢": [25, 30, 22]<br>})<br><br>st.write(df)           # 自動的に表にしてくれる<br>st.dataframe(df)       # スクロール可能な表（インタラクティブ）<br>st.table(df)           # 静的な表（固定表示）<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">🎨 画像や動画を表示する</span></h3>



<p>画像や動画も1行で表示可能です。</p>



<pre class="wp-block-preformatted"><code>st.image("sample.png", caption="サンプル画像", use_column_width=True)<br>st.video("https://www.youtube.com/watch?v=xxxxxxx")<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">🧑‍🔧 入力ウィジェットを使う</span></h3>



<p>フォームやインタラクティブなツールを作るなら、これらの入力系コンポーネントが便利です👇</p>



<pre class="wp-block-preformatted"><code>name = st.text_input("名前を入力してください")<br>age = st.slider("年齢を選んでください", 0, 100, 25)<br>color = st.color_picker("好きな色を選んでください")<br></code></pre>



<p><strong>他にもたくさんあります：</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>コンポーネント</th><th>説明</th></tr></thead><tbody><tr><td><code>st.button()</code></td><td>ボタンを表示</td></tr><tr><td><code>st.checkbox()</code></td><td>チェックボックス</td></tr><tr><td><code>st.radio()</code></td><td>ラジオボタン</td></tr><tr><td><code>st.selectbox()</code></td><td>ドロップダウンから1つ選択</td></tr><tr><td><code>st.multiselect()</code></td><td>ドロップダウンから複数選択</td></tr><tr><td><code>st.file_uploader()</code></td><td>ファイルアップロード</td></tr><tr><td><code>st.date_input()</code></td><td>日付の選択</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc19">📦 サイドバーを使ってUIを整理</span></h3>



<p>サイドバーは <code>st.sidebar.〇〇</code> を使えば、メイン画面とは別にウィジェットを配置できます。</p>



<pre class="wp-block-preformatted"><code>option = st.sidebar.selectbox("メニューを選択", ["ホーム", "設定", "ヘルプ"])<br></code></pre>



<p>👈 サイドバーを使うと、メイン画面がスッキリして見やすくなります！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc20">🔁 処理中のスピナー表示</span></h3>



<p>時間のかかる処理のときは、<code>st.spinner()</code> を使えば読み込み中の表示も可能です。</p>



<pre class="wp-block-preformatted"><code>import time<br><br>with st.spinner("処理中..."):<br>    time.sleep(2)<br>st.success("完了しました！")<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここまでが、Streamlitでよく使われる基本のコンポーネントたちです。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc21">4. Webアプリをデプロイするには？｜無料でネット公開！</span></h2>



<p>せっかく作ったStreamlitアプリ、<strong>自分だけじゃなく他の人にも使ってもらいたい！</strong><br>そんなときは、<strong>Streamlit Community Cloud</strong>を使えば、無料で世界中に公開できます。</p>



<p>GitHubと連携して簡単にデプロイできるので、難しいサーバー設定も必要なし。ここでは、そのやり方をステップ形式で紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc22">🧰 事前準備：GitHubアカウントを用意しよう</span></h3>



<p>Streamlit Cloudで公開するには、まず<strong>GitHubアカウント</strong>が必要です。まだ持っていない場合は、以下のリンクから無料登録できます。</p>



<p>👉 <a rel="noopener" target="_blank" class="" href="https://github.com/">https://github.com/</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc23">🗂 Step1：アプリファイルをGitHubにアップロード</span></h3>



<ol class="wp-block-list">
<li>GitHubで新しいリポジトリ（例: <code>streamlit-app</code>）を作成</li>



<li>ローカルで以下のファイルを用意
<ul class="wp-block-list">
<li><code>app.py</code>（または<code>main.py</code>など、アプリ本体）</li>



<li><code>requirements.txt</code>（必要なライブラリの一覧）</li>
</ul>
</li>
</ol>



<p><code>requirements.txt</code> はこんな感じで作ります👇</p>



<pre class="wp-block-preformatted"><code>streamlit<br>pandas<br>matplotlib<br></code></pre>



<ol start="3" class="wp-block-list">
<li>Gitでリポジトリにプッシュ（初心者はGitHub DesktopでもOK）</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">🌐 Step2：Streamlit Cloudでアプリを公開！</span></h3>



<ol class="wp-block-list">
<li><a rel="noopener" target="_blank" href="https://streamlit.io/cloud">Streamlit Community Cloud</a> にアクセス</li>



<li>GitHubアカウントでサインイン</li>



<li>「New app」をクリックし、リポジトリを選択</li>



<li>実行したいPythonファイル（例：<code>app.py</code>）を選んで「Deploy」！</li>
</ol>



<p>これだけで、あなたのアプリが<strong>ネット上で公開されます✨</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc25">📎 公開されたURLを共有しよう！</span></h3>



<p>デプロイが完了すると、<code>https://〇〇.streamlit.app</code>のようなURLが自動発行されます。<br>このURLを友達や同僚に送れば、誰でもあなたのアプリを使えるようになります！</p>



<p>✅ URLは「非公開」にも設定可能なので、社内だけで使いたいケースにも対応できます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc26">💼 補足：Snowflakeなど高度なデプロイも可能</span></h3>



<p>もっと本格的に運用したい場合は、以下の選択肢もあります。</p>



<ul class="wp-block-list">
<li><strong>Snowflake Streamlit</strong>：セキュリティ・ユーザー管理・CI/CD対応</li>



<li><strong>Heroku / Render / AWS</strong>：カスタマイズ性の高いクラウド環境</li>



<li><strong>社内サーバーに直接設置</strong>：自社内のネットワークで閉じて使いたいとき</li>
</ul>



<p>ただし初心者ならまずは<strong>Streamlit Cloud一択</strong>でOKです！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc27">5. さらに進んだ使い方｜複数ページ・レイアウト・セッション管理</span></h2>



<p>Streamlitは、シンプルなUIだけじゃなく<strong>本格的なWebアプリっぽい機能</strong>も簡単に実現できます。<br>この章では、「もっと便利に」「もっときれいに」使うための応用テクニックを紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc28">📄 複数ページ構成にするには？</span></h3>



<p>Streamlitでは、1つのアプリ内に<strong>複数ページを作る</strong>ことができます。しかもとても簡単！</p>



<h4 class="wp-block-heading"><span id="toc29">✅ やり方</span></h4>



<ol class="wp-block-list">
<li><code>app.py</code> とは別に、<code>pages/</code> フォルダを作成</li>



<li>その中に Python ファイルを入れる（例：<code>pages/page1.py</code>、<code>pages/page2.py</code>）</li>
</ol>



<p>すると、<strong>サイドバーにページ切り替えメニュー</strong>が自動で表示されます！</p>



<p>🔁 ページは自動で読み込まれるので、ルーティングの設定などは不要です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc30">🧱 レイアウトを整えるには？｜カラムやタブを使おう</span></h3>



<h4 class="wp-block-heading"><span id="toc31">📌 カラムで横並びに表示</span></h4>



<p>複数のUIを横並びにしたいときは、<code>st.columns()</code> を使います。</p>



<pre class="wp-block-preformatted"><code>col1, col2 = st.columns(2)<br><br>with col1:<br>    st.write("左側のカラム")<br><br>with col2:<br>    st.write("右側のカラム")<br></code></pre>



<h4 class="wp-block-heading"><span id="toc32">📌 タブ切り替えもできる！</span></h4>



<p>Streamlit v1.10以降では、<code>st.tabs()</code> を使えばタブでコンテンツを切り替えることもできます。</p>



<pre class="wp-block-preformatted"><code>tab1, tab2 = st.tabs(["グラフ", "表"])<br><br>with tab1:<br>    st.line_chart(...)<br><br>with tab2:<br>    st.dataframe(...)<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc33">💾 セッション状態を管理する｜st.session_stateの活用</span></h3>



<p>通常、Streamlitはブラウザを更新するたびに状態がリセットされます。<br>でも、<code>st.session_state</code> を使えば、<strong>データや入力値をアプリ内で保持</strong>できます。</p>



<h4 class="wp-block-heading"><span id="toc34">例：カウンターを作る</span></h4>



<pre class="wp-block-preformatted"><code>if "count" not in st.session_state:<br>    st.session_state.count = 0<br><br>if st.button("カウントアップ"):<br>    st.session_state.count += 1<br><br>st.write(f"現在のカウント: {st.session_state.count}")<br></code></pre>



<p>🧠 フォーム送信やログイン情報の管理などにも使えます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc35">📋 フォームでまとめて送信</span></h3>



<p>複数の入力欄があって、<strong>ボタンを押したときに一括で処理したい</strong>ときは、フォーム構文が便利です。</p>



<pre class="wp-block-preformatted"><code>with st.form("my_form"):<br>    name = st.text_input("名前を入力")<br>    age = st.slider("年齢", 0, 100)<br>    submitted = st.form_submit_button("送信")<br><br>if submitted:<br>    st.write(f"{name} さんは {age} 歳です")<br></code></pre>



<p>✅ 通常の<code>st.text_input()</code>などは毎回即反映されますが、フォームを使うと「まとめて送信」ができます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc36">6. 注意点とよくあるトラブル</span></h2>



<p>Streamlitはとても便利ですが、<strong>いくつか知っておくべき注意点</strong>や、<strong>初心者がつまずきやすいポイント</strong>もあります。<br>ここでは、よくあるトラブルとその対処法をまとめました。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc37">🔄 ブラウザをリロードすると状態がリセットされる？</span></h3>



<p>Streamlitでは、ページを再読み込みすると<strong>すべての入力や変数が初期化</strong>されます。<br>たとえば、スライダーの値やカウントの状態なども元に戻ってしまいます。</p>



<h4 class="wp-block-heading"><span id="toc38">✅ 対策：st.session_state を使う</span></h4>



<p>状態を保持したいときは、セッション情報を管理できる <code>st.session_state</code> を活用しましょう。</p>



<pre class="wp-block-preformatted"><code>if "name" not in st.session_state:<br>    st.session_state.name = ""<br><br>name = st.text_input("名前を入力", value=st.session_state.name)<br>st.session_state.name = name<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc39">🐛 実行エラーが出る！ → エラーメッセージをよく読もう</span></h3>



<p>Streamlitでは、エラーが出ると<strong>アプリ画面の下に赤文字で表示</strong>されます。<br>内容をよく読んで、どの行で何が原因かをチェックしてみましょう。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>エラーメッセージ例</th><th>原因と対処法</th></tr></thead><tbody><tr><td><code>ModuleNotFoundError</code></td><td>ライブラリが入っていない → <code>pip install ライブラリ名</code></td></tr><tr><td><code>TypeError</code></td><td>関数に渡す引数の型が間違っている</td></tr><tr><td><code>OSError: Address already in use</code></td><td>他のアプリが同じポートで動いている → 先に終了させるか、ポート番号を変える</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc40">📂 ファイルアップロードがうまくいかない？</span></h3>



<p>Streamlitの <code>st.file_uploader()</code> は、アップロードされたファイルをメモリ上で一時的に扱います。</p>



<h4 class="wp-block-heading"><span id="toc41">✅ よくある注意点</span></h4>



<ul class="wp-block-list">
<li>ファイルサイズが大きすぎると読み込みに失敗する</li>



<li><code>file.read()</code> はバイト形式で返るので、テキストとして読む場合は <code>.decode()</code> が必要</li>
</ul>



<pre class="wp-block-preformatted"><code>uploaded_file = st.file_uploader("ファイルを選択")<br>if uploaded_file is not None:<br>    content = uploaded_file.read().decode("utf-8")<br>    st.write(content)<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc42">🐢 表示が遅い・重い</span></h3>



<p>大きなデータや複雑なグラフを扱うと、アプリの動作が重くなることがあります。</p>



<h4 class="wp-block-heading"><span id="toc43">✅ 対処法</span></h4>



<ul class="wp-block-list">
<li>表示するデータを必要最小限に絞る</li>



<li>毎回同じ処理は <code>@st.cache_data</code> でキャッシュする</li>



<li>外部ファイルの読み込みは必要なときだけ行う</li>
</ul>



<pre class="wp-block-preformatted"><code>@st.cache_data<br>def load_data():<br>    return pd.read_csv("big_data.csv")<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc44">📦 バージョンアップで動かなくなる？</span></h3>



<p>Streamlitは活発に開発が続けられているため、<strong>バージョンアップで仕様変更がある</strong>ことも。<br>過去に動いていたコードが突然動かなくなることもあります。</p>



<h4 class="wp-block-heading"><span id="toc45">✅ 対策</span></h4>



<ul class="wp-block-list">
<li><code>requirements.txt</code> にバージョンを固定して記載しておく<br>例：<code>streamlit==1.32.0</code></li>



<li>公式ドキュメントや<a>リリースノート</a>を定期的にチェック</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これらのポイントをおさえておけば、Streamlitでの開発がグッと快適になります！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc46">7. まとめ｜StreamlitでWebアプリ開発はここまで簡単！</span></h2>



<p>ここまで読んでくださってありがとうございます！<br>今回紹介した <strong>Streamlit</strong> は、まさに「Pythonで最も手軽にWebアプリが作れる魔法のツール」です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc47">✅ この記事で学んだこと</span></h3>



<ul class="wp-block-list">
<li><strong>インストールからアプリ作成までわずか数分！</strong></li>



<li>グラフや表、フォームなど、<strong>豊富なUIをPythonだけで実装</strong>できる</li>



<li>作ったアプリは<strong>Streamlit Cloudで無料公開</strong>が可能</li>



<li><code>st.columns()</code> や <code>st.session_state</code> などで<strong>本格的なアプリ構成</strong>にも対応</li>



<li>よくあるトラブルや注意点も事前に知っておけば安心！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>Streamlitを使えば、アイデア次第でいろんなアプリが作れます。</p>



<p>たとえば…</p>



<ul class="wp-block-list">
<li>📊 データを見せる可視化ダッシュボード</li>



<li>💬 チャット型のツールやフォームアプリ</li>



<li>🧮 業務の自動化ツールや計算アプリ</li>



<li>🔮 機械学習モデルのWeb化・デモ展示ページ</li>
</ul>



<p>などなど、Pythonが少し書けるだけで、**あなたの作ったツールが「誰かの役に立つアプリ」**に変わります！</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>まずは、自分用のちょっとしたアプリを作って、身近な人に「これ便利だよ！」って見せてみましょう😊<br>きっと、新しい開発の楽しさが広がっていくはずです！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc48">あわせて読みたい</span></h3>



<p>Streamlitに関連するおすすめ記事をピックアップしました。データ処理やWeb公開の知識をさらに深めたい方におすすめです。</p>



<ul class="wp-block-list">
<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/18/python-coincheck-realtime-price-plot/">Pythonで仮想通貨の価格をリアルタイム取得＆グラフ表示する方法【Coincheck API】</a><br>→ 外部APIとStreamlitを組み合わせれば、リアルタイムで動く価格表示アプリも簡単！</li>



<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/18/python-simple-kakeibo-app/">Pythonで家計簿アプリを作ろう！初心者でもできるおこづかい帳の作り方</a><br>→ GUIアプリとWebアプリの違いを理解するのにピッタリな比較記事。</li>



<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/18/python-excel-household-diagnosis/">PythonとExcelで家計診断ツールを作ってみよう｜グラフで支出が丸わかり！</a><br>→ Streamlitで作ったアプリにCSVやExcel出力を加えるヒントにも。</li>



<li>🔗 <a target="_blank" href="https://python.cbagames.jp/2025/06/20/python-scikit-learn-classification/">scikit-learnで機械学習モデルを構築する方法｜</a><br>→ 機械学習の可視化ツールとしてStreamlitを活用する場合に必読！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc49">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Streamlitは無料で使えますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>はい、ローカルでの開発も、Streamlit Community Cloudでの公開も基本無料です。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content"><strong>HTMLやCSS、JavaScriptの知識は必要ですか？</strong></div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>基本的なアプリなら不要です。Pythonだけで完結します。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">複数人で開発できますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>GitHubを使えば、複数人で共同開発することができます。バージョン管理もできて安心です。</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2025/06/22/streamlit-webapp-beginner/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【初心者向け】FastAPIの基本の使い方をやさしく解説｜最速で始めるPythonのWeb開発</title>
		<link>https://python.cbagames.jp/2025/06/09/fastapi-basic-usage-guide/</link>
					<comments>https://python.cbagames.jp/2025/06/09/fastapi-basic-usage-guide/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Mon, 09 Jun 2025 03:25:21 +0000</pubDate>
				<category><![CDATA[Webアプリ開発]]></category>
		<category><![CDATA[FastAPI]]></category>
		<category><![CDATA[Pythonフレームワーク]]></category>
		<category><![CDATA[Python入門]]></category>
		<category><![CDATA[REST API]]></category>
		<category><![CDATA[Web API]]></category>
		<category><![CDATA[初心者向け]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=202</guid>

					<description><![CDATA[目次 1. はじめに｜FastAPIってなに？なぜ人気なの？💡 FastAPIってなに？🚀 なぜFastAPIが人気なの？🎯 この記事でできるようになること2. FastAPIの準備｜インストールと開発環境🧪 ステップ① [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4"><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. はじめに｜FastAPIってなに？なぜ人気なの？</a><ol><li><a href="#toc2" tabindex="0">💡 FastAPIってなに？</a></li><li><a href="#toc3" tabindex="0">🚀 なぜFastAPIが人気なの？</a></li><li><a href="#toc4" tabindex="0">🎯 この記事でできるようになること</a></li></ol></li><li><a href="#toc5" tabindex="0">2. FastAPIの準備｜インストールと開発環境</a><ol><li><a href="#toc6" tabindex="0">🧪 ステップ①：Pythonが使えるか確認しよう</a></li><li><a href="#toc7" tabindex="0">🧼 ステップ②：仮想環境を作ろう（おすすめ）</a><ol><li><a href="#toc8" tabindex="0">Windowsの場合：</a></li><li><a href="#toc9" tabindex="0">macOS/Linuxの場合：</a></li></ol></li><li><a href="#toc10" tabindex="0">🚀 ステップ③：FastAPIとuvicornをインストール！</a></li></ol></li><li><a href="#toc11" tabindex="0">3. はじめてのFastAPIアプリを作ろう</a><ol><li><a href="#toc12" tabindex="0">📄 ステップ①：Pythonファイルを作ろう</a></li><li><a href="#toc13" tabindex="0">✏️ ステップ②：FastAPIアプリのコードを書こう</a><ol><li><a href="#toc14" tabindex="0">💡 解説：</a></li></ol></li><li><a href="#toc15" tabindex="0">🖥 ステップ③：アプリを起動してみよう！</a><ol><li><a href="#toc16" tabindex="0">💬 コマンドの意味：</a></li></ol></li><li><a href="#toc17" tabindex="0">🌐 ステップ④：ブラウザで確認しよう！</a></li><li><a href="#toc18" tabindex="0">✅ さらにスゴイ！自動ドキュメントを見てみよう</a></li></ol></li><li><a href="#toc19" tabindex="0">4. APIのエンドポイントを増やしてみよう</a><ol><li><a href="#toc20" tabindex="0">🧭 エンドポイントってなに？</a></li><li><a href="#toc21" tabindex="0">🔁 パスパラメータ付きのエンドポイントを作ってみよう</a><ol><li><a href="#toc22" tabindex="0">💡 解説：</a></li></ol></li><li><a href="#toc23" tabindex="0">🌐 動かしてみよう！</a></li><li><a href="#toc24" tabindex="0">📦 クエリパラメータを使う例</a><ol><li><a href="#toc25" tabindex="0">📌 アクセス方法：</a></li></ol></li><li><a href="#toc26" tabindex="0">✍ POSTメソッドの使い方も見てみよう！</a><ol><li><a href="#toc27" tabindex="0">例：</a></li></ol></li><li><a href="#toc28" tabindex="0">✅ まとめ</a></li></ol></li><li><a href="#toc29" tabindex="0">5. Swagger UIでAPIを確認しよう</a><ol><li><a href="#toc30" tabindex="0">📖 Swagger UIってなに？</a></li><li><a href="#toc31" tabindex="0">🌐 Swagger UIを開いてみよう！</a></li><li><a href="#toc32" tabindex="0">🔍 「Try it out」でテストしてみよう！</a></li><li><a href="#toc33" tabindex="0">🧾 ReDocもあるよ！</a></li><li><a href="#toc34" tabindex="0">✅ まとめ</a></li></ol></li><li><a href="#toc35" tabindex="0">6. 実用的な活用例｜簡単なToDo APIを作る</a><ol><li><a href="#toc36" tabindex="0">🧾 ToDo APIでやりたいこと</a></li><li><a href="#toc37" tabindex="0">💻 コード全体（コピペでOK）</a></li><li><a href="#toc38" tabindex="0">🌐 試してみよう（Swagger UI）</a><ol><li><a href="#toc39" tabindex="0">試し方：</a></li></ol></li><li><a href="#toc40" tabindex="0">✅ 補足ポイント</a></li></ol></li><li><a href="#toc41" tabindex="0">7. よくあるエラーと対処法</a><ol><li><a href="#toc42" tabindex="0">❌ エラー①：ModuleNotFoundError: No module named 'fastapi'</a><ol><li><a href="#toc43" tabindex="0">🔎 原因：</a></li><li><a href="#toc44" tabindex="0">✅ 対処法：</a></li></ol></li><li><a href="#toc45" tabindex="0">❌ エラー②：AttributeError: module 'main' has no attribute 'app'</a><ol><li><a href="#toc46" tabindex="0">🔎 原因：</a></li><li><a href="#toc47" tabindex="0">✅ 対処法：</a></li></ol></li><li><a href="#toc48" tabindex="0">❌ エラー③：POSTリクエストで422 Unprocessable Entity</a><ol><li><a href="#toc49" tabindex="0">🔎 原因：</a></li><li><a href="#toc50" tabindex="0">✅ 対処法：</a></li></ol></li><li><a href="#toc51" tabindex="0">🛠 それでもうまくいかないときは？</a></li><li><a href="#toc52" tabindex="0">🧭 あわせて読みたい</a></li></ol></li><li><a href="#toc53" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. はじめに｜FastAPIってなに？なぜ人気なの？</span></h2>



<p>こんにちは！<br>この記事では、PythonでWebアプリやAPIを作るときにとっても便利な「FastAPI（ファストエーピーアイ）」というフレームワークについて紹介していきます。</p>



<h3 class="wp-block-heading"><span id="toc2">💡 FastAPIってなに？</span></h3>



<p>FastAPIは、<strong>PythonでWeb APIをすばやく作ることができるフレームワーク</strong>です。<br>「フレームワーク」とは、アプリやシステムを作るときに役立つ“土台”や“便利ツール集”のようなものです。</p>



<p>たとえば、以下のようなことが簡単にできます：</p>



<ul class="wp-block-list">
<li>ブラウザからアクセスしてデータを取得する「API」を作る</li>



<li>ユーザーからのリクエストを受け取って返事を返す</li>



<li>入力内容が正しいかを自動でチェックしてくれる</li>



<li>作ったAPIの説明ページ（ドキュメント）も自動でつくってくれる</li>
</ul>



<p>こういったことが、<strong>びっくりするほど少ないコード量でできる</strong>のがFastAPIのスゴイところです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc3">🚀 なぜFastAPIが人気なの？</span></h3>



<p>FastAPIがいま注目されている理由は、主に次の4つです：</p>



<ol class="wp-block-list">
<li><strong>とにかく速い！（Fast）</strong><br>名前のとおり、FastAPIは処理速度がとても速くて、実はFlaskなどの他のフレームワークよりも高性能だと言われています。</li>



<li><strong>コードが少なくてすむ</strong><br>Pythonの「型ヒント」を使って、わかりやすく、ミスの少ないコードが書けます。<br>はじめての人でも、あっという間にAPIを作れます。</li>



<li><strong>自動でドキュメントができる</strong><br>作ったAPIは、ブラウザで確認できる「Swagger UI」というページで確認できます。これがまたカッコいい！</li>



<li><strong>世界中で人気急上昇中</strong><br>GoogleやNetflix、Uberなどの大企業も使っていて、信頼性もバッチリ。これからPythonでWeb開発を始めたい人にはぴったりです。</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc4">🎯 この記事でできるようになること</span></h3>



<p>この記事では、FastAPIを使って、以下のような基本的な操作を実際に体験してもらいます：</p>



<ul class="wp-block-list">
<li>FastAPIのインストール</li>



<li>はじめてのAPIを作る</li>



<li>ブラウザでAPIを確認してみる</li>



<li>よくある失敗例とその直し方</li>
</ul>



<p>Pythonの基本文法がちょっとわかれば、誰でもすぐに試せる内容なので、気軽に読み進めてくださいね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc5">2. FastAPIの準備｜インストールと開発環境</span></h2>



<p>さあ、いよいよFastAPIを使っていく準備をしていきましょう！</p>



<p>Pythonがすでにインストールされている人なら、たった数分でFastAPIを動かせるようになりますよ。まだPythonが入っていない人は、こちらの記事を参考にしてみてください👇<br>👉 <a target="_blank" href="https://python.cbagames.jp/2025/06/01/start-idle-windows1/">【Python入門1】WindowsでPythonを始めよう！IDLEのインストールと基本の使い方ガイド</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">🧪 ステップ①：Pythonが使えるか確認しよう</span></h3>



<p>まずは、Pythonがちゃんと使える状態かチェックします。<br>以下のコマンドをターミナル（またはコマンドプロンプト）で入力してください：</p>



<pre class="wp-block-preformatted"><code>python --version<br></code></pre>



<p>もしくは、環境によっては：</p>



<pre class="wp-block-preformatted"><code>python3 --version<br></code></pre>



<p>と表示されるかもしれません。<br><code>Python 3.10.13</code> などのバージョンが表示されればOKです！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">🧼 ステップ②：仮想環境を作ろう（おすすめ）</span></h3>



<p>仮想環境とは、<strong>Pythonの専用作業スペース</strong>のことです。<br>他のプロジェクトと混ざらないので、トラブルが起きにくくなります！</p>



<p>以下のコマンドで仮想環境を作ってみましょう：</p>



<pre class="wp-block-preformatted"><code>python -m venv venv<br></code></pre>



<p>次に、仮想環境を有効にします。</p>



<h4 class="wp-block-heading"><span id="toc8">Windowsの場合：</span></h4>



<pre class="wp-block-preformatted"><code>venv\Scripts\activate<br></code></pre>



<h4 class="wp-block-heading"><span id="toc9">macOS/Linuxの場合：</span></h4>



<pre class="wp-block-preformatted"><code>source venv/bin/activate<br></code></pre>



<p>成功すると、ターミナルの左側に <code>(venv)</code> と表示されるようになります！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">🚀 ステップ③：FastAPIとuvicornをインストール！</span></h3>



<p>最後に、FastAPI本体と、それを動かすための「uvicorn（ユビコーン）」というツールをインストールします。</p>



<pre class="wp-block-preformatted"><code>pip install fastapi uvicorn<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで準備は完了です！🎉<br>次のステップでは、いよいよ「はじめてのFastAPIアプリ」を作っていきましょう！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc11">3. はじめてのFastAPIアプリを作ろう</span></h2>



<p>いよいよ、FastAPIを使った「最初のWebアプリ」を作ってみましょう！</p>



<p>このステップでは、たった数行のコードで「こんにちは！」と返してくれる簡単なAPIを作ります。難しい知識はまだ必要ありませんので、気楽にやってみてくださいね😊</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">📄 ステップ①：Pythonファイルを作ろう</span></h3>



<p>まずは、作業用フォルダ（例：<code>fastapi_app</code>）の中に、以下のようなPythonファイルを作りましょう：</p>



<p><strong>ファイル名：<code>main.py</code></strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">✏️ ステップ②：FastAPIアプリのコードを書こう</span></h3>



<p>以下のコードを <code>main.py</code> にコピペして保存してください。</p>



<pre class="wp-block-preformatted"><code>from fastapi import FastAPI<br><br>app = FastAPI()<br><br>@app.get("/")<br>def read_root():<br>    return {"message": "こんにちは！FastAPIの世界へようこそ！"}<br></code></pre>



<h4 class="wp-block-heading"><span id="toc14">💡 解説：</span></h4>



<ul class="wp-block-list">
<li><code>FastAPI()</code> でアプリ本体を作ります</li>



<li><code>@app.get("/")</code> は「ルートURLにアクセスしたら…」という意味</li>



<li><code>return</code> の中にある <code>{}</code> は、返すデータ（JSON形式）</li>
</ul>



<p>たったこれだけで、1つのAPIが完成しました！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc15">🖥 ステップ③：アプリを起動してみよう！</span></h3>



<p>ターミナルを開いて、<code>main.py</code> がある場所に移動して、次のコマンドを入力します：</p>



<pre class="wp-block-preformatted"><code>uvicorn main:app --reload<br></code></pre>



<h4 class="wp-block-heading"><span id="toc16">💬 コマンドの意味：</span></h4>



<ul class="wp-block-list">
<li><code>main</code>：ファイル名（main.py）</li>



<li><code>app</code>：FastAPIインスタンスの変数名（<code>app = FastAPI()</code> の部分）</li>



<li><code>--reload</code>：コードを保存すると自動で再起動してくれるオプション（開発に便利！）</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">🌐 ステップ④：ブラウザで確認しよう！</span></h3>



<p>ターミナルに以下のような表示が出たら…</p>



<pre class="wp-block-preformatted"><code>Uvicorn running on http://127.0.0.1:8000<br></code></pre>



<p>そのURL（<a rel="noopener" target="_blank" class="" href="http://127.0.0.1:8000%EF%BC%89%E3%82%92**%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%A7%E9%96%8B%E3%81%84%E3%81%A6%E3%81%BF%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84**%E3%80%82">http://127.0.0.1:8000）を**ブラウザで開いてみてください**。</a></p>



<p>すると…</p>



<pre class="wp-block-preformatted"><code>{"message":"こんにちは！FastAPIの世界へようこそ！"}<br></code></pre>



<p>このような文字が表示されるはずです！これがあなたが作ったAPIの“返事”です！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">✅ さらにスゴイ！自動ドキュメントを見てみよう</span></h3>



<p>FastAPIには、<strong>自動でAPIの説明ページを作ってくれる機能</strong>があります。</p>



<p>ブラウザで以下のURLにアクセスしてみましょう：</p>



<ul class="wp-block-list">
<li><strong><a rel="noopener" target="_blank" class="" href="http://127.0.0.1:8000/docs">http://127.0.0.1:8000/docs</a></strong> ←これが有名な「Swagger UI」！</li>
</ul>



<p>カッコいい画面が出てきて、あなたのAPIが確認できます。<br>これがFastAPIの最大の魅力のひとつです！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc19">4. APIのエンドポイントを増やしてみよう</span></h2>



<p>前のステップでは、1つのシンプルなAPI（ルート <code>/</code>）を作りましたね。<br>ここからは、<strong>「APIをもっと便利にする方法」＝エンドポイントを増やす方法</strong>を解説していきます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc20">🧭 エンドポイントってなに？</span></h3>



<p>「エンドポイント」とは、かんたんに言うと<strong>URLごとの入り口</strong>のことです。</p>



<p>たとえば：</p>



<ul class="wp-block-list">
<li><code>/</code> にアクセス → 「こんにちは！」と表示</li>



<li><code>/items/1</code> にアクセス → 「item_id: 1」と表示</li>
</ul>



<p>こんなふうに、<strong>違うURLにアクセスすることで違う処理ができる</strong>のがAPIの特徴です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">🔁 パスパラメータ付きのエンドポイントを作ってみよう</span></h3>



<p>新しく、IDを使ったルート <code>/items/{item_id}</code> を作ってみましょう。<br>コードを <code>main.py</code> に追加してください👇</p>



<pre class="wp-block-preformatted"><code>@app.get("/items/{item_id}")<br>def read_item(item_id: int):<br>    return {"item_id": item_id}<br></code></pre>



<h4 class="wp-block-heading"><span id="toc22">💡 解説：</span></h4>



<ul class="wp-block-list">
<li><code>{item_id}</code> の部分は<strong>変数のようなもの</strong>。アクセスしたときの数字が <code>item_id</code> に入ります。</li>



<li><code>item_id: int</code> は「この値は整数だよ」と教えてあげる型ヒント。</li>



<li><code>return</code> でその値を返しています。</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc23">🌐 動かしてみよう！</span></h3>



<p>FastAPIアプリをまだ起動していない場合は、ターミナルで次のコマンドを実行します：</p>



<pre class="wp-block-preformatted"><code>uvicorn main:app --reload<br></code></pre>



<p>そのあと、ブラウザでこのURLを開いてみてください：</p>



<pre class="wp-block-preformatted"><code>http://127.0.0.1:8000/items/42<br></code></pre>



<p>結果はこのようになります：</p>



<pre class="wp-block-preformatted"><code>{"item_id": 42}<br></code></pre>



<p>ばっちりですね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc24">📦 クエリパラメータを使う例</span></h3>



<p>次は、URLに「?」をつけて指定する<strong>クエリパラメータ</strong>を使った例です。</p>



<p>以下のように書きます：</p>



<pre class="wp-block-preformatted"><code>@app.get("/users/")<br>def read_user(name: str = "ゲスト"):<br>    return {"message": f"こんにちは、{name}さん！"}<br></code></pre>



<h4 class="wp-block-heading"><span id="toc25">📌 アクセス方法：</span></h4>



<pre class="wp-block-preformatted"><code>http://127.0.0.1:8000/users/?name=たろう<br></code></pre>



<p>結果：</p>



<pre class="wp-block-preformatted"><code>{"message":"こんにちは、たろうさん！"}<br></code></pre>



<p>※ <code>name</code> を指定しなければ「ゲストさん」になります！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc26">✍ POSTメソッドの使い方も見てみよう！</span></h3>



<p>ここまではすべて「GET」でしたが、次は「POST」メソッド（データを送る）も追加してみましょう。</p>



<pre class="wp-block-preformatted"><code>from pydantic import BaseModel<br><br>class Item(BaseModel):<br>    name: str<br>    price: float<br><br>@app.post("/items/")<br>def create_item(item: Item):<br>    return {"message": f"{item.name} を登録しました（価格: {item.price}円）"}<br></code></pre>



<p>Swagger UI（<a rel="noopener" target="_blank" class="" href="http://127.0.0.1:8000/docs%EF%BC%89%E3%81%8B%E3%82%89%E8%A9%A6%E3%81%99%E3%81%93%E3%81%A8%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%EF%BC%81">http://127.0.0.1:8000/docs）から試すことができます！</a></p>



<h4 class="wp-block-heading"><span id="toc27">例：</span></h4>



<pre class="wp-block-preformatted"><code>{<br>  "name": "りんご",<br>  "price": 120.5<br>}<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc28">✅ まとめ</span></h3>



<p>FastAPIでは、たった数行のコードでいろいろなエンドポイントが作れます：</p>



<ul class="wp-block-list">
<li><code>/items/1</code> のような <strong>パスパラメータ</strong></li>



<li><code>/users/?name=〜</code> のような <strong>クエリパラメータ</strong></li>



<li><code>POST</code> を使った <strong>データ登録API</strong></li>
</ul>



<p>これらを組み合わせると、本格的なWebサービスも作れてしまうんです✨</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>次は、<strong>FastAPIの魅力である「Swagger UI」やAPIドキュメントの自動生成」について解説</strong>していきます！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc29">5. Swagger UIでAPIを確認しよう</span></h2>



<p>FastAPIのすごいところのひとつが、**「自動でAPIの説明ページ（ドキュメント）を作ってくれる機能」**です。</p>



<p>これを使えば、自分で作ったAPIがどんなものなのかを<strong>ブラウザでかんたんに確認＆テスト</strong>できます！<br>しかも、専門的な設定は必要ありません。FastAPIなら、最初からこの機能がついています✨</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc30">📖 Swagger UIってなに？</span></h3>



<p><strong>Swagger UI（スワッガーユーアイ）とは、APIの仕様（どんなURLがあるのか、どんなデータを送れるのかなど）を見やすく表示してくれるWebページ</strong>のことです。</p>



<p>FastAPIでアプリを起動すると、自動的にSwagger UIが生成されます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc31">🌐 Swagger UIを開いてみよう！</span></h3>



<p>ターミナルでFastAPIアプリを起動している状態で、ブラウザから次のURLにアクセスしてみましょう：</p>



<pre class="wp-block-preformatted"><code>http://127.0.0.1:8000/docs<br></code></pre>



<p>すると、こんな感じの画面が表示されるはずです👇</p>



<ul class="wp-block-list">
<li>青い「GET」や「POST」のボタンがある</li>



<li>エンドポイント（APIのURL）が一覧で見られる</li>



<li>パラメータや戻り値の説明がついている</li>



<li>実際にデータを送信して<strong>APIのテスト</strong>ができる！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc32">🔍 「Try it out」でテストしてみよう！</span></h3>



<ol class="wp-block-list">
<li><code>GET /items/{item_id}</code> をクリック</li>



<li>「Try it out（試してみる）」を押す</li>



<li><code>item_id</code> に好きな数字を入力（例：10）</li>



<li>「Execute」をクリック！</li>
</ol>



<p>すると、下のほうにレスポンス（APIの返事）が表示されます：</p>



<pre class="wp-block-preformatted"><code>{<br>  "item_id": 10<br>}<br></code></pre>



<p>このように、<strong>ブラウザ上だけでAPIの動作確認ができる</strong>のはとっても便利ですね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc33">🧾 ReDocもあるよ！</span></h3>



<p>実はもうひとつ、FastAPIは**ReDoc（リードック）**という別の見た目のドキュメントも用意してくれています。</p>



<p>こちらは以下のURLでアクセスできます：</p>



<pre class="wp-block-preformatted"><code>http://127.0.0.1:8000/redoc<br></code></pre>



<p>Swagger UIよりも<strong>読み物としての説明に特化</strong>していて、ドキュメントとして整っている印象です。どちらも無料で自動生成されるのがありがたいですね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc34">✅ まとめ</span></h3>



<p>FastAPIでは、開発者向けの便利なドキュメントが自動で作られます：</p>



<ul class="wp-block-list">
<li><code>http://127.0.0.1:8000/docs</code>（Swagger UI）：実際に動かして試せる！</li>



<li><code>http://127.0.0.1:8000/redoc</code>（ReDoc）：読みやすく整理されたAPI説明ページ</li>
</ul>



<p>コードを書いたらすぐに<strong>見て・試して・直せる</strong>ので、開発スピードがグッと上がります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc35">6. 実用的な活用例｜簡単なToDo APIを作る</span></h2>



<p>ここまでFastAPIの基本を学んできたみなさん、お疲れさまです！<br>ここからは**「実際にどんなAPIが作れるのか？」**を体験していきましょう。</p>



<p>今回はシンプルな「ToDoリストAPI」を作ってみます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc36">🧾 ToDo APIでやりたいこと</span></h3>



<p>このミニアプリでは、以下の3つの機能を作ります：</p>



<ol class="wp-block-list">
<li>📋 現在のToDo一覧を取得（GET）</li>



<li>➕ 新しいToDoを追加（POST）</li>



<li>❌ 指定したToDoを削除（DELETE）</li>
</ol>



<p>まだデータベースは使いません。<strong>Pythonのリスト（配列）だけで実現</strong>します！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc37">💻 コード全体（コピペでOK）</span></h3>



<p><code>main.py</code> に、これまでの内容に追加・上書きする形で、以下のコードを入れてください👇</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code>from fastapi import FastAPI, HTTPException
from pydantic import BaseModel

app = FastAPI()

# ToDoアイテムのデータモデル
class ToDoItem(BaseModel):
    title: str

# データを保存するリスト（サーバーの中だけ）
todo_list = []

# 1. ToDo一覧を取得する
@app.get(&quot;/todos&quot;)
def get_todos():
    return {&quot;todos&quot;: todo_list}

# 2. 新しいToDoを追加する
@app.post(&quot;/todos&quot;)
def add_todo(item: ToDoItem):
    todo_list.append(item)
    return {&quot;message&quot;: &quot;追加しました！&quot;, &quot;todo&quot;: item}

# 3. ToDoを削除する
@app.delete(&quot;/todos/{index}&quot;)
def delete_todo(index: int):
    if index &lt; 0 or index &gt;= len(todo_list):
        raise HTTPException(status_code=404, detail=&quot;その番号のToDoは見つかりません&quot;)
    removed = todo_list.pop(index)
    return {&quot;message&quot;: &quot;削除しました&quot;, &quot;removed&quot;: removed}</code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc38">🌐 試してみよう（Swagger UI）</span></h3>



<ol class="wp-block-list">
<li>アプリを起動していない人は以下のコマンドで起動： bashコピーする編集する<code>uvicorn main:app --reload</code></li>



<li>ブラウザで <code>http://127.0.0.1:8000/docs</code> にアクセス！</li>
</ol>



<h4 class="wp-block-heading"><span id="toc39">試し方：</span></h4>



<ul class="wp-block-list">
<li><code>POST /todos</code>：新しいToDoを追加 jsonコピーする編集する<code>{ "title": "ブログ記事を書く" }</code></li>



<li><code>GET /todos</code>：今のToDo一覧を確認</li>



<li><code>DELETE /todos/{index}</code>：番号を指定して削除（0番目が最初）</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc40">✅ 補足ポイント</span></h3>



<ul class="wp-block-list">
<li>データは「Pythonのリスト（配列）」に保存されます。</li>



<li>このデータはサーバーを再起動すると消えます（＝データベースは未使用）。</li>



<li>初心者でも「アプリっぽさ」を体験しやすい構成になっています！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc41">7. よくあるエラーと対処法</span></h2>



<p>FastAPIは使いやすいフレームワークですが、<strong>最初のうちはちょっとしたミスでエラーが出てしまうこともあります</strong>。</p>



<p>でも大丈夫！よくあるエラーとその直し方を知っておけば、怖くありません😊<br>ここでは、<strong>初心者がよく出会う3つのエラー</strong>とその解決方法を紹介します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc42">❌ エラー①：ModuleNotFoundError: No module named 'fastapi'</span></h3>



<h4 class="wp-block-heading"><span id="toc43">🔎 原因：</span></h4>



<p>FastAPIやuvicornをインストールしていない、もしくは<strong>仮想環境を有効にしていない</strong>状態です。</p>



<h4 class="wp-block-heading"><span id="toc44">✅ 対処法：</span></h4>



<p>以下のコマンドをターミナルで実行して、もう一度インストールしましょう：</p>



<pre class="wp-block-preformatted"><code>pip install fastapi uvicorn<br></code></pre>



<p>仮想環境を使っている場合は、必ず有効にしてからインストール＆実行してくださいね👇</p>



<ul class="wp-block-list">
<li>Windows: <code>venv\Scripts\activate</code></li>



<li>Mac/Linux: <code>source venv/bin/activate</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc45">❌ エラー②：AttributeError: module 'main' has no attribute 'app'</span></h3>



<h4 class="wp-block-heading"><span id="toc46">🔎 原因：</span></h4>



<p>FastAPIの起動コマンドで指定している「<code>main:app</code>」のどちらかが間違っていることが多いです。</p>



<h4 class="wp-block-heading"><span id="toc47">✅ 対処法：</span></h4>



<p>以下を確認してください：</p>



<ul class="wp-block-list">
<li>ファイル名は <code>main.py</code> ですか？（<code>uvicorn main:app</code> の <code>main</code> 部分）</li>



<li><code>app = FastAPI()</code> の変数名は <code>app</code> になっていますか？</li>
</ul>



<p>修正後は、再度以下のコマンドで起動しましょう：</p>



<pre class="wp-block-preformatted"><code>uvicorn main:app --reload<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc48">❌ エラー③：POSTリクエストで422 Unprocessable Entity</span></h3>



<h4 class="wp-block-heading"><span id="toc49">🔎 原因：</span></h4>



<p>POSTで送ったデータの<strong>形式が間違っている</strong>場合に出ます。</p>



<p>たとえば、こんなコードがあるとします：</p>



<pre class="wp-block-preformatted"><code>class Item(BaseModel):<br>    name: str<br>    price: float<br></code></pre>



<p>そのときに、リクエストがこうなっていたらNGです：</p>



<pre class="wp-block-preformatted"><code>{<br>  "name": "ノートパソコン"<br>}<br></code></pre>



<p>（← <code>price</code> が抜けている！）</p>



<h4 class="wp-block-heading"><span id="toc50">✅ 対処法：</span></h4>



<p>正しく送る必要があります。例えば：</p>



<pre class="wp-block-preformatted"><code>{<br>  "name": "ノートパソコン",<br>  "price": 98000<br>}<br></code></pre>



<p>Swagger UIでは「モデルの例」が表示されるので、そちらを参考にすると安心です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc51">🛠 それでもうまくいかないときは？</span></h3>



<ul class="wp-block-list">
<li>エラーメッセージをよく読んでみましょう。行番号やヒントが書かれていることがあります。</li>



<li>コピペミスがないか確認しましょう（カッコの閉じ忘れ、インデントなど）。</li>



<li>わからないときは、<code>エラー名 Python FastAPI</code> でGoogle検索すると多くの事例が出てきます。</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここまで読んでくださってありがとうございます！<br>FastAPIの基本的な使い方、エンドポイントの作成、Swagger UIの使い方、ToDo APIの作成、そしてエラー対応までバッチリ学べましたね🎉</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc52">🧭 あわせて読みたい</span></h3>



<ul class="wp-block-list">
<li>👉 <a target="_blank" href="https://python.cbagames.jp/2025/06/05/flask-webapp-beginner/">Python初心者がFlaskでWebアプリを作る方法</a></li>



<li>👉 <a target="_blank" href="https://python.cbagames.jp/2025/06/04/python-chatgpt-api-guide/">【中級者向け】PythonでChatGPT APIを使う完全ガイド</a></li>



<li>👉 <a target="_blank" href="https://python.cbagames.jp/2025/06/04/python-google-spreadsheet-gspread/">【初心者向け】PythonでGoogleスプレッドシートを操作する基本</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc53">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">FastAPIは完全に無料ですか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>はい、オープンソースなので誰でも無料で使えます！</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">本番環境でもFastAPIを使えますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>もちろんです！大企業もFastAPIを使っています。ただし、本番では <code>uvicorn</code> に <code>gunicorn</code> を組み合わせるのが一般的です。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">FastAPIとFlaskの違いは？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>Flaskはシンプルで柔軟ですが、FastAPIは型ヒントやドキュメント機能が充実しています。どちらも人気ですが、FastAPIの方が最近のトレンドです。</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2025/06/09/fastapi-basic-usage-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cloudflare PagesとPython APIを連携！Jamstack構成でWebアプリを公開する手順</title>
		<link>https://python.cbagames.jp/2025/06/09/cloudflare-pages-python-api-jamstack/</link>
					<comments>https://python.cbagames.jp/2025/06/09/cloudflare-pages-python-api-jamstack/#respond</comments>
		
		<dc:creator><![CDATA[asukapy]]></dc:creator>
		<pubDate>Mon, 09 Jun 2025 02:46:34 +0000</pubDate>
				<category><![CDATA[Webアプリ開発]]></category>
		<category><![CDATA[API連携]]></category>
		<category><![CDATA[Cloudflare Pages]]></category>
		<category><![CDATA[Jamstack]]></category>
		<category><![CDATA[Python API]]></category>
		<category><![CDATA[デプロイ手順]]></category>
		<category><![CDATA[静的サイト]]></category>
		<guid isPermaLink="false">https://python.cbagames.jp/?p=190</guid>

					<description><![CDATA[目次 1. はじめに｜Cloudflare Pages × Python APIって何ができるの？🔧こんな人におすすめ！🌟この記事でわかること2. Jamstackとは？構成の基本をおさらい💡Jamstackって何の略？ [&#8230;]]]></description>
										<content:encoded><![CDATA[

  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6"><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">1. はじめに｜Cloudflare Pages × Python APIって何ができるの？</a><ol><li><a href="#toc2" tabindex="0">🔧こんな人におすすめ！</a></li><li><a href="#toc3" tabindex="0">🌟この記事でわかること</a></li></ol></li><li><a href="#toc4" tabindex="0">2. Jamstackとは？構成の基本をおさらい</a><ol><li><a href="#toc5" tabindex="0">💡Jamstackって何の略？</a></li><li><a href="#toc6" tabindex="0">🚀Jamstack構成のメリット</a></li><li><a href="#toc7" tabindex="0">🔧よくあるJamstackの例</a></li></ol></li><li><a href="#toc8" tabindex="0">3. Cloudflare Pagesとは？無料で使える高速ホスティング</a><ol><li><a href="#toc9" tabindex="0">🌀Cloudflare Pagesってなに？</a><ol><li><a href="#toc10" tabindex="0">できることはこんな感じ：</a></li></ol></li><li><a href="#toc11" tabindex="0">🌟Cloudflare Pagesのメリットまとめ</a></li><li><a href="#toc12" tabindex="0">📂静的サイトってどんなもの？</a></li><li><a href="#toc13" tabindex="0">🤔でも、Pythonのバックエンドはどうするの？</a></li></ol></li><li><a href="#toc14" tabindex="0">4. PythonでAPIを作る｜FastAPIを例に解説</a><ol><li><a href="#toc15" tabindex="0">🐍FastAPIってなに？</a></li><li><a href="#toc16" tabindex="0">🛠️準備するもの</a></li><li><a href="#toc17" tabindex="0">📦最小構成のAPIコードを書いてみよう</a></li><li><a href="#toc18" tabindex="0">🚀ローカルで起動してみよう</a></li><li><a href="#toc19" tabindex="0">🌐Swagger UIでAPIを試せる！</a></li></ol></li><li><a href="#toc20" tabindex="0">5. Python APIをCloudflare Workersにデプロイする手順</a><ol><li><a href="#toc21" tabindex="0">😥 でもちょっと待って！Cloudflare WorkersってPython動くの？</a></li><li><a href="#toc22" tabindex="0">✅ Python API公開の3つの選択肢（Cloudflare Pagesと相性◎）</a></li><li><a href="#toc23" tabindex="0">🚀ステップ1：Render.comでFastAPIを公開しよう</a><ol><li><a href="#toc24" tabindex="0">1. GitHubにFastAPIのコードをアップ</a></li><li><a href="#toc25" tabindex="0">2. Renderで新しいWebサービスを作成</a></li><li><a href="#toc26" tabindex="0">3. 数分待つと、自動でAPIが公開されるURLが発行されます！</a></li></ol></li><li><a href="#toc27" tabindex="0">🔗ステップ2：Cloudflare Pagesの静的フロントと連携</a></li></ol></li><li><a href="#toc28" tabindex="0">6. Cloudflare PagesとAPIを統合する</a><ol><li><a href="#toc29" tabindex="0">🎨ステップ1：フロントエンドを作成しよう</a></li><li><a href="#toc30" tabindex="0">📦ステップ2：Cloudflare Pagesにデプロイ</a><ol><li><a href="#toc31" tabindex="0">手順：</a></li></ol></li><li><a href="#toc32" tabindex="0">🔗ステップ3：APIとつなげて動作確認！</a></li><li><a href="#toc33" tabindex="0">🔐ステップ4：環境変数やAPIの保護（補足）</a></li></ol></li><li><a href="#toc34" tabindex="0">7. 公開と動作確認｜デプロイ後のチェックポイント</a><ol><li><a href="#toc35" tabindex="0">✅1. 公開URLの確認</a></li><li><a href="#toc36" tabindex="0">✅2. APIとの通信ができているか確認</a></li><li><a href="#toc37" tabindex="0">✅3. API側でエラーが出ていないか？</a></li><li><a href="#toc38" tabindex="0">✅4. CORS（クロスオリジン）の確認</a></li><li><a href="#toc39" tabindex="0">✅5. モバイル・別ブラウザでも確認しよう</a></li><li><a href="#toc40" tabindex="0">✅6. キャッシュやHTTPS設定もチェック</a></li><li><a href="#toc41" tabindex="0">✅7. 予期しない入力にも強いか？（バリデーション）</a></li></ol></li><li><a href="#toc42" tabindex="0">8. まとめ</a><ol><li><a href="#toc43" tabindex="0">✅今回やったことまとめ</a></li><li><a href="#toc44" tabindex="0">🚀Jamstackで広がる開発の可能性</a></li><li><a href="#toc45" tabindex="0">🔄今後の展開アイデア</a></li></ol></li><li><a href="#toc46" tabindex="0">🔗あわせて読みたい（関連リンク）</a></li><li><a href="#toc47" tabindex="0">よくある質問（Q&amp;A）</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">1. はじめに｜Cloudflare Pages × Python APIって何ができるの？</span></h2>



<p>こんにちは！この記事では、<strong>Cloudflare PagesとPython APIを組み合わせて、最新のWebアプリを公開する方法</strong>をご紹介します。</p>



<p>最近よく聞く「<strong>Jamstack（ジャムスタック）</strong>」って言葉、知っていますか？これは、<strong>フロントエンド（見た目）を静的サイトで、バックエンド（中身の処理）をAPIで作る</strong>という新しいWeb開発の考え方なんです。</p>



<p>たとえば…</p>



<ul class="wp-block-list">
<li>Webページは<strong>Cloudflare Pages</strong>で超高速に配信！</li>



<li>データの保存や計算などの裏側処理は<strong>Pythonで作ったAPI</strong>におまかせ！</li>
</ul>



<p>というふうに、「表示」と「処理」をきれいに分けて動かせるのがJamstack構成のポイントです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc2">🔧こんな人におすすめ！</span></h3>



<ul class="wp-block-list">
<li>PythonでAPI（裏側のプログラム）を作ったけど、<strong>公開方法がよくわからない</strong>…</li>



<li><strong>Cloudflare Pagesってよく聞くけど、どう使えばいいの？</strong></li>



<li>ReactやHTMLでフロントを作ったあと、<strong>バックエンドをPythonで連携したい！</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc3">🌟この記事でわかること</span></h3>



<p>この記事では、次のようなことをステップごとにやさしく解説していきます！</p>



<ul class="wp-block-list">
<li>Cloudflare Pagesの基本とメリット</li>



<li>PythonでAPIを作る方法（FastAPIを使います）</li>



<li>静的サイトとAPIを組み合わせて公開する手順</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>「サーバーを持たずにWebアプリを作りたい！」「Pythonで書いたコードをそのままWebに活かしたい！」<br>そんな方にぴったりの内容です。</p>



<p>それでは、Cloudflare Pages × Python APIの世界へ、いっしょに一歩踏み出してみましょう！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc4">2. Jamstackとは？構成の基本をおさらい</span></h2>



<p>「Jamstack（ジャムスタック）」って言葉、ちょっとカッコいいけど、なんだか難しそうですよね。でも、仕組みは意外とシンプルなんです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">💡Jamstackって何の略？</span></h3>



<p>Jamstackは、3つの要素の頭文字からできた言葉です。</p>



<ul class="wp-block-list">
<li><strong>J</strong>avaScript：動きをつける言語（ReactやVueなど）</li>



<li><strong>A</strong>PI：外部のデータや処理を呼び出す仕組み（今回はPythonで作る！）</li>



<li><strong>M</strong>arkup：HTMLなどの静的なページ</li>
</ul>



<p>つまり、「<strong>フロントエンドは静的（HTML）で高速に配信し、裏側の処理はAPIで別に用意する</strong>」というスタイルなんです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">🚀Jamstack構成のメリット</span></h3>



<p>なぜこの構成が人気なのか？理由はとても魅力的です。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>メリット</th><th>内容</th></tr></thead><tbody><tr><td><strong>速い！</strong></td><td>静的サイトはCDNで爆速配信されます</td></tr><tr><td><strong>安全！</strong></td><td>サーバーがないので攻撃されにくい</td></tr><tr><td><strong>スケーラブル！</strong></td><td>アクセスが増えても自動で対応できる</td></tr><tr><td><strong>柔軟！</strong></td><td>フロントとバックエンドを自由に組み合わせられる</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">🔧よくあるJamstackの例</span></h3>



<p>たとえば、次のような構成が人気です：</p>



<ul class="wp-block-list">
<li>フロントエンド：Next.js（Reactベース）を使ってCloudflare Pagesにホスティング</li>



<li>バックエンド：FastAPI（Python）でAPIを用意し、Cloudflare Workersや他のサーバレス環境で公開</li>
</ul>



<p>こんなふうに「見た目」と「処理」を分けて構築することで、モダンでメンテしやすいアプリが作れるんですね。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>Jamstackのイメージがつかめてきたら、次はいよいよ主役のひとつ「Cloudflare Pages」について詳しく見ていきましょう！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc8">3. Cloudflare Pagesとは？無料で使える高速ホスティング</span></h2>



<p>さて、ここからはJamstack構成の「見た目」部分、つまり<strong>静的サイトのホスティング</strong>を担う「Cloudflare Pages（クラウドフレア・ページズ）」について見ていきましょう。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">🌀Cloudflare Pagesってなに？</span></h3>



<p>Cloudflare Pagesは、<strong>静的なWebサイトをGitHubと連携して自動で公開できるサービス</strong>です。しかも無料プランでも十分すぎる機能が使えるので、個人開発や学習用途にもピッタリ！</p>



<h4 class="wp-block-heading"><span id="toc10">できることはこんな感じ：</span></h4>



<ul class="wp-block-list">
<li>GitHubにプッシュしたら<strong>自動でデプロイ</strong>される</li>



<li>世界中のCloudflare CDNから<strong>超高速で配信</strong></li>



<li><strong>カスタムドメイン・SSL対応も無料！</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc11">🌟Cloudflare Pagesのメリットまとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>特徴</th><th>内容</th></tr></thead><tbody><tr><td><strong>無料で始められる</strong></td><td>個人開発や学習にも最適</td></tr><tr><td><strong>GitHub連携が超かんたん</strong></td><td>コードをpushするだけで公開できる</td></tr><tr><td><strong>CDNで高速配信</strong></td><td>世界中にキャッシュされてアクセスが速い</td></tr><tr><td><strong>FunctionsでサーバレスAPIも使える</strong></td><td>Node.jsベースの簡単なAPI処理ならこれでOK！</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">📂静的サイトってどんなもの？</span></h3>



<p>静的サイトというのは、<strong>HTML・CSS・JavaScriptなどがすでに完成した状態のファイル</strong>です。Cloudflare Pagesでは、こういったファイルをまるごとアップロードするだけで公開できます。</p>



<p>たとえば…</p>



<ul class="wp-block-list">
<li>ReactやVueなどのフレームワークでビルドしたページ</li>



<li>PelicanやHugoなどの静的ブログジェネレーターで作ったサイト</li>



<li>純粋なHTML/CSSの手書きサイト</li>
</ul>



<p>これらすべてがCloudflare Pagesに対応しています！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">🤔でも、Pythonのバックエンドはどうするの？</span></h3>



<p>ここがポイント。Cloudflare Pagesは「静的サイト専用」なので、<strong>Pythonのようなサーバーサイドの処理はそのままでは動かせません</strong>。</p>



<p>じゃあどうするか？<br>答えは次のセクションで詳しく紹介しますが、<strong>Python APIを別の場所にホスティングして、それをフロントから呼び出す</strong>というスタイルにするんです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc14">4. PythonでAPIを作る｜FastAPIを例に解説</span></h2>



<p>さて、ここからは「バックエンド」側のお話です。<br>Cloudflare Pagesで公開する静的なフロントエンドと連携するために、<strong>PythonでAPIを作っておく必要</strong>があります。</p>



<p>ここでは、近年大人気のフレームワーク「<strong>FastAPI（ファストエーピーアイ）</strong>」を使って、かんたんなAPIを作ってみましょう！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc15">🐍FastAPIってなに？</span></h3>



<p>FastAPIは、PythonでAPIを高速に作れる軽量フレームワークです。次のような特徴があります：</p>



<ul class="wp-block-list">
<li>書き方がシンプルで初心者でもわかりやすい！</li>



<li>自動でAPIドキュメント（Swagger UI）を作ってくれる！</li>



<li>実行がめちゃくちゃ速い！</li>
</ul>



<p>PythonでAPIを作るなら、まずこれを使っておけば間違いなしです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc16">🛠️準備するもの</span></h3>



<p>まずは環境を用意しましょう。次の手順でOKです：</p>



<pre class="wp-block-preformatted"><code># 仮想環境の作成（任意）<br>python -m venv venv<br>source venv/bin/activate  # Windowsなら venv\Scripts\activate<br><br># 必要なパッケージのインストール<br>pip install fastapi uvicorn<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc17">📦最小構成のAPIコードを書いてみよう</span></h3>



<p>次に、<code>main.py</code> という名前で以下のようなコードを作ってみましょう。</p>



<pre class="wp-block-preformatted"><code>from fastapi import FastAPI<br><br>app = FastAPI()<br><br>@app.get("/")<br>def read_root():<br>    return {"message": "こんにちは！FastAPIが動いています！"}<br><br>@app.get("/greet/{name}")<br>def greet(name: str):<br>    return {"message": f"こんにちは、{name}さん！"}<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc18">🚀ローカルで起動してみよう</span></h3>



<p>APIを実行するには、以下のコマンドを使います：</p>



<pre class="wp-block-preformatted"><code>uvicorn main:app --reload<br></code></pre>



<p>起動したら、ブラウザで次のURLにアクセスしてみましょう：</p>



<ul class="wp-block-list">
<li><a rel="noopener" target="_blank" class="" href="http://localhost:8000">http://localhost:8000</a> → トップページ</li>



<li><a rel="noopener" target="_blank" class="" href="http://localhost:8000/greet/Taro">http://localhost:8000/greet/Taro</a> → 「こんにちは、Taroさん！」と返してくれる！</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc19">🌐Swagger UIでAPIを試せる！</span></h3>



<p>FastAPIは、<a rel="noopener" target="_blank" class="" href="http://localhost:8000/docs">http://localhost:8000/docs</a> にアクセスすると、<strong>自動生成されたAPIドキュメント</strong>（Swagger UI）が表示されます。ここでAPIを直接試すこともできますよ！</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このようにして、Pythonだけで簡単に動くAPIが完成しました！<br>あとは、これをどこかに「公開」して、Cloudflare PagesのフロントエンドとつなげればOKです。</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc20">5. Python APIをCloudflare Workersにデプロイする手順</span></h2>



<p>前のセクションで作成したPythonのFastAPI。ローカルではバッチリ動きましたね！<br>でも、Webアプリとして<strong>誰でもアクセスできるようにするには「どこかに公開」する必要</strong>があります。</p>



<p>ここでは、Cloudflareが提供する**サーバーレス実行環境「Cloudflare Workers」**を使って、PythonのAPIを動かす方法を解説します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc21">😥 でもちょっと待って！Cloudflare WorkersってPython動くの？</span></h3>



<p>正直に言うと、Cloudflare Workersは**Node.jsやWebAssembly（WASM）**ベースの環境なので、<strong>そのままPythonを動かすことはできません</strong>。</p>



<p>ですが、以下の方法でPython APIを「擬似的に」クラウドに公開することができます：</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h3 class="wp-block-heading"><span id="toc22">✅ Python API公開の3つの選択肢（Cloudflare Pagesと相性◎）</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>方法</th><th>説明</th><th>難易度</th></tr></thead><tbody><tr><td><strong>① Fly.ioやRenderでFastAPIをホスト</strong></td><td>Pythonがそのまま動くクラウドにデプロイ</td><td>⭐⭐</td></tr><tr><td><strong>② Cloudflare WorkersにHTTP経由でリバースプロキシ</strong></td><td>WorkersでAPIを中継する</td><td>⭐⭐⭐</td></tr><tr><td><strong>③ WASM化されたPython実行環境を使う</strong></td><td><code>pyodide</code>や<code>micropython</code>でJS上でPython実行</td><td>⭐⭐⭐⭐</td></tr></tbody></table></figure>



<p>ここでは、一番現実的でかんたんな「①FastAPIを別クラウドにデプロイ」してから「Cloudflare Pagesのフロントエンドとつなぐ」方法を紹介します！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc23">🚀ステップ1：Render.comでFastAPIを公開しよう</span></h3>



<h4 class="wp-block-heading"><span id="toc24">1. GitHubにFastAPIのコードをアップ</span></h4>



<ol class="wp-block-list">
<li>GitHubに新しいリポジトリを作成</li>



<li><code>main.py</code> や <code>requirements.txt</code> をpush</li>
</ol>



<pre class="wp-block-preformatted"><code># requirements.txt<br>fastapi<br>uvicorn<br></code></pre>



<h4 class="wp-block-heading"><span id="toc25">2. Renderで新しいWebサービスを作成</span></h4>



<ol class="wp-block-list">
<li><a rel="noopener" target="_blank" class="" href="https://render.com/">https://render.com/</a> にアクセスして無料アカウント作成</li>



<li>Dashboard → 「New Web Service」→ GitHubを選んでリポジトリを選択</li>



<li>設定値は以下を参考に：</li>
</ol>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>値</th></tr></thead><tbody><tr><td>Runtime</td><td>Python</td></tr><tr><td>Build Command</td><td><code>pip install -r requirements.txt</code></td></tr><tr><td>Start Command</td><td><code>uvicorn main:app --host 0.0.0.0 --port 10000</code></td></tr><tr><td>Environment</td><td>Web Service</td></tr><tr><td>Region</td><td>Singapore（日本から近い）</td></tr></tbody></table></figure>



<h4 class="wp-block-heading"><span id="toc26">3. 数分待つと、自動でAPIが公開されるURLが発行されます！</span></h4>



<p>例：</p>



<pre class="wp-block-preformatted"><code>https://my-fastapi-app.onrender.com/greet/Taro<br></code></pre>



<p>これで、外部からもアクセスできる「公開されたPython API」が完成しました！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc27">🔗ステップ2：Cloudflare Pagesの静的フロントと連携</span></h3>



<p>Cloudflare Pages側のJavaScriptやHTMLから、このAPIを呼び出せばOKです。</p>



<p>例（JavaScript）：</p>



<pre class="wp-block-preformatted"><code>fetch("https://my-fastapi-app.onrender.com/greet/Taro")<br>  .then(res => res.json())<br>  .then(data => console.log(data.message));<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>RenderやFly.ioでも<strong>独自ドメイン対応可能</strong>です。<br>さらにCloudflare側でDNS設定すれば、静的サイトと同じドメイン配下で統一することも可能ですよ！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc28">6. Cloudflare PagesとAPIを統合する</span></h2>



<p>ここまでで、<strong>Cloudflare Pagesで静的なフロントエンド</strong>ができて、<strong>Pythonで作ったAPIもクラウドに公開</strong>できました！</p>



<p>あとは、この2つを組み合わせて、<strong>ユーザーが操作するとAPIが動き、結果が表示される</strong>ようにすれば、JamstackなWebアプリの完成です！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc29">🎨ステップ1：フロントエンドを作成しよう</span></h3>



<p>まずは、Cloudflare Pagesにアップする**静的Webページ（HTML/JS）**を作成します。ここでは、APIと連携するシンプルなHTMLを例にしてみましょう。</p>



<pre class="wp-block-preformatted"><code>&lt;!-- index.html --><br>&lt;!DOCTYPE html><br>&lt;html lang="ja"><br>&lt;head><br>  &lt;meta charset="UTF-8" /><br>  &lt;title>Python API連携アプリ&lt;/title><br>&lt;/head><br>&lt;body><br>  &lt;h1>Python APIと連携しよう！&lt;/h1><br>  &lt;input type="text" id="name" placeholder="名前を入力してね" /><br>  &lt;button onclick="callAPI()">あいさつする&lt;/button><br>  &lt;p id="result">&lt;/p><br><br>  &lt;script><br>    async function callAPI() {<br>      const name = document.getElementById('name').value;<br>      const response = await fetch(`https://your-fastapi-app.onrender.com/greet/${name}`);<br>      const data = await response.json();<br>      document.getElementById('result').textContent = data.message;<br>    }<br>  &lt;/script><br>&lt;/body><br>&lt;/html><br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc30">📦ステップ2：Cloudflare Pagesにデプロイ</span></h3>



<p>このHTMLをGitHubにpushし、Cloudflare Pagesに連携させます。</p>



<h4 class="wp-block-heading"><span id="toc31">手順：</span></h4>



<ol class="wp-block-list">
<li>GitHubで新しいリポジトリを作成（例：<code>python-api-frontend</code>）</li>



<li><code>index.html</code> をルートに置く</li>



<li>Cloudflare Pagesにログイン → 「Create a Project」</li>



<li>GitHubのリポジトリを選ぶ</li>



<li>ビルド設定は次のように：</li>
</ol>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>値</th></tr></thead><tbody><tr><td>Framework Preset</td><td>None</td></tr><tr><td>Build command</td><td>（空欄）</td></tr><tr><td>Output folder</td><td><code>/</code> または <code>.</code></td></tr></tbody></table></figure>



<p>これで、Cloudflare Pagesで静的ページがデプロイされます！<br>例：</p>



<pre class="wp-block-preformatted"><code>https://python-api-frontend.pages.dev/<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc32">🔗ステップ3：APIとつなげて動作確認！</span></h3>



<p>Cloudflare Pagesに公開されたページで、名前を入力しボタンを押すと、<strong>FastAPIで作ったAPIが呼ばれて結果が表示される</strong>ようになります！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc33">🔐ステップ4：環境変数やAPIの保護（補足）</span></h3>



<p>本番環境では以下のポイントにも注意しましょう。</p>



<ul class="wp-block-list">
<li>APIキーが必要な場合は <strong>Cloudflare Pagesの環境変数機能</strong>を使う</li>



<li>レート制限や認証を導入して、<strong>APIの濫用を防止</strong></li>



<li>CORS設定をFastAPI側で調整（<code>fastapi.middleware.cors</code>）</li>
</ul>



<p>例：</p>



<pre class="wp-block-preformatted"><code>from fastapi.middleware.cors import CORSMiddleware<br><br>app.add_middleware(<br>    CORSMiddleware,<br>    allow_origins=["https://your-pages.pages.dev"],<br>    allow_methods=["*"],<br>    allow_headers=["*"],<br>)<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで、<strong>Cloudflare Pages + Python API</strong>を組み合わせたJamstack構成が完成です！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc34">7. 公開と動作確認｜デプロイ後のチェックポイント</span></h2>



<p>ついに！Cloudflare Pagesで静的なフロントエンドを公開し、Pythonで作ったAPIとも連携できるようになりました。</p>



<p>ここでは、「**きちんと動いているか？」「本番運用で問題が起きないか？」」をチェックするためのポイントをまとめておきます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc35">✅1. 公開URLの確認</span></h3>



<p>まずは、Cloudflare Pagesで発行されたURLを開いてみましょう。</p>



<p>例：</p>



<pre class="wp-block-preformatted"><code>https://your-frontend-project.pages.dev/<br></code></pre>



<p>画面がちゃんと表示されているか、ボタンなどの操作ができるか確認します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc36">✅2. APIとの通信ができているか確認</span></h3>



<p>フォームやボタンを使ってAPIにリクエストを送り、<strong>結果が表示されるかどうか</strong>を確認します。</p>



<p>例：</p>



<ul class="wp-block-list">
<li>名前を入力 → 「こんにちは、◯◯さん！」と表示されたらOK！</li>



<li>ネットワークタブ（開発者ツール）でfetchリクエストが成功しているか確認</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc37">✅3. API側でエラーが出ていないか？</span></h3>



<p>RenderやFly.ioなど、APIをホスティングしているプラットフォームの管理画面で<strong>ログを確認</strong>しましょう。</p>



<ul class="wp-block-list">
<li>404や500エラーが出ていないか？</li>



<li>CORSエラーで止まっていないか？</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc38">✅4. CORS（クロスオリジン）の確認</span></h3>



<p>ブラウザからAPIを呼び出すとき、「CORS」というセキュリティ設定に引っかかって失敗することがあります。</p>



<p>FastAPI側で、以下のようなCORS設定が入っているか確認しましょう：</p>



<pre class="wp-block-preformatted"><code>from fastapi.middleware.cors import CORSMiddleware<br><br>app.add_middleware(<br>    CORSMiddleware,<br>    allow_origins=["https://your-frontend-project.pages.dev"],<br>    allow_credentials=True,<br>    allow_methods=["*"],<br>    allow_headers=["*"],<br>)<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc39">✅5. モバイル・別ブラウザでも確認しよう</span></h3>



<p>PCだけでなく、スマホや別のブラウザでも表示・操作できるか確認することで、ユーザー目線の不具合を減らせます。</p>



<ul class="wp-block-list">
<li>スマホ表示が崩れていないか？</li>



<li>入力やボタン操作がスムーズに動くか？</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc40">✅6. キャッシュやHTTPS設定もチェック</span></h3>



<p>Cloudflare Pagesは自動でHTTPS（SSL）に対応しますが、初回デプロイ後すぐはHTTPリダイレクトが効かない場合もあります。</p>



<ul class="wp-block-list">
<li><code>https://</code> で始まるURLでアクセスできるか？</li>



<li>APIや画像などもHTTPS経由で読み込まれているか？</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc41">✅7. 予期しない入力にも強いか？（バリデーション）</span></h3>



<p>予想外の入力（空欄、記号だけ、大量の文字など）でも、APIが落ちないようにチェック！</p>



<p>例：</p>



<pre class="wp-block-preformatted"><code>@app.get("/greet/{name}")<br>def greet(name: str):<br>    if not name or len(name) > 50:<br>        return {"message": "入力が正しくありません"}<br>    return {"message": f"こんにちは、{name}さん！"}<br></code></pre>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>このように、公開後は<strong>技術的なチェック＋ユーザー体験のチェック</strong>の両方を丁寧に行うことで、安心して運用できるJamstackアプリが完成します！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<p><script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-2494518121553371"
     crossorigin="anonymous"></script><br />
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid"
     data-ad-client="ca-pub-2494518121553371"
     data-ad-slot="2936039508"></ins><br />
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script></p>



<h2 class="wp-block-heading"><span id="toc42">8. まとめ</span></h2>



<p>ここまで、<strong>Cloudflare PagesとPython API（FastAPI）を連携</strong>して、Jamstack構成のWebアプリを作る流れを一緒に見てきました。</p>



<p>ふり返ってみると、こんなステップで構成できましたね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc43">✅今回やったことまとめ</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>ステップ</th><th>内容</th></tr></thead><tbody><tr><td>1</td><td>Jamstackの考え方を理解</td></tr><tr><td>2</td><td>Cloudflare Pagesで静的なWebページを公開</td></tr><tr><td>3</td><td>Python（FastAPI）でAPIを作成</td></tr><tr><td>4</td><td>APIをRenderやFly.ioなどでクラウドにデプロイ</td></tr><tr><td>5</td><td>JavaScriptでAPIと連携し、動的なWebアプリに仕上げる</td></tr><tr><td>6</td><td>公開・動作確認・セキュリティチェックまでしっかり実施</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc44">🚀Jamstackで広がる開発の可能性</span></h3>



<p>Jamstack構成にすることで、<strong>速く・安全で・拡張しやすいWebアプリ</strong>を作ることができます。</p>



<ul class="wp-block-list">
<li>小規模なプロジェクトや個人アプリ</li>



<li>APIベースのSaaS</li>



<li>ブログやポートフォリオ、業務ツールなど</li>
</ul>



<p>Pythonを活かして、さまざまなサービスを軽量に実現できるのが魅力ですね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc45">🔄今後の展開アイデア</span></h3>



<p>今回の構成をベースに、次のようなステップアップも可能です：</p>



<ul class="wp-block-list">
<li><strong>ログイン機能</strong>を追加（OAuthやJWT連携）</li>



<li><strong>データベース（PostgreSQLなど）と接続</strong>して本格的なCRUDアプリ化</li>



<li><strong>Stripe API</strong>などと連携して、<strong>課金付きアプリ</strong>にも！</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-1 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://python.cbagames.jp/wp-content/uploads/2025/06/9d9697ea94c9608a27d0bde31599ba86-150x150.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>JamstackとPythonを組み合わせれば、「静的サイト × 動的API」という最先端の開発スタイルを誰でも体験できます。<br>ぜひ、あなたのアイデアを形にしてみてくださいね！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc46">🔗あわせて読みたい（関連リンク）</span></h2>



<p>以下は、本記事と関連性が高く、内部リンクとしておすすめの既存記事です：</p>



<ul class="wp-block-list">
<li>👉 <a target="_blank" href="https://python.cbagames.jp/2025/06/09/python-pelican-cloudflare-pages-deploy/">Pelicanでブログを作ってCloudflare Pagesにデプロイする方法</a><br>静的サイトホスティングの基本を学べる記事。Cloudflare Pages初心者に◎</li>



<li>👉 <a>【初心者向け】FastAPIの基本の使い方を解説</a><br>FastAPIをはじめて使う方にぴったりのチュートリアル</li>



<li>👉 <a target="_blank" href="https://python.cbagames.jp/2025/06/05/flask-webapp-beginner/">Python初心者がFlaskでWebアプリを作る方法｜最小構成で始めるWeb開発</a><br>Flaskとの違いや使い分けが気になる人にもおすすめ</li>



<li>👉<a target="_blank" href="https://python.cbagames.jp/2025/06/07/python-automation-for-beginners/"> Pythonでできる自動化10選｜初心者向けにやさしく解説</a><br>Jamstackと連携できる自動化スクリプトのヒントにも！</li>
</ul>



<h2 class="wp-block-heading"><span id="toc47">よくある質問（Q&amp;A）</span></h2>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">Cloudflare PagesにPythonコードをそのままデプロイできますか？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>いいえ。Cloudflare Pagesは<strong>静的ファイル専用のホスティングサービス</strong>なので、Pythonのコード（FastAPIなど）はそのままでは動きません。代わりに、API部分は<strong>別のサービス（例：RenderやFly.io）で公開し、Pagesと連携</strong>する形になります。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">FastAPIを無料で公開できるおすすめのホスティング先は？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>個人開発や検証用途なら、以下の2つが人気です：</p>



<ul class="wp-block-list">
<li><a rel="noopener" target="_blank" class="" href="https://render.com/">Render</a>：無料枠あり、使いやすいUI</li>



<li><a rel="noopener" target="_blank" class="" href="https://fly.io/">Fly.io</a>：軽量アプリ向けで世界中に配置可能</li>
</ul>



<p>どちらもGitHub連携で簡単にデプロイできます。</p>
</div></dd></dl></div>



<div class="wp-block-cocoon-blocks-faq faq-wrap blank-box block-box not-nested-style cocoon-block-faq"><dl class="faq"><dt class="faq-question faq-item"><div class="faq-question-label faq-item-label">Q</div><div class="faq-question-content faq-item-content">APIとの連携時にCORSエラーが出るのですが？</div></dt><dd class="faq-answer faq-item"><div class="faq-answer-label faq-item-label">A</div><div class="faq-answer-content faq-item-content">
<p>FastAPI側に<strong>CORS（クロスオリジン）許可設定</strong>を追加する必要があります。Cloudflare Pagesのドメインを<code>allow_origins</code>に設定することで、ブラウザからのアクセスが許可されます。</p>
</div></dd></dl></div>
]]></content:encoded>
					
					<wfw:commentRss>https://python.cbagames.jp/2025/06/09/cloudflare-pages-python-api-jamstack/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
