top

Cartesian Theater

Powered by NotionAPI

20240525

Date: 2024-05-25
Last Edited: 2024-05-26 06:40:00

映画『トラペジウム』を観た。

映画『トラペジウム』公式サイト
乃木坂46一期生・高山一実の長編小説デビュー作「トラペジウム」。累計30万部の大ヒットを記録した原作がCloverWorks制作にて2024年5月10日全国ロードショー決定!
https://trapezium-movie.com/
映画『トラペジウム』公式サイト

「アイドルを目指す少女の青春物語」と銘打ちつつ、どちらかといえば「アイドル」部分ではなく「青春」の方が主題な映画。

主人公の東ゆうは輝きを放つアイドルに憧れていて、そのようなアイドルになることを至上の目標としている。ただそれがうまくいかないことによって、そもそも輝きを放つとはどういうことなんだろう?という作品のテーマが浮かび上がってくる。この問いへの答え方がとても素晴らしいと思った。

前半で東西南北のメンバーとアイドルグループを作るために打算的に出会い、交流を深めたこと。その後もアイドルグループとして様々な活動をしたことが一面では他のメンバーの人生を良い方向に変えることにつながっていた。アイドルとなる以前にまず一人の人間としての東ゆうが誰かの人生を照らすことができていた。例え仲良くなるきっかけが嘘だとしても、実際にそれぞれの人生が交差して動き出した。これは虚像としてのアイドルついても同じことが言えると思う。

モノローグ形式のためかなり韜晦というか、露悪的に自分の振る舞いを描写していた前半に対して最後に他のメンバーからの解釈によって彼女のこれまでの行動に光が当たる。アイドルとして成功するかどうかという以前に、ただ何かを目指して努力している人はそれだけで輝く星たり得るというのがとても優しい人間観だと思った。

その後で東ゆうは結局アイドルになってしまうけど、それもこの経験によって「光ること」から「誰かを照らすこと」へと考え方が変わったからではないだろうか。ただ一人で光を放っていても意味がない。誰かを照らすから輝いていることになる。「わたし一人では、アイドルになれないんだって。」インタビューの場面で(当時は打算でしかなかった)ボランティア活動を肯定的に語ることができているのも、彼女の中でその活動で誰かを笑顔にできたことに意味があったと考えられるようになったからではないだろうか。

また解釈やそれぞれの視点によって見え方が変わるということもかなり意識的に描かれていたように思う。東ゆうの行動への解釈もそうだし、写真を撮ることも別の視点から対象を映し出すことになる(さらに言えばアイドルという職業が常に「見られること」を含んでいる)。最後のシーンでの「トラペジウム」と題された文化祭での5人の写真は、本人たちが意図したタイミングで撮られたものではない。しかしそのタイミングだからこそ写真を撮った工藤真司には星々(=トラペジウム星団)のように映った。

少しメタ的な視点では原作小説をトップアイドルが書いていることもあって、アイドルを目指したり、挫折してしまった少女たちへの想いも感じた。東西南北のそれぞれが作詞して、誰に聞かせるでもなくただあの場でだけ歌った曲も彼女たちの心でずっと大切なものとしてあり続けるはずで、アイドルとして成功することだけではなくそもそも誰かと思いを一つにして一緒に歌うこと自体がとても素晴らしいのだというのがとても良い描き方だと思う。

20230409

Date: 2023-04-09
Last Edited: 2023-04-09 05:23:00

マックス・ヴェーバー『プロテスタンティズムの倫理と資本主義の精神』を読んだ。

プロテスタンティズムの倫理と資本主義の精神 - 岩波書店
https://www.iwanami.co.jp/book/b248662.html
プロテスタンティズムの倫理と資本主義の精神 - 岩波書店

読んだ背景としてはキャリアというものを考えた時、それは資本主義社会でのキャリアパスであり、その前提にある資本主義社会について理解する必要があると感じたから。「どういう仕事をすべきか」を単体で考えてもいまいち浮かんで来ず、それなら今巻き込まれている社会がどういうものかという前提から演繹してみようと思ったからだ。

この本の大きな目的は以下のような逆説を解き明かすことにある。

ヨーロッパでは営利以外のなにものか、とりわけ営利を敵視するピュウリタニズムの経済倫理(世俗内的禁欲)が、逆に歴史上、近代の資本主義というまったく新しい社会事象の生み出されるさいに、なにか大きな貢献をしているのではないか。

(マックス・ヴェーバー,大塚 久雄. プロテスタンティズムの 倫理と資本主義の精神 (Japanese Edition) (p.583). Kindle 版.)

そのためにカルヴァン派のプロテスタンティズムの教義などを研究していくという内容になっている。その教義による帰結は以下のようにまとめられている。

どの教派においてもつねに、宗教上の「恩恵の地位」をば、被造物の廃状態つまり現世から信徒たちを区別する一つの身分(status)と考え、この身分の保持はその獲得の仕方はそれぞれの教派の教義によって異なるけれどもなんらかの呪術的=聖礼典的な手段でも、懺悔による赦免でも、また個々の敬な行為でもなくて、「自然」のままの人間の生活様式とは明白に相違した独自な行状による確証、によってのみ保証されうるとした。このことからして、個々人にとって、恩恵の地位を保持するために生活を方法的に統御し、そのなかに禁欲を浸透させようとする起動力が生まれてきた。ところで、この禁欲的な生活のスタイルは、すでに見たとおり、神の意志に合わせて全存在を合理的に形成するということを意味した。しかも、この禁欲はもはやopussupererogationis(義務以上の善き行為)ではなくて、救いの確信をえようとする者すべてに要求される行為だった。こうして、宗教的要求にもとづく聖徒たちの、「自然の」ままの生活とは異なった特別の生活は(…)もはや世俗の外の修道院ではなくて、世俗とその秩序のただなかで行われることになった。このような、来世を目指しつつ世俗の内部で行われる生活態度の合理化、これこそが禁欲的プロテスタンティズムの天職観念が作り出したものだったのだ。

(マックス・ヴェーバー,大塚 久雄. プロテスタンティズムの 倫理と資本主義の精神 (Japanese Edition) (pp.441-443). Kindle 版.)

反カトリック的な立場から教会による呪術的な手段による宗教的救済を拒否したプロテスタンティズムは、結果として世俗内での禁欲を要求するようになった。そうした禁欲は「予定説」といった教義により神が創造した合理的な世界に貢献し続けるという形を取る。それにより、金銭によって欲望を満たすことを拒否しながらも積極的に利潤の追求を行うという行動様式が人々に倫理的義務として課されるようになった。

そうなると、結果としてとても儲かってしまう。なぜなら利益を浪費することなく更なる投資に活用するからだ。それによって成立したのが近代資本主義ということになる。

さらに、この近代資本主義のシステムはその道徳的基礎を失ってなお私たちの生活を支配し続けている。なぜなら禁欲的に利潤を追求し続けなければ資本主義社会の中で生存していくことができなくなってしまったからだ。

われわれは天職人たらざるをえない。というのは、禁欲は修道士の小部屋から職業生活のただ中に移されて、世俗内的道徳を支配しはじめるとともに、こんどは、非有機的・機械的生産の技術的・経済的条件に結びつけられた近代的経済秩序の、あの強力な秩序界を作り上げるのに力を貸すことになったからだ。そして、この秩序界は現在、圧倒的な力をもって、その機構の中に入りこんでくる一切の諸個人直接経済的営利にたずさわる人々だけではなくの生活のスタイルを決定しているし、おそらく将来も、化石化した燃料の最後の一片が燃えつきるまで決定しつづけるだろう。

(マックス・ヴェーバー,大塚 久雄. プロテスタンティズムの 倫理と資本主義の精神 (Japanese Edition) (p.565). Kindle 版.)

資本主義社会を素朴にイメージした際に、ひたすら利潤を追求するのは人間が欲望を満たすためだと考えがちだと思う(自分がそうだった)。しかしながら、ヴェーバーによればそれは全く間違いで、利潤の追求はむしろ禁欲的な行為なのである。

私たちは自分の欲望を満たすためではなく、社会によって禁欲を強制されて今日も働いている。それによって得られるはずだった「神による恩寵の確証」はすでに失われている。というより資本主義というシステムだけ輸入した日本においてそれは最初から存在していない。ただ資本主義社会で生き残るためにはそうせざるを得ないからそうしているのである。

実生活に即して考えると例えば就活生はエントリーシートの志望動機で「お金を稼いでデカい家を買いたいです!」とは書かずにどうやって企業や社会に貢献できるのかを書く。一見不思議に見えるが、禁欲的に資本主義社会に貢献できる人間を選抜するプロセスであると考えると納得がいく。

キャリアを考えるという最初の目的に立ち返ると、まず「(最大多数の)欲望の充足を最大化する」といったことを目標にするのは少なくとも資本主義社会での職業倫理に合致するものではないことが分かった。「天職人たらざるをえない」私たちにとってそうした目標を掲げたとしても適応的ではない。ではどうするのかという点についてはまだ結論が出ないのでさらに読書を進めていこうと思う。

20230225

Date: 2023-02-25
Last Edited: 2023-02-26 05:58:00

再上映されていた『さよならの朝に約束の花をかざろう』を観た。

映画『さよならの朝に約束の花をかざろう』公式サイト
『あの花』『ここさけ』の岡田麿里が満を持して贈る、一大感動巨編!Blue-ray & DVD 10月26日発売
http://sayoasa.jp/
映画『さよならの朝に約束の花をかざろう』公式サイト

この映画はまず尋常でなく背景に力が入っていて、通常ではあり得ないほど遠景まで書き込まれた背景美術と凝ったライティングが見たことのないような奥行きを生み出している。映画館の環境でそれを見られて良かった。例えば王宮のシーンでは滑らかな石の床に窓の形の光が落ちていて、床の微細な歪みに合わせてその光の形も歪んでいる。3Dグラフィックでのレイトレーシングのような描写が行われている。

レイリアは(意に沿わぬ形で)設けた娘を忘れて生きていくことを選ぶ。ここで示されるのは愛することが義務ではないということではないかと思う。エリアルを看取ったマキアの「愛してよかった」というセリフで映画は締め括られる。「愛してよかった」のは、裏を返せば「愛さなくてもよかった」からだ。愛することが義務ではなく、選び取る行為だから「愛してよかった」と言える。その愛が親のいなかったマキアから生み出されることに、人の持つ愛情の奥深さと力強さがあるのだと思う。

20230107

Date: 2023-01-07
Last Edited: 2023-01-07 08:25:00

2022年のアニメ単話10選

機動戦士ガンダム 水星の魔女

第7話 シャル・ウィ・ガンダム?

シャル・ウィ・ガンダム?|機動戦士ガンダム 水星の魔女 公式サイト
『機動戦士ガンダム 水星の魔女』各種配信サービスにて配信中
https://g-witch.net/story/7/
シャル・ウィ・ガンダム?|機動戦士ガンダム 水星の魔女 公式サイト

ガンダムなのにモビルスーツが全く登場しない回で、それでいて一番面白い。ミオリネは父親に反発しながらも結局はその庇護によって生活している、という問題点の指摘から逆にそれを利用して状況を解決するという普通なら数話かけそうな展開を1話でやってしまう令和のアニメのスピード感。

進撃の巨人 第4期

#80 二千年前の君から

物語 | TVアニメ「進撃の巨人」The Final Season
TVアニメ「進撃の巨人」The Final Season 完結編 NHK総合にて2023年放送!
https://shingeki.tv/final/story/#/episode/80
物語 | TVアニメ「進撃の巨人」The Final Season

全部の謎が解かれるすごい回。始祖ユミルに対してエレンがかけた言葉に彼の人生=進撃の巨人という物語が詰まっていて主人公の格を感じた。

その着せ替え人形は恋をする

第8話 逆光、オススメです

TVアニメ「その着せ替え人形は恋をする」公式サイト
「その着せ替え人形は恋をする」2022.1.8 ON AIR
https://bisquedoll-anime.com/story/?id=08
TVアニメ「その着せ替え人形は恋をする」公式サイト

被写体を入れ替えてのサブタイトルの回収が良かった。

Do It Yourself!! -どぅー・いっと・ゆあせるふ-

すてっぷ1 DIYって、どー・いう・やつ?

Story | オリジナルTVアニメ「Do It Yourself!! -どぅー・いっと・ゆあせるふ-」公式サイト
女子高生×工具=ものづくり DIY”初心者“女子の日常物語、活動スタート!2022年10月5日(水)よりTVアニメ放送開始!!
https://diy-anime.com/story/detail.php?id=1001119
Story | オリジナルTVアニメ「Do It Yourself!! -どぅー・いっと・ゆあせるふ-」公式サイト

単にDIYでモノを作るだけでなく、例えば居場所や人間関係を自分で作り出していくというテーマが一貫していて良かった。1話は幼い頃に二人で遊んだ庭のベンチをまた作ったらその頃の関係に戻れるだろうか、という祈りが切ない。

BIRDIE WING -Golf Girls' Story-

#08 ファイナル・バレット

TVアニメ『BIRDIE WING -Golf Girls' Story-』公式サイト(バーディーウイング)
世界初、女子ゴルフをテーマとしたオリジナルアニメシリーズ『BIRDIE WING(バーディーウイング)』公式サイト
https://birdie-wing.net/story/8.php
TVアニメ『BIRDIE WING -Golf Girls' Story-』公式サイト(バーディーウイング)

変形するゴルフ場で賭けゴルフを行う謎のアニメ。主人公の師匠であり対戦相手であるローズのキャラクターが良かった。

ヒーラー・ガール

歌唱3 お掃除、ラン・ラン・ラン

STORY | TVアニメ「ヒーラー・ガール」公式サイト
コーラスユニット『ヒーラーガールズ』が声優を担当する完全新作オリジナルTVアニメ制作決定!歌を使って人々を癒す
https://healer-girl.jp/story/#/3
STORY | TVアニメ「ヒーラー・ガール」公式サイト

3話はミュージカル調の演出がとても面白かった。主題歌+劇中歌(12曲)+劇伴を全て高橋諒(Void_Chords)が制作しているのがとんでもない。

ビルディバイド -#FFFFFF-

#17 絆

ビルディバイド -#FFFFFF-(コードホワイト) | STORY
https://anime.build-divide.com/story/?id=17
ビルディバイド -#FFFFFF-(コードホワイト) | STORY

カードゲームアニメの2期で、一期の主人公の弟子枠の女の子と主人公の妹で敵役だった女の子がメインキャラになるというのが面白かった。17話はそもそも敵同士だった二人の心が繋がるようになる回で良かった。

平家物語

第九話 平家流るる

STORY | TVアニメ「平家物語」
琵琶法師により語り継がれ、後世の文学や演劇に大きな影響を与えた大古典『平家物語』。《監督》山田尚子×《脚本》吉田玲子×《キャラクター原案》高野文子×《音楽》牛尾憲輔による初のTVアニメ化!
https://heike-anime.asmik-ace.co.jp/story
STORY | TVアニメ「平家物語」

原作(?)を読んだときから平敦盛の最期の話が好きだったので、それが美しい背景美術でアニメになって嬉しかった。

ぼっち・ざ・ろっく!

#11 十二進法の夕景

TVアニメ「ぼっち・ざ・ろっく!」公式サイト | STORY
十二進法の夕景
https://bocchi.rocks/story/?id=11
TVアニメ「ぼっち・ざ・ろっく!」公式サイト | STORY

11話のラストで文化祭のライブを始める瞬間に後藤ひとりがずっと孤独にギターを弾いていた押し入れがカットバックされるのが印象に残った。そのほかの演出も凝っていて良かった。

リコリス・リコイル

#01 Easy does it

オリジナルTVアニメーション「リコリス・リコイル」公式サイト
オリジナルTVアニメーション「リコリス・リコイル」2022年7月放送開始!
https://lycoris-recoil.com/story/?id=ep01
オリジナルTVアニメーション「リコリス・リコイル」公式サイト

「機動戦士ガンダム 水星の魔女」と並んで令和のアニメのスピード感を象徴するアニメだった気がする。オリジナルアニメなのでどういう話になるのか全然わからない中での1話の期待感がとても良かった。キャラクターの作画(絵+動き)が異常に良い。

20220515

Date: 2022-05-15
Last Edited: 2022-05-15 14:44:00

bandcampの新着を追うのが難しいという問題があった。新着の通知メールは来るのでそれを転送して情報を取り出し、データベースに蓄積して表示するWebアプリを作った。

bandcamp-timeline
https://bandcamptimeline.unronritaro.net/
bandcamp-timeline

メールをAmazon SESに送るとそのファイルをS3に置くことができる。S3に置いたらそれをトリガーにしてLambdaを起動し、転送されたメールをパースして各種情報を取り出す。そのためのコードが以下。

https://github.com/yuki-oshima-revenant/bandcamp-timeline/blob/master/mailparser/src/main.rs

Rustで書いている。メールのパースはmail-parserクレート、メール本文のHTMLのパースはscraperクレートを利用した。RustでLambda用のコードを書く場合、Lambda実行環境用のクロスコンパイルさえうまくいけば依存ライブラリのデプロイの問題は解決する(バイナリにコンパイルしてしまうため)。クロスコンパイルの手順は以下のヘルプにある。

https://docs.aws.amazon.com/sdk-for-rust/latest/dg/lambda.html

ヘルプにあるMac用の環境変数やリンクの設定だけではコンパイルがうまくいかないライブラリがあった。以下の記事にあるように.cargo/config.tomlにlinkerの記述をしておくとうまくいった。

Lambda が Custmon Runtimeに対応したのでRustで試してみた
こんにちは、Kaoriです。 WernerからCustmon Runtime for Lambdaの発表がありましたね。 Wernerが着ているのはSkrillexのTシャツなんですが羨ましいですよね。というわけで、新しく発表されたCustom runtimeを使って例のごとくHello Worldを試してみましょう。 今回言語はRustを使ってみました。 Rustのインストール $ curl https://sh.rustup.rs -sSf | sh Current installation options: default host triple: hoge default toolchain: stable modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation と聞かれるのでよしなに答えてインストールします。基本的には1でいいと思います。 Mac OS Xでのコンパイル
https://tech.bitbank.cc/lambda-custmon-runtime/
Lambda が Custmon Runtimeに対応したのでRustで試してみた
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"

PythonなどでLambdaを実装すると依存ライブラリの配置が面倒くさすぎるのでRustで実装すると開発体験がいい。

データベースにはDynamoDBを初めて利用した。単純なkey-valueストアというだけでなくパーティションキーとソートキーの組み合わせでキーを構成できるのが柔軟性が高いように思った。今回の場合はメールの宛先のアドレスをパーティションキー、通知されてきたリリースのURLをソートキーにしている。こうするとまず宛先アドレス単体で検索することができ、またリリースごとに一意のデータを持つことができる。

またRustからS3やDynamoDBを操作するためにAWS SDK for Rustを利用してみた。

https://docs.aws.amazon.com/sdk-for-rust/latest/dg/welcome.html

まだdeveloper previewだけど普通に各種操作ができそうな感じだったので、Rustを利用したAWS開発が捗っていきそうな予感がする。

フロントエンドについてはいつものNext.js + Tailwind CSSをVercelに上げただけで特筆すべきことはない。

現状は自分の新着を表示できるだけなので、次の段階としてログインしてbandcampユーザーが誰でも利用できるようにしたい。ただしデータの集め方がメールの自動転送なので、ユーザーに自動転送設定を行ってもらう必要がある。(もちろんログイン機能の実装も必要)

Gmailで自動転送を設定する場合は転送先へと一度メールを送ってそのリンクを踏む必要があった。現状受信用のSESのアドレスに来たメールはS3に生データが置かれるだけで通知も何もないのでなんとかして自動転送を承認できる仕組み作る必要がある。

20220326

Date: 2022-03-26
Last Edited: 2022-03-26 14:35:00

冲方丁『マルドゥック・アノニマス 7』を読んだ。

https://honto.jp/netstore/pd-book_31447257.html

『スクランブル』『ヴェロシティ』が各三冊だったのでその合計冊数を超えているし、まだまだ続きそうだった。物語は長ければ長いほどいいと思っているので嬉しい。

法学徒になったバロットの語るところの「公正」/「平等」と、ハンターの言う「均一化」の関係が面白かった。

公平とは、機会を等しくすることであり、そのためには、結果を厳格にしなければならない。平等とは、結果を等しくすることであり、そのためには、機会を厳格にしなければならない。

公平は選挙やスポーツ、平等は福祉や公共施設に例えられている。いずれか片方のみを追求してしまうと社会は成立しなくなる。

ハンターの「均一化」は平等のみを追求する思想なのであった。自身よりも恵まれている人間から奪い取り、自分のものとすることで平等を実現する。しかしながらそれは公平ではない。

危機にある人間にエンハンスメントを施す09法案は公平ではあるが、平等ではない。限られた人間にしか力を与えないからだ。

7巻目にして法の外側で平等という一面的な正義を追求するハンターと、法学徒としてバランスの取れた正義の追い求めるバロットの視座の違いが明示されて面白くなってきた。

20220223

Date: 2022-02-23
Last Edited: 2022-02-23 10:11:00

こちらの件、なんとかなっていなかった。

20220206 / Cartesian Theater
Yuki Oshima's diary powered by Notion API
https://diary.unronritaro.net/post/20220206
20220206 / Cartesian Theater

具体的には修正前と同様にレンダリング時にエラーが出ていた。ログを適宜出しながらよくよく見ていくとやはりOGP用のメタタグ取得タイミングでエラーになっている。

というのも、以下の箇所でPromise.race()を使ってタイムアウトを実装したのは良いものの、

async function timeout(msec: number) {
    return new Promise((_, reject) => setTimeout(reject, msec))
}

const getOgpPromises = []
for (const post of posts) {
    const promise = fetch(post.content.link, { redirect: 'follow' })
                        .then((res) => res.text())
                        .then((text) => {
                            const { document } = new JSDOM(text).window;
                            // メタタグ取得処理
                        });
    getOgpPromises.push(Promise.race([
        promise, 
        timeout(8000 - moment().diff(startMoment))
    ]));
}

それを解決する以下の箇所のエラーハンドリングをしていなかった。

await Promise.all(getOgpPromises);

すると例えばある一つのサイトのメタタグを取得する際にタイムアウトしてPromiseをreject()すると、このPromise.all()からエラーが投げられてレンダリング処理全体が失敗してしまう。

以下のようにエラーを握りつぶしてみた。特定のサイトのOGP用のメタタグが取得できなかったからといって、全体の処理には影響がない。

try {
    await Promise.all(getOgpPromises);
} catch {

}
https://github.com/yuki-oshima-revenant/notion-blog/blob/9a407f38292487bb65c32535c37b88676a5a1f7e/lib/util/notion.ts#L159

これにてISR時にレンダリング処理が失敗して更新できなくなる不具合は解消された(はず)。またビルド時にも同様のエラーが発生するのでこの修正をしない状態だとデプロイすらできなくて悲しかった。

ちなみに、ISR時にエラーが発生すると前回のレンダリング内容が表示され、また次回のレンダリング時に再トライしてくれる。ランタイムエラーになるのでハンドリングしなくていいのかと思いつつも公式のドキュメントにエラーになった場合の記述があるので想定されている様子。というわけでISR時のエラーは、リトライで解消される可能性があるならランタイムに投げてしまってOKという解釈になった。

https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration#error-handling-and-revalidation

20220213

Date: 2022-02-12
Last Edited: 2022-02-12 16:53:00

安野貴博『サーキット・スイッチャー』読んだ。第9回ハヤカワSFコンテスト優秀賞受賞作。

https://honto.jp/netstore/pd-book_31330041.html

非常に構成の優れたSFサスペンス/ミステリーだった。登場人物や設定のすべてに無駄がなくて感動してしまった。

自動運転が普及した世界で交通事故が不可避的に発生するとき、アルゴリズムによって命の選別が行われることになる。こうしたトロッコ問題的状況をテーマにして技術と人命、確率と運命、そしてこうした技術を利用した社会の在り方といった問題が描かれていく。問題の扱い方や物語への落とし込み方も上手いし、描かれる社会像も非常に面白かった。とても新人作家とは思えない出来栄え。読み終えてから改めてタイトルをみて膝を打つ仕掛けも見事。

作者が現役プログラマーなのでソフトエンジニアリング用語がもりもり出てくる。同業を始めてからそうした用語をすらすら理解できるようになったのは利点だと思う。この本以外でもこうした場面がたまにあるのでSF読みとソフトウェアエンジニアはシナジーがある。

20220206

Date: 2022-02-06
Last Edited: 2022-02-06 08:07:00

以下のようなリンクの埋め込み表示を追加したら、CMSに使っているNotion上でページを更新してもサイト上に反映されないことがあった。

https://flightfacilities.bandcamp.com/album/heavy-feat-your-smith-remixes

Vercelのログを見に行くとNext.jsのサーバサイドレンダリング処理でタイムアウトが発生している。無料版のVercelはサーバレス関数の処理時間に制限がある。(ドキュメントを見ると5秒と書いてあるけど自分の環境では10秒だった。謎)

https://vercel.com/docs/concepts/limits/overview

サーバサイドレンダリングに失敗するとページは更新されない。ただしISRにしているので前回のレンダリング結果である更新前のページが表示される。

原因としては、リンク先からOGP画像のリンクなどを取得する処理でHTTP通信とHTMLのパースに時間がかかっているようだ。リンク先によっては応答が遅い場合があるので、全体の処理を制限時間内に間に合わせるにはそうしたリンクに対する処理は適度なところで切り上げる必要がある。

以下の記事を参考にPromise.race()を使って処理をタイムアウトさせる機構を追加した。

http://var.blog.jp/archives/77441509.html

次のような、引数に与えた時間を過ぎたらrejectされるPromiseを返す関数を用意しておく。

async function timeout(msec: number) {
    return new Promise((_, reject) => setTimeout(reject, msec))
}

メタタグを取得する処理で、ページにある各リンクにリクエストを送ってパースする処理を非同期で実行している。Promiseの配列を作ってPromise.all()で待っているので、その配列に入れるPromiseをPromise.race()と上の関数を使ってタイムアウトするようにしておく。(startMomentはNext.jsのgetStaticProps()を開始したタイミング。10秒制限から計算して適当に8秒以上経過していたらタイムアウトにする)

const getOgpPromises = []
for (const post of posts) {
    const promise = fetch(post.content.link, { redirect: 'follow' })
                        .then((res) => res.text())
                        .then((text) => {
                            const { document } = new JSDOM(text).window;
                            // メタタグ取得処理
                        });
    getOgpPromises.push(Promise.race([
        promise, 
        timeout(8000 - moment().diff(startMoment))
    ]));
}
await Promise.all(getOgpPromises);
https://github.com/yuki-oshima-revenant/notion-blog/blob/main/lib/util/notion.ts

これにてひとまずタイムアウトはせず、ページが更新されるようになった。

20220131

Date: 2022-01-31
Last Edited: 2022-01-31 16:45:00

人間六度『スター・シェイカー』読んだ。

https://honto.jp/netstore/pd-book_31330040.html

人類のほとんどがテレポートできるようになったものの、普通にやって他の人にぶつかると大変なのであえて制限しているという設定が面白かった。選評にもあるとおり展開の勢いがすごいのでページターナーであった。

最近大賞の出ていなかったハヤカワSFコンテストの久しぶりの大賞とのこと。直近の受賞作だと樋口恭介の『構造素子』は読んだ覚えがある。

こういう新人賞の作品はやりたいことが詰め込まれていて夢がある。しかしSFコンテストを受賞してその後コンスタントに作品を出している人は少ない気がした。柴田勝家や小川哲くらいだろうか?何事も継続が一番大事で、一番難しいんだろうなぁ。

©︎2021 Yuki Oshima