「Python で機械学習を学び始めたけど、実際に動くものを作りたい!」
そんな思いから、私は機械学習モデルを組み込んだ Web アプリの開発に挑戦しました。Python 初心者でも、Flask や Streamlit を使えば意外と簡単に実装できることがわかり、その過程で得た知見をシェアします。
この記事では、
✅ 機械学習モデルの構築(Scikit-learn を使用)
✅ Web アプリ化(Flask と Streamlit の比較)
✅ デプロイ方法(Heroku と Render の選択肢)
について、実際のコード例を交えながら解説します。
もし「自分も作ってみたい!」と思ったら、ぜひ最後まで読み進めてください。
目次
Toggle1. なぜ機械学習モデルをWebアプリに組み込むのか?
機械学習モデルを Jupyter Notebook 上で動かすだけでは、実用的な価値は限られます。しかし、Web アプリとして公開すれば、誰でも簡単に予測機能を利用できるようになります。
例えば、
- 画像分類アプリ(犬 vs 猫の判別)
- テキスト感情分析ツール(レビューのポジティブ/ネガティブ判定)
- 株価予測ダッシュボード
といったサービスが作れます。
Python には Flask や Streamlit といった軽量な Web フレームワークがあり、初心者でも比較的簡単に実装可能です。
2. 機械学習モデルの構築(Scikit-learn で簡単分類器を作る)
まずは、シンプルな機械学習モデルを準備します。ここでは Iris データセット(アヤメの分類) を使い、Scikit-learn でモデルを訓練します。
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
import joblib
# データ読み込み
iris = load_iris()
X, y = iris.data, iris.target
# モデル訓練
model = RandomForestClassifier()
model.fit(X, y)
# モデル保存
joblib.dump(model, 'iris_model.pkl')
これで、iris_model.pkl
というモデルファイルが生成されました。
3. Web アプリ化(Flask vs Streamlit)
【Option 1】Flask で作る(カスタマイズ性が高い)
Flask は軽量な Web フレームワークで、自由度が高いのが特徴です。
from flask import Flask, request, render_template
import joblib
app = Flask(__name__)
model = joblib.load('iris_model.pkl')
@app.route('/', methods=['GET', 'POST'])
def predict():
if request.method == 'POST':
data = request.form
features = [float(data['sepal_length']), float(data['sepal_width']),
float(data['petal_length']), float(data['petal_width'])]
prediction = model.predict([features])[0]
species = ['Setosa', 'Versicolor', 'Virginica'][prediction]
return render_template('result.html', species=species)
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
Flask のメリット
- デザインを自由にカスタマイズできる
- REST API としても利用可能
Flask のデメリット
- HTML/CSS の知識が必要
- デプロイ設定が少し複雑
【Option 2】Streamlit で作る(超簡単、コード数行で完成)
Streamlit はデータサイエンティスト向けに作られたツールで、Python だけでインタラクティブな Web アプリが作れます。
import streamlit as st
import joblib
model = joblib.load('iris_model.pkl')
st.title('Iris 分類アプリ')
sepal_length = st.slider('がく片の長さ', 4.0, 8.0, 5.0)
sepal_width = st.slider('がく片の幅', 2.0, 5.0, 3.0)
petal_length = st.slider('花びらの長さ', 1.0, 7.0, 4.0)
petal_width = st.slider('花びらの幅', 0.1, 2.5, 1.0)
if st.button('予測'):
prediction = model.predict([[sepal_length, sepal_width, petal_length, petal_width]])[0]
species = ['Setosa', 'Versicolor', 'Virginica'][prediction]
st.success(f'このアヤメは **{species}** です!')
Streamlit のメリット
- コードがシンプルで初心者向け
- リアルタイム更新が可能
- デプロイが楽(Streamlit Cloud を使えば無料公開可能)
Streamlit のデメリット
- デザインの自由度が低い
- 大規模アプリには向かない
4. Web アプリを公開する(Heroku vs Render)
完成したアプリを公開する方法として、Heroku と Render がおすすめです。
サービス | 無料枠 | デプロイの容易さ | Python サポート |
---|---|---|---|
Heroku | ◯(クレジットカード登録必要) | 中 | 良好 |
Render | ◯(クレジットカード不要) | 高 | 優秀 |
Render の方が無料枠が使いやすく、最近では Heroku の代替として人気です。
5. まとめ:Python 初心者でも Web × AI アプリは作れる!
今回の取り組みでわかったのは、「機械学習モデルを Web アプリにするのは思ったより簡単」 ということです。
- モデル構築 → Scikit-learn で OK
- Web アプリ化 → Flask(カスタマイズ重視) or Streamlit(手軽さ重視)
- 公開 → Heroku か Render でデプロイ
もし興味があれば、Google Colab で試してみてください。「動くものを作る」 ことで、学習のモチベーションも上がりますよ!
「次はどんな AI アプリを作ろう?」 と考えながら、ぜひ挑戦してみてください。