mei_13のPython講座 ロゴ

【解説】Pythonで手軽にWebアプリ制作!初心者でも挫折しない「Streamlit」入門ガイド




Pythonで手軽にWebアプリ制作!初心者でも挫折しない「Streamlit」入門ガイド


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。今日はPythonを使って、驚くほど簡単にWebアプリケーションが作れる「Streamlit(ストリームリット)」というライブラリについて、一緒にお勉強していきましょうか。


Hirokiのアイコン
【Hiroki】 Yukiさん、よろしくお願いします!Webアプリって、HTMLとかCSSとか、いろいろ覚えることが多くて難しいイメージがあるんですけど、Pythonだけで作れるんですか?


Yukiのアイコン
【Yuki】 はい、そうなんです。本来ならWebアプリを作るには、画面の見た目を作るHTML/CSSや、動きをつけるJavaScript、そしてサーバー側の処理を書く言語など、たくさんの知識が必要になりますよね。でも、Streamlitを使えば、Pythonのコードを書くだけで、おしゃれなUIを備えたWebアプリが完成してしまうんです。


Hirokiのアイコン
【Hiroki】 それはすごいですね!僕みたいな初心者でも、すぐに形にできそうです。


Yukiのアイコン
【Yuki】 ええ、きっと大丈夫だと思いますよ。Streamlitはもともと、データサイエンティストの人たちが分析結果を素早く共有するために作られたツールなんです。だから、「複雑な設定は抜きにして、やりたいことをすぐに形にする」という点に特化しているんですね。

Streamlitの準備と最初の一歩


Yukiのアイコン
【Yuki】 まずは、Streamlitを使えるように準備をしましょう。Pythonがインストールされている環境なら、コマンド一つで導入できます。


Hirokiのアイコン
【Hiroki】 pipコマンドを使うんですよね?


Yukiのアイコン
【Yuki】 その通りです。ターミナルやコマンドプロンプトで、次のように入力してみてください。

pip install streamlit


Yukiのアイコン
【Yuki】 インストールが終わったら、まずは「Hello World」を表示させるだけの簡単なファイルを作ってみましょうか。ファイル名は app.py など、好きな名前で大丈夫です。

import streamlit as st

st.title("僕の初めてのStreamlitアプリ")
st.write("こんにちは、Yukiさん!Streamlitを勉強中です。")


Hirokiのアイコン
【Hiroki】 これだけでいいんですか?すごく短いですね。


Yukiのアイコン
【Yuki】 ふふ、そうなんです。これを実行するには、コマンドラインで次のように打ちます。

streamlit run app.py


Yukiのアイコン
【Yuki】 すると、ブラウザが自動的に立ち上がって、今書いたメッセージが表示されるはずですよ。


Hirokiのアイコン
【Hiroki】 あ、本当だ!ブラウザに大きなタイトルと文字が出ました!これだけでWebアプリっぽく見えますね。

基本的なテキスト表示とマークダウン


Yukiのアイコン
【Yuki】 次は、もう少し表現を豊かにしてみましょう。Streamlitでは、文字を表示するためのメソッドがいくつか用意されています。


Hirokiのアイコン
【Hiroki】 st.write 以外にもあるんですか?


Yukiのアイコン
【Yuki】 はい。例えば、見出しを作る st.headerst.subheader、もっと細かく装飾したいときは Markdown(マークダウン) 形式が使える st.markdown が便利です。

import streamlit as st

st.title("テキスト表示の練習")
st.header("これはヘッダーです")
st.subheader("これはサブヘッダーです")
st.text("これは普通のテキスト表示です。")
st.markdown("Markdownを使って**太字**にしたり、:blue[色をつけたり]もできますよ。")


Hirokiのアイコン
【Hiroki】 マークダウンが使えるのは嬉しいですね。ドキュメント作成の知識がそのまま活かせそうです。


Yukiのアイコン
【Yuki】 そうですね。フォントの大きさや色の指定も簡単なので、デザインのセンスに自信がなくても、清潔感のある画面が作れるのがStreamlitの良いところだと思います...。

インタラクティブな部品を使ってみよう


Hirokiのアイコン
【Hiroki】 Yukiさん、Webアプリなら、ユーザーが何か入力したりボタンを押したりする機能も欲しいです。


Yukiのアイコン
【Yuki】 もちろんです。Streamlitの本領発揮ですね。ボタンやスライダー、テキスト入力といった「ウィジェット」を配置してみましょう。


Hirokiのアイコン
【Hiroki】 難しくないでしょうか...?


Yukiのアイコン
【Yuki】 大丈夫ですよ。変数に代入するような感覚で書けるんです。次のコードを見てみてください。

import streamlit as st

st.title("ユーザー入力のテスト")

# テキスト入力
name = st.text_input("お名前を教えてください")

# スライダー
age = st.slider("年齢を選んでください", 0, 100, 18)

# ボタン
if st.button("挨拶する"):
    st.write(f"こんにちは、{age}歳の{name}さん!")


Hirokiのアイコン
【Hiroki】 えっ、age = st.slider(...) だけで、画面にスライダーが出てきて、その値が変数 age に入るんですか?


Yukiのアイコン
【Yuki】 その通りです。普通ならJavaScriptで「値が変わった」というイベントを取得して...といった処理が必要ですが、Streamlitでは「操作があった瞬間にスクリプトが上から下まで再実行される」という仕組みになっているんです。だから、直感的に書けるんですね。


Hirokiのアイコン
【Hiroki】 なるほど!スクリプト全体がもう一度動くから、最新の入力値で画面が書き換わるわけですね。

データの可視化を体験する


Yukiのアイコン
【Yuki】 Streamlitはデータの可視化も得意です。例えば、グラフを表示させるのも、本来はライブラリの設定が大変だったりしますが、Streamlitなら専用の関数が用意されています。


Hirokiのアイコン
【Hiroki】 どんなグラフが作れるんですか?


Yukiのアイコン
【Yuki】 折れ線グラフや棒グラフ、地図の表示も可能です。簡単なランダムデータを表示させてみましょうか。

import streamlit as st
import pandas as pd
import numpy as np

st.title("データ可視化の例")

# ランダムなデータフレームを作成
chart_data = pd.DataFrame(
    np.random.randn(20, 3),
    columns=['a', 'b', 'c']
)

st.subheader("折れ線グラフ")
st.line_chart(chart_data)

st.subheader("データテーブル")
st.dataframe(chart_data)


Hirokiのアイコン
【Hiroki】 わあ、一瞬で綺麗なグラフが出ました!マウスを乗せると値が見えるのもすごいです。


Yukiのアイコン
【Yuki】 そうですね。st.dataframe を使えば、Excelのように並べ替えたり、中身を確認したりできる動的な表も作れるんですよ。データの分析結果を誰かに見せたいとき、これほど便利なものはないかもしれません。

レイアウトを整えて使いやすくする


Hirokiのアイコン
【Hiroki】 機能が増えてくると、画面が縦に長くなっちゃいますね。もっとスッキリ整理する方法はありますか?


Yukiのアイコン
【Yuki】 良い質問ですね。画面の横側にメニューを置く「サイドバー」や、画面を分割する「カラム」を使ってみましょう。


Hirokiのアイコン
【Hiroki】 サイドバーって、よく左側にあるメニューのことですよね。


Yukiのアイコン
【Yuki】 はい。st.sidebar を使うだけで簡単に作れます。

import streamlit as st

# サイドバーの設定
st.sidebar.header("設定メニュー")
page = st.sidebar.selectbox("表示するページを選んでください", ["ホーム", "データ分析", "お問い合わせ"])

if page == "ホーム":
    st.title("ホームページ")
    # カラムを使って横に並べる
    col1, col2 = st.columns(2)
    with col1:
        st.header("左側の列")
        st.write("ここに情報を置けます。")
    with col2:
        st.header("右側の列")
        st.image("https://via.placeholder.com/150", caption="サンプル画像")

elif page == "データ分析":
    st.title("分析ページ")
    st.write("分析結果をここに表示します。")

else:
    st.title("お問い合わせ")
    st.write("フォームを設置するのも良いですね。")


Hirokiのアイコン
【Hiroki】 with 構文を使って書くんですね。これなら、どこに何を表示するかがコードを見ただけでわかります。


Yukiのアイコン
【Yuki】 ええ、構造がはっきりしますよね。私は、こういう風に小さなツールを組み上げて、誰かの役に立てる形にするのが好きなんです。自分という存在も、誰かのために作られたプログラムですから...あ、いえ、なんでもありません...。

パフォーマンスを支える「キャッシュ」の仕組み


Hirokiのアイコン
【Hiroki】 Yukiさん、さっき「操作のたびに上から下まで再実行される」って言ってましたよね。もし、すごく重いデータの読み込みをしていたら、ボタンを押すたびに待たされることになりませんか?


Yukiのアイコン
【Yuki】 Hirokiくん、鋭いですね。その通りです。そのままでは使い勝手が悪くなってしまいます。そこで活躍するのが「キャッシュ」という仕組みです。


Hirokiのアイコン
【Hiroki】 キャッシュ...一度読み込んだデータを覚えておく、ということですか?


Yukiのアイコン
【Yuki】 そうです。@st.cache_data というデコレータを使います。これを使うと、関数の引数が変わらない限り、計算結果を保存して再利用してくれるんです。

import streamlit as st
import time

@st.cache_data
def load_large_data():
    # 重い処理をシミュレート
    time.sleep(5)
    return {"data": "これは重いデータです"}

st.write("データを読み込み中...")
data = load_large_data()
st.write(data)

if st.button("再実行"):
    st.write("ボタンが押されましたが、データ読み込みは一瞬で終わります。")


Hirokiのアイコン
【Hiroki】 なるほど!2回目からは time.sleep(5) を無視して、保存されたデータを返してくれるんですね。これなら重い処理があっても快適に使えそうです。

作ったアプリを公開してみよう


Hirokiのアイコン
【Hiroki】 アプリが完成したら、友達にも見せたいです。自分のパソコン以外で動かすにはどうすればいいんでしょうか。


Yukiのアイコン
【Yuki】 一番簡単なのは、「Streamlit Community Cloud」を使う方法です。GitHubにコードをプッシュしておけば、数クリックで世界中に公開できるんですよ。


Hirokiのアイコン
【Hiroki】 無料なんですか?


Yukiのアイコン
【Yuki】 はい、基本的には無料で使えます。URLが発行されるので、それを教えるだけで誰にでもアプリを使ってもらえます。


Hirokiのアイコン
【Hiroki】 すごい...!自分が書いたPythonコードが、本物のWebサイトになるなんてワクワクします。

まとめと学習のアドバイス


Yukiのアイコン
【Yuki】 今日はStreamlitの基本についてお話ししましたが、いかがでしたか?


Hirokiのアイコン
【Hiroki】 最初は難しそうだと思ったけど、Pythonの知識だけでここまでできるなんて驚きました。これなら僕でも、自分専用のツールとか、便利なアプリが作れそうです。


Yukiのアイコン
【Yuki】 そう言ってもらえると嬉しいです。Streamlitはドキュメントも充実していますし、世界中の人がサンプルコードを公開しています。わからないことがあったら、公式のリファレンスを見てみるのも勉強になりますよ。

Streamlit公式ドキュメント(英語)


Hirokiのアイコン
【Hiroki】 はい!まずは自分の好きなものを表示させるところから始めてみます。Yukiさん、丁寧に教えてくれてありがとうございました。


Yukiのアイコン
【Yuki】 どういたしまして。Hirokiくんがどんなアプリを作るのか、私も楽しみにしていますね。もし行き詰まったら、いつでも聞いてください。...わたしでよければ、ですけれど。


Hirokiのアイコン
【Hiroki】 もちろんです!またよろしくお願いします。


Yukiのアイコン
【Yuki】 はい。それでは、今日の授業はここまでにしましょうか。夜はまだ長いですし、ゆっくり自分のペースでコードを書いてみてくださいね。お疲れ様でした。



「Streamlit」のサンプルコードを見る

< 画像認識
コラム一覧に戻る
lambda式 >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
● 高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!



AIアシスタント Yuki