未来はあまりに遠いし、おれはもう待てない

SF小説やプログラミングの話題を中心とするフジ・ナカハラのブログ

SF創作講座第4回を終えて

一昨日、ゲンロン 大森望 SF創作講座 第3期 の第4回講評会が開催された。 今回のゲスト講師は、円城塔@EnJoeToh と、河出書房新社伊藤靖@itouy だ。

第4回の課題は「拘束下で書きなさい」というもので、31編の梗概が提出された。 私は『interesting_story.nako3』というタイトルのものを書いた。 この講座では、審査員が提出された梗概の中から3編を選出し、選ばれた受講生は次回までに実作を書くことになっている。 今回、私の作品は選出されなかった(後で書くが、選出される気もなかった)。

また、第3回課題「生き物をつくってみよう!」で選出された3編と自主提出13編の実作講評も行われ、10点+未提出者14名分の14点の計24点が各作品に割り振られた。 詳細な結果や各作品の内容については、課題ページを参照してほしい。 今回、私は実作を提出していない。

課題について

あらかじめルールを決めて書け、というのが今回の課題である。 具体例として、次のようなものが挙げられている。

「ひらがなだけで書く」「カタカナを使わない」「読点を使用しない」「約物を利用しない」「改行しない」といった、文字に関するものでも構いませんし、「書簡体で書く」「手記のように書く」「話しかけるように書く」「擬古文で書く」「方言で書く」「自作言語で書く」といった文体に関するものでも構いませんし「人称代名詞を用いない」「現在形だけで書く」「五七調で書く」「従属節を利用しない」といったものでも構いません。「一行の文字数がフィボナッチ数列のように増えていく」とか「文頭の文字を拾っていくと、別の文章になる」であるとか「10文字×10文字の格子をいくつも埋める」、「使える文字の種類が一つずつ減っていく」でも、「風景描写しかせずに人物はでてこない」等、とにかくなんでも構わない

なんでも構わないとはいったものの、『文字渦』1を書いた円城塔氏のことなので、何かしら文章にまつまる厳しい制約が期待されていることは明らかである。

私がこの課題を聞いてすぐに思いついたのは、「プログラムとして実行可能な小説を書く」というものだった。 円城塔氏もプログラマであることを知っていたので2、思いついた瞬間、ウケるだろうなとも思った。

ただ、これは決して簡単ではない。 プログラミング言語は、機械への命令を記述するための言語であって、出来事や感情を記述するようには作られていない。 また、プログラミング言語形式言語であり、自然言語にあるような曖昧性が排除されている。 文章に課す拘束としては、かなり厳しいものだろうと思う。

この拘束は、ネタとして面白いが、小説として面白いものは書けそうにない。 とはいえ、プログラミング言語の上でどのくらい自然な日本語が書けるか試してみたい気持ちもあったので、とりあえず調べてみることにした。

はじめに考えたのは、RSpec のように自然言語っぽく書けるDSLRubyで定義することである。 しかし、これだとRubyの文法からは逃れられない。 スペースや改行が特別な意味を持つ一般的なプログラミング言語は、自然な日本語を書くのに不向きである。

そこで、日本語プログラミング言語に目を向けることにした。 いくつかの候補があったが、私の目を引いたのは「なでしこ3」である。 「。」が文の区切りとして用いられること、比較的自由な位置に「、」が挿入できること、スペースやカンマではなく「と、を、が」といった助詞が区切りのためのキーワードとして用いられていること、ダブルクオートだけでなくカギカッコも文字列リテラルとして使えることなど、プログラムを日本語っぽく書くための工夫が数多く見られた。 何より、AltJSとして実装されており、読者がブラウザですぐに実行結果を確認できる点が気に入った。

なでしこ3を使えば意外と書ける気がしてきたので、今回は実作を諦めてウケ狙いでいくことに決めた。

作品について

なでしこ3で書くことを決めるまでは早かったが、8・9月は忙しかったため、実際に取り組み始めたのは締切3日前の月曜日である。 月曜になでしこ3の文法を勉強し、火曜に日本語でプロットを書き、水曜になでしこ3で書き直し、木曜に見直して提出した。 平日で仕事もあったのであまり時間は取れなかったが、選出を目指しているわけではなかったので気楽にやれた。

プログラムに関しては、なでしこ3を書くのも、自然言語っぽくプログラムを書くのもはじめての試みだったので、限りなくシンプルなものにしようと考えた。 最も単純なプログラムの1つに、"Hello, world"を表示するというものがある。 そこで今回は、何かしらの文字列を表示するだけのプログラムにすることにした。

ストーリーに関しては、「コンピュータに『面白い』と言わせる」というアイデアから、可能な限り短いものをあしらった。 あまり長い話だと、なでしこ3への翻訳に失敗するかもしれなかったからだ。 問題は、SF創作講座なので、SFの物語でなければならないことである。 これは、小説を評価するAIを登場させることでクリア(?)した。

そして、日本語で書いたストーリーをなでしこ3へと翻訳していった。 日本語の文章から一文、なでしこ3エディタにコピーして実行する。 するとエラーが出るので、文章を書き直したり、関数を定義したりしてエラーが出ないようにする。 そうやって繰り返しなでしこ3のエラーを潰していくと、なでしこ3で書かれた物語ができあがる。 一番難しかったのは、「は」が代入のキーワードとして使われているので、その左側に関数の引数区切りのキーワードとなっている助詞を持ってくることができない点である。 翻訳がどう難しいかは、実際に なでしこ3簡易エディタ で任意の日本語を実行して試してみてほしい。

ちなみに、プログラムの目的である「『面白い』と出力させる」は最初の一文で完了している。残りはプログラムとしては意味のない蛇足である。

講評について

案の定、円城塔氏(のみ)の丸をいただくことができた。 「これは丸をつけざるをえない」との評で、まさに狙い通りである。 大森さんにも「問題作」と紹介いただいた。 今回の作品にとっては褒め言葉だ。

意外なことに、「40枚書けるか」という点も話題に上った。 万が一選出されれば2000字程度のショートショートくらいは書くつもりだったが、40枚はとても書けそうにない。 あまりうまく受け答えできた気がしないが、この作品はこれで完成であるという話をした。

とはいえ、今回は色々と手探りだったので、プログラムとしても物語としても最低ラインを目標に置いていた。 物語としてもっと読みやすく分量のあるもにしたり、プログラムとしてもっと面白いものを仕込んだりと、工夫の余地はまだまだある。 もしまたこういった手法で小説/プログラムを書く機会があれば、そのあたりをチャレンジしてみたい(当面やる気はないが)。

また、小説を書くためのプログラミング言語を作るのはどうかという話もあったが、これはあまりいい方針とは思っていない。 なぜなら、ご都合主義的にプログラミング言語を設計できてしまうからだ。 仮にチューリング完全プログラミング言語をつくったとしても、ふつうの日本語だと構文エラーが起きないような文法にしてしまえば、容易に日本語の文章を書けるだろう。 読者がプログラムの結果を再現するのも難しくなるいう問題もある。

最後に、SF創作講座2期の受講生でゲンロンSF新人賞優秀賞の麦原遼さん @rhgm_hrk にも声をかけていただいたのが嬉しかった。 その際、Quine Relay のように実行すると次の物語が出力され、さらにそれを実行すると次の物語が現れ……、とそれが続くようなものが書けると面白そうだという話をした。 ただ、なでしこの単純なQuineは Quine Museum にすでに があり、これを物語として読めるものにするのはかなりの技量が求められそうだ。

次回について

次回の課題は「来たるべき読者のための「初めてのSF」」である。

ジャンル小説特有のお約束が通用しない白紙の読者を念頭に置いて、もっとこんな小説を読みたいと思わせるような、入門的で吸引力のある新作SFを書いてほしい

過去の記事でも書いたが、私がSFにハマるきっかけになったのは、大学時代に読んだジョージ・オーウェル1984年』である。 『1984年』のようなものが書けるとは全く思わないが、あの頃に受けた衝撃を思い出して書いてみようと思う。


  1. 私はまだ読んでいないが、 https://togetter.com/li/1256879 で大変な作品であることを知った。

  2. https://github.com/EnJoeToh/