Deploytechhttps://twitter.com/KawarimiDoll/status/1458583438999449600Denoでサーバーを建てる方法が以前とは変化しています。0.114環境での手法を解説します。https://zenn.dev/kawarimidoll/articles/0d384d53953525記事執筆時点での結論:std/httpのserveまずは結論から。現在、推奨されているのはstd/httpのserveメソッドを使う方法です。1.16のリリース記事ではこのserveメソッドが使われており、最近まで推奨されていたlistenAndServeメソッドは非推奨となっています。サンプルを作ってみました。});addrが数値でなく文字列なのはhost:portの形式で指定できるためで、この例のように:を最初に持ってくることでport部だけ設定することができます。デフォルト値は"0.0.0.0:8000"です。Deployに上げてみましたが、問題なく動作しました。最初に添付したツイートの通り、これまでDenoでサーバーを建てる方法は複数提案されてきました。以下ではそれらをざっくりまとめたいと思います。当初使用されていたものです。0.114.0のserveと同名ですが別物で、現在はserver_legacyに入っているものです。});}当初はserver_legacy.tsではなくserver.tsから読み込まれていたため、バージョン指定がされていないコードでは現行のserveと区別が付きません。前に書かれたDenoの紹介記事はこれを使っていることが多く、「記事のサンプルとインポート元のファイル名もメソッド名も同じなのに引数や使い方がぜんぜん違って動かない...」という非常に厄介な状態になっています。これが禍根になりそうだったので、今回の記事を書くに至りました。1時代に使用されていた手法です。Deployと通常のCLIのDenoではサーバーの書き方が全く異なるものでした。HTTP前述の旧std/httpのサーバーのパフォーマンスが悪かったことにより、Deno自体にHTTPサーバー機能が組み込まれるに至ったものです。1.9で導入され、1.13で安定化しました。サーバーにも使用されており、実績を積んでいました。Deployでも使えるようになり、CLI側と同一の記述でサーバーを書けるようになりました。2のリリース記事でも、この書き方が使われています(前述のaddEventListenerも混在しています)。https://deno.com/blog/deploy-beta2/この1.13時点では、Denoのサーバーはネイティブのものを利用するよう統一され、std/httpは廃止される見通しとなっていました。0.107にて、ネイティブHTTPを使用するlistenAndServeが追加され、削除どころか推奨手法に返り咲きました。awaitが入っている...という少し複雑な構造でしたが、listenAndServeがそのあたりをラップしたことで、高いパフォーマンスを得つつ、より簡単にサーバーを記述できるようになりました。3のリリース記事では、こちらの記法が使われています。現行版そして時は現代。最新の手法が、本記事で紹介しているstd/httpの新serveメソッドです。1.16のリリース記事では、fetchメソッドの更新について紹介する部分で、この記法がしれっと使われています。https://deno.com/blog/v1.16経緯このメソッドは以下のPRで提案されています。ネーミングには自身がないけど」で、そこで議論があり、以下のPRにて実装が取り込まれ、同時にlistenAndServeが@deprecatedとなりました。https://github.com/denoland/deno_std/pull/1506おわりに以上、Denoのサーバーの書き方と、その歴史でした。DeployもBetaなので、推奨手法はガンガン変わっていっています。このため、途中にも書きましたが、「お手本と記述が同じなのに動かない」ことが起こりえます。公式の最新版以外の資料を参考にする場合は、作成日・更新日を確認のうえ、注意して利用しましょう。Deployトップページに掲載されているサンプルスクリプトも更新されていない状態なんですけどね...。この記事は公式より先を走っているhttps://deno.com/deploy/ツイートkawarimidollバトルオペレーション!セット!イン!!バッジを贈って著者を応援しようバッジを受け取った著者にはZennから現金やAmazonギフト券が還元されます。新しいのか古いのか良くわからない状態になっていました。いつもdeno関連の最新情報がまとまっていて助かります。あとは各ライブラリの対応が気になるところです。2021/11/14コメントありがとうございます。私も読み込むまでは行っていませんが、各ライブラリの現時点の印象としてはこんな感じですね:oakstd/httpではなく、ネイティブHTTPサーバーを直接使用しているっぽいので今回の変更の影響はなさそう:https://github.com/oakserver/oak/blob/5ad9c828368b1faa530ec481c7a445f5e11187cd/http_server_native.ts#L214しかし、使用している各種stdのバージョンは0.107.0で、最新版に追従できていないdrashstd@0.113.0/http/server.tsを使用しているため、今回の更新の対応が必要になりそう実際listenAndServe()を使っている:https://github.com/drashland/drash/blob/98139b11f2067f49fdbb26ed15e139aa078eab4c/src/http/server.ts#L155この辺の確認には、とりあえずdeps.tsを見るのがオススメです。現行版おわりにZennエンジニアのための情報共有コミュニティAboutZennについて運営会社お知らせ・リリースGuides使い方Publicationよくある質問LinksTwitterGitHubメディアキットLegal利用規約プライバシーポリシ。