飯島[1993b]
「数学的問題解決を支援するソフトウェアの開発-作図ツール Geometric Constructorの開発 の理念と過程-」 ,
三輪辰郎編『数学的問題解決能力の育成におけるコンピュータの役割に関する日米比較文化的研究』,科研費報告書,1993,89-117
]
          問題解決を支援するソフトェアの開発
      −作図ツールGeometric Constructor の開発の理念と過程−
^
                            愛知教育大学
                             飯島 康之
]
                1.はじめに
^
数学教育のためのソフト開発は,様々な観点からなされるようになってきた。しかし,
問題解決を支援するソフトウェアは,まだ非常に少ない。その背景には,問題解決を支援
するソフトウェアの開発は,単発のシミュレーションソフトの開発と違って,数学教育学
の観点からの考察が必要だということがある。ある意味ではソフトウェアの開発というよ
りは,数学的問題解決の研究の一部と言っても過言ではない。ソフトウェアの設計・開発
・利用・修正の様々な面で,数学教育研究の一部としてのソフトウェア開発あるいは,ソ
フトウェア開発という形での数学教育研究が現れてくる。
そこで本稿では,このような側面を筆者自身の開発過程というケーススタディを用いな
がら述べていくことにする。
]
 2.ソフトウェア(ツール)を開発することの意義 (数学教育の観点から)
^
数学教育学において,特に問題解決の観点から考えた場合,問題解決のツールとしての
ソフトウェア開発を開発する意義は,主として次の二つにあると考える。
・探究のための環境の設計・実現としてのソフトウェア開発
・数学的概念に対するより直接的な操作の実現としてのソフトウェア開発
以下,それぞれについて述べることにする。

(1) 探究のための環境の設計・実現としてのソフトウェア開発
問題解決(あるいはより広い概念としての探究)の様相は,様々な要因によって変化す
る。既知の知識,使える方法によっても変わる。また,問題の提示の仕方によっても変わ
る。そして,解決のための環境によっても変わる。それらの要因をどうコントロールする
かも,数学教育学の課題の一つであった。その中の環境という要因について,これまでも
取り組まれてきたものもあった。一つは教具の研究である。また,もう一つは,先生と生
徒,生徒同士などのコミュニケーションである。
ソフトウェアの開発は,この環境という要因に関して,大きな影響を与える。つまり,
教具と比べると非常に限定された媒体の中でしか実現できないにもかかわらず,その設計
と実現をプログラムの設計と実装によって行えるため,コントロール可能な範囲が,教具
の場合よりも非常に広い。そのため,これまでの教具研究として行われてきた研究を,(
限定された媒体の中において)より大規模に行うことが可能である。
もう一つの大きな要因は,作り出された環境は,問題解決のための強力なツールとなる
ため,解決の様相が大きく変わる点である。同じ問題であっても,手計算で取り組む場合
と,ソフトで処理する場合は,問題解決者自身にとっての「問題」は全く違う。問題解決
の様相を規定する大きな要因は,解決者と環境であるが,環境が異なると問題解決は一変
することを,ソフトウェアの出現ほど明確に示すものは少ない。ここにおいて,問題解決
の様相を大きく変える環境としてのソフトウェア,そしてその開発の意義が示される。す
なわち,望ましい問題解決の様相を実現するために,どのような環境を設計し,実現する
ことができるかという課題に対して,具体的なアプローチを可能にするものとして,ソフ
トウェア開発の研究が位置づくのである。

(2) 数学的概念に対するより直接的な操作の実現としてのソフトウェア開発
また,数学的内容の観点から考えた場合,ソフトウェア開発は,数学的概念に対するよ
り直接的な操作を実現するという意義を持つ。
これまでの数学的手法では,集合その他の基礎的な概念等を出発点にして,公理的方法
によってその理論を構築してきた。この方法は強力であるが,理論を理解するためには,
その構築に必要な基礎的な概念をまず理解することを必要とする。数学的概念は抽象的な
存在であるが故に,学習者がみずからの精神的世界の中にそれを構成しなければならない
。操作の対象は外的存在ではなく,内的存在であり,みずからの中に構成しなければなら
ない存在である。このことを前提とすると,基礎概念からの積み上げ,基礎概念を通して
理解することは,数学学習における必然的なことという側面が強かった。
しかし,それらの数学的概念を操作可能な対象の世界の中で具現化できる可能性が,コ
ンピュータの普及によって,非常に拡大された。
数学的世界の実現は,やはり教具・教材論として,これまで研究されてきた内容である
。特に,初等数学の多くのものについては,様々な教具等が開発されてきた。しかし,特
に,その内容が高度になればなるほど,限界の方が大きくなってきた。教具として表現す
べき世界は,モノとしての物理的存在である。その物理的存在の中に,数学的概念の様々
な要因を表現するためには,様々な困難点が出てくるからである。
基礎からの積み上げとして理解すべきものとしての数学は,「努力さえすれば理解可能
だ」という明るいニュースとともに,次の二つの困難点を引き起こす。一つは,基礎が分
からないと,理解不可能だということである。そして,理解しようとしている内容と,自
分の既知の内容に隔たりがある場合,実質的に学習不可能であることを意味している。学
習しなければならない事柄の多さを前に,あきらめの気持ちが生まれてくるのも当然では
ないだろうか。もう一つは,その概念に対する接し方,あるいはその概念に関わる様々な
数学的問題場面を分かりにくくしてしまうという点である。二つめの困難点について,よ
り具体的に述べることにしよう。
最初の例を解析幾何から取り上げよう。解析幾何は,幾何の世界に,代数的手法を導入
した。問題はすべて,方程式をどう処理するかということに帰着されることになった。そ
のため,「解ける問題」の範囲は非常に大きくなった。しかし,解決者にとっては,その
代数的処理に要する作業が大きいため,元々の問題の本来の意味が分かりにくくなったの
も否定できない。図形に対する接し方,問題の感じ方も含めて改善されたとは言いにくい
。特に,カリキュラムによって構築された学校数学の中での姿を考えると,本来のよさを
引き出せない内容も多くなった。
例えば,その一つが「軌跡」である。軌跡は,新しい幾何的対象を生成するための一つ
の方法である。しかし,現在の学校数学の中での「軌跡」は,その本来のよさが現れてい
る場所は少ない。「条件を満たす点」として,中学校で扱われている部分程度である。高
校になると本格的に軌跡を扱う場所が出てくるが,そのときの軌跡は,新しい幾何的対象
を生成する手段というよりは,方程式をどう処理して新しい式を作るかという,代数的処
理の練習のための課題という印象の方が強くなってしまっている。
その一つの原因は,図形を静的に捉えていること,そして紙と鉛筆で考えていることで
ある。軌跡の一つの出発点は,点の運動である。図形を変化するものとして捉え,ある時
刻の状態として捉え,点は動いているものとして捉えるならば,軌跡を考えることは非常
に自然である。しかし,そのような動的な見方をする場合に,紙と鉛筆で考えるのは,困
難な場面も多い。紙という属性自体が,静的な分析に合った媒体だからである。
式で考えるということは,関係式を満たす集合全体を思考の対象としている点,つまり
図形の条件そのものを操作の対象にしている点で,優れた方法である。しかし,問題は,
式として表現されたものを,図形に関する直接的なデータとして生徒が感じるかという点
である。式のある部分が変わるというのは,要するに図形のどこが変わるということか,
図形をこのように変えるということは,式のどの部分を変えるということか,というよう
な,式と図形の両方の解釈がかなり柔軟にできるようにならないと,「式で考える」とい
うことはしにくい。つまり,いろいろな処理・解釈が必要という意味で,式を操作するこ
とは,間接的な操作になってしまうのである。
しかし,そのような処理・解釈をコンピュータが人間に代行し,自動的に行ってしまう
と,事情がかなり変わってくる。例えば,式を入力したり,そのあるパラメータを変えて
みたときに,どのような図形になるのか,逆に図形に対して,その式はどうなるのかが自
動的に表示されるとしよう。すると,図形を見ながら,式を操作することができるように
なる。式は文字通り図形に関するデータであり,図形をコントロールするために操作可能
なものになる。つまり,図形の対するインターラクティブなインターフェイスとして式を
捉えることが可能になってくる。
この操作対象,つまりインターフェイスが変わってくると,同じ問題に対しても,アプ
ローチの方法が変わり,何を具体的な問題として感じるかが変わってくる。そして,例え
ば,軌跡の場合にも,問題解決の中で軌跡が登場する場面等が大きく変わってくる。
]
          3.ソフトウェア開発におけるサイクル
^
(0) 「サイクル」としてのソフトウェア開発
ソフトの開発と言うと,一般的には,次のようなプロセスを考える場合が多い。
           要求定義 → 仕様の決定 → 実装
この過程をどのように行うかも,一つのテーマには違いないが,それはソフトウェア工
学一般論としての問題であろう。数学教育学の中でのソフトウェエ開発,特に数学的探究
のための環境作りとしてソフトウェア開発を位置づけた場合には,「使ってみてまた直し
ていく」というサイクルに注目することの方が大切である。
ある問題を解決するための道具として,ソフトを作る。しかし,道具としてのソフトが
なかったときに問題と感じたことが,ソフトを作ったときにも,同じような問題として感
じるわけではない。むしろ,同じ感覚で接するとしたら,ソフトはあってもなくても同じ
である。一般には,ソフトなしのときの問題と,ソフトありのときの問題とは全く別のも
のと言っていい。最初に想定していた問題状況とどの程度異なるのか,また,ソフトがで
き,それを用いて感じる不満点は何か,ソフトをどう修正するか,問題をどう変えるか,
そのような様々な検証を行って,様々な事柄を調整し,その中でソフトも変えていく必要
性が必ず出てくる。
そのような相互作用の中で見出すこと,検討することの中に,ソフトを作る本当の意義
と面白さが潜んでいるのだ。そこで,本稿では,まず,本節で,一般的なことの概略を述
べ,次節ではGeometric Constructor の場合を例に取りながら,このサイクルの様子を記
述することにする。

(1) 問題解決におけるボトルネックの発見
そもそも,どうしてソフトなどを作ろうと思うのか。それは,問題解決の状況に不満を
感じ,何らかの改善をしようと思うからである。
不満の所在は様々であろうが,その中でソフト開発によって解消できるものは必ずしも
多くはない。「できるはずなのに」なんらかの事情で「実際には実行不可能だ」という認
識ができるような不満でなければ,まず解消は無理である。しかし,このような「できる
はずなのに」実質的にできないことも実は多い。時間がかかる。手間がかかる。精度が要
求される。熟練が必要だ。そのような形の不満ならば,ソフト開発によって改善すること
ができる可能性がある。
繙繙繙焉@  ゚繙繙         繙繙繙繙繙繙繙
    瘋繙繙繙竅@              。」」」「
   問題解決の流れ    繙繙縺ィ    問題解決の流れ
    ゚繙繙繙焉@              氣」」」
繙繙繙竅@↑ 瘋繙繙         繙繙繙繙繙繙繙
    ボトルネック             ソフト開発とその利用による
  (時間がかかるなど)           時間の短縮

(2) オブジェクトの設計 (インターフェイスの設計) 
次に考えなければならないのは,そのボトルネックをどのように解消するかというモデ
ル作りである。しかし,ここで考えなければならないのは,当面の問題の解消のみではな
い。ただ一つの問題の解消のためだけにしか使えないようなものを作っても仕方がない。
その問題にも使えるけれども,それを含む様々な問題に対して使えるようなものを設計す
る必要がある。つまり,解決したい問題の集合を明確化し,その多くをカバーできるよう
なソフトの姿を想定する必要がある。
そのためにはまず,何を入力して,何を出力するようにしたいかを考える必要がある。
入力するのはいわゆる数値とは限らない。実際に入力するものは,いくつかの数値である
としても,それは何らかの事柄,あるいは何らかの対象のモデルである。つまり,ソフト
は単なる計算のブラックボックスではなく,ソフトはある世界の表現である。略図である
。そこに,どのような対象を考えるのか。それらはどのような振る舞いをすべきなのか。
その対象に対して,ユーザーはどのような入力をすることができ,またどのような現象を
どのような形で観察できるのか。そしてその結果を自分の数学的探究にどのように還元す
るはずなのか。それを,ある程度明確な形で設計することが必要になってくる。

(3) オブジェクトの実装
そのようなモデルがある程度できたらば,次は,その振る舞いを,具体的に,何らかの
プログラミング言語によって記述することが必要になる。記述の仕方は一通りとは限らな
い。同じ振る舞いを起こすのにも,いろいろなアルゴリズムがありうる。実際に使ってみ
て,速度等,いくつかの点で修正が必要な場合がある。設計全体を変えなければならない
ときと,設計は妥当だがアルゴリズムを部分的に変えなければならないときでは事情が異
なる。設計とその実装は別の問題なのである。

(4) 新しい環境の生成
    −「解ける」ようになった問題群と「使える」ようになった方略−
一通りソフトが完成すると,それは問題解決にとって,新しい環境が生まれたことを意
味する。設計の時点で,ある程度のことを想定し,それを狙って設計しているのだが,実
際に生成された環境は,未知の環境である。最初に考えていたテストケースとしての問題
の解決をはじめ,いろいろな解決を行ってみて,これまでの環境とどのような点が異なる
のかを比較・検討するべき環境なのである。
検討するときに,まず注目すべき点として,「これまでは扱いにくかったが,今回から
扱いやすくなった」問題あるいは探究の様式は何かということがある。
前者で考えているのは,個別の問題でなく,そのような問題の集合,いわば問題群であ
る。どのような特性を持つ問題を扱えるようになったのか,ということである。そして,
後者は,問題に対して実行できる方略としてどのようなことを行いやすくなったのかとい
うことである。
この2つの点は,ソフト開発の意義を問題解決の観点から捉えるときに基本的な観点で
ある。この点を明確にすることができれば,「このソフトはどう使えるのか」という問い
に対して,「このような種類の問題を扱うことができるようになる」とか,「このような
調べ方をさせることができるようになる」と答えることが可能になるからだ。

(5) 新しいボトルネックの発見
ソフトウェア開発はここまででおしまいではない。新しい環境の生成は,同時に新しい
不満あるいは新しいボトルネックの生成でもある。その環境の中で可能なことを調べてい
く中で,同時に「やりたいけれどもできないこと」が明らかになってくる。当初は見つか
らないとしても,それは時間の問題である。
新しく生じたボトルネックをどのように解消するかは,そのときどきによって異なる。
全く新しい種類のソフトの必要性を示唆していることもある。同じ種類のソフトでも,設
計を基礎からやり直さなければならないこともある。あるいは一部の設計のみを変更すれ
ばいいこともあるし,設計自身は変えなくてもいいけれど,使うアルゴリズムを修正した
り,あるいは実質的なコードは同じでも,プログラミング言語をより低級なものに変える
こともある。

(6) 絶えざる修正が必要な存在としてのソフトウェア,そして数学教育学での変数とし
  ての問題解決の環境
ここで注目しておきたいのは,そのようなサイクルがあることが「当然」だということ
である。このことは二つのことを意味する。一つの開発のあり方である。プログラミング
を行うときにも,このような改良を受けるべきものとしてプログラミングをしていく必要
がある。(それを配慮したプログラミングのあり方は今回のテーマではないので,あまり
触れないことにする)もう一つはユーザーのあり方である。ソフトを改善するための最大
の源泉はユーザーである。新しいボトルネックはどこにあるか。どのような問題をどう解
きたいか。そのためにはどのような機能の追加が必要か,そのような発言ができるような
ユーザーがいなければ,ソフトの改善と成長はありえない。そのような成熟したユーザー
集団の成立が不可欠なのである。
ビジネス用ソフトの場合,利用者は変わらない。自分の仕事として日常的に使っている
ため,必然的に成熟していく。自分の仕事を改善したいため,ソフトに対する要求もより
明確になる。開発の側も,それが会社の業務であり,新しい版の作成と販売は必須である
ため,売れるソフト,使われるソフトでは,このサイクルは当然のものとして成立する。
しかし,教育用ソフトの場合,事情が異なる。利用する学習場面は変わらないが,利用
者自身は毎回変わっていく。極端な場合は,ある単元のある場面で一回使ったらおしまい
である。多少の不満を感じたとしても,学習者自身がそれを再び使うわけではないので,
自分なりの不満を明確にするほどのことでもなくなる。また,どこに不満を感じるかとい
うことを開発者が対応可能な形で明確化することを生徒に要求するのはほとんど不可能で
ある。ビジネスソフトの場合には当然であった「開発者」と「利用者」の相互作用を,教
育用ソフトの場合にも同様に想定することは難しい。開発者の側が,かなり明確に「改良
」の意識を明確に持っていないと,作りっぱなしのままになっていることが多いのが現状
である。
だが一方,教育の場合にはこの開発者と利用者の他に,教師そして数学教育研究者がい
る。これらの人々が学習の様子,授業の様子をきちんと把握し,利用者からの反応に代わ
る評価を明確に行えることが,教育ソフトの開発と改良に不可欠なのである。
しかし,現在,このような教育ソフトの評価が適切に行われているかというと,決して
満足のいく状況ではない。その背景には,コンピュータ利用自体が過渡的な時期にあると
いうこと以外にも,このような教育ソフトの評価というと,ともすると「ソフトのために
行う二次的な作業」という印象を伴うこともあるようだ。
だが,このような作業は,決して二次的な作業ではないこと,そして,開発が先行しそ
れに依存するという性格のものではなく,より主体的な研究課題であることをここで述べ
ておきたい。
すなわち,このソフトウェア開発のサイクルを数学教育の観点から考えると,次のよう
に捉えることができる。つまり,「問題解決は解決者と状況の相互作用である」と考えた
とき,あるいは,その状況を生み出すものとしての環境を考えた場合に,環境を変えたと
きに,問題解決はどう変わるのかを研究する過程を意味している。つまり,問題解決のた
めの環境が,数学教育学にとっての一つの変数になりうるということである。
これまで,教具論,シテュエーション論などの枠組みの中で,様々なことが考察されて
きた。自然人,あるいは本来の人間というのが,文化的環境と隔絶した環境の中で育った
人間を指すのではないように,生徒の自発的な探究というものも,放任の中から育つもの
ではない。環境をどう整備するかが重要であることを,これらの研究は示唆している。ま
た,様々な教具,シテェエーションを分析し,考察するための概念が考察されてきたが,
具体的な教具,シテュエーションとしてどのようなものを対象とするかといえば,ジオボ
ードやキズネールの数え棒,あるいはディーンズブロックなどに限定されていたのが現実
ではないだろうか。新しい様々な教具あるいはシテュエーションを生成するための方法論
にまでは高められていなかった,あるいは方法論として確立されていたとしても,それを
実際に実行することが困難だったのである。
ソフトウェアという手法による環境の構築は,まさに,この部分を補強してくれるので
ある。どのような環境であれば,生徒のどのような活動を「意図的な指導」から「自発的
な活動」への変えていくことができるか,それを理念のみではなく,実際に生成し,実践
し,そして評価することができるようになってきたのである。このような観点からのソフ
トウェアの開発は,決して情報科学の専門家のみで可能になるものではない。どのような
環境が望ましいかという立案と,実際に生成された環境の評価そしてそれに基づく,新た
なる環境の要求は,まさに数学教育学にとっての課題なのである。
]
        4.ソフト開発と数学的探究の相互作用の具体例
        −Geometric Constructor のケーススタディ−
^
(1) 出発点としての九点円
Geometric Constructor を開発するきっかけになったのは,上越教育大学で,初等幾何
学演習という授業を担当したことである。詳しいことは「数学教育研究」の中で書いてい
るのが,概略のみを述べることにするが,その授業の中で,学生と九点円を作図した。も
ちろん,定規とコンパスによってである。しかし,そう簡単には書けない。九つの点を通
るはずなのに,うまく書けない。いろいろな三角形についてその九点円を書いてみたいの
だが,一つの九点円を書くことでさえ,結構時間がかかる。図形について調べようとする
ときに,「図形の作図」がボトルネックとなっていた。

(2) 最初のプログラム
最初のプログラムは,3点の座標を入力すると,それぞれの中点を計算し,その3中点
を通る円,つまり九点円を作図するプログラムをN88-BASIC とF-BASIC で作った。円の中
心は(3点を頂点とする)三角形の外心なので,2つの辺の垂直二等分線の方程式を求め
,更にその交点を求めた。
九点円が作図できたという意味では,成功だったのだが,すぐにいろいろな不満点が出
てきた。

(3) 不満な点とその改良
たとえば,いろいろな九点円を作図してみたいと思う。しかし,座標を指定して入力す
るので,特別な直角三角形のような場合は簡単に思い通りの結果を得ることができるが,
それ以外のものは思い通りの図を得ることが難しい。数値を毎回入力することもとても面
倒くさい。そして,当たり前のことなのだが,九点円しか書けない。しかし,この程度の
プログラムでも,それ相当の長さのプログラムを書かなければならない。これ以上だらだ
らと長いプログラムを書くことは,変数の名前など,いろいろと気を使わなければならな
いことも多いし,それだけの労力を払ってプログラムを作り,その結果としていくつかの
九点円の図程度しかできないのなら,定規とコンパスを正確に使う方がましかもしれない
という印象の方が強かった。
この不満点を解消するための契機になった要因の一つは,QuickBASICという言語が日本
でも使えるようになったということがある。これによって,数千行以上の長いプログラム
でも,BASIC とほぼ同じような感覚で,それほど困難なことなく構築可能になった。(ち
なみに,通常のBASIC では,せいぜい数百行を越えると途端に開発効率が落ちる。) 
九点円の場合を分析してみると,九点円の作図にも,いくつかの基礎となる手続きがあ
ることが分かる。中点,外心,垂直二等分線,2直線の交点などの組み合わせで九点円は
できている。それらをプロシージャとして表現し,それらの組み合わせとして九点円の作
図手続きを表現した。
すると,同様の方法によって,いくつもの図形を作ることができる。外接円,内接円,
傍接円など,いろいろな図形が作れる見通しができた。
九点円だけでなく,いくつかの図形もできたのだが,やはり不満が残る。図形を作図し
ようと思うたびにプログラムを書かなければならないのでは困る。図形を作図したいと思
ったら,プログラムを書かなくてもソフトを操作するだけで,画面上に図形が書きたい。
そういうソフトを作ろうと,ソフトに対する全体的なコンセプトが明確になってきた。

(4) 作図の分析と形式化そして実装 (ver.1 の開発) 
思いつきだけでなく,ある程度きちんとした形にするためには,「作図」という作業を
きちんと分析することが必要になった。それができれば,あとはそれぞれをプログラムの
形に表現すればいい。そして,このときの目標として,「図形を動かせるようにしよう」
という目標を立てた。動かしながら図形について考えることは,コンピュータならではの
図形の調べ方になるはずと考えたからである。
前節のようなプログラムを手掛かりに,次のようにして,作図という手続きを形式化し
た。これを何とかプログラム化したものがver.1 である。
(5) インターフェイス (疑似マウス, メニュー, 選択方法) の改良 (ver.2 の開発) 
ver.1 はできたものの,やはり不満の方が大きい。すべて数値を使って作業を進めるよ
うになっていたからである。点の位置に入力は座標。どのような作業をするかの選択も数
値。直線を書くときにもとにする点の選択も数値である。そのたびに,思考の流れが中断
され,コンピュータに入力するための頭に切り換えなければならない。こんな調子では,
自分自身にとっても使いにくいし,まして授業中に生徒が使えるような状態ではないので
ある。また,作図した結果を保存できないという問題もあった。
これを改良するために,様々なインターフェイスを改良した。満足できるかどうかの判
断基準は,「思考を妨げない程度のものにする」ということである。画面上の点を「少し
右」にしたいと思う。その点の座標を表示して,それより少し小さい数値を入力するので
は面倒だ。「→」を一回押せばいいという程度ならほぼ満足できる。そのような感覚で改
良した。ファイルの選択等も,最初はファイル名を入力するというものだったが,ファイ
ルの一覧を表示し,それをメニュー形式で選択すればいいようにした。点, 直線などの選
択も,矢印キー (↑↓) によって選択するようにした。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
 疑似マウス(←↑↓→キーで制御)   変形の様子(←↑↓→キーで制御)
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
 対象の選択(↑↓キーで制御)     ズームの設定の様子

゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
 メニュー               ファイル選択
また,動かしながら,いろいろとしたいことも増えてくる。点の軌跡を見てみたい。そ
のために,軌跡を記録するための工夫をした。交わり具合等をよく知りたい。ズームとし
て,拡大・縮小ができるようにした。いくつかの画面を比較したい。画面を分割表示でき
るようにした。また,点を「円上にとる」とか「直線上にとる」ということも必要になっ
てきた。そのような機能を設計し,実装した。それぞれの場合ごとに,「やりたいこと」
を明確化し,それを設計し,そして実装した。そのたびごとに,少しずつ「使いにくさ」
を削減し,「やりたいこと」を拡大した。
多くの場合, まず「不満の所在」を明確化し,この課題を解消できるようにすることと
,テストケースを作った。不満点の解消の第一関門はこのテストケースでの合格であった
。しかし,多くの場合, それで終わりにはならなかった。テストケースが解消できるよう
に改良すると,新しく「扱えるようになった問題群」が生まれてくる。しばらくの間は,
その問題をいろいろと調べることで過ごすことができる。しかし,やがて,その環境に慣
れてきて,いろいろな問題を調べていくと,最初と同じような「不満点を持った問題」が
登場し,そのような問題がいくつか集まると,「改良しなければならないはずの問題点」
として明確化されていったのである。

(6) ver.3.1 で可能になった活動と生じた不満点
ver.3.1 までで,かなりの修正を行い, かなりいろいろなことが可能になってきた。以
下はver.3.1Jの機能の一覧である。また,典型的な問題とその図を以下に示しておく。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@    Geometric Constructor ver.3.1Jのメニュー階層図とその機能J    
艨@  (メニューファイルをエディタ等で操作することによりカスタマイズ可能)   
諞繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苻A続的な変形J      苴ニ立変数に相当する「点」を動かしたとき,図形全体
艨@            艪ェどのように変化するかを観察するJ       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芟ウの点を取り直すJ    苴ニ立変数に相当する「点」を任意に設定し,図形全体
艨@            艪フ様子を調べる。ある角が直角となる場合などを調べ
艨@            艪驍フに使う。                  
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苟ェ定/判定J       苣}形の中の幾何的対象間の距離,それらの数量関係等
艨@距離(2点)J     艪調べる。J                  
艨@距離(1点と直線)/角度/3角形の面積/判定(3角形/3点)/判定(3角形
艨@の合同)/判定(3角形の相似)/一つ元に戻るJ              
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
腑ataの保存        芻図データをフロッピィ等にファイルとして保存J 
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芻図の継続        艪アれまでに作った幾何的対象を元にして,作図を継続
艨@点           艪オていく。                   
艨@ 2直線の交点J    艪ヌの種類の幾何的対象(点,直線,線分,半直線)を
艨@ n等分J       芻るかをまず選択し,次に,どの種類の手続きで作る
艨@ 内分・外分J     艪ゥを選択し,最後に,どの幾何的対象を元に作るかを
艨@ 三角形の外心J    苟I択する。これを継続することによって,「作図」を
艨@ 三角形の内心J    艪オていくことが,Geometric Constructor における作
艨@ 三角形の重心J    苣}の捉え方である。               
艨@ 三角形の垂心J    艨@作図手続きの中には,いわゆる定規・コンパスの操
艨@ 三角形の傍心J    芻に相当するものもあるが,むしろ,「何」を元にし
艨@ 三角形の九点円の中心J艪ト「何」を作るのか,その手続きの種類として,どの
艨@ 点の回転J      艪謔、なものがあるのか,を意識化することを重視して
艨@ 新しい点の追加J   艪「る。                     
艨@ 新しい点(図形上)J 艨@そのため,「角のn等分」のように,定規・コンパ
艨@直線J         艫Xでは作図不可能なものも入れている。J     
艨@ 2点を結ぶJ     艨@これらは排除すべきという考え方もあるだろう。ま
艨@ 1直線に平行・1点通過艪ス,学校で使う場合,たとえば,「外心」の学習のと
艨@ 線分の垂直二等分線J 艪ォに,「外心」という作図手続きがあるのは不都合だ
艨@線分,多角形J     艪ニいうようなこともある。            
艨@ 線分(2点を結ぶ)J 艨@そのため,Geometric Constructor では,メニュー
艨@ 垂線の足J      艪フ項目は,別のファイルによって操作できるように,
艨@ 多角形/正多角形   芬業者によるカスタマイズを可能にしている。J  
艨@半直線J        艨@                       
艨@ 2点を結ぶ/角の2等分線/角のn等分線                 
艨@円J          艨@                       
艨@ 中心と半径/中心と一点/3点を通る(外接円)/直径/内接円/一傍接円J 
艨@ /九点円                                
艨@その他(マクロ)J   艫}クロとは,いくつかの作図手続きを一つの単位とし
艨@一つ前に戻るJ     艪トまとめ,一つの名前をつけたもののことを指す。J
艨@入力終了J       艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苣Vしく作図J       苣}形を消去し,新しい図形の作図に入る。J    
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
膸oomJ          芒g大と縮小                   
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芫O跡J          芒何においては,軌跡とは「点」の軌跡のみを指すが
艨@軌跡を描く       艨CGeometric Constructor では,すべての幾何的対象
  対象の選択J      艪ノ対して,その記録を残すことを軌跡と読んでいる。
    点/ 直線/ 線分/...J 艨@                       
艨@リセット        艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
范瘉J           苺ロ存したファイルから図形を読み込むJ      
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苺メ集J          芒w習に適した形に,いくつかの要素を修正することを
艨@色/名前/選択可能な点 艨u編集」メニューの中に集めている。J      
  /点の束縛条件J    艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芬闡アきを分析J      芬闡アきのリストの表示・印刷           
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芒ヨ数・グラフJ      苟ェ定値間の関数関係などを調べるためのグラフ化を行
艨@変数の作成/変数の選択 艪、。                      
艨@/グラフの描画/オプションJ                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艫IプションJ       范l々な変数の設定J               
  設定を保存/文字の表示/作図方法/選択時の色の処理/座標の大きさ/変形する
艨@点の数/変形の仕方/円の描画の精度/ハードコピースイッチ/OHP/白黒用の処理
艨@/作図dataパス指定/履歴dataパス指定/文書dataパス指定/マクロ dataパス指定/
艨@測定モード切り換え/測定桁数 (数式) J                  
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苺竢譜J          艨@                       
艨@メニュー(Full/Easy)/  簡易電卓/データのチェック/Macro /Macro 継続/ 
艨@Macro 保存/ファイル削除/DOS CallJ                   
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艫wルプJ         艨@                       
艨@パニック (最初から) /デモ/履歴をとる/関連文書参照J          
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苡I了J          腮eometric Constructor を終了する        
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@        ファンクションキーにより利用可能な機能          
艨@              (カスタマイズ不可能)              
諞繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
腱1        艫<jュー非表示                         
腱2        苟S画面/画面4分割の切替え                   
腱3    艪S分割画面で次画面へ移動                    
腱4    艨@                               
腱5    艾J                               
腱6    艫nードコピー                          
腱7    芍譁ハをフロッピィに保存する (9801のみ)              
腱8        艾J                               
腱9        艾J                               
腱10    艫tァンクションキー割当て内容表示J               
莨フト + F1  艫潟ZットJ                           
莨フト + F2  艨@                               
莨フト + F3 艪S分割画面で前画面へ移動J                   
莨フト + F4 艨@                               
莨フト + F5 艾J                               
莨フト + F6 艾J                               
莨フト + F7 艨@                               
莨フト + F8  艨@                               
莨フト + F9  艾J                               
莨フト + F10 艫tァンクションキー割当て内容表示J               
瘋繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
例1 四角形の各辺の中点を結んで四角形を作る。
例2 四角形の角の二等分線によって四角形を作る。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
例3 四角形を対角線で4つの三角形に分割しそれぞれの内心によって四角形を作る。
例4 四角形を対角線で4つの三角形に分割しそれぞれの重心によって四角形を作る。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
例5 四角形を対角線で4つの三角形に分割しそれぞれの外心によって四角形を作る。
例6 四角形を対角線で4つの三角形に分割しそれぞれの垂心によって四角形を作る。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
例7 三角形の各辺の上に正三角形を作り,それらの重心を結ぶ
例8 四角形の各辺の上に正方形を作り,それらの重心を結ぶ
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
しかし一方で,解消しきれないいくつかの問題も明らかになっていった。(解消しきれ
ないという意味は,基本的なデータ構造を変えざるを得ないという意味,つまり解消のた
めには,かなり根本的な改良を行わなければならないという意味である。)
例えば,次のような問題点が明らかになってきた。
(A) 円と直線, 円と円などの交点が作図できない。
(B) 図形を動かしたときに,図形が特殊になり,作図すべき対象が書けなくなってしま
CCうとエラーが生じてしまうので,点を取り直す必要がある。 (例えば,二直線の交
CC点をAとすると,その二直線が平行になるとAは作れない。すると,それ以降Aを
CCもとにして作る図形がある場合,その図形は書けなくなってしまう。)
(C) 変数が使えない。例えば,AP=2BPとなる点Pの集合などを求めるときには,
CC変数を使う方が妥当なのだが,それができない。また,AB=CXとなるようにX
CCを取る場合,ABを測定し,その長さを半径とする円を作図できればいいのだが,
CCそれができない。
(A) も(B) と共通した問題点から生じた問題であった。例えば,円と直線の交点の場合
,2点ができる場合,1点で接する場合, 交点ができない場合という3通りがある。これらを
場合分けするためにはいろいろな問題がある。しかし2点ができることを前提にすると,
接する場合や交わらない場合をどう処理するかが大きな問題となってしまう。このような
理由から,(A) は扱わないままでいた。しかし,これを解消しないと中学校で使う図でも
,作図できないものが数多く出てきてしまうのである。

(7) 不満点の解消としての再定式化と根本的改良
以上の問題点を根本的に解消するため,ver.4.0 では,データ構造を再考し,ほとんど
のソースを書き換えた。むしろ,一からやり直したと言う方が妥当かもしれない。そして
その際, 次の不満点も解消することにした。 (しかし,使い勝手はver.3.0 となるべく共
通するようにした。つまり,実は内容をほとんど書き換えたのだが,使っている人にとっ
ては,あまり変わったようには感じないようにしたのである。) 
(D) メニューのカスタマイズをより容易にしたい。
(E) オンラインヘルプ, 図形ごとの文書参照・書き込みをより容易にしたい。
データに関しては, 「作図可能かどうか」をチェックする変数を付加した。そして,作
図不可能なときは作図しないようにした。これにより,交点ができない場合も,整合的に
扱うことができるようになった。また幾何的対象を,点, 直線系, 円の他に数を加えた。
なお,プログラミング上の問題としては,ユーザー定義型 (いわゆる構造体) を大幅に使
うことにした。モジュール分けをより意識化し,オブジェクト指向設計の考えをなるべく
反映するような手法を用いた (というより,自然にその方向になった。もっとも,言語は
オブジェクト指向言語ではないので,その「気持ち」でという程度だが) 。そのせいか,
あるいはアルゴリズムを改善したせいか,プログラムの大きさもかなり改善された。
以下にver.4.1Aの機能を示す。下線部が今回追加された機能である。大きく機能が変わ
ったものなどは,右欄で解説する。なお,実装する予定なのだが,開発進度の関係でまだ
実装されていない部分もある。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@    Geometric Constructor ver.4.1Aのメニュー階層図とその機能J    
艨@    (階層配列は,内蔵メニューエディタ等によりカスタマイズ可能)         
諞繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芻図 (新規) J      艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芻図 (継続) J      艨@                       
艨@点                                   
艨@ 2直線の交点/直線と円の交点/2円の交点/n等分/内分・外分/2点からの
艨@ 延長/三角形の外心/三角形の内心/三角形の重心/三角形の垂心/三角形の傍
艨@ 心/三角形の九点円の中心/点の回転/新しい点の追加/新しい点(図形上)J
艨@直線                                   
艨@ 2点を結ぶ/1直線に平行・1点通過/1直線に垂直・1点通過/線分の垂直二
艨@ 等分線/1点を通る円の接線/2円の共通外接線/2円の共通内接線J    
艨@線分・多角形J                              
艨@ 線分(2点を結ぶ)/垂線の足/多角形/正多角形J            
艨@半直線                                  
艨@ 2点を結ぶ/角の2等分線/角のn等分線J                
艨@円                                    
艨@ 中心と半径/中心と一点/3点を通る(外接円)/直径/内接円/一傍接円  
艨@  /九点円J                               
艨@その他 (マクロ) J   艨i未実装)                   
艨@最後抹消J       芻ナ後の手続きを消去する             
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苟ェ定 J                                  
艨@/距離(2点)/距離(1点と直線)/距離(1点と円)/距離(2直線)/距離
艨i直線と円)/距離(2円)/面積(三角形)/角度(3点,0〜180)/角度(3点, 
  −180 〜180)/角度(3点,0〜360)/角度(2直線)/数式/最後抹消J        
諞繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苺マ形J          艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苣白lの変化J       艨u変数」の値を変えられるようになった。J    
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芟ウの点を取り直すJ    苣ン定の仕方が変わった。             
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艫YームJ         芫O跡も含めてズームできるようになった。     
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
范瘉J           艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苺ロ存J          艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芻除J          艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芫O跡J          苺。数個の対象の軌跡を描けるようにした。     
艨@ 点/直線系/円J   艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芒ヨ数・グラフJ      艨i未実装)                   
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苺メ集J          艨@                       
艨@手続き・図形データ分析J苴熨エディタあるいは外部エディタによって読むJ 
艨@大域変数の分析J    艨@        〃  (開発時のデバッグ用)J
艨@色の設定J       艨@                       
艨@ 点/直線系/円J   艨@                       
艨@点の表示(・/×)J  艨@                       
艨@直線/線分/半直線J  苒シ線系のデータを統合し,後から切り換えられるJ 
艨@名前の設定       艨@                       
艨@ 点/直線系/円J   艨@                       
艨@点の束縛条件J     芻。のまま/他の点と一致させる/直線の上にとる/円
艨@            艪フ上にとる                   
艨@選択候補にする点J   苴ニ立変数の中で選べない点を設定する       
艨@作図の数値入力変数J  艨@                       
艨@例のソート順変更J   艨@                       
艨@文書のソート順変更J  艨@                       
艨@外部エディタ設定J   艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苺竢普@          艨@                       
艨@メモリチェックJ    艨i開発時のデバッグ用)J            
艨@DOS           艨@                       
  外部エディタJ     艨@                       
  ファイル名の変更J   芒e種ファイルの名前の変更            
  画面データJ      腱7で保存した画面データの読み込み, ハードコピー等
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艫Iプション        艨@                       
艨@エディタの表示桁数J  苴熾買Gディタの桁数の設定            
艨@文字表示の有無J    艨@                       
艨@描画サイクルの数J   芻図順序の不整合によるずれの解消        
艨@パス名の変更J     艨@                       
艨@ 作図データ/画面保存データ/参照文書データJ              
艨@ハードコピー設定J   艫nードコピー系のスイッチの設定         
艨@角の表示の有無J    艨@                       
艨@白黒モード設定J    苣Fを点線で表示することにより白黒,OHP等に対応  
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
芍譁ハ消去+再描画J    艨@                       
諞繙繙繙繙繙繙繙繙繙繙繙繙繙驢繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
苡I了           艨@                       
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@        ファンクションキーにより利用可能な機能J         
艨@              (カスタマイズ不可能)              
諞繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
腱1        苡況関知型簡易オンラインヘルプJ                
腱2        苟S画面/画面4分割の切替えJ                  
腱3    艪S分割画面で次画面へ移動J                   
腱4    艨@                               
腱5    苣}形ごとの文書参照・記録 (内蔵簡易エディタ) J         
腱6    艫nードコピー                          
腱7    芍譁ハをフロッピィに保存J                    
腱8        艾J                               
腱9        芫O跡描画スイッチのON/OFF                    
腱10    艫<jューエディタ起動J                     
莨フト + F1  芒ネ易オンラインヘルプ (全文書からの選択)              
莨フト + F2  艫nードコピー系スイッチのオン/オフ               
莨フト + F3 艪S分割画面で前画面へ移動J                   
莨フト + F4 艨@                               
莨フト + F5 苣}形ごとの文書参照・記録 (外部エディタ起動) J         
莨フト + F6 苟S図形ファイルの自動ハードコピー (9801のみ) J         
莨フト + F7 艨@                               
莨フト + F8  艨@                               
莨フト + F9  芫O跡の消去J                          
莨フト + F10 艨@                               
瘋繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙

(8) ver.4.0 で可能になった活動と生じた不満点
ver.4.0 になり,中学校で扱う図形のほとんどは描けるようになった。また,楕円など
をAP+BP=一定を満たす点の集合として表すことも可能になった。例を示そう。
例9 2円とその交点を通る2直線
例10 正方形の4頂点から同じ長さ移動した4点を結ぶ
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
例11  楕円と双曲線の軌跡
たとえば,点Aを中心に半径xの円をかき,点Bを中心に半径10−xの円をかき,そ
の交点の軌跡をとると,AP+BP=10を満たす点の集合(楕円)が得られる。後者を
10+xにすると,双曲線の一方が得られる。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
楕円                 双曲線

例12  アポロニウスの円
点Aを中心に半径xの円をかき,点Bを中心に半径2xの円をかき,その交点の軌跡を
とると,AP=2BPを満たす点の集合(アポロニウスの円)が得られる。
例13 二つ折りドアの動きの様子
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
アポロニウスの円           二つ折りドアの動き
以上のような経緯を経て,確かに, 「当初の目的」はほとんど達成された。また,それ
が達成されてみると,最初は考えていなかった,様々な図形を扱うことが可能になってき
た。それを使って (自分にとって) 新しい発見をすることがよくある。同様の経験をされ
た方もいる。例を挙げておこう。
例14  角の2等分では円に内接する。菱形などはできない。
これは,私とゼミ生が角の2等分線からできる四角形を観察しながら気がついたことで
ある。その経緯は,飯島(1992)等にある。この事例は授業化も行った (飯島他(1993)) 。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
例15 3つの円の共通外接線を引くと,それらの交点の中の3点が共線になる。
これは,地曳善敬氏 (川崎市総合教育センター) が月食のモデルを作図しようとして偶
然気がついたことである。この例は別の観点から春日他(1980)でも扱っている。
例16  四角形を4つの三角形に分割し,その重心を結んで四角形を作ると平行四辺形がで
きるが,その分割の仕方は対角線の交点を使わなくても,任意で構わない。
これも,地曳氏が教材研究をしながら気がついたことである。四角形を対角線で4 つの
三角形に分割し,それぞれの重心, 内心等から新しい四角形を作る問題がいろいろあった
(飯島(1992)) 。その教材化を考えているときに,重心の場合には,必ずしも対角線の交
点で分割しなくても,合同な平行四辺形になってしまう。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
例17 ある共点関係J         ゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
これは,授業の最中にある学生が気がつ艨@                  
いたことである。三角形の内心から各辺に艨@                  
垂線の足を下ろす。その点と対する頂点を艨@                  
それぞれ結ぶと共点になる。J     艨@                  
                  艨@                  
                   艨@                  
                  瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
例18  ある定理の図の作図
この問題は,この研究会の際に,橋本氏より持ちかけられた。こういう定理があるのだ
が,作図がなかなか大変だ。このソフトで作図できるかというのである。定理の大まかな
内容は,「定円上に5点をとる。それぞれ隣合わない点と結ぶ。それらの線分の交点が5
つできる。これらの交点のそれぞれと元の円上の2点とを通る円を5つ作る。これらの円
の交点は同一円周上になる」というものである。それならこうなるのではと作図してみた
。それを聞いていた三輪先生は,僕ならこういう風に作る方が自然だと思うと,別の考え
方を述べられたので, それにも従って作図してみた。それらの結果が次の二つの図である
。この定理は1989年に岩手県の高校生が発見した定理であって,Ohtsuki,T., Masuda,K. 
(1990)にその詳しい証明が掲載されている。
゚繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙辭繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
艨@                 艨@                  
瘋繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙蜀繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙繙
しかし,これらによって,ソフト開発の目的が達成され,ソフト開発は終了したかとい
うと,決してそんなことはない。前にも指摘したように,ソフトが開発されたということ
は,新しい問題解決のための環境ができたということであって,そこでの問題解決が蓄積
されるのに応じて,様々な新しいボトルネックが見つかったり,新しい不満点が生じてく
るのである。たとえば,私自身が感じている要求としては,数,点,直線系,円という幾
何的対象のカテゴリーを,2次曲線をうまく扱えるように改変したり,代数曲線を扱える
ようにしたいという不満が生じてきた。あるいは,軌跡として様々な曲線が描画可能なの
だが,単なる「記録」としての軌跡を,図形を構築していくための基礎になりうる「対象
」として扱えないだろうかと感じている。あるいは,様々な変換をより容易に扱うこと,
非ユークリッド幾何のモデルを扱うことなど様々な可能性を考えている。
もちろん,それらの要求をすべて,次のバージョンアップとして行おうとは思っていな
い。このソフトを改良する手掛かりにもなりうるが,このソフトの限界として考えるなら
,別の種類のソフトを開発する手掛かりとしても考えられる。
また,そのような要求は,「使う場面」,「使う人」,「使い方」等によって大きく異
なる。設計時に予想した利用と,現実の利用が一致するとは限らない。それはむしろ,新
たな研究の対象なのである。
現在,開発を中断して,いくつかの中学校で授業を行っていただいている。これまでは
扱おうと思っていても扱いにくかった「活動」を私が抽出し,その概略をまとめ,教材例
を授業者の方に提示する。授業者の方は,それを元に,具体的な授業にのせるために,教
材の手直しをしたり,指導案を書かれ,検討する。そしてそれを授業化し,そのような活
動の授業化が可能かどうか等の検討をしている。
これらの研究は,「これまで扱いにくかった活動の授業化の実証的研究」であるが,同
時に,「使う場面」,「使う人」,「使い方」等を中学校の授業についてよく詳しく検討
し,問題解決の様子をより明確化していくことでもある。それによって明らかにすべき事
柄は,教材研究,授業のためのノウハウ等様々であるが,ソフト自体の改良も示唆される
はずである。
このように,ソフト開発というものは,決して「作ればおしまい」というようなもので
はない。少なくとも,問題解決でのツールの開発は,「問題解決を規定する一つの要因と
しての環境」がソフトなのであり,ソフトの有り方,ソフトの善し悪し,ソフトの改良を
検討するということは,「問題解決」そのものを研究することに他ならないのである。
]
                5.おわりに
^
本稿では,ソフトウェアを開発する意義を「探究のための環境の設計・実現」および「
数学的概念に対するより直接的な操作の実現」という二つを述べた。そして,ソフトウェ
ア開発におけるサイクルにおいて,特に問題解決研究との関わりが様々な形で生じてくる
ことを,まず一般論として述べ,次にGeometric Constructor の開発のケーススタディと
いう形で具体的に明らかにした。
このような研究としてのソフトウェア開発あるいは数学教育研究はまだ端緒が始まった
ばかりであり,未知の部分が多い。ソフトウェア開発自体,多くの時間と労力を要するた
め,プログラミングをすることだけをとっても大変な作業であるが,それが教育にとって
有意義であるためには,関連する様々な研究との有機的な結びつきが不可欠であることを
,改めて強調しておきたい。一方,このような研究は,単にソフトの開発をしている人々
だけでなく,より多くの人に開かれた研究分野であることも強調しておきたい。ソフトウ
ェアは,問題解決研究をはじめとして,数学教育の多くの分野に新しい研究課題を提示し
ている。ソフトの開発をしなくても,様々な研究が可能な段階になってきた。これらの諸
分野との結びつきをより有機的なものにして,ソフト開発が単なるアマチュア的な趣味の
延長線としてのソフト作りから脱却していくためには,研究の方法論を確立していくこと
が必要である。筆者自身, 教材収集や大学生等の問題解決過程の記録・分析等や授業実践
等も含めた共同研究を進めてきているが,このような研究分野における研究方法論を確立
しながら,数学教育研究としての成果を進めていくことが,今後の課題である。
]                  引用・参考文献^

飯島康之(1990A) 「computerにおける図形の動的な扱いについて」, 筑波数学教育研究, 
9,105-117 
(1990B) 「作図の構成的な側面とcomputerによる支援について −九点円の作図に関する
数学的探究に焦点を当てて−」, 数学教育研究, 上越教育大学数学教室, 5,35-45 
(1990C) 「Computerによる動的な図形教材の開発の支援について− Geometric Construct
or" を用いた探究的学習のために−」, イプシロン, 愛教大数学教室, 32,56-75
(1990D) 「関数の考えの理解と適用に対するコンピュータによる支援について−基本的な
考えの定式化と開発事例としてのGeometric Constructor −」,第23回数学教育論文発
表会論文集,161-166
(1991A) 「図形の動的な扱いとコンピュータ上での実現について」愛知教育大学教科教育
センター研究報告,15,341-352 
(1991B) 「作図の構成的な側面とコンピュータによる支援について(その2)−作図と変
形に内在する関数的側面について−」, イプシロン, 愛教大数学教室,33,33-54 
(1991C) 「Geometric Constructor を用いた問題解決における問題の変容について」, 日
本科学教育学会, 年会論文集 15,357-360 
(1991D) 「作図ツールの導入に伴う作図の新しい役割について」第24回数学教育論文発表
会論文集,275-280
(1992)「作図ツールを用いた問題解決における問題の変容と問題生成の一方略について−
作図の構成的な性格とコンピュータによる支援について(その3)−」イプシロン, 愛
教大数学教室,34,32-48 
(1993A) 「作図ツールの導入に伴う学習活動の変化−中学校の数学の教科書の問題の分析
による考察−, イプシロン, 愛教大数学教室,35,印刷中
(1993B) 「作図ツールを用いた探究例と問題例−今町先生と松沢先生の問題に関連して」
数学教育研究, 上越教育大学数学教室,8, 印刷中
飯島他(1993)「コンピュータで授業を変えよう」, 数学教育, 明治図書, 連載中
礒田,大久保,飯島(1992)『メディアを活用する数学科課題学習』明治図書
垣花京子(1992)「新しい幾何学習環境としての'GeoWorld'−「Cabri Geometry」の効果」
, 筑波数学教育研究,11A,1-10 
春日,坂井,橋本(1980)「おもしろい問題の開発」
佐々木棟明(1991)「数学教育におけるコンピュータの機能−ジオブロックによる三角形の
外心の探索−」,学芸大数学教育研究,3,87-97
清水克彦(1991)「コンピュータの利用によって具現化される新しい幾何学習−幾何図形の
変形を行うソフトCabri Geometre−」,日本科学教育学会,年会論文集,15,17-20 
上越教育大学附属中学校(1991)「コンピュータで授業が変わった」,図書文化
Ohtsuki,T., Masuda,K.(1990)"Chain theorems on pentagons", SUT Jounal of Math.,26
,No.1,11-54 
Schumann,H.(1991) "Interactive theorem finding through continuous variation of g
eometric configuratons", Jl of Computers in Mathematics and Science Teaching, 
10(3), 81-105 
Schumann,H.(1992) "Didactic Aspects of Geometry Learning in Secondary Education 
Using  the Computer as an Interactive Tool", Jl.of Computers in Mathematics an
d Science Teaching,11(1992),217-242