INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32]

目次 | ←前へ / 2023-06-19 22:51 / 次へ→ / 最新へ⇒

■フリーソフト作者に要望を伝えるよりもAIにスクリプト書いてとお願いした方が確実か説の検証

2023年 6月19日(月) 22:51:01



RSSRSS配信中
https://www.inasoft.org/



去年あたりからのAIの進歩は目覚ましく、特に、絵を描いたり文字列を書いたりする生成系AIというものがものすごい。

子供の寝かしつけ用に物語を書いてくれと言えば感動的な文章を応えてくれるし、昔書いた小説の補完をしてくれと言えば独自の追加設定を交えて応えてくれる。

こういうふうにmp4動画ファイルを変換をしたいのだけど、ffmpegのコマンドラインをどう書けばいいの?と聞けばちゃんと答えてくれる。まぁ、よくできてる。

聞くところによると、プログラムを書いたりスクリプトを書いたりもしてくれるらしい。

であれば、フリーソフトの作者に要望を伝えてプログラムを作ってもらうよりも、AIに要望を伝えて使った方が速いし確実だしワガママも聞いてくれるのではないか?という気がしてきた。そうなれば、実際に試してみるしかない。目指すべきはマウスふるふるの主要機能部分を簡易に実現するPowerShellスクリプトに相当するものを書いてもらうことだ。

まずは、ChatGPT(3.5)に聞いてみることにする。


質問:マウスカーソルを50秒に1回、1ピクセル左右に揺らすPowershellスクリプトを書いてください。


[ChatGPT] 以下は、PowerShellでマウスカーソルを50秒に1回、1ピクセル左右に揺らすスクリプトです。

Add-Type -TypeDefinition @"
using System;
using System.Runtime.InteropServices;

public class MouseMove
{
    [DllImport("user32.dll")]
    public static extern bool GetCursorPos(out POINT lpPoint);

    [DllImport("user32.dll")]
    public static extern bool SetCursorPos(int X, int Y);

    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        public int X;
        public int Y;
    }
}
"@

function ShakeMouseCursor {
    $interval = 50 # カーソルを揺らす間隔(ミリ秒)
    $distance = 1 # カーソルを揺らす距離(ピクセル)

    while ($true) {
        [Mousemove.POINT]$currentPos = $null
        [Mousemove]::GetCursorPos([ref]$currentPos)
        $newX = $currentPos.X + $distance

        # カーソルの座標を設定(左右に揺らす)
        [Mousemove]::SetCursorPos($newX, $currentPos.Y)

        # 一定時間待機
        Start-Sleep -Milliseconds $interval
    }
}

# マウスカーソルの揺らしを開始
ShakeMouseCursor

上記のスクリプトは、ShakeMouseCursor関数を定義し、その中でマウスカーソルを揺らす処理を繰り返します。$interval変数はカーソルを揺らす間隔(ミリ秒)を、$distance変数はカーソルを揺らす距離(ピクセル)を指定します。

スクリプトを実行すると、カーソルが50秒に1回、1ピクセル左右に揺れるようになります。プログラムを停止するには、PowerShellウィンドウを閉じるか、Ctrl+Cキーを押してください。


なんだか、それっぽいものが出力された。

ただ、注意すべきは、マウスカーソルの「揺れ方」である。50秒に一度、マウスが右側に1ピクセル移動する。画面右端に到達すると、そこで止まってしまうだろう。

以上のことから分かるのは、

  • 指示の出し方を工夫する必要がある。プロンプターとしての能力向上が必要。一般の開発で言うなら、詳細設計書をきちんとかけるスキルが必要。
  • 出力されたスクリプトが意図通りかの検証は必要。今回の場合、PowerShellの知識や実際に動かしたときの脳内シミュレートは必須。一般の開発で言うなら、コードレビューのスキルが必要。

1つのAIだけで試すのでは心もとないので、次はBing AIに聞いてみることにする。


質問:マウスカーソルを50秒に1回、1ピクセル左右に揺らすPowershellスクリプトを書いてください。


[Bing] Powershellスクリプトでマウスカーソルを50秒に1回、1ピクセル左右に揺らすという要望ですね。

以下のコードを試してみてください。このコードは、無限ループでマウスカーソルの現在位置を取得し、それに1ピクセル分のランダムな値を加えて新しい位置に移動させます。50秒ごとに繰り返されます。

# マウスカーソルの位置を取得・設定する関数
function Get-MousePosition {
$signature = @'
[DllImport("user32.dll")]
public static extern bool GetCursorPos(out POINT lpPoint);

[StructLayout(LayoutKind.Sequential)]
public struct POINT {
public int X;
public int Y;
}
'@
$type = Add-Type -MemberDefinition $signature -Name "Win32Point" -Namespace Win32Functions -PassThru
$point = New-Object $type::POINT
$null = $type::GetCursorPos([ref]$point)
$point
}

function Set-MousePosition {
param(
[Parameter(Mandatory=$true)]
[int]$X,
[Parameter(Mandatory=$true)]
[int]$Y
)
$signature = @'
[DllImport("user32.dll")]
public static extern bool SetCursorPos(int X, int Y);
'@
$type = Add-Type -MemberDefinition $signature -Name "Win32Point" -Namespace Win32Functions -PassThru
$null = $type::SetCursorPos($X, $Y)
}

# 無限ループでマウスカーソルを揺らす
while ($true) {
# 現在のマウスカーソルの位置を取得
$pos = Get-MousePosition

# 1ピクセル分のランダムな値を生成
$randX = Get-Random -Minimum -1 -Maximum 2
$randY = Get-Random -Minimum -1 -Maximum 2

# 新しいマウスカーソルの位置を計算
$newX = $pos.X + $randX
$newY = $pos.Y + $randY

# マウスカーソルを移動させる
Set-MousePosition -X $newX -Y $newY

# 50秒待機する
Start-Sleep -Seconds 50
}


ChatGPTが出力したスクリプトと比べ、マウスの揺れ方にランダム性(左1ピクセル~右2ピクセル、上1ピクセル~下2ピクセル)があり、おそらく需要は満たせそうな気がする。さすがPowerShellのおひざ元のマイクロソフトのAIだ。

しかしながら、こちらの要望は「左右に揺らす」であり、上下に揺らしてしまっているのは蛇足だ。こちらの与えた要望を拡大解釈してしまっている。ただし、文字列生成系AIは、単に言われた事だけをするのではなく、「拡大解釈もする」ということは、創造的な観点からは良い評価が与えられることもある。

あと、インデントしてくれないのは気持ち悪い。人間が作ったスクリプトなら、コードレビューで突き返すことになるだろう。


以上が、フリーソフト作者に要望を伝えてプログラムを作ってもらうより、文字列生成系AIに要望を伝えてスクリプトを書いてもらうほうが良いのではないか?という実験を簡単に試してみた結果だ。

なお、今回利用しているChatGPTは3.5であり、最新のChatGPT-4に比べると幾分か能力が落ちていることは考慮する必要がある。

また、Bing AIはネットを閲覧しにいく機能もあるはずで、そう考えると両者を単純に比較するにはハンデをつけすぎているかもしれない。



目次 | ←前へ / 2023-06-19 22:51 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。


- 最近の更新 -



3126822 (+0074)[+1103]

Copyright© 2010-2024 INASOFT