2021年の振り返り
もともとは自分がやってきたことを整理して公開しようと思っていたが、いざ整理してみると本当に大して語るようなことがないと気づいたので、いっそのこと時系列に沿った雑記スタイルで記録しておくことにする。
引っ越し
2021年の年明け早々に僕たちは引っ越しをした。大濠公園の近くに新築(建ってすぐに入居するタイプ)されたマンションに引っ越したのだ。大通り沿いなので少し騒がしいが、ここの環境にはとても満足している。自分専用の小部屋ができたことで、仕事をするにも動画を撮るにも、以前よりクオリティが格段に上がった。 ふとした拍子に引っ越しを振り返ると、台湾での部屋探しは運任せだが、日本なら少し本気で探せばいくらでも見つかるし、数年経てば近所に家賃もそこそこで引っ越しを待っているかのような新築物件が次々と建つことに感嘆してしまう。自分への新しい環境づくりとしてキーボードもHHKBに買い替えたのだが、一度使ってしまったらもう元には戻れなくなった。
年初
2021年の初め頃は、工業高校時代にしっかり勉強しきれなかった心残りの数々を研究していた。AVRプログラミングを通じて、低レイヤーのI2CやSPI通信プロトコル、EEPROMの書き込み、ADC、GPIO、ハードウェア割り込みなど多くのことを学び、ファームウェア周りで押さえておくべき知識を一通り身につけることができた。 Arduinoを使わなかった理由は単純で、ソフトウェアエンジニアとして他人の作ったライブラリを適当に当てはめたり、誰かが書いたコードを少し修正したりするだけでは、自分の勉強にはほとんど役に立たないからだ。 その後、AVRは徐々に衰退しており、実質的にArduinoだけが支えている状態であることに気づいた。AVRに比べるとSTM32はずっと使いやすく、価格も性能も優れていて消費電力も低い。開発ボードとIDEを組み合わせれば、オンボードデバッグやブレークポイントの設定すら直接でき、AVRより確かにずっと快適だ。
実際にSTM32に触れてみると、コードを書くときはみんなSTM32CubeIDEを使っていることがわかった。機能は非常に豊富だが、コードを書く体験としてはかなり不便で、特にVS Codeに慣れているとあのIDEはあまりにもストレスが溜まる。組み込みエンジニアはみんなこんなツールでコードを書いているのだろうか? 逆に8bitのAVRなら、avr-gccさえあればmain.cを開くだけで小さな世界が広がり、STM32に比べれば参入障壁の低さという強みがある。AVRのチップはとても安価で、DIPピンに対応しているものも多く、ブレッドボードに挿すだけですぐに使い始められる。
仕事面では新機能の開発があり、当時は僕ともう1人の同僚しかいなかったため、スケジュールはかなりタイトだった。ほぼ毎日、要件定義、開発、QA対応の無限ループの中で過ごし、かなり充実した時期だった。 しかも全く新しいSSRサーバー(Next.jsを採用)を立ち上げる必要があったのだが、大企業でサーバーを1台立てるには考慮すべきことが山のようにあり、フローも非常に複雑だった。運用チームがAWXから操作できるように自動化しなければならず、リリース基準を満たせなければ延期するしかない状況だった。
途中で判明した要件だったため、サーバーの構築、nginxの設定、Playbookの設定、Docker、部門間コミュニケーション、ドキュメント作成、事業部への提案、自動デプロイ、実際の機能実装まで、これらすべてを僕1人で実装した。それと同時にQAチケットも消化しなければならず、正直なところあの時期は精神的なプレッシャーが大きく、約1ヶ月ほど残業が続き、進捗を合わせるために休日出勤した日すらあった。 あの時期はどの部門も本当に忙しく、サーバー構築に必要な知識もフロントエンドとは異なっていたため、チーム内に手伝える人はいなかった。だが、もう1人のチームメンバーが積極的に他のQAチケットを巻き取ってカバーしてくれたので、彼には本当に感謝している。また、当時の上司も余計な口出しをせず、休日出勤を聞いたときは少し心配してくれたものの、すぐに会社側と調整をつけてくれたことにもとても感謝している。
ここで強調しておきたいが、会社は休日出勤をまったく望んでおらず、もし発生した場合は理由を説明しなければならない。事後には休日出勤した分を平日の振替休日(有給休暇ではない)として消化することを求められるため、感覚としては平日の休みを1日前借りして休日に進捗を稼いでいるようなものだ。
今振り返ってみれば良い結果を出すことができ、最終的には期日内に無事リリースできた。他のプロジェクトの新ページ開発もnext.jsで書けるようになり(以前はejs+純粋な静的ファイルだった)、SSRと組み合わせることでできることが大幅に増えた。また、SSR導入のおかげでSEOの実装も従来より格段に便利になり、ld-jsonも格段に書きやすくなった。
この時期、「自分からこだわりを持って押し通さなければ何も得られないことがある」と痛感した。サーバーを立てること自体は簡単そうに見えるが、組織において、インテグレーションは思いつきのアイデアよりも遥かに重要だ。そしてインテグレーションを行う上で最も重要なのは、流行りのイケてるフレームワーク技術を導入することでも、口先だけで上手にコードを語ることでもなく、地に足をつけて一つひとつのプロセスをしっかりやり切ることなのだ。
ちょうどこの時期は『モンスターハンターライズ』の発売時期でもあったため、時間の流れが非常に早かった。仕事中は必死に進捗を追いかけ、退勤後はモンスターを狩って鬱憤を晴らす日々だった。最初は格好をつけて太刀を使おうとしたが、楽しく遊ぶならヘビィボウガンやライトボウガンを持って脳死で撃ちまくるのが一番だと気づいた。
また、彼女が意外にも収集系のクエストや水没林での金策周回が大好きだと判明した。メダルや勲章、サブクエストの類を全部クリアしたがるので、僕が仕事をしている間は彼女が各種サブクエストをクリアしてくれ、退勤後の僕はご機嫌で装備や武器を強化していた。このモンハンは本当に楽しかった。音楽、フィールド、装備のすべてが和風で魅力的なだけでなく、前職の同僚のコミュニティに思いがけず加わって時々マルチプレイをするようになり、スランプ気味だった僕の心を救ってくれた。
MPEG-TSとaribb24字幕
謙謙のツイートを見かけて、手元にRaspberry Piがあるのだから、テレビの信号を受信してPCでテレビが見られるのではないかと考えた。後から知ったのだが、TVチューナーは「TS抜き」ができるものを買わなければならず、そうでないものを買うと専用ソフトウェアでしか見られないらしい。
日本のテレビ信号はMPEG-TSで、日本には電波産業会が策定したISDBという独自のテレビ放送規格がある。そういえば日本には不思議な放送法というものがあって、家にテレビがあればNHKにお金を払わなければならない法律なのだが、払わなくても見ることはできる。 すでに最高裁で合憲と判断されており、未だに日本というこのミステリアスな国の仕組みを完全には理解できずにいる。
話が逸れたが、日本のテレビ番組では字幕を表示することができ、ひらがなのルビ付け、色指定、外字、位置設定などが可能で、これらはすべてARIB STD-B24規格によって定義されている。
好奇心から、僕もRaspberry Pi上でTVチューナーを使ってMPEG-TS信号を取得することに成功し、JavaScriptを使って簡単な字幕パース処理を作成してみた。かなり簡易的なものだが、仕様書を読み解く過程で、これらを黙々と実装してきた先人たちはいかに偉大であるかを実感した。特に謙謙のコードを見たときは、あまりの凄さに圧倒された。
本の執筆
先ほど挙げたこと以外で言えば、次は本の執筆だ。一昨年のアイアンマンレース(iT邦幫忙鐵人賽)でSvelteに関する一連の動画を投稿して佳作を受賞したのだが、同僚に意見を聞いたところ、本を出すのは貴重な機会だから挑戦してみるべきだと言われ、一度やってみようと思った。他の部門の参加者とは異なり、僕は動画部門だったため、それを文章に書き起こすのにかなりの時間がかかり、終盤の原稿の締め切りラッシュには頭を抱えることになった。
Svelteは他のフロントエンドフレームワークに比べると台湾ではまだマイナーだが、書き心地が非常に快適だと感じているため、ニッチな市場であってもリソースを残しておきたかった。 この本のかなりの部分は実際のUI開発における応用に割いており、アクセシビリティの実装や解説にも多く触れ、後半にはテストやSvelteKitも追加してSSRに関する内容も補完した。原稿料については事前に高額にはならないと知っていたものの、実際に口座に振り込まれた金額を見たときは、やはり「本当に少ないな」とため息が出た。
僕個人としては、この本の最大の価値はUI実践編にあると思っており、開発者のこの分野への理解に役立つことを願っている。 また、元同僚であり上司でもあったEasonとKaiには心から感謝している。彼らは親身になって原稿をチェックしてくれ、誤字や間違いをたくさん見つけてくれただけでなく、より良い書き方や提案をくれたおかげで、本書の品質を大きく向上させることができた。書き終えて一番痛感した教訓は、プログラミング関連の文章を書くのに二度とWordは使わないということだ。あの体験はあまりにも酷く、PDFに変換するたびに意味不明なレイアウト崩れが起きる。次にチャンスがあれば、先に組版ツールをしっかり整備してから執筆に臨みたい。
興味があれば、ぜひ動画での実践編も見てほしい。僕個人としては、動画の実装の方がより参考価値が高く、UIコンポーネントがゼロからどのように開発されていくかを肌で体感できると思う。最後の10日間にはSvelteの背後にある原理と簡易的な実装についての解説もあり、仕組みに興味があるエンジニアなら何かしら得られるものがあるはずだ。
自作キーボード
HHKBを使ってから、こうした静電容量無接点方式キーボードの仕組みや、自分で実装できるのかどうかに興味を持ち始めた。思いがけず、日本ではこの手のキーボードを自作している人がかなり多く、関連する材料や部品まで手に入ることがわかり、改めて「日本にいて良かった」という感情が湧き上がった。高校時代にすでにハンダ付け地獄を味わっていたため、僕にとって「基板を買って、ハンダ付けして、部品を組み立てる」だけでは自作キーボードとは呼べない(注:これは自分自身に対する基準であって、他人に押し付けるつもりはない)。
それがきっかけで、また新たな旅が始まるとは誰が想像しただろうか。3Dプリンターを買い、PCB設計の配線を学び、回路を設計し始めた。PCB設計以外はほぼ高校時代に学んだ範囲だったのでそこまで難しくはなかったが、PCB設計には実に多くのノウハウがあった。特にこのような静電容量を感知する高周波回路では、いかにノイズを抑えるかが極めて重要な課題であり、これは高校時代にはほとんど触れなかった領域だ。しかし、発注コストがあまりにも高すぎる。中国への発注は送料だけで2000円以上かかり、完成品が手元に届くまで1週間以上待たされるため、サイクルが恐ろしく長い。そのため、まずはブレッドボードで実験し、自信がついてから再挑戦したいと考えている。この期間中、USBの内部動作(USB規格は本当に複雑怪奇だ)、PID制御理論、FIRフィルタなど、ハードウェア関連の知識をさらに補い、Raspberry Pi PicoとPIOも一通り触ってみた。結局あれこれと遠回りをして、自作キーボードのPCB自体は手元にあるものの、未だに完成していない。今年中には何かしらの成果をみんなにお見せできればと思っている(あまり期待しないでほしい)。
大村湾とハウステンボス
7月に再び大村湾とハウステンボスを訪れた。大村湾の雰囲気が本当に好きだ。「おおかみ食堂」で日替わりカレーを食べ、プラットホームの目の前に広がる大村湾を眺める時間は、人生のやりたいことリストに入れておくべき体験だと思う。
小倉と門司港
一時期『BEASTARS』にかなりハマっていた。僕は主人公のレゴシが本当に好きだ。あの優しさ、陰ながらの尽力、自分をより強く鍛え上げていくプロセスを見ていると、時々あれこそが僕のなりたい理想像なのではないかと思う。いつか自分もあの境地に達したい。当時、作者が小倉で原画展を開催していると知り、地の利を生かして駆けつけた。
SwiftUIとBluetooth
2021年の社内ハッカソンで、僕は「自分の知らない分野に挑戦し、アプリケーションを作り上げること」をテーマに掲げた。当時SwiftUIに詳しくなく、Bluetoothの扱い方も知らなかったため、Bluetoothを搭載したArduinoのポモドーロタイマーを作り、PCとArduinoをBluetooth経由で通信させることにした。より統合感を高めるために、ステータスバー、通知、カウントダウンUIを追加し、ハードウェア側(Arduino)にはLEDマトリクスとブザーを使用した。機能をもう少しブラッシュアップすればかなり実用的だと思うし、少なくとも僕自身は使いたい。ソフトウェア単体のポモドーロアプリはすでに世に溢れかえっているが、ハードウェアとBluetoothの連携を組み合わせることで、ユーザーの注意の切り替えをうまくサポートできる。出来栄えはそこまで理想的ではなかったが、目標は達成できたと言える。
ハッカソンということもあり、実装はツギハギだらけで「動けばいい」レベルのものだ。特筆すべき点としては、カウントダウン機能をArduino側で実装し、タイマー割り込みの使い方を学べたことだ。ただ、後から考えると、カウントダウン機能はソフトウェア側で処理し、Arduino側は表示と通知だけに専念させた方が良かったかもしれない。
書いてみた感想として、SwiftUIは本当にReactによく似ている。フロントエンドに慣れている人なら、かなりとっつきやすいはずだ。詳細はフロントエンド視点から見るSwiftUIを参照してほしい。
ワイヤレスイヤホン WF-1000XM4
Sonyが6月頃にWF-1000XM4を発売した。見た目がとても格好良く、ノイズキャンセリング機能もついていたので即座に購入した。実際に使ってみても非常に満足しており、ノイキャンモードに入ると外の音が完全に遮断され、自分だけの小さな世界に没頭できる。
ところが今年の初め、誤って洗濯機に入れてしまい、片方のイヤホンの音が変になってしまった。泣く泣く中古で売却し、再度購入する羽目になった。幸いAmazonでちょうどセールをやっていて安く買えたので、大損とまではいかずに済んだ。
Lex Podcast
これはYouTubeで偶然見つけたポッドキャストなのだが、一度見てみたらとんでもない内容だった。MITの教授が名だたるテクノロジー界の著名人にインタビューして回るポッドキャストで、個人的には非常に技術的密度の高い番組だと感じている。インタビューされているのは以下のような面々だ。
- Swiftの開発者 Chris Lattner
- comma.ai 創業者 Geohot
- C++の開発者 Bjarne Stroustrup
- 3Blue1Brown チャンネルの創設者 Grant Sanderson
- 『The Art of Computer Programming』の著者 Donald Knuth
- チップの神様 Jim Keller
ソフトウェア業界全体を支え、テクノロジーの進歩を牽引してきた人々の対談を生で聞くことができ、しかもそれほどまでに深みのある内容であるというのは、実に幸せなことだ。僕の視野を大いに広げてくれた。
その後、何かが吹っ切れたような気もした。自分は純粋に技術が好きな人間なのだから、一般受けしやすいジェネラルな話題を無理に書く必要はないのだ。フーリエ変換や逆行列が好きで何が悪い、ニッチなオタクで市場がないからといって劣等感を抱く必要などないのだと。
配信とTuring Complete
2021年も、自分に合ったYouTubeの運営方針を見つけることはできなかった。誰かどうすればいいのか教えてほしいくらいだ(泣)。それでも動画は細々とアップロードし続けており、再生数を見る限り評価されているとは言えないものの、動画という形で自分の人生の特定の瞬間を記録できるだけでも、良いことのひとつだと思っている。
また、『Turing Complete』というゲームの生配信も行った。論理ゲートから小さなコンピュータを作り上げていくゲームで、まるで『nand2tetris』のゲーム版のような感覚だ。事前の知識がまったくない初心者にはかなり難しいはずで、作者がもう少し簡略化し、チュートリアルに工夫を凝らせばもっと面白くなると思う。
JSDC2021とModernWeb’21
今年は2つのカンファレンスで登壇し、どちらもSvelteについて話した。興味があればぜひチェックしてみてほしい。振り返ってみれば、昔の自分はいろいろなカンファレンスに参加してばかりの「テイカー」の段階だった。経験を積むにつれて情報への焦燥感のようなものは薄れ、他人に自分の経験を共有できるようになってきた。こうした自分自身の心境の変化を自覚できたのは、僕にとってなかなか感慨深いことだった。
線形代数の学び直し
なぜだか線形代数をもう一度学び直していた。『数値の常識』という本を読んだことで、線形代数への情熱が再び燃え上がったらしい。この本の中に非常に印象深い「さよなら逆行列」という章がある。その内容は主に、やりたいことの大部分はLU分解で解決できるということであり、逆行列は直感的ではあるものの計算量が膨大すぎるという話だ。僕はこうした実際に応用できる数学、すなわち「数値解析」という領域がとても好きだ。ただ、自分で研究するよりは他人の話を聞いている方が好きだ。さもないと数値解析は過酷すぎる。この領域を深く掘り下げられる人は本当にすごい。あとは定番の特異値分解も、見るたびに新しい発見がある。最近は信号解析への興味から、もう一度フーリエ変換を学び直した。
WebGL
再びWebGLに触った理由は、行列演算の簡単な可視化ツールを作り、行列の掛け算の概念を直感的に感じられるようにしたかったからだ。しかし結局それ以上の進展はなく、むしろ1本の線を描画する方法を研究するだけで大量の時間を費やしてしまった。今思い出しても本当に間抜けだったと思う。
台湾への帰国
銀行の手続きやローンのため、さらにネットバンキングのパスワードを忘れてロックされてしまい、國泰世華銀行がICカードのサポートを停止したことも重なって、やむを得ず大金を払って台湾へ戻り手続きをすることになった。往復の航空券と隔離ホテルの費用を合わせると、10万台湾ドル近くかかった。約2年ぶりの台湾帰国だった。感染症が始まった当初はすぐに収まってすぐに帰れるだろうと甘く見ていたが、まさか丸2年も待つことになるとは思わなかったし、今になってもまだ収束していない。
台湾に戻っていた数週間は、目にする人や出来事のすべてが心に染み入るほど感動的だった。周りを取り囲むのは聞き慣れた言語と看板で、通りすがりの人々の会話を聞くだけでも好奇心が刺激された。適当に入ったローカルな飲食店は言葉を失うほど美味しく、物価は信じられないほど安い。
長年日本の物価に慣れていた僕にとって、価値観が崩壊するような感覚だった。美味しいものがこんなに安くていいのかと。隔離ホテルで出された朝食のある日のメニューが、昔ながらのおにぎり(もち米で包むタイプのもの)だったのだが、一口食べた瞬間に涙が出そうになるほど感動したのを今でも覚えている。海外での生活を経験して初めて、僕を育ててくれた台湾というこの土地には、羨むべき素晴らしい点がたくさんあることに気づかされた。早く感染症が収束し、隔離政策が一刻も早く解除され、心から安心できる台湾にいつでも帰れるようになってほしいと願うばかりだ。
MPK mini
数年前にRoland FA-07を購入していたのだが、本体サイズがかなり巨大で、家にはもう置くスペースがなかった。日本に引っ越してからはほとんど弾いておらず、解決策が見つかるはずだと自分に言い聞かせながら引き延ばして2年が経っていたため、年初に中古で手放した。 それを売った後、MPK miniというMIDIキーボードを購入した。8000円ちょっとで買える一台だ。25鍵しかなく、FA-07ほど機能が豊富なわけでもないが、圧倒的に小型でデスクの上に直接置け、PCに挿すだけですぐに簡単なトラックメイクができる。以前に比べると格段に気軽になった。
結び
日本の福岡に来て、今年で早くも3年目になる。時間は想像以上に早く過ぎ去り、ここでの生活にもすっかり慣れてきた。 僕は今の生活様式とペースがかなり気に入っているが、同時に2021年の自分はまるで首のないハエのようにあちこち飛び回り、どの分野にも少しずつ手を出しては中途半端にかじっただけで終わってしまったようにも感じている。視野を広げる上では大いに役立ったものの、もっと深いレベルでの成長を遂げたい。だからこそ今年の自分への課題として、自分が本当にやりたいことに集中し、実際に形のある成果を出すことを目指したい。正直なところ、このような自分に対して少し苦しさを感じてもいる。多くのことに挑戦してみたいと思いながらも、得失に囚われてしまう自分を恐れ、全力を注いだのにそれに見合うリターンが得られないことを怖がっているのだ。ああ、人生は実に難しい。
これらの雑多な経験が、何かしらあなたの役に立てば幸いだ。僕と連絡を取りたい場合は、Twitterまたはメールで見つけてほしい。
関連記事
- 2025年の振り返り 2024年に自分に課した願いは、2025年にはもう会社員に戻らず、自分で生計を立てられるようになることだった。この目標は達成できなかったものの、2025年は僕自身、最も成長できた一年の一つだったと自認している。
- 2024年の振り返りと2025年の展望 今年は無理に目標を立てず、別の形で自分の2024年を振り返り、2025年への期待を込めたい。前を向き続け、より良いバージョンの自分になるために。
- 2021年の振り返り 経験を多く積んだせいか、物事を見る視野も少し広がったように思う。2020年と2021年はArduinoやRaspberry Piを触ったり、AVRを調べたり、STM32の開発ボードを買って遊んだり、PCBや3Dプリントを学んだりと、様々な分野を幅広く探索し始めた。フロントエンドだけでなく他の領域とも統合して、もっと自分のやりたいことを実現したい。今年は2022年。昨年と一昨年の探索を経て、今年は何か具体的な成果を残せる、切り拓く一年にしたい。
- 2020 振り返り / 2020 Year in Review — 技術編 2020年に僕が取り組んだ技術関連のことを振り返る〜