自学自習に配慮した Python プログラミング教科書の開発
喜多一 1) , 森村吉貴 2) , 岡本雅子 1)
1) 京都大学 国際高等教育院
2) 京都大学 情報環境機構

kita.hajime.7a@kyoto-u.ac.jp

Development of Python Programming Textbook Considerning
Self-Learning
Hajime Kita1) , Yoshitaka Morimura2) , Masako Okamoto1)
1) Institute for Liberal Arts and Sciences, Kyoto University
2) Institute for Information Management and Communication, Kyoto University

概要
京都大学では 2018 年度より全学共通科目としてプログラミング演習 (Python) を開講しており，2019 年度からはこの科目での利用を目的に教科書を開発し，以後，毎年改訂している．この教科書は授業時間以上に授業時間外学習が求められる大学の授業とプログラミングの初学者の履修を前提に自学自習に配慮して開発されている．そこでは一方で，初学者が陥りがちな躓きに配慮し，他方で簡単なプログラムを自ら設計、実装、テストできるようになることを目標としている．本稿では教科書開発の背景，編集上の考慮事項，電子化と公開，授業実践を通じた改善，残されている課題などを論じる．

踏まえて毎年度，改訂しており，2021 年度版では留学

1 はじめに生に配慮して英訳も行った*2 ．2019 年度版 [3], 2021

京都大学の教養・共通教育／全学共通科目では 2016年度に科目の編成等を見直し [1]，情報系の基礎科目

年度版 [4, 5](図 1) については京都大学学術情報リポ
ジトリ (KURENAI)[6] でも公開している．

として「情報基礎演習」を開講した．同科目は理系学

この科目はプログラミング経験のない初学者を対象部については学部・学科ごとに内容を調整して実施しとしているが，科目の目標としては「簡単なプログラているが，文系学生などを対象として [全学向] としてムを自ら設計、実装、テストできるようになること」も開講されている．この全学向科目では科目の評価基も掲げている*3 ．同科目の実践についてはその概要を準（ルーブリック）を作成し，それに沿った教科書を[7] で報告しているが，本稿では同科目用に開発してい2017 年度から開発・使用している [2]．その中で一部，る教科書について，開発の背景，編集上の考慮事項，授プログラミング言語として Python を取り上げ，導入業実践を通じた改善，残されている課題などを論じる．

的な内容も扱っている．
他方，全学共通科目としてプログラミングをより本格的に扱う科目もいくつか開講されていたが，Pythonを扱う科目がなかったことから，情報基礎演習を学んだ学生など Python を本格的に学びたい学生に提供する科目としてプログラミング演習 (Python) を 2018年度から開講し著者のうち喜多が担当した*1 ．2019

図1

年度には同科目用に教科書を開発し学生に電子版を無版 (和英)教科書 プログラミング演習 Pythom 2021 年

償で提供している．その後，この教科書は授業実践を*2 現在では別に外国人教員による英語での科目 Programming*1 2020 年度から森村が喜多と共同で，2021 年度からは 1 科目

Practice (Python) -E2 が開講されている．
*3 2023 年度の授業のシラバスは [8] 参照

増やして岡本・喜多で担当している．

554

ないため履修を途中で諦める学生が生じやすいことへ

2 大学での授業とプログラミングの学習の配慮が必要である．

大学での授業については大学設置基準で 1 単位は教科書を用いた 2019 年度の授業計画を表 1 に示

45 時間の学修を必要とする内容とされ，そのうち 15

す．第 2 回の授業で扱う内容が多いように見えるが，〜 45 時間の範囲で大学が定める時間の授業で 1 単位後の授業で繰り返し利用することを通じて学ぶことをと計算するとされている．広く実施されている週 1 コ想定している．授業は教科書に沿って単元ごとに進め

マ（2 時間), 半期 15 回で 2 単位を発給する科目ではるが，途中でタートルグラフィクスで自由な作品を作

90 時間の学修内容のうち，30 時間を授業として行い，成する課題に取り組ませるととともに，最後の数週を残り 60 時間分の学修内容は授業時間外の学習を充て

各自が設定した目標に応じてプログラムを作成するプることになる．

ロジェクトに充てる運営となっている．

プログラミングの学習についてはプログラミングを演習する環境が必要となる．各大学においてノート

4 教科書開発の背景

PC の必携化が進み，またプログラミング言語の処理

主要なプログラミング言語については，すでに多く系も無償で利用できるものが広がっており授業時間外の教科書が市販されているが，その中で敢えて独自のの学習に関して講義科目などで一般的に採用されてい教科書を開発したことについては以下の理由による．

る単位数での実施は可能である．
他方，プログラミングについては，初学者には学習においてさまざまな躓きがある [10]．授業時間外の学習での躓きは学習進度を低下を招き，また学習動機の喪失にもつながる．このため授業時間外の学習の支援がプログラミング授業実践上のポイントであり，本授業では以下の 3 点を考慮して運営している．

• 教員はプログラミングの学習について学習者のさまざまな躓きに出会い，それを授業内で解決している．この知見を暗黙知とせず教科書に形式知として記述することで授業の改善を行いたい．

• プログラミングの授業はややもするとプログラミ
ング言語，さらにはその文法の紹介に終始しがちである．他方で初学者は 100 行程度のプログラ• 予習，復習とも受講者自身で学習を進めやすい教材を準備する．

ムであっても，自分自身でプログラムを書くことに困難を感じる．そこで，数百行程度のまとまっ• 教員が即応できる授業時間内と即応が難しい授業

た量のプログラムを例示し，設計から実装，テス

時間外とで反転授業の考え方も取り入れ学習内容

トへと進むプログラム作成のプロセスを体験的にを調整する [9]．

知ってもらいたい．

• 授業中の課題，宿題などは LMS で提出させ，極• プログラミングの授業では CUI ベースの入出力力，週内に採点し個別にフィードバックする．

を扱うことが多い. しかしながら Windows など

GUI ベースの環境からコンピュータに触れ始め

3 科目設計と授業計画た初学者にとっては CUI 環境での OS の操作な対象科目は京都大学の全学共通科目の選択科目として開講している半期週 1 コマ，2 単位科目であり，前期に先の情報基礎演習を履修した学生の受講を想定して後期に配当している．
文系学部を含む全学部の学生が受講できる科目であり，またプログラミング経験を持たない学生の受講も想定しているが，他方で半期にわたってプログラミングを学ぶ科目の目標として，Python を用いて「簡単なプログラムを自ら設計、実装、テストできるようになること」も設定している [8]．

どは馴染みが少なく，応用も意識しづらい．他方
で GUI はイベント駆動の考え方でのプログラミングが求められ，フレームワークの相違などを学ぶ必要がある．

• 授業のため市販の教科書を購入させるのではなく無償で配布したい．

5 教科書開発における初学者への配慮
初学者を対象としたプログラミングについて，筆者らの研究成果 [10, 11] を踏まえ，また Python という学部の専門科目と異なり，全学共通科目では履修者プログラミング言語や標準的に提供されているライブに学部 1 年生が多く，その知識と興味関心に適合するラリなどを考慮して教科書の開発に際して以下のようこと，特定の応用領域を想定しにくいこと，必修性がな配慮を行った．

555

表 1 2019 年度の授業計画と教科書
回

授業計画

12

ガイダンス, 実行環境

3, 4

タートルグラフィクス

5, 6

Tkinter による GUI

式と変数, 制御構造

78
9, 10
11

リストの利用1213, 14
15
16

振り返り

ファイル入出力プログラム開発

Python の学術利用

各自のプロジェクト
試験
試験の講評

明示的な体験．初学者はプログラムでエラーが出2019 年度版教科書
1, 2 章3 章 (式と変数)
4 章 (制御構造)
5 章 (関数)6 章 (タートル)
7, 8 章 (GUI)9 章 (クラス)
10 章 (リスト)
11 章 (ファイル)
12 章
13 章 (numpy,matplotlib, pandas)
14 章
——
—

た時に適切な対応がとれず学習が止まりがちである．そこで典型的なエラーについて明示的に説明したり，意図的に体験し，エラーメッセージを読む演習を設定したりしている．

• 関数，クラス型オブジェクトのプログラミングに先立つ使用経験を通じた理解．タートルグラフィ
クスや GUI アプリケーションの作成を通じて，関数やクラス型オブジェクトについて，その定義のプログラミングに先行して使用経験を持たせることを通じて理解させるようにした．

• プログラミング言語の説明だけでなく，プログラムの設計やテストについて説明を含める．文献[11] で取り上げた「三目並べ」の例題について，Python で書き換え，プログラムの設計から，コーディング，テストまでのプロセス全体を体験できるようにした．これは個人プロジェクトの円滑な実施のための「型」や「ヒント」となることも期• Python 以外のプログラミング言語を混在させない．初学者にとって複数の言語を扱うことは混乱を招くおそれがあり，Python に集中して学んでもらうこととした*4待している．

• 授業での主たる進行とは別に，理解や興味の促進のための並行する話題をコラムとして記述している．こちらはまとめて別冊のコラム編として編集• 文法事項に関わるプログラムの一部ではなく，動作するソースコード全体を掲載する．文法的な事項を説明する際に，それを確認できるプログラム全体を示している例を図 2 に示す．これにより，プログラム全体を構成することに困難を抱える初学者でも単元で扱う事項の動作を確認できる．
ただし，対話的な使用も可能な Python の特性も踏まえ，多数の行に渡るスクリプト実行と動作確認をするシェルでの短い入力での対話とを併用する記述を採用した．

している．

• 多様な学部の 1 年生が多数受講することから，学習者の動機付けが重要である．学習の動機付けについての ARCS 理論 [12] などを勘案し，グラフィカルな内容として以下の 3 種類を取り上げている（図 3 参照)．
タートルグラフィクス プログラムの動作を可視化するとともに，関数の多様な使い方を理解する．また Python ではクラス指向でのプログラミングとして複数のタートルを扱うこと• キーボードやそこでの記号の読み方など基本的な事項から説明する．これは指導者とのコミュニケーションを円滑化することを通じて初学者への支援を改善するためである*5 ．

が可能であり，使用を通じてクラスオブジェクトを学ぶ役割も期待している．
さらに授業ではタートルグラフィクスを用いた自由作品の制作を課しており，その際のヒ• 関連知識としての数学との差異の説明．プログラ
ミングについては初学者であっても大学生は中学，高校レベルの数学的な知識は持っている．そこで変数，式，関数などの説明に際しては数学の知識との橋渡し（類似性と差異）に配慮した．

ントになる例題も取り上げている．

tkinter による GUI アプリケーション Python
で標準的に使え，複数の OS に対応した GUIフレームワークである tkinter を用いたアプリケーションのプログラミングを紹介してい• プログラミングに際して遭遇するエラーなどのる．これは GUI 型のアプリケーションに慣れた初学者への動機づけとともに，イベント*4 このため，HTML などにも言及しなければならない Web駆動型のプログラミングを理解してもらうこ関連の話題は取り上げていない．
*5 文献 [11] から継承し，Python 用に調整していると，時計の例題を通じてグラフィクスの描画

556

に加え自立的に動くプログラムと GUI のイ
ベント駆動との協調を説明し，個人のプロジェクト課題へのヒントとしている．
さらにファイルの扱いの際に CUI 環境でのファイルパス指定の負荷を軽減するため GUIベースのファイル選択を紹介している．

matplotlib によるグラフ作成 多様な学術分野でのプログラムの利用に配慮して matplotlibでのグラフ作成を取り上げた．またこれに先(a) タートルグラフフィクスの例

立って csv 形式のファイルを通じて数値計算を行う Python プログラムと表計算ソフトによるグラフ作成とを連携させることも取り上げている．

• このほか，コンピュータやプログラミング言語についての背景知識と学習法の説明を含めるとともに，初学者が学びやすい Python の実行環境としての IDLE の採用なども行っている．

(b) tkinter による GUI アプリケーションの例

図 2 K2PFE フォントを用いた教科書でのソースコードの記載(c) matplotlib によるグラフ描画の例
図36 組版とフォント

教科書でのグラフィカルな素材の採用

教科書の書式・組版方法にはいくつかあるが，本教科書については多様な環境で利用に配慮して，通常• 空白の代わりに空白記号 ( ）をソースコードの記の文書の形式をとった．組版は情報基礎演習の教科書述に用いることとし，文字幅を半角文字に揃えた．

[2] 用に開発したテンプレートにスタイルを追加する

組版の際には 4 文字づつ色を変えている (図 2 参形で Microsoft Word で行い，履修者への配布は PDF照)．これによりソースコードの字下げの深さを形式で行っている．

可視化するとともに，コピー＆ペーストでのソー

ただし，PDF では複数文字の空白の列について，コスコードの利用に配慮した．

ピー＆ペースト可能なその文字数の情報を持たない．

• 初学者の躓きの一つにソースコードのタイピング

このため，ブロックの記述上，字下げの深さが重要なにおける全角，半角の文字間違いがある．そこで意味を持つ Python ではソースコードの適切な記述が全角の空白を可視化するとともに半角文字と同じ難しい．そこで 2021 年度版から，この教材と実際の意味をもつ英数字や記号については下線を付与し授業での利用の両方を狙って IPA のゴチックフォン区別を容易にした．

トに改変を加える形でフォント（K2PFE）を開発し使• カンマとピリオド，コロンとセミコロンなど差異の少ない文字について差異を強調し，視認性を高用している．開発の要点は以下である．

557

めた．

また全学共通で実施される選択科目は，受講を途中• Windows では UTF-8 の利用においても標準フォで取りやめる学生が少なくない．図 5 に 2020 年度のントではバックスラッシュコードに円記号の字形

授業における課題の提出状況を示す*6 ．毎回 2 つほどが用いられている．授業では Mac ユーザも居り，課題を課しているがタートルグラフィクスの単元に入混乱を招くため，バックスラッシュについては本

る 6 回目以降で提出数の減少が目立つ．大学が実施す来の字形としている．

る授業評価アンケートでもこのあたりからプログラム

なお，このフォントの導入により，学生が課題として提出するプログラムでの字下げの質が向上した．また教員側ではソースコードを含む教材の編集効率が改善した．の行数が多くなることを指摘する意見を頂いた．そこ
で，2021 年度からはリストの単元を関数やタートルグラフィクスより前に移動することで，プログラムの行数の急増を緩和し，それを踏まえて教科書も見直した．併せて，この単元が終了した段階で複数の課題か7 電子版での提供・ライセンス・公開ら選択する形で力試しの課題を追加導入した．対象と本教材は作成当初から，学生には電子版を無償提供することを意図していた．ページ数が多く，カラーの図も多用するため出版社からの出版は費用面で不適当なこと，次に述べる授業実践を通じた継続的改訂を考えていたことによる．
また，この授業は履修希望者が教室定員を超えていることから履修できなかった学生への学習機会を提供することや，文献 [11] を知る研究者から，同書のPython 版が臨まれるという意見を得ていたことから教科書を公開した．自由な利用に配慮してクリエイなる学生が異なるので比較は難しいが 2021 年度以降の受講状況は改善している．なお，力試し課題については 2023 年度版の教科書に反映させている．
このほか，プログラミングの最初の段階 (3 章, 4 章）
で例題として四則演算を用いた平方根の近似計算を取り上げた．授業では口頭での説明も行うため特に支障はなかったが，自学自習で使う際に躓きとなるとの指摘を複数頂いた．これについては 2023 年度版の教科
書では内容は変えないものの題材の導入時の説明を丁寧にするようにした．

ティブコモンズライセンス（表示 - 非営利 - 改変禁止

CC BY-NC-ND）を付与している [13]．
公開のプラットフォームとしては，付与される URLが安定して運用されることから教材の公開への利用の可否を確認したうえで京都大学学術情報リポジトリ

KURENAI[6] を選んだ．このサイトでは 2019, 2021
両年度版の合計で 103 万件を超えるダウンロード(2023/9/21 現在) があるなど多数の利用を頂くとともに，優秀教材としても評価された [14]．

8 授業実践を通じた改善
図4

先のフォント開発も授業実践を通じた改善である

教材改善ループが，学生の受講を通じた教材と授業計画の改善も行われている．本授業では自由な課題も課しており，教材は単元の内容紹介だけでなく，自由課題へのヒントの提供も担っている．このため授業での学生の躓きへの配慮に加え，自由課題を通じた学生の興味・関心の対象も可能なものは教科書に反映している．授業実践を通じた教科書の改善サイクルを図 4 に示すが，教材改善はまず毎回の授業で補足資料や追加課題など提供し，それを毎年度まとめて翌年度の教科書の改訂に反映している．

9 おわりに
本稿では静的なメディアである教科書について報告
したがプログラミングにおける操作も作成したプログ
ラムの実行も元来，動的なものである．この点について，静的なメディアでは分かりにくい点があり，授業では操作の様子を録画したものなどを動画教材として*6 この年度はコロナ禍のため全面的なオンライン授業として実施し，教室を用いないため履修定員の制限をなくしたことか
ら当初 200 人程度が科目に登録した．

558

Number of Submissions

250[4] 喜多，森村，岡本: プログラミング演習 Python

2002021,150(2021)

http://hdl.handle.net/2433/265459[5] H. Kita, Y. Morimura and M. Okamoto:100

Programming

50

Practice

Python2021,

http://hdl.handle.net/2433/265460 (2021)

0123456789

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

Assignment Order[6] 京 都 大 学 学 術 情 報 リ ポ ジ ト リ (KURENAI)

図 5 2020 年度の授業での課題の提出状況

https://repository.kulib.kyoto-u.ac.jp/dspace/(2023/9/25

ア ク セ ス)https://www.ipsj.or.jp/award/yusyukyozai.html(2023-9-20 アクセス)[7] H. Kita, Y. Morimura and M. Okamoto: Design併用している．
また Python の利用は多方面に広がっているが，多and Practice of an Elective Python Program-様で具体的なプログラミングの応用については学習者

ming Course in General Education, abstract-

自身による継続的な学習のための適切な橋渡しが必要

book, p. 172, WCCE 2022 (2022)[8] 喜 多 ，森 村：プ ロ グ ラ ミ ン グ 演である．
さらに，大規模言語モデルに基づく生成 AI の利用

習(Python)

年 度 シ ラ バ ス,2023

が多方面で注目されているが，プログラミングの支援

https://www.k.kyoto-u.ac.jp/external/はその応用として注目されている (例えば [15])．これ

open_syllabus/la_syllabus?lectureNo=52731

をどのように活かすかも重要な課題である．

(2023/9/25 アクセス)[9] 喜多, 岡本：プログラミング教育における反転謝辞

授業の一構成法, AXIES: 大学 ICT 推進協議会

教科書で利用している K2PFE フォントは著者のう2016 年度 年次大会 (2016)

ち喜多と京都市立芸術大学教授，辰巳明久氏，同非常[10] 岡本: 模倣の重要性に着目した初学者向けプログ

勤講師，楠麻耶氏，京都大学助教 (当時)，元木環氏とのラミング教育の研究, 京都大学 学位論文 (2014)

共同研究により開発したものです．また，2021 年度版[11] 喜多，岡本，藤岡，吉川: 写経型学習による C 言の教科書の英訳については京都大学国際高等教育院附

語プログラミングワークブック, 共立出版 (2012)

属データ科学イノベーション教育研究センターから経[12] ジョン・ケラー著, 鈴木克明（監訳）: 学習意欲を費の補助を得て実施しました．さらに，2021 年度からデザインする：ＡＲＣＳモデルによるインストラの力試し課題の追加については，本授業について 2021

クショナルデザイン, 北大路書房 (2010)

年 9 月に開催した京都大学学術情報メディアセンター[13] CreativeCommons—

表 示-

非 営 利

セミナーでの報告について熊本大学教授（当時）鈴木- 改 変 禁 止 4.0 国 際— CC BY-NC-ND

克明氏に頂いたご意見を参考にしました．ここに謝意

4.0 https://creativecommons.org/licenses/by-を表します．本研究は JSPS 科研費 JP 21K02880 のnc-nd/4.0/deed.ja (2023/9/25 アクセス)[14] 情報処理学会 2021 年度優秀教材賞, 喜多一、森助成を受けたものです．

村吉貴、岡本雅子（京都大学）, Python プログラ

参考文献

ミング学習のための教科書の作成と無料公開,[1] 京 都 大 学 国 際 高 等 教 育 院: 新 し く な っ た 教[15] 倉光 君郎: ChatGPT と Colab の連携: プログラ養・共 通 教 育 (2019) https://www.z.k.kyoto-

ミング教育における ChatGPT の活用事例, 【第u.ac.jp/pdf/link/link0736.pdf?1566378573

65 回】 大学等におけるオンライン教育とデジタ(2023/9/21 アクセス)

ル変革に関するサイバーシンポジウム「教育機関[2] 喜 多 ，北 村 ，日 置：情 報 基 礎 演 習 2017,
http://hdl.handle.net/2433/224813 (2017)[3] 喜 多:プ ロ グ ラ ミ ン グ 演 習 Python 2019,http://hdl.handle.net/2433/245698 (2020)

559

DX シンポ」, 国立情報学研究所 (2023)