sosukesuzuki.dev

December, 28 2021

2021 年振り返り

2021 の出来事を振り返ります。

学校

2021 年 4 月で B3 になるはずだったんですが、留年しました。

留年していたらしいということを夏頃に知りました。後輩が教えてくれました。僕が留年したことを教えてくれた後輩たちの顔はすごく楽しそうでした。

いつか留年するつもりではいたので特に悲しい気持ちはなかったんですが、留年したことに気づくことすらできてなかったのはちょっとおもしろいなと思いました。両親も「そりゃそうだよね」みたいな反応をしていました。

筑波大学の留年の仕組みをよく知らないので自分が B3 と名乗るべきなのか B2 と名乗るべきなのかよくわからないんですが、少なくとも卒業までの年数が1年伸びたのは確かなようです。

留年はしたものの、線形代数 A という科目を再々履修で修得することができました。すごく嬉しかったです。色々と教えてくれた同級生、後輩、知りあいのエンジニアの方々、本当にありがとうございました。これはこの一年の中で最も偉大なことでした。

秋に受講した授業の成績がまだ発表されていないのですが、かなりやばそうな雰囲気があります。

仕事

初めてソフトウェアを開発する仕事(アルバイト)をはじめたのが 2017 年の 1 月だったので約 5 年経過したことになります。

現在は二つの会社で業務委託として雇用されています。

Cybozu

サイボウズのフロントエンドエキスパートチームというところで働いています。

2021 年の最初の頃に、kintone というプロダクトのフロントエンドのコードベースに Prettier を導入するという仕事をしました。Prettier を導入するなんて簡単じゃないかと思われるかもしれませんが、実際はかなり長い道のりでした。kintone のフロントエンドは Closure Tools という JavaScript ツールチェインで実装されています。Closure Tools では JavaScript のコメントを使って型を記述して静的な型チェックができるのですが、この機能と Prettier の相性がすこぶる悪かったのです。実際に kintone のコードベースに対して Prettier を実行すると型が壊れるというバグがいくつか見つかりました。自分が入る前にこの問題に色々な方法でアプローチしたそうなのですが、どれも微妙に上手くいかなかったそうです。で、「せっかく Prettier にやたら詳しい人がチームに入ったんだから本体直せばいいやん」ということで、本体にいくつかパッチをあてるのと、それをリリースするための作業を業務時間にやりました。これは普通に楽しかったし、「Closure Tools を使い続けるのはつらいことが多いよ」という点と「OSS メンテナーを会社に抱えてるとこういうところでいいことあるよ」という点で、良い例を示せたかなと思います。

という話をサイボウズの技術ブログに書きました。

大規模 Closure Tools プロジェクトに Prettier を導入するまでの道のり - Cybozu Inside Out | サイボウズエンジニアのブログ

チームでやっているフロントエンドマンスリーという月に一回の配信にも何度か出演しました。自分はだいたい TC39 の動向とかを話していました。自分が情報を収集するきっかけにもなって良かったです。

Cybozu Frontend Monthly

他に外に出てる仕事としてはチームのウェブサイトを作りました。これはもともとハッカソンで作ったんですが完成させて公開しました。チームメンバーの皆さんはいろいろな有益なフロントエンド情報を会社のインターナルな場所に書いているんですが、そのうち結構な割合のものがサイボウズ特有の情報ではなかったので表に出していいじゃんと前から思っていました。なのでこういう場でたくさん発信していけたらいいなと思っています。

サイボウズフロントエンドエキスパートチームのウェブサイトを作りました | サイボウズ フロントエンドエキスパートチーム

Ubie

実は 4 月くらいから気が向いたときに Ubie という会社で働いています。Ubie では昔インターンをやっていたのですが業務委託として戻りました。

Ubie のとあるエンジニアが書いた記事があります。

150 万 MAU の Nuxt.js 製サービスを機能開発を止めずに 1 ヶ月&1 人で Next.js に置き換えた話

この記事の最後の方に出てくる「識者」というのは実は自分です。Ubie のドメイン知識が多少あって、コミュニケーションコストが低くて、フロントエンド周りを見れる、みたいなところで声をかけていただいたようです。記事にあるように、フロントエンドの設計の壁打ち相手になったり、少し手を動かしたりといったお手伝いをしました。

この作業が終わったあとは、フロントエンドのパフォーマンスを改善したり、メンバーの Pull Request を見て気になった箇所を先回りするように ESLint のルールを入れたりとか、ライブラリのバージョンあげたりそういう細々したことをやらせてもらっています。

Ubie のインターンをやめてから仕事では現代的なフロントエンド開発をほとんどしていませんでした。なのでそういうのに触れる機会としてはかなり良かったと思います。

OSS

9 月頃に GitHub Sponsors を始めたところ想像していた以上に多くの人から支援していただけたことが印象に残っています。

Prettier

今まで通りバグ修正とか機能追加みたいなコードを書く仕事や、Issue の管理や PR のレビューみたいな作業をずっとやっています。

あと actionlint を Prettier で使いたかったので Go で書かれた actionlint を WebAssembly にコンパイルして Node.js から実行できる node-actionlint というツールを作りました。まあまあ便利なんですが Node.js と WebAssembly をかませる分速度的なオーバーヘッドがすごいので、ローカルで実行するときは本家 actionlint を使ってます。

今年のバージョンのほとんどでリリースを担当しました。リリースはやることが多いので面倒だし緊張するのであんまりやりたくないのですが、自分がやらないと一生 Prettier がリリースされなさそうで、それは困るのでやることにしました。リリースに関連して、prettier-regression-testing という自作のツールを TypeScript で書き直して GitHub の Prettier オーガナイゼーションに移管しました。

去年に比べて明確に他のメンテナーとのコミュニケーションが増えました。Prettier はインターナルな Discord サーバーがあってそこでアクティブでないメンテナーも集まって話をすることがあります。英語でのチャットは以前はすごい苦手だったんですが、最近ちょっとずつ慣れてきました。

OpenCollective で集めたお金をどう使おうか、というのをずっと上手く話せずにいたんですが、ちょっと頑張ってやっとまとまったので近いうちにブログを書きます。

新しいメンテナーを推薦して招待するとかそういう活動もしていました。いろんな Podcast や登壇で「Prettier には人が足りなくて〜〜」みたいな話をするのもいい加減飽きてきた感じがあるので人を増やそうと思ったのです。アクティブに活動してくいれているコントリビューターを他のメンテナーに推薦して合意がとれたら勧誘して、みたいなことをしてました。

2021 年は約 100 個の Pull Request を出しました。

Babel

リポジトリのライト権限をもらいました。今の所権限を使ったことはほとんどありません。

月に数回程度 Pull Request を投げています。たまにレビューとかもやっています。

Babel でやった最も大きな仕事は、パーサーの構文エラーにエラーコードの概念を導入したことです。Prettier で Babel のパーサーを使うときに復帰したい構文エラーと復帰したくない構文エラーがあるんですが、今まではその判定をエラーメッセージに対する正規表現マッチングでやっていました。これだと Babel 側がエラーメッセージをちょっと修正しただけで Prettier の挙動に影響が出るのでエラーコードを導入してそれを使ってエラーから復帰するかどうかの判定をするように変更しました。

https://github.com/babel/babel/pull/13033

2021 年は約 40 個 Pull Request を出していて、3 番目に多いみたいです。お金をもらっていないメンバーの中では 1 番でした。

typescript-eslint

typescript-eslint のメンテナーは忙しそうなので助ける意味もこめて TypeScript の新しいバージョンがリリースされたときにはその対応をやっています。

あと普通に自分がほしいルールを実装しました。

2021 年は約 20 個 Pull Request を出しました。

SWC

Rust への入門として SWC への貢献をちょっとずつやっています。Babel に比べてまだまだバギーなので貢献するべきところがたくさんあって楽しいです。

ただ貢献するために求められる Rust 力はそんなに高くないので、Rust の練習としては微妙だったかもしれません。

最初の頃はパーサーのバグ修正や機能追加をやっていました。普通の再帰下降構文解析で実装されているので、Rust のことがわからなくてもある程度雰囲気で書けました。

最近はトランスフォーマーの実装をやっています。SWC のトランスフォーマーは Babel に比べるとかなり難しいです。パーサーを修正することに比べると Rust の知識が必要だし、何よりトランスフォーマーを書くための内部 crate のドキュメントがほとんどありません。なので既存のトランスフォーマーのコードを読んで、自分でコードをたくさん書いて修得するしかありませんでした。楽しかったです。

余談ですが SWC のドキュメントには JavaScript でプラグインが書けるっぽいことが書いてあるんですが、これは v2 でなくなるようです。SWC で現在計画されているプラグインシステムではユーザーが Rust を使ってトランスフォーマーを書く必要があります(パフォーマンス上の懸念から JavaScript プラグインは今のところ計画されていません)。

SWC が今後 Babel を置き換えていこうとするならここがネックになるような気がします。Babel プラグインは公式が便利なヘルパーを提供している上にドキュメントが豊富です。しかも多くの Babel ユーザーが得意であろう JavaScript で書けます。一方で SWC の場合は言語が Rust な上に今のところ便利なヘルパーはほとんどなくトランスフォーマーのドキュメントもない状態です。このあたりを変えていく必要があります。

とりあえず JavaScript ツールをよく触るエンジニアは Rust の勉強を少ししておいた方が後々楽かもしれません。

2021 年は約 20 個 Pull Request を出しました。

イベント等

いくつかのイベントや Podcast に出演させていただきました。楽しかったです。

mozaic.fm

mozaic.fm という Podcast に 2 回出演させてもらいました。

一回目は「TC39」というテーマでしたが、あんまり TC39 の話は出来なかった気がしていて、ちょっと後悔しています。今ならもう少し TC39 っぽい話ができそうだなと思います。

ep78 TC39 | mozaic.fm

二回目は Monthly Web です。JavaScript っぽいことをちょっと話しました。

ep82 Monthly Web 202104 | mozaic.fm

Web24

Web24 という、24 時間 Web について議論し続けるというイベントに参加しました。このイベントでは、時間ごとにテーマとメンバーが変わるのですが、自分は Frontend Tooling というテーマで話しました。結構おもしろい話ができたんじゃないかと思います。アーカイブは残ってないので何を話したのか今となってはわからないのですが。

Web24 - connpass

東京 Node 学園 36 時限目

東京 Node 学園 36 時限目で、「Prettier に従わなくてもよい場合」という発表をしました。「Prettier に脳死で従うべき」みたいな話を見るたびに「必ずしもそうではなくない?」と思っていたので、OSS 仕草の話をあわせて Prettier との向き合い方みたいな話をしました。

Node学園 36時限目 オンライン - connpass

UIT INSIDE ep. 100

LINE の UIT INSIDE の ep. 100 に出演しました。過去の出演者たちが出演するやつらしくて、自分は前に Podcast に出演させてもらったので、声をかけていただきました。OSS をテーマに話しました。

UIT INSIDE ep.100『100回記念8時間生放送』 - connpass

JSConf JP 2021

JSConf JP 2021 で、最初の基調講演をさせていただきました。ここ二年間くらい JavaScript の OSS に深く関わってきて、色々思うことをちまちまと発信はしていたのですが、ちょっとまとめて話したいなと思ったので CFP を応募しました。海外の OSS メンテナーたちにインタビューしたりして、自分も楽しくやれたので良かったです。30分の登壇をするのは初めてでしかも基調講演なのでちょっと緊張しましたが何事もなくやれました。

JSConf JP

ブログ

https://sosukesuzuki.dev には 9 個書きました。TC39 の気になるプロポーザルを見つけたときに詳細を書くのが多かったです。何回かやっていると仕様を読むのに慣れてきてどんどん楽しくなっていきました。

https://zenn.dev/sosukesuzuki には 17 個書きました。こちらはほとんどメモみたいな記事ばかりです。いくつかメモよりもう少し詳しいくらいの記事があります。メモが意外と伸びてびっくりしました。

仕事で作った会社のブログ https://cybozu.github.io/frontend-expert にも 3 本くらい書きました。

ブログを書くことを重視しているわけではないですが、文章を書くのは好きなのでこれからも思いついたときに雑に書きます。せっかく会社のチームのウェブサイトを作ったので、そっちでもいっぱい書こうと思います。

その他

自動車教習所

2020 年の 6 月くらいから自動車教習所に通っていました。しかし、ずっとサボっていたら期限が切れてしまったので免許をとることはできず退校しました。あまりにサボっていたので半額返ってきました。でも車を運転したいので次の春に後輩と一緒に合宿免許にいきます。諦めない心が大事だと思います。

読書

何冊か技術書を読みました。数えてみたら月に 0.7 冊くらいは読んでいたみたいです。中でも次の3つの本は今の自分にとってすごくおもしろかったです。

まとめ

「周囲の人間はよく頑張っていてすげーなーまあおれはのんびり適当に生きるけどね」みたいな気持ちでずっといた一年でした。

個人的には本当になんにもやっていない感覚があったので振り返ってみて実は色々とやっていたことを知ってびっくりしました。(留年と教習所期限切れのダブルパンチでプラマイゼロどころかマイナスみたいな感じではありますが)

とは言ってもやっていることの内容は去年の延長みたいな感じで新しいことはほとんどできていませんでした。なので来年は何か新しいことに挑戦したいです。

しかしまずは進級と免許です。