Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Julia言語と高校数学 5日間の夏期講習会のレポート

Avatar for Shimizu Dan Shimizu Dan
December 13, 2025

Julia言語と高校数学 5日間の夏期講習会のレポート

清水 団(しみず だん)は、城北中学校・高等学校の数学科教諭・校長。
2018年頃より Julia 言語に出会い、「数学を理解するための道具」としてプログラミングを教育現場に取り入れてきた。

本セッションでは、Google Colab が Julia に正式対応したことを契機に実現した、高校数学 × Julia × クラウド環境による新しい授業実践を紹介する。
関数の可視化、最適化、統計処理、確率シミュレーションなどを題材に、紙と鉛筆中心の従来型数学授業が、どのように「探究的で自由な学び」へと変化したのかを、具体的な授業事例とともに解説する。

プログラミングは単なるスキルではなく、数学的思考を拡張するための思考の補助輪である――。
Julia 言語を用いた実践を通して、これからの数学教育の可能性と、教育現場における Julia の役割を考える。

Avatar for Shimizu Dan

Shimizu Dan

December 13, 2025
Tweet

More Decks by Shimizu Dan

Other Decks in Education

Transcript

  1. Julia 言語との関わり これまでの発信活動 発表など Julia Tokai #22 (2025/6/22 ) Julia

    言語と高校数学 https://colab.research.google.com/github/shimizudan/20250622julia- tokai/blob/main/20250622.ipynb?hl=ja Julia Tokai #21 (2025/3/21 ) 大学入試とJulia 言語 https://shimizudan.github.io/20250327tokyo-u/327001.html#/title-slide Julia tokyo #12 (2024/8/31 ) 高校数学とJulia https://shimizudan.github.io/20240831juliatokyo/ オンラインでの発信・ブログなど Zenn https://zenn.dev/dannchu X https://x.com/dannchu 3
  2. なぜJulia 言語なのか 1. 数学的記法の親和性 # 数学の式をほぼそのまま書ける f(x) = 2x +

    3 g(x) = f(sin(x))/2π 2. 高速な数値計算 複雑な計算も瞬時に実行 グラフ描画もシンプルで高速 3. 豊富な数学ライブラリ 統計、最適化、線形代数など便利です。 組み合わせ・素数パッケージなどもよく利用します。 4
  3. 転機:Google Colab 対応(2025 年3 月) 2025 年3 月6 日 Google

    Colab がJulia 言語に正式対応! これにより実現できたこと 環境構築不要 PC にJulia をインストール不要 ブラウザだけで実行可能 デバイスを選ばない PC だけでなくiPad でも利用可能 生徒が自宅でも継続学習可能 Google Classroom との連携 課題の配布・回収がスムーズ 生徒の進捗管理が容易 5
  4. 本校の教育環境 Google Workspace for Education 導入済み インフラ整備状況 教職員・生徒全員にGoogle アカウント付与 Google

    Classroom を日常的に活用 生徒はGoogle Workspace に習熟 生成AI の活用 校内で生成AI 利用ガイドラインを策定 Gemini 等の積極的活用を推進 プログラミング学習でもAI 活用を推奨 Google Colab + Classroom + Gemini + 今回はJulia 言語 6
  5. 7

  6. 8

  7. 9

  8. 今回の夏期講習会の目的・ねらい 主な教育目標 1. 数学概念の深い理解 計算だけでなく視覚化で理解を促進 抽象的な概念を具体的に体験 2. プログラミング的思考の習得 問題解決のプロセスを体験 試行錯誤を通じた学び

    3. データリテラシーの向上 データを読み取り分析する力 統計的思考の基礎 4. 自律的学習態度の育成 自分で調べ、試し、修正するサイクル AI(Gemini) を活用した問題解決 10
  9. 講習の実施概要 参加生徒数:約80 名 中学3 年生・高校1 年生 実施期間 2025 年8 月24

    日(日)〜 8 月28 日(木)の5 日間 実施形式 会場:講堂 時間:午前中50 分×2 コマ制(A 帯・B 帯) 形式:ハンズオン形式 デバイス:生徒各自のPC/ タブレット(キーボード推奨) 使用ツール Google Colab (Julia )+ Google Classroom 11
  10. 従来の数学教育との対比 観点 従来の数学教育 Julia× プログラミング教育 アプローチ 計算中心 - 公式の暗記と適用 -

    紙と鉛筆での手計算 - 計算ミスの多さ 視覚化中心 - 概念の理解を重視 - コンピュータで高速計算 - 本質的な思考に集中 理解の仕方 抽象的 - グラフは教科書の図のみ - データは少数の例題だけ - 理論先行型 具体的 - 自由にグラフを描画 - 大量のデータで実験 - 実験→理論の帰納的学習 学習スタイル 受動的 - 教師の説明を聞く - 問題を解く - 解答を確認 能動的 - 自分でコードを書く - 試行錯誤して発見 - AI(Gemini) を活用 12
  11. 5 日間のカリキュラム構成 実施形式 各日、解説PDF (スライド)とコンテンツ(.ipynb ファイル)をGoogle クラスルームに配置 簡単な解説の後、生徒はワーク(演習)に取り組む Google Colab

    上でJulia を使って実習 5 日間のテーマ Day 1 :Google Colab の紹介とJulia 言語で計算してみよう Day 2 :関数を定義してグラフを描こう Day 3 :関数の最大・最小を求めよう Day 4 :データの可視化と統計処理 Day 5 :確率とシミュレーション 13
  12. Day 1 の詳細:Google Colab の紹介とJulia 言語で計算してみよう 学習内容 Google Colab 環境の設定(Julia

    ランタイム選択) 基本的な四則演算 数学定数(π 、ℯ )と数学関数 変数を使った計算 Julia 特有の数学的記法( 2π 、 2sqrt(3) など) 演習問題 展開と計算の検証 三角関数の値の計算 手計算とJulia での計算結果の比較 14
  13. Day 1 の詳細:従来との対比 従来の数学の授業での展開計算 問題: を計算せよ 従来のアプローチ 1. 分配法則を適用して展開 2.

    同類項をまとめる 3. 計算ミスがないか何度も確認 生徒の困難点 計算ミスが多い の扱いが難しい 答えが合っているか不安 15
  14. 16

  15. Day 1 の詳細:Julia での実践 Julia でのアプローチ # 左辺をそのまま計算 left =

    (2sqrt(3) + 5) * (sqrt(3) - 1) # 展開した右辺を計算 right = 1 + 3sqrt(3) # 等しいか確認 left ≈ right # → true 生徒の学び 計算結果の即座の検証 数学的記法の自然な表現 計算過程への注目(答え合わせツールではな い) 重要なポイント Julia は「カンニングツール」ではなく「理解を 深めるツール」 まず手計算→Julia で検証→間違いがあれば考え 直す 17
  16. Day 2 :関数を定義してグラフを描こう 学習内容 Julia 言語での関数定義( f(x) = 2x +

    1 ) Plots.jl パッケージの利用 1 次関数、2 次関数、三角関数のグラフ描画 複数のグラフを重ねて比較 グラフの見た目のカスタマイズ 演習問題 2 次関数の頂点を視覚的に確認 三角関数の周期を観察 自分で面白い関数を作ってグラフ化 18
  17. Day 2 の詳細:従来との対比 従来の数学の授業でのグラフ描画 2 次関数のグラフを描く場合 1. 頂点の座標を計算 2. いくつかの点を計算して表を作成

    3. 方眼紙に点をプロット 4. なめらかな曲線で結ぶ 生徒の困難点 時間がかかる(1 つのグラフで10 分以上) 描画ミスで形が歪む 複数のグラフを比較するのが困難 パラメータを変えて実験できない 19
  18. Day 2 の詳細:Julia での実践 Julia でのアプローチ # 関数定義 f(x) =

    x^2 - 4x + 3 # グラフ描画(一瞬で完成) plot(f, xlim=(-1, 5), label="f(x) = x² - 4x + 3") # 複数のグラフを重ねる g(x) = -x^2 + 4x + 1 plot!(g, label="g(x) = -x² + 4x + 1") 生徒の学び パラメータを変えて瞬時に結果を確認 グラフの形の変化のパターンを発見 複数の関数を簡単に比較 重要なポイント 10 分 → 数秒でグラフ完成 1 つ → 何十個でも比較可能 手作業の苦労 → 数学的思考に集中 20
  19. 21

  20. 22

  21. Day 3 の詳細:従来との対比 従来の数学の授業での最適化 問題: の最大値を求めよ 従来のアプローチ 1. 平方完成: 2.

    よって最大値は のとき 生徒の困難点 平方完成のテクニックが難しい 3 次関数以上では高校範囲では解けない 理論だけで直感的理解が難しい 24
  22. Day 3 の詳細:Julia での実践 Julia でのアプローチ # 関数定義とグラフ描画 f(x) =

    -x^2 + 4x + 1 plot(f, lw=3, label="f(x)") # 数値的に最大値を探索 X = -10:0.01:10 Y = f.(X) y_max = maximum(Y) x_max = X[argmax(Y)] println("x = $x_max のとき最大値 $y_max") # 最大値の点をグラフに追加 scatter!([x_max], [y_max], ms=8, color=:red,label="最大値") 生徒の学び グラフで視覚的に理解→数値で検証 複雑な関数でも同じ手法で解ける 理論解と数値解の比較 25
  23. Day 3 の詳細:新しいアプローチの価値 従来は解けなかった問題にも挑戦可能 例:複雑な関数の最適化 従来の高校数学 微分を使っても計算が複雑 Julia でのアプローチ h(x)

    = 2sin(x) + cos(2x) plot(h, 0:0.01:2π) # グラフで全体像を把握 # 数値探索 X = 0:0.001:2π x_max = X[argmax(h.(X))] 高度な問題にも同じ手法で対応可能 視覚的理解と数値計算の組み合わせ 26
  24. 27

  25. 28

  26. 29

  27. Day 4 の詳細:従来との対比 従来の数学の授業でのデータ分析 問題:15 人のテスト結果の平均と標準偏差を求めよ 従来のアプローチ 1. 電卓で15 個の数値を足し算

    2. 15 で割って平均を計算 3. 偏差を計算して二乗 4. 分散、標準偏差を計算 生徒の困難点 計算ミスが頻発 時間がかかる(10 分以上) データの「感覚」が掴めない グラフ化は実質不可能 31
  28. Day 4 の詳細:Julia での実践 Julia でのアプローチ # テスト結果 test_scores =

    [85, 92, 78, 88, 95, 82, 90, 87, 83, 91, 76, 89, 94, 80, 86] # 統計量を一括計算 println("平均値:", mean(test_scores)) println("中央値:", median(test_scores)) println("標準偏差:", std(test_scores)) # ヒストグラムで分布を可視化 histogram(test_scores, bins=5, title="点数分布", alpha=0.7) vline!([mean(test_scores)], lw=3, color=:red, label="平均値") 生徒の学び データ全体の分布を視覚的に把握 統計量の意味を直感的に理解 大量のデータでも瞬時に処理 32
  29. 33

  30. 34

  31. Day 4 の詳細:相関分析 従来は扱えなかった高度な分析 学習時間と成績の関係を分析 # データ study_hours = [1,

    2, 3, 4, 5, 6, 7, 8, 9, 10] exam_scores = [45, 55, 60, 68, 75, 80, 85, 88, 92, 95] # 相関係数 correlation = cor(study_hours, exam_scores) println("相関係数:", correlation) # → 0.99... # 散布図と回帰直線 scatter(study_hours, exam_scores, label="データ") # 回帰直線を追加... 生徒の発見 データから関係性を見出す力 相関と因果の違いを考える 予測モデルの基礎を体験 35
  32. 36

  33. 37

  34. Day 5 の詳細:従来との対比 従来の数学の授業での確率 問題:コインを100 回投げたとき、表が出る確率は? 従来のアプローチ 理論:確率は である 実験:実際に100

    回投げて確かめる(時間がかかる) 問題:試行回数が限られる 生徒の理解 「理論上は だけど、本当?」 大数の法則を体験できない 複雑な確率問題は実験不可能 39
  35. Day 5 の詳細:Julia での実践 シミュレーションで大数の法則を体験 # コイン投げシミュレーション function simulate_coin_flips(n) heads_count

    = sum([rand() < 0.5 for _ in 1:n]) return heads_count / n end # 様々な試行回数で実験 for n in [10, 100, 1000, 10000, 100000] prob = simulate_coin_flips(n) println("$(n)回: 確率 = $(round(prob, digits=4))") end # 結果例 # 10回: 確率 = 0.4000 # 100回: 確率 = 0.4900 # 1000回: 確率 = 0.5010 # 10000回: 確率 = 0.4998 # 100000回: 確率 = 0.5001 試行回数が増えると理論値に収束する様子を体験! 40
  36. 41

  37. Julia でのシミュレーション function has_birthday_collision(n_people) birthdays = rand(1:365, n_people) return length(unique(birthdays))

    < n_people end # 10000回試行 n_trials = 10000 prob = sum([has_birthday_collision(30) for _ in 1:n_trials]) / n_trials println("30人で同じ誕生日: $(prob*100)%") # → 約70%! 43
  38. 44

  39. function estimate_pi(n_points) inside_circle = 0 for _ in 1:n_points x,

    y = rand() * 2 - 1, rand() * 2 - 1 if x^2 + y^2 <= 1 inside_circle += 1 end end return 4 * inside_circle / n_points end estimate_pi(1000000) # → 3.1415... 大学レベルの数値計算手法を高校生が体験! 46
  40. 47

  41. 今後の展望 Julia × 教育の可能性 Google Colab 対応により実現したこと 環境構築不要で誰でもすぐに始められる デバイスを選ばず学習できる Google

    Classroom との連携で授業運営がスムーズ これからの数学教育 プログラミングは「ツール」ではなく「思考の拡張」 データサイエンス、AI 時代に必要な力を育成 生徒が主体的に探究する学びへ Julia 言語は、数学教育の未来を切り拓く強力なパートナーです 51