elkurin’s blog

銀英伝はいいぞ

人狼TLPTを布教したい

こんにちは。

人狼TLPTファンです。

8月23日から9月3日まで公演されていた舞台『FLAG III 誓いの酒と呪われし秘宝』がとても良かったので感想及び布教記事を書きたいと思います。

 

(elkurin-daily-notes 103日目です)

人狼TLPTとは

推理や議論、時には騙しあいを中心としたパーティーゲーム人狼」。

そんな人気のゲームを題材にして舞台化したのが『人狼 ザ・ライブ・プレイングシアター』通称人狼TLPT。TLPTでは人狼ゲームをアドリブ劇で行います。

oracleknights.co.jp

みんな知ってる人狼というゲームを、役者さんたちが実際にその場でプレイしながら劇をするという斬新な舞台です。人狼というゲームは処刑や裏切りが濃く絡んでくるので人間ドラマとして素晴らしい題材なんですよね。

脚本はオープニングだけで、その後はなんとすべてアドリブ。

各役者さんたちは開演直前に人狼や占い師などの役職をランダムに受け取り、ゲームに則って戦いながら演技も全力でするという超ハードモードです。当然ゲーム展開や持っている役職によって演技は変わるし、その場に合わせて物語を紡いでいく役者さんたちの技量に感服すること間違いなし。シリアス展開もあればコメディ展開もあり、客席が笑いに包まれることも多い。一方処刑シーンやエンディングでは涙もろい僕はいつも泣いています。

 

ルールは人狼3人 狂陣1人 vs 予言者1人 霊媒師1人 狩人1人 村人6人 の13人ゲーム。俗に言うアルティメットルールです。詳しくない方向けに劇中や始まる前の前説でしっかり解説してくれるので心配無用。

昼の議論から処刑までを舞台上で演じ、夜の行動である誰を噛むか、誰を占うかなどは舞台裏でGMのもと執り行われます。なので、観劇している我々も誰が人狼で誰が本物の役職者なのか分からず、推理しながら楽しむ構成になっています。客席には開演前に解答用紙が配られ、3日目の段階で誰が人狼かを推理して提出するといった参加要素もあります。公演中にもガンガンメモとって推理してもよし、純粋に物語や演技を楽しんでもよし、誰でも楽しめる傑作舞台。

 

アドリブでの本気のゲームなので、人狼が一瞬で見つかって終わるゲームもあれば、最終日までもつれ込む白熱した試合もあり、どのゲームでも違った展開が楽しめるので同じ公演に何度も足を運んだり生放送を観たりしても面白いです。

 

説明ばかりでも伝わらないと思うのでぜひ一度見てみてください。

youtu.be

これはYoutubeで無料で1ステージ全部公開されています。ゲーム展開は比較的わかりやすいものですが人狼TLPTの面白さは伝わると思うのでぜひ見てみてください。

もしお金を出してもいいよって方は下で紹介する『おすすめ公演』を見てみてください。

舞台まで足を運ぶのは厳しいという方も、家から動画を見て楽しめます。

 

FLAG公演の良さ

人狼の一番オーソドックスな設定は、村に人狼が襲ってくる展開。

上で紹介した動画もその設定を用いた舞台で、昔のネット人狼でよくみるキャラ名と村でのお仕事が割り振られています。例えばパン屋のパンジー、医師のマドック、団長のダンカンといった感じです。

 

しかし人狼TLPTの公演には他にもいろんな設定の舞台があります。

 

例えば

  • たまたま集った犯罪者集団の中に人狼ドラッグを打ったやつがでた
  • 勝てばどんな望みでも叶い負ければ死ぬというデスゲーム
  • 研究対象として非道な実験を受けてきた人狼が研究者に復讐する
  • 難関校の一発逆転裏口入学の秘密入試試験

他にもサイコパスドラクエ宇宙兄弟などコラボ回もありました。

 

その中で今回のFLAG公演のテーマは 海賊船

 

幻の大陸を目指し仲間同士一致団結した自由な海賊たち。

そんな彼らはゴール目前で幻の大陸由来の呪いを受けてしまい仲間のうち3人が人狼の呪いにかかってしまう。

仲間同士争うことになるがそれでも前に進むことを選び人狼と人間の命を賭けた戦いが始まる。

 

それぞれの舞台設定でいろいろと特色が違い、例えば人狼が悪人のこともあれば人狼がむしろ被害者の設定もあり、人が死ぬことに恐れを抱く普通の村人設定もあれば比較的人死にに慣れている設定もある。仲間同士絆があるもの、むしろ敵対していてみんな死ねばラッキーみたいな設定もあります。

それぞれ違った良さがあるのですが、中でもFLAGは僕が一番好きな公演です。

海賊という人の道からは外れた存在で人狼というトラブルにも真っ向から立ち向かっていく強さを持つ一方で、一つの船にずっと乗り合わせているが故に仲間内の絆はどこよりも深い、それ故に人間ドラマの比重が高い公演です。そしてこの舞台においては人狼とはあくまで呪われてしまった仲間。その心の中にはまだ仲間がおり、人狼だったとしても呪いから救ってやるために殺します。なので、敵対心や憎しみは限りなく少なく、人狼勝利展開でも呪いに負けて仲間を食い殺してしまった悲痛な無念さが際立ちます。陣営は違えども最後まで仲間として死んでいくのが美しいですね。

 

村設定だとやはり人狼への恐怖がとても大きく、どうしてもどんよりと弱気な雰囲気があって、焦点があたるスポットも狭い気がしています。一方海賊船ではむしろ楽しんでやってやろうじゃねえか!といった清々しさを感じ、すぐに前に進むので物語の展開もキャラ設定もより深堀りされるように感じます。

 

海賊という性質上みんな訳アリばっかなので、その裏設定が垣間見えるセリフやシーンはめちゃくちゃエモいですね。

 

良かった公演

追記(2024/03/24): 現時点でこのセクションに乗せている公演はすべてタイムシフト期間が切れています。現在も視聴可能なものについては次のセクションの「その他のおすすめ公演」をご覧ください!

 

もともとこの記事は感想を書こうと思っていたんですが、人狼TLPTの感想はどうしてもネタバレありきになってしまい、それより是非TLPTを観てみたい!と思ってくださった方に初見の感動をプレゼントしたいので、ネタバレ無しで書いていきます。

今ならまだタイムシフトで観劇することができるのでぜひ見てみてください!

 

注意:こちらの公演はちょっと高めです。もっと安い方がいい場合は次のセクションを確認してください。また9月末に期限が切れちゃいます。観たい方はお早めに!

最初の30分は待機時間なので30分くらいからご覧ください。

 

 

全20回の公演のうち僕が観たのは1・4・5・6・7・11・12・15・19・20とちょうど半分の10回。(残りのやつもこれから観たいと思っています)

 

やはり最高だったのは千秋楽の20ステージです。

live.nicovideo.jp

ゲーム展開も面白く、役者さんの推理力・立ち回りに驚かされる部分もあれば、ちょっとおもしろ要素もあり、そして最後の締めの演技・ストーリー展開は、これがシナリオのないアドリブ劇だとは信じられないほど素晴らしかったです。

詳しくはネタバレになるので、ぜひ見てみてください。

 

次に印象深かったのは15ステージですね。

live.nicovideo.jp

とあるキャラ(メイソン)が突然全キャラに恋人設定を無茶振りで割り振り、その設定に基づいて演じていく恋愛回でした。こういう無茶振りにも対応して自身の設定を書き換えていけないのが役者さんの大変なところです。

愛し合う2人のうち片方を殺すというのはヨコオタロウの十八番ですが、人狼ゲームという性質上ここでも日常茶飯事です。期待通りエモい展開が多かったです。

 

そして6ステージ

live.nicovideo.jp

入りの面白展開から、エンディングでのセリフの伏線回収が素晴らしい物語。

キンバリーって本当にいい役者だよなあ。

 

そして5ステージ

live.nicovideo.jp

この公演はゲーム展開が面白く、そしてライラという本公演からTLPTに初参加された元アイドルの方が覚醒した回です。やはり新しい人が活躍しているのはいいですね。

 

他もどの回も外れがなくて今までのTLPTの中でも最高でした。

 

その他のおすすめ公演

ここでは今回のFLAG公演以外で、内容+値段的におすすめなものを載せていきます。

気になったやつを見てみてください。

 

こちらは500円・800円・あるいはタダと比較的安いので気軽に見ることができます。

 

昔のFLAG

www.nicovideo.jp

今回紹介したFLAG設定の過去公演。一番おすすめな回。

ぜひ結末を見届けて下さい!

Mission

登場人物が全員犯罪者のカッコいい公演からひとつ。

www.nicovideo.jp

人狼ドラッグというレアなクスリを盗むため集められた犯罪者たちによるバトル。賞金を得るために戦っており、仲間意識はゼロ。むしろ人が減ればもらえる金が増えるので率先的に無駄死にを増やそうとすることさえあるというワイルドな世界観です。

みんな人死には慣れっこなので処刑シーンは殺す方も殺される方もサッパリしており、コメディにふれることもあれば、人の心がなかった天才が人を信じ信じられることを学ぶエモ回もあります。

ここで紹介するものはコメディ回ですかね。

 

Exam

学園の入試として人狼ゲームをやる設定。

sp.nicovideo.jp

この公演は他とはだいぶ毛色が違い、何と言っても人が死にません。他の設定では本当に危機が訪れて人狼に噛み殺されたり仲間に処刑されたりするわけですが、試験ではゲーム内で追放されるだけで死なないし、追放されても自陣営が勝てば良いので清々しいライバル感があります。とはいえ、一発逆転チャンスにかける生徒が集まっているので当然本気の戦いではあり、おすすめにあげた動画はゲーム展開もかなり面白いです。

 

村公演

原点にして至高。やはりオーソドックスな村設定も欠かせません。

sp.nicovideo.jp

TLPTの舞台では13人のうち真ん中に座る人がセンターと呼ばれ、議論の流れを仕切りまとめる役になります。センターになる人のプレイスタイルやキャラによって舞台の雰囲気は大きく変わります。

この村公演ではノエルという、今回のFLAG公演ではなんと演出家をしていた人がセンターになっている珍しい回です。頭の回転が速くいつも早口でロジックを組み立てるノエルがセンターになると優しい感じになってなんかいいですね。

 

Depth

実験対象として非人道的なことをされ続けた人狼が自由を得て冷徹な研究者と戦う一風変わった設定。

sp.nicovideo.jp

普通は人間側が被害者で人狼は悪役ですが、この設定は立場が逆転しているところが面白いですね。

狂陣は人狼の痛みを理解し救ってあげる存在で、そのポジションに誰がなるのかでいろんなエモストーリーができるのが好きです。

The Room

こちらはアマゾンプライム会員なら無料で見れるおすすめ公演です。

www.amazon.co.jp

デスゲーム設定で、勝てばあらゆる願いが叶い負ければ死ぬというわかりやすいストーリーです。

めちゃくちゃ最高!というわけではないですが十分面白いし、なんといっても無料で見れるのでおすすめします。

おまけ:アルティメット人狼

人狼好きなら絶対知ってるであろう殿堂入りの名作。

youtu.be

こちらは「アルティメット人狼」という、TLPTの役者だけではなくゲームクリエイター将棋棋士などが集って行われるゲームです。TLPTの舞台とは違い演技はありませんが、客に見せるための工夫が凝らされており面白いです。

中でもこの試合はやはり最高のゲーム展開なので最後まで見てみてください。

舞台よりはゲームだけ観ていたいよって方はぜひこちらをどうぞ。

 

以上。

おすすめセレクションを見ると僕が誰が好きなのか丸わかりですね。

また次回公演を楽しみにしています。

今回も最高に素晴らしい舞台をありがとうございました。

 

グノーシアをクリアした感想

RTA in Japanを観ていたときに人狼ベースのRPGと聞いてこれはやらねばと思い即購入した。

その後だいたい3日くらいでクリアした気がする。

とてもよかったし面白かったのでおすすめしたい。

というわけで、その感想を書いてみる。

(elkurin-daily-notes 91日目です)

 

※最後に大事なことを書いているので、そこだけはみんな読んでください!

どんなゲーム?

NPC人狼をするRPG

と聞くと、どうせ人狼するなら対人が良くね?という気持ちになるが、人狼好きな僕もかなり楽しめた。

そして、ただ人狼というゲームをしていくだけではない。何度も人狼ゲームを繰り返していくとストーリーが進んでいく。でも、どうやって毎度人死にがでる人狼ゲームをRPGでするのか?そう、これはいわゆるタイムループものである。RPGの戦闘部分が人狼みたいな感じ。

主人公含め15人の登場キャラクターがおり、そのうち5~15人ランダムで選ばれて人狼ゲームを行う。役職も毎回ランダムに配られ、当然主人公が人狼になることもある。

この人狼ゲームに勝ったり負けたりを繰り返し、毎回違う展開を見て、そして世界の謎やキャラクターの背景を解き明かしていく。ストーリー重視なプレイヤーも楽しい。というかこちら側がメインの長所だと思う。

 

ストーリーについてはほぼネタバレになってしまうので可能な限り言及せず(ノーマルエンド、真エンドともにめっちゃいいよ!!!!)、キャラクターの感想と人狼ゲームの感想に大きく分けて感想を書く。

 

キャラクターについて

グノーシアの良さの核となる登場人物たち。このキャラクターたちが魅力的なので何度も同じメンツと人狼をし続けられるし、イベントを回収するために面倒な部分も続けられる。

キャラ設定が本当に絶妙で、イイやつだなと思わせるお約束のシーンもちゃんとあるし、でもどいつも人間味にあふれていて、一緒に過ごしていて楽しい。不快感を感じるキャラは誰もいなかった(が印象のないキャラは何人かいた)。

14人のキャラについて核心のネタバレは避けながら感想を綴っていく。

 

セツ

グノーシアは主人公とセツ2人の物語。

性別は「汎」という男でも女でもない相棒キャラ。主人公とともにタイムループしている唯一のキャラ。ただし、常に一緒に時を歩んでるわけではなく、互いに違う世界に飛ぶし、敵陣営にもなる。

人狼的にはロジック寄りの冷静なキャラだが、結構アツいシーンとか大人気ない要素(嫌いな人を定期的にヤってしまう)もあって、普段は冷静であるよう努めているんだろうなってところがいいと思いました。

最初出てきたときは先輩って感じで頼りになるんですが、常に同じ順番にタイムループしているわけではないというのがミソで、自分のほうが先輩になるループもあるので、終盤になってくるとだんだんポンコツさが見え隠れするようになる。かわいい。

このキャラは物語の核心に近すぎるのであまり書けない。以上。

 

ラキオ

カラフルで変な頭した、高飛車頭脳派キャラ。



人狼的にはロジック型のキャラだがかわいげがなさすぎて初日処刑されまくっている。コミュニケーションが下手くそ。

会話の8割が罵倒と嘲笑なのに全然ウザくない奇跡のキャラ。こういう上から目線キャラが噛ませでなくちゃんと強い・賢い作品が大好きです。

人狼詰将棋クイズを度々出してくるんだが、正解して君と同じレベルにいるんだよアピールをしないと相手にしてくれないのかと思いきや、むしろ間違えるとウッキウキで解説してくれるし多分こちらの好感度も上がっているところがかわいい。

知性至上主義の国出身で自身もそれに則った性質をしているように思いきや、仲良くなってみると国の体制に思うところがあるみたいで、実際クリア後は革命とか起こしたりしてそうなダイアログが出る。自身は知性至上主義で高位になれる実力を持ちながら理不尽を嫌い革命を志すのがかっこいいね。なぜそういう考えに至ったのか、原因となる幼少期の友人とかいるとエモいし、そういうバックグラウンドなくただそう思っただけならそれもエモい。

 

SQ

飄々としていてなかなかつかめない女性キャラ。

人狼的には演技力が高い厄介プレイヤーで、嘘も見抜いてくる強キャラ。こいつが人狼のときはめっちゃ人間の懐に入り込もうとするタイプ。

ZE☆みたいな語尾をつけたりレッツファイ!とか言ってきたりと軽いお調子モノな発言が多い一方で人狼の立ち回りを見ているとかなりクレバー。二面性のあるキャラで、裏側の性格をゲームでの性能で表現するという演出方法がかなりいいなと思いました。

こいつも裏の設定がかなりネタバレ感強いので黙っておきます。が、SQ関連のイベントはどれも濃くていい。

かなり好きなキャラ。

 

ジナ

ヒロイン力抜群の女性キャラ。

人狼的には雑魚。演技力が低くてすぐ嘘がバレるし推理力系も軒並み低い。ただし後半になると直感が強いキャラに化ける。でもやっぱり直感が高い自覚がないのもいい。

嘘をつくのが下手というのは能力の低さというより人格による部分が多そうで、人狼であろうとも嘘をつくことに強い抵抗感を持つ実直なキャラ。ジナが人狼になったときには自己犠牲の道を選ぶことさえある。

儚い美人、芯が強く優しくて誠実、一方天然でマイペースな面もあると、あまりにヒロイン力が高い。1枚絵も他キャラに比べて多かった気がする。

ストーリーの核心にはほぼ絡まないがイベントに恵まれているし、どれもヒロインっぽい。絶対に開発者にジナ推しがいる。

 

ここまで初期メンバー。ここからは登場順を無視して僕の書きたい人から書いていく。

 

沙明

名前の読み方が難しいのに女主人公にしかどう読むか教えてくれない女好き(女性には限らない)キャラ。自分は性別「汎」を選んだので教えてもらえなかったがシャーミンと読むらしい。

なんだかんだ1番好きなキャラかも知れない。鋼錬のグリードっぽい。

人狼的にはとにかく自分が生き残ることを最優先し、人間の時は吊られない・噛まれないことだけ考えて行動し、なんなら投票で処刑が決まっても必殺技DO⭐︎GE⭐︎ZAで吊り回避してくるメンタルツワモノ。人狼の時は潜伏してどんどんライン切ってくる。と思いきや意外と仲間の時庇ってくれるし、仲間が吊られると「勝手に死んでんじゃねーよ…」と言ってくれる。いいね!

 

初対面からいきなりセツにセクハラ紛いのことをするので第一印象は最悪だが、逆にこいつは絶対いいキャラだと思った。

で、実際いいキャラ。自分の身を守ることを優先するものの他人に興味がなかったり冷酷だったりするわけではなく、ちゃんと生存者がいたら喜ぶし特殊なバックグラウンドを持つやつを気遣ったりしている。空気が読める常識人。ただしセクハラだけは我慢できない。

個人的に、「ウェーイ!フゥゥゥ!」とパリピ発言をした1秒後に「つーわけでお疲れー」と冷静になる温度差が好きです。

 

夕里子

全てを知ってる謎に包まれた女王様キャラ。

こいつも沙明と並んで好きなキャラ。

人狼ゲーム的にはクソ強キャラ。カリスマ性があって周りの意見を煽動してくるので敵に回ると超厄介。嘘を見抜く力も高くロジカルシンキングも出来る。また非常に交戦的で、夕里子が人狼になった時初手で主人公とセツにだけ人狼であることをバラしてきて「私を破滅させなさい」と言ってくることもある。

ラキオの時にも書きましたが、こういう女王様キャラがちゃんと強キャラな作品が大好きです。

 

物語の核心をめちゃくちゃ知っているが全く教えてくれず、教えてもらうためには夕里子が出してくる挑戦に勝たないといけない。この教えるための条件がモノとか夕里子が得するものではなく戦いというのがいいですね。

こいつはタイムループしてないただの未成年のはずなのに超えてきた修羅場の数が違うぜっていう風格を出している。かっこいい。

 

コメット

自由奔放で直感が鋭い元気キャラ。

人狼ゲーム的には嘘を見抜く直感がずば抜けていて味方の村側の時は投票の参考になって大変助かった。コメットが人を疑う場合いつも直感。そのにロジックはない。

 

ふーん?(ニヤリ)的な実はやり手です風カット絵がしばしば使われるが、多くの場合あんまりやり手じゃないおバカ。本人も自覚しており、自分は鋭いけど難しいこと考えられないからロジックは任せた!と主人公に協力を持ちかけてくるし、人狼同士の時は足手纏いだから捨ててくれと言ってくる。自分の能力を客観視できているバカは大好きです。

体にあるカラフルな刺青は実は粘菌。こういうサイド設定ものちに活きてくる(?)シーンがある。いろんな生態系や社会を出してくれる宇宙モノ、スターウォーズ味があって好きです。

 

ククルシカ

声が出せない可憐で天真爛漫な少女。

人狼ゲーム的には、可愛げがありすぎて全然吊れなくて困る。後半になると「哀しむ」という最強の同情集めスキルを連発し、黒出しされても全然票が入らない。実際可愛いので仕方ない。

 

少女のような天真爛漫な笑顔を見せる一方、大人の女性のような表情をすることもあり、深みを感じるキャラになっている。

前半では可愛い女の子枠来たなってくらいであまり印象がなかったが、途中から数々の「ククルシカ騒動」を起こし一躍スターになる。

が、どれもネタバレすぎるので逆に書くことがない。

 

ジョナス

残念なロリコンおじさん。

初登場では渋くてやり手の知識人って感じで出てきたが、回を追うごとに残念度があがっていく。ククルシカの可愛がり方が絶妙にキモい。

人狼ゲーム的にはどの能力も平均以上にまとまっていて一見強そうに見えるが、敵に回っても怖くないしなんか最終日から2日目くらいにスッと死んでる。

宇宙開拓時代の英雄が引きこもりになってゲームをやり続けた末路。感性が時代の変化を受け入れられないおじいちゃんで、未だにAIやロボットの概念を理解していないし理解しようとしない。

他にも頭のねじがぶっ飛んでいるイベントがいくつかあるが、中でも沙明の素晴らしい自己犠牲シーンに水を差したのだけは許さん。

 

しげみち

愛すべきアホ。

こいつがいるだけで場が和む。

人狼ゲーム的には嘘を見抜けないしすぐ騙されて人狼を頑張ってかばうし、人狼のときはウキウキで名乗り出てはすぐウソがばれて死ぬ。あるイベントではゲームに勝ったテンションでそのまま人狼だと口を滑らして2コマ漫画みたいに吊られてた。

見た目はまんま宇宙人だがちゃんと人間。訳あってこんな見た目になってしまった。88歳のはずだがわんぱく少年のような言動でなんやかんや愛されている。

手に持っている銃は攻撃用ではなくラーメンの汁の塩分濃度を測る装置です。

 

レムナン

かわいそうキャラ。

かわいそうな目にあってる美少年が好きなお姉さま方にウケそうなキャラ。こいつだけかわいそうなイベントが多すぎる。

人畜無害です、臆病です、といったキャラながら、ウソがばれた時や処刑されるときの恨み言や目つきからレムナンという人間の本質が見れていい。

人狼ゲーム的にもキャラ的にも特に印象はない。

 

ステラ

残念おじさんジョナスの秘書。

公式設定にもある通り印象が薄い。

人狼ゲーム的にも雑に吊られるし、人狼でも特に何かしてるイメージはない。

唯一印象に残っているのは人狼だと正体を明かしたときの白目むいた変顔。

 

オトメ

知性を持ったイルカ。

見た目のインパクトに対し特に感想がない。優しくていい奴なのは確かだけど、印象としては人狼の時の顔が怖いってくらい。

人狼ゲーム的には「哀しむ」コマンド連打で同情を引いてくるがククルシカに比べると大したことない。

 

シピ

猫大好き人間。

最も印象がない不遇なキャラ。新しい設定を思いつかなくて場つなぎ的に出てきたとしか思えない。

設定が何にも生かされてないし、ストーリーが進んでも特にキャラクターの解像度があがらない。

人狼ゲーム的にはちょっと厄介くらいで、弱くて面白こともないし強くてすごいこともない、地味。

 

人狼パートについて

総じて面白かった。

 

役割は人狼・村人・預言者霊媒師・狩人・狂陣・双子・狐の8種類をゲームの世界観に合う役職に変えている。ストーリーと絡ませた役職の設定が結構好き。

人狼をやったことがあればすっと入ってくるのでとっつきやすいと思う。

 

各キャラクターがそれぞれ強み・弱みをもっており、以下の各ステータスが割り振られている。

  • カリスマ:自分の意見を押し付けやすい
  • 直感:嘘を見抜きやすい
  • ロジック:論理的に説得するスキルが使える
  • かわいげ:投票されにくくなる
  • 演技力:嘘が見破られにくくなる
  • ステルス:噛まれにくくなる・意見を言いまくっても警戒されにくい

直感がめっちゃ高くてすぐ嘘見抜くやつとか、カリスマが高すぎて疑ったらむしろ疑った側が反撃を被るやるとか、かわいげが高くて全然吊れないやつとかいろいろいる。ストーリーが進むと新たな能力が開放されたり、弱みが突然強いみに変わったりと面白い。

各キャラの特性を理解してくるとその攻略が結構楽しい。

主人公はゲームを進めるごとにレベルアップしていくので、上記のうち好きなステータスを伸ばすことが出来る。天才美少女のロールプレイしたい場合はかわいげとロジックを上げればいい。

 

ゲームの難易度は遊び方次第。

配役設定やプレイ人数、さらには自分の役職もカスタマイズしてプレイできる(し、それが出来ることがストーリーに組み込まれている)ので、やりたいことができて楽しい。

設定によっては自分側にめっちゃ有利に設定することも出来るので、初心者でも楽しめると思う。逆に厳しい設定で遊ぶことも出来る。

 

また常にルール通りのゲームをしているわけではなく、自分がグノーシアであることを夜時間にバラしてくるときもあれば、狐に負けたはずなのに世界平和を願う狐が自ら死を選んで勝ちに変わったり、処刑したはずの人狼が何故か復活したりなど、いろいろなイレギュラーも起きるので飽きない。ただし終盤イベントの全回収をしているときはちょっとダレる。

 

詳しく知りたい人向け

昼間の議論では、「誰かを疑う」「誰かをかばう」「様子を見る」が基本コマンドで、疑ったりかばったりすると他のキャラが主人公に賛同したり反対したりする。様子を見ると、他のキャラが疑ったりかばったりするので主人公を含めた他キャラが賛同したり反対したりする。

5回これを繰り返した後に公開同時投票を行い処刑する。

このゲームでの推理は基本的には議論中の疑う・かばう発言、そして投票先からラインを見極めることになる。盤面整理が上手になる。

 

他の要素としては、確率で相手の嘘を見抜くことができ、この場合嘘をついてるやつは人狼・狐陣営が確定する。また他キャラの中でも嘘を見抜くのが得意なやつがいて、彼らの投票先や発言から、主人公自身は嘘を見抜いていないがメタ的に嘘つきを見つけることも出来る。今やってる2周めでは各キャラの特徴をわかっているので、このメタ嘘つき発見が猛威を奮っている。

1ゲーム10分とかで回せるので、何度もプレイし続けてしまい寝不足になる。

 

またRPGらしくレベルアップという概念がある。人狼においてレベルアップってなんだと思ったが、意外と機能していて面白い。

レベルが上がるごとに上記の6つのうちひとつのステータスを上げることが出来る。

僕は普段の人狼プレイスタイル通り、ロジックと演技力をとりあえずガン上げした。が、多分ロジックはあんまりいらなかった。考えるのはプレイヤー自身なので仮想空間でロジックが上がっても特に役には立たない。カリスマがあればプレイヤーが考えたロジックを周りに押し付けることが出来る。

追記:今2周めをしているが、「昨夜噛まれた人が投票している先を疑う」というムーブをするにはある程度ロジックが高くないといけなかったらしい。ちょっとは上げたほうが良さそう。

一方直感がめっちゃ強い。どうしてもNPCとの対戦なので相手の挙動や発言から推理は難しい。その補完として「直感」というパラメータがある。これは相手の発言時に嘘を見抜ける確率があがるスキル。

カリスマと村人側は直感、人狼側は演技力を上げていけば勝てる。かわいげとステルスは初期値のままでいい。いらん。

人狼のときは1ターン目に預言者COして、味方の人狼に投票してるキャラAに投票してるキャラBを噛んでAに黒出しして吊るのが強い。なぜかNPCたち噛み先の投票先をめちゃくちゃ重視する。

村側のときは投票先と直感でだいたい見抜ける(ようになる)。NPCたち結構情に厚いのかあんまりライン切りしない。特に直感高いキャラの投票先はかなり参考になる。なので、難しいのは見抜く方より周りを説得する方。ちゃんと議論中の発言を聞いてみんなの投票先を予想して少なくとも自分が吊られないように気をつけよう。

 

人狼ゲーム自体は結構面白いと思った。

ただ難点として、後半になってNPCの行動パターンがわかり、また主人公のステータスが上がってくると余裕で勝ててしまう。

それでも「特記事項」と呼ばれる登場キャラクターの設定をイベントを通して全回収しないといけないので、終盤正直ダレてくる。

イベントを回収するためには敵味方関係なくイベントに関連する人を生き残らせたり、妨害キャラを追放したりと盤面を調整する必要があるのだが、僕は勝ちたくなっちゃってよくイベントフラグを手放していた。

 

最後に

それはそれとして対面人狼したいですね。

ところで人狼TLPT(ザ・ライブ・プレイング・シアター)という、人狼を即興劇でやる劇団があって、ちょうど今公演をしています。

開幕の30分前くらいに役者さんに人狼カードが配られ、最初20分のイントロ劇以外は完全にアドリブで人狼をしながらロールプレイをするという斬新な舞台です。観客側も誰がなんの役職を持っているかわからない状態で観劇するので推理ゲームとしても面白いです。(外から人狼を推理するの、かなり謎解き好きと親和性が高い気がしています。)

現在の演目はFLAGという海賊船を舞台にした僕が一番好きな舞台設定なので、人狼が好きな人・推理が好きな人・即興劇が好きな人はぜひ見に行ってください。

oracleknights.co.jp

舞台に足を運ぶのがハードル高い場合はニコニコでも生放送をしているので是非。

セブンスキャッスルch 放送予定 | 人狼TLPT

FF16をクリアした感想

 

体験版のFF16実況を見てあまりにやりたすぎたので、有休を取って4日でクリアすることにした。

クリア状況はこんな感じ

  • 多分40時間くらい?
  • サブクエストは全部やった
  • リスキーモブはS級は全部やった、他はちらほら穴あき
  • オートアイテムは縛った

せっかくなので感想や記録を残そうと思う。

参考までに筆者の好きなRPGドラクエ11、ニーア、モンハンワールド

elkurin-daily-note 52日目です

総評

とても面白かった。

減点要素はあるけどいい要素がたくさんあったし自分は楽しかった。ただドラクエ11やニーアのように何回も周回しようとは思わないかもってくらい。DLC出たらもう1周します。特にシドやバルナバスなど、ウォールード過去編を期待しています。

ストーリー面はすべてを言葉で語らないスタイルが好きだった。サブクエストやアクティブロアなどで裏設定や細かい設定を知ることができるのもの自分好み。特に青年期後半から使えるようになる戦史をマップで確認できる機能は銀英伝好きとしては最高。

最初の方はゲームオブスローンズの第一シーズンにかなり近しいものを感じ、序盤中盤はハードコアな戦争物に見える。が途中から普通の悪の親玉から世界を救う物語に舵をきっていく(正直、自我自我うるさい)。

最初の方を見てダークファンタジーあるいは軍記物を想定してプレイしているとちょっと肩透かしを食らう。世界を救う王道ファンタジーを思って始めると良い。

アクションゲームとしては爽快アクションで単調さも感じなかったし終止楽しかった。アクション苦手な人向けにもアイテムや難易度設定で配慮されており、安心して楽しめそう。

ストーリー

主人公の人生はドラクエ5、ストーリーの流れはゲームオブスローンズ。

少年時代はとてもよかった。短いながら身内に対する情が沸いた。ウェイドがジョシュアを守ろうと切りかかっていくシーンは「やめとけやめとけ逃げて~」って声に出して言ってた。ゲームオブスローンズのスターク家を彷彿させるような描写や流れで、履修者としては頭に入ってきやすいし脳内補完も効いたということもある。

個人的に好きなシーンは、大公を逃がした後に師であったマードック将軍がクライブに忠誠を誓うところ。アツくて好き。死にかけのタイラーを見てマードックと会釈だけするシーンも言葉はいらない主従関係という感じでかっこよかった。

そういう細やかな良い描写が惨劇に重みを持たせるんだよね。ここまでの流れは満点でした。

 

しかしゲームオブスローンズを想定して進めると存外ぬるくて、青年時代以降の絶望が足りなかった。

まず奴隷時代が完全にスキップされる。つらい13年間の描写がさっぱりなく、ストーリー中にベアラーの扱いの酷さを第三者視点から学んでいくだけなので、実際クライブもそんなにひどい目には合ってないのかもしれない。そのせいか、「人が人として生きていける世界」って何度も言い続けるのに説得力を感じなかった。13年間復讐だけにとらわれてきた人間が一気に方向転換するのか…?という気持ちに。主人公の割には借り物の理想をかかげているしクリスタルの破壊なんかは裏取りもせずシドに言われるがままなところが薄っぺらく感じてしまう。シドと共に活動している間は特に気にならなかったが自分がボスになってからはあんまりしっくりこなくなった。

あと仲間が全然死なない。サブクエストも胸糞展開はほぼなく安心して進められる。拠点が破壊されたときもケネス・マーテルとクエストでかかわった人が死んでいるのは悲しかったが、メインストーリーに出てくるサブキャラたちは全員生きており立て直しの5年もスキップして復興したあとの活気あふれる状態しかプレイヤー視点見れないので、自分はあまり絶望感を感じなかった。唯一重くのしかかってくるものがあったのは大公派・ベアラーの虐殺のところ。(欲を言えば知り合いの村の方が吊られていた方が巨大感情生まれてたな…)アナベラは悪役として大活躍してる一方、アルテマさんやる気ある?思念を断ち切るとかいいながら具体的なアクションは全くなかった気がする。

まあ仲間が死なないのは嬉しいんだけどね。

 

とはいえ、中盤までの国同士の関係やザンブレクの動向は面白かったし、会話も結構気が利いていてよかった。フーゴ戦はクライブの思いとかなり連動できてすごく盛り上がった。アルテマがかかわらない部分はいいシナリオだったと思う。

終盤は世界救済ものになって残念だったものの、世界滅亡手前のときに民が各々立ち上がって手を取り合って戦っていく様は素晴らしかった。今まで協力してくれていた人々が再度出てきて、キャラクターの掘り下げと民衆の決起を同時に描いている良いサブクエストがたくさんあった。サブクエスト中に歩き回ると村人たちがその状況に合わせた発言をしていて、同じ村人が段階によって違う話をしているのも好き。サブクエストは全般的に勧善懲悪ではなく対立しあうもの同士手を取り合うことがテーマになっていた。

そのぬるい世界観でやってきたくせに、最後思い出したかのような滅びエンディング。いろいろ考察の余地はあって自分はクライブ生存派の学説を支持してるけど、なんか物足りなさを感じた。他のキャラの後日譚とかも見せてほしかったな。

キャラクター

みんなキャラが立っていて大変良かった。

エルウィン大公イケてる君主すぎるし、ディオンも中村悠一通りのキャラだった(バハムートの初顕現シーンはかっこよすぎ)。いつも召喚獣の名前で呼んでるのに最後の最後にジョシュアって呼んだのいいですね。

敵役も魅力的なものが多く、フーゴはシド一派からすると最も憎い相手のはずだが、プレイヤー視点だと最愛の者の復讐という過去のクライブと同じ道を歩んでるだけであり、アツい男だった。だからこそタイタン戦の「死んで償え!」は一番アガったシーンかもしれない。

脇役でもそれぞれのキャラに説得力があったしイライラするキャラが誰もいなかったのはすごい。

キャラの掘り下げもわざとらしくなく、製作陣の押し付けがなかったので私は好き。すべてを説明するスタイルではないので、はっきり説明してくれる作品が好きな人は微妙かも。

特に印象に残ったキャラ

バイロン

みんな大好き叔父さん。初登場シーンは初めて見るキャラにも関わらずめっちゃ泣いた。コミカルなシーンもあるしもらい泣きするシーンもあるし、こいつが出てくると嬉しくなる。人間味もあって、その中で精いっぱい生きている様が良い。有能だけど口が滑っちゃうところもかわいい。ずるいキャラ。

 

ガブ

死亡フラグを何度もはねのけずっと仕事をし続ける超有能男。クライブはこいつがいなければ闇落ちしてそうだし、組織も立ち行かないと思う。初対面ではおだてたら動いてくれるお調子者の一人ってくらいだったけど、後半には大人ないい男に成長していた。メンブレしてた時期に出会ったこともあって、主人公と一緒に成長していく感じがエモかった。

 

ベネディクタ

こういうキャラが大好き。ビジュアル・立ち振る舞いも共に最高。一見強くて自信家に見えるが実際は自己肯定感が異常に低くてとても脆い。それを隠すために強気にふるまうがシドに執着していたり、バルナバスに依存していたり、副官には結構甘えていたりとものすごく不安定なキャラ。こういう有能だけど秀才型で視野の狭い人が闇落ちしてくれるんですよ。

過去についても示唆するだけにとどめ、ペラペラお気持ち表明しない誇り高さが良いですね。

 

バルナバ

かっこいい。剣を片手で振るいもう一方の手は腰に回している剣士はかっこいいに決まってる。パワーのバハムートに対し技巧のバルナバス。最初の会合のシーンも退廃的な王感がかっこいい。シドが言ってたアルテマに狂わされた人は多分バルナバスだと思っているが、狂う前のバルナバスがとても見たい。シドと主従関係にあったときは結構仲良くやってそう。とても見たい。オーディン戦のヒャハハ形態結構好きだったし、なんだかんだ自分の仕事はやり切って死ぬのもいい。

 

他にも脇役がそれぞれストーリーがあって大変良かった。ネームドのキャラの多くは最後の怒涛のサブクエストで掘り下げがあるので絶対にやった方がいいです。特にトルガルのサブクエはかなり心に来ました。エンディング後も共に生きてほしい。

マダム・イサベルがオリフレム公に過去を暴かれるシーンで、ニヤッとしながら「やきもちかしら?」って言うのがかっこよすぎ。ルボルのサブクエストは泣いた。イーストプールの卑屈になっているベアラーたちを見捨てず、フライパン振り上げながらたきつけるマーサさんアツい。カンタンはサイコパス

よくわからなかったキャラ

アナベラ

ゲームオブスローンズのサーセイタイプの悪女かと思ったがジョシュアを救い出そうと奔走する姿はないし死んでもふ~ん残念って感じで不思議だった。血が大事という割には”正しい血”を引いてるクライブをこれでもかというほどに嫌っているし、その一方で何の召喚獣も継承していないオリヴィエを大事にしているし、価値観をつかめなかった。とはいえ終止存在感があり最期まで自分勝手でいい悪役だった。個人的な好みとしてはアナベラの声はああいういやらしい感じではなく淑女っぽい方が良かった。

ジル

意志が見えないキャラで物語から浮いているように感じた。再会もあっけなく発言も凡庸で正直ジルとクライブの会話ムービーは飽きた。既存の物語に後付けした夢主人公って感じ。「恋人が死ぬ」という起爆剤のためのキャラかなと思っていたが結局最後まで死ななかった。ビジュアルはとても良い。

アルテマ

こいつは分からないというわけではないが、とにかくラスボスのくせに魅力がなさすぎる。思念を断ち切るという割には特に何もせず、最後にやったメンタル攻撃とかぬるすぎて笑った。こいつがかかわるとストーリーがつまらなくなる。

 

音楽

召喚獣ごとにモチーフBGMがあるの大好き。召喚獣バトルのとき両者のモチーフがうまく融合していたりアレンジが入るのがアガった。タイタンからシヴァのBGMが入るところとかオーディンからバハムートに切り替わるところとかかなり好き。

最初のフードの男もよくよく聞くとアルテマのモチーフが1フレーズ流れている。フェニックスの初顕現の前に超スローなフェニックスのモチーフが流れている。こういうの好きですよ。

バルナバス戦は序盤は重苦しい曲調だったのが自我という甘美なる毒を手に入れてからテンポアップして長調も入るのがいい。

推しBGMはフェニックスとバハムート。(FF全然やらないので知らないんですが、召喚獣のモチーフ曲って過去作でも共通なんですか?)

 

ただ音楽が良いというよりかはキャラがいいのでその象徴にも良さを感じる、といった感じで、全体的なBGMはあまり自分好みではなかった。マップ開いたときに流れるよく聞く曲(レミファラ↑レミファラ↑レミファラ↑レミファラ↑レラファミ↓レラファミ↓レラファミ↓レラファミってやつ)とか割と嫌い。

映像

一番よかったのはキャラの表情とか振る舞い。すべてを言葉にしないで演技(?)で伝えてくれる作品が好きなんだが、それを実現できるレベルの映像技術に拍手。素晴らしかった。

他にも迫力のあるムービーやバトルがたくさん出てくる。

最初のシヴァvsタイタンのシーンとかすごいし、リアルタイムで戦って地形が変化している中矮小なる人間として走ってるのもよかった。

召喚獣バトルも迫力満点の映像が目白押しで、デビルタイタン戦とかやばかった。お前らこういうの好きでしょ?っていうのをすごいクオリティで見せられる。ラスボス戦はピカピカ光りすぎだった。

アクションゲームとして

そんなにアクションゲーム愛好家ではないが、自分は面白かった。特にスキルリセットをノーコストでどこでもできるのが良くて手に入った新スキルを気軽に使ってみることができた。雑魚戦はかなり楽にまとめて排除できるので爽快だったし、回避の判定が甘めだし回避やフェニックスダッシュがノーモーションで発動できるので気分がいい。

ただすいすい行きすぎ感はあり、特にラスボス戦はあっけなかった。あとピカピカ光りすぎてモーションが見えん。死んだ回数は半顕現タイタンで1回、バハムートのシューティングゲームで1回、オーディンで1回、リスキーモブで3回くらい。

またボス戦が召喚獣バトルばかりで、いろいろ考えてカスタマイズしたスキルセットが全く役に立たないことが多いのが残念だった。でもオーディン戦がめっちゃ楽しかったのでヨシ!

 

以下に実際に使ったお気に入りセット

序盤は特にカスタマイズ幅がないのでカット。

タイタン入手後

フェニックス:イグニッション・ルックスガンビット

ガルーダ:ガウジ・エアリアルブラスト

タイタン:ワインダップ・激震

バーサーカーリング・イグニッションダメアップ・エアリアルブラストCD短縮

 

メインはフェニックス。バーサーカーリングはかなり使いやすくて、回避した後にスローモーション入るのが助かった。ただ最後は回避をシヴァスナップでやるようになるので必要なくなり切った。

 

バハムート入手後

フェニックス:イグニッション(パイルドライブ)・激震

ガルーダ:ガウジ・エアリアルブラスト

バハムート:ワインダップ・ギガフレア

バーサーカーリング・イグニッションダメアップ・エアリアルブラストCD短縮

 

メインはフェニックス。メガフレアタイミングでバハムートを使用。メガフレアだいぶ強いけどテンポ悪くて結局あまり使わなかった。

 

最終盤

フェニックス:イグニッション(パイルドライブ)・転生の炎

ガルーダ:ワインダップ・ギガフレア

シヴァ:ガウジ・ダイヤモンドダスト

源氏の小手・転生の炎CD短縮・ダイヤモンドダストCD短縮

 

メインはシヴァ。シヴァスナップで凍らせてからガウジの流れが鉄板。ガルーダきってオーディンでもよかったかも。

オーディンを使わなかったのが心残り。境界転移とかすごい面白そうだった。

 

 

 

Mariage Frères の Tea Club に参加してきたよ

今日は会社を抜け出してお昼にMariage Frères(マリアージュフレール)のTea Clubというイベントに参加してきました。仕事中に飲む紅茶は美味いぜ

elkurin-daily-note 34日目です

 

参加するまで

こちらのサイトからコースを選択して応募し、先着○○名に間に合えば参加できます。私が今回参加したのは茶園へのいざないという様々な茶園から採れるシングルオリジンの紅茶を学ぶ回でした。

ご飯代やお茶代ではなく受講代と書かれているところからも学びに来ている感がありますね。

参加できる場合事前に招待状が届きます。なんか嬉しい。

 

当日の雰囲気

招待状を持参するとTea Clubの会場に通され、一人ひと席占拠させていただけます。

机には本日の講義の資料がおいてありました。

 

この冊子を開いてみると...

 

 

中身はからっぽ!自分でメモを取るんですね。受講しにきているので当然でした。

他に参加されている方々も当たり前のようにペンやノートを出しており、また一人で参加される方も多く、完全に昼間学校でした。実際にティーサロンをやってらっしゃる方とかもいたのかもしれませんね。

 

時間になるとTea Clubが始まります。

まさに授業のようにMariage Frèresの歴史の解説から始まり、流れるような話術でいつの間にか1つ目の紅茶の説明へ。舌が肥えてる方は舌も回るようです。この講義パートがかなり面白かったです。その後も講話・試飲をセットで繰り返していくのですが、講話では紅茶ごとに銘柄の説明だけにとどまらず、その背景や小話などを聞くことができ、はやく次の出せよ〜って気持ちには全然なりませんでした。

本題

では今日実際にテイスティングした紅茶について書いていきます。

 

注意:今日聞いた講話をそのまま引用しておりソースには当たっていません。自分の誤解・聞き違いなどで嘘や一方的な解釈が含まれるかもしませんが許してね☆(・ω<)

1杯目 ブルーム・フィールド

一番手はファーストフラッシュのダージリン

オレンジ・バレーというダージリン地方の茶園の中でも標高の高いエリアの名前がブルーム・フィールドというそうです。(グレイス・フィールド農園となんかちょっと似てませんか?...失礼しました。)

ちなみにオレンジ・バレーという名前はもともとオレンジ畑だったところに由来しているそうです。そう思うとオレンジの香りがしてきませんか?と解説されていたのですが、素人には感じることができませんでした。残念。

透明度の高い黄金色の紅茶でかなり白茶などに近い色合いでした。味はやはり最高級のファーストフラッシュなだけあって美味しいですし自分好みです。

 

ところでダージリンと一口に言っても春摘み(ファーストフラッシュ)と夏摘み(セカンドフラッシュ)では相当違って、世に多く出回っている夏摘みのダージリンを想像して春摘みの紅茶を飲むと全然ちゃうやんけ!ってなりますよね。自分もなりました。

実を言うと、もともと「ダージリン」と呼ばれる紅茶はそんなに好きではなくてMariage Frèresのブレンドティーの方が美味しいじゃんって思ってました。そんなときにナムリング・クイーン・アッパーという春摘みのダージリンを父からの誕生日プレゼントとしてもらったのですが、自分にとっては初めての高級茶だったので値段を聞いてびっくりしましたね。父のほうが多分びっくりしてました。

高級茶だ!と思ってウキウキしながら家に帰って淹れてみたのですが、なんか味がしなくていうほど美味しくなくて、高いといってもレアなだけか…トリュフみたいんもんか…(流れ弾トリュフさんごめんね)って少しがっかりした覚えがあります。

ですがその後少しずつ調整しながら何度か淹れてみて、3,4度目くらいにめっちゃ美味しいファーストフラッシュのダージリンが飲めたんですよね。思えばあれが僕が最初に紅茶に凝りだした時かもしれません。あいつに財布から金をスられ続けています。

それ以降ナムリング農園の春摘みダージリンはベスト・オブ・ザ・僕の座を譲らず、今でもストックが切れるたびに入荷しています。

 

話が逸れちまいました。

春摘みと夏摘みは全然違うねという話に戻します。

もともとダージリンはイギリスのものという認識が一般的でした。そのためかイギリス流の紅茶で親しまれるしっかり発酵したザ・紅茶っといったものが作られ続けており、世に流中しているのも夏摘みのダージリンのみでした。しかし実際にダージリンの茶園に赴いてみると、地元では春摘みのダージリンも作られており、ただ売れないから世に出ていなかったそうです。Mariage Frèresのオーナーさんはその味を気に入りフランスならウケる!と思ったそうで、そこからファーストフラッシュの紅茶がフランスや日本で人気になったそうです。

面白いのは、フランスと日本は地理的に相当離れていながらも味覚が近いそうなんですよね。日本では緑茶という発酵しないお茶が親しまれていたので、そこが春摘みの感性と近いのかもしれません。(あとなんかモゴモゴ発音する感じも似てますよね。)

 

2杯目 八十八夜茶

お次は日本茶です。先程とは打って変わり、水出しのアイスティーで出てきました。

(写真は少し飲んでしまったあとです。)

八十八夜というのは「摘んでから88日目の夜に飲む」という意味で、できたてほやほやの新茶です。

訂正(2023/07/01):調べてみたところ、「(立春から数えて)88日目に摘む」という意味が一般的のようでした。おそらく摘んでから88日目というのは自分の聞き間違いだと思います。

実は新茶だったり新ワイン(ボジョレ・ヌーヴォ)だったり、「採れたばかりのなにか」を楽しむという文化は日本やフランスでは一般的な一方イギリスではそうでもないそうです。こんなところも日本とフランスの感性は似ているんですね。

飲んだ印象を一言でいうと、底抜けにみずみずしい、でした。アイスティーということもあり涼しさとか清涼感を強く感じました。瓜っぽい風味もあったのがさらにみずみずしさを加速させていましたね。日本茶というと苦味を感じることが個人的には多かったのですが、この緑茶は苦味控えめでとてもすっきりしました。

ところで、この緑茶は無農薬の茶園で作られているそうです。日本茶の農園は8割がた農薬が使われおり、ようやく出会った無農薬の農園もとなりの農園が農薬を使っているせいで茶葉から農薬が検出されてしまうなど、難しい環境だそうです。フランスでは紅茶は当然無農薬!という通念があるそうで、フランスの紅茶ブランドで日本茶を作るのも一苦労ですね。そんな中でMariage Frèresのオーナーさんが直々に出向いて探した無農薬の茶園で作られた日本茶ということなので、競合争いもあり農園の場所はシークレットとのことでした。

 

3杯目 マオリ・ローブルージュ

お次はなんとニュージーランドからの参戦です。発酵度80%程度の青茶です。

ニュージーランドに茶園あるんだ!というのが第一印象ですね。

実際作り始めたのは比較的最近だそうです。とあるひとがツバキが咲いているのを見て、お茶も栽培できるんじゃね?!とおもって始めたらほんとにできたという経緯だそうです。補足すると、茶葉ができるチャノキはツバキ目ツバキ科ツバキ属です。

青茶はものによって発酵度合いがまちまちで、10~80%の振れ幅があります。そのなかでも80%というのは紅茶にかなり近い分類ですね。実際紅茶のようなしっかりとした色合いが見て取れます。そういえば、Mariage Frèresの青茶はイメージを大切にするために青いお花などをブレンドして青色に見せることが多いのですが、今回はシングルオリジンということでもともとの色である赤の色味が出ていますね。

茶葉の香りはかなりスモーキーで、講話では「炒ったカシオナッツ」と表現されてました。表現力が段違いですね。

実際に飲んでみるとやはりパンチのある一口目で燻製茶っぽさを感じました。ですが、2口3口飲んでいるとだんだんまろやかさを感じるようになって、長く残る後味も強いがしつこくなくて満足感を感じる一品でした。

3杯目からはお料理と一緒に飲むということで、少し濃い目のお茶でも単独で飲んでいるときより軽めに感じるのかもしれませんね。(ところでお料理の説明はさっぱり覚えていないので、このブログでは飛ばします。ちゃんと聞いてはいたんですよ?)

4杯目 ロア・ドゥ・チェ・チュアン

いよいよ中国茶の登場です。銘柄の意味は「四川省の王」です。

f:id:elkurin:20230702175532j:image

名前の通り中国の四川省の茶園で摘んだ紅茶です。茶葉をよく見るとゴールデンチップと呼ばれる新芽がちらほらあります。ゴールデンチップって言葉は紅茶アドバイザーの資格をとったときに覚えましたね。語彙が増えると表現力の幅が広がって嬉しいです。

ザ・紅茶といった感じの王道に少しマロンっぽい香りがしています。モルトウイスキーのような印象だと解説いただいたのですが、どちらも飲まないのでよくわかりませんでした。

このあたりはメイン料理を食べていたので正直印象が薄いです。料理のナッツがおいしかったです。

 

5杯目 キャッスルト

締めはかの有名なダージリン・キャッスルトンの夏摘み紅茶です。

f:id:elkurin:20230702175549j:image

ダージリンに始まりダージリンに終わる至高の時間でした。

ところでなぜキャッスルトンがこれほどまでに有名になったのでしょうか?それは「虫を使ったから」だそうです。その由来は東方美人という台湾茶で、その茶園には虫がたくさんおり、虫に茶葉かじられることでそれに対抗するため葉っぱに栄養が増え、結果美味しい茶葉がたくさん出来たそうです。東方美人を参考にキャッスルトン農園は虫を人工的にコントロールするというアプローチをした最初の茶園だったそうなんですね。

1杯目の項目で語ったとおり自分はセカンドフラッシュの紅茶はそんなに好きではないのですが、ここで飲んだキャッスルトンは激旨でした。

春摘みで感じる木っぽさ(これがボキャ貧のマックスボキャブラリー)がキャッスルトンでも感じられファーストフラッシュの繊細さも兼ね備えながらしっかりとした味わいもあり、最後にふさわしいとても華やかな一品でした。

1杯目から進むにつれてだんだん文章が短くなってきている気がしますが、これは美味しくなかったからではなく文章力が枯渇してきたからです。

面白かったこと

一人でお茶や食べ物を楽しんでいる時、自分が感じている味覚・嗅覚を言葉にすることはあまりありません。美味しいお店に友人と行っても正直食事とはあまり関係のない話に花を咲かせているので、あっこれめっちゃ美味い!くらいしか言いません。

今回は講話という性質上、お茶の味わいや特徴を説明するために言葉を尽くした方の話を聞くという体験をしました。テイスティングノートにも一期一会の味わいを言葉にして残すためにさまざまな評価軸が提示されおり、今の自分では評価軸を与えられてもレーティングするための言葉選びがわからんなと思いました。自分の知っている感性を表現する言葉を手に入れるのはとても楽しいですね。

フランス流では、お茶の香り・味をお花やフルーツ、その他食べ物に例えて楽しむ文化があるそうです。言葉を自由に操れるようになると遊びが増えて楽しいだろうな。

 

おしまい。

ミルクが先か紅茶が先か

ミルクティーを淹れる際ミルクを先に入れてから紅茶を注ぐべきか、紅茶を注いだところにミルクを淹れるべきか、これは長年続く議論である。
前者の流派をミルク・イン・ファーストと呼び、後者をミルク・イン・アフターと呼ぶが、この議論の始まりは1800年代にまで遡る。

イギリス人は議論好きである。

では現実でおそらく多数派を抑える紅茶を先に淹れる派を軸にして既存の議論をなぞってみる。

お題「紅茶を先に淹れるべきである」

肯定立論(ミルクインアフター派):ちょうどいい味わいを調整しやすい

内因性:ミルクと紅茶の適切な分量をはかるのが難しい

発生過程:紅茶を入れたあとにミルクを淹れるとかんたんに調整できる

ミルクティーでは紅茶:ミルク=2:1くらいで淹れることが多い。

少ないものを後で入れたほうが調整がしやすいし、また多くの場合ミルクはたくさんあって紅茶は飲む分ちょうどしかないので、ミルクで調整するのが合理的だろう。

重要性:おいしいミルクティーを飲みたい

否定立論(ミルクインファースト派):科学的においしい

固有性:ミルクを先に淹れることで急激に温度が上がらずタンパク質が熱変性せず美味しいミスクを飲めている

75度を超えるとミルクのタンパク質は変性してしまう。熱変性したミルクは風味が落ちる。

発生過程:熱い紅茶にミルクを流し込むと温度が上がり75度を超えてしまう。

王立化学会 2003 引用はじめ

Milk should be added before the tea, because denaturation of milk proteins is liable to occur if milk encounters temperatures above 75℃. If milk is poured into hot tea, individual drops seperate from the bulk of the milk and come into contact with the high temperatures of the tea for enough time for significant denaturation to occur. This is much less likely to happen if hot water is added to the milk. Once full mixing has occurred the temperature should be below 75℃, unless polystyrene cups were used.

引用終わり

重要性:おいしいミルクティーを飲みたい

否定反駁

  1. ミルクと紅茶の量を計れば別に調整できるやん!
  2. ミルクを先に淹れるのは熱いお茶を先に淹れるとカップが割れるからできない貧乏人だ!

肯定反駁

  1. はかるのはめんどくさい!
  2. 俺は貧乏人ではない!
  3. そもそもタンパク質の変性なんか気づくかよ!

 

...

 

こんな感じだろうか

だが不毛な論争に終止符を打つアイデアを思いついた

カウンタープラン:ミルクも紅茶も同時にいれちまえ!

これをこうして(水160ml)

f:id:elkurin:20230602121432j:image

こうして(ミルク160ml)

f:id:elkurin:20230602121441j:image

 

沸騰させて

f:id:elkurin:20230602121634j:image

 

茶葉を計って(2人分、ここでは6g)

 

茶葉はお湯に浸しておいて

f:id:elkurin:20230602121718j:image

Note: 茶葉が開いていないとミルクになじまず抽出できないので先に浸しておこう

 

沸騰する直前に火を止めて茶葉を入れて

f:id:elkurin:20230602121731j:image

 

軽く混ぜて

f:id:elkurin:20230602121738j:image

 

蓋をして蒸らして

f:id:elkurin:20230602121743j:image

 

普段より長め(3分目安の紅茶なら4分〜5分くらい)待って

f:id:elkurin:20230602121749j:image

美味しいロイヤルミルクティーの完成!

 

...

 

ところで僕はストレートティー派です

 

2のべき乗サイズの配列は危ないという話 via 行列積

こんにちは。労働者です。とあるプログラムで学生さんの課題を添削していたら面白い話に出会いました。

 

僕は今、主に学部生向けのインターン研修的なプログラムでメンターなるものをやっています。メンターとしての仕事は、学生さんの課題へフィードバックを返し、Office Hourというセッションを毎週設けて質問受けやCSに関するトークを行うといった内容になっています。今回話題に取り上げるのはその中の課題の1つ、「行列積のプログラムを書いて時間を計測せよ」という何気ない話で、続く課題たちのいわば前座のようなものです。こういったところに沼は隠されているものですね。

担当している学生さんたちが細かい実験を行ってくれて以下のような疑問が提示されました。

 

「行列積の計算が N = 1024のときだけ N = 1023, 1025のときに比べて3倍遅いのはなぜ?」

 

配列のサイズが2のべき乗になるのは避けるべきといった話は聞いたことがあるような(ないような)気がしたのですが、自分にも答えが出ませんでした。というわけで調査を行いましたので、その結果を書きます。

※正確には「行列積の計算が N = 2^nのときだけ N = 2^n+1のときに比べてかなり遅いのはなぜ?」といった結果を提出してくれました。

 

結論

多分キャッシュライン衝突が原因です。
行列を縦方向にアクセスしていくステップで、Nが2べき乗の際に同じキャッシュタグを踏みまくり、キャッシュの中に収まりきらなくなってキャッシュロードの時間がかかる、ということだと思います。以下で詳細を語ります。

今回は行列積を例にして考えましたが、一番の重要ポイントは「縦方向のアクセスをする機会があるか」というところであり、行列積以外の問題にも適用できる話だと思います。みなさん、2のべき乗サイズの多次元配列は避けましょう。

 

前提知識とスコープ

ここで考える行列はint型の要素を持つN=1024付近の行列で、mallocなどで連続するメモリを確保したとします。行列積の計算は特に工夫せず、以下のようなシンプルな実装を仮定します。

for (int i = 0; i < N; i++)
  for (int j = 0; j < N; j++)
    for (int k = 0; k < N; k++)
      Answer[i][j] += Matrix1[i][k] * Matrix2[k][j]

メモリ上で行列の要素がどう保管されているかというと、1行目のデータが左から順に入り、次に2行目、3行目…と並んで入っています。


ところでCPUには一度データを探しにメモリへアクセスすると、そのメモリから連続する部分をキャッシュにロードする機能があります。 キャッシュにロードされていると、2度目以降のアクセスが高速化されます。一度にロードされるデータ量はCPUによって異なりますが、今回は僕のPCの仕様である64 byteを採用します。ちなみに、この値はキャッシュラインサイズと呼ばれます。

※今回の話はvector型では再現できません。vectorでは連続するメモリに行列のデータを保存しておらず、各行データを持つ配列のポインタを配列として持っており、この各行データはバラバラな位置に配置されている可能性があるためです。

※行列積の例では「Matrix2を転置すればよい」などの解決策がありますがOut of Scopeです。この記事の主目的は現象の解明・検証であり、サブ目的は「縦方向のアクセスをする際2のべき乗サイズの配列が危ない」というより大きい問題についてかみ砕いて説明することでそのために行列積を例として使用しています。もし行列積だと気になる場合は、横方向でも縦方向でもアクセスする必要があるような問題(画像処理など)に置き換えて考えてもらえれば幸いです。

行列計算

では、実際に行列計算のどの部分が重くなるのかを考えていきましょう。行列のある要素2行目2列目を計算するには以下のような計算を行う必要があります。

f:id:elkurin:20210525010609p:plain
Matrix1では連続したメモリを読んでいけばいいので、1列目のデータを読み込めば2列目以降64 byteまではキャッシュを読むだけで調べられます。一方でMatrix2では1行目のデータを読み込んだとしても2行目はまだキャッシュにないデータであり、3行目、4行目でも同様に新たなキャッシュをロードしに行かないといけません。これをN回行う必要があります。

では次の行列の要素2行目3列目を計算する時を考えましょう。

f:id:elkurin:20210525010857p:plain
先ほどと同様Matrix1は連続したメモリを読んでいきキャッシュからデータをとれるので問題はありません。一方でMatrix2については、少し事情が異なります。先ほどの計算で一度1行目からN行目まですべての行の最初の64 byteをキャッシュにロードしているので、先の計算時のキャッシュが残っていれば、今回の計算で再度メモリを探しに行く必要はなくなります。

つまり、1024個分のデータをキャッシュに保存することができれば、次のMatrix2を縦方向に辿るステップで再度データをロードする必要がなくなり早くなるということです。

 

ここまでをまとまとめると、何個分のキャッシュラインを保存することができるかできないかがボトルネックになりそうですね。

 

キャッシュライン衝突

それではキャッシュに保存できるのかを見ていきましょう。キャッシュサイズなどはCPU依存ですが、今回は僕のPCスペックを参照して、以下のようにします。

  • L1D キャッシュ: 32KB/core, 8-way set associative, 64 sets, 64 byte line size
  • L2 キャッシュ: 1MB/core, 16-way set associative, 1024sets, 64 byte line size

L1キャッシュが一番アクセスしやすくてL2キャッシュは少し遅いですが、ここまではコアごとのキャッシュであり共有ではないので十分早いそうです。なので、L2に入るかどうかを考えます。もしキャッシュの容量をフルに使えれば、1024行分のデータをすべて保存できます(L1Dキャッシュでは足りません)が、キャッシュはハッシュテーブルのようなものなので、全容量使い切れないケースが多いです。というわけで、キャッシュの中身をもう少し詳細に考えます。


セットアソシアティブ方式 (set associative):ひとつのタグに対していくつかのデータを格納できる方式です。 n-way set associative, m sets といった形で呼ばれ、この場合m個のタグを持ちそれぞれn個までデータを格納できるキャッシュとなります。
f:id:elkurin:20210525011616p:plain
 

今回の仕様である「1024セットの16-way set associative」 では、キャッシュタグを1024個持ち、各キャッシュタグに対し16個分の64byteデータを格納できるということになります。そしてタグは64byte分のデータに共通するアドレス(addr / 64)をキャッシュタグの最大値で割ったものになるので

tag(addr) = (addr / 64) % 1024

のように計算できます。この値は、Matrix2を縦方向に辿っていくとどうなるでしょう?N=1024のとき、addrは 4byte * 1024 ずつ増えていのくので、tagは16回ごとに同じ値を取ります。そしてL2キャッシュは16-wayなので256(=16*16)までしか保存できないということになります。これは1024個分のデータには足りません。

一方N=1023, 1025のときは1024の時と違って1024で綺麗に割り切れないので余りは異なる値を巡回することになり、キャッシュの容量をうまく使ってデータを保存しきることができます。

 

ここで全節の内容を思い出すと、

1024個分のデータをキャッシュに保存することができれば、次のMatrix2を縦方向に辿るステップで再度データをロードする必要がなくなり早い。

という話がありました。今節の結果を合わせるとN=1024のケースだけ遅くなることがわかりました。

 

それっぽい検証

計測時間の比較

メモリアクセス時間をものすごく適当に見積もります。

1回ずつの計算ステップで行っているのは以下です。

Answer[i][j] = Answer[i][j] + Matrix1[i][k] * Matrix2[k][j]

ここでのメモリ呼び出しは Read 3回, Write 1回 となっています。この中でMatrix2[k][j]のReadだけ遅くなりがちな要素となります。

ReadもWriteもだいたい同じ時間tで、キャッシュミスの時のみ10倍程度の時間10tがかかると見積もると、N=1024のときは毎回キャッシュをロードするので13t(=t+t+t+10t)、N=1023, 1025のときはだいたいすでにキャッシュに入っているデータで計算できるので4t(=t+t+t+t)の時間がかかるといえるでしょう。

これらを比較するとN=1024ではN=1023, 1025に比べて3倍強(~13t/4t)の時間がかかるという見積もりになりました。

ここで実際に行列計算を行って計測してみると

N = 1023: 1.07754s
N = 1024: 3.32129s
N = 1025: 1.02125s

という結果になりました。なんかそれっぽい!

キャッシュロード回数

キャッシュロードの回数をすごく適当に見積もります。

N = 1024のとき、すべてのステップでMatrix2のキャッシュがヒットせずロードが起きているので、だいたい10^9(~1024*1024*1024)程度のオーダーになりそうです。実際にはMatrix1や解行列のロードもあるので、これより少し多くなるでしょう。

一方N = 1023, 1025の時は、各要素の計算開始時には毎回キャッシュのロードをやり直す必要がありますが、各要素の計算中はMatrix1が横方向に64byte進むたびにロードしなおし、すなわち64(~1024/(64/4: int型のbyte数))回程度ロードすることになるので、だいたい10^8(~1024*1024*64)程度のオーダーになりそうです。実際にはこれより多くなるでしょう。

以下のコマンドでキャッシュのロードの回数を確認しました。

perf stat -e LLC-loads ファイル名

 このとき

N = 1023: 133,622,632 回
N = 1024: 2,149,731,970 回
N = 1025: 87,673,800 回

 という結果を得られました。なんかそれっぽい!

※今回はあくまでオーダー確認が目的なので他プロセスの影響を排除するなどの作業行っていません。

 

以上2つの検証からそれっぽい!ということがわかりました。
議論の余地はあると思うので、訂正・改善があり次第更新します。
Special Thanks to @hikalium.

 

ChromiumでFeatureをShipした話

2020年の1月-3月の3ヶ月間、GoogleChromeチームでインターンをしました。Chromeプロダクトでインターンをするのはこれで3回目です。したがって、Chromeにもインターンにも比較的慣れており、仕事のスタートアップとラップアップに限って言えば正社員さんよりも回数をこなしている入社と退職のエリートです。

そんな僕が今年配属されたのはChrome Worker Teamでした。この記事ではインターンで実際に体験させてもらった「ChromiumでFeatureをShipする流れ」について紹介しようと思いますが、その前に今回のターゲットであるWorkerというものについて軽く説明してみます。(詳しい仕組みなどはまた別の記事で書いたり書かなかったりします。)

Workerとは?

Workerとは、別スレッドでスクリプトを処理させるためのAPIです。重そうな処理とか別働隊として稼働し続けてほしい処理などがあるときは、その内容を書いたhoge.jsを用意してnew Worker('hoge.js');などとやると、別スレッドを立ち上げて走ってくれます。

developer.mozilla.org

"Worker"という名前は馴染みがない人が多いと思いますが、みなさんも知らないうちに結構使っているはずです。

例えばGmailYoutubeなどの通知がPCに通知されるのはWorkerの1種であるService Workerのおかげです。Chromeブラウザを使っている方は、ブラウザの右上にあるメニューを開いてMore tools > Task Manager と選択するとChrome内のプロセスが確認できるんですが、例えば僕の画面(下図)だと3行目に"Service Worker: https://twitter.com/sw.js"というのがありますね。これはTwitterがPCに通知を出すスレッドで、Twitterのタブを閉じてもkillされずに独立して動き続けます。ページを開いていないのにちゃんと通知が来るのはこいつのおかげですね。

f:id:elkurin:20200421011906p:plain

TaskManager

今回僕が携わったShared Workerは複数のページからアクセスできるスレッドを作成するAPIです。

new SharedWorker('worker.js', { name: 'worker-name', type: 'module'});

上の赤文字で書いてある部分が別スレッドで走らせたいスクリプトになりますが、現在ここで使えるのはClassic scriptのみです。Classic script?なんじゃそれ?というと、

import 'module.js';

これができないスクリプトのことです。Cで言えば#include "stdio.h"的なやつのことですね。つまり従来のShared Workerでは他のスクリプトを呼び出すimport文が使えなかったわけですが、そこでModule scriptというimport文に対応したscriptを使用できるようにするModule Shared Workerを作るというのが僕のプロジェクトです。

実際に働いていると、実はコーディングをしている時間はそこまでなく、ソフトウェアエンジニアとは英語を書くお仕事なんじゃないかという気持ちでした。specに深入りした複雑な議論を必要とする変更が多く、そのたびにdocumentを書いたり見つけたバグをcrbug.comにレポートしたり書面で議論したりと、書面化能力がかなり身についたと思います。以下は書いたdocumentの一例です。

docs.google.com

 というわけで、本題である「ChromiumでFeatureをShipしてみた」に移りたいと思います。

FeatureをShipするまで

ChromiumでFeatutreをShipする、すなわち機能をリリースするには、結構長くてしっかりした工程があります。ざっと以下のような感じになります。

  1. Design Docを書く
  2. 機能を実装する
  3. テスト(Web Platform Test)を完備する
  4. セキュリティ脆弱性を直す as far as we know
  5. 他のブラウザからのサポートを得る
  6. Intent to Shipを提出してAPI ownersから承認をもらう
  7. リリース!

 それぞれについて体験談を書いていきます。

なんのFeatureを作るのか

ブラウザでFeatureを作る際、(私の知る限りでは)先にWhatWGというWeb標準化団体がつくた規格があり、それに沿うように機能を作っていくことが多いです。今回のプロジェクトも同様で、workerのspecに仕様だけ策定されてまだ実装はされていないModule Shared Workersを作りました。

今回、時間の限られたインターンということで、何を作るかについては最初から与えられていました。

Design Documentを書く

"Shared Workersをモジュール対応させる"と言っても、どういう実装方針がいいのか、どういう関数やクラス、パラメータが必要か考える必要があります。これらをまとめて書き記したものがいわゆるDesign Docです。

Documentを書くのは、今みんなに読ませるためというより、のちの開発者を助けるためだと思っています。似たような機能を作りたいとき、改善・拡張したいとき、バグの直し方が非自明なときなどにDocumentがあるととても幸せだし、逆に誰しもDocumentがなくて「READMEはどこだコラァ!」とキレたことがあるでしょう(?)。そう、つまりDocumentが必要なのは後世のエンジニアたちであり今の俺には必要ない!のでサボりにサボって実装が終わったくらいに書き始めました。

これは僕が書いたDesign Docです。

docs.google.com

 

Featureが動くために必要な実装をする

デザインが決まれば次は実装です。(ちなみに私はデザインが決まる前に実装しちゃいました。てへぺろ☆(・ω<))モジュールをユーザーに使ってもらうためには、そもそもユーザーがモジュールを指定できるようWebAPIを変更しなくてはならないので、ここはエイヤッと実装してしまってから、さてプロジェクト開始です。

機能を作る上で最初に行うのはflagを作ることです。chromiumでは新しい機能を追加する際、それぞれの機能に対応したテストフラグを用意し、そのflagがenableのときだけ機能が実行されるようにします。Behind the flagとか言われるやつですね。機能が完成してstableになるまでこのflagの裏に実装していくことになります。

このあと、メインの機能であるstatic importとdynamic importをサポートしていくわけですが、気合入れてとすると動きました。機能が使えるかのテストも行い成功、実装完了です!一気に進みましたね。ここまで2週間です。

テストを書く

実装終わったし動いたんだから、あとはちょちょいのちょい。そう思っていた時期が私にもありました。本当の試練はここから始まります。

「テストを書く」とは具体的に何をするのかというと、Web Platform Test (a.k.a WPT)というオープンソースのテストの群れにcommitするということです。Chromeチームの方がWPTの走らせ方を紹介しているので興味のある方は走らせてみてください。

qiita.com

閑話休題Web標準化〜

WPTはChrome専用ではなく、ブラウザを作るすべての人のために用意されたものです。なぜChrome専用のテストを使わないのかというと、ブラウザ開発者は他のブラウザと足並みを揃えるべきだからです。あるブラウザがなんかすごいWebAPIを作ったとしても、デベロッパからしてみれば、他のブラウザで動かないAPIなどごめんである、というわけです。もちろん各々のブラウザで性能や機能が異なっているからこそ様々なブラウザが跋扈しているわけですが、一部のブラウザでしか動かないサイトが量産されてはたまったもんじゃないので、ある程度のWebの標準化は必要視されています。この「標準化」を行っているのがWhatWGという団体で、HTMLやらDOMやらの標準規格を作って、これを守ってねと各ブラウザたちに推奨しています。私が今回お世話になったhtml specfetch specWhatWGによる仕様書です。この仕様書はWhatWGさんたちからただ降ってくるものではなく、様々なbrowser vendorたちが意見を持ち寄って現在進行形で作られている総合知であり、僕もインターン中に何度かspecにcontributeさせてもらいました。以下は記念すべき僕のfirst commitです。


長々と脱線してしまいましたが、WPTはWhatWGが定めたWeb標準を満たしているかを確認するためのテストであり、すべてのブラウザがパスすることが期待されるテストです。しかし当然ながら仕様を定めた瞬間に実装も完了するわけではなく、むしろ仕様の議論を重ね吟味されてから実装する方が賢明でしょう。そしてテストに関してもやはりモノがなければ作るのは難しいです。というわけで、WPTにテストを追加するのも多くの場合最初に機能を実装した人の仕事になります。今回のModule Shared Workerは光栄なことに僕が初の実装者なので、面倒なことに「Web標準を満たしているかを確認するためのテスト」を完備しなくてはなりません。

というわけでたくさんのテストを書きました。来る日も来る日もテストを書きました。何をテストすべきかは簡単な問題ではなかったのでどういうテストが必要なのかを考えて洗い出し、手書きのテストをたくさん書き、組み合わせ爆発するものはテストジェネレーターを書いて、コーナーケースを探して、たくさんのテストを作成しました。

テストが通るようにデバッグ

たくさんのテストを書くと当然たくさんのバグが見つかります。最初から完璧のつもりで実装してますが、なんだかんだバグは出てくるものです。特によくバグが埋まっているのは、HTTPヘッダのセキュリティポリシー関連です。Shared Workerを立ち上げる際にscriptをfetchしさらにその中でscriptをimportしたりsubresourceをfetchしたりというように、Module Shared WorkerはCross-siteの嵐であり、セキュリティ脆弱性の宝庫でした。何が正しいのかが非自明だったので、いろんなspecを追いながら調査していく作業が必要になります。僕はこの手の重箱の隅をつつくような作業が結構好きでした。具体的にどんな感じなのかを知りたい方は、例えばHTTPS stateの継承について僕のメンターさんがまとめてくださっているので読んでみてください。

nhiroki.jp

リリースする前には、少なくとも「漏れちゃいけないデータが漏れる」系のバグは直す必要があり、いろいろなセキュリティバグを発掘しては整地しての繰り返しでした。してこのです。

この話題は結構面白い話が詰まっているので、別の記事で書いたり書かなかったりするつもりです。

Intent to Shipを提出

だいたい機能が動きテストも整備され十分にテストをパスするようになったらChromium committersたちに「こんな機能を実装したいのですがよろしいか?」とIntent to Shipという企画書を提出します。そしてAPI Ownersという偉い人から3つのOKが出たらついにリリースです。

Intent to Shipを監視しておくとどんな機能がくるか追いかけることができるので、興味あったらここで確認してください。Twitterアカウントでも更新されてます。

 

リリース!

最後に、test flagをテスト環境外でもenableすることで、今までflagの裏で実装していた機能がデフォルトで動くようになりました。Feature is shipped by default!祝!

この機能はChrome M82というバージョンでアップデートされる予定でしたが、コロナ関係でM82のリリースは中止されM83に含まれることになりました。Chromium BlogでM83の新機能の中に紹介されています。

f:id:elkurin:20200421122837p:plain

https://blog.chromium.org/

なんかちょっとうれしいですね。

 

最後に

以上、ChromiumでFeatureをShipしてみた、でした。かなりしっかりしていますね。以前もChromiumソースコードに触っていたとは言え、Accessibility Teamではデバッガを作っていてあまりWebとは関係なく、DOM Teamにいたときは木で遊んでいただけなので、最初は無知無知太郎でメンターさんには大変お世話になり、今回のインターンを通してかなりWeb系の造詣が深くなりました。そしてWebセキュリティとWeb標準化に強く興味を持ちました。

インターン期間中、submitしたpatchは58、reportしたcrbugは15、他にもspecにcontributeしたりと、かなり盛り沢山な経験をしました。Chromiumは社にいなくても触れるオープンソースなので、これからも自分で埋め込んだバグを自分でレポートしていきたいと思います(?)。