見出し画像

AIにお願いして自分の欲しいアプリを作る【プログラミング初心者がAIを活用】AITuber制作過程の副産物

AIプログラミングツール「Cursor」を使う

おはようございます。
今朝、リファクタリングと言う言葉を覚えた、ろてじんです。
最近は作業中に「ラクをしたい」と思うと、すぐにAIプログラミングツール「Cursor」を使って自分でアプリを作っています。簡易的なものであれば、探すより作る方が早いのですね。
簡単な「Cursor」の操作方法は次のようになります。(画像参照)
「右側の赤い矢印」の部分からプロンプト指示して、AIの返答のあと「緑の矢印」の/editでコードの作成・修正をAIがやってくれます。このプロセスを自然言語で繰り返していく形になります。

Cursorの操作画面

今回は、AITuberの「YouTubeのコメントにリアクションさせる配信テスト」を行っていた際、コメントを毎回、手で打ち込むのが面倒になり右手だけでコピペを繰り返し適当にコメントをしたいなと思ったのがキッカケです。
(作成後に「Microsoft Power Automate」でExcelにコメント作成したものを自動でコピペを繰り返せば全自動だと気付きましたが。仕方ないですね。)
プログラムは約10分で完成しましたが、せっかくなのでAIとの対話や制作過程を記録として残しておきます。プログラムコードがわからなくても、簡単なものは作れるということを参考にしてもらえればと思います。
ちなみに、AITuberのプログラムも殆どAIに作ってもらってます。


まず、生成物はこんな感じです。

ランダムに5つのコメントをピックアップ

せっかくなのでアプリ説明を「Cursor」にしてもらいました。

これは、パソコン画面に小さなウィンドウを表示するアプリです。このウィンドウには、次のような機能があります。

- 画面の上部には「5つのコメントを抽出」と書かれたボタンがあります。
- このボタンをクリックすると、プログラムは「comment.txt」という名前のテキストファイルを見に行きます。このファイルにはたくさんのコメントが書かれていて、プログラムはその中からランダムに5つ選びます。
- 選ばれた5つのコメントは、画面に新しいボタンとして並べて表示されます。それぞれのボタンには、1つのコメントが書かれています。
- これらのコメントが書かれたボタンをクリックすると、そのコメントがパソコンのクリップボードにコピーされます。クリップボードにコピーすると、他の場所に貼り付けることができます。
- もし「comment.txt」ファイルがなかったり、中にコメントが足りなかったりすると、エラーが表示されて、何が間違っているのか教えてくれます。

このアプリは、ボタンをクリックするだけで、コメントをコピーして、すぐに使うことができます。

AIは上記のような説明をしてくれました。
ようするに、用意してあるコメント文を5つピックして、その中から好きな文章をクリップボードにコピーするアプリです。

せっかく作ったので数日は使ってみようと思いました。


以下は私とAIの会話に流れになります

私の指示は太字にしてあります。見たい人だけどうぞ。
ちなみに会話ごとに動作確認をして指示しています。

これの右側、AIとの会話


Pythonでプログラムを作りたい
GUIはシンプルで、ボタン付き
ボタンを押すとcomment.txtからランダムに1行のコメントを抽出して
GUI上に表示され、そのテキスト文章がコピーされるようにしたい

PythonでGUIアプリケーションを作成する場合、tkinterライブラリを使用するのが一般的です。以下は、指定された要件を満たす簡単なプログラムの例です。

import tkinter as tk
from tkinter import messagebox
import random

def copy_to_clipboard(text):
    root.clipboard_clear()
    root.clipboard_append(text)
    messagebox.showinfo("コピー", "テキストをクリップボードにコピーしました")

def display_random_comment():
    try:
        with open('comment.txt', 'r', encoding='utf-8') as file:
            lines = file.readlines()
            if lines:
                random_comment = random.choice(lines).strip()
                comment_label.config(text=random_comment)
                copy_to_clipboard(random_comment)
            else:
                messagebox.showerror("エラー", "comment.txtが空です")
    except FileNotFoundError:
        messagebox.showerror("エラー", "comment.txtが見つかりません")

root = tk.Tk()
root.title("ランダムコメント表示")

comment_label = tk.Label(root, text="", width=80, height=10)
comment_label.pack(pady=20)

copy_button = tk.Button(root, text="コメントを表示してコピー", command=display_random_comment)
copy_button.pack(pady=10)

root.mainloop()

このコードは、以下の機能を持つGUIアプリケーションを作成します:

- comment.txt からランダムに1行を読み込みます。
- 読み込んだコメントをGUI上に表示します。
- 表示されたテキストをクリップボードにコピーします。

comment.txt ファイルは、プログラムと同じディレクトリに配置してください。また、各行に1つのコメントが含まれている必要があります。

最後のポップアップは不必要だな


了解しました。最後のポップアップを表示しないようにコードを変更します。

import tkinter as tk
import random

def copy_to_clipboard(text):
    root.clipboard_clear()
    root.clipboard_append(text)

def display_random_comment():
    try:
        with open('comment.txt', 'r', encoding='utf-8') as file:
            lines = file.readlines()
            if lines:
                random_comment = random.choice(lines).strip()
                comment_label.config(text=random_comment)
                copy_to_clipboard(random_comment)
            else:
                tk.messagebox.showerror("エラー", "comment.txtが空です")
    except FileNotFoundError:
        tk.messagebox.showerror("エラー", "comment.txtが見つかりません")

root = tk.Tk()
root.title("ランダムコメント表示")

comment_label = tk.Label(root, text="", width=80, height=10)
comment_label.pack(pady=20)

copy_button = tk.Button(root, text="コメントを表示してコピー", command=display_random_comment)
copy_button.pack(pady=10)

root.mainloop()

この変更により、テキストをクリップボードにコピーした後に情報ポップアップは表示されなくなります。

GUIの大きさをもう少し小さくしたい


GUIの大きさを変更するには、tk.Tk() オブジェクトの geometry メソッドを使用してウィンドウのサイズを設定します。以下のコードでは、ウィンドウのサイズを小さく設定しています。

import tkinter as tk
import random

def copy_to_clipboard(text):
    root.clipboard_clear()
    root.clipboard_append(text)

def display_random_comment():
    try:
        with open('comment.txt', 'r', encoding='utf-8') as file:
            lines = file.readlines()
            if lines:
                random_comment = random.choice(lines).strip()
                comment_label.config(text=random_comment)
                copy_to_clipboard(random_comment)
            else:
                tk.messagebox.showerror("エラー", "comment.txtが空です")
    except FileNotFoundError:
        tk.messagebox.showerror("エラー", "comment.txtが見つかりません")

root = tk.Tk()
root.title("ランダムコメント表示")

# ウィンドウのサイズを設定
root.geometry('400x200')  # 幅400ピクセル、高さ200ピクセルに設定

comment_label = tk.Label(root, text="", width=40, height=4)
comment_label.pack(pady=20)

copy_button = tk.Button(root, text="コメントを表示してコピー", command=display_random_comment)
copy_button.pack(pady=10)

root.mainloop()

root.geometry('400x200') の部分でウィンドウの幅と高さをピクセル単位で設定しています。必要に応じてこれらの値を調整してください。また、Label ウィジェットの width と height オプションもそれぞれのサイズに合わせて調整しています。

ランダムに5つのコメントを抽出ボタンを作り、
気に入ったコメントをクリックするとコピーできるようにしたいな


その機能を実装するためには、いくつかの変更を加える必要があります。以下のステップに従ってください。

1. ランダムに5つのコメントを抽出する関数を作成します。
2. これらのコメントを表示するためのラベルを作成します。
3. 各コメントがクリックされたときにコピーされるようにバインドします。

以下は、これらの変更を含む更新されたコードです。

import tkinter as tk
import random

def copy_to_clipboard(text):
    root.clipboard_clear()
    root.clipboard_append(text)

def display_comments():
    try:
        with open('comment.txt', 'r', encoding='utf-8') as file:
            lines = file.readlines()
            if lines:
                random_comments = random.sample(lines, min(5, len(lines)))
                for i, comment in enumerate(random_comments):
                    comment = comment.strip()
                    labels[i].config(text=comment)
                    labels[i].bind("<Button-1>", lambda e, text=comment: copy_to_clipboard(text))
            else:
                tk.messagebox.showerror("エラー", "comment.txtが空です")
    except FileNotFoundError:
        tk.messagebox.showerror("エラー", "comment.txtが見つかりません")
    except ValueError:
        tk.messagebox.showerror("エラー", "コメントが足りません")

root = tk.Tk()
root.title("ランダムコメント表示")

# Set the window size
root.geometry('400x300')  # Adjust the size as needed

labels = [tk.Label(root, text="", width=40, height=2) for _ in range(5)]
for label in labels:
    label.pack(pady=4)

display_button = tk.Button(root, text="5つのコメントを表示", command=display_comments)
display_button.pack(pady=10)

root.mainloop()

このコードは、5つのコメントを表示し、ユーザーがそのいずれかをクリックすると、そのコメントがクリップボードにコピーされるようにします。random.sample 関数は、重複なしでランダムな要素をリストから選択します。min(5, len(lines)) は、ファイル内の行数が5未満の場合にエラーを防ぐために使用されます。

5つのコメントを表示されたのは良いんだけど
コピーしたのか挙動がわかりにくいから、コメントもボタン形式にして欲しい


コメントをボタン形式にして、クリックしたときにコピーされるようにするには、Label ウィジェットの代わりに Button ウィジェットを使用します。以下のコードは、そのように変更されたものです。

import tkinter as tk
import random

def copy_to_clipboard(text, button):
    root.clipboard_clear()
    root.clipboard_append(text)
    button.config(relief=tk.SUNKEN)  # ボタンを押された状態に見せる

def display_comments():
    # 既存のボタンの状態をリセット
    for button in buttons:
        button.config(text="", relief=tk.RAISED)
    
    try:
        with open('comment.txt', 'r', encoding='utf-8') as file:
            lines = file.readlines()
            if lines:
                random_comments = random.sample(lines, min(5, len(lines)))
                for i, comment in enumerate(random_comments):
                    comment = comment.strip()
                    buttons[i].config(text=comment, command=lambda c=comment, b=buttons[i]: copy_to_clipboard(c, b))
            else:
                tk.messagebox.showerror("エラー", "comment.txtが空です")
    except FileNotFoundError:
        tk.messagebox.showerror("エラー", "comment.txtが見つかりません")
    except ValueError:
        tk.messagebox.showerror("エラー", "コメントが足りません")

root = tk.Tk()
root.title("ランダムコメント表示")

# Set the window size
root.geometry('400x300')  # Adjust the size as needed

buttons = [tk.Button(root, text="", width=40, height=2) for _ in range(5)]
for button in buttons:
    button.pack(pady=4)

display_button = tk.Button(root, text="5つのコメントを表示", command=display_comments)
display_button.pack(pady=10)

root.mainloop()

このコードでは、各コメントがボタンとして表示され、そのボタンをクリックするとコメントがクリップボードにコピーされます。また、クリックされたボタンは凹んだ状態 (SUNKEN) になり、ユーザーに対して視覚的なフィードバックを提供します。ボタンのテキストは、command パラメータを使用して copy_to_clipboard 関数に渡されます。

全体のGUIを600×300にして
コメントのボタンの大きさを横を500にしようか
あと5つのコメントを表示って文字を「5つのコメントを抽出」にして


以下の変更をmain.pyに適用します。

1. ウィンドウのサイズを600x300に変更します。
2. コメントボタンの幅を500に設定します。
3. 「5つのコメントを表示」ボタンのテキストを「5つのコメントを抽出」に変更します。

import tkinter as tk
import random

def copy_to_clipboard(text, button):
    root.clipboard_clear()
    root.clipboard_append(text)
    button.config(relief=tk.SUNKEN)  # ボタンを押された状態に見せる

def display_comments():
    # 既存のボタンの状態をリセット
    for button in buttons:
        button.config(text="", relief=tk.RAISED)
    
    try:
        with open('comment.txt', 'r', encoding='utf-8') as file:
            lines = file.readlines()
            if lines:
                random_comments = random.sample(lines, min(5, len(lines)))
                for i, comment in enumerate(random_comments):
                    comment = comment.strip()
                    buttons[i].config(text=comment, command=lambda c=comment, b=buttons[i]: copy_to_clipboard(c, b))
            else:
                tk.messagebox.showerror("エラー", "comment.txtが空です")
    except FileNotFoundError:
        tk.messagebox.showerror("エラー", "comment.txtが見つかりません")
    except ValueError:
        tk.messagebox.showerror("エラー", "コメントが足りません")

root = tk.Tk()
root.title("ランダムコメント表示")

# Set the window size
root.geometry('600x300')  # Adjust the size as needed

buttons = [tk.Button(root, text="", width=62, height=2) for _ in range(5)]  # width in characters
for button in buttons:
    button.pack(pady=4)

display_button = tk.Button(root, text="5つのコメントを抽出", command=display_comments)
display_button.pack(pady=10)

root.mainloop()

ボタンの幅は文字単位で指定されているため、ピクセル単位で正確な幅を設定するには、ボタンを含むフレームを作成し、そのフレームの幅をピクセル単位で設定する必要があります。ただし、上記のコードでは、文字単位で幅を設定しており、おおよその幅になります。実際のピクセル幅は使用しているフォントやその他のスタイル設定によって異なるため、必要に応じて調整してください。

OKです ではこの最終的なプログラムはどんな仕様になっているか わかりやすい言葉で説明して下さい


このプログラムは、以下のような仕様を持つGUIアプリケーションです。

- タイトルが「ランダムコメント表示」のウィンドウを持ち、サイズは幅600ピクセル、高さ300ピクセルです。
- ウィンドウ内には、「5つのコメントを抽出」と書かれたボタンがあります。
- このボタンをクリックすると、comment.txt ファイルからランダムに5つのコメントを選び出し、それぞれのコメントを別々のボタンとして表示します。これらのコメントボタンはウィンドウ内に縦に並んでいます。
- 各コメントボタンの幅は約500ピクセル相当(文字単位で62文字分)で、高さは2行分です。
- コメントボタンのいずれかをクリックすると、そのボタンに表示されているテキストがクリップボードにコピーされます。また、クリックされたボタンは凹んで表示され、ユーザーに対して視覚的なフィードバックを提供します。
- comment.txt ファイルが存在しない場合や、ファイル内にコメントが足りない場合は、エラーメッセージが表示されます。

このアプリケーションは、ユーザーがランダムなコメントを簡単に見つけてクリップボードにコピーするためのものです。例えば、SNSの投稿やメッセージの返信などで、すぐに使えるコメントを探している場合に便利です。

初心者でもわかるような言葉で説明して


このプログラムは、パソコン画面に小さなウィンドウを表示するアプリです。このウィンドウには、次のような機能があります。

- 画面の上部には「5つのコメントを抽出」と書かれたボタンがあります。
- このボタンをクリックすると、プログラムは「comment.txt」という名前のテキストファイルを見に行きます。このファイルにはたくさんのコメントが書かれていて、プログラムはその中からランダムに5つ選びます。
- 選ばれた5つのコメントは、画面に新しいボタンとして並べて表示されます。それぞれのボタンには、1つのコメントが書かれています。
- これらのコメントが書かれたボタンをクリックすると、そのコメントがパソコンのクリップボードにコピーされます。クリップボードにコピーすると、他の場所に貼り付けることができます。
- もし「comment.txt」ファイルがなかったり、中にコメントが足りなかったりすると、エラーが表示されて、何が間違っているのか教えてくれます。

このアプリは、ボタンをクリックするだけで、コメントをコピーして、すぐに使うことができます。


以上になります。
引き続き、AI生活をエンジョイしましょう!!!

この記事が参加している募集

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