スポンサーリンク

生成AIをお供に天文デジタル時計を作る

以前、MagicMirrorを使って天文デジタル時計を作ったことがあった。ISSからの眺めが動画で見れて、月齢も分かるという機能付きで、気に入って使っていたんだが、頻繁にアップデートが入って更新するのが面倒になったり、OSも古かったりしたこともあって、新しい天文デジタル時計を作ろうと思い立った。

ハードは基本的に以前のまま。ラズパイ4Bに1280×400のディスプレイが接続されていて、GPIOにはモーションセンサーHC-SR501が接続されている。OSはbook worm 64bitにした。一度、生成AIを使うとイチからコードを書くのが面倒になってしまい、今回もAIの力を借りることにした。

やりたいことは、日時と天体写真が表示できること、人がいなくなったらディスプレイの電源がオフになること(そして逆にオンになること)の以上だ。月齢表示は訳があって見送った。

今回は「時計のレイアウトもAIに任せてしまえるのでは?」と思って、MacのPreviewでこんなPNGイメージを作った。

加えて、ハードの要件とか、アプリの目的とか、簡単な仕様(たとえば1時間に1回画像を更新する)とか、天体画像はNASAのAPIで取ってくるとかいった細かな内容をマークダウン形式で20行ほど書いて、上の画像と一緒にGeminiに食べさせたら、基本的な動作とほぼ正確なレイアウトを実現したコードが、掛け値なしの「秒」で出力された。

むしろ、時間がかかったのは、お気に入りのフォントを探したり、人感センサーを使ったディスプレイのオン・オフのデバッグをしたりといった部分。この過程でもAIを使うのだけれど、印象としては、作り込みとかデバッグはChat GPT 4oが良い感じがした(CLINEやClaudeも機会があれば試してみたい)。

で、3時間くらいで目指していたものが大方できた。作っているうちに欲が出てきて、仕様に書かなかった「画面タッチで画像をロードする機能」も付けた。いつでも画像を変更できるのが気に入ったよ。仕事では、仕様にないことを要求したら、えんじにゃさんが不機嫌になるから、やめといたほうがいいよ。AIさんは不機嫌な顔もしないし、不満の一言も言わない。人間ができてるな。

もはや「生成AIってすげーなー」っていう感動はなくなってる。必要不可欠というか、AIがないと作れないというか、一行一行を最初から書くのが面倒くさくて、ドラフトはAIさんに作ってもらうのが正解な気がしている。

生成AIを使えば、プログラミングの効率が上がるとよく言われるけれど、それと同じくらいすごいのは、コードが書けなくても、要件や仕様を自然な言葉で伝えたら、プログラムができちゃうってことだと思ったりする。もちろん、大規模開発とかコードのレビューとかは素人じゃ無理だけど、ちょっとしたプログラムなら未経験者でもがんばれば実現できる世界がここにあるんだ(経験者談)。どこをがんばればいいかは、まだ言語化できていない。

がんばろうと思ってもできない理由のひとつに、アレルギーは絶対にあるよな。今回もPythonで作ったけれど、「じゃあお前、生成AI使ってCで書けよ」と言われたら、できる気がしない。あと環境構築も面倒といえば面倒。見通しがきかない分野に手は出しにくい。やっぱり、基本的な知識の前に、やる気は必要だよな。私はそのうちArduinoをCで動かせるようになりたいと思ってるよ。うん、そのうち気が向いたらね。

「AIを使ったら、プログラムの勉強にならないのでは?」という意見もある。私の場合は、生成AIのおかげで、プログラムを書く頻度が増えたし、AIと対話を繰り返しているうちに、「そんな考え方があるのか」とか、「こう書けばいいのか」とか、大変、勉強になっている。そもそも、出力されたコードが期待したとおりに一発で動くことはほぼないから、背伸びしているうちに身につく何かはきっとあるんだろう。

次は何を作ろうかな。

この記事へのコメント

  1. 生成AIが出始めたころ、、
    クリエイティブな仕事はしばらく無理だろう、的な意見が多かったと思います。
    まさかこんなに早く、実用的プログラムを書いてくれるようになるとは
    オドロキです。

    ・・・
    にゃあさん…って、
    “えんじにゃあ”だったんですね・・・
    ウスウス思ってましたが。
    赤道ギニャアとか椎間板ヘルニャアの可能性もあるな、って思ってたんですけどネ。

    • 赤道ギニャアは、ねこが赤道儀の下敷きになって悲鳴をあげているような雰囲気ですね。椎間板ヘルニャアは、さらに痛そう! わたしは、自称「みどるしにゃあ」ですよ。

  2. 生成AIでプログラム書くの、ホント楽ですよね。文句を言わない優秀な部下に仕事をお願いしている感じです。特に自分はPythonはあまり得意じゃないので助かっています。

    それにしてもかっこいいデジタル時計ですね。どんなプロンプトでどんなコードが出てきたのかとても気になります(^^)。

    • ねこめしさん、こんにちは。だいたい下のようなプロンプトとモックアップ画像をAIに投げました。プロンプトには説明文を書くように求めてない(というか書き忘れた)のですが、きちんと画像を理解して対応してくれたのが驚きです(ChatGPT-4o)。

      APIの仕様とか事前に詳しく調査しておくと指示が出しやすいと思いました(AIがフォローしてくれますが)。要件と仕様は別に書くより、一つひとつの要件に対して、実装方法を指示するほうがプロンプトを書きやすいかもです。このあたり、勉強継続中です^^ 出力されるコードは毎回違うので、お試しになってみてください。

      # あなた
      – あなたは、Pythonプログラミングのエキスパートです。
      – 簡潔でかつ可読性の高いコーディングが得意です。

      # 目的
      – ラズパイ4Bを使って時計を作る。

      # 環境
      – OSはbook worm 64bit
      – 1280×400のSPIディスプレイが接続されている。
      – 人感センサーHC-SR501が接続されている(GPIO 17)

      # 要件と仕様
      – ライブラリはPygameを使う
      – 表示は 1280×400 全体を使う
      – 画像はNASA APIを使ってAPODを取得する
      – APODの更新は一時間に一回行う
      – 画面には現在年月日と日時を表示する
      – 人感センサーに2分以上反応がない場合はディスプレイ表示をオフにする
      – 人感センサーに反応があった場合はディスプレイ表示をオンにする

      • おー、これだけですか。試しにChatGPT4oとGeminiにコピペしてやってみました。動かしていないのでちゃんと動くかはわかりませんが、ChatGPTのほうが少し賢そうなコードを吐いてくれました。でもGeminiのほうが、自動起動の仕方とか注意事項とかもしてきしてくれて便利そうです。個性が出て面白いですね(^^)。

タイトルとURLをコピーしました