(
The Overflow ブログ より)
ロボットはあなたの仕事を奪いに来るか?この問いは
以前にも聞いた ことがあるだろう。しかし2022年、AIがほとんどのプログラマーの生活にますます溶け込んでくるようになるにつれ、この問いはより切迫したものに感じられる。
近年、AIは爆発的な進歩を遂げており、複雑で繊細な問題を解決する能力が私たちの能力をはるかに超えるのは、時間の問題(あるいはデータの問題)だと思われるかもしれない。
囲碁 、
ポーカー 、
スタークラフトII など、かつて人間がチャンピオンだった多くの分野で、AIは人間を打ち負かした。コーディングもそうなのだろうか?
GitHub Copilotのようなプログラムはすでに広く採用されており、2020年以降は
AIに対する組織全体の投資が爆発的に増え 、開発者(デベロッパー)の知的自動化ツールへのアクセスや理解が拡大すると予想される。このような環境の中で、AIによって書かれたコードは、人間によって書かれたコードに取って代わるのだろうか?
新たな調査結果が、すでにそうなっていることを示唆している。2021年6月のプログラム開始以来、
GitHubで新たに書かれたJavaとPythonのコードの35%以上が、そのCopilot AIによって提案 されている。つまり、GitHubは7300万人以上のデベロッパーと2億以上のリポジトリ(約2800万の公開リポジトリを含む)を持つ、地球上で最大のソースコードホストである。
2021年6月のプログラム開始以来、GitHubで書かれた新しいJavaとPythonのコードの35%以上 は、Copilot AIによって提案されている
もちろん、ツールやサービスのコーディングは、ゲームをするのとは根本的に異なる。ゲームは決まったルールに従って展開されるが、コードベースは流動的なものであり、新しいテクノロジーの出現や新しいビジネスニーズへの対応に合わせて進化する必要がある。また、Copilotによって人間のプログラマーに対する需要が35%減少したかというとそうではなく、ソフトウェアデベロッパーに対する需要は依然として高く、
2021年までに2倍に増加する と言われている。
しかし、世界最大の開発プラットフォームで最も人気のある言語の3分の1以上の新しいコードをAIが書いているとなると、AIコーディング革命はすぐそこまで来ているのではなく、すでに到来しているといえる。この記事では、どのようなAIプログラムが存在し、デベロッパーがどのようにそれらを使用しているかを探る。また、現在の限界と将来の可能性についても見ていく。そして、これらのツールがデベロッパーやソフトウェア業界全体に及ぼす影響について、紐解いていこうと思う。
AIコーディングツールはどのようなものか?
現在販売されているAIコーディングツールは、機能別に3種類に分類される
Copilotのようなバグ探しツールやAIペアプログラマーは人気もあり、強力になってきているが、MISIMのような新しいテクノロジーは、ほとんどのデベロッパーの仕事に汎用されるにはまだ道程が残っている。これらのツールの中身を見てみよう。
エラーを自動的に検出するツール
AI のプログラミングへの応用で最も成功しているのは、自動エラー検出ツールだ。これらのプログラムは、コードのセキュリティと品質を向上させるだけでなく、デベロッパーが潜在的なエラーや脆弱性についてコードをスキャンする必要性をなくし、最終製品を向上させるビジネスロジックを書くことに時間とエネルギーを集中させることを可能にするものだ。例えば、
Amazon CodeGuru は、
AWS BugBust の参加者が「最もコストのかかるコード行」(リソースを消耗し、技術的負債を増大させるバグ)を見つけるのを支援する。
2020年に
Snykに買収されたDeepCode は、Python、JavaScript、Javaのコードを分析し、改善するAIベースのコードレビューツールだ。250,000のルールによって導かれるDeepCodeは、非公開および公開GitHubリポジトリを読み、問題の修正、互換性の維持、パフォーマンスの向上のために何をすべきかを正確に教えてくれる。共同設立者のBoris Paskalevは、DeepCodeをプログラマーのためのGrammarlyと呼んでいる。「私たちは、Grammarlyが書き言葉を理解するのと同じように、ソフトウェアのコードを理解する独自のプラットフォームを持っている」と、彼は
TechCrunch に語った。
他のプログラムは、潜在的なセキュリティリスクを探すためにコードをスキャンすることに重点を置いている。GitHubの
GitGuardian は、ソースコードをスキャンして、パスワード、暗号化キー、APIキーなどの機密データをリアルタイムで検出する。このような比較的単純なミスによるソフトウェアの障害は、米国だけでも
年間2兆円以上の損失 を生み出している。
プログラマー向けの、基本的なコードを生成したり、コードをオートコンプリートしたりできるツール
自動コード生成ツールやAIペアプログラマーは、別のカテゴリーに分類される。それは、独立してコードを生成したり、人間のプログラマーのコードをオートコンプリートしたりできるツールだ。例えば、Facebookの
Aroma は、AIを搭載したコード間検索・推薦ツールで、大規模なコードベースからインサイトを抽出しやすくすることで、デベロッパーの時間を節約することがでる。
一方、
PolyCoder と呼ばれる新しいオープンソースのAIコードジェネレーターは、コードファイルだけでなく、
Stack Overflow上の質問と回答を読むことによっても 学習させることができる。この集積は、実際の人々がどのようにソフトウェアを使用し、デバッグし、最適化するかを明らかにする自然言語の豊富な情報源であると、その作成者は説明している。
α コード
より研究的なプロジェクトの最前線には、トランスフォーマーベースの言語モデルを使用してコードを生成するDeepMindのAlphaCodeがある。AlphaCodeは、「批判的思考、論理、アルゴリズム、コーディング、自然言語理解の組み合わせを必要とする斬新な問題を解決すること」によって、コーディングコンテストでほとんどの人間と同等のパフォーマンスを発揮し、
参加者の上位54%に入賞している という。
DeepMindのチーフサイエンティストOriol Vinyals氏は
The Verge に対し、AlphaCodeは、現在人間しか取り組むことができないコーディング問題を解決できる柔軟で自律的なAIを作るという同社の目標の最新製品であると述べている。
AlphaCodeはいくつかの素晴らしい結果を残しているが、まだAIに任せてよい状況ではない。「AlphaCodeの現在の能力は、今のところ競技用プログラミングの領域でしか適用できない。」と
The Verge は報告しているが、「そのスキルは、プログラミングをより身近にし、いつの日か完全に自動化する未来のツール作成への扉を開くものだ。」と述べている。
GPT-3
OpenAIの
GPT-3 は、これまで作られた中で
最大の言語モデル だ。1,750億個のパラメータを持ち、単語からギタータブ、コンピュータコードまで、驚くほど人間に近いテキストをオンデマンドで生成することができる。このAPIは、ほとんど誰でも使えるほどシンプルでありながら、AI/MLチームの生産性を向上させるのに十分な柔軟性とパワーを持つように設計されている。
OpenAIによると 、リリースから9ヶ月以内に300以上のアプリケーションがGPT-3を使用し、1日あたり45億語を生成している。
2020年になると、OpenAIとエンドユーザーの開発者は、GPT-3が文章だけでなくコードもオートコンプリートできることに気がついた。GPT-3は、プログラマーがコードを投稿したページなど、ウェブからかき集めた何十億もの文書で学習していたため、英語だけでなく、Python、Java、C+、R、HTMLなどのパターンも学習していたのだ。この気づきがきっかけで、OpenAIはコードを書くAI:Copilotを作ることに興味を持ち、GitHubを使って作成し、2021年の夏に初めてリリースした。
コパイロット
多くのデベロッパーにAIペアプログラミングのゴールドスタンダードについて尋ねると、
Copilot を挙げる人が多いだろう。公開されているコードで学習したCopilotは、コード行や関数全体をエディタ上で直接提案する。ユーザーは、代替案を検討したり、Copilotの入力を受け入れたり拒否したりすることができ、必要に応じて提案されたコードを手動で編集することもできる。重要なのは、Copilotはユーザーのコーディングスタイルに合わせて編集を行い、時間の経過とともに提案の価値と関連性を高めていくことだ。2021年6月のプログラム開始以来、
GitHubで新たに書かれたJavaとPythonのコードの35%以上がCopilotによって 提案されている。
Copilotは、「AIがますます複雑化する思考形態を予測する世界を初めて私達に垣間見せてくれた」と
WiredのClive Thompsonは書いて いる。「初歩的なものから驚くくらい微妙なものまで」さまざまなエラーがあるにもかかわらず、Copilotは多くのデベロッパーから目を見張るような支持を得ている。「GitHub Copilotは驚くほどよく機能する」と、オープンソースソフトウェアデベロッパーでGitHubのスターでもある
Lars Gyrup Brink Nielsen は言う。「これなしでは絶対にソフトウェアを開発しないだろう」。
Instagramの共同創業者で元CTOの
Mike Krieger は、Copilotを「これまで見た中で最も見事なMLのアプリケーション」と呼び、「あなたが/Tab/を押したときに最初にぴったりとはまるチームメンバー」に例えている。
Copilotは、コーディングの知識を広げ、深めたい人にとっても、貴重なリソースだ(実際、知識を広げたくない人なんていないだろうが)。GitHub のスター、
Chrissy LeMaire は、「別の拡張機能をハックして TypeScript を学んでいる」と言う。「これまでの開発経験では解決できないとき、今はGitHub Copilotを使って、必要な技術を学んでいる」と語る。 WiredのジャーナリストであるThompsonは実験的に、CopilotにPDFをスキャンするプログラムを書かせてみた。はじめはプレーンテキストの文から始めてみる。
# write a function that opens a pdf document and returns the text
これに対して、コパイロットはこう書いた:
このコードは、必要なことを正確に行うだけでなく、Thompsonが聞いたこともないオープンソースのPythonコード、PyPDF2を使っていた。「ググってみると、PyPDFは実はPDFファイルを読むために特別に設計されたものだと知った。不思議な気分だったよ。人間の私がAIから新しい技術を学んでいるのだから。」
Copilotの評判は万人受けするものではない。
Fast Company によると、一部のデベロッパーは、Copilotが「オープンソースのコードを適切なライセンスなしに商業利用することで効果的にロンダリングする」可能性があり、著作権を侵害し、デベロッパーの個人情報を吐き出すと懸念を表明しているという。
しかし、Copilotを「アセンブリ言語の抽象化から始まった進化の次のステップ」
と見るデベロッパー のほうが多い。
Kelsey Hightower 氏は、「デベロッパーは、数学者が電卓に怯えないように、GitHub Copilotにも怯えるべきではない」と述べている。
コードの “ 意味 “ を抽出することができるツール
AIはコードを書き、パターンを吐き出し、以前に見たことのあるツールやソリューションを作り出すことができる。しかし、そのコードが何を意味するのかAIは理解していないだろう、とお考えではないだろうか。
実は、インテル、MIT、ジョージア工科大学の研究者コンソーシアムは、
MISIM(Machine Inferred Code Similarity) と呼ばれる新しいマシンプログラミング・システムを開発した。自然言語プログラミング(NLP)がテキストや話し言葉の意味を認識するのと同じように、MISIMは、ソフトウェアと同様の動作をする他のコードとの構造や構文の違いを研究することによって、あるソフトウェアが何をすることになっているのかを知ることができるのだ。
言語に依存しないMISIMは革命的な可能性を秘めている。MISIMはコードを書きながら読み、多くの人がやらなければならないような、時間を消費するタスクを完了するためのモジュールを自動的に生成することができるのだ。例えば、
クラウドバックアップを自動化する コードは、
コンプライアンスプロセス で使用されるコードと同様に、プログラム間で同じであることが多い。考えられるところでは、MISIMがこのようなプロセスに責任を持ち、デベロッパーが他の仕事に集中できるようにすることだ。
Intel社の目標は、MISIMをコード推薦エンジンに組み込んで、Intel社のさまざまなアーキテクチャで作業するデベロッパーを支援することだ。「この種のシステムは、デベロッパーが入力した単純なアルゴリズムの背後にある意図を認識し、意味的に似ているが性能が向上したコードの候補を提供できるだろう」と、Intel社は
プレスリリース で述べている。
AI コーディングツールでデベロッパーの生活を楽にする方法
AlphaCodeやCopilotのようなプログラムは、コード品質の向上から煩わしいタスクの解消まで、デベロッパーの生産性を高め、より高いレベルのタスクに専念できるようにする。
デベロッパーをフローに乗せ、より高いレベルの仕事に集中させることができる
デベロッパーたちは、コンテキストの切り替えや、チャット通知やメール受信などの妨害が、ワークフローを大きく乱すことを痛感している。例えば、デベロッパーの時間の
最大20%はウェブ検索に費やされている 。
AIコーディングツールの主な利点の1つは、デベロッパーのフローを中断することなく、提案や推奨を行うことでデベロッパーの集中力を維持できることだ。気が散ることを最小限に抑えるAIツールは、デベロッパーが中断されない時間を確保するのを助け、生産性を高めるだけでなく、仕事に対する幸福感やストレスを軽減することができる。
GitHubの社内調査 によると、デベロッパーは、割り込みが最小限または存在しない場合、良い一日を過ごす確率が82%であるのに対し、頻繁に割り込まれた場合、良い一日を過ごす確率はわずか7%であることが判明した。AIツールは、デベロッパーが中断されない時間を増やすことで、コーダーが複雑で創造的な問題解決に使える時間を増やすことにもつながる。
これらのAIプログラムは人間に取って代わるものではなく、私たちの生産性を向上させ、AIが苦手とする仕事に多くのリソースを割くことを可能にするものだ。となると、次の疑問が湧いてくる。これらのAIツールの限界は何なのだろうか?
これらのツールの限界はどこか?
以前にも
ブログ で紹介したように、AIコーディングツールにはまだ多くの限界がある。大まかに言えば、新しいソリューションを生み出す能力は限られているし、現代の複雑なコーディングを理解する能力も、少なくとも今のところは、限られているのだ。
誤検知やセキュリティ脆弱性の発生
多くのデベロッパーがすでに痛感しているように、人間が書いたコードのバグを発見するために設計されたAIプログラムは、膨大な数の偽陽性のバグ検知を発生させる傾向がある。情報セキュリティの観点からは、致命的な偽陰性がいくつかあるよりも、偽陽性がたくさんある方が良いという意見もあるかもしれない。しかし、偽陽性が多いと、ノイズの中のシグナルが不明瞭になり、AIの価値が損なわれる可能性がある。さらに、あまりに多くの偽陽性に直面すると、セキュリティチームは
「圧倒され、鈍感になる」 のだ。
NPM Audit は、Node Package Manager (NPM) に組み込まれたセキュリティ機能で、セキュリティの脆弱性をスキャンし、異常や修正の可能性、その他のインサイトを詳細に示すレポートを生成するように設計されている。しかし、
セキュリティ警告の「氾濫」 によってデベロッパーは気が散ってしまい、NPM Audit は「劇場型セキュリテイ」と呼ばれるものの典型的な例になってしまった。一部の NPM ユーザーは、警告される脆弱性の 99% は「よくある使用シナリオにおける誤検出」であると述べている。誤検出の多さは、AIが現代のソフトウェアの複雑さをまだ把握しきれていないことを強調している。
AIプログラムは、大量の誤検出を生み出すだけでなく、セキュリティ上の脆弱性を生み出す可能性もある。
Wired によると、Copilotが高セキュリティシナリオのコードを書く際のパフォーマンスを調査したNYUのチームは、Copilotがセキュリティ上の脆弱性、特にSQLインジェクション(攻撃者が挿入する悪質なコード)を生じやすいソフトウェアを書いた割合が40%であることを発見したという。
人の手によるインプットとガイダンスが必要
現時点では、
Aroma や
GPT-3 のようなツールは、簡単なコードを作成することができるが、それは人間の指導の下にのみ可能である。
Technology Review誌によれば 、「GPT-3の人間のような性能と印象的な多用途性は、優れたエンジニアリングの結果であって、本当の知性ではない。」
厳密にコントロールされた問題が提示されたときに、これらのプログラムは素晴らしいソリューションを生み出すことができるが、熟練された人間のデベロッパーのように設計概要を検討し、そこから最適なアプローチを導き出すまでには至っていないのだ。Copilotでさえ、まだ「未来そのものというよりは、未来のヒント」だと
WiredのThompsonは書いている 。
美的センスもまた、AIツールが人間の能力に遅れをとっている分野のひとつだ。つまり、AI/MLライフサイクルの
フロントエンドは、バックエンドを優先するあまり 、しばしば軽視されがちなのだ。
有害な偏見を吸収し、広める
AIプログラムも人間が作った道具であり、人間と同じように限界や欠点がある。GPT-3にツイートを書かせるために「女性」という一語を使ったところ、プログラムは 「最高の女性スタートアップ創業者の名前は…Girl」などの傑作の言葉を生成した。(素晴らしいね。)「GPT-3は相変わらず、憎悪に満ちた性・人種差別的な言葉を吐き出す傾向がある」と、
Technology Review誌 はため息をついている。ユーザーがテキストの説明を入力することで画像を生成できる『
DALL-E 』も、同様の懸念を抱かせている。また、
マイクロソフトの不運なAIチャットボットTay は、2016年のTwitterの豊富なコンテンツによって、ほぼ文字通り一晩で人種差別的で女性差別的な戯画に変身したことを誰が忘れることができるだろうか。
これらのようなエピソードは、
責任あるAI の開発を優先させることの重要性を強調している。ロボットが私たちの仕事を奪うのを防ぐためではなく、ロボットが世界の包括性、公平性、安全性を低下させるのを防ぐためだ。
メタバースが形作られる につれ、AIを搭載した言語技術が偏見を強化し、永続させる可能性があるため、より高度な倫理的監視の下でAIを開発するよう求める声が高まっている。
しかし、多くの組織にとって、責任あるAIは優先事項ではない。277人のデータサイエンティストとマネージャーを対象にした
最近のSASの調査 では、「43%が偏見や差別がないか分析プロセスを特に見直していない」一方、「不当な偏見が組織内のモデル成功の指標として使われていると回答したのは26%にすぎない」(
フォーブス より)。これらの数字を踏まえると、業界は
Uncle Benの「大きな力には大きな責任が伴う」というどの時代にも通用する格言 をまだ聞き入れていないことになる。
信頼の問題
これまで述べてきたすべての制約には、デベロッパーのツールに対する信頼、またはその欠如という共通点がある。
研究 によると(そしてその他多くの
研究 によると)、信頼がソフトウェアエンジニアリングツールの採用に影響を与えることを示している。つまり、デベロッパーは、信頼できる技術と結果を持つツールを使用する傾向があり、インテリジェントな自動化ツールは現在もその信頼を獲得しているのだ。
カーネギーメロン大学の博士課程でデベロッパーの経験を研究しているDavid Widder氏は、NASAのエンジニアが自律型ツールを使ってハイリスクハイリターンのミッションの制御ソフトウェアを書く10週間のケーススタディを行った (
“Trust in Collaborative Automation in High Stakes Software Engineering Work: A Case Study at NASA”, 20-21 )。この研究は、ソフトウェアエンジニアが自律型ツールを信頼する、あるいは信頼しないために、どのような要因が影響するかを調査するために企画されたものである
Widder氏は、「デベロッパーは、重要なコードが正しく書かれることを保証するために仕事の一部を自動化するツールを受け入れるだろうが、それはツールを信頼できるようになった場合のみであり、その信頼を勝ち取るのは難しい」と述べている。彼らは、「オートコーディングツールに対する信頼を複雑化させる要因が多く、それがデベロッパーの仕事を自動化するツールの能力も複雑化させることを発見した。」
この研究では、オートコーディングツールに対するエンジニアの信頼は、主に4つの要因によって決まることがわかった。
ツールの透明性:デベロッパーがツールの動作を理解し、正しく動作することを確認できること。
ツールの使いやすさ:デベロッパーがそのツールを使いやすいと感じるかどうか。
ツールの社会的背景:そのツールをどのように使用し正常なパフォーマンスをチェックするか。具体的にはツールの作成者が誰か、そのツールを承認した人や組織の信頼性がどうか、ツールがエラーを導入することでユーザーを「裏切った」ことがあるかどうか、など。
組織の関連プロセス:企業や組織がどの程度ツールに投資し、徹底的にテストし、実際の環境でその有効性を実証してきたか。
この研究結果は、エンジニアの信頼を築くには、ツールの使用方法に関するトレーニングやドキュメントだけでは不十分であることを示唆している。「ソフトウェア技術者は、指示されたことの理由だけでなく、特定の設計上の選択がなされた理由も理解することを期待している」。このことは、「信頼を得るためには、自動化されたシステムがその動作について説明するだけでなく、その作成者である人間も説明すべき」であることを示唆しているという。
競争ではなく、協働
ロボットの軍勢が追い上げて来るのを恐れるのではなく、どの作業をAIが、どの作業を人間が行うのが最適かを見極めることが、今後の課題だ。人間とAIプログラムの長所を活用したコーディングへの協力的なアプローチにより、組織はデベロッパーのワークフローを自動化・合理化すると同時にAIから学習する機会を与えることができる。組織は、AIを活用することで、以下のアプローチを実現することができる:
人間のデベロッパーを訓練する :AIコーディングツールは、Copilotを使用して追加の言語を学習する など、効率的で的を射た方法で人間のデベロッパーを訓練するのに役立つ。
人間のデベロッパーの作業を追跡し、効率とコード品質を向上させるための提案を行う :もし、すべての人間のプログラマーにAIプログラマーのペアがいて、彼らの作業方法を学習し、次のコード行を予測し、過去の解決策に基づいて推奨を行うことができたらと想像してみてほしい。このようなプログラマーは、より多くの仕事をより速くこなし、その過程でより多くのことを学ぶことができるだろう。
レガシーシステムを書き換える: MISIMのようなシステムは、コーディングを完全に自動化することはできないかもしれないが、レガシーシステムの書き換えには非常に有効である。これらのプログラムはプラットフォームに依存しないため、米国政府はもちろん、多くの金融・保険会社がいまだに利用しているCOBOL のような古い、あるいは不明瞭なプログラミング言語を独学できる可能性がある。MISIMタイプのプログラムは、COBOLのプログラムをPythonなどの現代言語で書き換えることができるので、これらのサービスを稼働させるためにCOBOLのスキルを磨く 必要があるデベロッパーは少なくなるだろう。
多くの職場の人間関係と同様に、競争ではなく協調こそがAIとの関係にアプローチする理想的な方法だ。ロボットはあなたの仕事を奪いに来るわけではないが、あなたの仕事をより簡単にし、あなたのワークライフをより幸せにし、あなたのコードをより良いものにするための道を進んでいるのだ。