量子将棋の開発秘話(後編)

【宣伝】量子将棋の棋戦

2/21(土) 19時に量子将棋の棋戦がスタートします。エントリー・拡散よろしくお願いします!

目次

この記事は、以下の記事の続編です。今回もスクリーンショット多めです。

na2hiro.hatenablog.com

開発競争

量子人狼がバズってプレイヤーが押し寄せ、直後に量子将棋のアイデアが何百RTもされる。プログラムなしには到底プレイできなさそうなこの量子将棋の実装を期待する声が高まり、これを実装しようとする人たちが何人も出てくるのも必然です。

先のマーサさんによる量子どうぶつしょうぎのツールも出ましたし、他の方による量子本将棋の実装の試みが10月6日にはツイートされており、内輪チャットでも試しプレイの様子が書き込まれていました。その実装については、この時点ではバグが多かった模様です。

先に公開された量子将棋プログラムにはバグが多かった模様

先に公開された量子将棋プログラムのスクリーンショット

実行ログの一部

そんな中、na2hiroは誰かに先を越されないよう完成に向け必死になっていました。

大詰め

前編では、10月4日頃から収束判定の実装について頭を悩ませながら開発を進め、10月14日頃までに概ね収束ルールを決定したところまで書きました。この量子将棋開発前半に当たる期間では、収束ルールを決めつつ収束コードを書いていました。その収束アルゴリズムは、「駒1が飛車か香車のみの可能性あり、駒2が飛車のみの可能性あり」といった抽象的な入力を受け取り、どの駒がどの駒に収束するかを返すものでした(この例だと「駒1は香車、駒2は飛車」)。

なお、収束アルゴリズムについては以下でコードとともに詳しく解説しています。

zenn.dev

10月15日からは、その収束アルゴリズムを実際の盤面につなぎこむ実装を開始しています。

10月15日 まだ動いていない量子駒の動きが表示される(とりあえずこの駒を持ちたくなるのは、当時も今も同じなのか)

10月20日 いわゆる「王手なき王取り」*1(後述)についての検討。駒取りの1手に対しては、駒を取る際の移動による収束と、取られた駒が王でないという収束の2つの収束をこの順にやる必要がある。

また10月21日には、どのように量子状態にある駒を表示するのかという検討がなされています。文字重ね合わせ案(最終案)、円形表示案(2025年の第一回世界大会前に実装された量子状態の表示のような案)、文字を列挙する案などが出て試されています。

先述のTwitter上で見た重ね合わせ案がどす黒くなっているため不安に思い、位置をずらしたりただ列挙する方法などを模索

列挙は情報量がすごいことに

ログからは読み取れませんでしたが、「重ね合わさっている」というインパクト重視のため、列挙ではなく文字の重ね合わせで行くことにした*2ものと記憶しています。文字を薄くして重ね合わせることでどす黒くなるのを回避することに決めました。

文字を薄くする初期案で、文字の透明度 = 1 / 駒種数としたところ。最終案は透明度 = 1/ √(駒種数)で、そちらのほうが自然な見た目になりました。

また、棋譜の表記法についても指摘されています。この時は、斜め前の動きと桂馬跳びの動きを区別する方法が、通常使われる日本将棋連盟が定めた棋譜の表記方法では存在しないため、「右」や「引」などをつけても結局区別つかないケースがあることから、中途半端にやるよりはと、動作などの表記を何もつけないようにしました。(例えば「5三量子成」など)

ちなみにこれは、10年以上後の2025年11月に、同様の区別が必要な安南ルールににおける「跳」の表記の提案*3を、安南系ルールで採用すると同時に量子将棋でも採用し、動作などの表記も付記するようになりました。これにより、例えば初期局面で5三の駒を5七の量子駒が取れば「5三量子直成」、9七の駒が取れば「5三量子左成」などと、符号だけでどの駒が動いたかどんな配置であっても分かります。

10月22日 「右上に移動したのと桂馬跳び(右上)したの普通の表記法では区別できない」 

最終盤の10月22日から25日あたりでは、持ち駒の管理で少し手間取っていたようです。

なお10月20日、なぜか勢い余って、量子将棋リリースより先に量子将棋収束処理コード(Haskell製)を公開しています。(Commitsを見ると何日にどのような実装をしたかがなんとなく分かります。)

github.com

完成

2013年10月25日、ついにその時が来ます。公開の一番最後の確認として「王手なき王取り」を試しました。

「自分が動くと同時に相手の王が決まるケースやって公開としよう」

「先手65→55とするとこの駒は金となるが」「この時銀の可能性のあるのは64だけなので確定し 今とった駒は王だったことになる(ぇ」

そして…

11時40分にツイート、なんと4分後の11時44分には26RT、将棋ったーに25人がアクセス中となっている。当時のUserStream全盛時代の夜間帯の盛り上がりが伺える。あの頃は良かった™

量子将棋の世界初対局と、初日の反応

盛り上がりを横目に、na2hiroがチャット上で対局相手を募集します。前編で登場した、量子人狼作者のうひょさんと対局することに。

「ここで一局誰か指しませんか(ぇ」「うひょさんどうですかどうですか(ぇ」「じゃあやるか(何」

記念すべき人類初の量子将棋の対局はこちらです↓観戦者も含めた当時のチャットも確認することができます。

shogitter.com

対局内容を今見返してみると、当然のことながら手探り状態ですが、こちらはなるべく駒種を温存するように歩のような動きばかりをしています。また、最終的には相手が横移動した駒が金玉となり、それが一枚になって玉に確定した形となりました。「急に残り全部の量子駒が歩に確定する」という量子将棋あるあるアハ体験(?)も出現しています。

日付が変わった頃の遅い時間帯でしたが、観戦者数は非ログインだけで20人と当時としては相当な注目の一局でした。ログインした人数はログに残っていませんが、複数のフォロワーがログインして対局室のチャットでコメントしています。

ちなみに、量子将棋の原案ツイート主でインディーゲーム作家のフォルテさん(現大田まとさん)も公開翌日に指されています。

shogitter.com

絵に描いたようなバズ

バズというのは、雪だるま式に起こるのだなというのをこの時に実感しました。というのも、話題が次のように広まっていったからです。

  1. 公開ツイートと初対局、その反響
  2. Togetterで開発経過と公開時の反応がまとめられる

    togetter.com

  3. ねとらぼがTogetterまとめを引用する形で記事にする
    nlab.itmedia.co.jp
  4. そのねとらぼ記事がはてなのホットエントリに掲載

突然出現した量子将棋というものがただそこにあるだけではバズらず、それに対する反応、その反応に対する反応や解説、・・・という形で反響というものは広まっていったのでした。*4

ところで、実はTogetterにまとめを作成したのは内輪チャットの一人でした。ただ量子将棋が出たツイートだけでなく、その前の量子将棋原案ツイート、筆者による開発の過程ツイートが含まれておりワクワク感のあるまとめとなっていると思います。もしこれがなかったらここまでバズらなかったかもしれません。入れてほしいツイートなどを直接頼んで入れていました。

「量子人狼の場合だとここで誰かがtogetterしたのだが 今のところなさそうだな(ぇ」→(1時間後)「暇だったので (URL)」

挙げたらきりがないのですが、それ以外の主なネット上の反応はこのようなものがありました。

  • ねとらぼ記事がねとらぼトップ掲載

  • ねとらぼ記事がはてなのホットエントリに掲載(たしか)
  • ヤフートップ掲載(たしか)
  • 29日 ニコニコトップ掲載

     

    • この時にアクセス急増

      同時接続264人、「分間700手くらい指されている」
  • いとうせいこうさんなど著名人にもRTされる。約20万フォロワー。
    ff400f9df163da464214e6738afdc039.png
  • ソフトウェア業界で有名な@nishioさんによる解説記事群(ほかにも関連記事あり)
  • 今はなきスラド(Slashdot)の投稿 駒が量子状態になっている「量子将棋」 | スラッシュドット・ジャパンでは、「量子」という用語の是非や二歩を許さないルールなどが議論されている
  • 公開6日目に一日で50万手*5指される。公開後一週間で計100万手となる。(対人戦・自己対局含めた手数。)
  • 31日 大手玩具メーカーから商品化の打診が来る。技術的課題があるという話を交わした後にやりとりがなくなったため、実現ができなかったものと思われる。

また、当時のna2hiroのツイートやRTからも当時の熱狂が伝わってきます。

今でもよく覚えているのですが、公開翌日に大学に行くと研究室のフロアで量子将棋の話題が出ていて(教員たちとは相互フォローだったので自分が作者だということは知られていた)色々と立ち話をした後、オンラインだけでなくリアルで人と話して反響の大きさを感じたためか、妙に実感が湧いてきて、「これは後にも先にも自分の人生で最大のムーブメントを起こしたのではないだろうか」という達成感のようなものに、やや呆然としながらも一人耽っていました。

プロ棋士との対局

前編ではHEROZでバイトをしていたという話をしましたが、量子将棋はもちろんHEROZでも話題となりました。当時HEROZが定期的に放送していた将棋ウォーズニコ生がちょうど間近だったということで、量子将棋がリリースされてから約3週間後となる11月17日に、これに出演しないかというオファーを頂きました。当日は、前年に倒れて体が不自由となった祖母と横浜に観光に行くのに同伴する予定があったため、スタジオと離れた場所にいる予定だったのですが、せっかくなので電話出演ということが決まりました。

出演は野月浩貴当時七段で、野月先生と量子将棋を一局指させていただきました。その時の棋譜はこちらです。放送のアーカイブは こちら です。あまり何を話したか覚えていません。電話ではスタジオの様子がよく分からず反応もしづらかったような覚えは残っています。(ちなみ将棋ウォーズニコ生自体にはその後ちゃんとスタジオ出演一回、通りすがりで顔だけ出したか何かで一回など出てその時は楽しめました。緊張しましたが。)

「あの量子将棋のna2hiroさん」

当時大学院1年で、量子将棋公開から1ヶ月あまりの12月1日から就活開始という前後関係だったのは、幸運なことでした。就活イベントに行き量子将棋の話をすると半分くらいの会社側のエンジニアなどには「え、あの量子将棋の」といった反応が得られ、こちらとしても話が勢いに乗るという状況でした。「github見せてよ」的面接で前述のHaskellの量子将棋収束コードを説明したこともあります*6。なお最終的に入社することになったリクルートホールディングスのリクルーター(人事)の人は、量子将棋についてご存知なかったようですが、研究室の動機K君が「量子将棋っていうのを作った人がいるんだよ」といって初対面の時に引き合わせてくれたように記憶しています。初対面の印象というのは無意識に効いてきそうですし、量子将棋が就職につながったと言えるのかもしれません。

これは情報系就活生向けの就活イベントに参加した後のツイートです。

また、翌年4月には、HEROZに出入りしていたことから、当時同社に在籍していた現チューリングCEOの山本一成さんが製作したPonanzaの電王戦出場の控室に関係者としてお邪魔させていただいたことがあります。そこでやねうらおさんとお話する機会があり、「ああ、あの量子将棋の」という感じで軽く雑談させていただきました。「量子将棋的なルールは思いついて温めてはいたんだけど、この見せ方は考えてなかったよ」という旨のことを仰られた記憶があります。コンピュータ将棋界隈でのパワフルかつアイデアにあふれた活動は当時から抜群で、他にも様々な話を伺うことができ、筆者はこのような印象をツイートしています。

その後

その後、自分の中で量子将棋はフェードアウトとは行かないまでも、二の矢がない状態になりました。「バズったり就活に繋がったりしたことで満足した。」「量子将棋ではなく将棋ったー自体でやりたいことが多々あった。」また「就活、修士論文と忙しい生活を過ごしていたから。」どれも当たっていると思いますが、一番は、そもそも、二の矢を思いつく力量がなかったということだと思います。まだ実践的なソフトウェアのプロダクトマネジメントを知りませんし、人を動かすような力もない若者です。今なら、バズってすぐに昨年の世界大会のような大会(後述)を開催するとか、量子詰将棋を深掘りするとか、量子将棋AI開発とか、次のステップは当時よりは見えます。これは、就職して自社サービスの開発運用を通して得た10年以上の経験があってのものだと思います。

余談ですが、暇がなければ量子将棋は作れないが、暇をしてるようでは経験が足りない。難しいものですね。メンターのような人がいればもっと量子将棋を伸ばせるアドバイスを貰えたのかもしれません。今回改めて見返してみて思うのは、内輪チャットでは自分より年長の人がおらずメンターにあたるような人はいなかったものの、好奇心に満ち溢れた人が多く、「量子将棋の案について」と言っただけで色々なアイデアが返って来るというのはとても貴重な場だったんだなということです。また量子人狼を実装した人と量子将棋を実装した人が同じチャットに属していたというのは、今考えるとなかなかすごいことですが、チャット内で日頃から刺激しあっていたのがそういう結果をもたらしたのだろうと思います。

世界大会、10年越しに動き始める

さて、量子将棋の開発・誕生秘話はここまでですが、開発から10年以上経った最近、また少し量子将棋界隈が盛り上がって来つつあります。

一番の転機は世界大会の開催です。これは2025年11月14日に開催され、総勢28名のエントリーを集め、超新星*7らっしーねさんが世界王者に輝きました。

shogitter.com

この結果、読売新聞に記事にしていただいたり

www.yomiuri.co.jp

将棋YouTuberのそらさんに取り上げて頂いたりしてさらなる注目を集めることになりました。

youtu.be

この大会の開催のきっかけについては、上記記事で述べているように知人でコンピュータ将棋界隈では有名な棚瀬寧さんからの助言なのですが、実は大会開催の裏の立役者となった人がいます。それは、将棋ったーへいくつかの芯を食った要望を送っていたSen Miuateさんです。

「対局時計機能」を2024年4月に、「量子将棋の駒の内訳表示と、元々の陣営の由来の表示」を2025年4月に送っています*8。これらができて初めて完全に量子将棋のゲーム状態がクリアになり、大会も開ける土台ができたのですが、後から聞いたところでは、実は彼はその当時から量子将棋の大会を開きたいと内心思いつつ、これらの要望を送っていたというのです。つまり、彼がいなければ世界大会が開けていなかったかもしれないのです。

今週末、そんなSen Miuateさんが主催する史上初の量子将棋の棋戦「縺王戦」が開幕します!当日直前までエントリー可能ですのでぜひエントリー、拡散をお願いします!!

*1:縺王戦の主催者であり量子将棋に詳しい@Sen_Miuateさんによると、かつて存在したQ-Shogiというアプリでは、この王手なき王取りを許可するかどうかというルール設定ができたらしい。

*2:なお、この表示は「量子状態の常時表示」ができるようになった2025年でもデフォルトの表示となっています。量子将棋トッププレイヤーは、駒の状態をもれなく把握するために皆このオプションを使っているはずですが、それでもこれから量子将棋と出会う人々のために、最初の見た目のインパクトを残したいと考えています。

*3:安南将棋の棋譜表記法の提案|御原真尋

*4:それにしても反響に「響く」という字が使われているのはなかなか的確だなと思います

*5:余談ですが、これは量子将棋の収束プログラムが起動して実行された際に1行ログが吐かれるようになっていたため行数で計測していました。今気づいたのですが、駒取り時など収束コードは1手で2回呼ばれることもあるため、厳密には50万ログでも手数は40万手であったかもしれません。それにしてもオーダーとしてはすごい数です。さらに余談ですが、指し手があるたびにこの収束プログラムのプロセスが立ち上がるようになっており、効率が悪い方式のまま100万回実行したのですが、これを絡めた冗談も呟いています。

*6:ただ既に自分で訳わからなくなっていましたが😅

*7:大会開催の数日前に偶然将棋ったー上のバナーから大会の存在を知り、友人と量子将棋の特訓をして望んだとのことです

*8:当時はこれらの要望以外に彼との接点はなく、熱心に要望を送ってくる人がいるなという印象を持っていました。

量子将棋の開発秘話(前編)

【宣伝】量子将棋の世界大会

はじめに

量子将棋は、2013年リリースされた変則将棋の一種で、当時ネット上で話題になったため名前を覚えている方もいらっしゃるかもしれません。ここでは、量子将棋の開発とリリースにいたる経緯や前後の思い出話などを書いていきます。10年以上前であることから記憶違いもあると思いますので、なるべく客観的に確認できるログから組み立てていきます。

将棋ったー開発に打ち込む大学院生

2013年9月末、筆者であるna2hiroは東京の下宿に住み、東京工業大学(現東京科学大学)で大学院修士課程1年の学生をしていました。学生としての生活はそこそこに、学部1年の終わりから開発を始めた将棋ったーの機能開発、新ルール実装などに明け暮れたり、HEROZ株式会社でどうぶつしょうぎウォーズの新規開発や将棋ウォーズの運営・改善に携わるバイトなどをして生活していました。ありあまる自由な時間を、プログラミングと将棋という趣味の交わる範囲に注いでいたのです。

コミュニティとしては、大学の将棋部に属してはいたものの大会に出る専門のような感じで、むしろオンラインのほうが活発でした。TwitterのUserStreamに張り付いていたのはもちろん、筆者が運営しているスーパー正男*1の投稿サイト「■将棋のページ■」についていたチャットにも四六時中たむろし、日常のあれこれを含めて呟いていました。

事の発端:量子人狼

ことの発端は量子人狼でした。オリジナルの量子人狼のアイデア(web archive) (和訳)は2008年のCISRA Puzzle Competitionというパズル大会に遡るようです。人狼は、各々が受け持つ役職を隠してロールプレイを行い、怪しい人狼を吊し上げられるかどうかというゲームですが、量子人狼は、役職が不確定で、各プレイヤーも自分の役職が定まっておらず、これまでの自分や他プレイヤーの行動によって定まった確率表を元に行動を起こしていき、収束へとゲームを進めていくものです。

Twitter上では、2013年3月末に広まり、7月末にも再燃していた様子が伺えます。

これを実際に実装に移したのは、月下人狼を制作・運営しており、フロントエンド開発界隈では有名なあのうひょさんです。内輪チャットのログによると*2、7月30日に実装を開始を宣言しています。その直後、na2hiroが「量子将棋の案について」と発言をしていますが、その後他の人が思い思いの考えを言うなかna2hiroは無言なので、ただ条件反射で量子将棋というワードを出したにすぎなかったようです。

うひょ「量子人狼を実装する」na2hiro「量子将棋の案について」 当時の独特のノリについては脚注参照*3。なお上が最新です。

その後量子将棋については長らく言及がなく、9月26日に「連続将棋」という駒のマス目や枚数が連続的になるというルール案を考えている際に再度出現しますがやはり立ち消えとなり、na2hiroが「風呂で駒取り、移動について考え」たところうまくまとまらなかったものと思われます。この翌日量子人狼がバズってすぐ、「量子将棋」というアイデアが実質的なものになっていきます。

na2hiro「移動可能な範囲に当確率で動き しかも客観的事実から特定されない限りそれらは存在するし存在しないという量子将棋の案」「遠隔駒が通過できたらそのマスには駒がいないことが確定する 自分の駒が移動できたらそのマスにその陣営の駒はいないことが確定する」との案をだしていますが、直後に(うひょさんが)観測するにしても客観的事実がないと的確なダメ出しをしています。

ちなみに、量子人狼については、なんと実装開始から5日後の8月4日には完成・公開しています。

これが本格的にバズったのがそれから約2ヶ月後の9月27日のことです。詳しくは以下のposfie(旧togetter)にまとめられています。量子将棋が本格的に始動するのはこの直後です。

posfie.com

量子将棋というアイデアの萌芽

量子人狼のバズりを受けてのことでしょう、インディーゲーム作家のフォルテさん(現大田まとさん)の翌々日のツイート(「原案ツイート」)がバズりました。

フォルテ「量子将棋:最初は各駒の種類が決まっていなくて、あらゆる動きができる。しかし、例えばある駒を前に3マス動かすと、その駒は[香車50%飛車50%]という状態になり以降はそれ以外の動きが出来なくなる。その後別の駒を横に3マス動かしたらそれは飛車で確定し、先程の駒は香車で確定する」*4

これによりTwitter上で量子将棋というアイデアが一気に広まり、ルールの細部についての議論や、実際に実装してみようとする声、またより簡単な量子どうぶつしょうぎに当てはめてみるといったアイデアが出現しました

na2hiroのほうはというと、当初この原案ツイートに気づいていなかったようで、内輪チャットでは、その翌日の9月30日夜に「(量子将棋の)良いルール案を教えてもらった」としていて、その概要は原案ツイートに近く、最終的な量子将棋につながるルールの具体案が発言されています。

「(量子将棋の)良いルール案を教えてもらった」同時に、「成ったら王と金ではない」という、量子将棋の最終形に含まれるルールや、「二歩が確定して負け」「遡って詰みが判明して負け」という採用されなかったルールも出てきています。

しかし、「教えてもらった」という発言からだけでは誰にどのように教えてもらったのか不明です。当時バイトしていたHEROZ株式会社*5という線も濃厚ではあります。提出された出勤簿を見ると30日は14:30から20:00まで出勤となっていましたが、始業と終業の際に出す日報が代わりに翌10月1日に送られているため、出勤簿の誤記かと思われます。チャットのログをよく見返すと、次の決定的証拠が見つかりました

当日は昼頃に起きてきてその後2時ころから6時半頃までは違うIPアドレスになっており(ちなみに、名前の色がIPアドレスから一に決まるようになっています)、そのIPアドレスを2025年現在名前解決するとtitech.ac.jpのサブドメインとなっています。これは筆者が通学していた東京工業大学の保有するドメインです。これで大学にいたということが判明しました。

当日は外出していた模様。(内輪チャットの仕様「ひとなな☆GOGO!」については注釈*6

が、誰とどのような会話を交わしたのかは全くもって不明です。8月途中から9月末までは夏休みで通常の講義は恐らくなく(翌10/1が火曜で、ついでに9/30から新学期スタートということもありうるのか?)、9/26木と27金に夏期講習に出ていたようですが、30月には何の予定も入っていません。ゼミは翌週からスタートだったので研究室に出てしかもこういった話をよくしていた同期K君なども一緒にいたということはあまりなさそうです。同期とはTwitter上でやりとりしていましたがそういった痕跡も認められません。

前後関係からすると、フォルテさんのツイートの又聞きだった可能性があり、タイミング的にその可能性が高いと思います。量子将棋の原案の考案者はフォルテさんとして間違いないと思います。

果たして実装できるのか?そして揺らぐルール

フォルテさんによる量子将棋ルールの原案を再掲します。

フォルテ「量子将棋:最初は各駒の種類が決まっていなくて、あらゆる動きができる。しかし、例えばある駒を前に3マス動かすと、その駒は[香車50%飛車50%]という状態になり以降はそれ以外の動きが出来なくなる。その後別の駒を横に3マス動かしたらそれは飛車で確定し、先程の駒は香車で確定する」*7

これはゲームのコアである、駒の移動による「絞り込み収束」と駒種ごとの枚数上限を元にした「使い切り収束」*8の説明を含んでいますが、いざ細部を検討すると色々と定めなければいけないルールが出てきます。

  • 飛車50%香車50%とはなんの値?
    • 量子人狼の文脈で言えば、駒取りなど何らかの「観測」の際にサイコロを振るための確率分布だと推測できる。その場合でも、飛車より香車のほうが枚数が多いので確率としては33%67%のほうが近そう。
    • あるいは、単に飛車か香車のどちらかだよという意味で、サイコロは振られない?
  • 二歩や王手放置の扱いなどをどうするか?
  • 王かもしれない駒が駒台に載ってもいいのか?
  • そもそもどうしたら勝利?

ルール原案から最終的なルールの策定と実装は、結構な道のりでした。

サイコロは振られるのか?

特に最初の点については実装の複雑さも絡んできます。「駒取り時に駒が観測され、確率的に駒種が定まる」といった処理を実現するには、正しい場合の数の数え上げによる確率の算出が必要ですが、これが難問です。愚直に実装しようとすると、全組み合わせを計算することになるのですが、これは20枚の重複あり並び替えとなり初期局面で20!/9!2!2!2!2!=419,026,608,000、約4000億通りの計算が必要となります。これをすべて列挙するには((量子コンピュータでもない限り))現実的ではありません。

ちなみに、量子人狼の可能性の計算においてもこのような数え上げの方法が取られているのですが、量子人狼がバズった当日に過負荷でサーバが不安定になる事案が発生*9し、検証したところ17人で開始された部屋が悪さをしているとのことでした。(DBの16MB制限自体は計算量とはまた別の話ですが、これより圧倒的に多い場合の数を扱うことが求められるということです。)

うひょ『そういえば 人狼がおかしくなる原因は「多人数で量子人狼をゲーム開始する」である気がしてきた(ぇ』『膨大なパターンデータをDBに書き込もうとして それこそ16MB制限をオーバーして死んでいる可能性はないだろうか(ぇ』

唯一、現実的そうな方法がπDDデータ構造を使うことでした。これは、並べ替えを効率的に表現するように工夫されたデータ構造で、πDDどうしの和集合や差集合を取ったり、並べ替えの総数を高速に数えたりすることができます。

πDDの演算一覧とデータ例

当時の自分もこれを噛み砕くために自宅のホワイトボードに落書きなどをしていました。

πDDに関する当時の落書き

この方法のデメリットは、このデータ構造を実装したライブラリが当時なさそうで、自分で正しく実装しなくてはいけなかったことと、また実際に量子将棋のルール上の収束がπDD上の演算にすべて帰着できるかどうかという理論上の問題、高速とはいえどのくらいかかるか不明な点がありました。

実際、このライブラリを自分が不慣れなHaskellという言語で書こうとしており、今思うと先が思いやられます。また軽く触ったことしかないPrologという言語で論理を記述すればなんとかなるだろうと手を出してみたり、JavaでπDDと系譜の似たBDDというデータ構造のライブラリがあったのでJavaでやろうとしたり、迷走が見られます。(当時、将棋ったーの将棋ロジックを含めたサーバ側はPHP、クライアント側はJavaScriptで書かれていたことを考えるとどれも新言語です)

数日間πDDでやろうとして諦め、SATソルバというまだ使ったことのないツールで定義したことのない充足可能性問題を定義して解かせればできそうだ、などと考えていた10月5日、うまく駒を数え上げて、使い切りによる収束を検出できるアルゴリズムがふと頭にひらめき、翌未明には最終的な実装へつながるアイデアに行き着きます。

前に進んだ際、「角・桂ではない駒」の枚数を数えていき使い切りを判定する方法。しかしこれでは不十分そう。

 

「2マス前に進んだ駒<=香2+飛1=3 2マス後ろに進んだ駒<=飛1=1の他に 2マス前または後ろに進んだ駒<=(飛1)∪(飛1香2)=飛1香2<=3」

そして、ついにそれらしき挙動をするプログラムが10月7日にできました。飛車と香車のような駒をどれだけ使ったら矛盾するかが判定されています。

na2hiro@静的> お,ついにそれらしき挙動をするプログラムが出来た(ぇ #将棋ったー/量子将棋 2013-10-07 18:48:32; 131.112.16.110; 52528370fd8db90000000203;

結局、実装が難しそうだから「サイコロを振る」ルール案は見送りになったということになります。

なお、ここで一つ触れておきたいのは、確率計算をスキップすることにしたことによって、ある種の量子ゲームっぽさがやや低減している部分です。元々の量子人狼や、そもそもの量子計算などでは、重ね合わさったまま計算した後、えいやと観測して確率的に結果が求められるという性質があります。駒が駒台に載った段階で観測するというルールでなくしたため、「量子将棋ではなくどちらかというとただの重ねあわせのゲームではないか」という指摘は正しいものだと思います。*10とはいえ、実装できてなければ机上の空論ですから、今考えても当時の方針は仕方がなかったといえるでしょう。

駒台の上で王に確定させて勝利?

量子将棋のルールの最終形は、取られた駒は王でなかったものとみなすことにして、ただし王に確定した駒を取った場合には勝利、となっています。この「取られた駒は王でなかった」という制約はどこから来たかというと、駒を、別の駒を動かすことによって王であったというふうに確定させる、というゲーム性になりクソゲーになりそうとの懸念からであるようです。ただ、この時点で対局できるまで実装は進んでおらず、実際に試したわけでもありません。

10月10日「取った駒は王ではなくなるようにするなどしないといけない気がする」

今となって考えてみると、「駒台の上の駒が王に確定しての終局もありうる」という方針も一考の余地があるのではないかと思います。歩の動きが他の多くの駒の動きの範囲内にあるため、玉より先に歩の可能性を使い切ることは稀であり、例えば駒台に先に乗った王か歩であるような駒がその後王に確定するには、同陣営の他の20−9=11枚を敵陣1段目に不成で侵入して歩ではないとするなどの努力が必要になりそうで、かなり稀なケースになるのではないかと思います。稀なケースであれば、「駒台に乗ったら玉ではなくなる」というある種天下り的なルールを外しても混乱が少ないと判断できるかもしれません。また以下の二歩禁も含めることで駒台での玉確定がより一般的になり、その方針も戦略のうちとなるルールに仕上がるかもしれません。

二歩について

二歩の論点は色々あり、

  • 歩が二枚縦に出現したら負け
  • 歩が二枚縦に出現しないものとして制約が定まっていく(そもそも観測からくる制約ではないので、より重ね合わせゲーム性が強くなる)
  • 遡って、縦にいたこの駒とこの駒が実は歩だったから二歩で負け(タイムトラベル感・過去を操作している感が出てくる)

といったルール案が考えられましたが、簡素に考慮しないというふうに決定しました。これらについては先週のルール詳解記事の「二歩と王手放置」の節でゲーム性と計算の困難さについて触れましたが、今ログを見返すと、計算の困難さが第一だったものと思います。

10月10日 歩かもしれない駒が歩かもしれない駒のある列に打たれたら困る

なお、このログで出現する「1000通り数える」というのは、初期配置で二歩を排除した歩の配置場所の場合の数が2*3*2*2*2*2*2*3*2=1152通り*11であるところから、1152通りの世界を用意してそれ以外は上記の量子駒の数え上げを実施し、「歩を歩でない駒のように動かした」または「二歩が発生した」ような世界を取り除いていくという方式での二歩の排除方法です。1152の世界のうち1つでも残っていれば、初期局面から現在まで一度も二歩は起こっていないと言い張れるという論法となります。理論上は可能そうです。

王手放置について

「王手は放置されていないものとして制約が定まっていく」というルール案も考えられますが、これについては考慮された形跡がなく、単に無視することにしたようです。

なお、王手放置を許さないようにすると、「二歩と王手放置」の節に書いた通り、大変な制約を必要とします。

王手放置の制約をかけると、初期局面でさえ数多くの制約が追加されることになる。例えば、下図のように5三が玉で5七が飛車か香車であるような可能性は除外されることになる。こういった先手と後手の間の制約が対局開始前はもちろん指し手ごとに多数貼られていくことになる。これは、王手放置の制約をかけない現行の量子将棋のルールを遥かに超えた状況把握が求められると同時に、個人的にプログラム上で実現するのが困難*1であると判断し、除外することにした。

初期局面で存在する制約の1つ:『「5七の駒が飛か香である」かつ「5三の駒が玉である」ではない』こういった制約が数多存在する。こういった調子で、飛香/玉制約が9筋分、角/玉制約が10個(5筋の角は2箇所に対して制約する)、これを先後とも作って38制約となる(はず)。ゲーム開始時点で既に複雑にもつれ合った状態となっている。

これに一つ付け加えると、王手放置禁止というルール下では、先手後手に課せられる可能性の制約が非対称になりえます。というのも、初期局面で後手の駒が先手に王手をかけている可能性はあると解釈できるからです。言い換えると、初期局面で先手玉にかかっている王手を初手でか払い除けたとみなせれば王手は放置にならないため、上記の例『「5七の駒が飛か香である」かつ「5三の駒が玉である」ではない』というのを先後ひっくり返した『「5三の駒が飛か香である」かつ「5七の駒が玉である」ではない』というのは、初期局面では与えられず、次の一手次第というわけです。5七→6八量子と進んだ場合、この駒は玉角銀のどれかとなりますが、この駒が玉で5三が飛か香だったという可能性は相変わらずあります。より具体的には、5七の駒が5筋から移動したり、別の駒が5三、5四、5五、5六のどれかに移動した場合ということになると思います。こういった先後非対称のルールの場合にどちらの側が有利になりそうか、考えてみると面白いかもしれません。

行きどころのない駒、勝利条件

これは結構実装ができてきた10月14日に自然と決まりました。

行きどころのない駒の禁止と勝利条件がさっと決まる

ルールの最終形がこれで定まりました。

開発競争

・・・あまりに長くなってしまって書き終わらないため、後編に続く・・・

na2hiro.hatenablog.com

エントリー、拡散よろしくお願いします🙇‍♂️

 

*1:スーパー正男は2000年代から存在するマリオメーカー的な存在で、自作マップの投稿やスクリプトによる改造も可能

*2:うひょさんも内輪チャットのメンバーでした

*3:毎時0分と30分の最初の30秒間発言が「オォォォォォ」のようになるというチャットの機能がありました(元ネタは「シャベッタァァァァァ」)。また、抹消線や語尾に「(ぇ」をつけることも地の文とは違うコンテキストを与えるために多用されていました。

*4:現在は非公開アカウントになっています。スクリーンショットはposfieより https://posfie.com/@Litter_K/p/kKq3OtQ

*5:そもそもHEROZに誘われたきっかけが「将棋ったーという変則将棋何十種類も開発してる奴がいる」ということだったため、林社長、や現在将棋クエストなどを開発運営されていて近くの席だった棚瀬さんなどの将棋ガチ勢?と雑談することもよくありました。もしそうであれば、該当ツイートを見て話しかけてもらったという可能性は大いにあったと思います

*6:「ひとなな☆GOGO!」というのは、尖閣諸島に中国船が近づいてきた際自衛官が放った自衛隊式の時刻の言い方(17:55の意味)です。毎時55分台に発言するとこのような文字が自動的に挿入されるというのがチャットの仕様でした

*7:現在は非公開アカウントになっています。スクリーンショットはposfieより https://posfie.com/@Litter_K/p/kKq3OtQ

*8:これらの収束については「量子将棋の収束アルゴリズム」の中で詳しく説明しています。

*9:余談ですが、量子人狼を擁する月下人狼は、量子人狼がバズった当日までは筆者の自宅サーバで動いていました。不安定化を気にVPSに移行となり個人的には少し残念でした。負荷がサーバのためではなくロジックの問題とはいえ、VPSとなって負荷の検証が進んだはずであり、これはしかたがありませんが。

*10:えいやの観測を含んだ真の量子将棋の実装を求む!?

*11:1筋目は2枚あるうち1枚が歩なので2通り、2筋目は3枚のうち1枚なので3通り、と9筋目までやりかけ合わせます。

量子将棋のルール詳解

【宣伝】量子将棋の世界大会

11/14(金)に第一回世界量子将棋選手権大会が開催されます!奮ってご参加ください。

はじめに

量子将棋の初期局面

量子将棋は、一昔前にバズった(ねとらぼ記事まとめ)変則将棋の一種で、量子駒という特別な駒を使用する将棋です。量子将棋を唯一対局できる将棋ったー上の量子将棋ページには、次のように端的に書かれています。

量子将棋のルール

駒が量子状態にある。すなわち、最初にあらゆる種類の駒である可能性を持っており、移動するたびにあり得ない駒が除かれ種類が定まっていく。枚数配分は先手後手それぞれ本将棋と同じ。駒を取るとその駒が王である可能性が排除される。王に確定した駒をとれば勝ち。二歩・王手放置は許可。

  • 駒の性能: 過去の移動と他の駒の動きにより決定される(量子将棋的駒の性能)
  • 移動処理: 量子将棋的駒の動きをする
  • 勝利条件: 王に確定した駒を取れば勝ち。
  • 駒の動き: 量子将棋の駒の動き一覧

shogitter.com

この説明と合わせて、ページ上の盤駒を自由に動かして試行錯誤することによりルールの全体像が掴めるようになっているのですが、今回大会を開催することもあり、量子将棋のルールを詳しく解説することにしました。

  • 【宣伝】量子将棋の世界大会
  • はじめに
  • ルール詳解
    • 量子駒
    • 元々の陣営情報の重要性(「相手の駒の可能性を奪う」)
    • 成り
    • 駒取りと勝利条件
    • 行きどころのない駒
    • 二歩と王手放置
    • 可能性がなくなるため指せない手(「世界は崩壊しない」)
  • おまけ
  • おわりに
  • 反響
  • 参考文献
続きを読む

私が二度とChromeに戻れない理由

Arc擁するThe Browser CompanyがAtlassianに買収されたというニュースが飛び込んできた。ここで、Arc開発停止というニュースが飛び込んできたときに投稿しようとして途中やりになってしまった記事を供養するため不完全ながらほぼそのまま投稿する。なお、今回のニュースに関しての意見としては、マネタイズがうまく行っていなかったArcが大資本を見つけたというのは嬉しいところ。

-----

Arcが開発停止というニュースが飛び込んできた。2023年初頭から紹介リンクを入手してからというもの愛用を続けており、周囲に事あるごとにおすすめしていた。いつか紹介記事を書きたいと思っているうちに、開発停止となってしまった。

お断り:ここ2年間のChromeの改善により当てはまらない点も出てきているかもしれない

私がArcからChromeに二度と戻れない理由

Little Arc:Chromeは、タブを閉じるたびに別のタブの内容を見せてくることにお気づきか?

あえてマイナーなところから行ってみよう。(でも重大だ。)

Chromeでは、関係ない時に調べていたトイレ掃除のことが表示されてしまっている。

ブラウザ以外のアプリを使っていたとしよう。例えばSlackで議論があったり、ノートアプリで自分が取ったノートを読み書きし、それらに集中しているとする。その中にリンクがあり開き、確認して閉じて元のアプリに戻ろうとする。その時起こることはなにか?

Chromeの場合、なんと、関係ない以前開いた別のタブが表示される。先ほど開いたページはタブとして既存のウィンドウに開かれ、そのタブを閉じるてもそのウィンドウにフォーカスが残るからである。一つのことに集中していたのに他の内容を見させられ、コンテキストスイッチをさせられるのだ。一度気を散らされたら再度集中するのに23分かかると言われていることを考えればこれは致命的である。これはタブブラウザというものが開発された2000年代から存在するUXの欠陥なのではないか。それとも現代デジタル社会に生きる我々があまりに情報過多なのか。

Arcでは、ブラウザ外から開かれたリンクはLittle Arcという独立したミニウィンドウのようなもので開かれる。これを消せばもちろん元のアプリにフォーカスが戻るし、一度見て終わりでなく作業の一部に組み込みたければcommand+O(あるいは右上のボタンをクリック)でタブとして開ける。

縦方向のタブ表示:当てずっぽうでタブをクリックしまくって探す時間がほぼなくなった。

Chrome(あるいは横方向のタブ)でよくある光景
  • ChromeのこのUIは終わっている。
    • どうやって15分前に開いたあの量子将棋に関する記事のタブに戻れというのだ。HTMLドキュメントのタイトル(< title> 要素)というものの意味がChromeでは死んでいる。
    • グループ機能でこれらのfaviconをまとめて名前をつけることはできるが、ごちゃごちゃ狭いのが更に狭くなり焼け石に水感がある。グループ内でどのタブを開くかは相変わらずあてずっぽうとなってしまう。
  • Arcの縦方向のタブ表示だとこうなる。ブラウザの左端に表示されている。

    • 何が何なのか一目瞭然だ。
  • 楽天など、タイトルに冗長なprefixが多用されているサイトでも、サイドバーを広げればさらに長く表示でき、中身はわかる。

  • また、タブの表示名は自由にカスタマイズ可能なのも地味に良い。開いたタブを再度クリックするとin-place editできる。
    • 例えばホテルを選んでいるときに「駅近 1.5万」「少し遠いが最安」などをタブ名にすると、わざわざメモアプリやGoogle Docを作って管理するまでもなく旅行プランが決まっていく。

直前のタブに戻る:なぜあなたは縦方向タブでもまだ当てずっぽうでクリックしまくっている?

似たようなページを複数開いていてタブ名では分かりづらいが、「1つ前に開いていたところに戻りたい」ということはある。

  • ctrl+tabで直前に開いていたタブに戻れる。
  • ctrlを押しながらtab, tabとすると2つ前、3つ前に開いていたタブに戻れる。また、そのページのスクリーンショットも表示される。

お気に入り:人生で初めて、ブックマークがwrite-onlyではなくなった

  • お気に入りは、縦方向タブ表示と同様の形式で上部に表示され、開くとお気に入り 。お気に入りへの追加方法は?ただドラッグ&ドロップするだけ。お気に入りを開くと開いたタブをディレクトリに入れるなどまとめておけるイメージ。タブっぽくてタブより便利になった感じなので、意志力がなくても自然に普段使いするようになった。

  • 上部はお気に入り、下部はタブ。「1手ずつ…」というお気に入りをクリックし、右側のタブにそのページ内容が開かれた状態。 

Spaces:コンテキストスイッチ激減

サイドバーの下部にあるSpaces

タブとお気に入りの部分が1つのスペースとして横方向に伸ばしていける。詳細は省略。

Split

1つのタブに複数のページを表示できる

説明略

サイドバー(タブ一覧等)を隠す機能:コンテンツだけに集中できる

  • 集中すべきときに他のTODO(JIRAのアイコンとか)ページの内容だけに集中したい場合、command+Sかサイドバーの上部のアイコンをクリックすることで
  • 前 

     ↓

  • フルスクリーン表示すると、エッジすら消える。

それほど使っていない機能

タブの自動クローズ機能:一定期間開かれていないタブが自動で閉じられる

  • 仕事では1日何十回何百回もランダムなリンクを開く必要がある。同僚やらツールが何かリンクを開けと急かしてくる。コーティングの途中で調べ物をする。ふと気になったアレについて深掘りする。Chromeを使っていた頃は、そんな感じで開かれた数十のタブを一つずつ開いてこれは閉じていいやつとか、これは何か対応が必要とか、不毛な作業を、タブが大量に開かれたウィンドウが大量のウィンドウの隙間から発見された暁には、やっていった。
  • 自動クローズ機能のタイムアウト時間を当初は12時間とかに設定していた(これは確かデフォルト)。翌日には綺麗さっぱりな状態から始まるという寸法だ。単発の残さなくていいタブはLittle Arcで開くし、残しておくタブをSpacesを選ぶという理由もあって、必要なタブを見失うこともほとんどない。そんな不毛な作業から解放されていたのは事実。
  • とはいえ、やっぱり日をまたぐタスクというのはでてきてしまう。また、コロナ後遺症で夕方辛くなることがあり適切に仕事を締めるステップを踏めないこともあった。となると前日から継続したい場合もあり、12時間ではいけない。7日間にしていたと思う。でも、縦方向のタブの視認性の高さから、いらないタブは中を見ずともポチポチ消したり、Spaces内全クローズなどできる。
  • 趣味用途では、土日に開いて読もうと思ったものを読めず次の週末に読みたいとかあり、7日では足りず、30日にしていた。しかし、そもそも閉じられては困るという気もする。

(省略)

 互換性

  • Chromiumベースなので、Chrome ExtensionsやDev Toolsなど互換。何かが動かなくて困ったことがない。
  • ブックマーク等を主要ブラウザからインポートできる。

結論

  • Arc素晴らしいから、みんなも今から使うと良いよ
  • DiaとThe Browser Companyの今後に期待

Remix がすごい & `remix-auth-twitter` を publish した

 

目次

Remix ついて

Remixは、あえて自分の言葉で表現するならば、超速のパフォーマンスが出るようチューニングされたモダンなWebサイト/アプリが、難しいことをしなくても出来上がってしまうフレームワークです。

まずは公式サイトのトップページをスクロールしていって、売りを一通り見てみることをお勧めします。

remix.run

Remixの特にすごいところ

  • Nested Routes*1
    • メニュー、リスト→詳細ビュー、モーダルなど、複数のオプションから一つにドリルダウンするようなUIパターンは多い。それを入れ子ディレクトリ構造とURL*2マッピングできるようにしたところが便利 & フレームワークにとって最適化のチャンスになっている
      • e.g. 例えば /users/na2hiro というURLにアクセスするとRemixは次の2つのルートを同時に描画し、結果を繋げて返す:
        • /routes/users.tsx はユーザ一一覧を左に、穴(Outletと呼ばれる)を右に描画。
        • /routes/users/$userId.tsx はuserId="na2hiro"であるようなユーザの詳細を描画。
      • c.f. Next.js では、 /users/[userId].tsx がユーザ一覧も詳細も全て表示しないといけない。 <Layout>のようなコンポーネントが必要になる。
  • loader (readするコード、GET APIとしても使われる) と action (writeするコード、POST APIとしても使われる)を書くと、いろいろなものが手に入る。例えば:
    • 速いSSR
    • Colocation: コンポーネントコード、表示に必要なデータ取得コード、データ送信先APIコードが一つのファイルに同居。
      • APIはどこにあるか、APIのURLはどうするかなど考えなくても良くなる。e.g. ユーザ詳細の変更コードは/users/$userId.tsx のactionに作れば良い。 
      • propsを子孫コンポーネントにpropagateする、とか考えなくてもいい場合が増える。
    • Revalidation: actionが行われるとデータが変更されたものとみなし、念の為に自動的にページ全体のloaderが呼び出されて再描画される。
      • 変更を呼び出したところ以外のコンポーネントにあるデータがstaleになる等と考えなくてもよい。
      • i.e. useSWR, React Query などのmutate機能などが吸収されている
      • i.e. reduxのようにデータをフロントエンドの一箇所で管理する必要も場合によっては薄れる。なぜならRemixがサーバからそれぞれのrouteに適宜送ってくれるから。
    • Race condition resolution: 
      • 連続するGETやPOSTが起こると先行するリクエストがキャンセルされ後者のものが採用される (<form>と同じ挙動)
      • race conditionの例:autocompleteのように1字打ち込まれるたびに検索をし直す場合、前に送ったリクエストの処理に時間がかかって最後に帰ってくると結果が古いものとなりおかしくなる。
    • JavaScriptが読み込まれる前にも(場合によっては完全に)動作する
      • GET/POST等のリクエストは<form>要素をラップした<Form>で宣言的に行うことが推奨されており、Remixは内部でfetchによるリクエストを行う。すごいのは、Formはformを描画するので、JSが無くてもなんとSPA上のfetchがformにフォールバックすることとなり、form submitがフルページ再読み込みとなり、動く。
      • 注意:ユーザはlocalhostに対してではなく、しばしば電車内のスマホから遠くのサーバにリクエストしている。
    • Caching: ブラウザのHTTP CacheをHTMLとAPIに利用できる。
      • c.f. useSWR, React Queryなど、ページを更新すると消えてしまうインメモリキャッシュより便利。
    • Vendor agnosticity: Node.js上で動くだけでなく、使っている依存によっては、Cloudflare Workersなどのedgeにもデプロイできるようになっていて、さらに爆速になる

すごいところを挙げ出したらキリがありません。

Remix Auth について

github.com

Remixが提供しているsessionを利用した、認証のためのコミュニティ製ライブラリで、認証方式や認証サービスをstrategyとして抽象化してあり、プラグイン形式でstrategyを誰でも実装できるようになっています。さらには、strategyライブラリのテンプレートが用意されており、作ったものを共有することが推奨されています。

Remix Auth Twitter について

今回このテンプレートを利用し、Twitter OAuth 1.0aに対応したstrategyを実装してライブラリとしてpublishしました。

github.com

これを作ることにしたのは、太古の昔にPHP+vanilla JSで書かれた将棋ったー*3をRemix+Reactで書き直す段階で、twitter認証のライブラリがないことに気付き、Remix Authのdiscussionでスレッドができて一ヶ月経とうとしていたのを見つけたためです。

金曜の夜にコーディングを始め、土曜の夜中にテストを大方書き終え*4publishしました

主な技術的困難は:

  • Node.jsの標準ライブラリに依存しないという制約
    • RemixはCloudflare Workersのようなedgeに対してもデプロイできるようになっており、そのようなアプリで使われることを考えると依存させたくない
  • Twitterの公式ドキュメントが間違いだらけ
    • 結局将棋ったーで使われている手元のPHPライブラリの発行するHTTPリクエストを見て正解を知った(ドキュメントではPOSTのはずがGETじゃないと動かない等)

Remix Auth Twitter Example について

`crypto-js` ライブラリ使ってて本当に動くのかという質問があったので、ライブラリ使用方法の例示のためにも、twitterログイン・ログアウトするだけのRemixアプリを作成し、Cloudflare Workersにデプロイしました。無事動いています🎉

https://remix-auth-twitter-example.na2hiro.workers.dev/

おわりに

Remix おすすめ!

www.youtube.com

マサラチャイを毎日のように淹れている (a.k.a. 最強のミルクパン)

きっかけのマサラチャイキット

それは、何の気なしに失効寸前のマイレージ*1をマサラチャイ体験キットに交換したのが始まりでした。

ここ2年ほどインド料理屋に頻繁に行っており、チーズナンやカレーを楽しんだ後にチャイを飲むことが多く、これまで家で飲むためにインスタントマサラチャイのようなものを買ってみたりはしたのですが、味が全然違っていて満足していませんでした。

届いたものは本格的なものでした。

mokshajapan.jp

内容物は次のようなものでした。

  • 数種類のホール(粉になっていない、そのままの)スパイス
  • それを手で砕くためのスパイスミル
  • アッサムCTC茶葉(Crush, tear, curl、つまり潰して破いて丸めた状態のもの)
  • それを量るためのティースプーン

今回これに従って淹れてみたところ、お店のようなチャイができました。ホールスパイスを砕くという部分がインスタントとの決定的違いということが一口で分かりました。

徒歩圏内のインド食材屋と、量産体制

定価4000円ほどのチャイキットがものの数日でなくなり、いざ買い足そうと近所のインド食材店に行ってみることにしました。こちらは以前から存在は知っていましたが、オフィスビルのような建物の2階でやや入りづらい感じ入ったことはありませんでした。入ってみると、スパイスがとても安い。成城石井の4分の1くらいの値段で売っています。たまたまYouTubeで見た埼玉のチャイ屋さんもこの店をオススメしていました。東京は便利な街だ。(以下はオンラインショップ)

www.mayabazaar.net

2000円もかからずに全スパイスを揃え、1ヶ月間以上チャイ飲み放題状態。(実際のところ牛乳代もスパイス代くらいかかっています)

f:id:na2hiro:20211225211609j:plain

インド食材店で買うチャイセット

また、スパイスを手で潰すのは疲れるので、ミキサーを使うことにしました。硬いものを砕くための硬い刃が付属していました。これでチャイの量産体制ができました。

絶対に(?)吹きこぼれない、焦げ付かないミルクパン

毎日作り続けていると、調理器具の不満がたまります。いくつか試してみて、次のような結果になりました。

f:id:na2hiro:20211220003244j:plain

Молоковарка: ロシアのミルクパン
  • 普通の鍋:時々吹きこぼれる。コップに注ぐときにこぼしまくる
  • Amazonで買ったミルクパン:油断するとすぐ吹きこぼれる。焦げ付いて皿洗いが大変
  • ロシア人御用達のмолоковарка:完璧

молоковарка(牛乳調理器)とは?こんな見た目です。

この鍋が特別なのは、層が二重になっており、鍋内部に水を入れて使う点です。火にかけると、鍋の中の牛乳やチョコレートなどの温める対象のものは、熱せられた水によって熱せられます。熱せられた水は循環して対象物を比較的まんべんなく温めるので焦げ付かないですし牛乳の場合は吹きこぼれません。また、水が沸騰した場合には、突起の部分が笛になっているので音でわかるというセーフガードつき。

f:id:na2hiro:20211225212530j:plain

内部に水を入れる部分と笛。縁が広がっていて注ぐときの切れ味もいい。

乳製品に親しみの深いロシアの人々にとっては当たり前ものもらしいです。

これを探すのは大変でした。ロシア語で探すと簡単にショップが見つかるのですが日本への発送が可能なサイトはなし。結局Amazon UKで購入し、価格2000円、送料4000円で合計6000円もかかりました。パッケージはポーランド語で書かれていました。

f:id:na2hiro:20211225212046j:plain

mleka = молоко (moloko) = 牛乳ということか

かれこれ2週間以上使っていますが非常にいい感じです。中に水を入れすぎた時は笛が鳴る時にお湯が吹きこぼれることがあるのですが、IHで火が消えるわけでもないので特に気にしないでやっています。

こんなに便利だしそんなに作るのが難しくもなさそうなものがなんで日本で売っていないのか、というのは、単純に日本人があまりミルクを熱さないからなんでしょうかね。

吹きこぼれに悩まされているチャイ同志(いるのか?)のために、買ったもののリンクを貼っておきます。

www.amazon.co.uk

今日の音楽

この記事を書いていた時に聴いていた音楽はこちらです。

プロコフィエフ ピアノ協奏曲第三番

www.youtube.com

*1:JALマイレージは結局一度シベリア航空の特典航空券に替えた以外は失効している気がします。

95連休を取った

ソフトウェアエンジニアが自主的な長期休暇を取った経過をまとめました。

95連休を取った状況

  • 1,2,3ヶ月間のまとまった無給休暇を取れるというコロナ禍で新設された制度を利用。特に承認などもなく申請したら通るような形だった。
  • 妻と同じ会社に勤めており、妻と同時に休暇を取った。休暇後は各々元のチームに戻り仕事に復帰できるという確信がある状態だった*1。実際、現在2人とも復帰した。
  • 休んだのは2021Q3(7,8,9月の3ヶ月間)
  • 蓄えは十二分にあり、ローンなどもなく、経済的心配はせずに休暇を過ごした。
  • 休暇の初頭に初回ワクチンの予約が取れていた。休暇40日目あたりが抗体の出来たであろうタイミングで、そこからは外出の範囲が広がる。

そもそもなぜ長期休暇を取ったのか

保育園に入園して以降20年以上、3ヶ月休む(=主となるやるべき事がない)という状況は一度もなかった*2。そんな体験を老後などではなく若い*3うちにしたら果たしてどうなるのか!?そういった期待が一番大きかったです。

仕事をするのがちょっと疲れてきたというのもあります。コロナでWFHが1年以上続いたせいか、少し頭が冴えないようなことが多く*4、GW程度かそれより長い休みは取りたかった。

また、これは理由というよりは給料を丸々失う事実を納得するための言い訳ですが、時間短縮となるドラム式洗濯機やロボット掃除機、料理宅配や家事代行サービスなど、すでにお金で時間を買うことは普通にやっています。その延長として、給料分払えば仕事の時間が全部浮くと考えたら、一回くらい給料ではなくて時間全振りにしてみても良いのでは。子供のいない共働きで一番お金の使い道がない今だから尚更のことです。

95連休中にやったこと

将棋ったー改修

まとまった時間が取れたためある程度大きな作業をこなすことが出来ました。

罪と罰を読了

感想はこちらに書きました。

bookmeter.com

1ヶ月に及ぶ東京→稚内自転車旅行

これについては別記事にします。取り急ぎ:

 

95連休中にやりそびれたこと

ロシアで生活する

旅行で数日過ごすといったのとは違う、1ヶ月単位で異文化の中で暮らす経験をしてみたいと思っていたのですが、95連休開始時点でのコロナ死者数が過去最悪になっていた*5ので却下。

f:id:na2hiro:20211123232507p:plain

ロシアでのコロナ死者数推移

知人と会いまくる

これまでの人生で人とのつながりをあまり大切に出来ていなかったことを反省して、いろいろなこれまでつながってきた知人と久々に会いつつ近況を聞きまくるなどできたら面白いなと考えていましたが、コロナが7月末開幕のオリンピックで一盛り上がりしたこともありタイミングを掴めませんでした。

長期休暇での心境の変化

1) 時間を取って心置きなくマサラチャイ*6を淹れるなどの心の余裕を日常生活に(労働日であっても)持てるようになった

これまでは、時間を使うからにはなにか成果に結びつくものでなくてはという強迫観念が日々の行動を形作っていました。労働日であれば、料理はなるべく短時間で作るもの、コーヒーは全自動エスプレッソマシンでボタンひとつで淹れてパソコンの前で飲むもの。そういった効率だけを追求した形に生活スタイルが凝り固まっていました。

長期休暇においては、日々の行動が評価されるべき対象から外れたために、そういった強迫観念がなくなり、心からその瞬間を楽しめるようになったと思います。

2) 日々の小さい事柄からでも得られる幸せを重ねていくこともまた人生だと気づいた

あなただったら、3ヶ月お金の心配なく今の仕事から離れて復帰も保証されているとしたら、何をしますか。この質問、突き詰めると「あなたは、人生で何をしたいですか」という問いに通ずるものだと思います。

「あなたは、人生で何をしたいですか」「長期の自由時間で何をしますか」「1ヶ月で死ぬとしたら何をしますか」。これらの時間スケールの異なる質問を考えてみると面白いです。例えば、「1ヶ月で死ぬ」場合に、「今やっている仕事を続ける」と答える人は少ないと思います。死ぬ前に行きたかったところに旅行に出るとか、美味しいものを食べるとかでしょうか*7。でもそれって、もうやっていてもいいですよね。生まれてこの方「死ぬ前」なのですから。

時間軸を長く取るほど長期的なリターンが望める投資を行うのは自然なことですが、では短期的な投資をゼロ付近まで削って(例えばチャイを楽しむ時間を削って)までやるべきことなのかというのは明白ではありません。人生がキャリア成長に対して非常に長いとしたら、とっととキャリア全振りにした後良いキャリアの状態でチャイを楽しむべきかもしれません。でも、人生は莫大に長いわけでもない*8し、何が起こるかわからない。少しはチャイに短期投資してもいいのかもしれません。

振り返って見て幸せだったと思える日々を過ごしたい。そう気づいた長期休暇でした。

人生いつ生きてるの?今でしょ。

3) コミュニティや人とのつながりは大切

学校・大学や職場のどれかには属し続けてきた人生では、日常的に顔を合わせる人というのが自然と出てきて、それが友人関係などのつながりになったりするのですが、「休み」の状態ではそういった所属というものがありません。自ら連絡をとったりコミュニティ活動をしていかないと人とのつながりは逓減していきます。また、これまでの自分がそういう所属の下で単純接触した人とのつながりばかりに依存しており、所属が変わった途端にこれまで密に繋がっていた人との繋がりが途切れるということが続いてきたと気づきました。人のつながりというのは人生の幸福感を高めてもくれます。これらを大切にしていこうという決意を持ちました。

休暇から復帰しての仕事の模様

休暇の終わりの頃にはもっと休暇を続けたいという思いがあった*9のですが、いざ働き始めてみると、拘束時間は短くないが、まあ悪くないかなという感じです。自分の能力が活かせる場というのはなかなか良いものです。会社の外に出てみると、将棋ったーやKifu for JSという公開されたプロダクトはあるものの、ビジネスをしているわけでもないですし、ソフトウェアやプログラミング関連のことがそのへんに転がっているわけではありません。*10一方、会社に出てくると大なり小なりやるべきことがいくらでもあり、物事を前に進めている感覚というのは大きいです。

仕事がちゃんと進められているかということについてですが、概ね順調と言えると思います。休んでいる間に進んだプロジェクトに関わる事柄などは同僚に頼りがちになりますが、基本的なチーム内での役割は変わっていないと思います。また、これまで労働時間が長すぎたという反省をし、短くするような工夫をしており、それが削るべきところを削っての短時間労働なのかそうでないのかはまだ今後の評価をもらってからの判断ということになります。

長期休暇おすすめ

全弊社員に同制度の活用をおすすめしたいですし、同様の制度が利用できる方はぜひ検討してみて下さい。また、仕事を少しの間隙もなく続けて定年まで過ごすのが当たり前という期待があるような社会の中、それが息苦しい人という人や、別になんとなく思い立った人にとっても、気軽に休んで気軽に復帰できるような社会になったらいいなと思いながら、なんとなく休んだご報告を締めたいと思います。

*1:既に同制度を使った後復帰している同僚がいたり、新入社員研修の先生側として3ヶ月間チームから離れて研修を行う制度が毎年あり、それで抜けるということが常態化しているため、社員にも抜けて戻ってくる人という存在は普通のものとなっている

*2:浪人・留年などもなくきっちり3月卒業4月入学/入社を繰り返してきた

*3:30にもなると、集中力などの脳の機能が学生時代などの20代前半とは違うというふうに気づいてきます。体力もまあ落ちてるとは思いますが、脳の衰えのほうがテクノロジーによる援助を受けづらいと思うので、より危機感が大きいです。

*4:雑談の頻度が激減したのが一因という話は初回の記事で述べましたが、他にも仕事とプライベートの境目が曖昧になり心理的負荷が高まっていたとも思います

*5:当時はデルタ株が流行っていた一方、国産ワクチンのスプートニクがデルタ株に効かない状態。また国民はマスクをせず、国産ワクチンを信用していないためワクチン接種率は低く、ワクチン接種証明が求められれば闇で買うことが横行するなど、日本では驚きのことがまかり通っています。

*6:失効寸前のJALマイルを、なんとなくインド料理屋で頼んで好きだなという理由でチャイセットに交換したら、ハマってしまい、インド食材店で買ったスパイス数種類を砕いて毎日のように作るようになった

*7:ここでは「どうせ死ぬなら危険なアクティビティをやってみる」という場合は除かせて下さい

*8:日本人男性の平均寿命は3万日弱

*9:同制度を利用した同僚の中にはおかわりをして半年続けて休んだ人がいるようですが、自分のときはその選択肢は明らかではありませんでした。自ら申し出たんだろうか?

*10:こう文章にしてみて、OSS: オープンソースソフトウェアに貢献するというのも一つの手かもしれないと思いました。次長期休暇を取るときは考えてみようかな。