Tailwind.css + classNames() を型安全に扱う TypeScript Language Service Plugin を書いた
とりあえず動いた。プロジェクト内の tailwind.config.js を見て classNames() に tailwind のクラスではない文字列が渡ったらその場で警告する pic.twitter.com/587SrTx8h9
— f_subal🍚🐿 (@f_subal) 2020年8月14日
名前は irontail です。出オチです。
モチベ
業務で Tailwind.css を使う機会が増えてきました。
自分のチームでも少しづつ使ってますが、他にも社内の古いプロジェクトでン年前の CSS で消耗している人々に助け舟として勧めたりしています。
記述量が少ないとかより、過去の CSS を消し去って低いコストでまともにするツールとして好んでいる面があり、React プロジェクトでの CSS Modules からの移行先として、個人的には styled-components よりも好んで選択しています( React 非依存なのも知見の共有しやすさの面から好ましく感じています )。
ただ、文字列クラス名を React コンポーネントに書くことについては思うところもあって、型安全性の面では完全に退行しとるな〜という気持ちもありました。補完については VSCode ほかエディタ向けの拡張で対処できますが、typo や config の変更に強いツールが欲しいとは常々思ってました(新規開発でなく、上で述べたような移行先としての選択なのでなおさら)。
先行例とか
Tailwind を型安全にする試みには一応先行例があって*1、tailwindcss-classnames というそのままドンピシャなライブラリがあります。
これは Tailwind のデフォルト設定で提供されるクラス名を Union Type にした型定義ファイルを提供しています。また taiwind.config.js を上書きしているプロジェクト向けには型定義を生成する CLI ツールも提供しており、プロジェクトごとのカスタマイズにも対応しています。そして classnames の代わりに tailwindcss-classnames を import してコンポーネントで使えば、決まったクラスしか渡せない(渡さないとコンパイルエラーにできる)というわけです。
当然私も最初はこっちを試したのですが、いくつか不満が出てきました。
補完が劣化する
tailwindcss-classnames は型定義を提供するので、当然入力時にクラス名の補完が効きます。一方これは TypeScript のただの文字列補完なので、VSCode 拡張機能にあったような色やスタイルのメタ情報が補完から消えます。これは明らかに退化しています。
型エラーは嬉しいが、補完については VSCode Intellisense より明らかに後退してるので、補完には使いたくない… pic.twitter.com/STGVV9RIl2
— f_subal🍚🐿 (@f_subal) 2020年8月8日
補完については最初からエディタ拡張に任せる方がベストプラクティスなので、純粋にクラス名のチェックだけをやる仕組みが欲しいと思いました。
classNames などからの乗り換えが必要になる
tailwindcss-classnames を使っていると、tailwindcss-classnames が提供する classnames 関数を使うのが必須になります。
これは、元々 classnames や clsx などを利用しているプロジェクトに後から tailwind を入れるというケースで乗り換えコストが発生します。
そんなことしなくても、classNames() 関数の呼び出し箇所をいい感じにチェックする仕組みがあれば良さそうだと思いました。
tailwind.config.js を変更するたびに CLI を叩く、みたいのがそもそもダルい
もちろん watch していい感じに更新とか走らせればいいんですが、意識せずに変わってくれるならその方がよい……まで書いて気づいたんですが、多分自分は CLI を叩くのが嫌なのではなく、吐き出された型定義をリポジトリにコミットするのが嫌っぽいのだなと思いました( CSS Modules にもクラス名型定義を吐くやつとかあったけど面倒に感じることが多かった )。なのでコミットしなくて良いソリューションが欲しくなりました。
TypeScript Language Service Plugin として実装
TypeScript には Plugin という概念があります。プラグインと言っても Babel のようにコンパイル結果に介入するものではなく、エディタを介して編集中の補完やエラー検知に介入する仕組みです。
Writing a Language Service Plugin · microsoft/TypeScript Wiki · GitHub
著名なユースケースとしては Angular や GraphQL など、文字列テンプレート内で型エラーを出すために使われることが多いようですが、今回これを特定の名前の関数に渡る引数へのチェックに使っています(筆者は TypeScript Language Service Plugin の開発は初めてです)。
TS Plugin として作ることで TS こそ必須になりますが、特定のエディタに依存しないエラーチェックをリアルタイムに行う仕組みが提供できます。
しくみ
…と、こうしてできたのが冒頭の irontail ですが、詳しい仕組みを説明します。
Language Service には getSemanticDiagnostics という関数が生えています。これはファイル名を受け取って、そのファイル内で起こったエラーを配列で返します。早い話、これの返り値を上書きすることでカスタムの型エラーを作り出すことができます。
実際にカスタムのエラーを作る仕組みですが、だいたい以下の手順です
- プロジェクト内の tailwind.config.js を読む。あったらプロジェクト内の tailwind と、その tailwind が依存している postcss を require し、コンパイルする
- コンパイル結果の css を postcss-selector-parser でパースし、登場するクラスをすべて配列に詰めて返す
- getSemanticDiagnostics で渡ってきた対象の TS ファイルの AST を走査し、classNames/clsx/classnames という名前の関数呼び出しを発見する
- その引数が 2. で得られた配列に含まれないものだった場合、カスタムのエラーとして返す(そのファイルにもともとあった本来の型エラーとマージして返す)
2. のパースの仕組みはほぼ完全に VSCode 拡張のコード を真似しました(色とかのメタ情報を取る処理は余分なので削りたいなーと思ってます)。
これで冒頭の動画の仕組みが完成します。ちょっと余りにパースとコンパイルをしまくってるので案の定重いです。特に初回起動を速くしたいですね。
開発時にハマったポイント
Language Service も Compiler API もすべてが初めてで問題の切り分けに苦労したのですが、最も大変だったのはそもそも getSemanticDiagnostics が Promise を返せないことでした。要するにカスタムエラーを組み立てる処理内で非同期処理を使うことは基本的にできない、全てを同期的に書かないといけないということです(非同期処理を許す Issue は立ってるようですが、長いこと Open のままです)。
一方、postcss のコンパイル処理は非同期処理です。使っているプラグインがたまたますべて同期的で書かれていれば同期的なコンパイルも可能っぽいのですが、tailwindcss がそういう作りではないので困りました。最初にこれに気づいたとき、完全に詰んだと思って一度諦めかけました。
しょうがないので、postcss のコンパイル結果を一度どこかで覚えておき、次にエディタから呼び出しがあったときにその結果を返すという方針にしました(つまり、パースが終わってないときはカスタムエラーを返すの諦めてそこで中断)。
ただ postcss のパース結果は JS のクラスインスタンスで、JSON にシリアライズしてどこかに保存というのも難しかったので、泣く泣くミュータブルなグローバル変数(というかクラスの readonly でない static フィールド)にパース結果をキャッシュする形になりました。Language Service で非同期がやりたいとき普通はどうするのが良いのでしょうか…。
展望
さきほど高速化という課題を挙げましたが、現状そもそも classNames や clsx に渡せる様々な引数の形式に現状対応できてません( classNames('flex', isHoge ? 'hoge' : 'fuga', { foo: isFoo })
← こういうやつ。今は StringLiteral しかチェックしてません )。
この辺りをクリアしたらまぁまぁ実用性が出てくるのかなと思います。
まとめ
Tailwind.css を型安全に扱う仕組みを TypeScript Language Service Plugin として実装してみました。既存の tailwindcss-classnames と比べ、CLI で型定義を生成する必要がなく、元々使われている classNames や clsx の呼び出しにも対応できるツールです。
tailwind.config.js をモリモリ変更しながら使っている React プロジェクトなどでお役に立てれば幸いです。
まだ全然機能としては完全ではないので、Issue やフィードバックもありましたらぜひどうぞ
*1:twin.macro も型安全の先行例として挙げてもいいのかもしれませんが、流石に設計がやんちゃすぎてスルーしました。なので twin.macro については詳しくありません。
2019年
振り返り記事というものを初めて書く。初めてなので前年との比較とか、そういうものはナシ。
1〜3月
業務で本格的な複雑GUIをやっていた。React と SVG で文字レイヤーを線形変換(移動・拡縮・回転のみ。シアーとかはないよ)するバウンディングボックスを作る必要があり、Web フォントのローディング戦略をくんだり行列計算をしたりしていた。生まれてから一番むずかしいフロントエンドの仕事だった。
この辺の知見を社の TECH SALON とかいうイベントで発表した。これをきっかけに知り合いが増えたりした。
プライベートでは夏コミに向けて合同誌の企画を開始しはじめた。悪ノリのような募集企画で初めたので界隈でなめられているのではないかとヒヤヒヤしつつ、たくさんの人が参加表明してくださって嬉しかったです。
4〜6月
複雑GUI会というオフ会がゴールデンウィークに発生し、参加した。だいたいさっきの話をした。
id:hashrock 氏のお力によりこの記事がかなり読まれ、以降自分の名前を知らない人から「あれ、複雑GUIの人なんですか!?」と言われる機会が発生するようになった。
あとは TS Meetup の運営に参加していた。同僚が登壇するので資料作りのサポートもしてた。同じチームで2020年は TSConf JP をやります。がんばるぞ…
7〜9月
夏コミの合同誌の運営をやっていて大変だった。一つの本に漫画とイラストと小説が入り交じる本を作ろうと思うと、世の中には InDesign ぐらいしかまともな選択肢がないということがわかった。Adobe を期間限定でサブスクした。
紙の本はもうないですが BOOTH に電子版があります。よろしくね。
お仕事では複雑GUIの霊圧が消え、運用改善的な方に回っていた。Ruby on Rails プロダクトに Headless CMS を突っ込む仕事をしていて知見がたまってきた。年が明けたら何かしら発信すると思います。
10〜12月
冬コミに自分では申し込まず、フォロワーの合同誌に参加させていただいていた。サークル参加しないのはかなり久しぶりで、正直自分に対して複雑な気持ちはあるが、しょうがない。
あとはポケモン剣盾とSwitch Liteを購入した。ゲームを全然やらない人間で、そもそもポケモンを買ったのがなんと金銀ぶりだったので完全に浦島太郎になっていた。バトルタワーはダブルバトルだけマスターボール級になった。雨パは初心者でも意味がわかりやすいので、初めての構築には良かった。
Nintendo Switch Lite ザシアン・ザマゼンタ + ポケットモンスター ソード -Switch【Amazon.co.jp限定】金のボストン / リュックが先行入手できるコード 配信
- 作者:
- 出版社/メーカー: 任天堂
- 発売日: 2019/11/15
- メディア: Video Game
来年
直近は TS Conf のあれこれと技術書典と、第2回の弊社TECHFES が重なり、2月頃が修羅場になる予定。技術書を初めて書きます。コミケ2020 at GW は今のところ申し込む予定ないです。
それでは来年もよろしくおねがいします。
覚え書き: 人生の価値について
ぼくがいなくて困る人なんかいない、とも毎朝思う
僕はゴッホじゃやなんだ やっぱりゴッホじゃやなんだ
♫ ゴッホ / ドレスコーズ より
小学生の頃、僕は歴史の教科書に出てくる偉人がなぜ「えらい」のかがよくわからなかった。
当時の僕はシンプルに、死んだ後に名前が長く残るのはきっとそれ自体が価値あることなのだろうと判断した。
少なくとも善人でなくとも残れば勝ちに見えたので、彼らのやったことはどうでも良かった。
そういう疑問に当たるうちに、いつしか僕は、人生の価値は死んだ後に何年名前が残るかで決まるという考えを持つようになった。
死後 100 年名前が残った人なら 1 年で忘れられた人の100倍の価値を持つし、古代ギリシャの偉人なら2500倍だ。もしかしたら流石に正比例ではないかもしれない(だんだん増え方が緩やかになるのかも)が、ともかく死後に残った年数こそがパラメータだという考えになった。
実際、勉強をするのも、スポーツや芸術で成果を出すのも、およそ人間の努力は死後に残る年数を最大化するためのものだろうと考えるようになった。他の人もだいたいそういう目的で動いているのだろうと思っていたが、当然すぐにそんなことはないと気づいた。
とはいえ、人間やっぱり死んだら終わりなのだから、死んだ後に残った長さが最終審判になるというのは自然な尺度に思えた。たとえどんなに惨めな人生でも、死んだ後に数十年でも名前が残ればある意味「勝ち」というのはわかりやすくて好きでもあった。遅くとも中学生の頃にはぼんやりこういう発想があったと思う(ここまで考えてはいなかったにせよ)。
時間による価値
「芸術品の価値は客観的に測ることができない」と言われることがある。
強いて言えば「時の試練」、つまり「どれだけ長く歴史に残ったか」が唯一の価値基準ということになる。これと同じことが人間にも言えないだろうか。
もちろん、ある作品が長く残っていることだけで判断するのは危険であり、個々人が審美眼を持って評価するのは大切なことだ。とはいえ、当の審美眼そのものは結局時の試練を得た作品から学ばれるのだから、長く残っていくことで価値の基準になると言っても相違ないだろう。
しかしだとすると、上の考えに足りない要素は何なのか?
死後に決まる価値とは?
「人生の価値が死後に残った年数で決まる」というと、おそらく多くの人は次のように反論するだろう。
もし死後の年数でのみ価値が一元的に決まるのだとしたら、本人は自分の価値を一生実感することができないことになる。しかし、人生の価値というのものは、少なくとも当人に実感可能でなければならない。
仮に死後名前が長く残ったとして、(たとえばゴッホのような)生前ほとんど評価されなかった人物に対して上の考えは何の慰めにもならない、というものだ。死んだら終わりなのに死んだあとのことを持ち出すのはおかしいということである。
ここには二つの世界観が対立している。
まず「死んだら終わり」というのは前提とした上で、「だから生きてるうちにどれだけ楽しんだかが大事だ」という立場がひとつ。
そしてもう一つは、「死んだら終わり」ということは認めつつも、やはり「その後の影響力がどれだけ持続するかが大事」という立場だ。 なぜだか知らないが、幼少期の僕は後者の世界観を持っていたようだ。
しかし実際のところ、その価値観を受け入れたとして、自分に「何らかの歴史的な偉業を達成したい」という目標があったかと言うとどうも怪しい。それ以外にこういう世界観を持つ理由は何だろうか?
観測できなくとも価値が実在するということ
「死んだ後に何年名前が残るかで人生の価値が決まる」という立場は一つの前提を置いている。それは「ある人の人生は、死んだ後にひとつの作品(鑑賞品)になる」という発想だ。
だから、これまで述べてきた発想をもう少し穏当にすると、「人生の価値は、作品という観点で読み返したときに面白い内容を持つかによって決まる」という立場に着地する。
これは一見「生きてるうちにどれだけ楽しんだかで決まる」という考えと似ているが、イコールではない。逆に当人にとってどれだけ悲惨な人生であっても、「客観的に見て面白い内容を持つか」の方が重要だからだ。死後に他人が面白いと思うか、面白いと思う人数が何人か、に価値を置くとはそういうことである(たとえ何人なのか知ることはできなかったとしても)。
これは、「価値というものは本人の主観によって決まる」という普通の考えを前提にしていない。むしろ、人間の価値は(たとえ観測可能でなくとも)我々の認識を離れて客観的に実在するという考えに近い。いや「客観的」と言って語弊があるなら、「多数の人間の主観の集合」によって作られると言っても良い。
「ある人が死んで n 年経ったときに m 人がその人を覚えているか」。おそらくこの情報は誰一人知ることができない情報だ。しかし、その情報が何を意味するのかは我々には理解できるし、少なくとも「天国」や「死後の世界」に比べると、「ちゃんと存在する概念」だと思うだろう。
ということはもちろん、それを使って計算された人間の価値指標も、(実際誰も知ることは不可能だが)やはりちゃんと存在するといって良いのではないか。
死後の世界を信じることはなかったとしても、「死後自分を覚えている人間の数」という情報は、あきらかに存在する*1。神の存在を信じない人間にも、「自分が決して知ることができない情報」を一種の超越者と見なすことによる信仰は可能であり、それはきっと可能な宗教なのだろうと思う。
*1:これはもちろん、「死後自分を覚えている人間が確実に存在する」という意味ではない。たとえ0人であったとしても、「0人であるという情報」は確実に存在するということである。
「尊い」とはなにか―『どうして私が美術科に!?』の事例より
【NEWGAME!】遠山りん高卒入社設定について
NEW GAME! においてしばしば見逃されがちな設定ですが、遠山りんはイーグルジャンプに高卒で入社しています。
八神コウと同期(かつ同い年)であることが原作1巻で示唆されているので容易に気づくでしょうが、よく考えると違和感がある人もいるでしょう(少なくとも私は最初に気がついた時かなりびっくりしました)。
そこで本稿では、遠山りんがイーグルジャンプに入社する経緯として考えられるルートをいくつか提示したいと思います。対象者は主にNEW GAME!で二次創作を行いたい(あるいは二次創作設定に興味のある)読者を想定しています。
断り書き
NEW GAME! 初期設定集(画集『FAIRIES STORY』参照)を見ると、遠山りんはもともと中途入社設定で八神と同期にする予定はなかったことが分かります。したがって遠山りん高卒入社設定はいわば後付けであり、本来そこに深い意図はなかった、とも言えるでしょう。
とはいえ、NEW GAME!のキャラクターの過去編に興味のある人間にとってこの部分の解釈は重要な問題であり、考察に値するテーマだと考えられます。本稿の趣旨はあくまで原作の隠れた設定を予想する体のものではないことを予め断っておきます(どちらかと言うと公式にはここで書いたのよりもっと強い展開で殴って欲しいです)。
また、この記事に高卒の方をどうこう言う意図はありません。
遠山りん高卒入社設定に驚くのはなぜか
全くの偏見であることは承知ですが、遠山りんがイーグルジャンプに高卒で入社した設定に気づいた時、「えっ」と思った人は多いかもしれません。
アニメ版から加わった設定によれば、遠山りんは愛知県出身ということになっています*1。『NEW GAME!』において同じく高卒入社である八神コウや涼風青葉が東京都出身であるのとは大きく事情が異なる点です。
地方都市の女子高生が高卒でグラフィッカーとして上京するのには相当の覚悟と決意が要るはずです(遠山りんは本編でこそディレクターやプロデューサーとして描かれますが背景グラフィッカーとしての側面も持ちます)。
八神コウや鳴海ツバメのような性格ならばそれもあるかなという気がしてきますが、どちらかと言うと落ち着いた人物として描かれることの多い遠山がその枠であるのには驚かされるでしょう *2。
絵やモデリングをするシーンも本編に出てこないので、入社前にどれくらい創作に情熱を注いでいたのかという点も、八神に比べるといささか想像しにくいです。ついでに言うと篠田はじめのようなゲームオタクらしさも描かれないので、とにかく動機が見えにくいという八方塞がりな状況に思えます。
こうした現状を踏まえて、遠山りんがイーグルジャンプに入社する経緯として3つの説を提案したいと思います。
解決策1: 八神コウと幼馴染であった設定を使う
再びNEW GAME! 初期設定集(画集『FAIRIES STORY』参照)を見ると、遠山りんと八神コウは元々幼馴染の設定にする予定があったようです。
アニメ版設定で出身地が異なるようになった結果この設定は無くなったかに見えますが、公式には明確に否定されたわけではありません。たとえば得能先生は次のように述べています。
出会いについても、幼馴染ではなく、会社で出会ったつもりでいます…が本編に出ていない情報は未定です(笑)。
というわけで、二次創作設定としてこれを強引に蘇らせるのは不可能ではないということになります*3。
この場合、高校時代に何らかの事情で遠山と八神が再開し、八神の入社の決意を聞いて遠山が就職を考え始めると言ったストーリーが考えられるでしょう。
解決策2: 本当は進学予定だったが葉月しずく(花ちゃん)に拾われる
遠山りんも元々は涼風青葉のように美大 or 専門学校に進学を考えていた(原作5巻参照)という線もありえます。しかし何らかの事情で高卒入社を決意した……というものです。
涼風の場合はねねっちに八神コウの入社経緯を教えてもらったことがきっかけだったが、遠山の場合はどうでしょう。葉月しずくや花ちゃんのことを入社前から知っていて、尊敬していたという設定を補えばこの設定は掘り下げられるかもしれません。
例えば、専門学校の学校説明会に遠山りんが行ったとして、その隣の部屋で就職説明会のようなものをやっていたと想定してみましょう(実際学校の一室を学生向け就活イベントに使うケースは珍しくありません)。そこで、たまたま採用に来ていた葉月しずくが、無関係な遠山りんと出会って意気投合したという展開はアリなのではないでしょうか?(たとえ遠山りんが当時葉月のことを知らなかったとしても、コミュニケーション自体は得意な遠山ですしお話はできるはずです)
社歴の若い会社などでは、採用目的で学生や知人をオフィスに遊びにこさせるケースがあります(あるいは外で食事に誘ったり)。全く偶然の出会いからそういうことを重ねて遠山りんがイーグルジャンプへの入社を決意したという流れは一つの解釈として成立しうるのではないでしょうか *4。
解決策3: 古い考え方の実家でお見合いとかさせられそうだったので逃げてきた
超絶妄想設定ですが地味にしっくり来るのがこれです。pixiv小説などでも遠山りんがお見合いさせられそうになって八神コウへの気持ちに気づくSSとかありますし。何となく私の知っている名古屋・愛知県の像とも合います(筆者は名古屋出身です)。
この設定はネガティブな気持ちがメインになるので、単体で使うよりも上の2つと組み合わせることで強い効果を発揮します(たとえばお見合いきっかけで将来を真剣に考えるようになった遠山が、葉月との出会い or 八神との再開で変わる)。遠山りんの野心や情熱を全面に出すのはそれはそれで大切なことですが、若き日の彼女の弱さや深みを描くのにこの設定は絶好のスパイスになるはずです。
ちなみに私自身は、この件で一悶着はあったけれども家族仲自体はそれほど悪いわけではないといった家庭を想像しています。
まとめ
いかがでしたでしょうか。本記事では遠山りんの本編での設定を踏まえ、彼女の入社経緯について3つの説を提案しました。上述の3つの解釈は相互に独立しており、互いに組み合わせることができます。
皆さんも是非、遠山りんの過去設定を組み合わせて最強のNEW GAME!二次創作を作ってください。
*1:http://newgame-anime.com/character/
*2:遠山りんが仕事に情熱を持っていないと言っているわけではありません。
*3:実際にコウりん幼馴染設定の百合本は存在します
*4:ついでに言うとこの設定はしずく×りん方向でおいしいです
【NEW GAME!】 しずコウりんの構造――あるいは八神コウ過去編について
この記事はまんがタイムきらら Advent Calendar 2016の18日目の記事です。
こんにちは。先日冬コミのNEW GAME!本の入稿を終えました藤秋すばるです。 今回はNEW GAME!の三角関係カップリングであるしずコウりん(葉月しずく⇢八神コウ×遠山りん)についてお話します。
TL:DR;
- コウりんにおいては八神コウのトラウマが重要なファクターである
- 葉月しずくは八神コウの過去を理解する際に欠かせない存在である
- したがって過去のエピソードからコウりんを掘り下げようとすると、しずコウりん三角関係が登場する
注意
- この記事は二次創作設定(それも割と暗め)をまとめた記事です。苦手な方はご了承ください。
目次
- 前提
- 過去編における八神コウ
- 過去編における遠山りん
- 過去編における葉月しずく
- 遠山りん vs 葉月しずく
- まとめ
- 宣伝
前提
NEW GAME!においてコウりん(八神コウ×遠山りん)がカップリングとして成立していることは周知のことですが*1、そこに葉月しずくを加えたしずコウりんについてはあまり認知されていないことと思います。コウとりんは互いに一途な関係を築いていそうに見えますし、葉月さんも阿波根うみこや大和・クリスティーナ・和子との絡みがある中でどうして?と思う方もいるかもしれません*2。
しかし、よく見るとこの組み合わせはなかなかに味わい深く、そして突飛なものではないことがわかると思います。本稿で私は、葉月しずくはコウりんというカップリングのいわば影の部分を浮き彫りにする存在であり、コウとりんの関係性を深く理解するにあたっても重要なファクターであると主張します。
過去編における八神コウ
NEW GAME! 本編において八神コウの過去は最も深く隠されている要素の一つです。原作の二巻の14話(TVアニメ5話)と25話(アニメ最終話相当)で「ギラギラしてて近づきにくい雰囲気」だったこと、新人の子が半年ほどで辞めてしまって落ち込んでいたことだけが伝えられています。原作5巻(THE SPINOFF!)のあとがきにおいては八神コウ過去編は「お話がドロドロしそう」なのでやめたと得能先生自ら明言されており、可愛らしい作風にはおよそ馴染みにくいエピソードであることが察せられます*3。
原作で描かれていないことについて深掘りするのは無粋ではありますが、おそらくこの過去のエピソードは八神コウのトラウマになっている考えられます(初期設定集においても「過去に軽くトラウマを抱えて」いると書かれています*4 ) 。ここでのトラウマとは、「なぜそれがショックだったのか言語化するのが困難であるような記憶」程度に解釈してください。部下の退職は一般的に見てもショックな出来事でありえますが、それを差し引いても八神コウにとっては消化しきれない部分の残る事件だったと考えられます。
先の初期設定集において、八神コウ(当時は夏目コウ)は「実力主義」で「自分より劣る先輩を見下す傾向にあった」とされています。また、原作14話の遠山りんにより、 「コミュニケーションが苦手だったのは確か」だったと語られています。
こうした性格の八神コウが*5若くしてADになり、そして新人の部下が半年で退職に至った際には、上述の価値観が大きく揺さぶられたことは想像に難くありません。そしてこの価値観は彼女にとっては努力の原動力であったに違いありませんから、その意味でも大きな衝撃だったはずです。初期設定集では上司からコミュニケーションの重要さを教わって考えを改めたという書き方になっていますが、その上司は本編ではいないことになっています(「頼れるのはりんだけだった」画集p.108)。この事件をきっかけに、八神コウはそれまでの自分の価値観を大きく見直すことになったと考えて良いでしょう。
一般的に言って、大きな心変わりをした人は、以前の自分が何を考えていたのか理解できなくなるケースがあります。 この出来事があくまで「トラウマ」なのは、(後輩の退職という)普通の意味での悲しい出来事と、彼女自身の大きな心変わりが同時に起こったからだと言えるでしょう。つらかった上に、そのつらい出来事が過去の自分のどういう考えによって起きたのかが理解しにくくなっているからこそ、人に向かって語れない、というわけです。
NEW GAME! の Blu-ray vol 3.には八神コウと遠山りんのデュエットソング「Little Bitter Duet」が付属してきます。そこでは「終わりの見えぬ道をゆくんだ どんな過去も叩き壊して」という歌詞が出てきます。ここで過去が「叩き壊」されるべきものなのは、それがトラウマだからです。通常の努力によって「克服」したり「乗り越え」たりするのが難しいようなものごと(特にもはや変えられない過去の出来事)は、意志を持って「叩き壊す」他はない。私はこの詞からそういうメッセージを受け取りました。
過去編における遠山りん
さて、そんな過去編の八神に対して、遠山りんはどういう行動を取ったのでしょうか。もちろん彼女のことですから八神コウを献身的に支えるでしょう。これは私の願望なんですが、遠山りんが八神の家に休日通う習慣(原作1巻参照)はこの時期に形成されたものだったら良いなーとか思っています。
話が脱線しました。もちろんこうした支えのお陰で八神は元気を取り戻すでしょうし、2人の仲も相当親密になることでしょう。ところでしかし、ここで一つの疑問がわきます。遠山りんは八神の苦悩について、一体どれだけ理解していたのでしょうか?
遠山りんさんの過去は八神コウ以上に本編で描かれないので謎が多いのですが、少なくとも性格的な部分に関しては入社時から現在までそれほど大きな変化はないように見えます。もともと外向的でコミュニケーションすることが好き(アニメ公式サイトのキャラクター設定より)なことが伺えますし、恋愛感情以外の部分で特にこじらせた部分もなさそうです。そうしたことを踏まえると、八神コウがあの件でショックを受けている姿は、遠山にとっても大きな衝撃だったのではないかという疑問が湧いてきます。
「強かな人間に囲まれて健全に切磋琢磨してきた人間が、びっくりするほどの他人の弱さを目のあたりにしてショックを受ける」という構図はみなさんもインターネットなどで見かけると思います。八神コウにとっては辞めた新人社員が、そして遠山りんにとっては八神コウこそがそれだった、と言うことができるのではないでしょうか。
というわけで、私は遠山りんにはもともと八神のような屈託が存在しなかったように思われます。したがって遠山にとっても、八神コウがどういうことで悩んでいるのか、(彼女なりに考えはするのですが)どうもはっきりは分かっていないのではないかと推定します(後輩がやめた、リーダーとして失敗したことの一般的なショックは理解できるのですが)。したがって、「詳しい機微については理解できないのだが、、それでも分からないなりに寄り添った」というのが八神コウ過去編における遠山りんの立ち位置だったと言えそうです。
過去編における葉月しずく
むしろ残酷なことに、八神コウのトラウマの意味を本当に理解しているのは、遠山りんよりも葉月しずくの方である可能性があります。明言はされませんが、葉月しずくさん顔的にこじらせた過去ありそうじゃないですか(?)。
冗談はさておき、葉月しずくが八神の過去において果たした役割は難しい問題です。原作3巻でのうみことの会話において「それに責任の話をしたら上司である私の責任だし」といった程度の言及があるのみで、具体的に彼女が八神を上司としてどこまで助けたのかははっきりしていません。原作の現在(= 涼風入社後)の時系列では葉月は見守り役に徹していますが、当時もそうだったのかは判然としないところです。
葉月しずくの思考や人格は原作ではさほど深くは描かれていませんが(ギャグキャラに徹することが多いので)*6、初期設定においては「知的」で「世間ずれしている」がそれでいて「実力主義」的な人物であるとされています。八神入社直後のコンペでメインキャラデザに彼女を抜擢したのも葉月であり(3巻30話)、八神の実力と性格をよく知る人物であることが伺えます。
この辺は推測と言うかほとんど私の願望なんですが、葉月しずくはこういう人間のどうしようもない機微が頭でわかってしまう人なのだと思います。というかそうであって欲しい。一応フェアリーズストーリーのシナリオライターなわけですし。初期設定集にも「キャラクターを殺すのがつらくてソフィアに名前をつけることができなかった(から代わりにキャラデザ班にふった)」とかいう激エモエピソードが載ってるぐらいの人ですし(画集p.112)。理知的なのに感情の重たい女は最高!!!!!また話が脱線しましたね。
原作二巻の25話(アニメ最終話相当)において八神コウと葉月しずくの距離感は絶妙なものです。八神コウも葉月さんにだけは頭があがらないというか、何かを見透かされたような振る舞いをしているのを見ると、本当にありがとうございますという気持ちになりますね(?)。葉月しずくの八神に対する共感の入り混じった友愛の眼差しというか、見えない友情が感じられて本当に美しい関係だと思います*7。こうした前提から、葉月しずくはこの件について八神コウの数少ない理解者であった、とするのは無理のない二次創作設定になりそうです。
遠山りん vs 葉月しずく
ここまで、八神コウ過去編における遠山りんと八神の関係・葉月しずくと八神の関係について見てきました。では次にこの時期における遠山と葉月の関係について見ていきたいと思います。
さて、上のような前提を踏まえると、この時葉月は一見遠山よりも有利な位置にあるように見えます。実際、遠山りんはいつまで経っても八神に告白しないですし、その気になれば葉月が取っちゃうことだって訳ないこととは思われます。しかし敢えてそうしないのは何故でしょうか。年上として気を使っているから?八神には遠山と幸せになって欲しいから?*8どちらも間違いではないでしょうが、もう一つ重要な要因があると考えられます。
確かに遠山りんは八神コウの苦悩を論理的には理解していないかもしれません。しかし一方で、葉月しずくは遠山りんのように、たとえ分からなくとも献身的に支えるのだといった強い覚悟があるわけではありません。「Little Bitter Duet」の二番のサビに「一人になんてさせないよ」という歌詞がありますが、そこまでのお節介を焼くだけの根性(ないし性分)は、葉月しずくは持つことができなかったように思えます。
葉月はどうしてもこの点で遠山りんには勝てない、ということも頭でわかってしまうのだと思います*9。そして、葉月が遠山りんの恋愛を素直に見守っていられるのもこうしたことが背景になっている。しずコウりんは本当に険悪にならない調和の取れた三角関係だと思います(そして葉月しずくの場合、それを経て最後に戻る先が、大和・クリスティーナ・和子さんなのでしょう)。
まとめ
ざっくりとでしたが、いかがでしたでしょうか。何かいままで自分の同人誌で描いてたことを文章に起こしただけという気もしますが、ストレートなコウりんだけでなく少しでもしずコウりん沼に興味を持っていただける方が現れることを願っています。
宣伝
BOOTHにて発売中です。
参考文献
- NEW GAME! 1~5
- TVアニメ NEW GAME! 1話 ~ 13話
- TVアニメ NEW GAME! Blu-ray vol. 1 - 3
- NEW GAME!画集 FAIRIES STORY(芳文社)
*1:『NEW GAME!画集 FAIRIES STORY(芳文社)』のコメント(p.30)によると、コウりんは唯一「意識的に百合として描いている」カップリングとされています。
*2:まったく余談ですが私はしずクリ(葉月しずく×大和・クリスティーナ・和子)が好きです。しずコウりんを経て大和・クリスティーナ・和子さんに戻ってくる葉月しずくさんという概念も良いのですが、この記事では省きます。
*3:それでもいつか描かれて欲しい…!と思う気持ちはあるのですが
*4:『NEW GAME!画集 FAIRIES STORY』p.108
*5:仮にこの設定が本編に引き継がれていたとして、ですが。基本的にこの記事は初期設定を根拠に喋ったりすることがあります。
*6:早くしずくさんのキャラソン出てくれ!!!!!あと本編でも葉月しずくのシリアスな話が欲しいです…………
*7:他作品に例えるなら、これは『響け!ユーフォニアム』における田中あすかの黄前久美子に対する感情です。田中あすかと葉月しずくは顔と性格が似ているので非常に重要なヒントになります(過去編の八神コウは高坂麗奈にちょっと似てるかもしれません)。葉月しずく×八神コウとは言ってみれば、黄前久美子の位置に高坂麗奈が立ち、田中あすかと謎の相互理解(友愛)を持つようなカップリングであると説明することができます。
*8:そう考えると葉月しずくは好きな女と別の女のカップリングに萌えている女だということになりますが、実際そうなんだと思います。八神コウに対する恋愛感情と、コウりんに対するカプ萌えの感情を同時に持っているのが葉月しずくの興味深いところで、言ってみれば『けいおん!』の紬→律×澪みたいなものです(そして両方共、その二つの区別は本人の中では曖昧なのだと思います)。
*9:でもそれはそれとしてしずコウ百合は掘り下げようがあると思うので誰か描きませんか?