20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DenoAdvent Calendar 2021

Day 22

Denoを半年使ってみた感想

Last updated at Posted at 2021-12-22

この記事はただの感想なので、暇な人だけ読んでください。

Denoを使い始めて半年以上経っているので、これから使い始める人向けにDenoを使ってみた感想を書いていきたいと思います。

Denoのいい所

URLを使ったimportは便利

Denoの特徴の一つが、URLを使ったブラウザ互換なimport文です。

// このコードを実行すると自動でlodashがインストールされる
import * as lodash from "https://deno.land/x/lodash@4.17.15-es/lodash.js"     

一見するとアップデートのたびに手動で書き換える量が多く、面倒ではないかと思うのですが、自分の場合は下の画像のように、依存関係のアップデート作業をGitHub Actionsで自動化したことで便利になりました。

image.png

特に、モジュールの指定と実装が同じファイルに存在するので、アップデートした時に影響を受ける箇所が一目でわかるのが有難いです。
上の例だと、media_typesモジュールに依存しているのはserve.tsだけなので、依存関係のアップデートでコードの書き換えが必要な場合はserve.tsだけを見ればいいことが分かります。
「依存関係のバージョン指定箇所とソースコードの距離が近い」というのはコードを書く上ですごくメリットだと感じました。

※ちなみに、GitHub Actionsで自動アップデートをかける方法は@kawarimidollさんの記事deno-uddのGutHubリポジトリが参考になりました。また、自分が使っているworkflowのyamlファイルも参考になると思います。

また、例えばNode.jsではnode_modulesフォルダ内に全ての依存関係をダウンロードするため、semverを使ってライブラリのバージョンを「いい感じに」解決する必要がありました。しかし、Denoではそもそも複数のバージョンが依存関係に含まれていても特に問題ないため、semverを使う必要はありません。
これも、Denoの依存関係の解決方法を気に入っている理由の一つです。

DX(開発者体験)がよい

自分がこれまで使ってきた他の言語と比べると、Denoは明らかにDXがよいです。

  • 環境構築が簡単
  • リンター、フォーマッター、テスター、language serverが同梱されている
  • 設定ファイル不要
  • アップデートが簡単(deno upgradeコマンド)

設定ファイル不要なので、書いたコードがそのまま動いてくれるのが嬉しいポイントです。
自分は簡単な四則演算はブラウザコンソールでやってしまうのですが、「四則演算するのと同じくらいの手軽さでサーバーが建つ」というくらいの手軽さ(自分の感覚ですが)なので、書き捨てスクリプトからwebのバックエンドまで幅広く利用しています。

Denoのつらいところ

上ではDenoのいい所を紹介しましたが、つらいところもあります。

日本語情報が少ない

Denoは新しいランタイムなので、Node.jsや他の言語と比べると検索してもまだ情報がヒットしづらいです。
また、日本語版の公式サイトのバージョンが古くなってしまっていたり、標準ライブラリのドキュメントが英語版しかないため、最新情報を得るのが大変かもしれません。(もちろん、OSSなので文句を言う前に自分でcontributeすべきなのですが)

これとは直接関係はありませんが、language serverで日本語を使うと時々クラッシュする問題や、prompt関数が日本語入力に対応していない問題もあります。特に、prompt関数は標準入力の受け取りという便利な関数なので、早く修正されて欲しいです。

こうした、「日本語環境特有のつらさ」みたいなものを感じる時があります。

標準ライブラリがバージョン0

Denoの標準ライブラリはまだバージョン1に到達していないため、破壊的変更が入る可能性があります。
基本的にコードを書く上で標準ライブラリは必須なので、早くバージョン1になって安定してほしいです。

モジュールごとのパーミッション指定ができない

Denoはコマンドラインフラグで--allow-write等のフラグを指定して、パーミッションを制御することができます。しかし、ここで指定した権限はプログラム全体に適用されるため、「このモジュールはread権限だけ」というような指定ができません。
どうやら技術的に不可能という事らしいですが、これ何とかならんのかなぁと思っています。

まとめ・雑感

  • 結局従来のrequire()experimentalDecoratorsを捨てるためには全体的にコードを書き換える必要があるので、それならNodeを捨ててみんなでDenoに移行してしまったほうが色々と楽な気がした
  • Node.jsでよくありがちだった「インストール時にbabelやtscでトランスパイル」「サーバーへのデプロイ時にトランスパイル」みたいなものをDeno界隈では嫌うイメージ。そういう変換が前提だったNode.jsライブラリはDenoで使うのが辛いかも?

色々書きましたが、総合的にはDenoは良いソフトウェアだと思うので、今後も使っていきたいです。

20
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?