はじめに
日本語プログラミング言語なでしこ3のGo言語版が正式にリリースされたようですので、さっそくVSCodeのターミナルからインストールして動かしてみました。本記事ではなでしこ3(Node.js版)では動いていた処理時間の出力(経過時間ミリ秒)が動いていないっぽいので、解消を試みてみます。
なでしこ3(Go版)のインストール
下記の2種がインストールされるようでした。CLIとGUIは別コンパイラのようです。
なでしこ3 CLI版 (gonako v3.8.4)
なでしこ3 GUI版 (gonako-gui v3.8.4)
なでしこ3(Go版)のVSCodeのターミナルからのインストール
お手数ですが詳しくはこちらの記事をご参照ください。
なでしこ3(Go版)のgitレポジトリのローカルクローン
Goのバージョンアップ
お手数ですが詳しくはこちらの記事をご参照ください。
経過時間ミリ秒の出力が動いていない
なでしこ3(Node.js版)では動いていた処理時間の出力(経過時間ミリ秒)が動いていないっぽいのはなでしこ3(Go版)でランしたときからなので、解消を試みてみます。
生成AI
GitHub Copilot
GitHub CopilotのPro+版。日本語プログラミング言語あおいの実装1と検証の主担当。スーパバイザとしてMicrosoft Copilotを使いGitHub CopilotのCodeAgent推論量を最小化するプロンプトをCopilotで生成しGitHub CopilotのCodeAgentで実行という工法?を採用しています。あおいの検証改修ワークフローでPro版のクレジットを使い切ったのでPro+版にアップグレード。こっちのクレジット消費量増加は非常に鈍いので、月末までに使い切れないかもしれませんので、本件やってみることにしました。
プロンプト1
count3.nako
は、なでしこGo言語版のソースコードです。(UTF-8で記述)
これのコンパイルは通過していますが開始日時は、システム時間ミリ秒
(ループ処理)
終了日時は、システム時間ミリ秒
経過時間は、終了日時-開始日時「処理時間:{経過時間}ミリ秒」を表示する
で経過時間が実行時に0となってしまいます。
その原因を考察して
docs\経過時間が実行時に0となる原因.md
に出力してください。C:\nadesiko3\nadesiko3go
は、なでしこGo言語版のGithub開発リポジトリのローカルクローンです。
システム時間ミリ秒の定義とシステム時間ミリ秒同士の減算の
ソースコードはこちらから探索して考察してください。
生成レスポンス1
count3.nako で経過時間が 0 になる原因を、
経過時間が実行時に0となる原因.md
にまとめました。「システム時間ミリ秒」が参照するのは実行器の仮想時計で、計算ループ中は進みません。開始日時と終了日時が同じ値になるため、減算結果は 0 です。
リポジトリのAGENTS.mdはしっかり読みにいっていました。
プロンプト2
docs\経過時間が実行時に0となる原因.mdの
実時間の計測には、実時計を直接参照する機能を実行器側に用意する必要があります(経過時間の測定には単調時計が望ましいです)。
に対応するように
count3.nako
を修正することは可能ですか?
docs\経過時間が実行時に0となる原因修正プラン.md
に出力してください。
生成レスポンス2
修正プラン を作成しました。
結論は、現行の count3.nako だけでは実処理時間を測れない、というものです。プランでは、Go 言語版に単調時計を使う新命令を追加してから、時刻取得の二箇所を置き換えます。今回はプランのみ作成し、コードは変更していません。
プロンプト3
docs\経過時間が実行時に0となる原因修正プラン.md
を実行して
docs\経過時間が実行時に0となる原因修正プラン完了レポート.md
に出力してください。
生成レスポンス3
count3.go も新命令の呼び出しに更新されました。生成コードの命令 ID が実行時レジストリと合うことを確かめるため、この Go ソースを別名の実行ファイルとしてビルドします。検証後、一時タスクは元に戻します。
修正プランを実行し、完了レポート に結果を記録しました。
Go 言語版に単調時計を使う 実経過時間ミリ秒 命令を追加し、count3.nako の時刻取得を置き換えました。元の 1 億回ループは実行器の命令数上限で停止したため、既定回数を 1,000 万回に変更しています。再ビルド後の実行では 11306.1981 ミリ秒と表示されました。関連テストとマニュアルの DocTest も通過しています。
count3
こちらがGitHub Copilotが修正したなでしこソースです。「実経過時間ミリ秒」という単語をGoリポジトリに追加してそちらを引用しています。この単語の命名はGitHub Copilotによるものです。完了報告のとおり 1億回は1,000 万回に訂正されています。
※【なでしこ実行モード】cnako3
count=0
countMax=0
sizeArgs=コマンドラインの配列要素数
もし (sizeArgs < 4) ならば
countMax=10000000
違えば
エラー監視
※ countMax=コマンドライン[3] //を整数変換
※ countMax=10000
エラーならば
countMax=0
ここまで
ここまで
開始日時は、実経過時間ミリ秒
(count < countMax)の間
count = count + 1
ここまで
終了日時は、実経過時間ミリ秒
経過時間は、終了日時-開始日時
「処理回数:{count}回」を表示する
「処理時間:{経過時間}ミリ秒」を表示する
コンパイル実行
PATH上のコンパイラは正規バージョンのため、GitHubリポジトリでビルドされたなでしこコンパイラで実行する必要があります。とりあえず生成されていたcount3.exeの実行結果です。無事に処理時間が計測されていることがわかります。
C:\developments\vscode\gonako>count3
処理回数:10000000回
処理時間:849.6609ミリ秒
C:\developments\vscode\gonako>
C:\developments\vscode\gonako>dir
2026/09/26 08:47 33,365,651 count3.exe
2026/09/26 08:51 9,697 count3.go
2026/09/26 08:18 692 count3.nako
2026/09/26 08:54 <DIR> docs
2026/09/19 22:22 1,418 go.mod
2026/09/19 22:22 7,619 go.sum
レポートもしっかり生成されています。
C:\developments\vscode\gonako>dir docs\*.md
2026/09/26 07:22 2,101 経過時間が実行時に0となる原因.md
2026/09/26 07:39 3,478 経過時間が実行時に0となる原因修正プラン.md
2026/09/26 08:57 2,428 経過時間が実行時に0となる原因修正プラン完了レポート.md
おわりに
以上です。いかがでしたでしょうか?なにかの参考になれば幸いです。
-
AIとつくる日本語プログラミング言語Aoi (あおい) - Qiita ↩