【コラム】

日本語で10行プログラミング

19 時間の使い方を反省するプログラム

クジラ飛行机  [2005/05/26]

なでしこ開発日記 - IPAX2005に出展

こんにちは。なでしこ作者のクジラ飛行机です。私事ですが、IPAX 2005(5/18~5/20)に出展しました。これは、情報処理推進機構(IPA)の事業成果等の総合展示会です。なでしこのブースでは、パンフレットを配ったり、実際にプログラムを作るところを見せたりしました。イベントは、皆様から素直な意見が聞ける絶好の機会です。今回も来場の皆さんからたくさんの意見を頂きましたので、今後の開発に反映させようと思います。

また、嬉しいことに、日本発のスクリプト言語"Ruby"の作者のまつもとゆきひろさんとお話することもできました。会話にあふれるユーモアとヒゲが印象的な方で、ヒゲについて伺うと「成功するプログラミング言語の作者(の多く)はヒゲを生やしている」とのことでした。それを聞いて、私もヒゲを伸ばさなければ、と密かに思っているところです。

他にも、いろいろな方と知り合うことが出来て、面白いお話を聞くことができました。3日間のブース展示でくたくたになったものの、とても有意義なイベントでした。

PCの前にいると時間が短く感じる人へ

今回は、時間の使い方を反省するというちょっと変わったプログラムを作ってみようと思います。私は、普段からPCに向かって仕事をするのですが、PCの前で作業をしていると、あっという間に時間が過ぎてしまうのです。「おやっ、もうこんな時間に」と、時計を見て驚くことも多いです。

そこで、今回は時間の使い方を記録するソフトウェアを作成してみます。人間の集中力が持続するのは、だいたい30分と耳にしたことがあります。30分間隔で、この30分で何が出来たのかをメモしておきます。そして、その日の終わりに、時間の使い方について反省してみようというものです。

時間の使い方を反省するソフトを設計

実際の使い方としては、タイマー付のメモ帳という感じのものを作ることにします。30分ごとに「作業内容を記録してください。」とプロンプトと共にメモ帳のウィンドウが前面に出てきて、そこに作業記録をつけていくという流れになります。

そこで、プログラムを以下のように設計しました。

  1. 以下の(2)から(4)の処理を繰り返し行う
  2.   この30分間で何が出来たのかをユーザに記入させる
  3.   ユーザが記入した内容をファイルに保存する
  4.   プログラムウィンドウを最小化さくして30分待つ

30分ごとに作業記録を残し時間の使い方を反省するソフトウェア

10行プログラム

以下が実際になでしこで作った10行プログラムです。

保存ファイルは「{デスクトップ}作業記録.txt」#1
もし、保存ファイルが存在するならば、ログに保存ファイルを開く。#2
違えば、ログは「30分ごとに作業内容を記入します。」#3
オンの間#4
  母艦を元通りに。#5
  ログ&「{改行}{今日} {今}>」をメモ記入。#6
  もし、それが空でなければ、ログに代入。ログを保存ファイルへ保存。#7
  母艦を最小化。#8
  30×60秒待つ。#9
※今回のプログラムは、なでしこのバージョン1.27で動作確認しています。動かない場合は最新版で試してみてください。

プログラムの解説をします。1行目では、記入した作業記録を保存する場所を変数「保存ファイル」に代入しています。

2行目から3行目では、以前に記録したファイルがあれば、その内容を変数「ログ」に読み込んでいます。もし、一度も記録したことがなければ、「ログ」に「30分ごとに作業内容を記入します。」という文字列を代入しておきます。

4行目にある「オンの間」というのは、プログラムが動いている間、ずっと、インデントした範囲(5行目から9行目)を繰り返し実行するという意味になります。

5行目にある「母艦」というのは、プログラムのメインウィンドウを表します。ここでは、母艦が最小化されていれば、これを元通りの大きさに戻します。

6行目の「メモ記入」というのは、メモ帳のような簡易エディタのインタフェースを表示する命令です。この命令の使い方は後で解説します。このとき、今までのログとともに入力時点の時刻を挿入しておきます。

7行目では、入力された内容を変数「ログ」に代入して、その内容をファイルへ保存しておきます。

8行目はプログラムのメインウィンドウである「母艦」を小さくします。そして、9行目では、30×60秒、つまり30分何もしないで待ちます。その後に、再び5行目を実行するという具合です。

プログラム備考

本連載の第17回目「ラーメンタイマーを作る」では、タイマーの部品を利用して繰り返しタイマーを発生させていました。しかし、今回は、タイマー部品を使わずに、「xxの間」構文と「xx秒待つ」命令を組み合わせてタイマーを擬似的に表現しています。

この「xxの間」構文は、BASICやC言語でいうところの「while」構文と似ています。xxの部分に真または偽の値を返す式を記述し、その式が真の値を返せば、その次の行からインデントされた範囲を繰り返し実行します。以下のプログラムは、変数「A」が5以下の間、インデントされた範囲を繰り返し実行するプログラムです。

A=1
Aが5以下の間
  「Aの値は{A}です」と表示。
  A=A+1

Aが5以下の間繰り返すプログラムの実行結果

また、10行プログラムの4行目のように条件文を「オンの間」と書けば、プログラムを起動している間、条件が常に真の値を返すため、プログラムを終了するまでインデントされた範囲のプログラムを繰り返すようになります。

10行プログラムの6行目には、「メモ記入」という命令が出てきました。この命令を実行すると、簡易メモ帳のインタフェースが表示され、ユーザが自由に文字列を入力することができます。

「ここに文章を書きます。」とメモ記入。
それを表示。

「メモ記入」命令の実行例

「xxのメモ記入」のxxの部分には、あらかじめメモ帳に表示させておくべき文字列を指定することができます。10行プログラムの中では、今までの記入ログと、入力時点の時刻を表示させていました。

そして、ユーザが決定ボタンか取消ボタンを押すまでの間、待機しています。決定ボタンが押された場合は、変数「それ」にユーザが入力した内容を代入します。取消ボタンが押された場合は、変数「それ」の値が空になります。

改造のヒント

今回は、作業記録をつけるファイルを固定にしていますが、これを、1日ごとに別のファイルにするのも良いでしょう。これは、プログラムの1行目にあるファイル名に日付データを付け加えることで実現できます。また、今回はメモ帳への直接記入でしたが、これをグリッドのような表に記録できるようにしたら、もっと見栄えがよくなるでしょう。

それから、この時間の使い方を反省するソフトウェアを、試験勉強用に改造するのはいかがでしょうか。勉強を始める前に、今日の学習予定を記入し、その時間内に必要なものが暗記できたかどうか、問題集を進めることができたかなどをチェックするようにするのです。

実際に、私自身が使ってみた感想ですが、ちょっと作業に集中していると、うまくできない部分に集中してしまい、時間を無駄に過ごしていることが多かったようです。時間のかかる部分を後回しにして、優先順位の高い仕事から取り組むようにしないといけなかったなぁ、と反省しました。なかなか予定通り進まないスケジュールも、細かく時間を区切って反省することで、目標達成に近づくことができるかもしれません。

    新着記事

    特設サイトの情報

    人気記事

    一覧

    イチオシ記事

    新着記事

    特別企画

    一覧