
こんにちは、natsukiです。最近私は、AIを利用して、Pythonでアプリを色々と作ってみています。今回の記事では、プログラムの知識が最低限しかなくても、このくらいのものが作れるという具体例として、自作したファイルリネームアプリを紹介します。ただし、本記事の目的は、アプリの作成過程そのものであり、作成したアプリの配布は行いません。AIによるアプリ作成については、下記記事もご参照ください。なお、AIの種類は、GoogleのサービスであるGeminiを使用します。この選択は、後述の「Gem」機能を、私が使い慣れているというところが大きいです。

主に写真などの画像ファイルを整理するときに、フォトなどでプレビューしながらだとリネームができずにイラつくことがありませんか? 例えば分かりやすいシチュエーションとして、ウインタブの記事を書く際、関係する写真やスクショをたくさん撮り、実際にはその中から適切なものだけを使います。で、使う画像を、ピックアップして自分で整理しやすいようにリネームするんですが、このとき、画像を細かく見ながらリネームしたい。そこで、画像をプレビューしながらリネームが可能なアプリを作ってみたというわけです。
また、このアプリをとりあげる1つの理由として、作成にかなりの手間がかかったということもあります。プログラミング言語を直接書かずに、指示だけでアプリを作成するのは、私の感覚だと、現時点ではこのくらいの複雑さが限界かなという目安でもあります。
1.作成したアプリ
作成したアプリを、見ていただきます。
ホーム画面と基本機能

ホーム画面です。このアプリは、このホーム画面1枚で機能が完結しています。大雑把な機能としては、左下が画像のリスト、右下が画像のプレビュースペースで、「新しいファイル名」にリネームするファイル名を打ち込みます。一通り、リネームしたいファイル名を入力したところで、2段目の、青い「ファイル名の変更を確定」ボタンを押すと、一気にリネームが反映されます。
1段目のボタンの機能

詳細を見ていきます。1段目のボタンは、次のような機能を持ちます。
・「ファイルを選択」:ファイルを選択します。同一フォルダのファイルが下にリストアップされます。
・「履歴からファイルを選択」:履歴を記録するようにしてあります。プルダウンで、履歴からファイル選択が可能です。
・「アプリを終了」:アプリを終了します。別に、右上の「×」で閉じても同じです。
2段目
ファイルのディレクトリを表示します。
3段目
上記の通り、「ファイル名の変更を確定」ボタンを押すと、リネームしたファイル名を反映します。
4段目

・「戻る」「進む」「上のフォルダへ移動」:リストのフォルダを移動します。
・「並び替え」:プルダウンで、「ファイル名」「ファイルの種類」「作成日時」「更新日時」によるソートを行います。繰り返し選択すると、降順と昇順が入れ替わります。
ファイルリストエリア


同じフォルダにあるファイルのリストです。画像以外のファイルも表示されます。基本的な機能として、「新しいファイル名」の部分でリネームを行います。この欄は、使いやすさへのこだわりが詰め込まれており、以下のような機能を持ちます。
・ファイルやフォルダには、通常のエクスプローラーと同様なアイコンを表示。
・「現在のファイル名」「新しいファイル名」どちらを選択していても、マウスでの選択の他、上下カーソルキーでも選択の移動が可能。
・「新しいファイル名」は、選択しただけで、即座に入力モードになる。
・「現在のファイル名」「新しいファイル名」「プレビュー欄」の幅は、ドラッグで柔軟に変更可能。
・最大のこだわりどころで、「新しいファイル名」が欄に収まらない場合は、プレビュー欄に自動拡張してファイル名全部を表示。
プレビュー欄
ファイルのプレビューを表示します。

画像は、マウスホイールでの拡大縮小、ドラッグによる移動に対応。

テキストファイルのプレビューも可能。
これで、ウインタブの記事の写真選びもはかどるというものです。
2.アプリ作成の下ごしらえ
アプリ作成を行うにあたって、実際に作ってみている経験から、事前に準備したり、気を付けておくとよいことを、まとめます。あくまで、私個人の試行錯誤の結果なので、一般的に通用するものかは分かりません。その辺は、それぞれでやってみながら自分なりのAIの扱い方を探っていくとよいかと思います。
使用言語はPythonのバージョン3.12.10

使用言語は、今や定番となったPythonを使っています。AIにPythonのコードを作成させ、コマンドプロンプトで指示と試行を繰り返しながら、出来上がったコードをアプリ化(コンパイル)するという手順で行います。
ただし、Pythonのバージョンは最新版ではなく、3.12.10です。これは、各種ライブラリやツールとの互換性を考慮したためです。以前の記事では、バージョン3.10.xxを使用していましたが、その後、セキュリティの都合などを考えて(バージョン3.10.xxは2026年10月頃サポート終了予定)変えています。また、3.12シリーズの最終版は3.12.13ですが、インストーラーの提供されている最終版は3.12.10なので、こちらを使っています。インストール時には、「Add python.exe to PATH」にチェックを入れておきましょう。
使ったAIはGemini
はじめに触れたように、私がアプリ作成に主に使っているのは、GoogleのGeminiです。
余談ですが、チャット形式で指示を行う場合、文章を打っている途中でも「Enter」を余計に押すと、途中でメッセージが送信されてしまい、中途半端にコードを書き出したりと大きなロスにつながりがちです。こういう複雑なやり取りの際は、書き込むメッセージをまずはテキストエディタに書いて、コピペでAIに指示を送る、という段取りを踏むことを強くお勧めします。
Geminiのモードは「3.5 Flash(あらゆる場面でサポート)」もしくは「3.1 Pro(高度な数学とコード)」の「思考レベル:拡張(複雑な問題を解決)」

記事執筆現在で、アプリを作る際、Geminiのモードは、必ず「3.5 Flash(あらゆる場面でサポート)」もしくは「3.1 Pro(高度な数学とコード)」の「思考レベル:拡張(複雑な問題を解決)」を選択します。「3.1 Flash-Lite(すばやく回答を得るのに最適)」や「思考レベル:標準(ほとんどの質問に最適)」では、まったく能力不足です。
GeminiのGem機能を利用

私は、Geminiの「Gem」機能を多用しています。これは、あらかじめ指示を記録して使いまわせるものと思えばいいでしょう。詳しくは、下記記事で紹介しているので、ご参照ください。

具体的に、私がアプリをつくるGemには、例えば下記のような指示を書き込んでいます。なおこの指示は適宜修正しているため、今回のアプリ作成時と全く同じではありません。というか、作っている途中にも思い付きで修正を加えていますし。例としてご参照ください。あるいは、Gemを使わない場合などに、指示の参考にもなるかと思います。
Pythonを使って、指示通りの機能を持つ、デスクトップアプリの作成手順を指示せよ。
# 作業概要
– Pythonを使用して、Windows上で動作するデスクトップアプリを作成する。
– 必要な作業は、一つ一つ区切って順番に分かりやすく指示すること。
# アプリ開発環境
– 使用言語は、Pythonのバージョン3.12.10であり、インストール済みである。
– Pythonのバージョンが3.12.10であることを前提として、”Pandas”,”Pillow”,”PyInstaller”,”Nuitka”,”OpenCV”,”Gemini API ライブラリ”などのライブラリやツールを使用する際は、バージョンによる相性に留意して、安定したバージョンを選択せよ。
– 互換性のため、特にPandasのバージョンは、できる限り2.xを使い、機能上3.xが必要な場合は確認を行う。- デスクトップアプリの動作環境は、一般的なWindows11 homeである。
– アプリ開発は、「デスクトップ」の「App_development」フォルダに仮想環境(venv)を構築して行え。
# コード生成規則
– 生成したコードは段落ごとに、どのような作業を行っているか分かるようにコメントをつけること。
– コードはクラスベースで作成し、ユーザーインターフェースのレイアウト定義とロジック(検索やデータ処理)を分離して記述せよ。
– 例外処理を適切に入れ、エラー発生時にはメッセージボックス(通知)を表示するようにせよ。
– 生成したコードが想定通り動作するか、実際に確認を行い改善を行うこと。
# コード出力時のチェック
– コード出力時には、出力前に以下のチェックを必ず行え。
– ここまでの開発経緯で出現した、あるいは出現しうるエラーの対応が、すべて行われているか。
– 特殊文字やシステムで使用する表記を間違って使用していないか。
– コード切れがないか。
– タグ等の閉じ忘れがないか。
– 変数名の矛盾や参照ミスがないか。
# アプリのコンパイル
– アプリのコンパイル方式は、フォルダ形式で構わない。ただし、Windowsセキュリティとの兼ね合い上問題なく、設定情報の保存などが必要無いなど、一つの実行ファイルにまとめても問題無ければ、1つにまとめよ。
– アプリのコンパイルには、アプリの特性、挙動の安定性、起動時間の短縮を総合的に考慮して、PyInstallerかNuitkaのより適切な方を選択せよ。
– デスクトップアプリの動作環境は、一般的なWindows10以降とする。
– 生成したアプリは、「デスクトップ」の「App_development」フォルダ内に出力する。
仮想環境で作業
上記Gemに書き込んであるので、このGemで作業すれば、自動的にAiが指示してくれますが、仮想環境でアプリ作成を行います。そのため、仮想環境を作るフォルダを作成しましょう。このとき、フォルダ名を日本語など2バイト文字にしてしまうと、アプリにエラーが出る原因となるので、フォルダ名は半角英数にします。
なお、仮想環境で作成するので、機能をテストする際、作成したコードをエクスプローラーから実行しようとしてもうまくいかないでしょう。コマンドプロンプトから「python xxx(コードの書かれたファイル名)」と指示して、機能テストを行います。
作業フォルダは、Windowsセキュリティの対象外とする

色々とコードを走らせるので、場合によってはWindowsセキュリティによって危険とみなされ、ときには問答無用で作成したものを削除されることがあります。作業フォルダは、Windowsセキュリティの対象外としておきましょう。
Windowsセキュリティ>ウイルスの脅威と防止>「ウイルスの脅威と防止の設定」の「設定の管理」>「除外」の「除外の追加または削除」>「除外の追加」
から設定可能です。
アプリのコンパイル方式は、基本的に「フォルダ形式」で
最終的にアプリ化(コンパイル)することで、Pythonなどをインストールしていない、まったく別の環境でも使用できます。このとき、1つの実行ファイルにする方法と、フォルダ内に必要なファイル類をあらかじめ展開したフォルダ形式(昔からフリーソフトなどをよく使ってきた身からすると「zip形式」の方がなじみがあるかもしれません)の2つの方法があります。
1つの実行ファイルに収めるのは、分かりやすくきれいなのですが、アプリの挙動によってWindowsセキュリティに危険とみなされる可能性が高く、警告だけでなく問答無用で削除されることもあります。また、設定情報など、いったんアプリを終了した後も情報を保持することが困難です。あまりお勧めできません。
そのため、基本的にアプリにコンパイルする際は「フォルダ形式」で行った方がいいでしょう。なお、たとえフォルダ形式でも、しかるべきところが作成したアプリではないので、初回起動時にはほぼ確実にWindowsセキュリティの警告は出ます。もちろん、これは無視して起動するわけです。
システムのエラーメッセージを伝えるのは、スクショでOK
何らかの不具合でエラーが出た場合は、そのエラーメッセージをAIに伝えれば、改善案を提示してくれます。これがコマンドプロンプトのエラーメッセージであればコピペするだけです。しかし、Windowsのシステムによるエラーメッセージは、一般に文字を選択できず、コピペができません。こういうときは、スクショ(「Win+Shift+S」など)をアップロードすればOKです。
アプリの仕様書は必ず作るべし
アプリを作成する場合は、AIとのやり取りとは別に、テキストファイルなどで、アプリ全体の仕様書を作り、AIとやり取りしつつ、適宜修正を加えていくとよいでしょう。このとき、AIに提示しやすいように、いわゆるマークダウン形式で記述すると使いやすいかと思います。
Aiと相談しながら、いろいろとアプリに機能をつけ足したり修正を重ねていくと、当然ながらコードがスパゲッティ化していきます。煮詰まったときには、いったんそれまでのコードを破棄して、すべての修正点を反映したアプリの機能一覧を提示して、コードを生成し直すのもの有効な手段です。
もちろん、作成側がアプリの全体像を把握しておくためにも有効です。
今回のアプリの、最終的な仕様書は、以下の通りになりました (以下の太字の部分をクリックしていただくと仕様書全体を見ることができます)。
【クリックで開閉】今回のアプリの、最終的な仕様書
次のようなデスクトップアプリを作成する。
# 目的
– 画像ファイルをプレビューしながら、ファイル名をリネームする。
– このアプリの目的は、複数ファイルのリネームを同時に行うことにある。従って、複数のリネームを編集、表示できなくてはならない。
# 起動方法
次の2種類の一般的な起動ができる。
– ファイルから右クリックでこのアプリを選択。
– このアプリから、対象ファイルを選択。
# アプリタイトル
– ウィンドウ枠には”Preview Rename”と表示。
– 出力時のファイル名も”Preview Rename”にする。
# インターフェース
次の条件を満たしたインターフェースを作成。
## 最上段
– 最上段左側に”ファイルを選択”ボタンを配置。このボタンを押して、リネームの対象となるファイルを選択する。なお、選択したファイルの履歴は100件までアプリ内に保存する。この履歴は、アプリを終了しても保持する。
– 最上段左から2番目に”履歴からファイルを選択”ボタンを配置。このボタンを押すと、今まで選択したファイルの履歴からディレクトリをプルダウンで選択できるように表示する。プルダウンメニューは、このボタンを押すまでは格納しておく。
– 最上段左から3番目に”アプリを終了”ボタンを配置。このボタンを押すと、アプリを終了する。なお、リネーム作業は下記の”変更を確定”ボタンで行うので、アプリの終了時にリネームを行うことはない。
## 2段目
– 2段目に選択したファイルのディレクトリを表示。
## 3段目
– 3段目に”ファイル名の変更を確定”ボタンを設置。このボタンのみ強調する。このボタンを押すと、”ファイル名を変更しますか?”のダイアログで”はい”、”いいえ”を選択して、”いいえ”ならなにもせず、”はい”なら、下記のリストにあるファイル名の変更を実行する。
## 4段目
– 4段目左端に”戻る”ボタンを配置。左から2番目に”進む”ボタンを配置。下記のリストのフォルダ移動の履歴に従って、フォルダの移動を行う。
– 4段目左から3番目に”▲上のフォルダへ移動”ボタンを設置。このボタンを押すと、下記のリストから、上のフォルダに移動する。
– フォルダ移動の履歴は50件まで記録する。この履歴はアプリ終了とともに破棄する。
– 何らかのアクセス制限のあるフォルダに移動できなかった場合は、そこでアプリがフリーズすることがないようにせよ。アクセス制限のあるフォルダに入れない場合は、”このフォルダには移動できません”と表示して、機能を復旧せよ。
– 4段目左から4番目に”並び替え”ボタンを設置。このボタンを押すと、”ファイル名”、”ファイルの種類”、”作成日時”、”更新日時”をプルダウンで表示。これらのいずれかを選ぶと、選んだ項目で下記のリストの表示を並び替える。同じ項目を選んだ場合は、降順と昇順を入れ替える。
## 最下段
– 最下段左に、選択したファイルを含め、選択したファイルと同じフォルダにあるファイルの一覧を表示。エクスプローラーの設定に関わらず、拡張子まで表示する。画像以外のすべてのファイルを表示する。
– 一覧には、フォルダかファイルかが視認できるように、通常のエクスプローラーのように、左側にアイコンをつける。ファイルやフォルダのアイコンは、一般的なエクスプローラーと同様に、フォルダはエクスプローラーのフォルダアイコン、ファイルは規定のアプリのアイコンを表示する。
– アイコンを描画する際は、ファイルやフォルダ名と重ならないようにして、わずかに隙間を開ける。
– 選択したファイルは反転表示する。ここで、クリックや上下キーによる選択するファイルの変更も可能。フォルダをダブルクリックした場合は、そのフォルダに移動。ファイルやフォルダが多い場合は、スクロール表示を可能にする。
– 上記のファイルリストの右側に、リネーム行う記入欄を表示。この記入欄は、ファイルの並び替えやスクロール表示に連動する。変更対象はファイル名のみで、拡張子の変更はできない。記入欄には、デフォルトでは現在のファイル名が入っている。
– 最下段の右側に、できるだけ大きくエリアを確保して、画像のプレビューを表示。
### プレビューエリアについての詳細
– 対象ファイルが画像ファイルの場合、エリアの枠に合わせて画像をプレビュー。マウスホイールによって拡大縮小。ドラッグで表示を移動。
– 画像の向きは、通常のエクスプローラーと同様の向き情報に基づき表示せよ。
– 対象ファイルが動画ファイルの場合は、軽量にサムネイルを取得できればサムネイルを表示。サムネイルの読み込みや生成の処理が手間取るなら、”ファイルのプレビューができません”と表示。動作の軽量さを優先せよ。
– ドキュメントファイルやテキストファイル、PDFファイルは、可能であればテキストをプレビュー。レイアウトなどは無視して、読み取ったテキストだけでよい。対象ファイル形式は、テキスト(拡張子”.txt”)、MSドキュメント(拡張子”.docx”もしくは”.doc”)、一太郎(拡張子は”.jtd”)、リッチテキスト(拡張子”.rtf”)、オープンドキュメント(拡張子”.odt”)、Googleドキュメント(拡張子”.gdoc”)、HTML(拡張子”.html”もしくは”.htm”)。Wordや一太郎などのページに分かれたドキュメントファイルは、はじめのページだけでよい。あくまでプレビューで、軽量さを重視するので、読み込みが重くなりそうな場合は、”ファイルのプレビューができません”と表示。動作の軽量さを優先せよ。
– テキストがプレビュー欄に収まらない場合は、プレビューを縦にスクロールできるようにする。
– テキストファイルを読み込む際は、文字コードを正しく認識せよ。
– 上記以外のファイルの場合は、”No Image”と表示。
– フォルダを選択した場合は、”フォルダ”と表示。
### ファイルのリストと、リネームを行う記入欄についての追加指示
– ファイルのリストのタイトルは”現在のファイル名”とする。
– ファイルのリストを縦にスクロールする際に、タイトルはスクロールせずに残す。
– ファイル名が長い場合には、横にもスクロールできるようにする。
– リネームを行う記入欄は、上記のリストの右側に、ファイルごとに表示する。この際、ファイルのリストとの縦の表示にズレが生じないように注意せよ。
– リネームを行う記入欄のタイトルは”新しいファイル名”とする。
– リネームを行う記入欄は、シングルクリックで入力待ち状態にせよ。
– リネームを行う記入欄の記入が長くなる場合は、入力待ち状態のみ、記入欄の表示を、そのまま右に拡張してプレビュー欄の上に重ねて表示する。この欄は、ファイルをスクロールしたら追随する。
– ファイルの選択は、ファイルリストからもリネームを行う記入欄からも可能とする。ファイルリストで別のファイル選択したら、リネームを行う記入欄もそのファイルに切り替える。リネームを行う記入欄で別のファイルを選択したら、ファイルの選択も切り替える。
– 選択ファイルの変更は、ファイルリストも、リネームを行う記入欄も、上下キーによる変更を可能とする。
– ファイルのリストを縦にスクロールする際は、マウスホイールによるスクロールも可能にせよ。
### インターフェースの幅の調整についての追加指示
– 画像プレビューエリアは、アプリのウィンドウ全体の拡大縮小に応じて拡大縮小させる。
– 画像プレビューエリアは、ファイルの選択を変えるたびに個別に拡大縮小はさせない。
– ファイルのリストとリネームを行う記入欄の表示幅を、タイトル部分境目のドラッグで変更できるようにする。
– リネームを行う記入欄と画像プレビューエリアの境目をドラッグして、画像プレビューエリアのサイズを調整できるようにせよ。
– ファイルやフォルダのアイコン表示欄の幅は、固定する。ただし、アイコンとファイル名が重なる、あるいは接することのないように、適切な間隔を空けよ。
ソースコードのダウンロードやコピーは、コードを書き終わるまで待て

Geminiの場合、ソースコードを書き終えていなくても、コードの右上にダウンロードやコピーのボタンが表示され、コピーやダウンロードが可能です。上の画像のように表示されていても、見切れている画面下で、コードを書き続けている途中だったりするわけです。当然、コードを書き終える前にコピーやダウンロードを行うと、コードが途中で途切れてしまいます。
コードを作成させた場合は、必ず一番下までスクロールして、コードを書き終えていることを確認してからコピーやダウンロードを行いましょう。
実に基本的な話ながら、私ははじめのうちこの仕様に気付かずに、かなり無駄な消耗をしました。
3.今回のアプリで苦労した点
現時点でのAIによるアプリ作成の限界点
私はこの他にも、同様な手法でいくつかアプリを作成していますが、複雑さにおいては、今回のアプリが現時点での限界点のように感じました。それは単純に、1カ所を改善すると、それまでうまくいっていた他の部分で不具合が出る、ということをかなり繰り返したからです。要するに、AIが全体のコードを矛盾なく扱うにしても、こちらの意図する細かい仕様を実装するにしても、このあたりに能力の限界を感じたということです。
アイコン表示は難しい!?
とても細かい点ですが、エクスプローラーのようにフォルダやアイコンを表示させるのが、案外苦労しました。特にフォルダアイコンなんて、簡単に表示できるだろうと思ったのですが、どうにもうまくいかず、最終的に、Windowsのシステムフォルダにあるアイコンファイルから専用アプリでフォルダ用アイコンだけを抽出して、「これを使え」と取り込ませるという荒業を行っています。
単なる黄色い四角で表示する、くらいなら余裕です。また、ファイルは既定のアプリのアイコンを表示するというのも、指示すればすぐにできました。ただしこれは、なぜか、他の修正を行った際にうまくいかなくなりがちな機能の一つでした。
テキストプレビュー機能は、文字コードの判別に注意
テキストプレビューは、単純な指示だけだと、文字コードの判別に失敗して文字化けすることがよくありました。また、この機能も、理由は不明ながら、ぜんぜん関係無いところの修正を行ったときに、それまでうまくいったのに不具合が出やすい機能でした。
リネーム用のファイル名記入欄は非常に苦労した
こだわりのリネーム用のファイル名記入欄は、複数の機能が詰まっているため、非常に苦労した部分です。以下、機能をあらためて列挙します。
・幅をドラッグで調整可能
・必要に応じて記入欄をプレビュー欄に重ねて拡張
・選択したら即座に記入できる状態に
・上下キーで選択移動が可能
それぞれの機能を思い通りの挙動にすることもさることながら、どれかがうまくいくと他の機能に支障をきたしたり、レイアウトが崩れたり、なぜか全然関係ない機能不具合をきたしたりと(元のファイル名との縦の幅が崩れるのと、アイコン表示が崩れるエラーが多かった)、すべてを同時に満足いく形で機能させるのにかなりてこずりました。
4.思うところ
私は、プログラマーではありません。それでもこれだけのものが作れるというのは、楽しいものです。ただ、今回のアプリは、自分だけが使うために作ったもので、配布するつもりはありません。もし、このアプリが欲しいという方がいらっしゃいましたら、記事を参考に各自でAIに作らせてみてください。Gemの指示と仕様書を読み込ませれば、とりあえずそれっぽい感じのものを作ってくれると思いますので、あとは細かい改善の指示出しとバグフィックスを繰り返すのみです。
配布しないのには、いくつか理由がありますが、最大のものは「なぜ動くか」を私自身が完全には理解していないからです。「使う側」が、仕組みはよくわからないけれど動くから使うというのは、ほとんどすべての工業製品に当てはまることなのでまあいいでしょう。一方で、「作る側」が、仕組みが分からないけれど作れてしまう、というのには、やはり昭和な人間の私としては、一抹の不気味さを感じてしまうのも正直なところです。
とは言っても、実際にやってみないと、その不気味な点やダメな点も、分かりません。実際のところ、私はアプリ作成に限らず、日ごろからいろいろとAIによる作業を試しているので、私なりに「AIのここがダメ」というのは、それはもう膨大に経験しています。とてもじゃないけど、体感として、「AIにマルナゲ」なんてする気になりません。このアプリ作成も、決してスムーズにいったわけではないことは、記事に書いた通りです。アプリを作成してみるというのは、AIの面白さだけでなく、現時点での限界や、使うことの問題点を実感するためにも、非常に良い経験なのではないかとも感じました。ぜひ、読者の皆様も、思いついたアプリを作ってみてください。
5.関係記事


ウインタブをきっかけに、海外通販で奇天烈なガジェットを漁ることにハマる。趣味は旅行(自然も史跡も)、アマチュアオーケストラなど。自分の知識欲も満たせるので、楽しんで記事を書いています。興味を持ったもの、面白いと思ったものを、読者の皆さんと共有できれば幸いです。▶ サイト紹介・ウインタブについて



コメント