🦕

Deno Deploy Beta 2が来たぞ

2021/09/02に公開

2021/09/01(日本時間だと09/02)にDeno Deploy Beta 2がリリースされました。

https://twitter.com/deno_land/status/1433102509762125827

ツイートにもありますが、トピックは以下の4点です。

  • Deno.readFile for loading static files
  • Better interoperability with CLI using Deno.serveHttp
  • Crash reports
  • Website redesign with better navigation and accessibility

公式の記事をもとに、アップデートされた点を見ていきます。

https://deno.com/blog/deploy-beta2

File system APIが追加された

以下のAPIが追加されました。

  • Deno.readFile
  • Deno.readTextFile
  • Deno.cwd

https://deno.com/deploy/docs/runtime-fs

DeployでGitHubリポジトリをリンクして使用している場合、相対パス形式でファイルを読み出せるようになりました[1]
これまで公式ドキュメントの静的ファイルサーバーの例として、fetch()を介して目的のファイルにアクセスする方法が示されていましたが、readFileの追加で単純化されました。
https://deno.com/deploy/docs/serve-static-assets

変更点の中でも最初に挙げられていますし、Denoチームが推している機能であると思われます。

「自分はそういう使い方をしないよ」という方もいるかもしれませんが、過去にfs系APIの有無で詰まった経験があるため、「APIができた」ということ自体が結構重要だと思います。
以下の記事で書いたように、APIが存在しないことでエラーが出てしまい、使用できないモジュールがあったためです。
(この記事で触れているdotenvはDeno.readFileSyncを使っているので、依然として使用できないのですが…)

https://zenn.dev/kawarimidoll/articles/752f74860d0d78

もちろんDeploy版readFileとCLI版readFileの中身は別物ですが、「importしたコード内にDeno.readFileが書かれているだけで動かせない」という問題が改善する可能性があります。

CLIと同じHTTPサーバーが追加された

これまでDeno DeployではaddEventListener("fetch", (event) => {});形式でサーバーを記述していましたが、Deno.listenDeno.serveHttpを用いたネイティブHTTPサーバーを使えるようになりました。

Deno 1.13.0で上記APIが安定化し、Deno Deployのほうにも本格反映となりました。
内部では並行して開発が進んでいたと思われます。

https://zenn.dev/magurotuna/articles/deno-release-note-1-13-0#1.-ネイティブ-http-サーバー実装の安定化

以前は、CLI側ではstd/httpを、Deploy側では上記のaddEventListenerを使う…と別れていたのが、どちらもネイティブHTTPサーバーを使えるようになりました。
これにより、両者のコードを書き分ける必要がなくなり、Oakなどのフレームワークを利用したコードをそのまま使用できるということです。

クラッシュレポートが保存されるようになった

リアルタイムログとは別にクラッシュレポートのページが作られ、自動でログがまとめられるようになりました。

こちらの自作プロジェクトのレポートを見てみます。
https://zenn.dev/kawarimidoll/articles/b573f617a51c0b

このように、問題の発生した時刻でまとめられます[2]

公式の発表記事によれば、Unhandled exceptionの発生前100行のログを出してくれるとのこと。
しかし、以下のログは100行もありませんでした。こちらのエラーであれば100行ものログは不要なので、適切に調整されるようです。

個人的な感想としては、

  • 一覧画面で時刻だけでなくエラーの最初の行も見られるとわかりやすいかも
  • 一覧画面とログ詳細画面でタイムスタンプの表記が異なるのが気になる
  • デプロイ(GitHubへのプッシュ)ごとにまとめられるのではなく、過去全てのエラーを一覧できると良いかも

と感じました。
この辺は利用者が増えるに従い改善されていくと思います。

Web UIのデザインが一新された

上のクラッシュレポートのスクリーンショットでも映っていますが、Webページのデザインが更新されています。

まずは公式トップページ。
これまでモノクロが基調だったところが一気にカラフルな印象になりました。

https://deno.com/deploy

添付した画像では背景色が赤くなっていますが、実際は明るめの色が移り変わっていくアニメーションです。nest.landもそうですが、こういうレインボーグラデーションがトレンドっぽいです。

ダッシュボードも同様にリデザインされています。
こちらの背景には色のアニメーションはありませんが、ぼんやりとグラデーションがついています。
柔らかく丸っこい印象は共通ですね。

各プロジェクトにアイコンが付いていますが、これらは自動で選択されているようです。手動でアイコンを変更するような設定は見つけられませんでした。
かわいいだけかな…?

なお、以下の過去記事にUI変更前のスクリーンショットが載っているので、そちらと見比べると変化がわかりやすいかと思います。
https://zenn.dev/kawarimidoll/articles/b0a5064befcd31

そういえば綺麗になったけど…雨降ってないの…?雨どこ…?
Denoは夜の雨の中でソフトウェア開発の闇に立ち向かってるんじゃなかったんか…?

TOPページの下の方で降ってました。よかった。

deployctlも更新された

これらの更新に伴い、Deno Deployサーバーをローカルで動作させるツール、deployctlの方にもバージョンアップが来ています。

https://github.com/denoland/deployctl

このツールにはdeployctl typesで型情報を出力する機能があります。ここに前述の各APIが追加されました。
既存のプロジェクトで型情報ファイルを使用している場合は、deployctl及び該当ファイルの更新をおすすめします。

型情報ファイルの使用法は以下の記事で解説しています。
https://zenn.dev/kawarimidoll/articles/efed8ada433f24

所感

File system APIおよびネイティブHTTPサーバーAPIが追加され、CLI用コードとDeploy用コードの差分が減っていく方向で開発が動いているようです。
こういった部分を共通化できるのは、単に利用する場合だけでなく、フレームワークやモジュールを開発する上でもメリットが大きいです。
「Nodeと比べて周辺環境が整備されていない」という弱みは急速に解決されていくのではないかと見込んでいます。
数年後に古参ぶって「最初期はコードが別々でね…」とか言ってたらすみません

また、GitHubとの連携強化の傾向も見られます[3]
確かにGitHubは関連サービスの中でも機能の充実度は群を抜いていますし、実際自分も愛用していますが、連携を通り越して依存にまでなってしまうと良くないかな…とも思います。
最近ちょくちょく重くなったり落ちたりしている印象もあるので、「GitHub連携」自体が負担にならないか心配です。

おわりに

Deno Deployは2021 Q4のGA(安定版)リリースに向けて改善が進んでいます。

個人的にDenoはNodeを超える大きな流れになる(なってほしい)と思っているので、その成長をリアルタイムで見られるのは非常にエキサイティングだと感じています。

もしかすると、降り続いていた暗い雨が止み、星の光が差すときが来るのかもしれませんね。

脚注
  1. GitHub以外の公開URLを指定してDeployしている場合は使用できないとのこと ↩︎

  2. Beta 2リリース以前のログも集計対象になっているようです ↩︎

  3. deno.land/xもGitHubリリースに依存してるし ↩︎

Discussion