roy > naoya > 基礎プログラミングII > (10)自由課題実施期間[1]

(10) 12/3の授業内容:自由課題実施期間[1]

⇒複雑なCGIを作る上でのヒント

[1]自由製作課題について

これまでは一人で限られた時間の中でプログラムを作成してきたため、規模の大きなものを作成することが難しかった。1年間続いたRubyの授業もそろそろ終わりを迎えようとしている。そこで、1年間の集大成として、これまで学んだ技術を駆使してグループで規模の大きいログラムを作ってみよう。

作成条件は以下の通りとする。

作成するもの

  1. プログラム(必ず2つ以上作成すること)
    • 理由(1):プログラムが1つだと得意な人が任されることになり、作業量の偏りが生じやすい
    • 理由(2):プログラムが1つだとグループ内の得意な人1〜2名の力量により結果が決まってしまう
    • 理由(3):プログラムが1つだと複数の案が出た時に却下される案が多くなる
    • 理由(4):今年は例年と比べて受講生のレベルが高いので2つくらい作れそう
  2. Webページ(プログラムの説明書やプログラム本体を掲載)
  3. プレゼンテーションファイル(発表時に使用)

自由課題グループわけ

これまでに獲得をした得点に基づき、各グループの戦力が同程度になるよう に調整している(間違いがあったので作り直しました。2012.11.29)。

12345
岡井 厳治
木村 貴博
齋藤 駿
佐久間 有紗
武田 愛美
福島 大地
朝岡 拓也
安食 一也
加藤 光基
川合 明里
古城 楓子
齋藤 一徳
嵐田 寛史
石黒 真弓
高橋 彩
高橋 一輝
長岡 大輔
永澤 かれん
石山 将史
大石 朝也
北川 優
小林 寛紀
田村 成彬
和田 祐樹
大谷 勇人
熊澤 舞子
戸沢 満
西間木 理紗
森 裕己
渡辺 一輝

題材設定

後期グループ課題は諸君の実力を公(おおやけ)にアピールできるよう公開しやすい題材を選ぶ形式とする。以下の各部門から好きなものを選んで課題作成する。

  • 地域活性部門

    何か地域を盛り上げる助けになるもの

  • 福祉部門

    不自由を克服する人を支援するものなど

  • 役立ち情報部門

    知りたい人にとってしっかり役立つ情報を提供するもの

  • シミュレーション部門

    実世界でのできごとを計算機上で仮想的に実験するもの

  • 教育部門

    何かを学習する人の強力な助けになるもの

  • ビジュアル部門

    効果的な視覚情報を多数用意した凝った作りのもの

  • エンターテイメント部門

    大人から子供まで幅広く楽しめるもの

他チームの作品を評価するときに、その作品がエントリした部門のテーマに則しているかも大きく加味する。

前期同様の投票を行ない、上位2チームには合同発表会でのクラス代表発表をしてもらう。

過去の自由製作課題

参考までに過去の自由製作課題の例を示す。

[2]今後の予定

本日の後半より自由製作課題を実施する。5〜6人のグループで規模の大きなプログラムを作成する。以降の予定は以下の通りである。1月の授業は19日からであるが、すでに発表1週間前であるため、本日中に作業分担を行い、各自で作業を進めておくとよい。

  • 12月3日(月)
    • 自由課題グループ分け
    • 楽しいプログラムを作るためのテクニック
    • グループ名の決定
    • 役割分担の決定
    • 作成するプログラムの検討
  • 12月10日(月)
    • プログラムの作成開始
    • Webページの作成開始
    • プレゼンテーションファイルの作成開始
    • 発表の流れの検討
  • 1月7日(月)
    • trr
    • プログラムの完成
    • Webページの完成
    • プレゼンテーションファイルの完成
    • 発表練習
  • 1月21日(月)
    • 自由課題発表会(授業内)
  • 1月○日(補講期間)
    • 各クラス上位2チームによる合同自由課題発表会

[3]本日の作業内容

役割分担を決める。その上で何をいつまでにやるのかを相談する。役割としては例えば以下がある。準備期間中、当日それぞれについて役割を決定し、何もすることがない人が出ないようにしよう。

授業以外の時間に集まって作業を行う可能性があるので、連絡が取り合えるようにしておこう。後で、連絡が取れなくなって困ることがないようにしておくこと。

準備期間の役割(例)

  • プログラム作成
  • プログラムデータ作成(クイズなどの場合)
  • プログラムシナリオ作成(シミュレーションゲームなどの場合)
  • Webページ作成
  • 画像作成(Webページやプログラムで使用)
  • プレゼンテーションファイル作成
  • 発表シナリオ作成(時間配分や発表の流れ)

当日の役割(例)

  • 発表役
  • タイムキーパー
  • コンピュータ操作役

「応援」や「遊軍」、「パシリ」などの実質的に仕事のない役割は定めず、各人が何かしらグループ活動に貢献できるように分担を考えること。

役割分担が決まったら、作成するプログラムやWebページのイメージ、作成する画像などについて相談し、早速作成に取り掛かること。

[4]プログラム作成上の注意

作成するプログラムは公開することを考え、以下の点に留意しよう。

  • 操作方法をわかりやすくする:ユーザ≠プログラム作成者であるため、初めて実行した人でも操作方法がわかりやすいことが望ましい。例えば、実行直後にprint"好きな数字を入力してください\n"とすると、何をするプログラムであるのか、何のために数字を入力しなければならないのかがわからない。ただし、余りにも細かく説明しすぎると、読むのが煩わしくなってしまう。プログラム作成担当でないグループ内の他のメンバに意見を求めると良い。
  • プログラムの構造をわかりやすくする:どこでどのような処理をしているのかについてコメントを残しておくと良い。複数人で協力して作成する場合、他人が書いたプログラムを理解するためには時間がかかることがある。また、よく出来たプログラムの場合、次年度以降の自由課題作成において参考にされる可能性もある。せっかく作ったプログラムであるため、将来的に活用してもらえるよう、構造をわかりやすくしておこう。
  • 協力して作成する:例えばクイズを作る場合、一人で問題を考えると20問程度が限界かもしれない。しかし、全員で考えれば100問以上の問題を作ることも出来る。毎回同じ問題が同じ順番で出題されるプログラムは1〜2回しか実行してもらえないが、プールした100問の問題からランダムに10問出題するようなプログラムであれば、何度でも楽しむことができる。せっかく作るのであるから、多くの人に繰り返し実行してもらえるようなものを作ろう。
  • 技術レベルの高いプログラムを作成する:1年間Rubyを学んできた集大成のプログラムである。単に楽しい/役に立つだけではなく、技術的にもレベルの高いものを目指そう。if文を使ったシナリオ分岐型のプログラムは、ストーリーとしては面白いかもしれないが、それほど難しい技術を使っているわけではない。open-endやハッシュ、CGIなどを使うことを考えてみよう。

[5]作成するWebページについて

すばらしいプログラムが出来上がったとしても、Webページが訪問者の目を惹くように作られていなければ、読んでみようという気持ちにはならない。デザイン、内容いずれも工夫しよう。

内容

Webページを作成する際は、以下の項目を必ず含めよう(それぞれ別のページに書いても良いし、1ページにまとめても良い)。

  • メンバー紹介:メンバーの名前や役割分担。各自のページ(1年生のときに作成したもの)へのハイパーリンク
  • 説明:以下の項目について記載しよう
    • プログラム名
    • プログラム概要
    • 保存方法
    • 実行方法
    • 使い方・遊び方
    • 著作権の表記
  • プログラム:プログラム自体も~/public_html/におき、ダウンロードできるようにする

各項目の内容については、架空のプログラム「Five Seconds!!」のページを参考にしてみよう。

プログラム名・プログラムの概要

何をするプログラムだかわからないままに実行する人はいない。何ができるのかというのはまさにプログラムの売りになる点である。ゲームであれば難易度が数段階に分かれていることが売りになるかもしれないし、実用的なプログラムでは細かな設定ができる点が売りになるかもしれない。淡々と機能を説明するのが良いのか楽しさを前面に出すのが良いのかは、作成するプログラムによって変わってくる。実際にプログラムを公開しているページを確認し、参考にしてみよう。

保存方法・実行方法

これまで、この授業を受けてきた人であれば詳しく説明しなくてもわかるため、これらは不要と感じるかもしれない。しかし、Webページにプログラムを掲載するということは、(学内のみに制限されているが)誰でも自由に閲覧することができる。プログラムを実行したことのない1年生が、先取りをして勉強しようと考え、閲覧しているかもしれない。こうした点を踏まえ、誰でも保存して実行できるよう詳しく説明しておこう。

遊び方

実行しても、どのように操作をすればよいのかわからないプログラムでは、積極的に使ってみようとは思ってもらえない。プログラムを作成する際にprintメソッドなどで説明を盛り込むことも重要であるが、「遊び方」(取扱説明書)のページを作ることも考えるべきである。プログラム内に表示されるメッセージはその時しか見ることが出来ないが、Webページに記載しておけば、実行しながら随時確認することができる。懇切丁寧な説明は不要だが、最低限知っておいて欲しいことを書いておくとよい。

著作権

プログラムの著作権は作成者に帰属する。プログラムをダウンロードした人は著作権を取得できるわけではない。著作権を保有する作成者は、作成したプログラムについて改変(内容を書き換えること)や再配布(ダウンロードしたプログラムを第三者に配布すること)の可否、免責事項(このプログラムを使用して生じたいかなる損害に対しても作成者は責任を負わないというようなこと)などを定めることができる。現在では、OpenOfficeやFirefoxなど、プログラムのソースを公開し、誰でも改変、再配布が認められたオープンソースが普及してきている。今回作成するプログラムも営利を目的としたものではないため、改変や再配布など厳しく制限しないようにしよう。

ページのデザイン

背景と文字色のコントラストを考え読みづらくならないようにすること、文字を小さくしすぎないようにすること、重要な点を強調することなどに加えてページのデザインにもこだわってみよう。プログラムの中味だけでなく、Webページの見栄えでも勝負しよう。

適切な色の組み合わせ。白背景に黒文字が最も読みやすい

[6] プレゼンテーションファイルの構成

14回目の授業では、作成したプログラムの発表会を行う。プレゼンテーションを上手に行うことは、出来栄えの良いプログラムを作るのと同じくらい重要である。いくら素晴らしいものが出来上がっていても、聞くに堪えない発表であれば、聞き手は話を聞かずに他のことを始めてしまうだろう。発表時間は10分間とするが、聞き手の10分間を無駄にすることがないよう時間を有効に活用しよう。

そのためには、行き当たりばったりで発表するのではなく、発表の流れを決めておく必要がある。また、単に口頭で発表するだけでは重要なところがわかりづらいし、音声情報は時間的に保存ができないので、聞き手がWebページに注意を向けた際に聞き逃してしまう可能性がある。プレゼンテーションソフトでスライドを作成しておくと、発表者は重要な点を言い忘れることなく発表することができ、聞き手は聞き逃してもスライドを確認して内容を把握することができる。

以下が発表内容になるだろうが、これらの項目の順番や内容は各グループで自由に決めてよい。社会に出れば大学卒の皆さんはプレゼンテーションをできることが当然だと思われる。「もう少ししっかり準備していればよかった」とならないよう、この機会を有効に活用しよう。

  • チーム名の由来
  • メンバー紹介
  • プログラムの概要
  • プログラム作成理由
  • 使い方・遊び方
  • セールスポイント

架空のプログラム「Five Seconds!!」のページにもサンプルのプレゼンテーションファイルがアップロードされている。参考にしてみよう。

[7] 乱数の発生(rand)

>>More

[8] 少し間を空ける(sleep)

>>More

[9] 時刻を取得する(Time.now)

>>More

[10] 大きな文字を出す(systemを用いたbannerコマンド)

>>More

[11] ポップアップで画像を表示(systemを用いたdisplayコマンド)

>>More

[12] 文字色変更・画面操作(\e[Xm)

>>More

[13] 配列に関するTips

>>More

[14] プログレスバーを作る

>>More

[15] 文字列操作

>>More

[16-1] コマンドラインを用いたデータ入力(ARGV)

>>More

[16-2] コマンドラインを用いたファイル出力

>>More

[16-3] STDERRとSTDIN・プログラムの強制終了

>>More

[17]出席課題

グループのメンバー、チーム名、役割分担、作成するプログラムの案について報告する。グループの他のメンバーにお任せにしていないことを確認するため、グループの代表者のみではなく、全員が提出する。

提出要領は下記の通り。

  • 提出先:課題提出用メールアドレス
  • メールのSubject:attend10
  • 提出期限:授業終了時まで

Tips:emacsでの日本語入力のオンオフはCtrl-oです

Tips:Mewによるメールの送り方はMewコマンドを参照