この記事では、Ari Mahpour が、DelphiScript 言語による Altium Scripting で ChatGPT を最大限に活用する方法について解説します。
ここ数か月で、多くの人が生成AI、そしてとりわけ有名なChatGPTに親しむ時間を持てるようになりました。前回の記事 Using ChatGPT for Automated Testing では、ChatGPTサービスを紹介し、その基本的な使い方に慣れつつ、ハードウェアのテストを実行するコードを生成する方法をお見せしました。今回の記事では、Altium Scripting を使って、Altium自体の中で自動化機能を実行するDelphiScriptコードを記述する際に、ChatGPTをどのように最も効果的に活用できるかを見ていきます。
実装に入る前に、まず今回扱う対象を理解しておくことが重要です。Altium Scriptingは、他の言語よりも DelphiScript でのサポートが最も充実しています。オンラインで少し検索すると、「2022年にもなって、そろそろDelphiでコーディングを始めるべきでは?」や、「Delphiで使われるPascal言語は、最も人気があり汎用的なプログラミング言語のひとつだ」といった目を引く見出しが見つかりますが、私はAltium Designer以外でDelphiが使われているのを見たことがありません。だからといって悪い言語というわけではなく、単にPythonやC++などほど一般的ではない、というだけです。新しい言語を学ぶには多くのことを身につける必要がありますし、特に本職のプログラマーでない場合はなおさらです。そのためAltiumは、DelphiScriptでのコーディングに関する豊富なリソースやツールまで こちら に用意しています。この言語をしっかり学びたいのであれば、そこにある資料は役立つはずです。
Altium Scriptingを始めると、保存や共有をしたくなるスクリプトの大きなリポジトリが、あっという間に増えていくはずです。Altium Designerで新しいScriptingプロジェクトを作成するには、File > New > Script > Script Project に移動します。新しく作成したプロジェクトを右クリックし、Add New to Project > Script Unit を選択してください。すると、新しい .pas ファイルが作成され、これがあなたのスクリプトになります。
図1:既存プロジェクトへのスクリプトファイルの追加
次に、これをAltium 365ワークスペースに保存したいと思います。まず、プロジェクトがローカルに保存されていることを確認してください。その後、再度プロジェクトを右クリックし、History & Version Control > Add Project to Version Control… を選択します。
図2:Altium 365 Workspaceへのプロジェクト追加
その後は表示される指示に従って、プロジェクトをAltium 365 Workspaceに保存してください。Altium Designer内でDelphiScriptコードを書き、実行し、デバッグする方法についてさらに詳しく知りたい場合は、Altium documentation を参照してください。
セットアップが整ったので、いよいよ本題に入りましょう。ChatGPTには、DelphiScriptを最初から最後まで完全に書き上げる「可能性」があります。ここで「能力」ではなく「可能性」という言葉を使うのは、必ずしも毎回正しくできるわけではないからです。簡単な例として、「自分のプロジェクト内のすべてのネットを一覧表示するDelphiScriptを書いてほしい」とChatGPTに依頼してみましょう。最初に私が使ったプロンプトは、正直かなり曖昧なものでした。
図3:ChatGPTの最初の応答
ChatGPTは自動的に、PcbDocからすべてのネットを一覧表示したいのだと解釈しました。実際には回路図から取得したかったので、その点を修正しました。
図4:正しいスクリプトを書こうとするChatGPTの数ある試行のひとつ
生成されたコードのすべてはここに載せていませんが、その後に起きたのは、コードを何度も実行しては、Altium Designerが「Undeclared Identifier: eNet」や「Expected: in For Pin in Component. Pins Do.」といったエラーで失敗する、という流れでした。私はそのエラー内容を何度もChatGPTに伝えただけですが、5回目の試行でようやく求めていたコードが生成されました。
明らかなのは、DelphiScriptをゼロから生成するのはあまり得意ではないものの、それでも実現は可能だということです。いら立ってキーボードを壁に投げつけたくなる前に、そのことを思い出してください。
ChatGPTは、相棒やペアプログラマーのような存在として使うこともできます。コードの解析、バグの発見、あるいは特定の機能の調整を手伝ってもらうことが可能です。既存のAltium Scriptingのサンプルを使い、それをChatGPTに調整してもらって、自分のニーズに合わせることもできます。
Altium Scriptingのサンプルを提供しているリソースは各所にあり、特にGitHub上で多く見つかります。ここでは、Altiumが 公式に提供しているもの を使います。それらは こちら で見つけられます。
今回は、\DelphiScript Scripts\SCH\Sch_Scripts.PrjScr にある PlaceAPort サンプルから始めます。私はChatGPTに、ごく簡単なタスクを与えました。
ChatGPTは、この依頼どおりのコードを返してくれました。正直に言うと、プログラミングにある程度慣れていれば、これはかなり簡単です。では、Altium Scriptingに関する文脈知識が必要になるよう、少し難しくしてみましょう。
こちらがChatGPTに更新して与えたプロンプトです。
最初の試行では、Undeclared Identifier エラーで失敗しました。
図5:Altium Designerのデバッガエラー
そのことを伝えると、もちろんChatGPTは謝ってきます。そして次は「Undeclared identifier: Name」というエラーで再び失敗しましたが、3回目にはネットラベルが期待した位置に正しく配置されました。
図6:修正したスクリプトによって生成された新しいネットラベルとポート
複雑さが増すほど、ChatGPTが最初の一発でスクリプトを正しく書ける可能性は低くなる、というのは明らかです。ただ、粘り強くやり取りを続ければ、最終的には正しい結果にたどり着けることが多いと感じています。特に、生成されたコードを自分で理解していて、少し手助けできる場合はなおさらです。
この記事では、Altium Scriptingの紹介から始め、プロジェクトの作成方法、そしてそれをAltium 365ワークスペースに保存する方法を見てきました。続いて、ChatGPTがスクリプトをゼロから完全に生成する例と、こちらが用意したスクリプトを修正する例の両方を取り上げました。その機能性と、必ずしも毎回うまくいくわけではないという点の両方を示しました。完璧ではないにせよ、Altium Scriptingを学ぶ過程全体を通して、確かに有用なガイド役になってくれます。そして何より、まったく無いよりは、ある方が間違いなく助けになります。