モノ作りのアプローチとbitBuyerプロジェクト
人によって、モノ作りの際のアプローチ方法は様々です。必要な部分から作るのか、興味のある部分から作るのか、あるいは、私のように全体像を描くところから始めるのか。bitBuyerプロジェクトにおいて、私は全体像、即ちGUI(グラフィカルユーザーインターフェース)の作成から始めました。
プログラミング未経験からのスタート
歴程1で触れた通り、私は全くのプログラミング未経験者でした。そうそう、そもそも何故開発言語にPython(パイソン)を選んだのかについて、まだ言及していませんでしたね。プログラミング未経験だった私は、ChatGPTにこう訊ねました。「プログラミングの知識がなくても簡単にアプリケーションを作れるプログラミング言語はどれですか?」と。そしてこうも訊ねました。「Early 2013 MacBook Airでも開発に使えるプログラミング言語は?」と。2023年時点で2013年のMacBook Airなんて、古すぎますよね😂。とはいえ、普段使いには全く問題なかったので、10年もの間愛用していました。そしておすすめされたプログラミング言語のうちの一つが、Pythonだったのです。
Pythonを選んだ理由とプログラミングの学習
一つ目の質問「プログラミングの知識がなくても簡単にアプリケーションを作れるプログラミング言語はどれですか?」だけのときは、Appleが提供する言語「Swift」をおすすめされました。しかし、2013年のMacBook Airという環境では、いくつかの理由から現実的な選択肢とはなりませんでした。それに、子どもたちへの「教育的価値の提供」という観点から見ると、Appleのエコシステムに依存することになるSwiftはあまり良い選択肢とは言えません。Windowsでも使えるプログラミング言語にするべきです。
そこで、二つ目の質問「Early 2013 MacBook Airでも開発に使えるプログラミング言語は?」が効力を発揮しました。要するに古い環境でも動く、汎用的なプログラミング言語が求められているとChatGPTは解釈したのです。そこで提案されたプログラミング言語のうちの一つがPythonでした。Pythonは高いレベルで抽象化されています。
プログラミング言語が高いレベルで抽象化されていると、初心者にとって非常に学びやすくなります。細かい指示を省略し、簡単な言葉や命令でコンピュータに動作を指示できるため、初心者でも複雑な処理を比較的簡単に実現できるのです。例えば、掃除ロボットに「掃除してね」と頼むだけで細かい動きを自動でやってくれるように、高いレベルの抽象化を持つプログラミング言語では「こうしてほしい」という大まかな指示で済みます。これにより、細かい技術的な仕組みを全て理解しなくても、初心者はやりたいことを素早く実現し、プログラム全体の動きや目的に集中できるようになるのです。
──ChatGPT-4o
ChatGPTに概ね上記のような説明を受け、モダンなプログラミング言語としても知られるPythonが最も適していると考え、bitBuyerプロジェクトはPythonを採用することになりました。
フレームワークの役割と選定の重要性
そして、そうそう、GUIの作成から始めた、という話でしたね。GUIを作成するには、まずフレームワークというものを選ばなくてはなりません。
フレームワークとは、プログラムを効率良く作るための「土台」や「ひな型」となるもので、開発者が一から作業をする手間を省き、基本的な構造や機能があらかじめ整備されたものです。これにより、共通の課題や繰り返しの作業に時間を取られず、開発者は自分のプロジェクトの独自部分に集中することができます。フレームワークを使うことで、初心者でもプロジェクトの基盤をすぐに整えやすく、効率的で一貫性のあるコードを書きやすくなります。
──ChatGPT-4o
GUIをフレームワークなしで作成するには、膨大な量のコードを書き、基本的な機能を一から構築しなければなりません。このため、フレームワークを使うことは作業を大幅に軽減する効果をもたらし、デザインや機能の実装に集中できる環境が整います。特に初心者にとっては、フレームワークを活用することで、GUI開発の難易度が大きく下がります。
TkinterでのGUI開発とその限界、PyQtへの移行
私はChatGPTに勧められるままに、Pythonに標準で組み込まれているTkinterというフレームワーク(正確にはライブラリ)でGUIの作成を始めました。ここで先に種明かしをしておきます。この選択は失敗でした。
TkinterでGUIを作成し、ボタンのクリック時の動作などのコードをあらかた書き終えたとき、その問題は発生しました。
Tkinterでのマルチスレッド処理や非同期処理は、初心者にとって難易度が高いです。TkinterはシンプルなGUI作成には適していますが、GUIを更新しながらバックグラウンドで別の処理を実行する、つまりマルチスレッド処理や非同期処理を組み合わせることが難しく、注意深くコードを書く必要があります。
──ChatGPT-4o
初心者が複雑なGUIや非同期処理を含むアプリケーションを作成したい場合、PyQt(パイキュート)のような効率的なフレームワークが推奨されます。Tkinterは基本的なGUIの学習には良いですが、実用的なプロジェクトにはPyQtの方が適しているでしょう。
え……😂。
bitBuyerプロジェクトの今後と教訓
何が起きたのかご説明しましょう。私が作成したいアプリケーション、つまりビットコインなどの暗号資産(仮想通貨)自動取引アプリケーションのような高度なアプリケーションには、複数の処理を同時に実行するという「バックグラウンド処理」が不可欠です。にも関わらず、Tkinterでそれを行うのは初心者には非常にハードルが高いと言われてしまったのです。そのハードルを乗り越えてこその教育的価値の提供、という考え方もできますが、そもそもそれはプロジェクトの付加価値であって、本来の目的である暗号資産の自動取引はできるだけ早く実現したいのです。それなのに……
コードを2,500行も書いてから言わないでよ!😂
TkinterからPyQt(パイキュート)への移行を行わなければならなくなりました。原因は、そう、GUIを先に作りたいと思い、GUIの作り方だけ先にChatGPTに訊いたことです。
しかし実際のところ、2,500行のうち3/5くらいは、フレームワークに依存しないコードでした。これは移行が完了した後で分かったことです。大幅な変更が必要だったのは、主にGUI部分だけでした。TkinterからPyQtへのフレームワークの移行という大きな作業を、プロジェクトの開始から間もない時期に行えたことは、むしろ良かったとすら思います。プロジェクトの開始から一周年を迎えた2024年10月29日の時点で、コードは11,533行に達しています。2,500行なんてかわいいものです😉。
(まぁ2024年6月末からほとんど進捗していないのですけれども……)。
以上、「フレームワークの選定は何を実現したいかを考えてから行うべし」という教訓を得た歴程でした。
Cheers!


