Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/53ningen/golang-scala

"golang" is Mofumofu Oriented Programming Language implemented by Scala
https://github.com/53ningen/golang-scala

Last synced: 7 days ago
JSON representation

"golang" is Mofumofu Oriented Programming Language implemented by Scala

Awesome Lists containing this project

README

        

golang: Programming Language [![Build Status](https://travis-ci.org/53ningen/golang.svg?branch=master)](https://travis-ci.org/53ningen/golang)
================================

> このレポジトリは[「ごちうさ住民Advent Calendar 25日目」](http://www.adventar.org/calendars/439)の記事です。

## 第1羽 ひと目で、尋常でない言語だと見抜いたよ

ゴミ人間(@gomi_ningen)です!春からラビットハウスでエンジニアのお仕事をしています!同僚のJavaちゃんや可愛い妹のScalaちゃんと楽しく働いています♪[[1]](#1)

エンジニアのなかでも主にソフトウェアに関わるお仕事の見習いをしていて、日々良いサービスを提供できるように修行を積んでいる最中です。そんななか、ひとつ気付いてしまったことがあります。

私はこの春「ご注文はうさぎですか?」に出会って以来、その作品の素晴らしい魅力に引き込まれていて、気付いたら身の回り、そして心の中には常に「ごちうさ」がある状態になっていました。しかしながら、お仕事に集中している時間だけは同僚のJavaちゃんのことを考えているということに違和感を覚えました。

どうせなら常に「ごちうさ」とともにありたいものです。そこで「ごちうさ」の世界観をプログラミング言語という形で表現しようと(12月10日頃に)思いつきました。名付けて「go言語」です。しかしながら私は言語実装の経験はおろか、その基礎知識すら持っていなかったのです。

そこでまず、現在ラビットハウス新卒有志で週1回輪読している[灘校パソコン部の部誌「圏論によるプログラミングと論理」](http://www.npca.jp/works/magazine/)の中に出てきた、ラムダ計算を足がかりにプログラミング言語によって記述されたコードがどのように実行されるのかの一例を学んでいきました。

そしていよいよ期日もせまってきた頃に、手軽に言語を実装する方法はないかと資料をあさっていたところ[O'Reillyの「アンダースタンディング・コンピューテーション」](http://www.oreilly.co.jp/books/9784873116976/)という本の第2章にお手軽に言語を実装できるっぽい記述を見つけ、即本を購入しました。この本のコードはRubyで書かれていたため、ほぼほぼ初めてのRubyプログラミングと同時に言語の実装の基礎を理解していきました。ある程度形になりそうだなと思った瞬間欲がでてしまい、どうせ「go言語」を作るなら「Golang」で実装してみようとしてしまいました。Golangやったことなかったのに無謀ですね。

結果、なんだかよくかわらない感じになり取り急ぎパーサーを触った経験が微妙にあったScalaで書いてみました。以下、もふもふ指向プログラミング言語「go」のご紹介と「ご注文はうさぎですか?」についての記事を恐れ多くも書かせていただきました。

### もくじ

* まえがき
* [第1羽 ひと目で、尋常でない言語だと見抜いたよ](#1)
* もふもふ指向プログラミング言語「go」のご紹介
* [第2羽 小麦を愛した少女と小豆に愛された少女](#2-)
* [第3羽 初めて酔った日の事憶えてる?自分の家でHello Worldしようとしたわよね](#3)
* [第4羽 ラッキーアイテムは字句解析器と構文解析器](#4-)
* [第6羽 お話をするお話](#6-)
* [第7羽 Call Me Sister.](#7-call-me-sister)
* [第9羽 青山herokuマウンテン](#9-heroku)
* 「ごちうさ 1羽」に飛ばされる便利なChrome拡張のご紹介
* [第5羽 ココアと悪意なき殺意](#5-)
* 「ごちうさ」について
* [第8羽プールに濡れて 雨に濡れて涙に濡れて](#8-)
* [第10羽 対おまいら用決戦部隊、通称チマメ隊](#10-)
* [第11羽 少女は赤い外套を纏い ウサギを駆りて聖夜の空を行く](#11--)
* ごちうさ住民Advent Calendarに関わった全ての型へ
* [第12羽 君のためなら寝坊する](#12-)

> 1. ^ NBCユニバーサル・エンターテイメント [TVアニメ「ご注文はうさぎですか?」AJ2014PV](https://www.youtube.com/watch?v=aWyPbj1CItQ#t=26)

## 第2羽 小麦を愛した少女と小豆に愛された少女

**[go言語](http://ja.wikipedia.org/wiki/Go_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%29)**は[プログラミング言語](http://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)のひとつで、設計に[保登心愛](http://dic.nicovideo.jp/a/%E4%BF%9D%E7%99%BB%E5%BF%83%E6%84%9B)さん・[香風智乃](http://dic.nicovideo.jp/a/%E9%A6%99%E9%A2%A8%E6%99%BA%E4%B9%83)ちゃんなどが関わっています。go言語の「go」は恐れ多いのですが、Koi先生がドキドキ★ビジュアル全開マガジン!!の「まんがタイムきららMAX」で連載されている、かわいいという形容詞を完全な形で体現した作品「ご注文はうさぎですか?」の「ご」から取らせていただいています。「ご注文はうさぎですか?」のアニメーションはすでに[千葉県の人口を超える方々がご覧になっている](http://xn--28ja3ha8gb2b0cc.com/)みたいですので、もはや日本中に見ていない人は居ないと言っても過言ではない国民的作品のひとつです。

主な特徴として、心をぴょんぴょんさせるための機能、[Python](http://ja.wikipedia.org/wiki/Python)のような[動的型付き言語](http://ja.wikipedia.org/wiki/%E5%8B%95%E7%9A%84%E5%9E%8B%E4%BB%98%E3%81%91)のような胸がらんらん歌う機能、などがあるかもしれません。go処理系のコンパイラはガバガバなのでみなさん是非プルリクエストを送っていただけると幸いです。

発表当初は[ごちうさ住民](http://www.adventar.org/calendars/439)のみしかサポートしていませんでしたが、2015年冬クールからはBS11での再放送[[2]](#2)が行われ植民地が増えると予測されています。また、2014年9月7日に東京都渋谷区・AiiA Theater Tokyoで開催されたごちうさ初の大規模カンファレンス:[Rabbit House Tea Party 2014](http://www.gochiusa.com/contents/special/index01900000.html)でも、2015年度の継続したイベントの開催が[佐倉綾音](http://ja.uncyclopedia.info/wiki/%E5%88%A9%E7%94%A8%E8%80%85:%E8%A5%BF%E3%81%AE%E3%81%AB%E3%82%8F%E3%81%8B%E3%82%AA%E3%82%BF%E3%82%AFK/%E8%A9%A6%E4%BD%9C%E5%93%81_%28%E4%BD%90%E5%80%89%E7%B6%BE%E9%9F%B3%29)さんによってほのめかされています[[3]](#3)。

> 2. ^ 1月5日より毎週月曜日深夜0時〜 [BS11](http://www.bs11.jp/anime/2541/)にて再放送が決定しました
> 3. ^ 詳しくは、[ご注文はうさぎですか?第6巻(スペシャルイベント収録DVD付き 初回限定版)](http://www.gochiusa.com/contents/bd_dvd/06.html)に付属するスペシャルイベント収録DVDをご参照ください

## 第3羽 初めて酔った日の事憶えてる?自分の家でHello Worldしようとしたわよね

go言語の「Hello, world」は次のように非常にもふもふしているのが特徴です。もふもふ指向プログラミングという新たなるパラダイムを築いていきたい気持ちです。

````sh
golang> もふもふ("Hello, world!")
"Hello, world!"
````

## 第4羽 ラッキーアイテムはParserとEvaluator

go言語のコアはParserとEvaluatorからなります。

## 第5羽 ココアと悪意なき殺意

go言語とまったく関係はないのですが、どんなサイトを訪問しても「ご注文はうさぎですか? 第1羽」のページに飛ばされる便利なChrome拡張を作りました。一部のページでイベントが発火しない機能もついてます。[Chromeウェブストア](https://chrome.google.com/webstore/detail/%E3%82%B3%E3%82%B3%E3%82%A2%E3%81%A8%E6%82%AA%E6%84%8F%E3%81%AA%E3%81%8D%E6%AE%BA%E6%84%8F/cgompdgegcjimeaimlnimadoolpiacai)で無料配信中![レポジトリ](https://github.com/53ningen/pyonpyon-extension)はこちらです。

## 第6羽 お話をするお話

プログラミング言語goを作成する上で以下のページ・書籍・映像を参考にさせていただきました。特にScalaのコップ本のパーサー・コンビネーターの章と、アンダースタンディング・コンピューテーションの2章の内容をもとになんとか書き進めてみたものの、まだまだ非常に情けない実装です。これからも様々なものを参考にさせていただき開発を継続していきたいと思います。とりあえず先人のみなさまの残した貴重な資料に感謝と敬意を表明させていただきたいです。

### ウェブページ

* [TVアニメ「ご注文はうさぎですか?」公式サイト](http://www.gochiusa.com/)
* [まんがタイムきららMAX](http://www.dokidokivisual.com/magazine/max/)
* [種田梨沙 - Google検索](https://www.google.co.jp/search?q=%E7%A8%AE%E7%94%B0%E6%A2%A8%E6%B2%99&es_sm=91&biw=1920&bih=963&source=lnms&tbm=isch&sa=X&ei=1OiWVOD_E8788QWuloHoBQ&ved=0CAYQ_AUoAQ)
* [bpowers/gocalc - GitHub](https://github.com/bpowers/gocalc)
* [cznic/golex - GitHub](https://github.com/cznic/golex)
* [draftcode/goyacc_sample - GitHub](https://github.com/draftcode/goyacc_sample)
* [Yacc: Yet Another Compiler-Compiler](http://dinosaur.compilertools.net/yacc/)
* [goyaccを使う](http://qiita.com/draftcode/items/c9f2422fca14133c7f6a)
* [goyaccで構文解析を行う](http://qiita.com/k0kubun/items/1b641dfd186fe46feb65)

### 書籍

* [ご注文はうさぎですか? 第1巻](http://www.gochiusa.com/contents/goods/book/index.html), 芳文社
* [ご注文はうさぎですか? 第1巻(電子書籍版)](http://seiga.nicovideo.jp/watch/bk206172), 芳文社
* [ご注文はうさぎですか? 第2巻](http://www.gochiusa.com/contents/goods/book/index.html), 芳文社
* [ご注文はうさぎですか? 第2巻(電子書籍版)](http://seiga.nicovideo.jp/watch/bk206173), 芳文社
* [ご注文はうさぎですか? 第3巻](http://www.gochiusa.com/contents/goods/book/index.html), 芳文社
* [ご注文はうさぎですか? 第3巻(電子書籍版)](http://seiga.nicovideo.jp/watch/bk244032), 芳文社
* [ご注文はうさぎですか? 画集 Cafe du Lapin](http://www.amazon.co.jp/%E3%80%8C%E3%81%94%E6%B3%A8%E6%96%87%E3%81%AF%E3%81%86%E3%81%95%E3%81%8E%E3%81%A7%E3%81%99%E3%81%8B-%E3%80%8D%E7%94%BB%E9%9B%86-Cafe-Lapin-%E3%81%BE%E3%82%93%E3%81%8C%E3%82%BF%E3%82%A4%E3%83%A0KR%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%82%B9/dp/4832244485/), 芳文社
* [ご注文はうさぎですか? TVアニメ公式ガイドブック Memorial Blend](http://www.amazon.co.jp/%E3%81%94%E6%B3%A8%E6%96%87%E3%81%AF%E3%81%86%E3%81%95%E3%81%8E%E3%81%A7%E3%81%99%E3%81%8B-TV%E3%82%A2%E3%83%8B%E3%83%A1%E5%85%AC%E5%BC%8F%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-Memorial-Blend-%E3%81%BE%E3%82%93%E3%81%8C%E3%82%BF%E3%82%A4%E3%83%A0KR%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%82%B9/dp/4832244868), 芳文社
* [アンダースタンディングコンピューテーション](http://www.oreilly.co.jp/books/9784873116976/), O'Reilly
* [Scala スケーラブルプログラミング](http://www.amazon.co.jp/Scala%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%A9%E3%83%96%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88-%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0-Programming-Scala/dp/4844327453), インプレスジャパン
* [型システム入門](http://estore.ohmsha.co.jp/titles/978427406911P), オーム社

### 映像

* [ご注文はうさぎですか? 第1巻(初回限定版)](http://www.gochiusa.com/contents/bd_dvd/01.html), NBCユニバーサル・エンターテイメントジャパン
* [ご注文はうさぎですか? 第2巻(初回限定版)](http://www.gochiusa.com/contents/bd_dvd/02.html), NBCユニバーサル・エンターテイメントジャパン
* [ご注文はうさぎですか? 第3巻(初回限定版)](http://www.gochiusa.com/contents/bd_dvd/03.html), NBCユニバーサル・エンターテイメントジャパン
* [ご注文はうさぎですか? 第4巻(初回限定版)](http://www.gochiusa.com/contents/bd_dvd/04.html), NBCユニバーサル・エンターテイメントジャパン
* [ご注文はうさぎですか? 第5巻(初回限定版)](http://www.gochiusa.com/contents/bd_dvd/05.html), NBCユニバーサル・エンターテイメントジャパン
* [ご注文はうさぎですか? 第6巻(初回限定版)](http://www.gochiusa.com/contents/bd_dvd/06.html), NBCユニバーサル・エンターテイメントジャパン

## 第7羽 Call Me Sister.

go言語の命令をどう呼ぶかのレファレンスです。正直ガバガバすぎて色々エラーが発生すると思いますが、こんな感じになったら胸がらんらん歌う感じのプログラミングが実現できるんじゃないんだろうかという願望も含んでいます。

### 数字・文字列・真偽値

非常にわかりやすいし、true/falseなどの苦痛なリテラルではなく、もっともふもふできます!

````
# 数字
golang> 12470
#=> 12470.0

# 文字列
golang> "ティッピーゴールデンフラワリーオレンジペコ"
#=> ティッピーゴールデンフラワリーオレンジペコ

# 真偽値:true
golang> ぴょんぴょん
#=> true

# 真偽値:false
golang> わわわ!
#=> false
````

### print文

非常にわかりやすいし、println/System.out.println/std::coutなどの苦痛なキーワードではなく、もっともふもふできます!

````
# println文
golang> もふもふ("ありえるかも(二期)")
ありえるかも(二期)
````

### if-else式

非常にわかりやすいし、if/elseなどの苦痛なキーワードではなく、もっともふもふできます!それからif/else式は必ず式を返します。たぶん。else句の省略はそのうちできるようになります。

````
# if文
golang> 心ぴょんぴょん待ち?(ぴょんぴょん) { もふもふ("カープの夢") } ふわふわどきどき { もふもふ("マジ?") }
カープの夢
````

### 変数定義

非常にわかりやすいし、var/let/val/=などの苦痛なキーワードではなく、もっともふもふできます!スコープとかそういうのはそのうち考えます。

````
# 変数定義
golang> らんらん cocoa 希望? "ココア"
#=> cocoa: "ココア"
````

### 複数の文

非常にわかりやすいし、";"で区切ってください。

````
golang> らんらん cocoa 希望? ぴょんぴょん;心ぴょんぴょん待ち?(cocoa) { もふもふ("カープの夢") } ふわふわどきどき { もふもふ("マジ?") }
カープの夢
````

## 第8羽 プールに濡れて 雨に濡れて涙に濡れて

## 第9羽 青山herokuマウンテン

とりあえず言語作っただけで試せないのも切ないので[テキストで投げた文字をパースして、評価するもの](http://go-lang.heroku.com)を雑に用意しました。これ自体は5分で作ったのでそのうちちゃんとしたの作ります。

Scala製のgolang-coreを、Playのプロジェクトから呼び出してパース・評価しているだけです。普通にherokuにデプロイしてるだけなので特段特別なことはやってません。

## 第10羽 対おまいら用決戦部隊、通称チマメ隊

ごちうさ1羽しか見てないという方に個人的におすすめの羽数ベスト3をご紹介します。

### 第1位「第11羽 少女は赤い外套を纏い ウサギを駆りて聖夜の空を行く」

ほんとうに大好きすぎるので[別のセクション](#11--)に分けて書きました。そちらをご参照ください。

### 第2位「第12羽 君のためなら寝坊する」

11羽でココアさんが中心になってみんながラビットハウスに集まるお話のあとに、12羽では人間関係をチノちゃん・ココアさんに一気にフォーカスしてくるお話の配置になっています。まず冒頭部の「ごちうさ」にしては珍しく穏やかなBGMと木組みの家に雪が降り積もっているシーンに心を動かされます。

そして何故かおなじ場所で寝ていたココアさんをチノちゃんが起こします。個人的にはこのあとの寝ぼけて起きないココアさんに対して、セリフなく口元を動かすシーンが印象に残っています。第4羽の冒頭も口元にフォーカスを当てた演出がありましたが、とてもすきです。
さて、12羽はチノちゃん・ココアさんの2人の空間に始まり、そこから広がる関係を描いたあとに、再び2人の空間で終わります。「ごちうさ」は日常系の作品として例に漏れず中身がないと言われたりすることもありますが、こういう視点に立って1羽の2人と12羽の2人の空間を比較すると少なくとも考えさせられる所はあるのではないでしょうか。とはいえ作品の楽しみ方は人それぞれなので、みなさんのお好きなように「ごちうさ」を見て色々な視点を共有できたらもっと楽しいなと思います。

### 第3位「第4羽 ラッキーアイテムは野菜と罪と罰」

冒頭のシーン本当にたまらないです。全羽を通して瞬間的な最高のシーンは第4羽の9秒〜16秒だと思っています。これは言葉では形容しがたい故に、是非配信サイトやBlu-rayでご覧頂けると幸いです。またただでさえかわいいキャラクターが、個人的に4羽はさらにかわいく描かれている気がします。特に顔のアングルがたまらないです。

## 第11羽 少女は赤い外套を纏い ウサギを駆りて聖夜の空を行く

第11羽は「ごちうさ」の中でも本当に大好きな回です。まず冒頭のクリスマスマーケットの光景から溢れ出る、きらきらした雰囲気が堪らないです。私は実際にヨーロッパのマーケットを10ヶ所以上回っていますが、そのときの空気感をはっきりと感じさせてくれます。クリスマスの時期には行ったことがないので、是非この時期のコルマール・ストラスブールを訪れてみたいです。

原作でクリスマスマーケットの雰囲気にテンション有頂天となり走るココアさんを追いかけるチノちゃんを見て、千夜が「本当の姉妹みたい」というセリフがありますが、アニメのほうでは少し演出が変わっていてどちらも甲乙つけがたいくらい素晴らしいですね。

原作のほうがもともと、お話の流れが繋がるようなコマが並んでいるのもあるのですが、それに甘んじず丁寧にアニメ化している姿勢が伝わってきます。

このあたりの「ココアちゃんは十分サンタさんよ」という千夜のセリフと「マジなパンだからね!本気でかわいこぶってるんだよ!」ってココアさんのセリフが本当に好きですね。あとアニメで追加されたココアサンタの「ファッ!?ファッ!?ファー!」ってセリフはいったい何なんですかね?すごい好きですけど。

その後は限定パンケーキが好評でめずらしく混み合うラビットハウスに場面は移ります。もうここからのテンポ感のよさは最高です。15:00からは軽快なBGMと止め絵を入れた演出です。2羽でも思ったのですが、「ごちうさ」は本当に止め絵の使い方が丁寧です。ただ絵の枚数を減らすことを目的とするのではなく、プラスの方向に利用しているあたりが好感持てますね。

最後はココアサンタさんがチノちゃんの枕元にプレゼントを置きに行ったまま寝落ちしてしまうシーンです。チノちゃんにとって本当に欲しかったプレゼントは実はココアさんだったのかもしれませんね。このシーンは、寝ているココアさんを見つめたあとのチノちゃんの表情と明るい声が非常に魅力的で着目したいポイントです。1羽と比較して明確にチノの表情や声がだいぶ明るくなりましたね。本当に心温まります。

## 第12羽 君のためなら寝坊する

[「ごちうさ住民Advent Calendar 25日目」](http://www.adventar.org/calendars/439)に参加していただいた方、記事をご覧になっていただいた方、そしてごちうさを生み出してくれたKoi先生と芳文社さん、アニメの制作の方々などに改めて感謝です!

2014年は「ご注文はうさぎですか?」を通して様々な出会いがあり、この作品に本当に支えられ生きてきた年だと実感しています。ごちうさは私にとって最高のクリスマスプレゼントです。ほんとうに素晴らしいクリスマスプレゼントをありがとうございます。

Merry, Christmas!