以前いた会社で、管理者養成学校というセミナー合宿の指導力開発訓練というのに行かされたことがある。
URLがすごいなぁ。もう開き直っている。はい。URLの通り「地獄のキャンプ」。帰ってきたら、喉が「選挙でひとしきり演説しまくっていた政治家」のようになり、田中角栄のモノマネはすごく上手くなる。体は筋肉痛で帰りの新幹線で悶絶。研修の内容は、行ってのお楽しみというか、Youtubeでも動画があるので見ての通り。最悪なのが、規定日数で卒業できないと、単に延長で、卒業したことにはならない。常連?さんがいれば少しは過ごしやすいが、地獄は地獄。ただ、夜は飲み会があったりして、全部が地獄ではない。1㍉くらいの余暇はある。自分の時は20人で規定で卒業したのは、自分を含めて2人だった。ただ、今思えば、「男のディズニーランド」というか体験型ガチ青春だったかもしれない。あまり話すとネタバラシになるのでここまで。ただ、自分からは二度と行くことはないと思う(私費で定期的に行く、ガチ勢が存在するとか)が、行くことがあればまぁ、地獄を楽しむのはありかもしれない。二度目は辛いのでいやだ。
そこで習ったのが、人への指示の仕方。そう、「いついつまでに仕事をお願い』なんていう依頼の仕方をよくすると思うが、「いつまでに」しか仕事の情報が入っていない、さらに「お願い」という神頼み付き。依頼を受けた方は、神様じゃないので願いは叶えてくれない。こんないい加減な仕事の依頼で世間はどうにかまわっている。ここで、純粋優秀なAIの登場である。。。もちろん、AIはさらにやってくれない。しかし、かなり具体的に指示をすればやってくれる。
閑話休題
AIにプログラムを作らせてみる。ただ、実行環境や利便性を考えるとまずは、プログラム言語を決めておくべき。自分は、Mac,Windows,Linux,ラズパイなどが周りにあるので、マルチプラットフォームのもので、開発環境とかの構築をあまりしたくないので、Goを選択した。GoのバイナリをWindows,Mac,Linuxに入れて仕舞えば、簡単にバイナリができる。もちろん、クソ遅いRaspberry Pi Zero向けのバイナリをM1 Macで高速にコンパイルすることも可能。つまり、マルチバイナリサポートで、一番高速なデバイスでコンパイルをすればいい。
Goの入手元は、以下。
Windowsの場合は、msiをクリックして、インストール。 Macの場合は、brew install golangでOK。
Linuxの場合は、tarを/usr/local以下に展開し、goコマンドのパスを通しておく。
curl -OL https://go.dev/dl/go1.24.4.linux-amd64.tar.gz
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.24.4.linux-amd64.tar.gz
rm go1.24.4.linux-amd64.tar.gz
cat << 'EOF' > /etc/profile.d/go.sh
export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin
EOF
chmod +x /etc/profile.d/go.sh
source /etc/profile.d/go.sh
これで、マルチプラットフォームで動作するバイナリの開発環境ができた。さて、Goという言語。知りません。本やWebで勉強するか? いや、してもいいけど、しなくてもいいんです。AIに聞けばいい。以後、ChatGPTに聞いてみた。またプロンプトの応答は割愛。すべて一発で動くものを出してくれるので。
プロンプト
Go言語でHello Worldと表示するプログラムソースを記載してください。
これだけ。
しかし、出てきたプログラムソースをどうしたらいいのか?それもAIに続けて聞けばいい。
プロンプト
このプログラムソースを実行する方法を教えてください。
はいできました。ただ、いちいち他のマシンにGoをインストールをするのが面倒なので、バイナリの作り方を聞く。
プロンプト
このプログラムソースをWindows 11(手持ちの他のパソコンのOS)で実行できるようなバイナリプログラムを作ってください。
はいできました。できたソースをWindows 11のパソコンにコピーをして、端末(Terminal)アプリから実行すればいい。
このように、Goという言語を知らなくてもプログラムの要件がかければ、書いてくれるし、実行や導入方法を教えてくれる。次に少し難しいプログラムを書かせてみる。
プロンプト
Rest APIのテストプログラムを作成したい。
実行環境
サーバ:Ubuntu 22.04:Goがインストールされている。開発環境と実行環境を兼ねている
クライアント:MAC OS:Rest APIを叩くクライアント
サーバには、Go言語でRest APIを受け付けるサーバアプリケーションを立ててほしい
利用するネットワークポートは、任意にしていできるようにしたいがデフォルトではTCP28080で、http接続
クライアントは、特にOSは規定しないが、クライアント側では、curlコマンドでRest APIを叩きたい。
Rest APIを実行すると、サーバの現在日時が表示されるようにしたい。
goで記載し、Goのバイナリを作成し、サーバ側での立ち上げ方法、クライアントからのアクセス方法をエンドツーエンドで記載してほしい。
プロンプトの結果を全部割愛するとイメージがつきにくいのでここだけかいつまんで記載する。
AIから得られた結果
サーバ側作業
コピペで終わるように修正したが、このページをコピペするのが目的ではなく、AIの出力からコピペすることが重要!
cat << "EOF" > datetime_server.go
package main
import (
“fmt”
“log”
"net/http”
“os”
“time”
)
func handler(w http.ResponseWriter, r *http.Request) {
currentTime := time.Now().Format(time.RFC3339)
fmt.Fprintf(w, "Current server time: %s\n", currentTime)
}
func main() {
port := os.Getenv(“PORT”)
if port == "” {
port = “28080”
}
http.HandleFunc("/time", handler)
addr := fmt.Sprintf(":%s", port)
log.Printf("Starting server on port %s...\n", port)
if err := http.ListenAndServe(addr, nil); err != nil {
log.Fatalf("Server failed: %s", err)
}
}
EOF
go build -o datetime_server datetime_server.go
./datetime_server
クライアント
もう一台のパソコンのターミナルから
curl http://<サーバのIPアドレス>:28080/time
とするとサーバの日時が表示される。
ここまで記載して、初めてどうにか作ってくれる。なので、「いついつまでに仕事をお願い」レベルでは人間同様、AIも全く動いてくれない。
初めてGoという言語に触れた人もいるかもしれないが、言語についての知識ゼロでも簡単に作成から動作までやってくれる。ある意味、もう「プログラマは要らない」という話もあるが、実はそうかもしれない。ただし、AIに頼るだけではなく、実際は、コードが正しいかどうか、脆弱性はないかはケアする必要がある。理由は、プロンプトの中にセキュリティに対してケアをしろなどと一切書かれていないので。
よって、「プログラマは要らない」のというのは語弊があって、「プログラマの仕事の仕方が変わってくる」という言い方が正しいのではないか?
今回は、Goで書いたが、C++で記載してもらうこともできる。一から聞き直してもいいが、完成品を書き直してもらうことも可能。
プロンプト
このプログラムソースをC++で書き直して、バイナリの作成方法、サーバ側での立ち上げ方法、クライアントからのアクセス方法をエンドツーエンドで記載してほしい。
とすればいい。プロンプトを進めていくと、AIの言った通りやっても動かないケースが出てくる。要件が足らないから起きる。実行結果とエラーや事象を貼り付けて動く状態にもっていく。
また、AIが
systemd に登録して自動起動にすることも可能です(ご希望あればスクリプト提供します)。
と言ってくることがある。systemd?なんだ?という人は、素直に
プロンプト
systemdとは何ですか?導入するとどうなるのでしょうか?導入方法を教えてください。
と聞けばいいだけ。
以上のように、簡単にAIにプログラムを書かせる方法を書いてみたが、人間側として必要な情報は、プログラムの知識よりか、周りの周辺知識(言語とか環境)の情報がすごく重要で、その情報量の多さでAIに書かせるためのプロンプトの数と質が違ってくる。単純に会議などの議事録をAIにまとめさせるなどはよくやっているが、情報自体が、外から来ているものなので、周辺知識はいらない。来た情報の整理をさせているのでプログラムを作ってもらう時のような、こっちが持ち込まなければならない情報の質にかかっている。
AIの使い方は、まちまちだが、プログラムを書かせる場合は、とにかく要件定義が最初にある程度しっかりすることが重要。最初はある程度でいい。発想レベルでも時間がかかるだけ。発想すらないよりずっとマシ。それにしても、AIの出現で自分自身の仕事の仕方が変わった。周りというか周辺環境全体はそれほど変わってはいないような気がするが。まだ、AIでやるより人間でやるほうが質が高いという雰囲気がある。機械掘りよりやはり手堀りのほうがいい?別に1+1の結果を出すのに、物理マシンだろうが、仮想マシン、クラウドインスタンス、コンテナ、どれも同じなんだが。
最後に管理者養成学校の余談
管理者養成学校ではAIの使い方は教えてくれません。スマホも没収で、電話は食堂にあるカードしか使えない公衆電話しかない(テレホンカードを忘れずに)。得られる特技ちすては、第一興商のカラオケで歌える曲が数曲増えるくらい。(校歌を覚えさせらるんだが、DAMカラオケには全曲収録されていたはず。)
まぁ、人生の中で、一度だけ何かのタイミングで社費で行けるのであれば、怖いもの見たさでいくのはありかもしれない。ただ、行って単純に「男のディズニーランド」で終わってしまったら失敗かもしれないが。