見出し画像

【"Cheat"GPT】ゼログラミング・アルゴリズム

プログラミング知識完全ゼロ野郎が一切勉強せずプログラミングに挑戦する「ゼログラミング」。

前々回俺はChatGPTの40回制限のタイマーをタブに表示するMODを完成させたのである。

そして前回はtampermonkeyといったプログラムツールを導入する方法をまとめたのである。

一見「そんなの労力かけて作る必要あるの?」「共有されているツールでいいじゃん。」と思うが、自分仕様のものを作ってみるとめちゃめちゃ便利で、もはやそれなしでは生きられなくなることも非常に多い。「俺なんであんな面倒なこと平気でやってたんだろう・・・?」使ってみないと面倒さに気づかないのである。「AIを使って80%仕事を減らそう!」とかもいうけれども、それはちょっと甘い。AIは不具合が多いから。80%減らしたいなら、あえて250%くらい労力を「増やす」ことが重要なのは産業革命以来同様である。

しかし君がゼログラマーとなり、いざwebツールを作ろうと思った時、そもそもプログラムで何ができるかがわからないのだから、なにも思い浮かばないかもしれない。

それに思い浮かんでも、なんてChatGPTに言えばいいのだろうか?

今回はその方法をまとめたのである。


■定式化の方法

定式化というのはタスクをある一定の手続きに落とし込むことである。そういうと難しく聞こえるし、プログラミングの知識ゼロであればできるわけがなさそうだが、実はAIを使うということを考えると簡単である。

以下がアルゴリズムのアルゴリズムである。

◇ステップ1 何回もやる操作とうざ機能にキレる

「めんどくせえなあ。」
「これマジで邪魔だわ」
「なんでいちいち毎回こうしなきゃいけねえんだよ。」

パソコンなどを使っているとこういったことをつぶやくこともあるのではないだろうか。

「くそが!」

これでいいのである。キレれば、実はそれでほぼ7割はアルゴリズムが終わったのである。

・何回もマウスで選択して貼り付けている
・何回も同じ修正をしている
・何回も同じ計算をしている
・サイトの表示が邪魔

キレるということは、明らかになにかしらもっと簡単にうまくいく方法があるという直感があるからである。たとえば東京にいる人に大事な用事で大阪に来てほしい時、5分で来なかったからと言って別にキレることはないだろう。逆に1ヶ月もかかっていたらキレるだろう。「おまえ歩いて来たのか!」

結局キレるのは妥当な解決策があることを悟っている時なのだ。そのキレた理由、「どうなっていればいいのか」「どうなってほしいか」という点を詰めればいいのである。

👆こういったぶちぎれケースもある。「なんでダークモードがないんだよ!ふざけんな!」とのことである。正直なところ私はダークモードの良さがいまいちわからない派だが、俺はどっちがいいとか、どっちにしろとかいった話ではなく、キレたらAIを活用するチャンスだよという話。それから「なんでアドブロッカー利かないんだよ!」とかもである。

◇ステップ2 作りたいツールが完成したとして「取説」を書く

ゼログラマーであると、自動化を考えようとしてもよくわからないことが多いが、少なくともなにかしらのPCツールはいろいろ使っているだろう。クリックして起動したり、ダブルクリックでソフトを開くなど。定式化とはそうしたツールの操作、説明書のようなものを考えることなのである。

定式化をChatGPTに伝える手順

1.まずは「tampermonkeyって便利だなあ」(前回参照)。

2.そしてツールの取説を書いて「こんなの簡単でしょ」を末尾につける

取説の例
●右下にウインドウが出て、そこに書いたテキストをエンターを押すとフォームに貼り付ける。こんなの簡単でしょ

●右下にボタンがあってそれを押すたびに、"C:\Users\Desktop\text.txt"の中身を改行で分けて一つずつ貼り付けていくようにしてほしい。下の赤いリセットボタンを押すと自動貼り付け動作が止まる。こんなの糞簡単でしょ

●このツールバーが毎回出てきてじゃまだから消してほしい。こんなの簡単でしょ(前回の「ゼログラミング・チュートリアル」で説明した「検証のスクショ」を使って「このツールバー」を伝える。)

これでオッケと。

これでアルゴリズム化、定式化完了である。

「こんなの簡単でしょ」というハッタリは、AIがいつもこちらの意見に合わせてくることを利用したテクニックだ。こういうと本当に簡単に作ってくれることが多くなる(虚言癖のあるやつにその嘘を追求するのではなく、自分の意図通り嘘をつかせるみたいなやつ)。さらにプログラミングに臆してしまう自分自身を勇気づける効果もあるだろう。

◇ステップ3 「垂らす」

ただし操作方法を考えるのは50%くらいにとどめておいた方がいい場合も多い。というのもChatGPTのほうがよっぽどプログラミングをよくわかっているため、より目的に適った操作などを出してくれるラッキー・パンチもあるからだ。

実際俺が「こうこうこうしてくれ」と言って、コードを実行したらイメージと違うから「だーかーらー!」と一瞬キレかけたものの、「あれ、でもこっちの方がだんぜんいいじゃん。まじか。こんなテクもあるのかよ。でかしたなあ。」という展開もあるのである。

●中途半端に聞く方法
「~することは可能ですか?」
「~したいんだけどなんかアイディアありますか。コードはまだ書くな。それだけ5個」

こうした間合いで指示を出すことを将棋の垂れ歩に倣って「プロンプトを垂らす」という。あまり完璧な設計を提示しないで、少し手前でとどめておくわけである。

とはいえ変なアイディアも結構出してくるので、まさに50%くらい垂らすのがちょうどいいだろう。世の中的に「プロンプトは明確にしよう」という意見があったと思えば「面倒なことは全部任せよう」という意見もある。一体どちらが正しいのだろうかと思ったことはないだろうか?

結局どちらも、うまくいかなければやりなおせばいいだけという状況を忘れ、この「垂らし」が見えていないのである。

◇ステップ4 「育てる」

これで8割くらい作れて、そこそこ便利なのであるが、動かしてみると「もっとこうならいいのに」みたいなことが出てくる。そもそも一発でどうなっていればいいかがわかってそのまま完成できたとすれば、知識ゼロの範囲内でできただけの、あまり大したものではない可能性が高い。それにウインドウズだってクロームだってゲームだってなんだって、いつもいつもアップデートしている。ゼログラマーなら当然だ。

たとえば俺は最近テキスト挿入機を作った。定型文をテキストフォームにクリックで貼り付けられるツールだ。

👆右端のグレーの部分に登録した定型文リストがある。それをダブルクリックするとテキストエリアに貼り付けられる。労力がかからないので思いっきりお礼を言う

かなり便利だが、しかしこれも問題があった。毎回テキストフォームの最後に貼り付けられてしまうのである。何かプロンプトをテキストエリアに書き込んでから、最初に定型文を入れようとしても、最後に挿入されてしまうのだ。まあこれでも十分ではあるけれども、意図したところに貼り付けられるようになってほしいなあ。となって、それを追加修正するわけである。こういう不具合を最初から把握することは不可能で、作ってみてからわかることである。

追加修正の手順としては、すでにそのコードを作ったところに続けられるならそうすればいいが、ごちゃごちゃしているなどで、新しいチャットではじめたい時は、

1.やはりまずは「tampermonkeyって便利だなあ」

2.続いて「これ読んでまずは理解してください。」でコード貼り付け。

3.続いて「これ便利なんですけど、さらに追加機能がほしいね。ダブルクリックすると貼り付ける位置が、いつもテキストエリアの最後になる。だから直前にあったカーソル位置に貼り付けられるようにしてほしいんだよね。こんなの簡単でしょ」

この3回の会話である。チャット1回目からいきなりコードを貼り付けて本題に入ると失敗しやすいので注意しよう。

追加修正によって本格的にコードが複雑化してくるので、無理なら一旦撤退して、どうしても必要そうならしばらくしてからやればいいだろう。「あ、そういうことか!」と後日バグの状況がはっきりすることもよくある。

𓁨𓁨𓁨ゼログラマーへ地獄からアドバイス𓀽𓀽𓀽
・「ここでクリックして、このボタンを押すと・・・」みたいに想定するツールの操作説明書を考えることが定式化
・「垂れ歩」に50%妙手あり
・できるだけ修正と追加
𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨

■できることがわかるとより望ましい

俺はifの条件文とかループとかなんとなく知っていたが、細かいことはまったくしらないゼログラマー。思いのほかこんな必殺技もあるんだなあと感心することもよくあるのである。

ゼログラマーだとまったく知らないのだからしょうがない。だからこそ「垂らし」で自然と見つかっていくわけなのであるが、最初から知っていれば「ここでロープに投げてラリアットだ」とか「相手が倒れたところへ、ランディングボディプレスをしてくれ」とか明確な技名で指示できるようになり、段取りがよくなる。細かい文法は知らなくてもいいが、そういった技を積極的に覚えていくとよいだろう。

たとえばtamper×GPTならば以下のようなことである。

◇アクション

クリック、ダブルクリック、キー操作といったことは基本的にイベントにできる。

◇代入

代入・置換はコンピューターがもっとも得意とするところ。置換や一部差し替えなどはかなり余裕。

◇フラグ

「フラグを立てる」といったことは日常用語にもなっているが、俺は正直いまいち意味がよくわからなかった。

これは特定の条件が満たされているかどうかを表す変数なのである。要するにトイレの「今入ってます」を表す、鍵のところの赤と青みたいなことである。いくつか独立した命令をそれぞれ動かしているような時に、そのうちの一つに、「トイレに誰も入っていなかった時だけ、ドアを開けてうんこしろ。誰か入ってたらドアを開けず待て」みたいに、フラグによってうんこをするタイミングをコントロールできるわけである。

◇監視

ポーリングというとなんか宗教用語みたいだが、これは投票とか世論調査のpollから派生したコンピューター用語のようだ。一定期間状態を調査するみたいなことのようである。要するに状態を一定間隔でチェックするということである。これはtamper×GPTで相当キラーなテク。

監視にはmutation observerとかいう一定期間チェックするのではなく、変化した時だけ反応するという方法もあるらしい。ChatGPTはポーリングではなく毎回こちらを書こうとしてくるのだが、それを書かせるといつも失敗するので、ポーリングの方がいいと思っている。ポーリングは無駄な監視回数が多くなることは確かだが、個人レベルで問題があるとは思えない。

うんこで言えば、飲み屋とかでトイレが使用中だった時、一回席に戻るか(ポーリング)、それともトイレの前で待つか(mutation observer)ということである。確かにトイレの前で待っていればもっとも速く、他の人に順番を抜かされたりしないものの、やはり出て来た人と顔を合わせるのは少し気まずいものがある。

𓁨𓁨𓁨ゼログラマーへ地獄からアドバイス𓀽𓀽𓀽
・作りながら「何ができるか」をたくさん知っていく
・次第にいつも使うものなどが増えてきて段取りがよくなる
・トイレから出て来た人と顔を合わせるのは、少し気まずい
𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨

■まとめ

そんなわけで、アルゴリズム化の流れは以下である。

キレる

取説を書き、適度に「垂らす」

できるだけ追加修正

これを繰り返して何個か作っているうちに「なるほど、ならここで監視させればいいね」「うん、これはフラグでいけるでしょ。」とかパソコンオタクみたいになってくる。スタートとゴールがある従来の記憶力勝負の体系的学習方法とは異なる、まったく新しい学習方法で歩みはじめた偉大な一歩だ。

𓁨𓁨𓁨ゼログラマーへ地獄からアドバイス𓀽𓀽𓀽
基本的に「状況にかかわらず、時と場合によらず、普遍的に、毎回きっちりこうしてほしい」というものはAIに処理させない。

AIは従来われわれがコンピューターに期待していた「(融通は利かないが)100%正確で速い計算ができるツール」の進化したものなのではない。根っこからちがう答えを予測するツールで、無理に使えばよいというものでもないし、相変わらず従来の「コンピューター」的処理の方が便利なことも多い。
𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨𓁨

この記事が気に入ったらサポートをしてみませんか?