この世には「関数電卓」と聞いて目が輝く人と、そうでない人がいるでしょう。エンジニアである私も含め、目が輝く人は、日本では少数派なのではないかと思います。残念なことです。
「電卓」がなくなって困る人は大勢いるはずですが、「関数」を知らなくても、普通に生きて行けるのも事実。でも関数がなかったら、株価を予測してお金儲けできないし、現代社会を支えるテクノロジーは明治か中世くらいに戻ってしまいます。関数は、社会科学を含む科学的現象を数学的に見るための「目」としてとても重要です。理系の学生は、「科学の目」を養うために関数電卓を使います。
「プログラミング」と聞いて目が輝く人は、関数電卓の場合よりちょっと多いかも知れません。なんと最近の関数電卓は、Pythonでプログラミングできるのです。「えっ、そうなの?」と思った人。私も同じ事を思いました。CASIOの関数電卓『fx-CG50』は、2018年に公開されたバージョン3.20からPython機能が使えるようになったのです。
そこで今回、Python機能が使えるCASIOの関数電卓を使ってみて、その使い方や実用性、魅力をお届けしていきます。
関数電卓に関する詳細はこちらの記事をチェック
※Pythonモードは、fx-CG50で動作するように改編された、MicroPython Version 1.9.4です。一般的に、パソコン上で動作するPythonとMicroPythonとは異なります。
※Pythonモードは、MicroPythonのすべての関数、コマンド、モジュール、ライブラリに対応しているわけではありません。
著者:柴田 淳 (しばた あつし)
20年近く、主にWebの開発にPythonを使い、大規模サイトや出版社のCMS, Googleキャンペーンサイトのバックエンドの開発や設計を行う。著書に『みんなのPython』『みんなのブロックチェーン』など。東進デジタルユニバーシティ講師。
https://twitter.com/ats
世界で使われるCASIOの関数電卓
今回、Python機能が搭載されたCASIOの関数電卓『fx-CG50』の開発に携わった方に、じっくりお話を伺う機会をいただきました。なぜ、関数電卓にPython機能が搭載されたのか。その理由を掘り下げたら、なんと世界で愛されるCASIOの関数電卓の姿と、フランスのプログラミング教育政策が現れてびっくりしました。世界は、思いがけないところでつながっています。
CASIOの関数電卓『fx-CG50』
(以下、CASIOの商品開発担当者への取材の様子をお届けします)
柴田: はじめまして。本日はお時間をいただきありがとうございます。
CASIO 近藤さん(以下、近藤) : はじめまして。CASIOの近藤と申します。関数電卓の商品企画を担当しています。
CASIO 近藤さん
柴田 : 関数電卓というと、日本では理系の学生が使っているイメージです。でも北米などでは、高校生が普通に教室に持ち込んで使っていますよね。
近藤 : そうです。アメリカも関数電卓の大きな市場ですね。ほかにも重要な市場があるのですが、その場所について説明する前に、この地図を見てください。
世界の地域ごとにローカライズされたCASIOの関数電卓
柴田 : これ、すごいですね! 世界中でCASIOの関数電卓が売られているということですよね?
近藤 : 関数電卓といっても、国ごとにニーズが異なります。これは『fx-CG50』を中心としたグラフ関数電卓ではなく、一般関数電卓と呼んでいるジャンルで、その国の専用モデルを販売しているマップです。異なったニーズに細かく対応することで、いろいろな国で使ってもらっています。これがCASIOの強みです。
柴田 : 国ごとにカスタマイズするのは大変そうです。国にあわせて、ソフトの書き換えをするのですか?
近藤 : CASIOではフラッシュメモリを使うことで、国ごとのカスタマイズを実現しています。
柴田 : 電卓のソフトを書き換えやすい仕組みを使って、国ごとにカスタマイズしているんですね。ところで、アメリカの他に、もうひとつ大きな市場となっている国ってどこですか?
近藤 : フランスです。フランスでは、中学や高校の授業で関数電卓を使います。新学期間近になると、普通のスーパーマーケットでも関数電卓コーナーが出現するんですよ。
柴田 : えっ、本当ですか。日本だと、家電量販店などでしか見かけませんよね。フランスでは、それだけ多く、関数電卓が売れるということですよね。
近藤: 学生やその親が、普通に買っていきます。フランスは、関数電卓がとても多く売れるんです。
フランスのプログラミング教育とライバルの出現
近藤 : 関数電卓の大市場であるフランスで、2016年ごろからプログラミング教育の重要性が高まり、高校数学の教育にプログラミングを組み込み、Pythonを使うことになりました。
柴田 : 高校生がみんなPythonを学ぶんですね。さすが、エコール・ポリテクニーク(工科大学)発祥の国。でも、パソコンを使いますよね?
近藤 : 日本だと、文部科学省発のGIGAスクール構想の一環として配られた、パソコンやタブレットを使うと思います。当時のフランスでは、学校のPC環境がそこまで充実していません。そこに、フランスの国内企業が開発したPythonを搭載したグラフ関数電卓が登場しました。高校のプログラミング教育に合わせた取り組みです。
柴田 : 愛国心が強そうなフランスで、国内企業が関数電卓を開発するわけですね。CASIOさん、危うし、ですね。
近藤 : もちろんCASIOもそのカリキュラム変更に対応する形で、Python機能を搭載することを決めていました。
柴田 : そういう理由があったのは、知りませんでした。ところで、関数電卓に積まれるPythonは、たいていMicroPythonですよね。
近藤 : そうです。CASIOはMicroPython Version 1.9.4を『fx-CG50』で動くように改編して搭載しています。
柴田 : グラフ関数電卓に使われるような省電力なCPUに、MicroPythonを移植するのは大変じゃなかったですか?
近藤 : 私は商品企画なので直接開発をしたわけではありませんが、開発者に話を聞いたところ、相当大変だったみたいです。
柴田 : 調べてみると、フランスの企業の関数電卓の発売が2017年夏。CASIOの関数電卓『fx-CG50』にPython機能が載ったのが、翌年の8月です。めちゃくちゃ頑張りましたね。
近藤 : カリキュラム変更は待ってくれないですからね。
柴田 : そういえば去年(2021年7月)、アメリカの大手メーカーもPython搭載の関数電卓を発売しましたね。
近藤 :こちらもフランス向けの機種が先行でしたね。
柴田 : いろんな関数電卓でPythonが使えるようになったのは、フランスのプログラミング教育の影響だったんですね。知ってびっくりしました。
近藤 : フランスから教科書を取り寄せて、出てくる機能をカバーできるように選んで実装しています。色も教科書に合わせていますよ。
柴田 : 芸が細かい。まさに、日本企業の腕の見せ所ですね。これから『fx-CG50』を使って機能やポイントを伝えていきたいと思います。近藤さん、ありがとうございました。
関数電卓のPythonを使ってみた
操作可能なものはなんでも操ってみたくなるのが、エンジニアという生き物です。プログラミングができるとなれば、なおさら使いたくなってしまいます。今回、取材に前後してカシオの関数電卓『fx-CG50』の実機をお借りしました。
『fx-CG50』に載っているPython機能は、機能限定版のMicroPythonの、さらに機能限定版です。今時のPythonのように、numpyやscikit-learnやPyTorchは使えません。クラスも定義できないし、インポートできるモジュールも限られています。
フランスの教科書用の機能しか持っていないため、ずいぶん制限された環境でプログラミングすることになります。こういうの、エンジニアとして燃えますね。仕事のプログラミングだって、納期とか予算とか性能とか、いろいろな制限の元で開発を行います。仕様変更がないだけマシです。壁は乗り越えるためにあるのです。
『fx-CG50』でPythonを動かすための方法は、二種類あります。ひとつは、「シェル画面」にプログラムを入力して実行する方法。ただし、一行ごとにしか実行できません。パソコンで「python」とコマンドを入力すると出てくるインタラクティブシェルと違って、インデントされたブロックを含む複数の行を入力、実行することはできません。
『fx-CG50』のシェル画面
もう一つは、入力したプログラムファイルを実行する方法。『fx-CG50』は簡易なファイルシステムを持っていて、ここに.pyファイルを保存できるようになっています。メニューからファイルを実行すると、シェルに「from ファイル名 import *」と表示されて、ファイルに書かれたプログラムを実行。Pythonのプログラムファイル(.pyファイル)はモジュールです。インポートすることによって、トップレベルに書かれたプログラムが実行されるというわけです。
簡単なエディタを搭載しているので、これを使えば短いプログラムなら作ることも可能。まさにポチポチと、一文字ずつコードを入力していくのです。そういえば、高校生のころポケットコンピュータというガジェットがあったのを思い出した。BASICを使って簡単なプログラムを入力・実行でき、当時、友達から借りたCASIOのポケットコンピュータで、ポチポチとプログラムを入力していました。12桁×1行の画面で、よくやってたな。
限られた環境下でのプログラミングは、トライアンドエラーが頻繁にできません。入力、実行、結果の確認すべてに時間がかかるからです。だから自ずと、頭の中でよく考えて、思考実験してからプログラムを入力することになります。私は初心者のうち、そういう環境で、ずいぶんプログラミング力を鍛えられたような気がします。初学者がプログラミングを学ぶ環境としては、関数電卓は理想的かも知れません。
オイラー法による求積プログラム
関数電卓を使ったプログラムなので、計算をさせたいと思いました。そこで、「オイラー法」と呼ばれる計算方法で、円の面積を計算するプログラムを作ってみました。
オイラー法、名前が凄そうですが、やっていることは簡単です。円のような図形を長方形に分割して、面積を求める方法です。
オイラー法のイメージ図
分割数が少ないと、スキマがたくさんできて誤差が生まれますが、細切れにするほどに、誤差が少なくなっていきます。プログラミングコードにすると、次のようになります。
d = 10000
area = 0
for i in range(d+1):
y = i/(d/2)-1
x = (1-y**2)**0.5
rect = (x*2)*(2/d)
area += rect
print(area)
一行目に書かれているdという変数が、分割数です。このプログラムでは、1万分割しているのが分かります。また、ここでは半径が「1」の円の面積を求めています。
円の面積は「半径×半径×円周率」ですから、半径1の面積は「円周率」になります。そう、分割数を増やしていくと、円周率の近似値が求められる。読んでいてちょっと得した気分になった人は喜んでください。あなたは今、数学を学ぶ楽しさに触れたのです。
1万分割で「3.141589327430583」という答えが得られます。小数点以下4桁まで、正しい値になっていますね。dに代入されている数字に0を増やして10万にすると、精度がもう一桁上がります。『fx-CG50』で試したら7秒くらいかかりました。もう一桁増やすのは恐いですね。
ニュートン法のイメージ
誤差が大きい長方形の代わりに、台形を使う手法もあります。オイラー法と同じく、考案者の名前をとって「ニュートン法」と呼ばれています。現代では高校生で学習する「定積分」という計算法がなかった時代、関数の積分を行うために使われていた計算手順です。
こちらのリンクを使えば、同じプログラムがパソコンのWebブラウザで動きます。Colaboratory(コラボラトリー)というサービスを使って、関数電卓がなくても、雰囲気だけ楽しめるようにしてみました。
リンクを開き、Googleアカウントでログイン後、左上の三角のマークをクリックしてください。
その後、表示されるダイアログで「このまま実行」を押すと、プログラムが走ります。
マンデルブロ集合を描く
関数電卓とパソコンをUSBでつなぐと、パソコン側ではUSBストレージとして認識されます。パソコンから、関数電卓のファイルシステムの中身が見えるのです。この機能を使うと、関数電卓にあるPythonのプログラムを、パソコンのエディタで直接編集できるようになります。
もう少し長いプログラムを作ってみたかったので、この機能を使ってみることにします。パソコンで編集したPythonのプログラムを『fx-CG50』に送り、動かしてみました。お題として選んだのは、「マンデルブロ集合」というフラクタル図形を描くプログラム。
マンデルブロ集合イのメージ図
関数電卓のPythonでは、簡単な画像を描画することができます。これもフランスのカリキュラムに合わせて追加した機能だとか。
機能限定版のPythonとはいえ、ちゃんと複素数(complex)型という特殊な数値型が使えます。マンデルブロ集合を描くには、複素数の実部と虚部を別々の変数として扱う方法もあるのですが、せっかくだから複素数型を使ったプログラムを作ってみました。
実際に作成したプログラム
パソコンと『fx-CG50』を繋いで、このプログラムを関数電卓に送ってみます。
すると、関数電卓の画面でマンデルブロ集合が描かれました。
先ほどと同様、Colaboratoryを使っていて、こちらのリンクをクリックすると、Webブラウザ上でマンデルブロ集合を描くことができるようになっています。動かす環境に合わせて、使うグラフィックライブラリを切り替えるようになっています。
『fx-CG50』でプログラムを動かすと、数分で描画が終わります。もう少し遅いのかと思っていたのですが、そこそこ速く描画が進みます。最近の関数電卓はすごいな。
限られた環境でPythonを使うことで思考が深まる
人間の創造性は、限られた環境で発揮されます。人間の「取捨選択の能力」は思ったより低く、なんでもできる環境だと、なにをやろうか考えているだけで、能力を使い切ってしまいがちなんだそうです。YouTubeやNetflix、SNSを遮断すると仕事や勉強に集中できますよね。
『fx-CG50』はネットにもつながらないし、Python機能も限られています。最初は面倒かと思ったのですが、使い始めると、不思議と楽しい。楽しいのは、よく考え、頭の中で動きを確認しながらプログラムを組むからだと思います。パソコンのプログラミングと比べると、入力や実行確認の効率が悪いので、脳内で試行錯誤しながら、プログラムを作るようになるのです。
頭の中で変数の変化やループ処理などをシミュレートしながらプログラムを作る能力は大切です。特に初心者のうちは、とても重要です。なぜなら、プログラムが動く仕組みを、頭の中で「モデル化」できるようになるからです。「モデル化」は、プログラミング力の基礎になる部分です。ネットから拾ってきたプログラムを、ただなんとなく動かしているだけでは、この「モデル化」がなかなかできるようになりません。変数や条件分岐のような、「機能」を暗記するだけでもダメです。
関数電卓でプログラミングを覚えると、とても力がつくと思います。フランスをまねて、日本でも、関数電卓とPythonを使ったプログラミング教育をやったらいいのに、と思います。
取材+文:柴田 淳
編集:LIG