趣味でWebアプリケーションを書くことが、時々あるのですが、その中で約10年くらいメンテナンスを続けているものがあります。それは、RSSリーダーなのですが、当初はPerl(Mojolicious)とjQueryを使って書いていたはずです。洗練されてない仕様やコードを何度も書き直したり、バグをつぶしたり作ったりしては、ここ最近は、PerlとVue2系を利用し動かしていました。
Vueも3系がリリースされてたのは知っていたのですが、それなりに放置していたため、乗せ換えるために久しぶりに手をいれることにしました。
このままPerlを使って維持しつづける選択をとってもよかったのですが、言語を置き換えてみることで、知らないライブラリを探したり、書き方を調べたり、違う世界にも少しは慣れてみようと思い、Goで置き換えを進めることにしました。また、Vueも、小規模だったのでJavasCriptでそのまま書いていたけれど、TypeScriptを使ってみることに。動機も特になく、見様見真似で使ってみようと思って書き換えた。
書き換える中で感じたメリット・デメリット
- Goであれ、TypeScriptであれ、型が明示的であり、コードを書く中でそのサポートを体感できる
- Perlでは、値の受け渡しなどで気にする必要がある
- Smart::Args など型の検査をするライブラリは存在する
- GoではPerlの時より、待機中のメモリ使用量が若干少ない気がする。アプリケーションの規模によるところはありそう。
- Dockerコンテナを作る場合、Goの場合はdistrolessなどの軽量なベースイメージを採用することができるが、Perlの場合は、そこまで軽量なコンテナを作るには難しさがある。
- Perlには、DBIというデータベースに対するインタフェースを持つライブラリがあり、それを対象としたデータベースのドライバライブラリがある(具体的にはDBD::mysqlやDBD::SQLite)。また、DBIを基底にしたライブラリ、例えば、トランザクションや接続の取り扱いを補助するライブラリがあるが、Goにはそういったものはなさそうである。
Go、TypeScriptを使って書き換えてみることで、色々な書いたことのあるコードをこういう書き方でやるのか。などを感じ取ることができた。
一度何かを違う言語で書き換えるだけで、その言語が持つ思想などを理解する、理解しきるというようなことはできないものの、自分の中で扱える言語の選択肢を少なからず広げることはできるのではないか。と感じたので、これからも、こういったことをやって、体験を広げれればいいなと感じた。