2020年の技術的な振り返り
今年はCOVID-19に振り回された一年でした。様々なオフラインイベントは中止か延期になり、ZoomやTeams、Chime、Clusterを使ったオンラインイベントに切り替わっていきました。また個人的には仕事も完全なテレワークになり、ライフスタイルに大きな変更を迫られた一年でもあります。そんな激動の一年もあと僅かということで、今年取り組んだ技術を振り返ってみたいと思います。
ハイライト
とりあえず3行で振り返ってみます。
- RustとAWSを頑張った
- Zennを始めた
- オフラインイベントが中止になったけど、代わりに様々なオンラインイベントに参加した
細かな振り返り
今年のイベントを思い出しながら振り返ってみます。意外とたくさんのチャレンジをしていました。
Re:VIEWを使った本作り
今年一発目のネタはRe:VIEWを使った本作りでした。今年は同人誌の一つでも書きたいと思っていましたが、結局忙しくて達成できなかったので来年こそは頑張りたいと思います。ただ、本作りの技術的は基礎については以下の記事の通り大体わかったのは大きな収穫でした。
Rustに入れ込む
一年に一つは新しいプログラミング言語を学ぼうという気概を持ってエンジニアをやっていますが久々に大当たりしたと思ったのがRustです^1。お気に入りのプログラミング言語は Ruby と Scala ですが、そこに割って入り込めるだけのポテンシャルを秘めていました。Rubyは普段使いのスクリプト言語としては最高の書き心地です。ただちょっと大きいプログラムを書こうとしたり大人数の開発では統制が効かなくなり厳しめでした。性能的にもRubyは少し遅いのでCPU律速な高負荷処理では使い辛かったりもします。Scalaは言語に特に大きな不満はないですが、最近はJDKのバイナリ配布が乱立していたり、パッケージサイズが大きくなりがちで配布が厳しいかなと思っています。
そんな中でRustは RubyとScalaの穴を埋めるちょうどよいソリューション を提供してくれました。特に今までC/C++やGo言語を選択していたような低レイヤーの処理をRust一本に置き換えることができそうです。あとは機械学習や数値計算でPythonやJuliaを使うケースをRustに置き換えることができれば最高なんですが、まだ道のりは長そうです。とりあえず現在の自分の使い分けは以下のとおりです^2。
- Ruby
- ちょっとしたテキスト処理、自動化
- Scala
- 大規模開発
- 関数型プログラミングの勉強用
- Rust
- 低レイヤーの処理
- OS、組み込み、低レイヤのライブラリ
- 性能が必要な処理
- WASM
- ちょっとしたコマンドツールをシングルバイナリで提供したい場合
- 低レイヤーの処理
個人的にRustに今後一番期待しているのはWASMのユースケースです。YewはElmアーキテクチャの影響を受けており使いやすそうなので、フロントエンドのユースケースをカバーできればTypeScriptの出番も減らせそうです。またKrustletのようなWASMの実行環境が普及すればサーバサイドのユースケースも増えてくるので今後が楽しみです。
Rust関連で書いた記事は以下の3本です。どの記事もそこそこ反響があり満足のゆく記事になったと思います。「Re:FizzBuzzから始めるRust生活」はRustにハマって最初に書いた記事で エイプリルフールとリゼロ2期開始に合わせたネタ でした。残念ながらリゼロの2期はCOVID-19の影響で4月クールの開始は延期されたのですが、記事は多くの方に楽しんで頂けたようでコメント欄も賑わいました。
来年の言語は正直まだ悩んでいますがFlutterに興味があるので、Dartにするかもしれません。
AWSに本格的に取り組む
ちょうど仕事でAWSを本格的に使い始めたこともあり、AWSに本格的に取り組みました。今年真面目に触ったAWSのサービスは以下のとおりです。
- Lambda
- QuickSight
- DynamoDB
- AppSync
- Amplify
- CDK
- StepFunctions
- Cognito
- S3
- EventBridge
- CloudWatch
- IAM
Lambda はやはり最強ですね。コンテナもサポートされたこともありEC2やECSに頼るケースは激減したと思われます。LambdaとRustの相性がよいことも確認できたので大満足です。
QuickSight はいろいろと情報が少なくて苦労しました。また表現力でもPower BIが優れていると感じることが多いので今後に期待したいです。QuickSightの埋め込みやマルチテナントに関しては大分知見を貯められたのでいつかブログで公開したいと思います。
DynamoDB は癖が強すぎて厳しかったです。一応SQLも書けるし、KVSのRedisも慣れていたので何とかなるかなと思っていたのですが、その幻想は打ち砕かれました。新しいクエリ言語のPartiQLが発表されたので利用していこうかなと考えています。
あとは AppSync が使えるようになったのは大きいです。今までのREST APIのユースケースはほぼAppSyncに置き換えることができました。GraphQLは便利ですね。ただAmplify経由でAppSyncを使う場合は簡単だけど、そうでない場合はリゾルバにVTL[^3]を頑張って書かなければ行けないケースも多くまだハードルは高いと感じました。ただ、AppSync経由でLambdaを叩くケースは簡略化されているのでこのユースケースは非常に使いやすいです。
Amplify は立ち上げは早いですが、中身がブラックボックスでなかなか苦労しました。特に初期設定でインタラクティブに追加する設定が結局設定にどう反映されるのかとか、push
したときの挙動とかいまいちよく分からなくてソースを読んだりしてました。
Amplifyに比べると CDK の挙動は予測しやすく扱いやすかったです。高レベルのコンストラクトも揃ってきたので、そろそろCloudFormationで直接書く理由はなくなった気がしてます。
StepFunctions はワークフローを簡単に組めるのでCDKとLambdaと組み合わせて、EventBridgeで定時起動させるとサーバーレスなバッチ処理が捗りました。AWSというとイベントドリブンな処理を真っ先に考えがちですが、制御やテストのしやすさはワークフローがやりやすいことが多いのでもっと流行ってもいいのではと思いました。
Cognito は完全に鬼門です。もともと認証、認可は複雑なのですがCognitoの成立の歴史も相まってベストプラクティスにたどり着くまで苦労しました。というかまだたどり着いた気がしていません・・・
他にも書きたいことは山程ありますが、長くなりそうなのでこのへんでやめておきます。また仕事でAWSを使うにあたってちょっと箔をつけるために「AWS認定ソリューションアーキテクト - プロフェッショナル」を取得しました。正直本当に大変でしたが、これでAWSに関して 「仮免」 扱いされずに済むので多少は仕事がやりやすくなります。AWS関連で書いた記事は以下の2つですが、AWS認定に興味がある方はぜひ「一発で合格する技術」を読んでみてください。
[^3]: VTLはApache Velocity Template Languageの略
RubyとScala
大好きなRubyとScalaですが、今年は申し込んでいたRuby KaigiとScala Matsuriがどちらもキャンセルされたので非常に悲しい思いをしました。しかしどちらも代替のオンラインイベントが開催されたため主催者、関係者の皆様には感謝です。今年はRubyにとって節目の3.0.0がリリースされました。パフォーマンスの改善であるRuby 3x3や並行処理の新機能や静的解析など目覚ましい成果を上げて非常に興奮しました。奇しくもScalaも3.0のリリースを控えていて、2021年前半から中盤を目指しているようです^4。今年書いたRubyとScalaの記事は以下の2つです。
Web技術
もともと大昔の話は置いておいてWebフロントエンドはAngularJS -> Angular -> VueJSと進んできたのでそろそろReactかなと思って手を出しました。まだまだ理解の途中ですが「りあクト!」はすごく良かったのでおすすめしておきます。
Zennを始める
新しい技術系ブログサービスのZennを始めました。これが思いの他良かったです。一番気に入ったのはブログカードを簡単に展開できるところです。あとGitHubで記事を管理してデプロイできるところも良さげです。本を買いて公開したり販売もできるので技術記事のマネタイズにも有効そうです。もともと技術書典で本を公開することを目標にしていましたが、こちらの方が気軽にできそうなのでこっちを目標にしようかなと考えています。以下はZennで公開した記事です。Qiitaで公開しづらい「ポエム」系の記事は「アイデア」というカテゴリで公開できるのでその辺の使い分けもできそうです。
参加イベント
とりあえずざっくり書き出してみました。この他にも参加していますが細かいものは割愛しています。とりあえずイベントがすべてオンラインになったことで以前よりも気軽に参加できるようになったのは良かったです。
- DDDオンライン勉強会 #2「集約」 - connpass
- Ruby3 さみっと online - connpass
- 型システム祭りオンライン - connpass
- Infra Study Meetup #1「Infrastructure as Code」 - connpass
- 【オンライン】ウイルスに負けるな!cndjp春のService Mesh祭り!- cndjp第14回 - connpass
- サーバーレスアンチパターン今昔物語 - connpass
- Rust LT Online #1 - connpass
- 自作プログラミング言語の集い - connpass
- ScalaMatsuri 2020 | アジア最大級の Scala のカンファレンス
- AWS re:Invent
- Ruby 3.0 release event - connpass
印象的なイベントは型システム祭りオンラインとScala Matsuriですね。型システム祭りオンラインはバーチャルSNS clusterを利用したものでアバターで動き回れたり、チャットがバーチャルな掲示板に表示されたりするのが興味深かったです。Scala MatsuriはDiscordを使ったイベントになっていたので新鮮でした。あと名物のアンカンファレンスにGoogle Jamboardを使ったりとかいろいろ工夫されていました。
しかしオンラインイベントも楽しいですが、ただやはり人と人との直接的な触れ合いがなくなってしまったのは悲しいですね・・・来年はCOVID-19が収まってオフラインイベントが開催されることを祈っています。
OSS
OSS活動というほどでもないですが以下の3つをGitHubで公開しています。「hexo-tag-blog-card」はnpmでも公開しており、星1つ獲得とFork1回されています。
- hinastory/hexo-tag-blog-card: Embed a blog card on your Hexo article.
- hinastory/jupyterlab-ruby: JupyterLab Environment for Ruby
- hinastory/cdk-step-functions-sample
hexo-tag-blog-cardを作った経験をブログにもまとめています。
ライフスタイル
仕事が完全にテレワークになったのでライフスタイルも一変しました。TeamsやZoomをヘビーに使い倒しました。また自宅の環境を快適にするために様々な工夫をしました。リモートワークを快適にする家電に関しては以下の記事にまとめました。
まとめ
このブログも2年間継続して投稿数も50を超えることができました。この調子で自分のペースで新しい技術に挑戦しながらアウトプットを増やしていきたいと思います。来年の豊富ですがとりあえずRustでもう少しいろいろなプログラムを書いてみたいのとAWS以外のクラウド(GCPかAzure)にも知見を広げていきたいと思います。そしてもちろん本を書く!はなんとか達成したいと思います。