高校生で「Imagine Cup」アジア教育部門を優勝
司会者:今日登壇してもらう永田さんは、すごい人です。
(会場笑)
司会者:なぜすごい人かというと、「Imagine Cup」アジア教育部門で高校生で初めて優勝したんです。
(会場拍手)
司会者:高校生でプログラミング言語を作ったんです、高校生で。「はっ?」て(笑)。
(会場笑)
司会者:みなさんが知っているC言語やPythonなど、そういうものを作りました。「どういうこと?」という感じなので、さっそく話を聞いてみましょう。よろしくお願いします。
永田直希氏(以下、永田):永田直希です。インターネットの世界では「しーぴー」という名前で活動していたり、していなかったりします。
先ほどみなさん、アンバサダーの方たちが、名前の由来を紹介していたんですが、そんなに深く考えて(名前を)つけていないのでそこは省略したいと思います。
では、さっそく始めていきたいんですけど、「Laze Project Team」というチームでやっているんですが、実はメンバーが僕以外にもう1人いて、ぶっちゃけて言うと彼がリーダーで、僕はサブです。ただ、今日は彼が忙しくて来られないので、僕1人でやらせてもらいます。
Lazeの特徴その1 「準備なしですぐに始められる」
永田:じゃあ、さっそくLazeを紹介していきます。「Lazeってなんだ?」ということで、初心者向けの新しいプログラミング言語で、「準備なしですぐに始められる」というのと「英語以外の言語でも書ける」という特徴を備えています。
特徴について紹介していきたいんですが、「準備なしですぐに始められる」の準備というのは、専門用語で言うと「環境構築」という言葉です。プログラミング言語をやる時は、だいたいコンパイラなどのツールをインストールしてきてから、「はい、始めます」という感じで、始める前に少しステップが必要なことが多いですよね。
環境構築に「環境」ってついてるのは、例えばこのパソコンとそのパソコンとほかのパソコンで環境が違うと、環境固有のエラーが出たりして、初心者にとってはムズすぎるなという印象で……。
実際に、ここで詰まってやられてしまった人が、僕含め、数えきれないほどいます。そういう方へ、Webサイト上でプログラミングできる環境を全部用意すれば、アクセスするだけですぐにプログラミングが始められるので、挫折する人を減らせるかなということで、Webサイト上でやりました。
Lazeの特徴その2 「英語以外の言語でも書ける」
特徴の2つ目として、英語以外の言語でも書けるというのがあります。(スライドを示して)これは、なんの変哲もないJavaScriptとPythonのプログラムですが、もちろん英語ですよね。見慣れている人は見慣れているであろうプログラムのかたちだと思います。
じゃあ、これがLazeになると…… お~!
司会者:お~(笑)!
永田:ありがとうございます(笑)。
(会場笑)
永田:こちらが英語なんですが、こちらは日本語で、なんか……すごいなぁ(笑)。
(会場笑)
永田:どうですか、読みやすくないですか? まぁ、人によると思いますけど(笑)。
(会場笑)
永田:こういったかたちで、日本語でも書けて、もちろん英語でも書けて、かつ相互に変換可能なので、例えば英語で書いて、それを日本語に変換して読むこともできます。
「初心者にとってどっちがいいかな?」というと、やはり最近は、例えば大学でやるものだったプログラミングを高校でやったり、中学でやったり、最近では小学生がプログラミングをやっていたりします。
そういう中で、小学生は英語がこんなにペラペラじゃないし、(英語のプログラムが)わかりません。コンピューターも、なかなか新しいことは取っつきにくいかなと(思いました)。
そんな小学生にとっては、英語よりは絶対に日本語のほうが取っつきやすいし、なんとなく読めて、なんとなくわかるというのがすごく大事だと思うので。
やはり、なにも説明されていなくても、「このプログラムはこういうことをやるんだろうな」とわかるのがすごく大事だと思っています。そういうことができるプログラミング言語が作りたいなってことで、作りました。作っちゃいました。
司会者:すごいですね(笑)。
Lazeの仕組み
永田:せっかくなので、Lazeの仕組みについても少しだけ触れておこうと思います。
(スライドを示して)これは、一般的なプログラミング言語の仕組みです。プログラムがあって、それをコンパイラ君が、コンパイラじゃない時もありますが、最終的に実行できるかたちにします。コンパイラ君は実際に何をしているのかというと、コンパイラによっても違いますが、だいたい3段階あります。
まず「パース」です。人間にとって読みやすいプログラムを機械が直接読むのは難しいので、機械が読みやすいように、抽象構文木(AST)という形式に書き直します。
(スライドを示して)こんな感じで、ツリー状になっています。Abstract Syntax Treeと英語で呼ぶので、ASTと略したりもします。
Lazeはこの時に、「Laze文法ファイル」というのを読み込みます。「Laze文法ファイルってなんやねん?」というと、例えば「もし」や「ならば」、英語であれば「if」や「then」など、どういうキーワードを使うのかを定義しています。
あと、構文を自由に変えられます。例えば(スライドを示して)こっちは「repeat(50)」です。一方で、こっち、「50 回繰り返す」なので、そういうところの違い、例えば語順も全部入れ換えられるので、そういうのを全部Lazeの文法ファイルでやっています。
プログラムとASTは1対1で、完全に対応しています。ASTは実は言語に依存しない形式になっています。(スライドを示して)これ(AST)は日本語のプログラムをツリー状にしていますが、これは実はプログラム側にもいけて、その時に別の文法ファイルを読ませることもできます。それが「言語の変換」ということになります。
日本語のプログラムを日本語のLaze文法ファイルで抽象構文木にしてから、英語のLaze文法ファイルで読んで、プログラムに戻すと、日本語のプログラムから英語のプログラムになるわけです。
次のステップとして、抽象構文木を中間言語に直す「セマンティック解析」があります。
これは、セマンティック解析器というすごいやつが、「この抽象構文木の意味はこんな感じなんやろうなぁ」ということをしっかり読み取って、中間言語と呼ばれているものに直します。
中間言語は、あまり人間が読める感じではありませんが、ギリギリ読めるくらいの形式です。ここは不可逆なので、中間言語から抽象構文木には基本戻せません。
最後にバイナリ化をします。人間がかろうじて読めるくらいの形式である中間言語より、機械が読みやすいバイナリに直したほうがファイルサイズも小さくなってうれしいので、だいたい直します。これも可逆で、1対1対応をしています。
セマンティック解析だけが不可逆なので、最終的なバイナリから、最初のプログラムに戻すことは基本的にできません。
学生向けプログラミング大会「Imagine Cup」の優勝賞金は10万ドル
Imagine Cupについても、少し話していこうかなと思います。アジア教育部門で優勝して、メッチャかっこいい盾を貰いました。
(会場拍手)
見た時に「これはいいな」と思いました。日本って賞状とトロフィーが好きですよね。それに比べると、「アメリカの大会ではこんなにかっこいい盾が貰えるんだ!」と感動しましたね。あと、副賞がメッチャ多かったです。
少し説明しましたが、Imagine Cupはメチャクチャ大きい大会で、本当に大量のチームが出ていて、優勝賞金が10万ドルです。しかも、今円安が進んでいるので、メッチャ円を貰えます。
僕が賞金を貰った時のレートは、1ドル135円ぐらいだったのですが、今は150円ぐらいいきそうな雰囲気を出しているので、これはチャンスですよ。参加しましょう、本当に(笑)。
(会場笑)
「Imagine Cup」で得た3つのこと
Imagine Cupで得たものを少し紹介していきます。まずは知見ですね。
たしかイワケンさん(株式会社CyberVの岩﨑謙汰氏)もそうだったと思いますが、世界大会に進出すると、Microsoft MVPというMicrosoftの製品やテクノロジーに詳しい人と会って、ミーティングする機会を得られます。それで、僕が知らない分野の知識をけっこう教わりました。
あと、(Imagine Cupに)参加するにはAzureの技術をちょっと使わなければいけなくて、それでAzureの使い方も学べたのも、それはそれでけっこう大きかったなと思います。
あとは人脈ですね。これはけっこう大きいです。参加者同士、World Finalists同士の交流も少しはありますが、僕的に一番大きいのはやはりMLSA、つまりMicrosoftアンバサダーの方との交流です。
こういうイベントに呼んでもらえたのも、アンバサダーの方のおかげなので、Imagine Cupに参加したいなと思っている人は、アンバサダーの人と仲良くなれるという気持ちでぜひ出てもらえたらなと思います。
あと、お金です。お金が貰えるとうれしいですよね。これ、すごいのが参加するだけでAzureのクレジットが貰えるんですよ。これがけっこうすごくて、Azureを使わなければいけないと言っているけれど、Azureのクレジットはくれる優しさがね、ありますよね。
(会場笑)
あと、(世界大会に)進出するとクレジットをメッチャ貰えるし、賞金もメッチャ貰えるので、うれしいなということで、本当にクレジットは使いきれないぐらい貰いました。
Lazeが現状持つ課題とこれから
最後に少しだけ、Lazeのこれからを話そうと思います。今Lazeは、けっこう課題を抱えていて、例えば日本語だとプログラムが読みやすいけれど、タイピングするのは少し大変だなということがあります。
あと、対応言語が少ないのはけっこう大きな課題で、今は日本語と英語しか対応していません。「対応しようと思えばできるんだけど……」という感じで詰まっているところがあったので、そこを改善した「Laze 1.0」を、2023年の夏頃にリリースする予定です。ここだけの話です(笑)!
(会場拍手)
1.0ということは、今まではベータだったんですよね(笑)。「じゃあ、1.0って何がすごいの?」という話で、主に3つの新機能があります。細かく言えば、もっとあるのですが……。
今はエディタにけっこう弱い部分があるのでそこを強くしよう、というのと、タイピングがあまり得意ではない人向けに、「Scratch」のようなビジュアルエディタを実装しようかなと考えています。
あと、今はサーバー上にプログラムを保存できなくて、自分のパソコンのキャッシュのようなところに入っている感じなので、そこはよくないなと思っていて、改善しようかなと思っています。
あとは、フォーラムですね。Lazeを使っている人が交流できる場所や質問できる場所が多少あるにはありますが、今はあまり活動していないので、フォーラムを作ってもっと活発に交流させていけたらなと思っています。
ご清聴ありがとうございました。
司会者:ありがとうございました。いやぁ、本当にすさまじい発表でしたね。本当に感動しました。どうもありがとうございます。
永田:ありがとうございました。
司会者:それでは、パネルディスカッションに移っていきたいと思います。
永田:発表中は少しアレかなと思ったので最後に。「Lazeを触ってみよう」ということで、LazeのWebサイトにアクセスするだけで触ってみたりできます。よろしければぜひアクセスしてみてください。
(次回へつづく)