最近何かと話題沸騰しているdenoを使ってみたので、その所感を書いてみようと思います。あくまで個人の感想です。denoに関しての詳しい説明はDenoとはなにか - 実際につかってみるを読んでいただいた方が良いと思います。
#denoを好きになりました
##良い点
###typescriptが標準で使える。
今までtypescriptを使ったことがなかったんですが、denoを使うに当たってようやく重い腰を上げて使い始めました。denoの環境構築するだけでtypescriptが使えるのは便利かなと感じます。
###ブラウザ向けの関数も使える
fetchとかそうなんですけど、nodejsだと普通に使えなかったブラウザ用の関数が使えるのは便利だと感じました。
###GitHubから直接importできる
URLのblobの部分をrawに変えるだけでimportできます。詳しいやり方はDenoの自作モジュールをGitHubから読み込むを読んでいただくと良いと思います。
###余計にストレージの容量を食わない
npmの様にローカルファイルにインストールするわけではないので、容量を食いません。かと言ってコンパイルの度に毎回importするモジュールをダウンロードするわけではなく、キャッシュする仕組みがあるので動きも軽量です。
###標準モジュールが便利
標準モジュールがnodeより豊富で、writeJsonSyncなんていうJSON専用の書き込みモジュールなんてものもあります。中身の実装見てみると普通にオブジェクトをJSON.stringify()してDeno.writeFileSync()しているだけなんで、自分で実装するのとそう変わりない気もしますが、標準モジュールにあるならそれ使った方が早いですよね。そう考えると便利かなと思いました。
gitHubからimportするテストも兼ねて、ちょっとしたモジュールを公開したので、気になる人は見てみてください。JSONのソートを実装するたびちょっと面倒だなと感じることが多かったので作りました。https://github.com/R-Az/deno_jsonSort
##悪い点
###Denoというオブジェクトがエラー扱い(当然)されている。
Denoというオブジェクトからいろいろな関数が呼び出せるみたいなんですが、VSCodeではグローバル変数として(?)認識されていません。コンパイルしたら普通に通るのに、エラー表示になっているのは地味にストレスです。対策を探していますがそもそもVSCodeの仕様を把握しきれていないので、何か知っている人がいらしたら教えてくださると嬉しいです。
2020/06/09 追記 コメント欄にて解決方法をお教えいただきました。@k-izumiさんありがとうございます!
下の記事を参考に
deno types > deno.d.ts
を実行したら型定義ファイルができて Deno.*** にエラーが出なくなりました。
https://qiita.com/syumai/items/b84f9508036b026bef26
もしVSCodeが反応しないようなら、一度deno.d.tsファイルを開いて上げると認識しました。
###名前が紛らわしい(日本語のみ)
すごいしょうもない事なんですけど、denoって文字列を各種検索エンジンは「での」って日本語と勘違いするときがあるみたいで、想定外の結果になることがあります。
とはいえこれは、今後denoが普及すれば解決する問題だとは思うので、あんまり気にしなくても良いですよね。検索結果の画像を見せたかっただけです。逆にローマ字を日本語として認識する検索エンジンが凄いと思いました。
##まとめ
この記事で書いた以外にも良い点はいっぱいあります。新規でプロジェクトを立ち上げるならdenoを使ってみるのも選択肢に上がるんじゃないでしょうか。兎にも角にも一回使ってみると良いと思います。私はdenoを好きだと感じたので、個人開発するときは積極的に使おうと思います。
##おまけ
npmみたいに予めインストールするわけではないので、Denoのimportするモジュールにはコード補完が普通には効きません。VSCodeならExtentionを入れて、その上で下記のコマンドを叩くか、一度コンパイルするとコード補完が効くようになります。(因みに1.0.0より前は、fetchってサブコマンドだったらしいです)
deno cache ファイル名.ts