退職します。就職しません。

Indeed Technologies Japan(株)を11月に退職します。既に最終出社は終わりました。今のところ再就職のつもりはありません。*1

2015年4月から11年半、所属会社を変えながらもIndeed Tokyoのメンバーとして在籍し続けていました(うち1年8ヶ月育休、6ヶ月無給休暇、1ヶ月傷病休職)。

なお、同僚に伝える際にも言ったことですが、これは完全に自主的な退職であり、何らかの"提案"💴がなされたわけではありません*2

おことわり

一部の人が気になるであろう、Indeedでの業務内容など、退職エントリに含まれがちな内容は、あまり書かれていません。

また、個人的なメモを元にしているため、以下だ・である調になります。

退職の動機

退職に至る単一の動機や原因はなく、複数の動機が重なった結果、退職が半ば自明な選択肢として現れたもの。

  • 将棋ったーに割く時間のほうが充実感がありやる気に満ちている
    • shogitter.com

    • 2024年12月から2026年7月下旬まで、育休を取っていた。この約1年8ヶ月を通してほぼ毎週リリース&アナウンスをしており、リズムができているところ。この期間中に第一回世界量子将棋大会を開催したり、公式Discordを立ち上げて量子将棋や様々な変則将棋の愛好家が集うような場になってきている。
    • 公式Discord参加者は100人近くになっており、新ルールについて話し合ったり、一部は変則将棋などのYouTubeコンテンツを作ったり*3量子将棋の棋戦を開く*4などもしている。
    • 2026年はコーディングエージェントの能力が飛躍的に向上している年。AIを伴った個人開発で、一人でどこまでいけるかとても楽しみな時代になっている。
    • マッチングシステム、またそれを主体としたアプリ化の構想もあり、現在進行中の変則将棋AIの開発も含めて実現したいことがたくさんある現状で、これに背を向けていきたくないというのが正直なところ。
  • コロナ後遺症との兼ね合い
    • 前提:2023年5月に新型コロナウイルスに観戦し、直後からブレインフォグや倦怠感を主とした新型コロナ後遺症にかかった。その後1ヶ月ほど傷病休職、3ヶ月の無給休暇をとっての休養などをしたが、頭脳がコロナ前の調子に戻ってはいない。
      • コロナになってから断続的に、有給に頼りがちになり育休やVoluntary Work Program (90日無給休暇を選択できる)を心待ちにしていた。子どもを持ちさらに限界に近づいたのだと思う。
    • 諸々のことから育休再開後一ヶ月近く仕事をやる気が出ない日が多かった。
      • 復職して最初の週は特に、1時間働いてはいつ休憩するかを考える、などといった状況で、大変だった。初週2日休む。会議の内容を追いきれない時も*5
      • 疲労の緩和のために昼食後1時間程度昼寝をしていたが、仕事の時間が十分に取れず、また午前の記憶とブツ切れになってしまうことから不完全燃焼状態になっていた。
      •  
      • 朝起きて辛い時などに日程再調整したり成果の出し方を調整しないといけないことに疲れた。(スタンドアップミーティングで何か話すことがあるのかどうか等)
    • 一方、息子と過ごしたり将棋ったーの開発などをしたりする限りではこういった問題は起こっていない。
  • AIによるSoftware Engineer正社員アイデンティティの揺るぎ
    • コーディングはパズル的でクラフトする楽しさがあり*6、また早書きで時間的余裕を作ってプラスアルファで成果を重ねるというスタイルを取っていたのだが、クラフト部分の一定割合がAIに取って代わられたという感じがある。*7
    • AIに移譲できることが右肩上がりで増えているのに、既存の肩書があるためその分野のこと(コンピュータサイエンス、UX, ...)に通じていて会議でリアルタイムで貢献できる状態にあることが期待される。人間はどんどん高次元の理解をするだけで済むようになる中、従前の職種別の役割を担い続けるのは少し違和感がある。この時代、個人開発、少人数開発ではすごい速度で物事が進んでいくのではないか。
    • なお、復職前は「会社員ということはAI = Claude Code使い放題だ」と思ったが、やりたいことや要件のすり合わせなどでコーディングにはなかなか到達しなかった。結局ソフトウェアに対する時間よりも同僚たちに対する時間のほうが、AIコーディングなしでも多い。
      • また出てくるコード変更量は多くなるためコードレビューの負荷も高くなった。書くのは楽しく読むのは大変ってことあるよね。
    • なおSourcegraphのDeep Searchはコードや現行の挙動を把握するにはなかなか優秀だった。
  • その他の、仕事でのそれほどエキサイティングではないこと
    • 成果物による満足感でいくと、仕事の開発は、やはり自分のやりたい、やるべきと思っていることを優先できる個人開発にかなわない。
    • 学び・成長による満足度は、新卒から11年勤めていることもあり、あまり高くない。
  • 息子との時間を過ごすため
    • 息子が1歳半であるこの時間は、二度と戻ってこない。
  • 家庭のための時間を取るため
    • 例えば、物を1つ買うのに、商品の選定だけで何ヶ月もかかっていたり、直さないといけないなと思いながら放置されている箇所が家のなかに多い。
      • 具体的には、ダイニングテーブルを買う際、セットのチェアが気に入らずテーブルだけ買ってチェア探しを継続するも、数ヶ月で出産となり1年半はチェアを買えず、不釣り合いなオフィスチェア1つとロッキングチェアを使って生活していた。(息子が1歳4ヶ月まで夜泣きが続いたため頭脳が使えない状態が多かったこともある。)
      • 他にも居間のカーテンが半分しかカバーできておらず朝早起きの息子への直射日光を防ぐためにカーテンをずらすというのを毎日やっていたがこれを2025年のみならず2026年も続けたまま夏が終わってしまった。
    • 端的に言うと、貯まるお金に比して使う時間がなさすぎるというところ。
    • これまでは妻と2人が仕事して寝て最低限暮らせれば事は進んでいたが、子ができてこれではダメだと思った。
  • 息子の保育園入園を先延ばしにできるかも
    • 1年半育休、3ヶ月バーブシカ(ロシア語で*8おばあちゃん)による助けのあと11月から3月いっぱいまで、我々が入れたいと思っているこども園には入れなさそう。ほかの園にこの5カ月間は入れたくない。本当の理想としては3歳まで入れたくないところでもあったが。
  • 若い時間を意識的に過ごすため
    • 36歳。人生の先輩に、35から40はあっという間だと言われた。ここをズルズル、モヤモヤ状態で通過したくない。
    • 子が生まれてから、代替わりしたという思いからか(あるいは産後鬱か)人生は有限であるという意識をするようになった。
    • また、以前無給休暇を取った時も人生における気付きがあったし、まとまった将棋ったーの技術的負債返済ができたこともあるので、時間を得ることでより豊かな人生が送れるようになるのではないかという期待もある。

      na2hiro.hatenablog.com

    • 以前、新卒で働き始めて順調に3, 4年たったある日、このように全力で毎日働いているだけでいいのだろうかと漠然と思ったことがあるが当時は回答できず流してしまった。今ならできると思う。

退職のデメリット、懸念

  • お金
    • これほどの高給は他にはないし今後もありつけない可能性が十分ある。
    • 妻は当面働く予定。なお妻の方が給料高い。
    • 貯蓄は十分してある。資産運用でも成果が出ている。これに関して妻も仕事をやめることになっても問題がないよう二人で確認してある。
    • 心理的にも胸を張れるくらいこれまで稼いできたと思う。これを今後失う恐れといったものは一切ない。
    • 人生がたくさん給料を稼ぎ天国での座席を決めるゲームであれば退職は選ばないほうがいいかもしれないが、人生はそうではない。
  • コミュニティを失う
    • 社内の技術的に進んでいる人たちを追えなくなったり、毎日顔を合わせるメンバーが家族以外にいなくなることは、技術面、精神面でのデメリットなことは確か。
    • ただ、リモートになってから同じチーム内の同僚との友情的な繋がりは希薄になっている。最初の5年間、コロナ前のフル出社時代はやはり良かった。朝来て顔を合わせ、スタンドアップが始まる前に雑談し、ランチで雑談し、会議室で会議の前後に雑談し、仕事終わりにキッチンでだらだらしているところに卓球(オフィスに備え付け)や夕飯の誘いなど。
    • たまに東京に出てオフィスにふらっと行ってNさんや旧Aチームのメンバーと雑談できなくなるのは残念。
    • それはそれとして、たまに東京に出て友達と会ったりイベントに出たりするのはやるべき。この秋の東京訪問を検討している。ちなみに11月まで有給消化中の社員なので何の問題もなくオフィスに入れる説もある。
  • 会話が減ることによる老化
    • 上と重なるが、友達と会うことはやるべき。同期のK君とは数ヶ月ごと通話すべきか。
  • 世間体
    • 働いていないというのは見ようによっては体が悪い。
    • 自分の事業をやりつつフレキシブルに子育てするという形で説明しようと思う。
    • 将棋ったーでまともな収益が出ないうちは、公式には専業主夫ということになると思う。
  • 尻を蹴られないため、たるんだ生活になる可能性
    • 仕事において、成果をスタンドアップ、1:1、評価など様々な頻度でチェックされており、
    • 暮らしのゴール、息子に関するゴール、将棋ったーに関するゴールなどをQごと、月ごとに設定するようにしたい。
  • 自己の喪失
    • 妻は復職して「仕事をする自分」というものを取り戻して満足しているそうだが、自分にそんな感じはない。
    • ドラマSeveranceでいうInnieとも近いか

思い出

  • 最初の5年は最高だったな。イケてるオフィスでがむしゃらに働いていろんな国の人たちとランチの時に交流していた。オフィスは小さくみんな顔見知り。金曜夜は酒を交えて熱く議論を交わすロシア語話者たちもいたな。コロナでリモートになりこれが途絶えたに近い。
  • 自分の足つき将棋盤駒をオフィス備え付けかのように設置して*9自社の求人ページにデカデカと載ったり、セグウェイ的なホバーボードをオフィス内で乗り回したり*10、毎日卓球したり、やりたい放題だった。

    私物の将棋盤駒


    ホバーボード


  • 入社当時英会話ができなくてセブ島に送られ一緒に修行した同期とも、その後オフィスでの初ローテーション時に隣の席で一緒になった同期とも、退職時点で同じチームにいた。
  • リモート化で仕事が作業となってしまった。これまでは雑談、食事、移動、たまに遊びに出かけるなどを含んだ生活そのものでもあった。

総括

過去を振り返ると名残惜しい気持ちはあるが、過去に戻れるわけではないし、将来を考えるとこれがベストに思う。明日世界の終わりが来てもダンス・ナンバーで踊り続けよう。*11

*1:再就職しようとすれば失業手当が貰えるそうです。私の場合は月24万円程度(手取り)。再就職したがらせる経済的インセンティブが設計されています。

*2:最近サイレントレイオフが起こっているという噂あり。会社から、配置換えをするかNヶ月分の給与を取って自主的に退職するかの提案がされるとかされないとか。いいなあNヶ月分の給与。完全に自主的だとそんなものは貰えません。

*3:らっしーね@量子将棋王者

*4:第3期縺王戦 - 将棋ったー

*5:長期の育休を明けてチームがやっていることが全然違うということもあるが

*6:同じくソフトウェアエンジニアである妻と、2018年頃、夜の目黒の公園で「パズルをやっているだけでお金が稼げて、なんていい仕事だろう」「でも我々なんかすごい後輩にすぐ抜かされるんだろうな、給料も下がるんだろうな」と話し合ったことを覚えています。しかしまあ、すごい者でなくすごい物が来るとは。

*7:tech debtとなったイケてないコードのリファクタリングを、機能追加に際してあらかじめやることによって機能追加を簡単にする相乗効果を得るのが好きだった。AIコーディングになってtech debtが増えているはずなのでそこは楽しみとして残っていたかもしれない。

*8:妻と該当のおばあちゃんはロシア人です

*9:たまたま来ていた本社のお偉いさんみたいなNさんに二つ返事で許してもらった

*10:たまたま来ていた本社のお偉いさんみたいなNさんに二つ返事で許してもらった

*11:https://www.youtube.com/watch?v=Rzovt9B6Gfk

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

【宣伝】量子将棋の棋戦

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マイレージは結局一度シベリア航空の特典航空券に替えた以外は失効している気がします。