唐突ですが、Wake on LAN(WoL)を利用したくなりました。
WoLは(事前準備・設定が必要ですが)ネットワーク経由で電源を投入する技術で、対象機器に対して特殊な通信(Magic Packet送信)を行うことで電源を投入することが可能になります。
ただ、この特殊な通信(Magic Packet送信)について仕様は公開されているものの、現実的にはWoL専用ツールを利用する必要があります。
そうなると、WoL専用ツールを実行するために他の起動中のPCにリモート接続・その上でツール実行・・・と手数が増えて煩雑に感じます。
もう少し軽率にWoLを利用できないか・・・と考えて、Webアプリ的なもので何とか出来ないか・・・と言うのが今回の発端です。
ChatGPTに頼ってみた
最近は様々なAIが話題ですが、個人的にAIは信頼に値しないもの・・・と言う偏見を抱いています。
別に食わずもの嫌いをしているわけではありませんが、ChatGPTが登場した直後くらいの時期に「JR総武線について教えて」と質問をし、回答として「東京から柏に向かう路線です」の旨が出たことで個人的なAIに対する信頼を失いました。(JR総武線は柏には行きません・・・)
・・・が、AIに限りませんがIT界隈は日進月歩な世界なので成長目覚ましく、気付けば様々な部分でAIが介入・間接的に利用する時代です。*1
いつまでも昔の記憶で「これだからAIは駄目なんだ!」と言うのは新しいものを受け入れずに拒否する老害思考に通ずるものがあるため、遅ればせながらAIに対する考え方を見直す必要があると考えていました。
また、随分と前からTogetterなどのまとめサイトで「新人に勉強含めコーディング頼んだらChatGPTで生成したコードを出してきやがった!」の旨で盛り上がることも見受けられるため、用途次第ではAIに丸投げで目的のものが作れるかも知れません。
少なくとも完全プライベートでローカル利用ならば、多少非効率なロジックのコードでも困るのは自分自身だけです。いや、もしかすると利用頻度の観点では「困る」と感じることさえ無いかも知れません。
そんな思惑もあり、今回は自分は何も考えずChatGPTに指示を出すだけ・一生懸命に考えるのはChatGPT(AI)と言う方向で、私の願望するWebアプリが作れるか試みます。
仕上がったもの

過程を書き出すと私の特性上無駄に文面が長くなるため、先に完成品のスクリーンショットを提示しておきます。
なお、完全プライベート用途なのでこのWebアプリのようなものの公開予定はありませんので悪しからず・・・。
フロントエンドはBootstrap、バックエンドはPython+Flaskで動作しています。
動作基盤はUbuntu 24.04 LTS Serverですが、Proxmox VEの仮想マシンとして動作しています。(=Proxmox VEの仮想マシンから物理PCにMagic Pakectを送れます。)*2
WebUIから管理対象PCを登録・ワンボタンでWoL(Magic Packet)送信が行え、簡易的に起動状態(ONLINE/OFFLINE)を確認できるような仕様です。
少しだけ凝った仕様として、状態確認についてWindows OSの場合のみpingではなくポートチェックで判定している点。
近年のWindows OSはデフォルトではICMP(ping)に反応しないため、Windows側の設定変更せずに済むポートチェックとしています。*3
その他、不要と思いつつ一括登録・登録内容のエクスポート機能も実装、オマケにダークモードへの切り替えまで対応させてる始末です。
・・・えぇ、これ全部ChatGPTに指示を出してコードを生成して貰い、私は何も手を加えていない状態です。
ChatGPTすっごーい!
利用モデルと要件定義
私がAI不信になった=黎明期に利用経験があると言うことからアカウントが存在すると言う理由だけでChatGPTを利用していますが、その頃から放置していたアカウントでもあるので、ChatGPTの無償版を利用しています。
今回コード生成を試みたタイミングだと無償版はGPT-5 Autoと呼ばれるモデルが使われているようなので、GPT-5 Autoを利用した・・・と言うことになります。
そんなChatGPTに与える要件定義ですが、最初は以下の要件だけです。
最初は単純な指示を出し、少しずつ必要な機能を実施して貰った形になります。
これが正しいのかどうかは不明ですし、ChatGPTを使いこなしてコードを生成されている方々がどうしているかは分かりませんが、少なくとも最初はシンプル・少しずつ機能強化と言う流れで私の希望を満たす構成になりました。
ChatGPTへの指示履歴
簡単ながら完成に至るまでの指示履歴を記録として残します。
最初は以下の指示を出して、WebUIからWoLを叩くものを生成して貰いました。
この時点でバックエンドでPython+Flaskを利用する構成を提案され、合わせてProxmox VE上でもLinux Bridgeなら仮想マシンから物理PCにMagic Packetが飛ぶとの回答が出ました。
その際に必要なパッケージリスト・導入方法・Flaskを動作させる環境の手順まで提示され、総武線は柏駅を経由する路線とポンコツ回答してた時とは違うなぁ・・・と、一種の感動のようなものを感じた次第です。
ただ、提示手順に従い環境を作り始めると「pip3 install flask」(Flask導入コマンド)でエラーが発生、ChatGPTにエラーメッセージを投げると「適切な導入方法ではないので代替方法で導入すること」の旨の回答・・・。
テメェで出した回答にも関わらず非推奨方式を提示する辺り、若干のポンコツ要素が残ってるなぁ・・・と評価が手のひらくるっくる状態です。*4
環境整備後、とりあえずWebUIでそれっぽいものが表示されるようになったので注文を少しずつ増加。
- WebUIで対象マシンの追加・削除が行えるようにしたい(最初に生成されたものは設定ファイル埋め込みだった)
- WebUIをもう少しリッチなデザインに、スマホ対応させたい
このタイミングでフロントエンドでBootstrap利用を提案され、その旨でコードが生成されました。
既に良い感じですが、少し欲を出して以下の注文をChatGPTに付けます。
指示通り生成してくれたものの、タイミングでWebUIに繋がらずエラーが発生する事象が発生。
複数行のエラーが出たため抜粋してエラーメッセージを送ると「エラーメッセージの全文を送れ!!!11」とAIからお叱りを受け、全文送ると即座に「pingコマンド入ってないやんけ!!!11」との回答・・・。
これは単に私がUbuntu Serverを最小限構成でインストールしているため、pingコマンドが含まれるiputils-pingパッケージが存在しないのが原因*5でした・・・。
あとは細かい機能を追加して頂いて・・・
- 登録PCの修正・更新が行えるようにしたい
- 状態確認を追加してほしい
- (状態確認を追加したので)自動更新の時間をWebUIで設定できるようにしたい
- 一括登録・エクスポート機能を追加してほしい
- MACアドレスをコロン・ハイフンの両方に対応してほしい
- 入力値のバリデーションチェックを追加
・・・と言う形で少しずつ機能を追加して、最終的に仕上がった感じです。
気を付けたいところ
現在のChatGPTは大変便利なもので、Flaskは全く未経験の身であるもののプライベート利用では満足行くものを生成してくれましたが、それでも「っぱダメやなぁ・・・」と思う部分はあります。
- 不適切な情報を提示する
- 例えばFlask導入周りで非推奨な手順を提示した点、追加質問で「非推奨です」と回答を出すくらいなら、最初から推奨される手順を提示して欲しいと思った次第です。
- 別の例として追加機能を実装してくれたのは喜ばしいのですが、生成されたコードにミスがあり正しく動作していない旨を問うと「あなたのファイルにミスがあります」と言い出し、こちらの責任と言い出した点は「AIは責任転嫁と言う行為も行える程度に賢いのか(白目)」と少々腹立たしい気分になります。
- 改修の過程で実装済み機能を黙って削除する
基本的には優秀ではありますし、もしかすると課金ユーザーが利用可能なモデルなら不満に思う部分が改善されているんかも知れませんが、個人的な感想としては「ツメが甘い部分がある」と言うところです。
ただ、ケチは付けるものの雑に出した指示でここまでWebアプリのようなものを生成してくれるのならば、「そんなもの」として人間側が注意して受け入れるのが無難な落としどころなのかも知れません。
・・・えぇ、私は最近ITエンジニアとしてのお勉強をおサボりしてると言うかITインフラ系エンジニアなので生業としては開発系は全くの専門外ではあるものの、Pythonに詳しくないのに(全く知らないわけではないもののほぼ無知に等しい状況下で)指示を出すだけでここまでのコードを出してくれるのなら、ケチを付けずに手放しで称賛するくらいが丁度いいのかも知れません。
*1:気付けば業務周りでも「Microsoft 365にバンドルしてるし、(ある程度は制御できるが)質問内容に顧客情報を含まないよう注意しつつ、Microsoft Copilotを活用するがヨロシ」と言われてる時代です。
*2:当初はリプレースにより余らせたRaspberry Pi 4 B(物理マシン)を使うことになるかと思いましたが、WebUIの外見確認と構築手順確認を目的にProxmox VEの仮想マシンで検証したところ、Proxmox VEのLinux Bridgeは仮想L2スイッチとして振舞ってくれるようでMagic Packetを通してくれました。
*3:対象ポートはデフォルト445番(SMB)ですが、任意設定を可能にしています。
*4:恐らくこんなことがあるから、ダメダメと言われるんでしょうね・・・。
*5:Ubuntu Serverを最小限構成でインストールすると、vi(vim)が含まれないのは認識していましたが、pingもアカンのか・・・。