【製造業Python】Streamlitで業務アプリを作る方法|入力フォーム・CSV集計コード付き

Pythonはできるけど、
Webアプリってどう作るんだろう?

こんな悩みに答えます。

私も、Streamlitを知る前はそう思っていました。

FlaskやDjangoでWebアプリを作る方法を調べると、HTML/CSS/JavaScriptも必要で、学習コストが高くてなかなか手が出せません。

でも製造現場では「Excelじゃなくてブラウザで入力できるフォームを作りたい」「CSVをアップロードしたら集計が見えるダッシュボードが欲しい」というニーズが山ほどあります。

私が生産管理を担当していた頃も同じ悩みがありました。

検査記録を共有フォルダのExcelに入力させていたのですが、同時編集でファイルが壊れる、どのバージョンが最新かわからない。そういう問題に毎月当たっていました。

Streamlitを使うと、PythonのコードだけでWebアプリが作れます。HTML/CSSの知識は不要。streamlit run app.py の1コマンドで起動して、ブラウザ上で動く入力フォームやダッシュボードを自分で作れます。

この記事では、製造業・事務系の業務アプリをStreamlitで作るための実装コードを、入門から実用例まで解説します。

この記事を読むとできること

  • Streamlitのインストールと最初の起動ができる
  • 入力フォーム・ボタン・テーブル表示の基本コードを理解する
  • CSVをアップロードして集計するアプリを作れる
  • 検査記録の入力フォームアプリを実装できる
  • 作ったアプリを社内で使わせる方法がわかる

製造業でPythonをどんな業務に使えるか、全体像を確認したい方はこちらも参考にしてください。
製造業でPythonを使って自動化する方法|非エンジニアが現場で実践した5場面

StreamlitがPython業務アプリに向いている理由

Web開発知識なしでアプリが作れる仕組み

StreamlitはPythonのライブラリで、Pythonスクリプトをそのままブラウザで動くWebアプリに変換してくれます。

HTMLもCSSもJavaScriptも不要。
いつものPythonの書き方でUIを作れるのが最大の特徴です。

import streamlit as st

st.title("検査記録入力フォーム")
name = st.text_input("担当者名")
value = st.number_input("測定値")
st.write(f"{name}さんの測定値:{value}")

これだけで、担当者名と測定値を入力できるフォームがブラウザ上に表示されます。

製造業・事務系での活用シーン

Streamlitで実現できる業務アプリの例を挙げると、こういったものが作れます。

  • 検査記録の入力フォーム(記録→CSVに保存)
  • 生産実績CSVをアップロードして集計・グラフ表示
  • 在庫数をチェックして発注アラートを表示するダッシュボード
  • 月次KPI入力フォーム(入力値を集計して棒グラフ表示)
  • 社内問い合わせ受付フォーム

Excelが苦手な操作(複数人同時入力・ブラウザでの共有・スマホからの入力)を簡単に実現できるのがStreamlitの強みです。

準備:インストールと最初の起動

意外と簡単です。
私も実行してみたときは「こんなに簡単なのか」と思いました。

pipインストール

ターミナル(Windowsの場合はコマンドプロンプトまたはPowerShell)で以下を実行します。

pip install streamlit

インストールに1〜2分かかります。完了したら動作確認をします。

streamlit hello

ブラウザが自動で開いてStreamlitのデモ画面が表示されれば成功です。

最初のアプリを1分で起動する

以下の内容を app.py というファイル名で保存してください。

import streamlit as st

st.title("最初のStreamlitアプリ")
st.write("動きました!")

保存したら、同じフォルダでターミナルを開いて実行します。

streamlit run app.py

ブラウザで http://localhost:8501 が開き、「最初のStreamlitアプリ」というタイトルが表示されれば準備完了です。

基本コード:業務アプリに使うUIパーツ

テキスト入力・数値入力・ボタン

業務フォームの定番パーツです。

import streamlit as st

# テキスト入力(担当者名、品番など)
name = st.text_input("担当者名", placeholder="山田 太郎")

# 数値入力(測定値、数量など)
value = st.number_input("測定値", min_value=0.0, step=0.1)

# ドロップダウン選択(ライン選択、品番選択など)
line = st.selectbox("ラインを選択", ["ラインA", "ラインB", "ラインC"])

# ボタン
if st.button("記録する"):
    st.success(f"{name}さんの入力を受け付けました({line}・測定値:{value})")

st.text_input / st.number_input / st.selectbox / st.button が業務フォームの4大パーツです。

テーブル表示とCSVアップロード

import streamlit as st
import pandas as pd

# CSVファイルのアップロード
uploaded = st.file_uploader("CSVファイルをアップロード", type="csv")

if uploaded is not None:
    df = pd.read_csv(uploaded, encoding="cp932")
    st.dataframe(df)                    # テーブル表示
    st.write(f"合計行数:{len(df)}行")

st.file_uploader でブラウザからCSVをドラッグ&ドロップで読み込めます。st.dataframe は列幅の調整やソートができるインタラクティブなテーブルとして表示されます。

実装:業務アプリを2つ作ってみる

例1:検査記録の入力フォームアプリ

どの業務に使えるか: 検査記録・不良記録・点検シートの入力が必要な業務に使えます。現場で「記録 → CSVに追記保存」が完結するシンプルなフォームです。

import streamlit as st
import pandas as pd
import os
from datetime import datetime

CSV_FILE = "kensa_record.csv"

st.title("検査記録入力フォーム")

# 入力フォーム
col1, col2 = st.columns(2)
with col1:
    name = st.text_input("担当者名")
    hinban = st.text_input("品番")
with col2:
    value = st.number_input("測定値", min_value=0.0, step=0.01)
    result = st.selectbox("判定", ["合格", "不合格", "保留"])

if st.button("記録する"):
    now = datetime.now().strftime("%Y-%m-%d %H:%M")
    new_row = {"日時": now, "担当者": name, "品番": hinban,
               "測定値": value, "判定": result}

    if os.path.exists(CSV_FILE):
        df = pd.read_csv(CSV_FILE)
    else:
        df = pd.DataFrame(columns=new_row.keys())

    df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)
    df.to_csv(CSV_FILE, index=False)
    st.success("記録しました")

# 過去の記録を表示
if os.path.exists(CSV_FILE):
    st.subheader("記録一覧")
    df = pd.read_csv(CSV_FILE)
    st.dataframe(df.tail(20))  # 最新20件を表示

このコードで「入力→CSV保存→一覧表示」が1ファイルで完結します。["ラインA", "ラインB", "ラインC"] の部分や品番・担当者名の列は自分の現場に合わせて書き換えてください。

例2:生産実績CSVをアップロードして集計するアプリ

どの業務に使えるか: 月次の生産実績CSVを報告資料用に集計したい場合に使えます。毎月のCSVを渡すだけで集計結果を表示するアプリです。

import streamlit as st
import pandas as pd

st.title("生産実績 集計ビューア")

uploaded = st.file_uploader("生産実績CSVをアップロード", type="csv")

if uploaded is not None:
    df = pd.read_csv(uploaded, encoding="cp932")

    st.subheader("データプレビュー")
    st.dataframe(df.head(10))

    # 数値列を選んで集計
    numeric_cols = df.select_dtypes(include="number").columns.tolist()
    if numeric_cols:
        col = st.selectbox("集計する列を選択", numeric_cols)
        st.metric("合計", f"{df[col].sum():,.1f}")
        st.metric("平均", f"{df[col].mean():,.1f}")
        st.bar_chart(df[col])

CSVをアップロードするだけで、列を選んで合計・平均・棒グラフが表示されます。月次報告資料の下準備に使える実装です。

製造業のCSVを読み込む際の文字コード対処はこちらで詳しく解説しています。
PythonでCSVを読み込む方法【製造業向け】Shift-JIS・複数ファイル対応コード付き

作ったアプリを社内で使わせるには

Streamlitアプリは作っただけでは「自分のPC専用」です。社内の他のメンバーに使わせるには、いくつか方法があります。

同じLAN内でアクセスさせる(最もシンプル)
自分のPCでアプリを起動した状態で、IPアドレス付きのURLを同僚に共有すると、同じ社内ネットワーク内のPCからブラウザでアクセスできます。

Streamlit Cloudで公開する(無料)
GitHubにコードをアップすれば、Streamlit Cloudで無料ホスティングができます。インターネット経由でどこからでもアクセス可能になります。

社内展開の選び方と手順の詳細はこちらで解説しています。
社内の非エンジニアにPythonツールを展開する方法|exe・Streamlit・bat配布の選び方と手順

まとめ

まず例1(検査記録フォーム)のコードをそのままコピペして streamlit run app.py で起動してみてください。動いたら、品番・ライン名・測定項目を自分の現場に合わせて書き換えるだけで実務に使えます。

StreamlitはHTML/CSSの知識がなくても、Pythonだけで業務アプリを作れる最短ルートです。製造業・事務系の業務では、これだけ覚えれば多くのアプリが作れます。

やりたいこと使うStreamlit関数
テキスト入力st.text_input()
数値入力st.number_input()
ドロップダウン選択st.selectbox()
ボタンst.button()
CSVアップロードst.file_uploader()
テーブル表示st.dataframe()
集計・指標表示st.metric()
グラフ表示st.bar_chart()

製造業でのWebアプリ活用事例はこちらで解説しています。
製造業でWebアプリを自作する方法|計算式の属人化を2時間で解決した実例

関連記事