ninjinkun's diary

ninjinkunの日記

エルデンリングクリア&トロコン

我はエルデの王

2022年3月の発売からずっとやっていたエルデンリングを1年以上かかってようやくクリアした。合計212時間遊び続けたらしい。自分は全部のダンジョンをクリアしてアイテムもできるだけコンプしようとするタイプなので、ボリュームがあるゲームを始めるとこれくらい時間がかかってしまう(前回: Cyberpunk 2077トロコン - ninjinkun's diary)。

元々こういったソウルライク系のゲームは全くやったことがなく、かつダークな世界観も苦手だったので始める前はかなり躊躇していた。しかし周りの人の多くが発売日に買っていたので、お試しくらいの気持ちで買って始めた。初めは強力な敵や暗がりに怯え、何度も心が折れそうになりながら、他プレイヤーの残したメッセージを心の支えにしながら徐々に世界に慣れていくことができた。

特筆すべきは、プレイ時間180時間くらいまでずっとまだ知らない世界があるワクワク感が続き、延べ1年くらいずっと新鮮な気持ちでプレイできたことだ。知らない世界を探検するためにゲームをやっている者としては、まだこんなに世界があるんだ!という驚きだけでずっと続けていた気がする。最後は欲を出して折角ならトロフィーも全部と思ってネットの記事を見ながら作業ぽくなってしまったが、まあそれはそれ。素晴らしいゲームに楽しませてもらった1年と少しだった。

とりあえず何とかゼルダ新作の前に終わってほっとしている。

コンプしたトロフィー

世界の終りとハードボイルド・ワンダーランド再読

今週木曜に村上春樹の新刊が出るので、有給を取って楽しみに待っている。タイトルが「街とその不確かな壁」になっており、このタイトルは元々は「世界の終りとハードボイルド・ワンダーランド」の原型になった単行本化されていない中編だったはず。とりあえず「世界の終り〜」と何か関係があるのは間違いないと思うので、久しぶりに読み返している。

主人公は35歳の計算士という職業の離婚歴のある独身男性で、情報を守る仕事をしながら余暇でビールやウイスキーを飲んで音楽を聴いたり映画を見る生活をしている。自分が最初にこれを読んだ時は高校生だったはずだが、気がつけばもう彼よりも年上になってしまった。影響を受けたおかげで、自分も今ではビールやウイスキーを飲むおっさんになっている。

今回読み返して気づいたのだが、作中に出てくる千駄ヶ谷や外苑の並木は偶然自分がたまにランニングをしているコースだったので、今日も走りに行ってきた。この下に「やみくろ」の巣があるのだな、と思いながら走ると中々迫力が感じられて良い。何にせよ新刊が楽しみである。

なんだかネガティブな内容になってしまったが、2023年のこの時期の記録として書いておく。


コロナ禍が終わったのか終わっていないのか定かではないが、少なくとも今あらゆる活動がコロナ禍前に戻ろうとしているのを感じる。技術イベント、ライブ、飲み会などで突然忙しくなって、そういえば3年前まではこんな感じだったのだなと懐かしい気持ちになる。

この3年間のことを考えると、とにかく周りの空気を読んで行動していたなと思う。自分は世間に縛られずに勝手に生きていると思い込んでいたが、実際はめちゃくちゃ縛られていた。当時はニュースや数字を見て意思決定しているつもりだったが、今から振り返ってみると結局周りに合わせていた部分が大きかったと思う。

同僚や友人が皆自粛していれば自粛し、少し緩んできたらこっそり小旅行に行った(ここで言うこっそりはTwitterなどの公開された場には書かないくらいの意味)。なかなか来ないワクチン接種にやきもきし、運よく人より先に回ってきた職域接種に黙って行った。感染が怖いので外食はしないという友人には自分が外食した話はしなかった。もちろん自分も感染は怖かったが、それ以上に人目を気にして行動と公開範囲を決めていた。

今また周りの人たちが集まる活動を再開したので、それに合わせて自分も集まりに行きだした。ワクチン接種率とか治療薬とか色々理屈はあると思うが、なんで集まってOKになったのかと聞かれたら即答できる自信はない。結局周りに合わせているだけなのだ。この先また感染が拡大しても、周りの人が活動を継続するかを見てそれに追従するのだと思う。

この3年間を通して、自分はこんなに空気を読んで人目を気にしながら動く人間だとわかったので、それを覚えておきたくて書いた。

YAPC::Kyotoに参加した #yapcjapan

3年ぶりのオフラインカンファレンス、YAPC::Kyotoに参加してきた。自分はPerlは書かなくなって久しいが、今回は同僚も発表するし、自分が昔勤めていたはてなのメンバーも参加しそうだし、何よりオフラインカンファレンスを久しぶりに楽しみたいという動機で京都まで行ってきた。

前日祭から参加したが、kyannyさん (id:a666666) の発表「ソフトウェアエンジニアからサポートエンジニアにジョブチェンジしてみた」が印象に残った YAPC::Kyoto 2023 Reject Con で発表した #yapcjapan - @kyanny's blog。サポートエンジニアは同じような問題が何度も来るので一度解決した問題の知見がすぐに活かせるところや、細かい締め切りに追われるところなど、なるほどなと思った。自分が将来サポートエンジニアになるかはわからないが、実体験を聞いたことでイメージが湧くようになった。彼のブログをずっと購読していることもあり、久しぶりに生のkyannyさんに会えたのも嬉しかった。

前日祭後にid:onishiに誘ってもらって一次会、そしてその後流れるようにはてなオフィスで二次会となった。移転したはてなオフィスは初訪問だったのだが、はてなのオフィスというだけで気持ちが新卒に戻ってしまい(自分は2009年の新卒)、気がつくと夜中の2時まで飲んで翌日は二日酔いになっていた。

YAPC本編のハイライトはやはりid:onishiのキーノート YAPC::Kyoto 2023 に参加し、キーノート喋ってきました裏話 - 大西ブログ。「モブがメインキャラを目指す話」とのことで、大西さん(さん付けで呼びたいのでid記法はやめる)は長らく自分がモブだという認識だったらしい。最近受けたインタビューの中にもある通り、大西さんは自分の最初の上司だったのでそれなりに近くで見ていたつもりだったが、上司がそんなことを考えいたなんて全然知らなかったので結構驚いた。

自分の大西さんに対する印象は、とにかく問題解決のスピードが異常に早く、運用チームという地味な名前ながら全社の売り上げの大部分を担うチームを担当していて、いろんな職種の人から頼りにされていた。確かに対外的に目立つ活動はされていなかったが、社内の人は皆はてなを支えているのは大西さんだと理解していたと思う。自分が退職した2013年あたりに大西さんのマインドチェンジがあったようで、対外的な露出を増やし、サービスディレクターを担当して積極的に責任を引き受けるようになっていった。その辺りの経緯やその後は薄くしか知らなかったので、軌跡を知ることができて嬉しかった。

自分は大西さんとは全然違うタイプのエンジニアになったと思うが、ある種の大西イズムは引き継いでいるつもりでいる。徹底的なユーザー志向やサービスへの責任感はその最たるものだ(全部同じようにできているわけではないが…)。今回の発表を聞いて改めて、やはり最初の上司が大西さんでよかったと思った。

ちなみに発表後に大西さんを知らない人にも感想を聞いてみたが、「あれでモブなら俺たちは何なんだ」と言っていて、いやほんとそれですよ。

YAPC::Kyotoを開催してくださったスタッフの皆さん、ありがとうございました。とても楽しかったです。

氏名変更クエスト#8

姓の変更後も持っている銀行口座は全て旧姓のまま放置しており、今まではそれで特に問題はなかった。だが確定申告の還付金口座を指定する際に名義が違う口座には振り込めないことに気づいて、ついに戸籍姓の口座が必要になってしまった。*1どのみちいつかは必要になると思っていたので、この機会に新しく作ろうと思うが、やはり面倒なものは面倒である。還付の申請は3/15に間に合わなくても良いので焦ってはいないが、折角e-Tax送信の手前まで準備したところだったのでさっさと終えてしまいたい。久しぶりに発生した氏名変更タスクだがやはり煩わしい。

*1:旧姓での確定申告も可能らしいが、こちらは個人事業主の場合は個人事業の開業・廃業等届出書の再提出が必要になるらしい(ぐぐって出てきた記事)。これはこれで面倒なので、どのみちいつかは必要になるであろう口座を作る方向でやってみる。

U-NEXTへの不満

USの同僚と雑談で盛り上がるにはHBO作品は欠かせない。しかし日本にはサブスクのHBO Maxがないので、作品を見るには独占配信をしているU-NEXTに加入する必要がある。U-NEXTは色んな意味で微妙なサービスで、Pros/Consを書き出すと以下の通りになる。

Pros

  • 映画のラインナップが圧倒的
    • ミニシアター系の作品もだいぶ揃えている
  • キャストや監督から作品をたどれる機能が便利
  • HBO独占配信

Cons

  • 月額費用が2,189円と高価
  • 毎月1200ポイント付与
    • これを何に使うかユーザーが考えないといけない
      • 漫画はKindleで買うし、映画のレンタルはiTunesの方が画質が良い
    • 自分は1500ポイントでTOHOシネマズのチケットと交換できるのがわかってから高額な月額費用を許容できるようになった
  • 4KやDolby Visionの対応デバイスが限られている
    • Dolby VisionはFire TVとAndroid系にだけ対応
    • 自分の持っているApple TVやiOSは全滅
    • 一応PS5で4K配信を見ているが、HDRじゃないので暗部の表現が見えない

マイナーな映画やHBO作品を見るために仕方なく契約しているが、なんでこんなサービスに加入しているのかと月に二回くらいは辛い気持ちになる。

今年劇場で観た映画2022

今年も映画を結構観た。映画の話ができる知人も周りに増えてきて嬉しい限り。去年に引き続き、ランキング遊びを今年もやってみる。以下、タイトルは全てFilmarksにリンクしてある(レビューや配信に飛べて便利なので)。

トップ10

  1. マイスモールランド
  2. THE FIRST SLAM DUNK
  3. オールドボーイ4Kリマスター
    • 元の作品を見てなかったのだけど、いきなり心を撃ち抜かれた。こんな完璧な映画があるのか
  4. コーダ あいのうた
  5. GのレコンギスタIV V
  6. RRR
  7. FLEE
  8. 偶然と想像
  9. リコリスピザ
  10. Other Music

トップ10には入らないけど好き

京都で合宿

先々週にLaunchableのUSメンバーが日本に来て、京都で合宿を行った。彼らに日本の名所や食べ物を紹介するのはとても楽しかった(そして話題が自動的に生まれるので便利)。天候にも恵まれ、紅葉の季節と相まってとても良い時期に開催できたと思う。

以下、一緒に過ごしていて面白かったこと。

  • ポカリスエットが人気
  • このOmakaseはNYだと10倍の値段するね
  • いくらは苦手
  • 白子 (Fish milt) はキモい
  • 柚子胡椒最高
  • 「どうも」の使い方がやたら上手くなる
  • (電車やバスの便利さに)"Who need a car?"
  • 度数9%のチューハイがChuhai 9として人気
  • RBF (Resting Bitch Face) Resting bitch face - Wikipedia

飲んだあといつものノリで鴨川で二次会をしてみたが、彼らにしてみたらただ寒いだけだったかもしれない。

李禹煥展

連休初日、新美術館でやっている李禹煥展に行ってきた。昔直島で行った李禹煥美術館がとても良かったので、同じ体験を求めていた。

しかし感想としては、石や金属を使った作品は新美術館の白いボードで区切っただけの部屋では窮屈さしか感じず、全く面白くなかった。一方で後半の絵画作品はとても良く、没入して楽しめた。しかし飾る箱によってこんなに差が出るのかというのが体験できたのはある意味で収穫だった。この後兵庫県立美術館にも巡回するらしく、そちらは直島と同じ安藤忠雄建築なのでそちらの方が相性が良さそうに思う。

屋外展示は良かった。やはり石は外が良い

写真は全て撮影許可エリアのもの。許可エリア外だったが、リズミカルな矩形で構成されている絵画作品が良かった。

再考: アプリ開発と状態遷移の管理

自分が開発しているLaunchableWebアプリがローンチされて1年半ほどになる。このWebアプリにはReduxのような状態管理ライブラリを入れないまま開発してきたのだが、今のところ困らずに開発できている。そういえば昔自分は状態管理について何か考えていたような…とブログを掘り起こしてみた。

ninjinkun.hatenablog.com

このエントリは2016年にネイティブアプリを対象にして書かれているが、この後自分は2018年ごろにWebフロントエンドに軸足を移し、ネイティブアプリ開発から離れた。なのでこのエントリはWebフロントエンドエンジニアが2022年に再考した話になる。

結論としては、当時自分が管理したかった状態のほとんどは現在ApolloClientのキャッシュによって解決されている。


繰り返しになるが、自分が開発しているLaunchableのWebフロントエンドには状態管理ライブラリが入っていない。しかしグローバルな状態が消えたわけではなく、ApolloClient(他のGraphQLクライアントやSWR、TanStackQuery等に読み替えてもらってもだいたい同じだと思う)、Auth0クライアント、そしてURLの中にある。例えば以下の画面はユーザーのダッシュボードだが、このページに含まれる状態は以下の通りである。

  • GraphQLから取ってきたワークスペース情報
    • ApolloClientの中にある
  • ユーザーの情報
    • 認証認可情報、ユーザー名など
    • Auth0クライアントの中にある
  • 現在選択中のワークスペース
    • URLの中にある(スクショでは見えないが)
    • 今回は触れないが、Webアプリはグローバルな状態をURLに持てるのがネイティブアプリとの大きな違いだと思う

認証周りは複雑な状態制御があるので大きなトピックだが、今回はApolloClientの部分に着目する。

2016年当時やりたかったのは主に以下のことなのだが、

  • APIから取得した情報が複数の画面でも使われるから、各データとそのロード中、エラーの状態を管理したかった
    • ApolloClientはデータのキャッシュだけでなく、ロード中などの状態も管理してくれる
  • 複数のAPIの情報を集めて画面が構成されていたので同上
    • GraphQLによる一括取得とキャッシュの正規化が解決した
  • ユーザーが行った操作によってグローバルな状態が変化したかを管理したかった
    • 「いいね」とかユーザー名の変更とか
    • Web連携アプリ (ネイティブでもSPAでも)ではユーザーが変更した状態はほぼ全てサーバーに送られるからこれもApolloClientに乗せられる

各項目にもある通り、現在これらはGraphQLとApolloClientによって解決されている。

今でも複数の画面やコンポーネントにまたがるフォームなどではグローバルな状態管理の出番があると思うが、おそらくその場合でもReact Contextのようにスコープを絞った状態管理で間に合うと思われる(もっと複雑化しそうならRecoilになるのかな?まだ必要になっていないので良くわかっていない)。

アプリ開発と状態遷移の管理 - ninjinkun's diary のタイトルにある通り、当時自分は状態「遷移」の管理が重要だと考えており、アプリの中にステートマシンがあるようなモデルをイメージしていた。しかし結局これも「リクエスト→リクエスト中→レスポンス「や「リクエスト→リクエスト中→エラー」という状態遷移がほとんどで、複雑なケースでも複数のAPIリクエストのレスポンスを待ち合わせて合成するような場合であり、結局全て今はApolloClientが管理してくれている。

昔「アプリはでっかいシングルトン」と書いたが、今やそのシングルトンは高性能なキャッシュに姿を変えた。我々プログラマーはGraphQL APIへのリクエストさえ書けば必要な状態は意識しなくても管理されるので、よりUIに注力しやすくなった。Reduxなどを使った状態管理はある種面白くはあったが、手間であることは否めなかったので、自分はこの進化を歓迎している。

別の視点で見てみると、ReduxあたりまではWeb接続を前提としないGUIアプリの文脈で状態を捉えていたが、GraphQLの登場によりWebと連携するアプリはそちらに特殊化する形で状態の問題を解決してしまったとも言えるかもしれない。

自分は最近のネイティブアプリに明るくないのだが、ちょっと探してみた範囲では去年や今年のiOSDCでも同じような内容の発表があったようなので、状況は似てきている気がしている。