押すたびにプログラムは上から全部やり直されるので、覚えさせないと数えられない
10〜50分準備(授業前) 動かし方を 3 通りから先に一つ選ぶ(①各自の端末に入れる ②クラウドの実行環境 ③教師の 1 台で投影し、設計だけ各自が書く)。前回と同じにしておく。③でも、この回は 05 のプログラムを教師の 1 台で一度だけ動かして見せると効果が大きい。予想が外れる場面だから。教室コードは第1回と同じものを板書する。「教師」を押す。
投影 06 の予想の分布を出してから、05 のプログラムを動かす(または 07 の説明を見せる)。予想より先に動かさない。09 の 2 つのコードは、違う 2 行を指で示す。
時間配分
この回の評価(評価規準と B・A の基準は 単元設計のページ。詳しいコードは 情報学探究マニュアル 第9節)
st.session_state を使って値を残すコードを読み、どの 2 行が効いているか言える(体験01・体験02)指導要領 高等学校 情報Ⅰ (3)「コンピュータとプログラミング」ア(イ)・イ(イ)、情報Ⅱ (4)「情報システムとプログラミング」ア(ウ)・イ(ウ)。設計指針(第2版)はこの単元で F2L4(抽象階層をもつプログラムを設計/構築できる)・F4L3(テストケースに基づき不備を確認し修正できる)・J3L1(システム開発が単なるプログラム作成と違う点)・B5L4(統一された UX をグループで設計/制作)に対応する。この回が F2L4 の場面。指針は「手続き/関数による抽象化に着目させ、自分が開発するプログラムに取り入れさせ、その効果を確認させる」としている。設定を横に寄せ、画面を分けることで、中身が読みやすくなる効果をその場で確かめさせる。
前にやった回 情報Ⅱ (4) 第11回「入口と出口は約束、中身は自由」。名前を付けてまとめると、あとから差し替えられた。情報Ⅰ (3) 第12回「プログラムの評価と改善」も、ここで一度戻る。
環境が整わない場合の進め方 この回は実機がなくても進められる。06 の予想と 10 の設計は端末の中だけで完結する。Streamlit はブラウザだけでは動かないので、05 の結果は 07 の説明で示す。第1〜5回はここまで設計として進められる。第6回だけは実機が要るので、動かし方の③を選んでいる場合は、次回までに 1 台だけ用意しておく。
ここまで、入れてもらった値はその場で使って、その場で捨ててきた。1 回ぶんの計算なら、それで足りる
では、数を数えるアプリは作れるか
3 分。「押した回数を数える」「順に足していく」ような、前の値が要るものが作れるかを問う。ほとんどの生徒は作れると思っている。そこを崩すのが今日の山場。
st.session_state の2 行で、値を残せる予想して確かめる
2 行足すだけ
人の端末から開ける
思っているのと、動き方が違う

import streamlit as st
kaisu = 0
if st.button("押す"):
kaisu = kaisu + 1
st.write("押した回数:", kaisu)
※ st.button は、押されたそのときだけ True になる部品
日本語にすると、こう書いてある
kaisu を 0 にするkaisu を 1 増やすkaisu を画面に出す情報Ⅰ (3) で書いてきた Python として、おかしなところはない
4 分 3 行の日本語まで、全員で声に出して読む。ここでは「正しく動く」と思わせたまま、次の枚の予想へ進む。
「1 ずつ増える」と思って読んでいることを確かめてから進める。
前の枚の 6 行を動かし、ボタンを 3 回押したとき、画面に出る数はどれか。当たっていなくてよい。予想を置いておくと、違ったときに気づける
選んだ人数が右に出る。「3 になる」が多いはず。分布を見せてから確かめる
進め方(5分) 選ぶ 2 分、分布を見る 1 分、確かめる 2 分。先に動かさない。
答えは「1 のまま」 押すたびにプログラムが上から全部やり直されるので、kaisu = 0 からやり直される。0 に 1 を足して 1。何回押しても 1。
実機がある教室 各自で動かして確かめる。外れた人に手を挙げさせる。ここが今日いちばん残る場面。
実機が無い教室 教師の 1 台で押して投影する。それも難しければ、次の枚の説明で示す。目標 01。
| なぜ 1 のままか | 押すたびに kaisu = 0 からやり直される。0 に 1 を足して 1。何回押しても 1 |
| なぜ全部やり直すのか | そうすれば画面がいつも新しい値になる。スライダを動かすと結果がすぐ変わるのは、この仕組みのおかげ |
| 困ること | 前の値が残らない。数える、順に足す、履歴を残す、が書けない |
| どうするか | やり直されても消えない置き場所に入れる。それが st.session_state |
4 分 「全部やり直す」のは都合のよい性質で、欠陥ではないと押さえる。第2回でスライダを動かすと結果がすぐ変わったのは、これのおかげ。
言い方 「机の上に書いたものは、次の人が来るたびに消される。消されたくないものは、引き出しに入れる」。引き出しが st.session_state。
消えない置き場所と、画面の片づけ

おぼえる | st.session_state
import streamlit as st
if "kaisu" not in st.session_state:
st.session_state.kaisu = 0
if st.button("押す"):
st.session_state.kaisu = st.session_state.kaisu + 1
st.write("押した回数:", st.session_state.kaisu)
※ 増えたのは上の 2 行だけ。「まだ無ければ 0 を入れる」。2 回目からは入れ直さないので、値が残る
分ける | st.sidebar と st.tabs
import streamlit as st
st.sidebar.title("設定")
nin = st.sidebar.slider("人数", 1, 40, 20)
t1, t2 = st.tabs(["結果", "使い方"])
with t1:
st.write("人数:", nin)
with t2:
st.write("左の設定を動かすと、結果が変わります")
7 分 左のコードは、前の枚の 6 行と並べて投影する。違うのは 3 か所。「まだ無ければ 0」「引き出しの中を増やす」「引き出しの中を出す」。
なぜ「まだ無ければ」が要るか やり直されるたびに 0 を入れ直したら、結局 1 のままになる。1 回目だけ入れる、という条件がこの仕組みの核になる。
sidebar と tabs st. の代わりに st.sidebar. と書くだけで左に寄る。st.tabs は名前を並べて、with でその中に入れる。ここが設計指針 F2L4 の効果を確かめる場面。設定を左にまとめると、真ん中は結果だけになって読みやすくなる。「読みやすくなったか」を生徒自身に言わせる。
覚えさせすぎない 何でも session_state に入れると、直すときに追えなくなる。前の値が要るものだけ。
自分のアプリで、前の値が要るものはあるか。無ければ「なし」でよい。無理に作らない。横に寄せる設定は、結果より先に決めるものを選ぶ
全員の「覚えるもの → 横に寄せるもの」が右に並ぶ。「なし」も立派な判断だと読み上げる。何でも覚えさせている人には理由を聞く
進め方(13分) 書く 5 分 → 隣と交換して「それは本当に前の値が要るか」を確かめる 4 分 → 読み上げ 4 分。実機がある教室は、書けた人から 2 行を足して動かす。
「なし」でよい 入れた値からその場で計算して返すだけのアプリなら、覚えるものは無い。無いと判断できたことを評価する。
覚えるものの例 押した回数、試した記録の一覧、前に選んだ列、入力の履歴。
横に寄せるものの例 期間の指定、しきい値、表示する件数。結果は真ん中に残す。
効果を確かめる 左に寄せる前と後で、真ん中の画面がどう変わったかを一言で言わせる。設計指針 F2L4。目標 03。
| おぼえる | if "名前" not in st.session_state: で 1 回目だけ入れる。あとは st.session_state.名前 で読み書きする |
| 入れるもの | 前の値が要るものだけ。数える、順に足す、履歴を残す。それ以外は入れない |
| 横に寄せる | st. を st.sidebar. にするだけ。設定が左、結果が真ん中に分かれる |
| 分ける | st.tabs で名前を並べ、with の中に入れる。長くなった画面が短く見える |
次回は、公開して、使ってもらう。自分の端末の中だけで動かしているうちは、自分しか使えない
2 分。次回は実機が要ることを伝える。動かし方の③を選んでいる場合は、教師の 1 台で 1 つ公開して見せる形になる、と先に言っておく。
st.session_state に入れる。「まだ無ければ」の 2 行が核3 つの目標それぞれに、できた/だいたい/まだ、を 1 つ選ぶ。右の帯にクラス全体の分布が出る
st.session_state の 2 行で、値を残せた1 分。01 が「まだ」の生徒が多ければ、次回の冒頭で 07 の図をもう一度出す。この考え方は公開したあとの動きにも効く。
一文でよい。当たっていた人は「次に覚えさせたいもの」を書く
3 分。次回は実機が要ることと、公開するものを 1 つ決めてくることを伝える。教室コードを忘れずに板書。