私が歌川です

@utgwkk が書いている

年末恒例・大sketchリポジトリ棚卸祭

はじめに

これは はてなエンジニア Advent Calendar 2022 6日目の記事です。昨日は id:momochi29 さんで「口癖を自動で検出する手法」でした。口癖って自分ではなかなか気づけないですよね。

tjmtmmnk.hatenablog.com

アプリケーションエンジニアの id:utgwkk です。今年作ったsketchリポジトリについてお話ししようと思います。年末恒例というのはたった今考えました。

sketchリポジトリとは

みなさまは、ちょっとしたコードを書いて実験したくなったことがありますか? 私はそういったとき、GitHubに sketch-yyyymmdd-abcdefg のような日付入りの名前のリポジトリを作って実験に使ったコードをpushしておくことが多いです。そのようにして作られたリポジトリのことをsketchリポジトリと呼ぶことにします。

要するに、書き捨ての実験用のコード置き場のことです。

大放出

今年中 (2022/1/1-2022/12/5) に作ったsketchリポジトリについて振り返り、思い出を語っていこうと思います。

20220313-sketch-docker-compose-python

以下の記事での調査用に作ったリポジトリです。Docker Compose v2を使うとpytestのログ出力が一切行われない、という現象の調査をこのリポジトリで行っていました。癖で docker-compose というコマンドを実行しつづけていたら気づかない不具合というのがおもしろポイントだと思います。

blog.utgw.net

20220324-sketch-css-webfont-unicode-range

以下の記事の検証のために作ったリポジトリです。この記事は前提から実験内容まで丁寧に書いてあってすごいですね。

blog.utgw.net

202204017-sketch-webpack-sourcemap

Webpack (create-react-app) のバージョンアップとそれに伴うsourcemap周りの挙動変化の調査のために作ったリポジトリです。日付部分がtypoしていることにいま気づいた……。

create-react-appのバージョンを上げたら特定のライブラリのsourcemapに関する警告が出るようになった、というのを調査していて、どうやらWebpack周りが怪しそうということでWebpackの設定を手書きしています。

20220606-sketch-graphql-type-emission

relay-compilerが生成するコードとGraphQLクエリの関係について調査するために作ったリポジトリです。話題としては以下の記事が近いと思います。振り返ってみると、1年おきに型生成に関する罠を踏み抜いている感じがしておもしろいですね。

blog.utgw.net

blog.utgw.net

20221024-sketch-node18-fetch-jest

Node.js 18では fetch 関数がデフォルトで使えるようになるけど、フロントエンドのテスト (jsdomの環境下) でも使えるのかどうか、を検証するのに使ったリポジトリです。

結論から言うと、2022/12/5時点では fetch はフロントエンドのテストでは使えないので、ひきつづきモックする必要があります。以下のissueで言及されているように、Node.jsの組み込みの fetch 関数ではない標準規格に準拠した関数をjsdom側で用意する必要がある (のでNode.js 18に上げてもjsdomの環境下で fetch 関数が使えるようにはならない)、というスタンスのようです。

github.com

20221117-sketch-react-modal

react-modalを使ったモーダル内の読み上げテキストがおかしい (意図しない要素が2回読み上げられる)、という問題の調査に使ったリポジトリです。iOSの読み上げコンテンツ機能を使ったときのみ再現するので、iOSのバグでは? という見立てをしています。

おわりに

書き捨てのコードというと、以前はGitHub Gistに上げることが多かったと思いますが、最近はリポジトリを作ってしまうほうが便利なことが多い*1と思います。また、コードを共有しておくと議論がスムーズになるとか再現してもらいやすいということで、どんどんお試しリポジトリが増えていきます。みなさまも、気になることがあったらお試しリポジトリにコードを置いてサクッと試してみてはいかがでしょうか。

明日の担当は id:yigarashi さんです。

*1:CIが動かせる、ディレクトリが作れる、などなど