目次
■キャリアとスキルアップ
2023.09.13 2024.03.01 約5分
この記事は、2023年7月発売『ソフトウェア開発にChatGPTは使えるのか?――設計からコーディングまでAIの限界を探る』著者の小野 氏による connpass勉強会 を再編集し、記事化したものです。 |
遊び心から始まったChatGPTの探求が、ここまで開発効率の向上へ繋がるなんて……。そんな驚きの体験をエンジニアのみなさんと共有させてください。ChatGPTはどのように開発に革命をもたらすのか実体験を交えながらお伝えします。
小野 哲と申します。開発歴40年のプログラマーです。若かりし頃、起業の道を選び夢を追い求めましたが、途中で妻を亡くし、事業も倒産。50歳を超えてはじめたアルバイトや森での小屋暮らし。人生は思いもよらない方向に進むことがあります。
|
そんなある日、アルバイト先でシステム構築の許可をもらいます。これをきっかけに社内プログラマーとしての最盛期を迎えることになりました。
2023年7月には自身の経験と洞察を込めて『ソフトウェア開発にChatGPTは使えるのか?――設計からコーディングまでAIの限界を探る』を出版しました。
— 本書の特徴とメリット —
|
よろしければ、ぜひご覧になってください。
社内に唯一あったシステムは MS Access で作成されたシンプルな在庫管理システムだけ。手始めにヤフオクの自動出品システムから着手しました。手動では1日10品目が限界でしたが、自動出品プログラムを作成することで、1日120件の出品が可能になりました。
ある日、現場から「スマートフォンで商品情報をチェックできるようにしたい」と要望があり、本格的な開発がスタートしました。
このプロジェクトでは、MDB(Microsoft Access データベース)からMySQLへのデータ移行を行い、クラウド上にデータベースを用意して、ローカルのデータベースとクラウドのデータを同期するプログラムを作成しました。また、Dockerを使用してアプリケーションをコンテナ化し、さまざまな処理を効率的に実行するためのバッチ処理をワークフローで構築しました。途中で、VBA(Visual Basic for Applications)での開発に限界を感じ、Pythonへ移行することに。ほとんどの資産をPython化しました。
最終的にこのプロジェクトは巨大なシステムを完成させました。500本以上のタスクが含まれており、コードステップとして10万行を超えるプログラムが動作しています。
システムの拡張を進めていく過程で、持続可能性の低い大きな問題が明らかになりました。
「もし私に何かあったら……」
「このしょうもないおっさんのせいでシステムがストップしてしまう……」。
このプロジェクトの大きな問題は、能力も体力もない1人のおっさんの設計と実装で、もう追いつけないところまで来てしまったこと。根性さえあれば何でもできると、そう考えていた時期もありました。しかし、残念ながら私は強いエンジニアではないですし、体力も順調に落ちています。では、外注化や採用をすれば良いのか? そんな予算はないのが、現実の壁。
そんなときに私の目の前に降臨したのが、そう。ChatGPTです。
これまでツンデレ女子になってもらい、怒られプレイを楽しむだけだったChatGPT。「これが開発に使えたら……」私は、実験してみることにしました。
結果は驚きの連続。
ChatGPTは、次から次へと的確な答えを与えてくれるのです。それ以来、開発というテーマを軸にChatGPTの会話に夢中になり、寝不足が続く日々。
|
ChatGPTを使うことでこのまま1人でも開発を続ける自信に繋がり、無理ゲー領域にも希望を見出すことができました。まさに羽根が生えたような気分でした。
いわずもがな、つよつよエンジニアの採用は無理ゲーです。しかし、ChatGPTの力を十分に発揮できる未経験エンジニアを育成すれば、システムの運用保守、拡張も可能になるのではないかという希望が見えてきました。それに加え、可能な範囲を積極的にオープンソース化していくことで(例えば、GitHubとDockerを駆使しオープンソースで公開)客観的な保守性が向上し、ChatGPTとの相乗効果も高まるというわけです。
何よりもいざというときの外注化もスムーズに行われるはずなので、システムの持続可能性が格段に向上するということです。これで私なきあとのシステムの持続性問題も解決の希望が見えました。
|
つよつよエンジニアは放っておいても、つよつよです。多分彼らはChatGPTがなくても、つよつよだし、ChatGPTを駆使すれば更につよつよになるでしょう。ChatGPTの素晴らしいところは、ポテンシャル採用の業界未経験エンジニアでも、現役から離れ気味の私のようなおっちゃんエンジニアでも「最低限のスキル」があり、ChatGPTをうまく活用すれば、何とかなるということです。
最低限のスキル
|
ここからは、試行錯誤しながらChatGPTを使って得た実践的な学びの共有です。ぜひ開発に役立ててみてください。
ChatGPTで品質の良いコード生成をするためには、テストコードを付加することが重要です。テストコードを使うことで、コードの品質を保証し、エラーを修正するサイクルを通すことができます。
右の図:結果、しっかりとコードが生成された
かなり常識的で文句のつけようがないロジックです。実際にこのとおりテストコードを実行してみると、きちんとテストも通っています。仮にChatGPTがいい加減なコードを生成したとしても、この作業を行えば、一発で明らかにすることができます。
問題が明確になっている場合は、的確な質問ができますが、現実的には質問したいことが曖昧であることも多いですよね。そこで開発者にとって、汎用的に使えるプロンプトを用意しました。
重要な部分は反転してあります。このプロンプトで、ユーザーの漠然とした問いや悩みでも、ChatGPTはいくつかのアイディアを提示してくれます。
さらに有効に使うためには、Custom instructions の使用をおすすめします。
*Custom instructions(カスタムインストラクション)
ChatGPTの応答の際に考慮すべき設定や条件をあらかじめ設定できる機能
|
開発をするなかで質問が明確になっていないこともありますよね。こんなエンジニアの設定で実際に曖昧な質問をしてみましょう。
|
クラサバで作られている昔の会員管理のシステムをWeb化したいと思ってますが、どうしたらよいかわかりません。
まず、現在の状況をもう少し詳しく理解させていただけますか?以下のような情報があると、より具体的な提案ができると思います。
このように、ユーザーの状況を判断するための質問を投げてきました。そこで彼はこう答えます。
Web化することで、どこでも管理ができることが重要です。チームはわたしひとりでスキルは素人同然です。既存のシステムはVBAです。予算はわたしの工数しかありません。
ChatGPTは、ユーザーとの対話をしながら、具体的な解決策を提案していきます。
「これで本当に大丈夫かな?」と心配になりましたが、実行してみると……。なんと、無事にWebページが動作しました。
結論:一発回答を期待せず対話を繰り返そう
何回も会話し、会話の流れの中で最適解に近づいていくこと。つまり試行錯誤を楽しんでください。 |
この呪文を唱えることで、いくらでもコードを生成してくれます。いくつか事例をお見せします。
「他のコードも提示してください」と聞いてみると、forループで実現するコードが生成されました。
さらに「他のコードも提示してください」と聞いてみると、今後はreduce関数のコードが生成されました。
しかし、ここでエラーが!!
与えられた文字列が空だった場合にエラーが起きます。そこでテストで表示されたエラー内容を質問に貼り付けてみましょう。
「Code Interpreter」でも同じようなことができるのでは……と興味が湧きませんか?そこで「さらにテストコードを実行してください。(黄色枠)」をプロンプトに付け加えて実行してみます。
すると右の図のように、生成されたコードを表示してから、なんと、テストコードが自動的に実行され、結果を教えてくれました。ChatGPTのUI上でテストまで完結してくれるので、自分でPython環境を用意する必要がないんです。これは凄い!
さらにテスト結果の詳細を見たい場合は、白い枠の「Show work」をクリックすると、このように簡単に結果を見ることができます。
先程出てきたforループで逆順する関数をリファクタリングしてみましょう。
まずは、リファクタリングしないコード、ユニットコードを貼り付け、テストコードが通るように制約をかけます。ChatGPTからの返答はどうなるでしょうか。
結果は最初に提示された配列スライスを使ったコードになりました。やはりこれが最適だと判断した結果だと思います。実際に1行で処理が書けるっていうのは、リファクタリングした甲斐があるというものですね。
結論:ChatGPTとテストコードは相性が最高!
|
ここからは視聴者からの質問をまとめました。
― ChatGPTでの大規模開発は可能でしょうか?
|
― 今後、仮に大規模開発ができるようになると、エンジニアは淘汰されていきますか?
|
― ChatGPT導入における運用ポリシー策定のポイントはありますか?
|
― ChatGPTを活用し未経験に活躍してもらう場合、どこまで教育すべきでしょうか?
|
― GPT-4の優れている点や制限回避の方法を教えてください。
|
|
― 実務未経験者がChatGPTを活用し、Webアプリ開発する方法は?
|
― ChatGPTの関連情報をどのようにキャッチアップしていますか?
|
― ChatGPTは有料版を使うべきでしょうか?
|
― 設計・実装・テスト、ChatGPTと相性が良いのは?
|
*TVDO(テスト駆動開発オートメーション)・・・TVDO(テスト駆動開発オートメーション)は、ソフトウェア開発プロセスの一部として使用されるテスト手法の一つ
― 今後、ChatGPTで実装してみたいことはありますか?
|
― ChatGPTで生成したコードが流出する可能性はありますか?
|
― UI生成のコツはありますか?
|