モニクル Advent Calendar 2023 の16日目の記事です.
技術ネタ他のアドカレ(主にWebAssembly関連など)でやるので, ここでは今年何してたかを振り返りたいと思います.
今年の始まり
何をやっていたのかなと思ってTwitterの投稿を漁ってみると,今年は去年の12月に発売されたリマスター版魔法使いの夜をクリアしたところから始まっていました.
魔法使いの夜というのは,TYPE-MOONが出しているノベルゲームで,2012年に PC版が発売されています. リマスター版では,解像度がFHDに対応し,フルボイス化されており, 10年前にプレイしたことはあるものの,細かいストーリーを全然覚えていなかったので,初めてやる気持ちで楽しめた覚えがあります.
個人的にはFateシリーズよりも好きな作品で, 映像化も予定されているとのことなので今後も楽しみですね.
1月〜3月
この頃はRustで簡単なプログラム組んでみようというのをやっていた時期で, リバーシを作ったり,テトリスを作ったりしていました.
これらはベースとなる処理をRustで実装してWasm化し,UIの描画部分をTypeScript(TS)で実装したものになっています. これは単にRustを書きたかったから,という理由で始めたことだったと思うのですが,この時にWasmに興味を持ったのが同人誌を書くきっかけでもありました.
wasm-pack
Rustは単体でもWasmへビルドすることが可能ですが,多くの場合はwasm-packを利用してWasmを作ることになるかと思います.
WasmはJavaScript(JS)をウェブで使われる第一言語とした時に,第二の言語になるべく仕様の策定が進められているものです. こう聞くとJSと同じ感覚で簡単に使えそうな気がしますが,WasmのファイルはJSの様にウェブ上にロードするだけでは使えません. Wasmを起動するためのスクリプトをJSで書く必要があります.
そのため,wasm-packでは,ビルドした際にJSのグルーコード(起動スクリプト+その他の良い感じなコード)とセットで出力されます. wasm-packはJSのESModuleとして振る舞うコードを出力することを目的としているため,JS と Rustのコードでデータの受け渡しを(いくつかの制限はりますが)透過的に行えるのが魅力です.
このJSのグルーコードが何をやっているのか知りたい,というのが同人誌を書くきっかけで,3月の締め切りギリギリに5月開催の技術書典14に申し込みました.
この頃は仕事が忙しくて,みんなで朝帰りして午後から出社したりというイベントがあったりした中,何を使って同人誌を書こうか色々試行錯誤した時期ででもあり,技術書典14に向けた同人誌制作は一番大変な執筆期間でした.
4月〜6月
4月は前述の通り同人誌をプライベートで書いていました.組版は何を使うのか,章構成をどうするのかなど,全てが初めてのことだったのでとにかく悩みながら同人誌を書き直した時期でした. 今年書いた同人誌はLaTeXを用いて原稿を書き,Git管理するスタイルで作成しました. 来年は時間があれば他の組版も試してみたいところです.
技術書を書く時に難しいなと思うことの1つが,サンプルコードと文章の割合です.正直なところ「本にサンプルコードをたくさん書くのどうなの?」とも思っており,「全体像はGitHubとか見てくれよ〜」にしたい反面「この説明するにはコード見せた方が〜」という葛藤がありました. ここは今後の課題でもあるので,書き慣れるしかないですね.
その他技術書に関係なく,本というのはブログのように気軽に手直しできないので,ブログ以上に情報の真偽を調べたり,ウェブ技術に関しては本が発売されるタイミングにはその情報が古くなっていることが多いため,情報の鮮度など気を使うことは多かったです.
そんなこんなで,5月は技術書典14に初の同人誌(WebAssemblyでできること)を30部刷って持って行ったのですが,午前中で完売してしまい,午後はひたすら電子版を売っていました. これはコミケでk8s本を出していた同期に事前にヒアリングしていたところ,10部売れたと聞いていたので「技術書典の運営が100部程度売れることもある」という情報をあまり信じずに行った結果でもあります.
Wasmは技術的にはニッチな界隈だと思っていたのですが,意外と多くの人が興味を持っているのだなと感じた瞬間でもありました.
また,この頃FlutterKaigi 2023の運営スタッフの募集が行われており,FlutterKaigiのスタッフとしての活動を始めました. Flutter自体は学生の頃に書いていたというのもあり,情報のキャッチアップはたまにやっていたので「何かしら貢献できたらなぁ」という軽い気持ちで始めました(スタッフって結構やることあるんですね😅).
7月〜9月
技術書典14で出した同人誌を商業誌として技術の泉シリーズで出さないか,と声掛けをいただいたのもあり,7月は内容の改訂を行なっていました. 執筆から校正・校閲までを一人で行うのは結構大変だと同人誌を書いた時に痛感したので,校正を知人に手伝ってもらいました.
他にも11月のFlutterKaigiに向けて引き続き裏で動いていましたし,8月頃になかざんさんの「弊社,新潟に新しいオフィス作ったてよ」という旨のツイートをみてカジュアル面談をしてもらったのですが,それがきっかけで転職活動を始めました.
また,9月頃から技術書典15に向けて新しい同人誌を書き始めました.
10〜12月
今年はオフラインイベントが多数復活していたのもあり,「行ってみるかぁ」と軽い気持ちで色々参加しました.
- WebAssemlby night #11 ※9月
- Ebitengine ぷちConf #1 ※9月
- PHPカンファレンス 2023
- Asakusa.go #1 (LT参加)
- Deno Fest
- Rust.Tokyo 2023 (当日スタッフ参加)
- VimConf 2023 Tiny
- FlutterKaigi 2023 (運営スタッフ参加)
- 技術書典15 (サークル参加)
- 技書博9 (サークル参加)
- Workers Tech Talks #2
- Niigata5分Tech #3 (LT参加) ※来週
技術書典と技書博では,新刊ご注文はWASIですか?を出しました. また,技術の泉シリーズより実践入門WebAssemblyが10月に発売されました. 商業誌の内容が気になる人はレビュー記事を出していますので,こちらを呼んでもらえると嬉しいです.
他にもWebAssembly Advent Calendar 2023のページを作ったのですが,1枚目のカレンダーが埋まるなどこちらも多くの人が参加してくれて嬉しい限りです.
総評
生活面での一番の転換は転職だと思うのですが,Wasmから増えた縁や技術コミュニティと関わりを持ったりと転職以外の濃い出来事が多い1年でした.
来年に向けて
2024年は楽しい仕事が多そうなので,キーとなる場面で適切な技術選定出来ると良いなと思っています. そのためにもWasmの情報は引き続きキャッチアップしていきたいですし,wasm-pack
を使ってDeno(TS) + Rustといった開発スタイルも選択肢になり得る場面があるのではないかとも思っています. Wasmはより汎用的な実行基盤としての仕様策定がまだまだ行われている状況ですが,Webでの部分的な利用といった場面ではもう十分実用可能な範囲だと思っています(あとはその判断が適切かどうかだけですね).
プライベートであった人は「こいついつもWasmの話しているな」と思っているかもしれませんが,Wasmに助けられた1年だったので,来年もWasm関連で何かできたらと思っています(Wasmの勉強会とか開催したいですよね).