ストーリー展開を評価関数で定式化する

0.はじめに

このページは二次小説を考える際に思考を整理するための方法をまとめたページです。
具体的には主人公とヒロインのラブコメ小説をつくるために、別の切り口から開拓しようという内容です。
……ですが、思いもよらず堅苦しい内容になってしまいました。スイマセン。

1.物語の定式化

物語はページ経過とともにある結果(結末)に収束する関数で表せます。(図1)

図1 物語を定式化してグラフにする

結末は一定の値で示されます。「王道」と呼ばれる展開ならば、「正義で悪を倒す」とか「最後はみんなで大団円」などです。
邪道の場合は王道展開とはぼぼ逆の内容に収束するでしょう。
どちらの場合にしても、結末に向かって話が進むのは同じです。

では、面白い話と退屈な話の違いは何でしょうか?
結末の違いでしょうか? 確かに物語の結末は面白さを決める要素として大きいですが、それも要素の一つでしかありません。
たとえ結末が同じだとしても、話の展開しだいで話は面白くも退屈にもなるのは周知の事実でしょう。つまり、話の展開が重要になってきます。

では、物語を関数で表したとき「話の展開」というものは何にあたるのでしょうか?
これは関数のとる値の変動に相当します。
言い換えれば、この「関数の良し悪し」が話の面白さを決定する要素になるのです。

この関数をここでは「物語の評価関数」と呼ぶことにします。

まとめ(1) 物語は結末に向かって収束する関数である。関数の良し悪しで話の面白さが決まる。

2.定式化するメリット

わざわざ手間をかけて物語を関数にして評価する意味は何でしょうか?
それは以下のようなメリットが考えられるからです。
盛り上がりが視覚化できれば、物語全体での中だるみの箇所を特定してテコ入れしたり伏線の配分を調整することができます。
また、過去の話を分析して話の面白さとは何かを解明できることでしょう。
さらには今後、面白さというものが解明されれば、面白い話を自動的に制作するプログラムを作ることも可能になるかもしれません。

物語の内容を定式化して評価するという行為は「そこに含まれる普遍的な面白さや感動とは何か」を問うことでもあるのです。

……建前は良いから本音はどうなんだという声が聞こえてきそうですね。

上記のような壮大な夢を語ったところで物語ができるわけではありません。
メリットがたくさんあろうが物語が作れなければ使い物にならないわけで、

やはり究極の目標は
「主人公とヒロインのラブコメ小説」が湯水のごとく湧き出てくるようにしたい……これにつきます。

この定式化というのは、思考を整理するための下準備と考えておいてください。

3.設定を数値的に整理する

まずは世界観構築の話です。このなかで定数化しやすいように世界観を見直します。
見直す項目は以下の様なものがあります。
厳密に言えば1と2の項目は物語を関数化して評価する意図とは異なります。
ただ、物語を作る上で人間が感覚的に美しいと感じるものを取り入れるのは悪いことではないでしょう。
また、固定概念として設定を用意して後から打ち破ることを前提とした話作りも可能となります。

Enum(列挙型)の例

悪の組織 クリスタル

の刺客 ガーネット
の刺客 紫水晶
の刺客 ブラッドストーン
……

元ネタは誕生石。列挙型に設定して法則性を持たせています。

Enum設定を抜け出した例

基本、設定に合わせて物語を進めていきますが、あえて法則性から抜け出すことでミスリードを誘うことが可能となります。

まさか、そんなはずがないじゃないか! 悪の組織クリスタルに十三番目の刺客が現れるなど……!?
(刺客が12人しかいないはずだという概念を覆し、意外性をもたせる)

4.物語を支配するパラメータ

ここも設定に関係する項目です。登場人物と舞台設定にあたります。
評価関数を支配する独立変数(パラメータ)としては、以下のようなものが考えられます。
後にイベントを処理する関数のために設定を用意しておきます。

Field型とPerson型がもつプロパティの例

(+ は外部に公開できる情報、- は公開しない情報のことを示す)

型 Field

  • + 場所
  • + そこに置かれているモノ
  • + 状況(音、温度、匂い、雰囲気)
  • - 裏設定

型 Person

  • + 設定(名前、性格、容姿……)
  • + 感情
  • - 秘める想い
  • - 裏設定

Personの設定例

// 主人公と出会った時点
  • + 名前 = 市ノ瀬香耶(いちのせ かや)
  • + 設定 = 彩桜寺家の非常勤メイドとしてアルバイトしている。普段は普通の女子中学生。聖歌隊に憧れており彩桜寺に教えを請うためにメイドに志願した経緯があるが、残念なことにセンスが無く聖歌隊への道のりは険しい。
  • + 性格 = 大雑把な性格、脳天気。
  • + 口癖 = いやぁ~~ですよ。
  • + 容姿 = 髪ストレート(サラサラ)肩ぐらいまで伸びてる。大抵メイド服。後は学園の制服か寝間着。私服は超レア
  • + 日課 = 地域ボランティア(ゴミ拾い)
  • + 感情 = 痴話喧嘩に巻き込まれている男(主人公)に興味津々
  • - 行動原理 = 人間は汗をかいた分だけ報われる、そうでなきゃ世の中おかしいよ!
  • - 裏設定 = 麻耶の妹
物語を通して変わらない設定はそのままに感情や好感度などの場面によって変化する項目は場面ごとに更新します。

これらのパラメータは物語がどのように進むかを決定づける情報です。

今後は物語が作者の意図したものとなるようにパラメータをいじることと、数々のイベントを起こす関数で状況を設定することで物語の結果を操っていきます。
作者が物語を作るという考えとは別のものと考えたほうがいいでしょう。

物語を作るというより、パラメータを調整し、検討した結果が物語として成り立つように試行錯誤しているに過ぎません。

パラメータを関数で処理するとは具体的には何をすることなのか?

設定という舞台の中でキャラクターを演じさせる。作者は傍観者のごとくキャラクターの演技を眺め、結末を知る。
その結果が気に入れば採用。気に入らなければパラメータを変えてリセット。
最終的にベストな結果がでるまで試行錯誤する……という一連の流れを処理することです。

5.関数化されたものでエピソードを紡ぐ

4章の最後に「物語の作者はパラメータを調整し、検討した結果が物語として成り立つように試行錯誤しているに過ぎない」と書きました。
言い換えると、作者はただキャラクターが舞台の上で演じているのを記録するというスタンスです。
では具体的にキャラクターにどのようなイベントを与え、どのように考えてエピソードを作成すればいいでしょうか?

関数という概念でストーリーを考えてみる

// ビジュアル(妄想)の情報

状況:Field
夕暮れの学園の教室。西日が机を照らし出している。
女の子をずっと探していた主人公が思い出した場所。
女の子はグラウンドを眺めている。グラウンドからは部活動の掛け声がする。
ちょうど逆光で女の子を直視しづらい。
風がそよぐ。女の子の髪がそよぐ。
女の子の顔はよく見えないが、泣いているようにも……見える

// 与える設定
主人公:Person
  • + 設定 = 主人公は自らの死亡フラグを感知することができる
  • + 性格 = 真性の面倒くさがり。結果的に楽するためならフルマラソンも厭わない。
  • + 口癖 = 世の中には本当にどうしようもないことだってあるんだぜ
  • + 容姿 = くせっ毛←本人は気にしている
  • + 日課 = リスクを避ける
  • - 行動原理 = 最悪の事態は避けなければならない。絶対に!
  • - 裏設定 = 過去にとても酷いことがあった。
女の子:Person
  • + 設定 = 突如、学園に転入してきた女の子。
  • + 性格 = 内気で泣き虫
  • + 口癖 = 嘘ですよね?
  • + 容姿特徴 = フワフワした長い髪
  • + 日課 = 猫鑑賞
  • + 感情 = 独りぼっちで寂しい
  • - 行動原理 = 激流に身を任せ、ひたすら自分の居場所を探る
  • - 裏設定 = 過去に主人公と会ったことがある
// ラブコメ展開の関数を適用

Story = F (主人公 :Person, ヒロイン :Person, 状況 :Field)

// プロットに落とす前にキャラクターの設定の検証や話の掛け合い具合などを検討してみる

「グズっ……手作り弁当好きなんですか? 正直に答えてください!」
「嫌いではないな」
「……二人分も食べてました」
「食べないと『本当に』殺されるからな」

リアルに死の危険が迫っているんだ。仕方がない。

「嘘……ですよね?」
「わりと真面目に言ってるつもりだったんだが、実際のところどうなんだろうなぁ」

世の中には知らなくてもいいことはたくさんある。

「あの……もし、もしもですけど、明日からお弁当が三人分になったらどうしますか?」

なんて恐ろしいことを! せっかく妹が朝早く手作りしてくれた弁当を残すのは論外だし、凶暴女が持ってくる弁当を食べるのを拒否すれば死亡フラグがたってしまう。

「ただでさえハイカロリーな食生活を送っているんだ。俺の寿命が縮まるな」
「……低カロリーならいいかな、寒天とか?」

なにか彼女が呟いているが、残念ながらよく聞こえない。

「お腹でも空いたのか? 食堂でも行くか?」
「えっ、な、何でもないです!」

不意に覗きこんだ格好になってしまった。一瞬にして彼女の顔が赤く染まる。

「そう言えばまだ食堂を案内してもらっていなかったですよね? これからぜひ案内してください!」

俺の腕を引っ張る女の子。その先は……彼女が知らないはずの食堂だ。

「ちょ、お前絶対、食堂知ってるだろ!」
「知りませんって! ささ、行きますよ! 食堂!!」

なんか、彼女の変なスイッチを入れてしまったらしい。
俺は半ば引きずられるような形で彼女の学内探検に付き合うのだった。
設定を元にこのような文章ができあがりました。
状況説明が何もないので後で推敲しないといけませんが、設定が固まる前にキャラクターを試しに動かしてみるのが目的なのでこれでよしとしましょう。
実際はこの後エピソード単位で推敲され、他のエピソードとつなぐ作業の過程でエピソードごとが互いに関係して話の内容が微妙に変化することになります。

さて、ここからは上で使用したラブコメ展開の関数のようなイベントを起こす関数をいくつか紹介します。
この関数が示しているのは、基本原則くらいのもので当たり前のことしか示されていませんが、書き出しの状況を整理する程度には役に立つでしょう。
分かりやすいように第1引数を主人公にしていますが、物語を描く際に別キャラを起点にした場合はそのキャラクターに適用されると考えて良いでしょう。
関数の引数は舞台に必要な設定と考えることもできます。

一人称での描写

Story = F (主人公 :Person, 状況 :Field)

バトル

Story = F (主人公 :Person, 敵 :Person, 状況 :Field)

ラブコメ展開

Story = F (主人公 :Person, ヒロイン :Person, 状況 :Field)

三角関係

Story = F (主人公 :Person, ヒロイン1 :Person, ヒロイン2 :Person, 状況 :Field = ヒロインたちが対立する構図)

ヒロインのデレ発言

Story = F (主人公 :Person, ヒロイン :Person, 状況 :Field = 主人公がヒロインを照れさせる)

ヒロイン胸キュン描写

Story = F (主人公 :Person, ヒロイン :Person, 状況 :Field = 驚きを隠せないほどの唐突な主人公の好感度UPイベント)

涙を誘う描写

Story = F (主人公 :Person, 状況 :Field = 最悪, 時間 = 思いがけない優しさに気づいた瞬間)

敵との共闘

Story = F (主人公 :Person, 敵 :Person, 状況 :Field = 互いに不利益となる状況)

ミスリードを誘発させる

Story = F (...法則性を乱す不確定な要素(:Person, :Field) )

6.エピソードを構成する関数は互いに独立

さて、5章でエピソード単体を関数を使って紡ぐ方法を紹介しました。
「湯水のごとくエピソードが生まれてくる」状況には程遠いですが、ひとまず単体のエピソードを作りあげるところまではできました。

このようなエピソードをたくさん作って繋ぎあわせてゆけば、(理論上)壮大な物語が完成するわけですね。
それを定式化してみましょう。エピソードをつないで完成する物語は以下のようになります。
各エピソードをEp1,Ep2,Ep3...とすると、物語Storyは次式で表される。

Story = Ep1 + Ep2 + Ep3 ...

しかしこれだけだと、エピソード同士を繋いだ時に不自然な流れになることがあります。
物語が不自然な流れで進むと読者は「違和感」を感じ、思考の流れが阻害されます。(図2)

図2 不連続な繋ぎは読者に違和感を与える

この違和感を意図的に与えるのでなければ、自然な流れになるように物語を繋げるようにしなければなりません。
そこで必要なのが「前後のエピソードの関係性を表すパラメータ」ということになります。
物語のエピソードEp1,Ep2,Ep3...を繋げるパラメータP12, P23, ...を与え、物語Storyを得る。

Story = F(Ep1, Ep2, P12) + F(Ep2, Ep3, P23) ...


具体的には作者が話の繋ぎを自然にするために、設定を見なおしたり、状況を変えて検討する作業を行うわけです。
この「前後のエピソードの関係性を表すパラメータ」の最大の特徴は状況によってキャラクターの行動を変えるほどの強力な性質を持つということです。
シリアスにご退場願いたい時は強引だけど別ヒロイン乱入させて混乱させればOKというような思考はこれにあたります。

章をまたいで区切りつける(喉元超えれば熱さを忘れる作戦)

物語の都合上、どうしても展開に不連続なものがでてしまうことがあります。
そのような場合には、章を変えて強制的に区切ることで違和感を演出の一部にする手があります。
ただ、本来不要な状況説明が頻出してしまうことと、場面切り替わりにより読者が混乱するリスクもあるので多用はしないほうがいいでしょう。

7.グラフの仮評価(プロット)

物語のプロットができた時点で評価関数を評価してみましょう。

評価関数に落としこむには、各パラメータの観点からグラフを作成します。
値に関しては主観的になってしまいますが、読者が得られる情報をパラメータごとに評価します。

評価関数のパラメータ

// プロット
// メイン登場人物 (主人公、オロオロちゃん、凶暴ちゃん、妹)

1-1.世界観説明

1-2.昼食で死亡フラグ発生→回避

1-3.転入生の案内&死亡フラグ乱立

2-1.俺の妹は可愛いが世界一怖い

2-2.主人公に死亡フラグが見えるようになったワケ

2-3.弁当量の増加をもって妹から愛されていると感じてしまう兄は(ある意味)幸せものである

3-1.「凶暴=女」という公式が当てはまる人間

3-2.擬似デートと死亡フラグ

3-3.誰にでも心の闇は存在する

4-1.主人公、現状を調査する

4-2.主人公、彼女のために戦う

4-3.恋と修羅場と死亡フラグ

5-1.リアルでの三つ巴の戦い

5-2.主人公死亡!? 結局、死亡フラグとは何だったのか?

評価サンプル 冒頭の世界観説明(プロット1-1)


知識グラフが急激に上がる(左図)  ラブコメが先導して知識を引き上げる(右図)

世界観の説明を一気に行ったために、単調な展開になってしまっています。
もしかしたら、説明ばかりで飽きられてしまっている可能性もあるのでヒロインを絡めラブコメ展開を入れ世界観を伝えるようにプロットを変更するなどの対策を行います。

(プロット2-2)の伏線の配置も同様です。
伏線となる情報をラブコメ展開でごまかしてみたとすれば(おそらく)右図のようになるのでしょう。
また、伏線を擬似回収させることにより読者の意識を分散させました。

ただし、「明らかに伏線っぽいんだけど、それがどう繋がってくのか不明なんだよなぁ」と感じるくらい露骨な伏線でなければ後々の印象は薄いので注意しました。

8.パラメータの割当の最適化(推敲)

プロットが上がったら後はひたすらエピソードを書いて、推敲すればいいわけですが実際のところは様々な問題が発生します。
ここからは推敲作業について扱います。

関数化してエピソードを書くことを考えると何をすることが推敲にあたるのでしょうか?
そもそも推敲って何をやることでしょうか?

文章を良くする? どのように?
読みやすければいいのか?
それとも面白ければいいのか?
なら、具体的にどうすれば推敲したことになるの?

こんな、疑問が後を絶ちません。

正直なところ推敲で何をやっていいのか分からなくなってきましたので、以下のように分類してみました。

// 大きな部分での推敲

// 文章単位での推敲

推敲作業関数

推敲でどのような作業をするかという部分は具体的になりました。
次は推敲という作業を関数化するとどうなるかを考えます。
推敲により新しい関数Storyを得る

Story = F(...:推敲作業項目)

設定を変更するときに行う思考法

推敲は関数のパラメータを微修正する、イベントの関数を切り替える、などの操作にあたります。
しかし、すぐに思考を切り替えるのは難しいですし、パラメータを数値管理したとしても、ラブコメ分が10%増した文章って一体何だ!? となるでしょう。

そこで、はさみうち法でちょうどいい具合を探ってゆくのはどうでしょうか?
まずは、極端な例としてラブコメ度100%とした場合どうなるかを考えてみます。
次にラブコメ100%を設定したら、現状と100%を足して2で割った50%を作ります。
同じようにあと2回繰り返して 25% → 12.5%(大体これくらい)
ラブコメ度が約10%増しのエピソードができあがりました。

実際には評価方法も個人差があると思いますので、あまり有用ではないかもしれませんが、ひとつの目安にはなるかと思います。

困ったらとりあえず20%ルールを適用

世の中は20%ルールと呼ばれるものが多いような気がします。
比率配分で悩むことは物語の制作の観点から本末転倒です。そもそも客観的な値ではないのですから割りきって適当に割り振って推敲して調整しましょう。
そこで、配分に迷ったら20%ルールを適用するのはいかがでしょうか?
20%ルールには以下のようなものがあり様々な分野で(説明としてはインパクトがあるので)使われることが多いのです。

20%ルールを適用した例

9.終わりに

いかがでしたでしょうか?
物語を関数化するメリットばかりを挙げてきましたが、最後にデメリットを挙げておきましょう。
要するに「使い物にならない」代物である可能性が高いというわけです。

重要なのは『書いて読む』このサイクルをどれだけやるか(できるか)ですからね。
それを理解した上で、ひとつのツールとしてこの手法を選択するのであればこれまでとは別の切り口から役立つこともあるかもしれません。

本音の部分を繰り返しますが、

「主人公とヒロインのラブコメ小説」が湯水のごとく湧き出てくるようになるのが究極の目標

であり、できるようにならないかなぁ~と思いながらこのページを作成しました。
そんな上手い方法あったら自分が使うよと思いつつ、もし皆さんの役に立つことがあれば幸いです。

にゃんくるオリジナル小説、二次小説の一覧