3. 日本語プログラミング言語「なでしこ」を利用したプログラミング教育

https://www.it-chiba.ac.jp/faculty/social/pm/• 特徴• 文理融合型の学科（理科系、文化系の学生が混在している）• オープンな学生が比較的多い• マネジメント関連の科目が多いが、ソフトウェア工学やプログラミングなどの科目も充実している• プログラミングならばお任せ、という学生は少ない

IT業界、IT関連（ユーザ系のシステム部門など）に就職する学生が多い
1

（1） 担当している授業とグループ演習• 授業
1. コンピュータサイエンス入門（1年後期）
2. 品質マネジメント（2年後期）
3. オペレーションズリサーチ入門（2年後期）
4. ユーザ要求とシステム設計（3年前期）
5. ソフトウェア開発管理（3年前期）
うまくつなげたい• グループ実習
6. PM実験（2年後期）… HTML、CSS
7. PM演習（3年前期）… PHP、MySQL※ PM：プロジェクトマネジメント

開発で苦戦

2

PM実験（2年生）… 6週間

PM演習（3年生）… 13週間

4

本番環境の仕組み5開発したシステムの例

https://sel.jpn.org/citweb/2022-PME-TeamA/

6

講義の中に組み込む！
1.

コンピュータサイエンス入門（1年後期）
プログラミング … 日本語プログラミング言語「なでしこ」

2. 品質マネジメント（2年後期）
統計解析 … R
3. オペレーションズリサーチ入門（2年後期）
最適化／シミュレーション … Excel（ソルバー、分析ツール）
4. ユーザ要求とシステム設計（3年前期）
設計（UML）… astah*
テスト … PictMaster（組み合わせテスト）
5. ソフトウェア開発管理（3年前期）
プログラミング … PHP、MySQL
開発環境 … Visual Studio Code7

（2） 日本語プログラミング言語「なでしこ」

https://nadesi.com

8日本語プログラミング言語「なでしこ」に関する解説• 情報処理 Vol.62 No.5 (May 2021）• noteなでしことは？
日本語プログラミング「なでしこ」は，その名の通り日本語をベースとしたプログ
ラミング言語です．正式版公開から今年で16年目になります．当初から開発スローガンは「なでしこで誰でも簡単プログラマ」
です．
母国語の日本語をベースとしたプログラミングを行うことにより，老若男女を問わず，誰でもプログラミングができる環境を提供したいという気持ちで開発を続けてきました．開発の早い段階からオープンソースとして公開しており，ライセンスも自由度の高いMITライセンスを採用しています．
次のWebサイトで公開しています（図-1）．

図-1 なでしこのWebサイト- https://nadesi.com

91: #距離と時間を入力する
なでしこでの
2: 距離＝「目的地までの距離（km）は？」と尋ねる
プログラミングの例
3: 年齢＝「年齢は？」と尋ねる
4:
https://sel.jpn.org/blog.php#2022-11
5: #距離に応じたベースの金額を設定する
6: もし、距離<10 ならば
7: 料金＝200
8: 違えば
9: 料金＝250
10: ここまで。
11:
12: #年齢に応じて金額を設定する
13: もし、年齢<=3 ならば、
14: 料金＝0
15: 違えば、もし、年齢>3 かつ年齢≦14 ならば、16: 料金＝料金／2
17: 違えば、もし、年齢≧60 ならば、18: 料金＝料金×0.8
19: ここまで。
20:
21: #結果を表示
22: 「距離は｛距離｝kmで、利用者は｛年齢｝歳なので、料金は｛料金｝円です。」と表示。

（3）コンピュータサイエンス入門• 目的• プログラミングとはどのようなものなのかを知り、コンピュータに関する基礎知識を習得する。
• 利用するプログラミング言語：• 日本語プログラミング言語 なでしこ
• Python（パイソン）• ゴール• プログラミングを経験し、プログラミングとはどのようなものなのかを自分の体験をとおして語れる。
• 習得したプログラミング技術を使ってシステムを開発し、システム開発とはどのようなものなのかを理解する。
11

講義スケジュール• 第1回（9/20）• ガイダンス• プログラミングとは• 第2回（9/27）• プログラミング実践（1）• 第3回（10/4）• プログラミング実践（2）• 第4回（10/11）• プログラミング実践（3）• 第5回（10/18）• プログラミング実践（4）• 第6回（10/25）• プログラミング実践のまとめ• 第8回（11/8）• リフレクション• 第9回（11/15）• コンピュータサイエンスとは• 10回（11/29）• システム開発（1）• 第11回（12/6）• システム開発（2）• 第12回（12/13）• システム開発（3）• 第13回（12/20）• 期末テスト• 第7回（11/1）• 中間テスト12

実際に動かしてみる！
■プログラムカメ作成
N = 10
30回繰り返す
Nだけカメ進む
90だけカメ右回転
N=N+10
ここまで
なでしこ3 Web簡易エディタ

第2回課題• 内容• カメを使って、目が回りそうな図形を描く

プログラミングは楽しいと思ってもらう。
繰り返しの考え方を理解する。

1回進むごとに、10だけ増える• ヒント

30回繰り返す、と書けばよい• 30回繰り返す• 最初に進む長さを10とする。
• その後、10だけ追加した分の長さを進む。
• 初期値を設定し、変数を使う• 提出方法• manabaのオンライン入力レポートにプログラムを貼り付ける

14

第3回課題コンピュータと会話する。
繰り返しとプログラム特有の書き方を知る。
・ i = i + 2 など

• プログラム演習（3）で作ったプログラムをベースに、以下のプロ
グラム①～②を開発し、その正しさを検証する• 要件① 正の整数値を入力し、2から入力した値までの偶数の合計を計算する② 正の整数値を入力し、1から入力した値までの奇数の合計を計算する• ヒント（①、②の開発において）• 変数iの初期値を変更する（①の場合）• 繰り返し文の中の i の計算を見直す（変更する）• 提出方法• manabaに上記のプログラム①～②を登録する（オンライン入力レポート）

15

第4回課題• 対話プログラムを作る！
• ① 単位変換プログラム■提出方法
manabaに上記のプログラム①～②を登録する（オンライン入力レポート）• 仕様• 何インチですか？ と尋ねて、インチを入力する• 入力されたインチをセンチに変換して表示する• 表示形式は以下のとおり• 例：27インチは、68.58センチです• 確認すべきこと• 1インチは何センチでしょうか？

コンピュータと会話し、分かりやすく結果を返す。
関数を知り、使える。
- int など

• ② ウォーキングの消費カロリー計算プログラム• 仕様• 体重は何kgですか？ と尋ねて、体重を入力する• 何分歩きましたか？ と尋ねて、時間（分）を入力する• 表示形式は以下のとおり• 例：消費カロリーは283.5kcalです• 消費カロリーの計算式• 消費カロリー＝3×体重×運動時間×1.05※ 運動時間の単位は時間（H）である

16

第5回課題

条件分岐を使いこなせる• 次の交通システムの料金を計算するプログラムを作成せよ
計算対象の交通システムの料金体系は以下のようになっている。
料金は距離に依存した料金表から求める。
大人料金は、10kmまで200円、10kmを超えると250円である。
子供料金は大人料金の半額である。
15歳以上は大人料金、それ未満（15歳は含まず）は子供料金とする。
3歳以下の幼児は無料である。
60歳以上の高齢者は、大人料金の2割引とする。
※ 距離と年齢を入力する際、マイナスの値、小数点の値、3桁の値は入力されないこととする• 仕様• 距離と年齢を尋ねること• 以下のように結果を表示すること• 距離は30kmで、利用者は10歳なので、料金は125円です。

• 提出方法• manabaのオンライン入力レポートで、上記のプログラムを入力する。

17

第6回課題ある大学の統計学の授業で行ったテスト（100点満点）の点数を28人分示す。
表 統計学のテストのデータ
1360

8175656448584960

87657845616059

4424914309640

45537021

次の基本統計量を求めるプログラムを作成せよ：最大値、最小値、範囲、平均、分散、標準偏差※ 分散と標準偏差の求め方は次のページを参照のこと※ manabaに登録した「第6_回基本統計量のプログラム(課題).txt」を参考にしてもよい（23ページ参照）
求めた結果を次のように表示すること今まで覚えた事をすべて使って問題を解く。
本当は、小数点は1桁で表示したいが、今回は小数点の桁数表示は制御しないことにする

18

開発したシステム• 今回の講義で題材としたシステム•

システム名–•仕様–•

性別：男性、女性
年齢：20～60の数値（20歳以上、60歳以下を表す数値）
任意追加項目：眼底検診、メタボ検診、婦人科検診、脳検診

制約
–––

•

任意追加項目は任意で選択できます。任意項目なので選択しなくてもかまいません。ただし、選択する場合は、受診できるのはそのうちの1つのみです。

選択肢–––•

健康診断申込システム

簡単なGUIを使ったシステ
ムを開発する！
レビューやテストなどの技術も学ぶ。

メタボ検診と婦人科検診は、年齢が35歳以上の人のみ選択できます。
脳検診は、年齢が45歳以上の人のみ選択できます。
なでしこで開発
婦人科検診は女性のみ選択できます。

健康診断申込システムの画面

するUIとは違う

19なでしこで開発• 内容• 右と同様のインタフェースを持つプログラムを開発する。

• 処理• 前ページの制約条件を判断し、適切なメッセージを出力する。

https://sel.jpn.org/blog.php#2022-11

レビューでバグを見つける
次のソースコードには3箇所バグがあります。
レビューでバグを検出してください。
1. # 関数：選択確定確認
2. # 引数：arg1（日付）、arg2（性別）、arg3（年齢）、arg4（検査）3. # 内容：日付、検査日、性別、年齢が選択されているかどうか確認する
4. # 戻り値：エラーの時は0を返し、正常の場合は1を返す
5. ●選択確定確認(arg1,arg2,arg3,arg4)
6.
もし、arg1=null または arg2=null または arg3=null または arg4=nullならば7.
もし、arg1=null ならば 「日付が選択されていません」と言う
8.
もし、arg2=null ならば 「年齢が選択されていません」と言う
9.
もし、arg3=null ならば 「性別が選択されていません」と言う
10.
もし、arg4=null ならば 「任意追加項目が選択されていません」と言う
11.
判定結果 = 0
12.
違えば、もし arg2=「選択してください」 または arg3=「選択してください」 ならば
13.
もし、arg2=「選択してください」 ならば 「性別が選択されていません」と言う
14.
もし、arg3=「選択してください」 ならば 「年生が選択されていません」と言う
15.
判定結果 = 1
16.
違えば
17.
判定結果 = 1
18.
ここまで
19.
判定結果を戻る。
20. ここまで21

レビューでバグを見つける
次のソースコードには3箇所バグがあります。
レビューでバグを検出してください。
1. # 関数：選択確定確認
2. # 引数：arg1（日付）、arg2（性別）、arg3（年齢）、arg4（検査）3. # 内容：日付、検査日、性別、年齢が選択されているかどうか確認する
4. # 戻り値：エラーの時は0を返し、正常の場合は1を返す
5. ●選択確定確認(arg1,arg2,arg3,arg4)
6.
もし、arg1=null または arg2=null または arg3=null または arg4=nullならば7.
もし、arg1=null ならば 「日付が選択されていません」と言う
8.
もし、arg2=null ならば 「年齢が選択されていません」と言う ← 性別
9.
もし、arg3=null ならば 「性別が選択されていません」と言う ← 年齢
10.
もし、arg4=null ならば 「任意追加項目が選択されていません」と言う
11.
判定結果 = 0
12.
違えば、もし arg2=「選択してください」 または arg3=「選択してください」 ならば
13.
もし、arg2=「選択してください」 ならば 「性別が選択されていません」と言う
14.
もし、arg3=「選択してください」 ならば 「年生が選択されていません」と言う
15.
判定結果 = 1 ← エラー処理なので、0にならないといけない
16.
違えば
17.
判定結果 = 1
18.
ここまで
19.
判定結果を戻る。
20. ここまで

22

テストでシステムの動作を確認する• manabaに登録されている「テスト仕様書・成績書」を使って、本システムのテストを実施してください。

23

期末のアンケート（自由記述）• 楽しかったなあ• 面白かった授業！
• なでしこという日本語のプログラミングサイトを使ってプログラムに対する難しそうというイメージやとっつきにくさをうまく無くせていて、とても受けやすい授業でした。
• この講義はプログラミングの授業がメインで、自分はプログラミングは苦手でやっていけるかなと思いましたが、健康診断のプログラミン
グで身近なものでプログラミングをしていて自分も何か作りたいと興味を持ちました。なので冬休み期間中にプログラミングのことを勉強して自分が作りたいと思っている鉄道切符発行券を作りたいと思います。
• 先生も優しくて授業もわかりやすくて良かったです。 コロナ大丈夫
でしたか、、お体お大事にしてください• この授業では、プログラミングや様々なことついて、学ぶことができた。授業で取り組んだ内容には、基礎から発展したものまであり、多くのことを学ぶことができた。この授業で学んだことをしっかり身につけて、将来に活かしていきたいと思う。

24

（4）まとめ• プログラミング教育の効果については評価できていない• 手を動かさない学生は少ないので、全体的には興味を持って取り組んでもらっていると思う• タブレット（iPad）を使う学生も多いので、プログラムの編集で苦戦する時があった。中にはスマホでプログラミングする学生もいる。プログラミング用の編集機能（ソフト？）があるとよいが…
• ソフトウェア開発管理（レビューやテスト、コーディングスタイルなど）の話にはつなげやすい• そもそも論になってしまうが、何を教えたいのか、どこをゴールにするのか、どんな事を感じてもらいたいのか、をよく考える必要がある。
25