うなすけとあれこれ

2021年12月27日

サーバーサイドエンジニアとして2021年に使った技術と来年の目標

使用したプログラミング言語統計

昨年書いたサーバーサイドエンジニアとして2020年に使った技術1の2021年版となります。

昨年と同じく、冒頭の画像はwakatimeによる2021年1月1日から12月26日までのプログラミング言語使用率です。2位はTypeScript、3位はYAML、4位はTerraformです。

立場

フリーランスで、主にRailsやAWSを使用しているサービスの運用、開発に関わっています。いくつもの会社を見てきた訳ではなく、数社に深く関わっている1都合上、視野が狭いかもしれません。(昨年と同じ)

今年公開している成果については以下です。

利用した技術一覧

昨年の記事では「特記事項があるもの」を太字にしていましたが、今回は去年からの差分を太字にしました。

Ruby/QUIC

今年はRubyKaigi Takeout 2021に登壇することができました。どのような経緯で何について話したかは以下記事に書きました。

RubyKaigi Takeout 2021 で発表しました | うなすけとあれこれ

しかしRubyKaigi以降、Kaigi on Railsなど様々なイベントに関わっていたこともあり、今年はQUIC関連のことをこの発表以来全く触れられていない状況にあります。

自分への宿題としたOpenSSL gemのRactor関連タスクですが、Pull requestとして形に仕上げてmergeまで進められたのは以下の1つだけ2となっています。

Add test cases to OpenSSL::BN using ractor by unasuke · Pull Request #457 · ruby/openssl

QUICについては、Ruby、Ractorとは別に、手元に書きかけのものがあるので形にして出したいと思っています。

TypeScript

昨年の「Railsを主戦場としている自分が今後学ぶべき技術について(随筆)」にて以下のように書きました。

まずはTypeScript。これは先程の文脈の通り。Webアプリケーションに関わる開発者なら、既に「書けないとまずい」という域になりつつあるだろう。では、具体的に「書けないとまずい」とはどのレベルを指して言うのだろう。自分は、(中略) 例えばいくつかのライブラリを組み合せて0からWebアプリを構築するということが苦手だ、というかできない。

今年はElectronでPocketのリーダーアプリを作り始めたりRustと組み合わせてDeepLのデスクトップアプリを作ったりと、 「0から(Web)アプリを構築する」 ということがそれなりにできたのではないかと思います。どちらのアプリもまだまだ開発途中で足りてない機能は山程あるので、2022年も引き続き開発していきたいです。

Rust

TypeScriptの項でも触れた「DeepLのデスクトップアプリ」のメインプロセスはRustで書きました。Tauriというフレームワークを使っています。

これについて、なぜそういう選択をしたかについてはリリースしたときの記事に書きました。

DeepLのデスクトップアプリをRustとPreactとTailwind CSSでつくった | うなすけとあれこれ

Rustは概念の習得も書くのも難しいですが、The Rust Programming Language 日本語版をしっかり読み込めばなんとなくわかるようになる & rust-analyzerがとても優秀でどんどんコードを補完してくれる3ので書くのが楽しかったです。既存のプロダクトのRust版が出てくる理由がわかった気がします。

Kubernetes/Prometheus/Grafana

公開している成果にも挙げたように、「Black Game Streaming Engine v2」をKuberntes上に構築しました。

昨年「Fargate/ECSで要件を十分に満たすことができる」と書いたように、インフラをKubernetesに移行した記事に対し「Kubernetesである必要がないのでは」と言われたりすることもありますが、これはまさにKubernetesを採用する必要があった要件です。詳しくは以下の発表記事をご覧ください。

僕がこのプロジェクトで主に担当したのは監視周りの構築になります。PrometheusとGrafanaの準備を行いました。Grafanaの前段にoauth2-proxyを置いてアクセス制限をしたり、cert-managerで証明書の自動更新をしたりという作業が地味に面倒で大変だった思い出があります。

Java/Kafka/Cassandra

去年から増えたもののうち、めちゃくちゃ企業色の強いものです。項目として取り上げましたが、ヘビーに関わったということではなく「やっていくぞ!」という流れがあり書籍を何冊か購入し読書会をやったり、ハンズオンをしたりしてチーム内での経験値を上げている段階です。購入した本は以下になります。

来年がんばりたいこと

Ruby/QUIC

やったことでも書いたように、RubyでQUICを話せるようにしてみたい、そのために小さくても一歩一歩前に進んでいきたいです。具体的にはInitial packet以降のフローに対応する、OpenSSL gemのRactorテストコードを書いていく、などです。あと書きかけのプロダクトも世に出したいです。

TypeScript

ElectronによるPocketのリーダーアプリですが、今年後半は全く言っていいほど動けていませんでした。デザイナーさんにお願いしてアイコンやUIデザインについてのアドバイスを頂いたので、そのあたりをキレイにしてリリースしたいです。

DeepLクライアントアプリも、突貫で作ったのでローディングのスピナー表示などをやっていきたいと思います。

また急に作りはじめたVJアプリについても、高専DJ部開催のタイミングだけになるとは思いますが使いやすく、良い映像を出せるように細々とやっていきたいです。

p5.js + WebGL(react-vfx) + WebMIDI #kosendj https://t.co/KBvy7odaXo

— うなすけ (@yu_suke1994) December 25, 2021

Community (Kaigi on Rails)

Kaigi on Railsに関しては引き続きオーガナイザーの一員として関わるのみでなく、できればProposalを提出したいです。ネタというかこういうことについて話したいというアイデアはありますが、話せるようになるまでコードをいっぱい書く必要があるので、コードをいっぱい書きたいと思います。

English

せっかくDeepLのデスクトップアプリを作ったり、QUIC関連のことをやったりしていて、これらは別に内容が日本に閉じたものではないので、英語で情報発信をしていくということをやっていきたいです。そう思うようになったきっかけの1つは、角谷さんのKaigi on Rails 2021での発表があります。

Polishing on "Polished Ruby Programming" #kaigionrails p37

Polishing on “Polished Ruby Programming” #kaigionrails / kaigionrails 2021 - Speaker Deck

まとめ

がんばります。


  1. 書くきっかけになったpotato4dは今年のは書かないのかな……? 

  2. なんとクリスマスにリリースされたRuby 3.1に含まれています!しかしテストコードはリリースに含まれると言っていいものなのか……? 

  3. もしかしたらGitHub Copilotだったのかもしれないですが 

2021年12月27日