AI Programmer アイキャッチ

【AI Programmer】AIに日本語でプログラミングさせてみた

日本語の文章を入力することでAIが自動的にプログラミングを行いプログラムコードを出力してくれる”AI Programmer”というサービスが公開されたので、さっそく試してみました。

“AI Programmer”とは

AI開発をおこなっている有限会社アズリアル (本社:東京都目黒区、代表取締役:藤田陽介、以下アズリアル ) と株式会社HashLab(ハッシュラボ)が日本語で仕様を入力するとAIが自動でプログラムコードを生成する【AI Programmer(ベータ版)】の提供を開始しました。

プレスリリース

https://prtimes.jp/main/html/rd/p/000000005.000092747.html

2022年10月4日現在、以下の言語に対応しているようです。

  • SQL
  • Python
  • Javascript
  • HTML & CSS
  • スマートコントラクト
  • C++
  • PHP
  • Go
  • R
  • Perl
  • Ruby
  • 正規表現
  • Haskell
  • Lisp

実際にやってみた

生成されるプログラムコードの精度を上げるためには、より具体的な仕様を入力する必要があるそうです。

まずは、どんな言語でも最初に行うHello Worldを出力してみた。
AI Programmer 初期画面

出力したい言語を選択して、AIに書かせたいプログラムの仕様を日本語で入力すれば、プログラムコードを出力してくれる。AI Programmer 初期出力後

あれ?1行だけしか出力されない?
と思いましたが、C#10.0からはこの形式でも実行可能なようですね。
C# 10.0の新機能

さっそくC#10.0が動作する環境を用意して、生成されたコードを実行しました。

出力されたプログラムコード

print("Hello World")

実行結果

Hello World

まぁこの程度なら一目で問題ないことは分かりますが、プログラムコードを自動で生成しているとなると感動するものがありますね。
ほかにもいろいろ仕様を与えてどんなプログラムコードが生成されるかちょっと遊んでみました。

実行例1(逐次、分岐、繰り返し)

まずはプログラミングの3つの基本構造である逐次処理、分岐処理、繰り返し処理について確かめてみます。

仕様

1足す1の結果を保持する。
結果を文字列で出力する。
保持した結果に2を掛け算し結果を文字列で出力する処理を100回繰り返す。
もし1024以上となったら”END"と出力し処理を終了する。
Hello World

出力されたプログラムコード

int result = 1 + 1;
    Console.WriteLine(result);
    for (int i = 0; i < 100; i++)
    {
        result = result * 2;
        Console.WriteLine(result);
        if (result >= 1024)
        {
            Console.WriteLine("END");
            break;
        }
    }

実行結果

2
4
8
16
32
64
128
256
512
1024
END

すばらしい!仕様の3行目と4行目で正しく文脈を読み取ってループの中に条件分岐処理が入っていますね。
また、「結果」という文字を使っているので変数名が「result」となっており、人間から見た可読性も高い状態になっています。

実行例2(HTML&CSS)

HTML&CSSについても実行してみました。

仕様

半径5cmの3つの丸を横並び。
色はそれぞれ、緑、赤、黒。
間は5pxずつ間隔をあける。

出力されたプログラムコード

<div style="text-align:center;">
    <div style="display:inline-block; border-radius:50%; width:5cm; height:5cm; background-color:green; margin:0 5px;"></div>
    <div style="display:inline-block; border-radius:50%; width:5cm; height:5cm; background-color:red; margin:0 5px;"></div>
    <div style="display:inline-block; border-radius:50%; width:5cm; height:5cm; background-color:black; margin:0 5px;"></div>
</div>

実行結果

HTML&CSSについても指定した通りに出力されています。(スマホだと横幅の関係で改行されてしまうかもしれません。)あえて仕様を3行に分けて書いていますがそれでも丸いオブジェクトに対して色は配置場所などを判断してHTMLコードを出力しています。
これができると例えばWEB制作のお仕事などでお客さんのイメージして言語化したデザインをその場で見せたりすることができるんじゃないかと期待しています。

仕様の書き方によっては縦に表示されたり、マージンが5pxではなく5cmになったりとやはり出力結果がずれていることがありました。
ただ、それはどちらかというと仕様を入力する人間がイメージを正しく言語化できていないということだと思います。

 

実行例3(FizzBuzz問題)

最後に、プログラミングの練習問題でよく取り上げられるFizzBuzz問題についてもAIに解いてもらいましょう。

FizzBuzzとは

もともとはパーティなどで複数人集まったときに行うゲームでルールは以下のようになっています。

  •  2人以上のプレイヤーが1から順番に数字を発言していく
  •  3で割り切れるときは「Fizz」を発言
  •  5で割り切れるときは「Buzz」を発言
  •  両方で割り切れるときは「FizzBuzz」を発言
  •  間違えた人から脱落

AI Programmerの結果

FizzBuzz問題をAI Programmerに以下のように仕様を入力しプログラムコードを出力しました。

仕様

1から順番に数字を加算していく。
3で割り切れるときは「Fizz」を出力する。
5で割り切れるときは「Buzz」を出力する。
両方で割り切れるときは「FizzBuzz」を出力する。
100まで繰り返す。

出力されたプログラムコード

for (int i = 1; i &lt;= 100; i++)
    {
        if (i % 3 == 0 &amp;&amp; i % 5 == 0)
        {
            Console.WriteLine("FizzBuzz");
        }
        else if (i % 3 == 0)
        {
            Console.WriteLine("Fizz");
        }
        else if (i % 5 == 0)
        {
            Console.WriteLine("Buzz");
        }
        else
        {
            Console.WriteLine(i);
        }
    }

実行結果

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Fizz
52
53
Fizz
Buzz
56
Fizz
58
59
FizzBuzz
61
62
Fizz
64
Buzz
Fizz
67
68
Fizz
Buzz
71
Fizz
73
74
FizzBuzz
76
77
Fizz
79
Buzz
Fizz
82
83
Fizz
Buzz
86
Fizz
88
89
FizzBuzz
91
92
Fizz
94
Buzz
Fizz
97
98
Fizz
Buzz

このAI Programmerは仕様では3の倍数かつ5の倍数のことを「両方」と表現しているにもかかわらず、文脈からきっちり判断てきていました。
また、if文でも3の倍数かつ5の倍数を先に判定し、次に3の倍数、5の倍数と判定を行えていました。

このif文の判定順序の考え方がこのFizzBuzz問題の肝だと考えています。私はよく会社の新人研修を担当するのですが、条件分岐や繰り返し処理を習った後の演習問題としてこの問題をよく出題しています。特にプログラミング未経験の人は、判定順序を気にせず作ってしまうので期待通りの結果が出力されないということがよくあります。

まとめ

AI Programmerを用いて日本語で仕様を与えることにより、プログラムコードを出力してみました。
実際に使ってみると、やはり日本語での仕様が正しく伝わらないと求める結果が出力されませんでした。
ただ、今後さらに精度が上がりより複雑な日本語または自然言語に対して実用的なプログラムコードが出力されるとなると、プログラムを書く機会はどんどん減っていく可能性がありますね。

コンピュータができたころは1と0のバイナリを入力し、そこからアセンブリ言語などの低水準言語が生まれました。
そのあと高水準言語としてC言語をはじめとする現在のプログラム言語が生まれ、より人間に理解しやすい形でコンピュータに指示を送ることができるようになりました。
今後はさらに日本語など自然言語で直接コンピュータに指示を送ることができるようになると考えるとワクワクしますね。

皆さんも興味があればぜひ、遊んでみてください。