Start using ChatGPT today: Let it find the right Python library for you.
相模原市で IoT 設計を受託しているファームロジックスです。
ChatGPT がコンピュータのプログラムを書いてくれるらしい、という話を聞いて、多くのソフトウェア設計者の方は、
AI に俺の仕事を奪われてたまるか。俺はプログラミングスキルに自信があるんだ。
とお考えになったのではないかと思います。
私も ChatGPT の噂を聞いてから、いろいろな断片コードを ChatGPT に書かせてみました。確かに、気の利いたコードをパッパと書いてくれるのは素晴らしいことですが、そんなことで自分の仕事を奪われるなんてことはない、などと、最初は頑固な受け入れ方をしていました。
TL;DR; 結論に飛ぶにはこちらから…
いまやネット時代。どんな言語もアプリ設計も修得できる!?
プログラマの皆さんは、たとえ自分の経験のないプログラミング言語や、経験の少ないアプリケーション領域の仕事を相談されても、「それはできない」とお答えになることはないでしょう。
いまや、ネットの情報、特に StackOverflow などのサイトを参考にすれば、経験のない言語やアプリケーションの設計でも、なんとか対応できることが増えてきました。つまり、スキルのある設計者であれば、大抵のことは自力で実現できるのです。AI なんて要らないのではないか?
適切な Python ライブラリを見つけるには?
先日、こんな経験がありました。
Python でプログラムを書いていたのですが、ある関数処理を、毎時毎分、時計で 0秒、20秒、40秒のタイミングで実行する必要があったのです。つまり、11時25分00秒、11時25分20秒、11時25分40秒、といった具合に、20秒ごとに関数を呼び出したい訳です。
経験のある皆さんも同様にお考えになると思うのですが、一番簡単なのは、関数の呼び出しと 20秒のスリープを交互に実行することです。しかしこれだと、関数の呼び出しに時間がかかると、実際には 20秒よりも長い周期になってしまいます。
次に考える方法は、datetime
ライブラリで時刻を読み出しながら、0秒、20秒、40秒のタイミングで関数を呼び出す、という方法です。これならば、関数呼び出しのタイミングがどんどん後ろにずれてしまうことはありません。
しかし、こんなふうに思いました。
このような処理は、もちろん自分でもプログラムできる。でも、誰もが考えそうな問題に対しては、うまい既存のライブラリがあるはずだ。
さっそく Google で「python call functions every x seconds」と検索してみると、次のようなページが見つかりました。
しかしよく読んでみると、(もちろん私の検索キーワードが甘いのですが)この Python 標準ライブラリ sched
は、絶対時刻で関数実行をスケジュールするものではなく、実行「間隔」を指定して関数呼び出しをスケジュールするもののようです。
なあんだ、私のしたいことと違う。やっぱり、そんな都合のよいライブラリなんてないのかな。みんな、スクラッチから書くのかな。
と思ってしまいました。
ChatGPT で簡単に適切なライブラリを発見できた
そんな折、「そうだ、ChatGPT に聞いてみたらどうだろう」と思いつきました。さっそく、ChatGPT(GPT-4)を呼び出します。
まずは問題を単純化して、次のように聞いてみました。
私: Pythonで、毎時0分0秒の時に指定した関数を呼び出す方法を教えてください。
すると、あっという間に次のような回答が得られたではないですか。(詳しくはこちら)
ChatGPT: Pythonで特定の時間にタスクを実行するには、スケジューリングライブラリがいくつかありますが、その中でも「schedule」というライブラリが簡単で便利です。(略)
表示されたサンプルコードを見ると、実に簡単に、私のやりたいことが実現できそうです。
続けて次のような質問をしてみました。
私: それでは今度は、毎分、0秒と30秒の時に関数を実行するにはどうしたら良いですか?
ChatGPT: Python の schedule ライブラリでは、秒単位のスケジューリングができないため、この要求を満たすには別の手段を考える必要があります。(略)
え、そうなの? それって残念。。。諦めず、schedule
ライブラリのサイトを覗いてみます。
README にあるサンプルコードを見てましたが、最初はよく分かりませんでした。秒単位のスケジュールはできないのでしょうか。私は諦めず、ドキュメンテーションを追い、さらにソースコードを追ってみました。なんだか、秒単位のスケジュールができそうに感じます。
そこで、先ほどの GitHub サイトの issues を覗いてみたところ、こんな記事がありました。
なるほど。当初はできなかったようですが、コントリビュータの方が秒単位のスケジュールを実装し、バージョン 0.6.0 で対応したようです。
ChatGPT の知識は、ちょっと古かったみたいです。後で示すリンクを見て頂くと分かりますが、ChatGPT は schedule
ライブラリの 0.6.0 まで知っていると回答していますが、おそらく、秒単位のスケジュールができるようになったことは、知らなかったようです。
これは一つの教訓でした。ChatGPT の回答は事実でないことがありますし、加えて、参考としている情報が古いこともあります。
ChatGPT の回答について、それが事実かどうか、また、最新の情報を反映しているかどうかを確認することは、人間であるソフトウェア設計者のスキル、知識、情報収集力にかかっていると感じました。
結局、こんなコードが完成しました。
import schedule
def get_power_and_elastic():
# 略
def main():
schedule.every().minute.at(":00").do(get_power_and_elastic)
schedule.every().minute.at(":20").do(get_power_and_elastic)
schedule.every().minute.at(":40").do(get_power_and_elastic)
while True:
schedule.run_pending()
time.sleep(1)
ChatGPT を活用すれば新たな発見がある
ChatGPT の知識は若干古いことがあるようですが、それでも素晴らしいではないですか。私は ChatGPT のおかげて、Google 検索では見つけられなかった素晴らしいライブラリを、あっという間に発見し、車輪の再発明を避けることができました。
さらに、多くの方がテストした信頼できるライブラリを利用できるというメリットもあります。自分で書き殴ったライブラリや関数には、とかくポカミスがあるものです。
ほかに、ChatGPT を活用することで、自分の知らなかったライブラリの発見だけでなく、自分が思いつかなかった解法も見つけることができるのではないでしょうか。
結論としては、AI をネガティブに捉えるのではなく、自らの生産性を向上するためのツールとして活用すれば、AI はわれわれの強い味方になるのだ、ということです。
最後に、私の実際の ChatGPT とのやり取りをこちらに置かせて頂きます。
今後も、オープンソースと AI を活用しつつ、先進の IoT 組込設計を、ファームロジックスがお手伝いしていきたいと考えております。