%#DVIPDF dvipdfmx -f index.txt
\documentclass[11pt]{jbook}
\addtolength{\topmargin}{-2cm}
\addtolength{\textheight}{4cm}
\addtolength{\textwidth}{2cm}
\addtolength{\oddsidemargin}{-1cm}
\addtolength{\evensidemargin}{-1cm}
%\usepackage{listings}
%\usepackage{graphicx}
\usepackage[dvipdfmx]{graphicx}
\usepackage{listings, jlisting}
%\usepackage[sectionbib]{chapterbib}
\usepackage{ascmac}
\usepackage{longtable}
\usepackage{geometry}
\usepackage{subfigure}
\renewcommand{\bibname}{参考文献}
\geometry{textwidth=160mm, textheight=225mm}
\makeatletter
\def\maketitle{%
  \null
  \thispagestyle{empty}%
  \vfill
  \begin{center}\leavevmode
    \normalfont
    {\LARGE \@title\par}%
    \vskip 1cm
    {\Large \@author\par}%
    \vskip 1cm
    {\Large \@date\par}%
  \end{center}%
  \vfill
  \null
  \@thanks%\vfil\null
  \cleardoublepage
  }
\makeatother

\title{Ruby等を用いたプログラミング教室の手引}
\author{亀谷千香子}
\date{}



\usepackage{url}	% required for `\url' (yatex added)

\begin{document}
\maketitle

\tableofcontents



\chapter{はじめに}
 2020年度に小学生のプログラミング教育が必修化になる。文部科学省の小学校プログラミング教育の手引ではプログラミング教育で身につけたい力として「知識及び技能」、「思考力、判断力、表現力等」、「学びに向かう力、人間性等」がある。

小学生のプログラミング教育の必修化前である現在もプログラミング教室は開催されている。しかし、プログラミング教室を企画運営するための方法を手引として公開されているが、企画・運営のための情報が少ない。そのためRuby等を用いた小学生向けのプログラミング教室を運営をするための事前の準備、教えるための道具、教える方法などのまとめを手引として提案する。
\section{プログラミング教育必修化の背景}
 小学生プログラミングの必修化に向けて文部科学省では小学校プログラミング教育の手引などを公開している。プログラミング教育を導入する理由として、普段の生活の中で身近な家電、自動車にはコンピュータが内蔵されており、生活を便利にしているからである。コンピュータはプログラムで動いているため、仕組みを理解し情報を適切に活用、選択し問題を解決していくことが重要だからである。また、プログラミング教育は子供たちの可能性を広げることにもつながるからである。
\section{プログラミング教室}
プログラミング教室は1999年から2014年以降までを比べてみると、年々増加していることが分かる(図\ref{hikaku})。2013年以降からはプログラミング教室を開催している団体が急増している。プログラミング教室で学ぶ内容、プログラミング言語などについては\ref{a}、\ref{b}で説明する。


\begin{figure}[h]
  \begin{center}

\includegraphics[width=10cm]{kaisai.pdf}
\caption{プログラミング教室始時期\cite{soumu} 図5-3より引用}
\label{hikaku}
 \end{center}

\end{figure}
\subsection{内容}\label{a}
プログラミング教室で使われているものは大きく分けるとテキスト型、グラフィック型がある\cite{hon}。まず、テキスト型、グラフィック型それぞれのメリット、デメリットについて述べる。
\begin{description}
\item[テキスト型]\mbox{}\\ 
文字を並べてプログラムを作成するものである。

(例) ドリル, JavaScript, Ruby, Python, java, Cなど

\begin{table}[h]
  \begin{center}
    \caption{テキスト型}

    \begin{tabular}{|l|l|} \hline
       ○/△ & 理由  \\ \hline \hline
      ○ & 概念を表す語を追加することで表現力が大きくなる \\ 
      ○ & 入力、修正が比較的に容易 \\ 
      ○ & 複雑なプログラムも作成可能 \\ \hline
      △ & 書き方を覚える必要がある  \\ 
      △ & すぐに見てわかりにくい  \\ \hline
    \end{tabular}

  \label{tab:price}
  \end{center}

\end{table}


\item[グラフィック型]\mbox{}\\
画面上でプログラムを作成する ものである。

(例) スクラッチ, ビスケット, アルゴロジックなど
  \begin{table}[h]
  \begin{center}

 \caption{グラフィック型}

    \begin{tabular}{|l|l|} \hline
      ○ /△ & 理由  \\ \hline \hline
      ○ & 書き方、規則を覚える必要がない \\ 
      ○ & 文字を使わなくて良いため誰でも簡単に作成できる \\ \hline
      △ & 修正に時間がかかる  \\ 
      △& 複雑なプログラムを作成するのに限界がある  \\ \hline
    \end{tabular}
  
  \label{tab:price}
  \end{center}
\end{table}

  
\end{description}
\subsection{プログラミング言語}\label{b}
プログラミング言語とは、コンピュータへ指示を出すためのプログラムを作成するのに使われている言語である。プログラミングを教えるときは、教える人の対象、プログラムの難易度、参加者に作成したいプログラムに合わせてプログラミング言語を決める必要がある。主に利用されているプログラミング言語について説明する\cite{soumu}。
\begin{description}
 \item[LOGO]\mbox{}\\
Seymour A. Papert が児童の思考能力向上を目的として 1960 年代に開発されたもので、命令
文によって画面上の「タートル」を動かし、タートルの軌跡で線画を描くようになっている。
 \item[ドリル]\mbox{}\\ 
筑波大学久野、大阪電気通信大学兼宗が開発したものであり、LOGO 同様にタートルを動かし、図形などを描く機能がある。
\item[Viscuit]\mbox{}\\ 
原田康徳によって開発された手書きイラストを用いたアニメーション作成機能に特化したプログラミング言語であり、タブレットで利用可能である。

\item[Scratch]\mbox{}\\ 
MITメディアラボが開発したプログラミング言語学習環境であり、ブロックの組み合わせによってプログラミングするオブジェクト指向言語である。


\item[Blockly]\mbox{}\\  
Google が作成したビジュアルプログラミング開発ライブラリであり、ブラウザ上で動作するオープンソースのブロック型言語である。タブレットで利用可能である。
\item[Smalruby]\mbox{}\\ 
高尾宏治(ネットワーク応用通信研究所)によって開発されたRubyをもとにしたビジュアル言語である。
\item[プログラミン]\mbox{}\\ 
文部科学省が Scratch を参考に開発したものでブラウザで動作するプログラミング学習用サービスである。
\item[JavaScript]\mbox{}\\ 
Netscape Communications社によって開発され、プログラミング教室・講座では Web アプリケーションの作成に用いられることが多い言語である。
\item[Java]\mbox{}\\ 
Sun Microsystemsによって開発され、プログラミング教室・講座では Android アプリ作成に用
いられるケースが多い言語である。
 \item[Python]\mbox{}\\ 
Guido van Rossumによって開発され、
全米の大学では初心者にプログラミングを教育する教材
として最もカリキュラムに取り入れられている言語である。

\item[C]\mbox{}\\ 
ブライアン・カーニハンとデニス・リッチーによって開発され、
現在もっとも普及しているプログラミング言語である。
国際標準化機構(ISO)や日本工業規格(JIS)にも標準とし
て採用されている。

\item[HTML]\mbox{}\\  
CERN（欧州合同素粒子原子核研究機構）の研究者であったティム・バーナーズ・リーによって開発・公開され
OS X や iOS 向けのアプリケーションの開発に利用でき
る言語である。現在は改定版である HTML5 が多く利用されており、
HTML5 では高度な Web アプリも作成可能である。


\end{description}
\subsection{プログラミング言語の割合}
総務省によるとプログラミング教室で使用されているプログラミング言語の割合はScratchが最も高い(図\ref{wariai})。その理由は、短期間での学習に適してると考えるためと述べられている\cite{soumu}。


\begin{figure}[h]
  \begin{center}

\includegraphics[width=10cm]{aaa.png}
\caption{教室・講座で利用されているプログラミング言語\cite{soumu} 図5-11より引用}
 \label{wariai}
 \end{center}
 
\end{figure}


\subsection{使用されている機器}
プログラミングで使用されているものの割合は図\ref{kizai}である。多くのプログラミング教室ではPCが多く使用されている。その他にもラズベリーパイという小型のボードコンピュータである(図\ref{razu})。LinuxなどのOSを搭載すれば、インターネットアクセスができるものである。
 \begin{figure}[h]
  \begin{center}

\includegraphics[width=8cm]{kizai.pdf}
\caption{教室・講座で使用されている機材\cite{soumu} 図5-14より引用}
 \label{kizai}
 \end{center}

\end{figure}

   \begin{figure}[h]
  \begin{center}

\includegraphics[width=8cm]{kikai.jpg}
\caption{ラズベリーパイ}
 \label{razu}
 \end{center}

\end{figure}

\section{プログラミング教育の課題について}\label{kadai}
プログラミング教育では、プログラミングツールに関する課題、プログラミング環境に関する課題、プログラミング教育を行う教員の課題などが報告されている\cite{niigata}。
プログラムを分かりやすく指導するとなると道具、教材のだけではなく、行う場所、指導する人などの課題がでてくる。その点を踏まえて第\ref{kousatu}章では課題とプログラミング教室の企画、運営をした結果の考察をまとめた。

%\section{手引について}
%この手引の作成は平成30年度から東北公益文科大学(以下本学)の文部科学省「私立大学ブランディング事業」の1つで行った小学5、6年生向けプログラミング教室の「Rubyてらこった」の活動を基準としている。実際にRubyなどを用いたプログラミング教室を企画し、運営していくのに役立つ手引をとして利用してもらうことを目的としている。そのために、企画するうえでの計画の立て方、プログラミング教室を通して身につけてほしい力、小学生に教える範囲の決め方などを述べている。運営では、教えるために必要な役割、授業の準備、教えるための方法を述べている。また、\ref{teian}章ではRubyてらこったの活動をふまえての企画、運営を提案として一例を挙げている。
\subsection{手引作成の背景}\label{kaisai}
多くのWebサイトにてプログラミング教室を開催するための方法が公開されている。公開されている情報としてはとしてはプログラミング教育の視点、使用教材、所要時間などである。しかし、その情報では足りない部分が多くあると考えた。例えば、小学生にプログラミングを教える体制、教え方の方法など具体的な内容などである。そのため、実際にプログラミングを教える企画を立ててから授業を行うための手引が必要であると考えた。

\subsection{対象読者}
この手引は、プログラミング教室を企画、運営をしようと考えている人である。\ref{kaisai}で述べたようにプログラミング教室を行うための情報が不十分である。そのため、準備方法、広報、他の機関との連携についてまとめている。

\subsection{手引の構成}
はじめてプログラミング教室を企画、運営する人にも分かりやすいように決める順番で述べている。そのため手引の構成としては以下のようになっている。
\begin{itemize}
\item プログラミング教育の実施のための必要項目 

活動する人の必要な知識や能力、プログラミング教室を行う目的、小学生に身につけてほしい力、日程の立て方について
\item 運営

企画したものを運営するための役割、業務内容、授業準備について
\item 授業をするための方法

授業の流れ、当日の準備について
\item 参加した小学生の感想

全5回の授業に参加した小学生が楽しかったと感じた部分、難しいと感じた部分について
\item 教えるための要点

小学生に教える時の授業担当者、アシスタントそれぞれの注意点について
\item 行うための一例

Rubyてらこったの活動のように企画、運営をするために何にどのくらいの時間をかけて準備しているのか、円滑の活動を行うための方法について



\end{itemize}
\chapter{プログラミング教室実施のための必要項目}
本章では、プログラミング教室実施のために必要な教える人の知識・必要な力と計画の立て方について述べる。教える人の知識・必要な力については、組織の利点を活かしてどのようにプログラミング教室を企画するかを述べていく。計画の立て方については、プログラミング教室を行うための目的に沿って効果的に進めるための方策について述べる。



\section{教える側が必要なこと}
プログラミング教室の活動を行う時に必要で必要なこととして「知識」「教える能力」「発想力」「時間管理能力」「伝える力」5つが必要であるのではないかと考える。プログラミング教室で教える場合はただプログラミングが得意である人を優先するのではなく、小学生に合わせて楽しく学んでもらえるように工夫できる人を優先した。その理由は以下のような理由である。

\subsection{プログラミングの知識}\label{tisiki}
プログラミング教室で実際に教える時は小学生の質問に対して分かりやすく教えることができることが前提になっている。そのために、ただ内容を理解しているだけではなく、自分なりに考えて教えられる程度に理解していなければならない。 
本学では2年次に1年間必修科目の基礎プログラミングという必修科目がある。その科目でプログラミング言語のRubyを学ぶ。1年間で学ぶ内容は以下の内容である\cite{naiyou}。本学の授業では13の範囲まで学ぶが、Rubyてらこったで教える授業の範囲は1から7までである。

\begin{enumerate}
\item 計算システムの基本操作と概念 

基本的なコマンド(コンピュータに特定の機能の実行を指示する命令)操作、Unix(OSの一つ)について、ファイル、ディレクトリの概念

\item プログラミングの基礎
 
インタプリタ、プログラミングについての基礎

\item 変数と値 

変数と値処理の方法

\item 演算子

プログラミングの加減乗除の手法

\item 制御構造

プログラムで命令が実行される流れを定める手法
\item 出力処理を行うメソッド

決めた複雑な処理を行う手法

\item 配列
 
多くのデータをまとめて保持する手法
\item パターンマッチング (正規表現) 

データに含まれる文字列のパターンを指定する手法
\item ファイルの入出力

数にファイルを指定した場合はそのファイルから1行ずつ内容を読み込む手法
\item 計算機の内部構造
  
2進数、16進数、文字コードについて
\item ハッシュ
 
任意の値に任意の値を結び付ける手法
\item 再帰

ハノイの塔のような再帰処理の仕組みと手法
 
\item CGI

HTML文書内にあるデータ入力窓とそれらを受け渡すスクリプト名を書いておき、ボタンを押すとそのスクリプトに入力値が渡るような手法
\end{enumerate}

\subsection{教える能力}

 小学生の一人一人理解している部分、キーボードの操作の速度などが違うため、それぞれに合わせて教える必要がある。小学生とコミュニケーションを取りながら分かりやすく教えるため、Rubyてらこったのメンバー募集は小学生と関わること、教えることが比較的に得意な学生を優先的にした。例えば、教職課程を履修している学生、学習支援サークルとして小中学生に学習を教えている学生、2年次の必修の基礎プログラミングのティーチングアシスタント(以下TA)をしている学生などである。

\subsection{発想力}
発想力では、どうしたら小学生がプログラムを楽しく、分かりやすく学んでもらうことができるのかをイメージしてアイディアを出す必要がためある。例えば、誰かが授業で使う資料を見せてきた時にこうしたらもっと良くなるなど意見を1つ出すだけでも分かりやすさというのが変わってくる。また、小学生の質問に対してどうしたら分かりやすく伝わるかなど考える必要がある。

\subsection{時間管理能力}

業務で割り振られたものを完璧に締め切りまでで完成させるためには、どのくらいの準備時間がかかるのかということを意識しなければならない。締め切りで提出すればいいという意識で作業をすると良い物ができない。そのために、ただ作業をするのではなく、他のメンバーから確認してもらい改善、修正する時間を作るということが必要になってくる。作成物の修正の時間のことを考えて余裕をもって作成をしなければならなので逆算をして物事を考えてくる必要がある。また、作業以外にも他にしなければならないことがあると考えられるため時間の管理というのを意識していくことが大切になる。
 
\subsection{伝える力}

ここで使う伝える力とは、正確に相手に伝えるということを意味している。どの業務も自分一人だけで作業できることは少ない。そのため、メンバーで協力、分担しながら作業を進めていくことのほうが多い。そのためどの作業がどこまでできているのかなど具体的にメンバーに伝えるということは大切である。




\section{プログラミング教室の目的と小学生に身につけてほしい力}
プログラミング教室を行う目的とプログラミング教室を通して身につけてほしい力について述べていく。

\subsection{Rubyてらこったと活動の目的}
昨年度から大学のブランディング事業の一つの地域資源を活用する人材育成の研究としてプログラミング言語のRubyを用いたプログラミング教室の企画・運営を行ってきている\cite{terakotta}。目的は、庄内地方を中心とした地域の若者達に情報技術を教え、情報社会を生き抜くために必要な力を身につけていくことである。小学生のうちからプログラミング言語Rubyを用いた本格的なプログラミングを学ぶ機会を提供したいと考えているためである。小学生でも対象は小学5、6年生にした。その理由としては、キーボード入力、操作の関係からアルファベットを習い終わっている方が良いと考えたためである。

授業は大学生が教える。また、小学生1人に対して大学生が1人でサポートできるような体制にした。その理由としては、小学生一人一人に合わせて教えることができるようにしたいと考えたからだ。授業内容は比較的に簡単な内容であり、授業を通して簡単なゲームプログラムを作成できるように内容を組み立てた。

\subsection{授業を通して身につけてほしい力}\label{tikara}
小学生のプログラミング教育で身につけたい力として「知識及び技能」、「思考力、判断力、表現力等」、「学びに向かう力、人間性等」が述べられている\cite{monbu}。
その3つの力に追加してRubyてらこったで身につけてほしい力についても述べる。

\begin{description}
 \item[知識及び技能]\mbox{}\\ 
生活でコンピュータが活用されていくことや、問題の解決には必要な手順があること
 \item[思考力、判断力、表現力等]\mbox{}\\
発達の段階に即してプログラミング的思考力を育成すること
 \item[学びに向かう力、人間性等]\mbox{}\\
発達段階に即して、コンピュータの働き、よりよい人生や社会づくりに生かそうとする態度を涵養すること


\end{description}
この項目に加えRubyてらこったで身につけたい力は以下の通りである。
\begin{description}

 \item[工夫する力]\mbox{}\\
授業で使うサンプルのプログラムを自分で考えて、工夫をして、他の人とは違うプログラムをつくれるようになること
 \item[伝える力]\mbox{}\\ 
伝える力としては、2つの意味がある。1つ目は、自分の作成したプログラムの発表を通して工夫し点、頑張った点など伝えられるようになれること

2つ目は、周りの人が作成したプログラムの発表を聞いて感想など伝えられるようになること


\end{description}

\subsection{教える範囲}
教える範囲としては小学生が比較的に理解しやすいところであり、例えばクイズ、くじ引きのゲームを自分の力で考えられるようにするために必要なものを教える範囲とした。
\begin{description}
 \item[出力メソッド (print, printf, puts)]\mbox{}\\ 
アスキーアートのように入力したものをそのまま出力させるために必要と判断した。

\item[文章処理メソッド(gets, chomp)]\mbox{}\\
キーボードに打ち込んだ値を文字列として取得するゲームプログラムを作るときに必要と判断した。

\item[制御構造(while, if, elsif, else)]\mbox{}\\
レジスタープログラムなどの入力したものを繰り返しの処理を行うときに必要と判断した。
また、クイズの結果の判定や条件で繰り返しを行うために使うため必要であると判断した。
 \item[配列及び乱数(srand, rand)]\mbox{}\\
2つを組み合わせてクイズ問題を用意して乱数で選ばせたり、ジャンケンの手の内をランダムに出したりするために使うので必要と判断した。

 \item[sleep関数(sleep)]\mbox{}\\
プログラムを時間を指定して一時停止することができるので小学生が楽しむことができるのではないかと判断した。


\end{description}



\section{授業・日程}
小学生に教える順番、授業時間の設定、開催日時について述べる。

\subsection{教える順番と教える時間}
基本的な操作から徐々に難しい内容になるよう教える順番を設定している。また、5回目で自由に作成し、発表できるようなプログラムを作成できるように組み立てた。

教える時間は1回の授業で2時間としている。小学生が集中して授業ができるように大体45分から50分ぐらい授業をしたら約15分位の長めの休憩を入れるようにした。
\begin{table}[h]
  \begin{center}

    \caption{授業内容}

    \begin{tabular}{|l|l|l|} \hline
        回数 &内容&作成プログラム  \\ \hline \hline
      1回目 & 基本操作& 画面出力  自己紹介プログラム \\
      2回目 & ループ  &繰り返し処理のプログラム \\
      3回目 & 配列  &データ処理のプログラム  \\
      4回目 & 条件分岐 &条件のあるプログラム  \\
      5回目 & まとめ &習ったことを応用してプログラムを作成  \\ \hline
    \end{tabular}
  
  \label{tab:price}
  \end{center}
\end{table}




\subsection{各小学校のとの調整}
地域の小学生に参加してもらうために各小学校に資料を配布する。資料には、何をするのか、日程、問い合わせ先、申し込み方法などの内容をまとめる。資料配布では教育委員会、小学校に開催するプログラミング教室の内容日程など説明する。
\subsection{開催日程}

全5回の授業に参加し学んでほしいことから、小学生がプログラミング教室に参加しやすくするために学校が基本休みである土曜日、日曜日や学校・地区の行事と重ならないように開催日程を設定した。


\chapter{運営}
本章では、プログラミング教室を運営をするために必要な組織の構築、授業準備について述べる。組織の構築では、役割、業務内容などの運営するための方法について述べる。
授業準備では、小学生に楽しくプログラミングを学んでもらうための必要な準備について述べる。



\section{運営方法}
開催に先立ち、それを運営する組織を作る必要がある。ここでは、Rubyてらこったでの構築例をもとに、実際の活動を円滑に進めるための事前準備、主な役割、業務内容、ミーティング方法について述べる。

\subsection{役割関係の明確化}
活動をする時に、スムーズに作業ができるように役割を明確にする必要がある。Rubyてらこったでの主な役割は図\ref{sosiki}の中で説明する。

\begin{figure}[h]
  \begin{center}
 \includegraphics[width=6cm]{sosiki.pdf}
\caption{組織図}
\label{sosiki} 
 \end{center}

\end{figure}

\begin{description}
 \item[リーダー]\mbox{}\\
リーダーの役割は全体的に計画、作業の進行状況などを把握、ミーティングの進行を担うことをする。全体の計画では、いつまでに何をするのかを明確にする。明確にしたらグループ全員で内容を吟味する時間、内容修正する時間などを含め逆算し、作業の締め切りを決める。その時に、締め切りを決めてそのままにするのではなく作成を頼んだ人に対して、締め切りの何日か前に中間成果物を見せてもらうようにするなどして作業の進み具合を把握する。


   ミーティングをするときは何を話し合うのか決めておき、あらかじめメンバーに伝える。作成した成果物に対して全員からどうしたらもっと良くなるのかを意見をもらう時間にする。修正したものをいつまでに共有するか決める。例えば、授業用の教材の場合は、小学生でも分かりやすいか、もっと分かりやすくできないかなど意見をもらう。その後、次のミーティングまで修正した教材を作成するということをした。
また、業務の割り振りなどもする。業務の割り振りでは、メンバーの話を聞き、それをふまえて的確に割り振る必要がある。ミーティングの流れは図\ref{jyunbi}で説明する。

\begin{figure}[p]
  \begin{center}
 \includegraphics[width=9cm]{jyunbi.pdf}
\caption{ミーティング方法}
\label{jyunbi} 
 \end{center}

\end{figure}
  \item[授業担当]\mbox{}\\
業務は以下のようなものがある。
\begin{itemize}
\item 教材作成

担当の授業で使用する教材を作成する。教材としては、スライド、サンプルプログラムなどである。詳しくは\ref{jyugyo}で述べる。
\item 模擬授業

実際の授業を想定し、タイムテーブルを確認しながら行う。自分では分かりやすく教えているつもりでも相手には分かりにくい部分などは気づきにくいので、多くの人から意見をもらう機会を作る。
\item 授業

小学生の様子(操作はできているか、指示が伝わっているか)を見ながら分かりやすく丁寧にを意識して授業を行う。

\end{itemize}
 \item[各授業のアシスタント]\mbox{}\\ 
小学生一人に対して一人のアシスタントをつける。業務は以下の内容である。
\begin{itemize}
\item 小学生が分からない所の説明

授業の内容が難しかったり、分からなかった場合にサポートしている小学生に合わせて教えることをする。

\item 操作の補助

キーボード操作が遅い場合がある。その時に、キーボードの位置を教えたり、コマンドを教えたりする。
\end{itemize}


 \item[タイムキーパー]\mbox{}\\ 
タイムキーパーは、各授業のタイムテーブルに合わせて授業担当者に時間を伝える。そのため、授業の進み具合など確認して授業が円滑に進むようにサポートする。時間に余裕がある時は、プログラム作成の時間や発表時間などにするなど休憩中に打ち合わせする。反対に、時間が想定よりも足りない時は、変更する部分など提案してなるべく時間内で授業が終わるように考えて動く必要がある。

 \item[連絡係]\mbox{}\\ 
連絡係は参加する保護者の方にメールで連絡を取ることをする。はじめに送ったメールに対して返信してもらい連絡が取れることを確認する。メールで連絡をするので誰が読んでも正確に伝わる内容を早くお知らせすることを意識して業務をする必要がある。また、メールで質問が来た時も対応をする。

\end{description}


\section{必要な道具}
授業で使う道具は以下のようなものを用意した。

\begin{table}[h]
  \begin{center}

    \caption{必要な道具一覧}

    \begin{tabular}{|l|l|} \hline
      アイテム &用途  \\ \hline \hline
      PC & 小学生の操作用、授業用、スライド用のため使用 \\
      USBメモリ & 作成したプログラムを記録するため使用また、教室閉講後にも利用できるよう\\
                &無料で配布可能なシステムをインストールしておく   \\
      教科書 & 授業の内容を確認すため使用 \\
      ノート & 必要なことを書くために使用 \\
      ホワイトボード & プログラムをPCに入力する前に作成したいプログラムを書くために使用 \\
     マグネット & プログラムを作成するときに何を組み合わせると良いのか分かりやすくするために使用 \\
      アルファベット対応表 & 文字を入力するときに分かりやすくするため使用 \\ \hline
    \end{tabular}
  
  \label{tab:price}
  \end{center}
\end{table}

\subsection{PC}
PCは小学生用、授業用、スライド用の3種類使用した。小学生用と授業用のOSはNetBSDである。
NetBSDとはオープンソースのオペレーティングシステムであり、本学のパソコンと同じOSだと学生が教えやすいと考えたからである。また、授業以外でも使ってほしいと考えたため無料で配布できるオープンソースがよいからである。
\begin{itemize}
\item 小学生用

授業中のプログラムを作成、Webページからプログラムをダウンロードするために使用
\item 授業用

小学生の使用しているパソコンと同じであるためどのように操作するのか小学生に分かりやすくするため使用

\item スライド用

スライド用を用意することで画面の切り替えすることができるためスムーズに内容の説明ができる

\end{itemize}
使用した教室に2つ独立したプロジェクタがあったので授業用、スライド用両方を映して授業を行った。2つプロジェクターがなかった場合はテレビに映して授業をした。

\subsection{USBメモリ}
今回は16GB以上の容量を持つ高速なメモリにOSと教材に使用するソフトウェア一式をインストールし、USBメモリから起動して授業用環境として使用できるようにした。

\subsection{教科書}
授業内容に合わせて、学生らで作成した。オリジナルのイラストや分かりやすい図などを取り入れ、興味が湧くような内容にすることを心がけた。また、語句の説明なども小学生でも分かるようにした。内容は以下のようなものである。


\begin{description}
 \item[プログラミングとは]\mbox{}\\ 
プログラミングとは何か、Rubyとは何かを説明する

 \item[ファイル、ディレクトリ]\mbox{}\\
ファイルとディレクトリの説明をする

小学生でも分かるようにファイルは、絵を書く時の紙でディレクトリは紙をしまっておく場所というようにした

 \item[print, puts, getsについて]\mbox{}\\ 
画面出力の方法、キーボードから入力させる方法をまとめた
 \item[whileについて]\mbox{}\\ 
ループについて学ぶ
 \item[配列、乱数]\mbox{}\\ 
配列を使ってランダムに取り出す方法をまとめた
 \item[if, elsif, elseについて]\mbox{}\\ 
条件分岐をさせる方法、if, elsif, elseの違いについて図を用いて分かりやすくした
\begin{figure}[h]
  \begin{center}

\includegraphics[width=14cm]{ifzu.pdf}
\caption{条件分岐イメージ図}
 \end{center}

\end{figure}
 \item[プログラムを工夫するためのメソッドについて]\mbox{}\\ 
プログラムを出力させるときに文字が変化したり、時間をおいて表示させたりするものをまとめた
 \item[コマンド集]\mbox{}\\ 
プログラムの作成時などに覚えておくと便利なコマンドをまとめて書いておき、分からない時にすぐに確認できるようにした(\ref{nyuryoku}を参照)
\end{description}






\subsection{ノート}
初回の授業で配布し、小学生が学んだことや気づいたこと、ポイントなどをこまめに書き込めるように用意した。授業内では、ノートに書く場面があれば先
生が指示を促し小学生がノートを書く時間を設けた。


\subsection{ホワイトボード}
ホワイトボードにプログラムを書いてから PC
にプログラムを打ち込んだ方がわかりやすいと
考え、用意した。また、小学生がホワイトボー
ドに書きながらプログラムを組んで行くことで
理解を深める目的で使った。
\subsection{マグネット}
その授業の内容で勉強する新しいことや大切な
ものをマグネットにした。それらを貼るだけで
よいようにし、記憶しやすくするために作った。
これらを授業内でホワイトボードに貼りながら
作業を進めていった。例を挙げると、
「 while 」と
「 end 」などのセットで扱うものに関しては、セッ
トで先にマグネットをホワイトボードに貼り付
けてからプログラムを組み立てるなどの工夫を
した。あらかじめ用意されているものを使用し
たため、間違いの減少や作業時間の削減にも繋
がった。

\subsection{アルファベット対応表}
小学5、6年生はアルファベットを習い終えているが大文字小文字を理解するために作成し配布した(\ref{taiou}を参照)。キーボードでは大文字表記になっているため「 l( エル ) 」と「 i( アイ ) 」や「 h( エイチ ) 」と「 n( エヌ ) 」などが間違いやすかった。


\begin{figure}[h]
  \begin{center}
\subfigure[USBメモリ]{
\includegraphics[width=0.23\columnwidth]{usb.jpg}
}\label{USB}
\subfigure[教科書]{
\includegraphics[width=0.23\columnwidth]{kyoukasyo.jpg}
}
\label{kyoukasyo}
\subfigure[ノート]{
\includegraphics[width=0.23\columnwidth]{note.jpg}
}
\label{note}
\subfigure[ホワイトボード]{
\includegraphics[width=0.23\columnwidth]{whitewboard.jpg}
}
\label{board}
\subfigure[マグネットシート]{
\includegraphics[width=0.23\columnwidth]{magnet.jpg}
}
\label{magnet}
\subfigure[マグネットシート(黒板用)]{
\includegraphics[width=0.23\columnwidth]{kokuban.jpg}
}
\label{kokuban}

\subfigure[アルファベット対応表]{
\includegraphics[width=0.23\columnwidth]{taiou.pdf}
}
\label{taiou}
 \end{center}
\end{figure}



\section{授業準備}\label{jyugyo}
授業の準備では授業を行うまでの流れを述べていく。

\subsection{内容の吟味}
%\begin{itemize}
% \item 1回分の内容確認
% \item プログラムを楽しくするような工夫

%\end{itemize}
授業での内容をミーティングなどで話し合い内容を確認する。教える内容では、小学生でも分かりやすく学ぶことができるものを中心にしている。そのため、小学生にとって内容が難しすぎないか、変数などのイメージ図はどうするかなど話し合う。1回分の授業で教える内容が多くなり過ぎないか、教えるプログラムは分かりやすいか、プログラム作成の時間が十分に取れるかなどを考える。教える内容が多くなりすぎないかという基準については模擬授業をしてみたり、各授業での小学生の理解度を見たりして内容を決めた。プログラムについては\ref{puro}で述べる。


\subsection{教える体制}
授業の担当者1人、タイムキーパーが1人、授業アシスタントは参加する小学生の人数と同じようになるような体制にした。1対1で教える体制にしたのは、授業に追いつけない部分をサポートできるようにするためである。授業が進む速度に対して、小学生が理解する速度に差が発生することがあった。その際には、随時授業の合間に時間をとり、小学生が理解する速度に合わせて授業を展開していく形を心がけた。

\section{各授業のサンプルプログラム}\label{puro}
授業用のサンプルプログラムは授業の内容のポイントをおさえたものにした。授業中に説目を加え理解を深めてもらうようにした。
\subsection{1回目のプログラム}
画面出力のprint,putsを使ったプログラムを作成している。このプログラムでは、printとputsの違いを理解してもらうために両方使用した。画面に出力される””部分の文字を変更する。速く操作ができる小学生にはprintまたはputを増やして好きな文字を書き込ませて変えるようにした。

%\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
 %\begin{screen}
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
#!/usr/koeki/bin/ruby
# -*- coding: utf-8 -*-

print "名前\n"
print "学校名\n"
puts "好きな食べ物"
puts "好きな動物"
 \end{lstlisting}
 %\end{screen}
\subsection{2回目のプログラム}
変数、whileのループを使ったプログラムを作成している。gets.chompを最初に追加して所持金を入力させたり、最後の合計に1.08をかけて消費税込みの金額を出したりなど変えることができる。

%\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

puts "スーパーのレジ買ったものの値段を入れてね。(100 円→100 と入力しよう)"
memo = 0

while true
  print "値段は? (終わりたい時は q を押してね)"
  nedan = gets.chomp
  
  if nedan == "q"
    break
  end
  
  memo += nedan.to_i
  printf("今の合計は %d 円だよ \n",memo)
end
printf("今回の合計は %d 円です。お買い上げありがとうございました! \n",memo)
 
 \end{lstlisting}
\subsection{3回目のプログラム}
配列と乱数を組み込んだプログラムをサンプルにした。この配列の部分をグー、チョキ、パーに変えるとジャンケンプログラムに変えることができる。
%\begin{verbatim}
%\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

kuji = ["1等","2等","3等","4等","ハズレ"]
print("なにがでるかな〜？")

puts("....")

sleep(1)
srand()
nani = rand(5)
printf("あなたは%sでした！\n",kuji[nani])
 \end{lstlisting}
\subsection{4回目のプログラム}
条件分岐のifを使いクイズプログラムをサンプルにした。クイズの問題文を変えるだけではなく選択肢を増やしたり、回答によって違うものを画面出力できるように変えることができる。
%\begin{verbatim}
%\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
#!/uer/bin/env ruby
# coding: utf-8

puts "今の元号はなんでしょうか？"

puts "1:平成"
puts "2:令和"
puts "3:昭和"

print "答えを入力:"
kotae = gets.to_i

sleep(1)

if kotae == 1 then
  puts "惜しい！ハズレだよ！"
elsif kotae == 2 then
  puts "正解だよ！読み方はわかるかな？？"
elsif kotae == 3 then
  puts "ザンネン！ハズレだよ！"
else
  puts "その番号はないよ！！"
end
 \end{lstlisting}
\subsection{5回目のプログラム}
今まで学んだ内容を含めたプログラムをサンプルにした。
%\begin{verbatim}
%\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
#!/usr/bin/env ruby

puts "コンピュータとじゃんけんをしよう!"
puts "5回中3回勝てればクリアだよ!"
sleep(3)
puts ""
print "それじゃ GAME START\n"
puts ""

win = 0
kaisuu = 1
janken = ["だしてないよー", "グー", "チョキ", "パー"]

while kaisuu <= 5
  sleep(2)
  puts ""
  printf("%d回目!(あなたの勝利数:%d)\n", kaisuu, win)
  puts ""
  print "じゃんけん!(グーなら「1」チョキなら「2」パーなら「3」を押してね): "
  while true
    you = gets.to_i
    if you >= 4
        you = 0
    end
    com = rand(3) + 1
    printf("ぽん!(あなたは「%s」でコンピュータは「%s」)\n", 
           janken[you], janken[com])
    sleep(1)
    if (you==1&&com==2) || (you==2&&com==3) || (you==3&&com==1)
      puts "あなたの勝ち!"
      win += 1
      kaisuu += 1
      break
    elsif (you==1&&com==3) || (you==2&&com==1) || (you==3&&com==2)
      puts "あなたの負け!"
      kaisuu += 1
      break
    elsif you == com
      print "あいこで(グーなら「1」チョキなら「2」パーなら「3」を押してね): "
      redo
    else
      puts "なにもだしてないからあなたの負け!"
      kaisuu += 1
      break
    end
  end
end

sleep(3)
printf("あなたの勝利数は「%d 回」\n", win)
sleep(3)

if win >= 3
  puts"おめでとう!"
  sleep(2)
  puts "+-------------------------------------------------+"
  system 'banner YOU WIN!!'
  puts "+-------------------------------------------------+"
else
  puts "残念..."
  sleep(2)
  puts "+------------------------------------------------+\n"
  system 'banner GAME OVER'
  puts "+------------------------------------------------+\n"
end
 \end{lstlisting}



\subsection{スライド}
授業で使うスライドはあくまでも授業の副教材であることを意識する。スライドに書く内容は図、重要な部分だけにする。するとポイントなどが小学生にも分かりやすく伝えることができる。
%\begin{itemize}
% \item 文字を少なく
% \item イメージ図をいれる

%\end{itemize}
\section{模擬授業}

模擬授業では授業担当者が実際の授業を想定して行う。主に見るポイントとして以下のようなものを確認する。
\begin{itemize}
 \item 教え方が分かりやすいか(プログラムの説明など)
 \item ノートを取る部分の確認
 \item スライドが見やすいか(スライドの配色、文字が多すぎないか)
 \item 時間配分(プログラムの作成時間があるか、時間が無くなったらどこを省いて説明するか)
\end{itemize}
section{他の機関との調整}

プログラミング教室を運営をするときは単独で行うことが難しいと考えるための他の機関との協力が必要である。例えば、プログラミング教室を行う前に、広報資料(活動内容、プログラミング教室活動日時、募集条件、締め切り、問い合わせ先などの情報)配布がである。資料配布のための募集期間、締め切りなどの時間を考えた。日程が決まったら本学から酒田市教育委員会に連絡をとり、教育委員会から各小学校に資料を配布して、その後に各小学校の先生から小学生に資料を配布して参加したい小学生から連絡をもらった。そのため他の機関との調整を行った。Rubyてらこったの場合は、各小学校、酒田市教育委員会と調整をして行った。


プログラミング教室を開催すると決めて参加者を募集する時に、プログラミング教室に参加したいと考える小学生がどのくらいなのかが分からず参加人数予想ができなかった。そのため、酒田市内の全ての小学校に募集をかけるのではなく、本学の近隣の小学校、小学生数が多い小学校という条件のもと小学校を4校に絞って募集をすることを決めた。その後小学校の先生にプログラミング教室の説明を行い許可を得て資料配布をした。参加募集期間の締め切りを資料配布から約2週間ほどにした。するとある程度の小学生が実際にプログラミング教室に参加申し込みをしてくれた。

7、8月にまたプログラミング教室をおこなった。最初の4校の募集により各小学校からの参加人数が大体予想がついた。また、小学校が夏休み中であるため、参加可能人数を増やしたいと考えた。そのため酒田市の全部の小学校に募集をかけた。その時に全部の小学校を訪問、プログラミング教室の説明、資料を配布するのには時間がかかる。そのため、酒田市内の小学校に配布するのは、酒田市の教育委員に活動の説明を行い協力を得て配布してもらった。




\chapter{授業をするための方法}
この章では、少し難しいプログラムの内容でも小学生に分かりやすく、楽しく学んでもらうための当日の準備作業、授業の流れ、プログラムの発表方法、授業後のミーティングについて述べていく。授業を進めるときはタイムテーブル通りに教えるだけでは内容を理解してもらうことが難しいと考える。そのために事前準備や確認作業を行う。授業では教えるということも大切でるあるが自分で考えたプログラムを作成するだけではなく発表することを大切にしている。その理由は\ref{tikara}で述べたように伝える力を身につけてほしいからである。

\section{当日の準備・確認事項}
当日は、授業がスムーズに進めることができるように授業が始まる1時間ぐらい早く集合し準備する。まず、備品のホワイトボード、ペン、マグネット、PCをの設置などをする。PCの設置では、ネットワークが繋がるかを試す。その後、授業のおおまかな流れを確認する。

\section{授業の流れ}
授業の流れは以下の通りである。
\begin{enumerate}
 \item 前回の授業の復習

前回の授業で学んだ内容のポイントを復習する。
 \item タイピング練習 

タイピング練習では、授業で使う英単語を3回ずつ練習する時間をとる。例えば、1回目の授業であれば、print, putsなどである。速く入力が終わった人には、5回など入力する回数を増やすようにした。
\item 内容の説明

内容の説明では、授業で新しく学ぶことを説明する。重要なポイントは、メモをとる時間を作る。
 \item サンプルプログラム

サンプルプログラムは、新しく学ぶ内容を使う。最初にどのようなプログラムなのか実行させる時間にする。
 \item サンプルプログラムの説明

4のサンプルプログラムがどうしてそのような動きをするのか説明する時間をつくる。
 \item 休憩

長めの休憩をとる。休憩の間には、小学校の話し、習い事、趣味など小学生とコミュニケーションを取る。
 \item プログラム作成

プログラムの作成では、学んだ内容を使い自分で考えて作成してもらう。作成の時は、ホワイトボードにマグネットを貼ったり、ペンで書いたりしてからパソコンに入力する。イメージ通りにプログラムが作れない時は、アシスタントがサポート、説明をする。サポート、説明で重要なのは、考えてもらい理解してもらうということである。
%\begin{center}

%\includegraphics[width=60mm]{sakuse.jpg}
%\caption{ホワイトボード}
%\end{center}
   \begin{figure}[h]
  \begin{center}

\includegraphics[width=10cm]{sakuse.jpg}
\caption{ホワイトボードに作成するプログラムを書き込んでいる様子}
 \end{center}

\end{figure}


 \item 作成したプログラム発表

作成したプログラムは、発表する時間を確保する。発表方法はみんなの前で作成したプログラムを実行し発表する方法と他の人が作成したプログラムを実行してみる方法の2つである。
次の\ref{happyou}で詳しく述べる。
\end{enumerate}

\section{プログラム発表について}\label{happyou}
授業で作成したプログラムを発表する機会を設けた。その理由としては、自分の作成したものを発表し伝える力を身につけること、他の人の発表、プログラムの良さなどを考えてもらうためである。授業で行った発表方法は2つある。その方法は以下の通りである。

\begin{description}
 \item[みんなの前で発表する]\mbox{}\\
最初に作成したプログラムの難しかった点、頑張った所など話してもらう。プロジェクターに映し、作成プログラム実行をして発表する方法である。発表する時に何を話せばいいのか困ってしまう小学生もいるのであらかじめ話してほしい項目を提示すると困った様子が見られなかった。
 \item[他の人のプログラムを実行する]\mbox{}\\
全員で座席を順に移動し、他の人の作成したプログラムをお互いに体験させる。この方法では、実際に実行できるので工夫している部分など気づくことが多い。実行してみた感想などお互いに伝えることができる。

\end{description}

\section{授業後のミーティング}
授業後に約30分ほどのミーティングをする。まずはじめに、授業の担当者から良かった点、悪かった点を先に話してもらう。悪かった点についてはメンバーから改善策、意見をもらう。そのあとに、授業のアシスタントから参加した小学生の様子、理解度についての意見をもらう。その後に次回までの授業の改善点、対応策、準備しなければならないことなどを話し合う。

\chapter{授業を受講した小学生の感想}
1回目から5回目まで授業後にアンケート(授業で楽しかったこと、難しかったこと)をとった。以下の表はそのまとめである。

\begin{table}[h]
  \begin{center}

    \caption{楽しかったこと}

    \begin{tabular}{|l|l|} \hline
      回数 & 内容  \\ \hline \hline
      1回目 & PCの操作、コマンド操作、自己紹介プログラムを発表したこと、大学生と話しをしたこと \\ \hline
      2回目 & キーボードの操作、みんなが作成したプログラムを実行すること、大学生と話をしたこと \\ \hline
      3回目 & みんなが作成したプログラムを実行すること \\ \hline
      4回目 & プログラムの作成、大学生と話しをしたこと  \\ \hline
      5回目 & オリジナルのプログラムを作成したこと  \\ \hline
    \end{tabular}
  
  \label{tab:price}
  \end{center}
\end{table}


\begin{table}[h]
  \begin{center}

    \caption{難しかったこと}

    \begin{tabular}{|l|l|} \hline
      回数 & 内容  \\ \hline \hline
      1回目 & PCの操作、自己紹介 \\ \hline
      2回目 &  break、ループが難しかった、プログラムを改造すること\\ \hline
      3回目 & 乱数でランダムに取り出すこと、自由にプログラムを作ること\\ \hline
      4回目 & if,elsif,eleseの使い方が難しかった、プログラムを改造すること \\ \hline
      5回目 & 変数が多くなりすぎて難しかった、オリジナルのプログラムを作成すること \\ \hline
    \end{tabular}
  
  \label{tab:price}
  \end{center}
\end{table}


\section{授業で楽しいと感じる部分}
楽しいと感じた部分として発表が楽しかったという意見が多かった。発表を聞き、他の参加者のプログラムを動かしてみるのが新たな発見があり楽しかったのだと考える。

また、大学生と話しをするのが楽しかったという意見があった。プログラムを作成する時間や休憩の時間など多くの場面で話す機会があったのは良かったと考える。
\section{授業で難しいと感じる部分}

操作の部分ではキーボードの操作が難しいと感想に書いていた。PCをあまり使わない小学生にとってキーボードを使い入力するには、どこに入力したい文字、数字があるのか探しながら打つので思ったよりも時間がかかるため難しく感じたのだと考える。

プログラムの内容では変数の部分が難しかったという感想が多かった。2回目から5回目にかけて難しいプログラムを作成していくと、変数が徐々に増えていく。そのため、何をどの変数にしたか確認しながらプログラムを作成するため難しく感じたのだと考える。

\section{参加した小学生が作成したプログラム}
全5回の授業を通し学んだことを使用して小学生が作成したプログラムは以下のようなものである。
このプログラムはlatterという配列の中に入っている"グラードン","カイオーガ","レシラム","キュレム"の4つをどのくらいの時間で入力できるかというプログラムである。
%\begin{verbatim}
%\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
#!/usr/koeki/bin/ruby
# -*- coding:utf-8 -*-

letter = ["グラードン","カイオーガ","レシラム","キュレム"]

print("どれだけ早くポケモンを打てるかな\n")
printf("%s\n", letter)

start = Time.now.to_i

i = 0
while i < letter.length 
  printf("\v%s:", letter[i])
  input = gets.chomp
  if input == letter[i]
    stop = Time.now.to_i
    STDERR.print("\t正解\n") 
    i += 1
  end
end

printf("かかった時間 %d 杪!\n", stop - start)

 \end{lstlisting}

このプログラムは、フラッシュ暗算ゲームでrandで0から10までの数字をランダムに取り出して掛け算を計算するものである。
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
#!/usr/bin/env ruby
# coding: utf-8

puts"フラッシュ暗算ゲーム!"
puts"表示された数字をかけた合計を出してね!"
kaisuu = 0
sum = 1
sleep 1
puts"よーい..."
sleep 2
puts"スタート!"
sleep 1

while kaisuu < 3
  srand
  kazu = rand(10)
  print kazu
  sum *= kazu
  sleep 1
  print"\b"
  kaisuu += 1
end
print"さて合計いくら? : "
start = Time.now.to_i
answer = gets.to_i
finish = Time.now.to_i
time = finish - start

if answer == sum
  puts"おめでとう ! 正解 !"
  printf("正解までのタイム: %d秒\n", time)
else
  puts"はずれー ! 残念 ..."
  printf("正解は %d\n", sum)
end 

 \end{lstlisting}
\chapter{教えるための要点}
この章では主に実際に小学生にプログラミングを教えるための注意点をまとめている。
\section{教える上で注意すること}
授業担当者と授業アシスタントの両方の視点から述べていく。
\subsection{授業担当者}

授業担当者は、小学生に教えるということで内容を噛み砕いて教えることが重要になってくる。授業は基本的に操作など全員一緒に進んでいくため常に\textbf{小学生の顔を見るように}する。すると操作が終わっているのか、まだ作業の途中なのかなど確認することができる。進み具合をみて、かなり遅れている場合はアシスタントに頼んでサポートしてもらう。授業中は、ただ話すのではなく、常に問いかけたり、手を上げてもらったりと反応を見るようにする。話を聞く、ノートを取る、ホワイトボードに書き込む、プログラムを作成するなど指示をしっかり出して、\textbf{何をするのか明確に}することが大切である。
\subsection{授業アシスタント}

授業アシスタント者は操作、授業で理解できなかった部分の説明など個人に合わせてサポートする。教える小学生に対して\textbf{目線を合わせて教える}ことが大切である。難しい内容でも分かりやすい言葉を使う。プログラム作成の時は、全てサポートするのではなく考えてもらう時間を大切にする。操作が遅くて焦ってしまう小学生がいた場合は、声をかけて、ゆっくりでも問題ないことを伝えて、確実に操作してもらうようにする。
\subsection{小学生の理解度に合わせる}
一人一人授業の内容の理解度、操作速度などは違う。そのため一人ひとりに合わせた教え方をしなければならない。
\begin{itemize}
 \item 理解が早い小学生

理解が早い小学生には、サンプルのプログラムを改造してもらうということをして、何もしていない時間をなくすようにした。最初にどの部分を変えると良いのかヒントを出しながら少しずつ教えていった。
\item 操作が遅い小学生

操作が遅いと追いついていかなければと焦ってしまう小学生がいる。そのときは、どこまでできているのか確認し、話しかけながら操作のサポートをする必要がある。
\end{itemize}

\section{その他}
その他として授業が計画通りにいかなかった場合、参加者が来れなくなった場合、PCが調子悪くなった場合の対応を述べる。
\subsection{授業の内容が予定より進まなかった場合}

どこを中心に教えるのかということを考える。説明に時間がかかりすぎてしまったときは、次の授業でどのぐらいの時間で説明するかのと打ち合わせをして教える範囲を全て5回で終わらせるようにする。
\subsection{参加者が来れなくなった場合}

全5回の授業で1つどこかの回の授業に参加できなかった場合は次回の授業の30分前に来てもらい簡単な授業を受けてもらい、その後次の授業に参加してもらった。すると、次の授業においていかれることなく参加してもらうことができた。

\subsection{利用しているPCの調子が悪くなった時}
インターネットを使いWebページを見る時に無線LANではうまく繋がらない場合があった。そのときは、有線で接続をした。次の授業からは予備のパソコンを使い対応をした。


\chapter{実際に行うための一例}\label{teian}
Rubyてらこったの活動を通して良かった部分、悪かった部分があった。そのことを踏まえて企画、運営を円滑に行うための提案をする。プログラミング教室を企画から開催するまでの大まかな流れ、内容をまとめる。詳しい部分は前の章を参考にすると良い。

\section{企画}
企画ではこのような流れで役割、教える範囲などを決めた。
\begin{enumerate}
 \item 活動するメンバーを集める

活動をするにあたってどのようなメンバーが必要か考え集める。

 \item 責任者の選出

リーダー、副リーダー、企画班リーダー、授業班リーダーを決める。
 \item プログラム教室の目的を明確にする

プログラミング教室を通して小学生に何を学んで欲しいのか、身につけた力などを考える。

 \item 教える範囲を決める

教える範囲は小学生でも理解しやすい内容、最終的に小学生にどのようなプログラムを自分で考え作成できるようになってもらうのかを決める。
 \item 役割を決める

企画班(書類作成係、連絡事項係、備品作成係)授業班(授業担当係、教材作成・管理係)を決める。
\item 授業について決める

教える範囲をどの順番で教えていくか考える。それぞれの授業で教えるイメージ図についてなどを決める。
 \item 日程について決める

日程は全5回の授業であるため小学生が参加しやすい日程を考えて組み立てる。
 \item 資料の配布について決める
資料を作成したら配布する範囲、方法など決める。

\end{enumerate}

\section{運営}

運営の流れは以下の通りである。
\begin{enumerate}
 \item 役割決め

運営が始まると外部の人と連絡が取ることが多くなるため連絡をして日程調整などをする役割を決める。

 \item 必要な道具の決定

授業で必要な道具(パソコン、USBメモリ、マグネット、ホワイトボード、教科書など)を決める。

 \item 教える体制を決める

どのような体制でアシスタントを何人にするか決める。

 \item 内容の吟味

授業担当者が考えてきた授業の構成、教える内容、タイムテーブルなどを話し合い決める。

 \item サンプルプログラムを決める

授業のポイントが入ったサンプルプログラムを決める。
\item 模擬授業

実際の授業を想定して、作成したタイムテーブルをもとに授業をする。スムーズにできるまで繰り返す。
 



\end{enumerate}


\section{広報関係提案}
広報関係では本学から教育員会に資料を持っていた。その後教育委員会から各小学校へポスターを配布した。ポスターには以下のような内容をまとめる。
\begin{itemize}
\item 内容
\item プログラミングとは何か
\item 日程
\item 参加条件
\item 時間
\item 場所
\item 問い合わせ先
\item 申し込み方法
\item 申し込み締め切り


\end{itemize}

\section{ミーティング}

週に1回メンバーと約1時間ほどのミーティングを行う。内容としては以下のような項目である。
\begin{itemize}
\item 成果物の発表
\item 成果物に対して意見をもらう
\item 授業に向けて
\item 次回まで準備するもの

\end{itemize}

\section{申し込み方法の提案}

申し込み方法で情報、確認が確実なのは、申し込みをWebで行い、参加者が決定
後に電話でやり取りするのが良い方法だと考える。その理由としては、Webでお
こなうことで必要な情報を残すことができる。入力してもらうことは、名前、学校名、住所、メールアドレス、電話番号などである。実際に使用した申し込みフォームは図\ref{mousikomi}である。また、参加する人に電話をするこ
とでWeb申し込みの内容を直接確認することができ、迅速かつ臨機応変に対応でき
るからである。

\begin{figure}[h]
  \begin{center}

\includegraphics[width=12cm]{mousikomi.pdf}
\caption{Web申し込みフォーム}
\label{mousikomi}
 \end{center}

\end{figure}

\section{授業}
授業では、分かりやすく丁寧ということを意識する。小学生の反応、操作の進み具合などを確認して教える速度を調整する。アシスタントは、小学生が途中で困らないように声をかけながらサポートする。

\section{授業後のミーティング}
授業後のミーティングは、授業担当者、アシスタント、タイムキーパーなど全員が授業を振り返る時間にする。悪かった部分に対しては、改善策を考えるようにする。
\section{6月にプログラミング教室を開催の実例}
下の表はメンバー募集から6月に開催までの流れをまとめたものである。



    \begin{longtable}{|l|l|l|}
\caption{開催までの流れ} \\
   \hline  日付 &企画 &運営 \\ \hline \endhead
\hline \endfoot
2月23日 & メンバー募集&\\\hline
2月28日 & ミーティング(企画について)&\\\hline
3月8日 & 責任者選出& 運営計画\\\hline
3月8日 & & Web作成開始\\\hline
3月26日 &授業内容の決定 &必要な道具を決める\\\hline
4月2日 &授業内容の吟味 &\\\hline
4月10日 &授業担当者の決定 &使用するOSの決定\\
       &授業体制の決定 &必要な道具発注  \\
        &教材作成者の決定 &\\\hline
4月17日 & 資料配布小学校決定&ポスター作成開始\\
         &授業内容の吟味 &\\\hline
4月19日 & 配布ための連絡調整&\\\hline
4月24日 &配布資料完成 &\\
        &授業の大まかな流れ確認 &\\\hline
5月1日 &成果物の確認 &連絡状況の確認\\\hline
5月8日 &模擬授業について &\\
       & 教科書作成開始&\\\hline
5月10日 & &各小学校へ資料配布\\\hline
5月15日 &マグネットの作成 &授業スライドの確認\\\hline
5月15日 & &使用する教室の予約\\\hline
5月22日 &各授業の確認 &当日の日程について\\\hline
5月28日 &当日に必要なモノの確認 &\\\hline
5月29日 &申し込み締め切り &\\\hline
6月5日 & &参加者への連絡\\\hline
6月7日 & &Web公開\\\hline
6月8日 & &1回目模擬授業\\\hline

6月10日 & &1回目授業\\
        & &1回目授業についてミーティング\\\hline

6月12日 &2回目の授業に向けて &2回目模擬授業\\\hline
6月17日 & &2回目授業\\\hline

  & &2回目授業についてミーティング\\\hline
6月19日 &5回目授業の必要なモノの確認 &\\
        &3回目の授業に向けて &\\\hline
6月21日 & &3回目模擬授業\\\hline
6月24日 & &3回目授業\\\hline
 & &3回目授業についてミーティング\\\hline
6月26日 &4回目の授業に向けて &4回目模擬授業\\\hline
7月1日 & &4回目授業\\
 & &4回目授業についてミーティング\\\hline
7月3日 & 5回目の授業に向けて&\\\hline
7月8日 & &5回目授業\\
 & &5回目授業についてミーティング\\\hline
    \end{longtable}

\chapter{課題の考察}\label{kousatu}

プログラミング教室を企画運営をし、\ref{kadai}で述べた課題について考察をする。
\begin{description}
\item[プログラミングツールに関する課題]\mbox{}\\ 
RubyてらこったではRubyをツールとして使うのを決めた理由は3つある。1つ目の理由は、本学では\ref{tisiki}で述べたようにRubyを用いたプログラミングを学んでいる。学生が教えるということを前提としたのでRubyとした。
2つ目は、他ではあまりRubyを教えてないということである。\ref{wariai}のようにScrachを教えているプログラミング教室が多いことから他のプログラミング言語にした。3つ目の理由は、小学生のうちにテキスト型の本格的なプログラミングを学ぶ機会を提供したいと考えたからである。

\item[プログラミング環境に関する課題]\mbox{}\\ 
一人一台のPCを用意した。私立大学ブランディング授業で補助金でPCを揃た。プログラミング教室を行う程度であれば、中古の2万円前後のPCで十分である。そのため、中古のPCを参加想定人数分を準備した。
\item[プログラミング教育を行う教員の課題]\mbox{}\\ 
小学生に指導する大学生は、分かりやすく教えるために\ref{jyugyo}で述べたように授業準備を行った。準備をするときは、本番の授業をシミュレーション(タイムテーブルなど)して行った。
\end{description}
\chapter{付録}
使用した補助教材について
\section{コマンド集}\label{nyuryoku}




\begin{figure}[h]
  \begin{center}

\includegraphics[width=15cm]{nyuryoku.pdf}
 \end{center}

\end{figure}
\clearpage
\section{アルファベット対応表}\label{taiou}
\begin{figure}[h]
  \begin{center}

\includegraphics[width=10cm]{taiou.pdf}
 \end{center}

\end{figure}
\begin{thebibliography}{99}
\bibitem{hon} 上松理恵子 久野靖 萩谷昌己 .「小学校にプログラミング教室がやってきた!」株式会社三省堂,2016,p144  
 \bibitem{soumu}  総務学省. ''プログラミング人材育成の在り方に関する調査研究報告書''. \url{http://www.soumu.go.jp/main_content/000361430.pdf}, (参照日2019-8-1).

    \bibitem{niigata} 河原,和好 .''小学生を対象にしたプログラミング教育について''.新潟国際情報大学情報文化学部紀要（2017)p27-35.
 \bibitem{naiyou} 広瀬雄二.「Ruby プログラミング基礎講座」,技術評論社,2006,p312
             \bibitem{monbu}  文部科学省. ''小学校プログラミング教育の手引(第二版)''. \url{http://www.mext.go.jp/component/a_menu/education/micro_detail/__icsFiles/afieldfile/2018/11/06/1403162_02_1.pdf}, (参照日2019-5-24).
　　　　　

             \bibitem{terakotta}  大石桃菜 佐々木大器 山口円馨 .''東北公益文科大学における小学生向けプログラミング教室「Rubyてらこった」の取り組み''.文部科学省 私立大学研究ブランディング事業 日本遺産を誇る山形県庄内地方を基盤とした地域文化とＩＴ技術の融合による伝承環境研究の展開（平成29年度～平成33年度)p50-54.

    

　\end{thebibliography}

\end{document}

