百合オタクの脳内を可視化する,その名もyurigraph

2020/12/02

yurigraphのスクリーンショット

yurigraphという,様々な作品の人間関係を可視化するWebアプリを作りました.以下の11作品に対応しています.

リポジトリ

はじめに

【百合】とは,ユリ目ユリ科ユリ属の植物です.

対して,【百合オタク】というのは, かわいい女の子同士の掛け合いから発せられるキラキラによって光合成する という点で,こちらも,まぁ植物みたいなものだと言えます.

その特性上,百合オタクが生きていくためには,たくさんの作品 / キャラクター / カップリングに触れ,てぇてぇを補給するということが重要ですが,個人で把握できるキャラクターの数には限界があります.

例えば,東方Projectを例に,登場キャラクターを すべて 見てみましょう.

八里氏による東方Projectの集合絵

東方Projectの集合絵

多すぎる!

皆さんは普段,どのくらいの大きさのコミュニティで生活しているでしょうか?イギリスの人類学者であるロビン・ダンパーは,脳のサイズを考慮すると人間がしっかりと認知できる知り合いの数はせいぜい150人くらいだといいました.

一方,現時点での東方Projectのキャラクター数は 198人 です.そのため,オタクが東方を履修しただけで,人類のスペックを遥かに超える負荷によって確実に脳がバグり, 死に至ります.

カップリングの可視化

私は,情報系大学に棲まう百合オタクとして,この問題へ技術的にアプローチしました.様々な作品の人間関係を 可視化 します.

SS01

ここで,例えば 博麗霊夢 が既知のキャラクターだとします.

SS02

すると, 秋静葉秋穣子 などは,博麗霊夢と関係が深くないので,百合的観点からすれば無視できるとわかります.

むしろ,より関係の深い 霧雨魔理沙 から調べていくほうが良いわけです.既知のキャラから作品を知っていくことで認知的負荷が下がり,脳が爆発せずに済みます.

また,キャラクターの名前,例えば博麗霊夢にマウスカーソルをのせると…

SS03

キャラクター同士の間に文字が現れました.この レイマリゆかれいむ というのはオタクが用いる呪文のようなものであり,これらをGoogleやPixivで詠唱することで,特定キャラ同士の [お察しください] を眺められるわけです.名前をクリック / タップすると,更に詳しい情報が見られます.

カップリングタグの詳細

仕組み

グラフの作成には,Pixivピクシブ百科事典のデータを使いました.

yurigraph archtecture

たいていの有名な作品は,全カップリングタグが一覧記事になっているので,それを活用しました.(ちょっと 引く くらいの精度でまとまっていました.)そして,各タグのpixiv投稿数を,各カップリングの強さとしました.多くの絵 / 小説が投稿されているカップリングほど,作中での関係性が深いだろうということです.

これらのデータが取得できたら,フロントエンドでグラフを描きます.開発には,

  • React
  • TypeScript
  • @emotion/styled
  • D3.js

などを使いました.

リポジトリはこちらです.

カップリングの1対1解決

百合オタクなら,ある作品のキャラクターすべてを使ってカップリングを作り, 完璧な百合の世界 を構成するというヤバい思考実験をしたことがあるはずです.(ありますよね?).これは,例えば次のようなものです.

1対1カップリングの例

yurigraphでは,この自動化に挑戦しています.

「同じキャラクターを2度使わずに,合計投稿数がn(以上)となるようなカップリングの選び方はあるか」

という問題は,なんとなく部分和問題の変形っぽいので,たぶんNP困難です.多項式時間では厳密解が得られそうにないので,ここでは 貪欲法 を用いて解を近似します(オタクはカップリングに貪欲なのでこれは妥当ですね)

アプリの右下に次のようなボタンがあります.

1on1 button

このボタンを押すと…

SS04

すべてのカップリングが1対1に解決されました.しかし,よく見ると

SS05

1人ぼっちのキャラクターが出てしまっています.現状の雑なアルゴリズムでは完璧な世界を作れませんでした.あちゃ〜.

みなさんも,クリスマスぼっちにならないために,パートナーを貪欲に手に入れるという姿勢,つまり貪欲法を肝に銘じましょう.

優先して解決するカップリングを指定できるようになりました(2021/11/10追記)

東方界隈といえば レイマリ派vsマリアリ派 で常に冷戦状態なわけですが,マリアリ派の皆さんはデフォルトの1対1解決に納得がいかないでしょう.

デフォルトではレイマリが採用される

そんな時は右下にある設定ボタンを押します.

右下の設定ボタン

すると,設定画面が開きます.

デフォルトの設定画面

この設定画面では,優先して解決するカップリングを指定できます.選択可能となっているのは1対1解決で採用されなかったカップリングです.ここでマリアリを選択すると…

マリアリ選択後の設定画面

マリアリが優先して成立し,レイマリが採用されなくなりました.そして,博麗霊夢は霧雨魔理沙を取られたので,次点の八雲紫とカップリングしました.さらに,八雲紫を取られた西行寺幽々子は次点の魂魄妖夢とカップリングし,魂魄妖夢を取られた誰かはさらに別のキャラクターと…というように,世界が再構築されたわけです.複雑ですね.

また,中には レイマリアリ派 のように,1対1にこだわらないオタクもいるかもしれません.その場合は「1対1にこだわる」のチェックを外します.

レイマリアリの設定画面

これにより,同じキャラクターを含む複数のカップリングを選択できるようになります.やったね.

細かいこと

yurigraphの作品リストにヘタリアがあるのはおかしい!ヘタリアのカップリングは,ほとんどBLじゃないか!

と気づいた 腐女子のあなた ,なるほどお目が高いですね.確かに一見すると「百合とBL」 は全く違うものに思えます.

しかし,これら2つは陰と陽,つまり表裏一体である(女性同士でカップリングを作ると,相対的に男性同士のカップリングも増える)ので何の問題もありません.つまり,NL / BL / GLというのは,本質的に見れば全て同じ概念なのです.嘘ですが.

おわりに

yurigraphが,皆さんの百合人生の一助になれば幸いです.

また,この記事はFUN Advent Calendar 2020の2日目であり,昨日の記事はやままさんの「【ガチ比較】サワデー香るスティック最強王者決定戦」でした.

明日は落単大学生にんちさんの 僕が大学生活と共に行った研究 です.おたのしみに〜

2021/02/21追記

@zzzaaawwwaaaさんからBanG Dream!(バンドリ!)対応のプルリクをいただきました.当時は開発用のドキュメントが何も無く,いろいろとお手数をおかけしたと思います….

ありがとうございました.

2021/11/07追記

@zzzaaawwwaaaさんから東京リベンジャーズ対応のプルリクをいただきました.ありがとうございました.

2024/02/04追記

@zzzaaawwwaaaさんからウマ娘 プリティーダービー対応のプルリクをいただきました.ありがとうございました.

謝辞(内輪ネタ)

昨年の12/2に,私の尊敬する先輩であり,同時に弊大学の百合マイスター的ポジションでもあった@youtangaiさんが,FUN Advent Calendarに 良くも悪くも 一石を投じる,1本の記事を投稿されました.

私の百合作品4選

なぜこの記事が悪いのかというと,はっきり言って危険物だからです.

私は,もともとAdvent Calendarに参加する気はなかったのですが,なんとなくカレンダーを眺めていたところ何故か12/2だけが空いており

calender

これは@youtangaiさんの意思を継いで,百合関係の記事を投稿せよというお告げなのか?

と,運命か何かを受信したので今回の記事を書くに至りました.それもこれも,すべて@youtangaiさんのおかげなのでありがとうございました.

本アプリを,今はなき(大学を卒業した)@youtangaiさんに捧げます.

あと,上記の@youtangaiさんのtwitterを開く際は, ⚠️ 背後注意 ⚠️ です.@youtangaiさんのことですから,百合のえっちな画像をリツイートしていないとも限りません.したがって,えっちなものが苦手な方はクリックしないでください.えっちな方はフォローしてください.

また,開発初期において,yurigraphの構想や設計に関する意見を@_leo_isaacからもらいました.ありがとね.

さらに,yurigraphには,kurageという前身のアプリがあります.これは,IT企業同士の関係性( いわばカップリング )を可視化するものです.yurigraphを開発する際,当時のコードが大変参考になりましたので,kurageのコラボレーターである@uehara1414にも感謝します.

以上,戦犯リストでした.

続けて読む…

Blenderでフォトリアリスティック電球

2018/10/07

お菓子作り(Blender)

2017/06/04

Blenderで20世紀F○X風のOPを作る

2017/04/03

Gatsby製ブログで自然言語処理して関連記事を表示する

2020/06/12

ウソの新居ができるまで(Blender)

2021/03/27

Blenderでいぶし銀

2020/08/26

書いた人

sititou70のアイコン画像
sititou70

都内の社会人エンジニア4年生。Web技術、3DCG、映像制作が好き。