AIにコードを書かせると時間だけでなく知見も楽に増えていくというお話

この記事の内容に合うサムネイルを作ってとChatGPTにお願いした結果

この記事を三行にまとめると

数時間後にはECSにデプロイするところまで行ってしまいましたよ
解答や解説を見ながら問題集を解くような感覚に近いかもしれません
ChatGPTに「この内容に合うサムネイルを作って」とお願いしたら
今日はAWSやらUnityについてあれこれ話しますが、技術的な話ではなくただの雑談です。



不肖ながらこのわたくし、プログラマになって15年以上経つのですが、今までろくにDockerを触ったことがありませんでした。理由としては使えなくても特に困らなかったことや、AIに今の開発環境や仕事で運用しているサービスの構成を伝えて「この環境をコンテナ化すべきか?」と質問したら「やるメリットはあるが無理にやる必要はない」という返答が来たので、いざやるとなったらDockerの使い方から覚えなきゃいけないから時間かかりそうだし、いつかやろうと思いつつずっと先延ばしにしてきました。AWSでサーバーを構成する際もECRやECSは使わず(使えず)、EC2と起動テンプレートを使ったAutoScalingで何とかやりくりしてきました。システム開発の際もローカルに環境は作らずに開発用のEC2サーバーを用意してそこで直接開発をしていました。

でも先日ふと「とりあえずローカルで開発できる環境だけでも作ってみようかな」と思いまして、Dockerを使ってみることにしたんですわ。そう思い立ったきっかけはこれと言ってないんですが、最近は開発の際にAIを頼るのが当たり前になっていたから「Dockerの使い方もAIに教えてもらいながらやればそこまで時間かけずに覚えられるかも」くらいに思ったってのが正直なところです。ほんでまあAIに「私はDockerを触ったことがありません。初心者の私でも分かるように使い方を教えてください」的な感じで教えを請うたんですね。

そしたらあんた、数時間後にはECSにコンテナをデプロイするところまで行ってしまいましたよ。AIマジハンパねえよ。

Dockerを使うにはdoker-compose.ymlとかDockerfileというファイルにあれこれ設定を書くのですが、その辺をAIさんが全部やってくれましてね。最初はローカルでDockerが使えるとこまでできればOKとか思ってたんですが数分もかからずあっちゅーまにできちゃったので、じゃあ勢いに乗ってECSってやつの使い方も覚えちゃおうと思いまして、AIさんにやり方を聞いたら「まずはECRにコンテナをプッシュしてください」「プッシュコマンドはこれです」「ECSでタスク定義をしてください」「環境変数の使い方はこうです」みたいに順序よくやり方を教えてくださいまして、途中エラーが出てちょっと詰まっちゃったりはしたのですが、そのエラーも「こんなエラーが出た」とAIさんに言えば原因と解決方法を提示してくれるので、言われた通りにがちゃがちゃやっていたらいつの間にかECSでテスト環境が動くようになっていました。

ぶっちゃけ僕はNginxも今まで使ったことがなくて、PHPを使ったウェブサービスの立ち上げはApacheの方が楽だからというその一点のみでずっとApacheを使ってきました。でもこの機会にNginxも使ってみようと思いまして、これまたAIに「今までApacheしか使ったことないんですが、これと同じ構成をNginxで実現したい」とお願いしたらDockerにNginxの設定もさささーっとAIさんが書いてくださいました。おかげで労せずにApacheからNginxへの乗り換えができました。



実際にコンテナを使ってECSで開発環境を立ち上げてみた感想なんですが、もっと早くやっておけば良かったと思いました。今までEC2+起動テンプレートでやっていためんどうな作業がほぼなくなりました。これに関しては自動化をしてなかった僕が悪いんですが、今まではソースコードをrsyncコマンドで更新して、新しいイメージを作成して、起動テンプレートのバージョンを更新して、古いバージョンを削除してってのを毎回手作業でやってました。

一応、さすがに今後もずっとこれじゃまずいなと思って、少し前にCodePipelineを使ってこの辺の流れをある程度自動でできるようにはしました。CodeCommitにソースコードをプッシュしたらCodeDeployとLambdaが起動して、ソースコードの更新、イメージの作成、起動テンプレートの更新の一連の処理を自動でやるようにしたんですが、ECSならCodeDeployを使わなくて済むし、イメージの作成や起動テンプレートのバージョン更新すらも不要なので断然楽だと思いました。ついでに言うとEC2の場合はログをCloudWatchに吐き出す設定なども自分であれこれやらないといけなかったんですが、例えばCakePHPでサービスを動かす場合、ECSならログの出力先を標準出力(php://stdout)にするだけでCloudWatchに書き込んでくれるのでこれまた余計な設定が不要です。

正直結構時間かかったのよ、CodeDeployやCloudWatchの設定。EC2にCodeDeployやCloudWatchのエージェントを入れて、設定ファイルを書いて……みたいなことを地道にやってやっとこさ動くようになりました。でもすぐにデプロイ失敗するしさあ……原因もよく分からないし、直ったと思ったらまた失敗するし……でももっと早くECSに乗り換えられていればあの時間をもっと別のことに使えていたわけですね。全くの無駄……とは言いませんが「Dockerよく分かんねえしなあ……」と敬遠していた自分をひっぱたきたいです。



とまあここまで読むと「Docker童貞だったわたしがAI様のおかげでたった一日で童貞を卒業してECSを使えるまでになった件」というなろう小説を書きたかっただけに見えるかもしれませんが、ここで言いたいのは、これからのエンジニアはめんどうなことはAIに丸投げして左うちわで行こうぜってことではなくて、AIを使えば短時間で効率よく知見がたまるぜってことです。

今回、僕はDockerやNginxについてほぼ名前くらいしか知らない状態からスタートしました。たぶんAIに頼らずに自分で調べながらこれらの使い方を覚えてECSに開発環境を作ろうと思ったら、数時間どころかおそらく数日かかってもできなかったでしょう。半月とか、もしかしたら一ヶ月くらいかかっていたかもしれない。それが一日足らずでできちゃうってのは時短どころの騒ぎじゃないですよね。

でも僕はただAIに全部やってもらっただけではなくて、書いてもらったdocker-compose.ymlの中を見ながら、何が書いてあるか分からないところは逐一AIに「これってどういうこと? 何のための設定? おいしいの?」と質問しました。AIは人間と違って、答えるのがめんどうだから適当にあしらうってことをしないので、全ての質問に懇切丁寧に答えてくれます。しかも知りたい情報にピンポイントで答えてくれるから、ググるよりも効率的に欲しい情報が手に入ります。もちろんいつでも常に正しい答えをくれるわけではなく時には間違った答えを堂々と言うこともありますが、少なくとも僕が何時間もかけて検索するより圧倒的に短時間で高精度な情報が手に入るのは間違いないです。

解答や解説を見ながら問題集を解くような感覚に近いかもしれません。分からないことは代わりにやってもらってそれでOKではなく、分からないところは解答例を出してもらって解説を聞きながら内容を理解する感じ。AIを使って開発するってのはそういう、より短時間で知識や技術を向上することができるメリットもあるのかなと今回改めて思いました。



AWSの話ではないんですが、先日Unityでゲームを作ってたときにC#のコードで「ここの処理ってもっと良い書き方ある?」とAIに質問したら、僕の知らない書き方を提示してきて「あ、こんな便利な関数あるんだ」となりました。これをGoogle検索で「ここの処理 もっと良い書き方」みたいに検索してもおそらく欲しい情報は手に入らないでしょう。teratailとかに質問すれば答えがもらえるかもしれませんが、それならAIに聞いた方が早いですからね。変にあおられたり「ここはそういう質問をするとこじゃない」みたいに言われる心配もないし。

つまりAIはコードを代わりに書いてくれる優秀な同僚であると同時にいろいろ教えてくれる先生でもあるということですね。自分から積極的に新しい知識を手に入れようとしなくてもAIにどんどんコードを書かせるだけで自然と知識が増えていくのだから、楽に経験値稼ぎができるようなもんです。ぶっちゃけ最近は自分でコードを書く時間が減っているのに技術力は逆に上がっているんじゃないかという気がしています。

エンジニアの仕事はAIに奪われるなんて言葉をよく聞きますが、僕としては「もうだめだぁ……おしまいだぁ……」と嘆く必要はなくて「AIと一緒に開発することで俺たちは簡単にもう一段上のステージに行けるぜ」くらいの気持ちでいても良いんじゃないかなと思いました。まる。






P.S.
上記のブログ記事をChatGPTに読ませて「この内容に合うサムネイルを作って」とお願いしたら上のようなサムネイルになりました。マジでもう何でもありだなww
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください