Newer
Older
2019-kameya / tebiki2.tex
@kame kame on 10 Dec 2019 75 KB 修正
%#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{wrapfig}	% required for `\wrapfigure' (yatex added)
%\usepackage[sectionbib]{chapterbib}
\usepackage{ascmac}
\usepackage{longtable}
\usepackage{geometry}
\usepackage{subfigure}
\usepackage{boites}
%\usepackage{boites,boites_exemples}
\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{廣瀬研究室\\C1160497亀谷千香子}
\date{}



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

\begin{document}
\maketitle

\tableofcontents



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

小学生のプログラミング教育の必修化前である現在もプログラミング教室は開催されている。しかし、プログラミング教室を企画・運営のための情報が少ない。そのためRuby等を用いた小学生向けのプログラミング教室を運営をするための事前の準備、教えるための道具、教える方法などのまとめを手引として提案する。
\section{プログラミング教育必修化の背景}
 小学生プログラミングの必修化に向けて文部科学省では小学校プログラミング教育の手引などを公開している。普段の生活の中で身近な家電、自動車にはコンピュータが内蔵されており、生活を便利にしているからである。コンピュータはプログラムで動いているため、仕組みを理解し情報を適切に活用、選択し問題を解決していくことが重要であるためプログラミング教育が導入される。
\section{プログラミング教室}
小学校だけではなく、外部にもプログラミングを学べる教室は多くある。プログラミング教室の開催時期は1999年から年々増加していることが分かる(図\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{}\\
画面上でプログラムを作成する ものである。

(例) Scratch、 Viscuit、 アルゴロジックなど
  \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{手引の構成}
東北公益文科大学(以下本学)で行ったプログラミング教室「Rubyてらこった」の活動を基準にまとめた。はじめてプログラミング教室を企画、運営する人にも分かりやすいように決める順番で述べている。そのため手引の構成としては以下のようになっている。
\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 ファイルの入出力

直接ファイルに入出力をする方法を学ぶ
\item 計算機の内部構造
  
デジタルで数字や文字などを表現する方法について学ぶ
\item ハッシュ
 
順番、個数にとらわれず任意の属性と値を結びつけ管理する方法を学ぶ
\item 再帰

大きな問題を類似した小さな問題に分割して考える方法を学ぶ
\item CGI

自分が作成したシステムをWeb上に効果的な形で視覚化させる方法を学ぶ
\end{enumerate}

\subsection{教える能力}

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

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

\subsection{時間管理能力}

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

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




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

\subsection{Rubyてらこったと活動の目的}
本学では2017年度私立大学研究ブランディング事業の採択を受け、その活動一つとしての地域資源を活用する人材育成の研究としてプログラミング言語のRubyを用いたプログラミング教室「Rubyてらこった」の企画・運営を行ってきている\cite{terakotta}。そのプログラミング教室を行う目的は、庄内地方を中心とした地域の若者達に情報技術を教え、情報社会を生き抜くために必要な力を身につけていくことである。また、小学生のうちからプログラミング言語Rubyを用いた本格的なプログラミングを学ぶ機会を提供したいと考えているためである。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{}\\ 
アスキーアートのように入力したものをそのまま出力させるために必要である。printとputsも同じように画面出力のためのものであるが、 putsは末尾に改行した形で出力される。printfは書式付のprint文であるため数字などを出力させるために利用した。

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

\item[制御構造(while, if, elsif, else)]\mbox{}\\
制御構造とはプログラムで実行される流れを定めたものであり、レジスタープログラムなどの入力したものを繰り返しの処理を行うときやクイズの結果の判定や条件で繰り返しを行うために必要である。繰り返しの処理を行うためにwhile、条件分岐にはif, elsif, elseを使用した。使い方の例は以下の通りである。

 \begin{lstlisting}[basicstyle=\ttfamily\footnotesize, frame=single]
  if a
    hogehoge1
  elsif b
    hogehoge2
  else
    hogehoge3
  end
  \end{lstlisting}
	   条件がaであればifのhogehoge1の部分が実行される。条件がaではなく2つ目のbであればhogehoge2の部分が実行される。条件がaでもbでもない時はelseのhogehoge3の部分を実行する。

 \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}に示した体制を構築して運営を進めた。役割は、表\ref{yaku}のように決めた。

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

\end{figure}


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

    \caption{役割}

    \begin{tabular}{|l|l|l|} \hline
        役割 &担当& 内容\\ \hline \hline
      リーダ &固定 & 活動全体をまとめる\\
      授業担当 &交代制 &プログラミングの授業を行う \\
      アシスタント & 固定  &参加者のサポートをする  \\
      タイムキーパー &交代制 &タイムテーブルに合せ担当者に時間を伝える \\ \hline
    \end{tabular}
  
  \label{yaku}
  \end{center}
\end{table}
リーダー、授業担当、各授業のアシスタント、タイムキーパー、連絡係について詳しく述べる。
\begin{description}

 \item[リーダー]\mbox{}\\
リーダーは、全体的の計画を立てる、作業の進行状況の把握、ミーティングの進行などの業務がある。内容については、以下の通りである。
\begin{itemize}
\item 全体的の計画を立てる


計画では、いつまでに何をするのかを明確にする。明確にしたらグループ全員で内容を吟味する時間、内容修正する時間などを含め逆算し、作業の締め切りを決める。

\item 作業の進行状況の把握


締め切りを決めてそのままにするのではなく作成を頼んだ人に対して、締め切りの何日か前に中間成果物を見せてもらうようにするなどして作業の進み具合を把握する。

\item ミーティングの進行


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

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

\end{figure}
  \item[授業担当]\mbox{}\\
各5回の授業を一人で行うのは、大変であるため、各授業で担当者を変えた。授業担当の業務は以下のようなものがある。
\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のOSはNetBSDである。NetBSDとはオープンソースのオペレーティングシステムであり、本学の計算機と同じOSだと学生が教えやすいからである。また、授業以外でも使ってほしいため無料で配布できるオープンソースが良いと考えたからである。PCは、小学生用、授業用の他にスライド用のPCも用意した。
\\
\begin{itemize}
\item 小学生用PC

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

\item 講師用PC

小学生に分かりやすくするため小学生の使用している計算機と同じものを使用した。

\item スライド用PC

教室では2つのプロジェクタが利用できるため、教卓PCから実際の操作画面と同時に、教材のスライドを映すためのPCを別途用意した。教室に2つプロジェクターが無かった場合は大型液晶ディスプレイに映して授業をした。
\end{itemize}


\subsection{USBメモリ}
今回は16GB以上の容量を持つ高速なUSBフラッシュメモリにOSと教材に使用するソフトウェア一式をインストールし、USBメモリから起動して授業用環境として使用できるようにした(\pageref{syasin}ページ図(a))。
USBメモリは、OSのインストールした後に、参加者一人のアカウントを作成し、名前を記入して配布をした。

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


\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}[tb]
  \begin{center}

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

\end{figure}

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






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


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

\includegraphics[width=5cm]{sakuse.jpg}
\caption{whileとendのマグネットシートを使用}
 \end{center}

\end{figure}

\subsection{アルファベット対応表}
小学5年生は、ローマ字の大文字だけ習っているため、小文字で書かれたプログラムリストの小文字はわからない。特に、大文字と小文字が違う「 l( エル ) 」と「 i( アイ ) 」や「 h( エイチ ) 」と「 n( エヌ ) 」と「 r( アール ) 」などが小学生にとって分かりにくい。そのため、大文字小文字を理解するために作成し配布した(\pageref{syasin}ページ図(g))。また、アルファベット対応表の配布だけではなく、小文字で書かれたRubyの単語の文字ごとに大文字のルビを振るようにした。


\label{syasin}
\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{他の機関との調整}

プログラミング教室を運営をするときは単独で行うことが難しいと考えるための他の機関との協力が必要である。本学が執り行った場合について記す。

プログラミング教室を行う前に、広報資料(活動内容、プログラミング教室活動日時、募集条件、締め切り、問い合わせ先などの情報)配布である。資料配布のための募集期間、締め切りなどの時間を考えた。日程が決まったら本学から酒田市教育委員会に連絡をとり、教育委員会から各小学校に資料を配布して、その後に各小学校の先生から小学生に資料を配布して参加したい小学生から連絡をもらった。


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

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




\chapter{授業をするための方法}
本章では、少し難しいプログラムの内容でも小学生に分かりやすく、楽しく学んでもらうための当日の準備作業、授業の流れ、プログラムの発表方法、授業後のミーティングについて述べていく。
\section{当日の準備・確認事項}
当日は、授業がスムーズに進めることができるように授業が始まる1時間程度早く集合し準備する。まず、備品のホワイトボード、ペン、マグネット、PCをの設置などをする。PCの設置では、ネットワークが繋がるかを試す。その後、授業のおおまかな流れを確認する。

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

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

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

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

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

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

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

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

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


 \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回目にかけて難しいプログラムを作成していくと、変数が徐々に増えていく。そのため、何をどの変数にしたか確認しながらプログラムを作成するため難しく感じたのだと考える。


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

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

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

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

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

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

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

全5回の授業で1つどこかの回の授業に参加できなかった場合は次回の授業の\textbf{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{wrapfigure}[5]{tR}{0.6\columnwidth}
	 \includegraphics[width=0.6\columnwidth,bb=10 10 900 800,clip]{poster.pdf}
	\end{wrapfigure}
\begin{itemize}
\item 内容
\item プログラミングとは何か
\item 日程
\item 参加条件
\item 時間
\item 場所
\item 問い合わせ先
\item 申し込み方法
\item 申し込み締め切り
\end{itemize}

\section{ミーティング}
週に1回メンバーと約1時間ほどのミーティングを行う。内容としては以下のような項目である。
ミーティングした内容は、メンバー全体に共有できるように必ず記録を取った。

\begin{itemize}
\item 成果物の発表
\item 成果物に対して意見をもらう
\item 授業に向けて
\item 次回まで準備するもの

\end{itemize}

\begin{breakbox}

4/17 議事録\\
◯企画班\\
・名刺は人数分完成して発注済み→来週配布\\
・ゴールデンウィーク前までにポスターの原案を作っておくこと。\\
  5月中に小学校にアポを取り、配りにいく予定。\\

◯教材班\\
・各担当ごとに進行状況を確認\\
  第1回:担当者不在により不明。\\
  第2回:発表用スライドは完成。while文はS4にあるプログラムを使用予定。\\
  第3回:プログラムは以前S4に載せたものを使用予定。スライドはまだ完成していない。\\
  第4回:スライドを使わないで見本を見せながら進めることをイメージしている。\\
  第5回:ゲーム様式のプログラムを使う予定。プログラム自体はできている。スライドはまだ完成していない。\\

※課題\\
・企画班は1週間後までポスターを制作し、先生と確認する。\\
・教材班は来週の火曜日までに、プログラムとスライドをS4にあげること。\\
・Webは今日中にあげること。\\
・自分の成果物をメモし、把握しておくこと。\\
 
\end{breakbox} 
\begin{breakbox}
5/8議事録\\
◯グッズ\\
 アンケート作成\\
   内容・公益大を知っていますか?\\
       ・プログラムしたことありますか?等\\
◯教材班\\
 ・毎週授業始め5分でタイピング練習をする\\
 ・マニュアル(教科書)を作る\\
    小学5・6年の社理数を盛り込む\\
 ・リハーサル1人20分の予定\\
    スライドを使って一連の流れを通す、ギャグも入れ込む\\
◯てらこったスケジュール\\
 第1回6月10・17・24 7月1・8\\
 第2回8月1・2・3・4・5・6・7・8・9\\
\end{breakbox} 

\begin{breakbox}
5/15 議事録\\
◯企画班\\
 ・アンケートの修整\\
 ・授業で使うマグネットの作成\\

◯授業班\\
 ・タイピングのシステムを統一\\
 ・前回のまとめ課題を授業の最初に解説\\
 ・スライドは図や絵を多くしたほうが好ましい\\
 ・キャラクターを使う\\
 ・文字のフォントはかわいいものが好ましい\\
 
◯Web班\\
 ・「無料」を大々的にアピール\\
 ・5回全て出席することを説明\\
 ・全ての項目において詳細を載せる\\

◯その他\\
 ・教室は前2列を子供、後側を保護者用で分ける\\
 ・アシスタントは子供達のとなりに待機\\
 ・お菓子テーブルを設置\\
 ・保険は子供達の名前と住所が確定したら加入する\\
 ・アシスタントの最小人数は5人\\

◯準備するもの\\
 ・名札\\
 ・ノート\\
 ・筆記用具\\
\end{breakbox} 
\section{申し込み方法の提案}

申し込み方法で情報、確認が確実なのは、申し込みをWebで行い、参加者が決定
後に電話でやり取りするのが良い方法だと考える。その理由としては、Webでお
こなうことで必要な情報を残すことができるからである。Webフォームを用意し、名前、学校名、住所、メールアドレス、電話番号などを入力してもらった(図\ref{mousikomi})。第1回の運用実績から、申し込み時期の確認は電子メールが、開催中の予定変更連絡などは電話が確実であると判断したため両方を入力してもらうことにした。

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

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

\end{figure}

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

\section{授業後のミーティング}
授業後のミーティングは、授業担当者、アシスタント、タイムキーパーなど全員が授業を振り返る時間にする。悪かった部分に対しては、改善策を考えるようにする。

\begin{breakbox}

第1回の反省点\\
小文字がわからない\\
おやつを小分けにする\\
アシスタントが介入しやすいようにする\\
90分のつもりで進行\\
アシスタント2,3人じゃ足りない TA1人に対して児童2人くらい欲しい\\
ネットが繋がらなかった\\
教科書等を持ち帰らせる\\
アシスタントはもっと盛り上げる\\
C-x C-fは2回まで\\
C-x C-sは大丈夫\\
英語入力と日本語入力の切り替えが難しい 日本語使うときには前もって言っておく もしくは切り替えを減らす\\
重要なところはノートに書いてねと言う 小学生はどこが重要だかわからない\\
講師は1回の指示に一つまでにしておく\\
指示は3回言う\\
アシスタントの守備範囲を決める(親も守備・対応範囲)\\
タイムキーパーが欲しい\\
飽きないような工夫 入力させるものを増やす\\
自分なりの作業\\
PCは同じ場所に座らせる\\

\end{breakbox}

\section{6月にプログラミング教室を開催の実例}
2018年度の活動日程をまとめたものである。



    \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てらこった」の取り組み''.文部科学省 私立大学研究ブランディング事業 日本遺産を誇る山形県庄内地方を基盤とした地域文化とIT技術の融合による伝承環境研究の展開(平成29年度~平成33年度)p50-54.

    

 \end{thebibliography}

\end{document}