2022年版は こちら
学んだ技術
監視
今年した仕事の一つにアラートの整理というのがあった。結果としては何か劇的な成果を出せたわけではないのだが、監視の仕組みを作る方法は一通り勉強して身につけた。例えば 入門 監視 や システム運用アンチパターン を読んでいた。
ただこれらの本からは、監視自体の設計と、それにあったツール選定に対する知識やパターンを手に入れられたが、実際には運用に乗せることが難しいということを経験した。どちらかというとツール選定ではなく、運用手順書を作ったり、その運用を定期的に確実なものとする組織設計や運営の必要性を感じた。このあたりをちゃんと整備したいと思ったが、それをするには偉くなる必要があるなという謎の学びがあった。最近、カジュアル面談だったり飲み会だったりで、「偉くなりたい」と言っているのだが、実はこういう背景がある。DevOpsやらIaC系の本は「偉くなくてもボトムダウンでやっていく方法」みたいな章が作られるのがお約束になっている雰囲気を感じているのだが、結局やり切るなら偉くなるのが一番しやすいと思った。
オブザーバビリティ・エンジニアリング
これも監視繋がりではあるが、きっかけとしては Axum を書いているときに入れらさせられる tracing crate がきっかけだ。loggerやenv-loggerと何が違うのかと調べていくうちに tracing という考えに出会った。そしてその辺りを学ぶために買ったオブザーバビリティ・エンジニアリングは 2023年自分の人生を変えた本ランキング1位になった。
今自分は職場で基盤改善を主とするチームで働いていて、その中で負債返済活動もしているのだが、計装は既存のアプリケーションにできること、まずは自動計装から入っていけること、計装してしまえば既存実装に踏み入らなくてもシステムの病巣にアクセスしていけることは、そのような仕事をする上で大きな武器となることに気づいた。なのでオブザーバビリティ・エンジニアリングの手法を勉強しつつ、仕事で実験するというのを今年の半分くらいはしていた。
ただ、アプリケーション計装はできるようになっただけであって、otel backedn/collector は SRE から与えられたものであって、この辺りの知識はすっぽり抜け落ちている。来年は身につけていきたい。
PHP
野暮用でする機会があったので勉強した。Laravel の勉強をした。実は今年まで書いたことがない言語だ。?
から始まるのは知っている程度の知識。PHPを書いた感想は「なんでPHPはプログラムとして動作するのかが分からん」だ。これは Laravel を Docker に固めてビルドしようとしてつまづいた。これまでの経験からすると、Dockerfileでやることといえば
- 依存ライブラリDL
- ビルド
- 実行
となるが、PHPでやったことは apt-get で色々なものを詰め込んでおいて、さらにここに composer や pecl やら docker-php-ext-enable やらでガチャガチャしておけば、index.php を Apatch や FPM 経由で実行という感じでなんだこれという感じだった。イメージを削ろうとしてもなんだかんだで全部必要という感じで辛かった。また、世に出回っている docker-compose は volume mount して、コンテナの中に入って作業するという感じだったのも驚いた。ただ、いざチーム開発してみると Mac/Win で環境を揃えるのが大変すぎて、確かにコンテナの中に入って作業をする必要性は感じた。まあ最近はIDEも賢くてコンテナの中で作業してもLSPの支援は受けられるので良いのかもしれない。
その次にはアプリケーションのデプロイなわけだが、これも詰まった。ローカルで Laravel を動かす分には artisan serve
すれば HTTP を喋ってくれるのだが、これは本番環境では使ってはいけないらしい。実際はスクリプトファイルを置いて、そこを index として Apache や FPM を起動すれば良い。これは PHP がモジュール版やCGI版と呼ばれている方式で動いていることを理解しなければいけない。 see: https://qiita.com/kotarella1110/items/634f6fafeb33ae0f51dc
このあたりの理解にすごく時間がかかって大変だった。むしろ別言語の知見が足枷になっていて、もっとはやく unlearn すべきだった。
ちなみに artisan serve
がダメな理由はシングルプロセスでのシングルスレッドだからで、つまり前段に Apache や Nginx(+FPM) が必要になるというわけだ。実は PHP にも Swoole という非同期ランタイムはあるので、この辺りは設計の工夫のしがいはありそうで、その調査は来年のタスクの一つでもある。
Go
ISUCON対策で勉強した。とりあえず HTTP と SQL はライブラリに頼らずいじれるようになっておいた。良い言語だと思う。けどISUCON本番はN+1を解消できなくて敗北した。
Go自体は簡単とは聞いていて、実際のところ学習曲線は緩やかですぐに習得はできたが、リアルワールドのOSSの実装などを覗いてみると何もわからんことだらけだった。ISUCONのベンチマーカーも読めなかった。悔しい。今年の後半はクラウドの勉強をしていて、そのツールはほとんどGo実装で、プラグインとかを作るためにはGoを実戦レベルで習得する必要性が出てきているので、来年はちゃんとやってみようと思う。Goは使いこなせると活躍の機会が多そうだし、そもそもなんだかんだで採用している会社は増え続けている気がするし(求人数は知らんけど)、努力して損はなさそうと思っている。
WebRTC
使う機会があって勉強した。こういうのはいつも skyway とかの SaaS に頼っているのが、今回は予算の制約で skyway が使えない状況で、リアルタイムにカメラで双方向通信をしないといけなくなり、急遽 WebRTC そのものを勉強した。勉強は楽しかったのだが、個人的には実装は2度とやりたくない。嫌な思い出としては、ブラウザ差異・OS差異・ユーザーの回線差異によって繋がる・繋がらないがマチマチで安定した通信を実現させることがとても難しかった。MDNを全部読んだりしておけば、何か仕様とは違った動きはしているものの動作させる形にはできるのだが、なぜその挙動になるのかが理解できないことが多々あった。ブラウザベンダーのIssueトラッカーも読んで、メーリングリストも辿っても分からないパターンがあったりもした。多分、ブラウザの実装や libwebrtc を読めば良いのだろうが、先が長すぎてやめた。僕には荷が重たかった。まあTURNサーバーだけはSaaSに移して少し荷を下ろしてしまったのだが...
その他
- k8s
- yaml は書けるようになった。が、会社で動いてる基盤をGKEで0から作れと言われたらできない。
- テクニカルライティング
- あるご縁で、とあるドキュメントを書いている。ユーザーの問題解決とプロダクトの成功を導く エンジニアのためのドキュメントライティング を読んでいる。言葉遣い以外にも、ブログと違った観点が求められるので大変だ。ブログはゆるふわに書けるから助かる。
- vercel
- 普段は遊びでしか使っていなかったのだが、商用の環境でVercelを使う機会があった。タグ切ってリリースするためのワークフロー管理や、OpenTelemetry+なんらかのダッシュボードSaaSに寄せたロギング(Vercel組み込みのログは目視監視には向かない...)などのテクニックを身につけれた。
来年は何を勉強する?
フロントエンドエンジニアはもうやる気がなかったのと、実際今年はあまりフロントエンドのコードは書いていないのだが、そのせいでかなり色々なトピックから取り残されてしまった。Next.js v14 や RSC は分からないし、なんなら Suspense や Concurrent とかも怪しい。僕が好きなのはテンプレートエンジンとしての JSX であり、Reactはあまりやる気がない。が、そうも言ってられないのが最近の現状である。いい加減Reactを勉強しないといけない。去年も全く同じことを言っていた気がする。あと、React, Next 以外にも HTML も CSS も HTTP も VCL も雰囲気で書いているのでそろそろキャッチアップしとくかの気持ち。なので冬休みと新年はこのキャッチアップに当てる。
それに加えて k8s を中心に、コンテナ技術とクラウドの勉強に本腰入れる。運用や監視の技術を伸ばす上でコンテナとクラウドは詳しくならないといけないと感じた。今は同僚がお膳立てしてくれた上でヒャッハーしてるだけなので、ちゃんと全部自分で用意できるようになりたい。特に Grafanaとotel collectorの用意は自分でできるようになりたい。
あと私事だが、いま一応は転職活動中だ(※良いお話があれば待っていますが、すでに面接で一杯一杯になっているのでDMなど貰っても対応はできません。とはいえ返信したくなる額面であれば返信します。)。今回はいつもの辞める辞める詐欺ではない。実は今の会社ではまだ契約社員という立場であり、法律上そろそろ出て行かないといけない。というわけで今月からいろんな会社の面接に出向いているのだが、やはりクラウド周りの知識不足を感じる。各社の System Design Interview を突破できるようになるのは来年の目標の一つである。その辺の地力が付いて、仕事が決まっていなかったら僕も Open Job Letter とかいうのを書いてみようと思う。
けど来年は働きたくないなぁ...