Forkwell Press | フォークウェルプレス

SHARE

目次

目次

SHARE

ソフトウェア設計とメンテナンス

ChatGPT応用編「根性&無理ゲー領域への革命」小野 哲

ソフトウェア開発にChatGPTは使えるのか?
この記事は、2023年7月発売ソフトウェア開発にChatGPTは使えるのか?――設計からコーディングまでAIの限界を探る著者の小野 氏による connpass勉強会 を再編集し、記事化したものです。

遊び心から始まったChatGPTの探求が、ここまで開発効率の向上へ繋がるなんて……。そんな驚きの体験をエンジニアのみなさんと共有させてください。ChatGPTはどのように開発に革命をもたらすのか実体験を交えながらお伝えします。

プログラマーとしての経歴

小野 哲と申します。開発歴40年のプログラマーです。若かりし頃、起業の道を選び夢を追い求めましたが、途中で妻を亡くし、事業も倒産。50歳を超えてはじめたアルバイトや森での小屋暮らし。人生は思いもよらない方向に進むことがあります。

  • 結婚後、地元のソフトウェア開発会社に就職し、リアルタイムOSとC言語の仕事に携わる
  • 28歳で起業し、Linuxを中心としたシステムインテグレーションの会社を設立
  • 10億円の資金調達に成功し上場を目指すが、妻の突然の死とCEOの失踪により会社は破綻
  • 子育てと執筆をしながら生計を立て、50歳を超えてアルバイトを始める
  • アルバイト先でデータ入力の合間にシステム構築を行い、社内プログラマーとして活躍

そんなある日、アルバイト先でシステム構築の許可をもらいます。これをきっかけに社内プログラマーとしての最盛期を迎えることになりました。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲
2023年7月には自身の経験と洞察を込めて『ソフトウェア開発にChatGPTは使えるのか?――設計からコーディングまでAIの限界を探る』を出版しました。

— 本書の特徴とメリット —

  • プロンプトエンジニアリングや画像生成AIには触れず、開発にChatGPTを用いることに特化
  • ChatGPTの進化を理解し、開発現場に取り入れることができる

よろしければ、ぜひご覧になってください。

【波乱万丈の幕開け】プログラマーとして返り咲く

社内に唯一あったシステムは MS Access で作成されたシンプルな在庫管理システムだけ。手始めにヤフオクの自動出品システムから着手しました。手動では1日10品目が限界でしたが、自動出品プログラムを作成することで、1日120件の出品が可能になりました。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

本格的な開発!巨大システム爆誕へ

ある日、現場から「スマートフォンで商品情報をチェックできるようにしたい」と要望があり、本格的な開発がスタートしました。

このプロジェクトでは、MDB(Microsoft Access データベース)からMySQLへのデータ移行を行い、クラウド上にデータベースを用意して、ローカルのデータベースとクラウドのデータを同期するプログラムを作成しました。また、Dockerを使用してアプリケーションをコンテナ化し、さまざまな処理を効率的に実行するためのバッチ処理をワークフローで構築しました。途中で、VBA(Visual Basic for Applications)での開発に限界を感じ、Pythonへ移行することに。ほとんどの資産をPython化しました。

最終的にこのプロジェクトは巨大なシステムを完成させました。500本以上のタスクが含まれており、コードステップとして10万行を超えるプログラムが動作しています。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

もう戻れない…メンテナンス問題に頭を抱える

システムの拡張を進めていく過程で、持続可能性の低い大きな問題が明らかになりました。

「もし私に何かあったら……」
「このしょうもないおっさんのせいでシステムがストップしてしまう……」

このプロジェクトの大きな問題は、能力も体力もない1人のおっさんの設計と実装で、もう追いつけないところまで来てしまったこと。根性さえあれば何でもできると、そう考えていた時期もありました。しかし、残念ながら私は強いエンジニアではないですし、体力も順調に落ちています。では、外注化や採用をすれば良いのか? そんな予算はないのが、現実の壁。

そんなときに私の目の前に降臨したのが、そう。ChatGPTです。

ChatGPTの革命:脱・根性&無理ゲー領域

これまでツンデレ女子になってもらい、怒られプレイを楽しむだけだったChatGPT。「これが開発に使えたら……」私は、実験してみることにしました。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

結果は驚きの連続。

ChatGPTは、次から次へと的確な答えを与えてくれるのです。それ以来、開発というテーマを軸にChatGPTの会話に夢中になり、寝不足が続く日々。

  • 脱・根性領域:設計アイディア、コード自動生成、リファクタリングなどの解決
  • 脱・無理ゲー領域:つよつよエンジニア採用 → 未経験の育成

ChatGPTを使うことでこのまま1人でも開発を続ける自信に繋がり、無理ゲー領域にも希望を見出すことができました。まさに羽根が生えたような気分でした。

つよつよエンジニアの採用は無理ゲー

いわずもがな、つよつよエンジニアの採用は無理ゲーです。しかし、ChatGPTの力を十分に発揮できる未経験エンジニアを育成すれば、システムの運用保守、拡張も可能になるのではないかという希望が見えてきました。それに加え、可能な範囲を積極的にオープンソース化していくことで(例えば、GitHubとDockerを駆使しオープンソースで公開)客観的な保守性が向上し、ChatGPTとの相乗効果も高まるというわけです。

何よりもいざというときの外注化もスムーズに行われるはずなので、システムの持続可能性が格段に向上するということです。これで私なきあとのシステムの持続性問題も解決の希望が見えました。

  • ChatGPTを使った開発で開発効率が倍以上、向上
  • 未経験者の育成やシステムの保守性の向上が可能になった
  • 脱根性領域・脱無理ゲー領域

最低限のスキルがあれば、なんとかなる

つよつよエンジニアは放っておいても、つよつよです。多分彼らはChatGPTがなくても、つよつよだし、ChatGPTを駆使すれば更につよつよになるでしょう。ChatGPTの素晴らしいところは、ポテンシャル採用の業界未経験エンジニアでも、現役から離れ気味の私のようなおっちゃんエンジニアでも「最低限のスキル」があり、ChatGPTをうまく活用すれば、何とかなるということです。

最低限のスキル

  • GitHub
  • VSコードそれに類するエディター
  • 何かしらの言語ですねを自由に使えること

ChatGPTでコード生成するコツ1:テストコード

ここからは、試行錯誤しながらChatGPTを使って得た実践的な学びの共有です。ぜひ開発に役立ててみてください。

ChatGPTで品質の良いコード生成をするためには、テストコードを付加することが重要です。テストコードを使うことで、コードの品質を保証し、エラーを修正するサイクルを通すことができます。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲左の図:2パターンのテストコードを用意 

右の図:結果、しっかりとコードが生成された

かなり常識的で文句のつけようがないロジックです。実際にこのとおりテストコードを実行してみると、きちんとテストも通っています。仮にChatGPTがいい加減なコードを生成したとしても、この作業を行えば、一発で明らかにすることができます。

ChatGPTでコード生成するコツ2:対話を大事にする

問題が明確になっている場合は、的確な質問ができますが、現実的には質問したいことが曖昧であることも多いですよね。そこで開発者にとって、汎用的に使えるプロンプトを用意しました。

ChatGPTで対話をしながら問題解決するための呪文

重要な部分は反転してあります。このプロンプトで、ユーザーの漠然とした問いや悩みでも、ChatGPTはいくつかのアイディアを提示してくれます。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

さらに有効に使うためには、Custom instructions の使用をおすすめします。

*Custom instructions(カスタムインストラクション)

ChatGPTの応答の際に考慮すべき設定や条件をあらかじめ設定できる機能

  • 開発者にとって汎用的に使えるプロンプトを用意することが重要
  • ChatGPTのカスタムインストラクションを使うことで、より有効に利用できる

曖昧な質問も、対話しながら解決に導いてくれる

開発をするなかで質問が明確になっていないこともありますよね。こんなエンジニアの設定で実際に曖昧な質問をしてみましょう。

  • 1人でアプリケーションをWeb化しなければならず、不安でいっぱい
  • ちょっと古いタイプの会社に所属
  • 知っている言語はVBAのみ
  • Pythonに興味があるが、ちょっといじる程度

クラサバで作られている昔の会員管理のシステムをWeb化したいと思ってますが、どうしたらよいかわかりません。

まず、現在の状況をもう少し詳しく理解させていただけますか?以下のような情報があると、より具体的な提案ができると思います。

このように、ユーザーの状況を判断するための質問を投げてきました。そこで彼はこう答えます。

Web化することで、どこでも管理ができることが重要です。チームはわたしひとりでスキルは素人同然です。既存のシステムはVBAです。予算はわたしの工数しかありません。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

ChatGPTは、ユーザーとの対話をしながら、具体的な解決策を提案していきます。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲
「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲
「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲
「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

「これで本当に大丈夫かな?」と心配になりましたが、実行してみると……。なんと、無事にWebページが動作しました。

結論:一発回答を期待せず対話を繰り返そう

何回も会話し、会話の流れの中で最適解に近づいていくこと。つまり試行錯誤を楽しんでください。

ChatGPTでコード生成するコツ3:魔法の呪文を唱える

この呪文を唱えることで、いくらでもコードを生成してくれます。いくつか事例をお見せします。

「他のコードも提示してください」と聞いてみると、forループで実現するコードが生成されました。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲
さらに「他のコードも提示してください」と聞いてみると、reverse関数とjoin関数を使うコードが生成されました。無事にテストも通りました。
「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

さらに「他のコードも提示してください」と聞いてみると、今後はreduce関数のコードが生成されました。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

しかし、ここでエラーが!!

与えられた文字列が空だった場合にエラーが起きます。そこでテストで表示されたエラー内容を質問に貼り付けてみましょう。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲すると今度はテストコードを修正した結果が、提示されました。再度テストをすると、きちんとテストが通りました。いかがでしょうか。このように、テストコードがあれば無限にリトライを繰り返すことができ、しかもテストが通るまでChatGPTはあれこれと考えてくれるのです。

ChatGPT「Code Interpreter」を使った応用技の紹介

「Code Interpreter」でも同じようなことができるのでは……と興味が湧きませんか?そこで「さらにテストコードを実行してください。(黄色枠)」をプロンプトに付け加えて実行してみます。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

すると右の図のように、生成されたコードを表示してから、なんと、テストコードが自動的に実行され、結果を教えてくれました。ChatGPTのUI上でテストまで完結してくれるので、自分でPython環境を用意する必要がないんです。これは凄い!

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

さらにテスト結果の詳細を見たい場合は、白い枠の「Show work」をクリックすると、このように簡単に結果を見ることができます。

ChatGPTでリファクタリングしてみると

先程出てきたforループで逆順する関数をリファクタリングしてみましょう。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

まずは、リファクタリングしないコード、ユニットコードを貼り付け、テストコードが通るように制約をかけます。ChatGPTからの返答はどうなるでしょうか。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

結果は最初に提示された配列スライスを使ったコードになりました。やはりこれが最適だと判断した結果だと思います。実際に1行で処理が書けるっていうのは、リファクタリングした甲斐があるというものですね。

「ChatGPTとエンジニアの未来:根性&無理ゲー領域への革命」小野 哲

結論:ChatGPTとテストコードは相性が最高!

  • 開発効率が上がり、テストコードも容易に作成できる
  • ChatGPTとテストコードは相性が良い

ここからは視聴者からの質問をまとめました。

Q:ChatGPTの大規模開発における利用可能性

― ChatGPTでの大規模開発は可能でしょうか?

  • 大規模開発には向いていない
  • 分解していくことでChatGPTを活用できる可能性がある
  • 逆に言えば大規模開発ができるようになると、エンジニアは不要になる

Q:ChatGPTでエンジニアの将来はどうなるのか

― 今後、仮に大規模開発ができるようになると、エンジニアは淘汰されていきますか?

  • エンジニアが完全に淘汰されることはない
  • 新しいエンジニアリングの分野が出てくる可能性がある

Q:ChatGPTの運用ポリシー策定

― ChatGPT導入における運用ポリシー策定のポイントはありますか?

  • ポリシーの策定は最低限のルールから始める
  • 気が付いたら徐々に追加していく
  • 情報リテラシーに対する教育も重要

― ChatGPTを活用し未経験に活躍してもらう場合、どこまで教育すべきでしょうか?

  • リテラシー教育が重要。専門書を参考にすることが推奨されている
  • ポリシー策定と同様、最初からガチガチに固めず、ゆるくはじめるのがおすすめ

Q:GPT-3.5との比較

― GPT-4の優れている点や制限回避の方法を教えてください。

  • GPT-3.5でも自動生成コードの読みやすさには満足
  • GPT-4の自然な会話力は、GPT-3.5よりも優れていると感じている
  • GPTの情報収集はTwitterや論文の読解、Webサイトの情報を活用している
  • GPT-4の制限回避のためには、制限時間中に休憩を取ることで対応している
  • 制限が25回から50回になり利便性は飛躍的に向上
  • ただし「Code Interpreter」を使用する場合、50回では厳しいと感じる事が多い

Q:Bing・Birdとの比較

  • コード生成の精度はChatGPTの方が実用的
  • ただしChatGPTのような2021年の壁がないので実験してみることは有効

Q:ChatGPTの活用方法

― 実務未経験者がChatGPTを活用し、Webアプリ開発する方法は?

  • Webアプリケーションの開発には、APIやフロントエンドの知識が必要
  • それぞれの部分を分割して学習することが有効
  • ChatGPTは、未経験者がWebアプリケーション開発を学ぶ際に役立つツール

― ChatGPTの関連情報をどのようにキャッチアップしていますか?

  • キャッチアップに最も有効だったのはX(Twitter)
  • 海外の論文もおすすめ

― ChatGPTは有料版を使うべきでしょうか?

  • エンジニアなら有料版を使うべき
  • 有料版でも十分に元が取れる機能性の高さがある

― 設計・実装・テスト、ChatGPTと相性が良いのは?

  • 実装・テストと相性が良い
  • TVDOとChatGPTを組み合わせると開発効率が爆上がり
  • テストコードの生成は簡単だが、自分で追加していくことが重要
  • ChatGPTの生成コードはセキュリティ上のリスクがあるため注意が必要

*TVDO(テスト駆動開発オートメーション)・・・TVDO(テスト駆動開発オートメーション)は、ソフトウェア開発プロセスの一部として使用されるテスト手法の一つ

― 今後、ChatGPTで実装してみたいことはありますか?

  • 人間の考えることを代替してもらう仕組み
  • 音声認識や文字起こしを組み合わせたアプリケーションの制作
  • Code Interpreter をローカルで実装できるよう自前のシステムの制作

Q:ChatGPTのセキュリティ上の問題

― ChatGPTで生成したコードが流出する可能性はありますか?

  • ChatGPTに「このコードはセキュリティ上の問題があるか」と質問する
  • ChatGPTが生成したコードも問い立てをし検証する必要性はある
  • 社内でコードのセキュリティチェックできる人間がいればベスト

― UI生成のコツはありますか?

  • 唯一ChatGPTの弱い部分だと考えている
  • 現状、新しいUIフレームワークに対応することは難しい
  • メジャーではないライブラリやフレームワークを利用する場合、公式ドキュメントやサンプルプログラムを参考にすることが重要
  • ChatGPTのAPIが進化しマイナーな技術情報や最新情報への対応を期待

アーカイブ動画はこちら

ForlkwellPress ロゴ画像

フォークウェルプレス編集部

Follow

記事一覧へ

この記事はフォークウェル編集部が監修しています。編集部では、企画・執筆・編集・入稿の全工程をチェックしています。

「ソフトウェア開発にChatGPTは使えるのか?」著者 / フリーランス 無駄に長い開発歴40年のどこにでもいる普通の老プログラマー。子育て卒業後、零細企業の社内プログラマーとしてフリー契約し禄を食む。セルフビルドした2畳の小屋で2年ほど森の生活をしていたが、H.D.ソロー超えを果たしたので現在は市中で静かに暮す。好きなものはNetflix