blog top

Deno をシバンで実行する

これは 日本CTO協会24卒 Advent Calendar 2024 の7日目の記事です!

普段使いのスクリプトを書く時、皆さんはどんな言語で書いていますか?

シェルスクリプトに馴染みがある方は、以下のような記述を見たことがあると思います。

hello.sh

このようなスクリプトの先頭の#!から始まる行をシバン(shebang)と呼びます。

シバンを書くことで、OSに対してプログラムを実行するインタプリタを指定することができます。

つまり、先程のスクリプトは

bash hello.sh

でも実行できますが、シバンを書いているおかげで

./hello.sh

としてファイル名のみで実行することができます。

(ただし、chmod +x hello.shとして実行権限を付与しておく必要があります。)

TypeScript でもシバンを使いたい

シェルスクリプトは可搬性が良く便利ですが、自分のPCで動かす使い捨てのスクリプトなら、好きな言語で書きたいですよね!

自分はTypeScriptが好きなのですが、DenoはTypeScriptをそのまま(トランスパイルせず)実行できるので、もしかしたらシバンも使えるのでは?と思いました。

実際にDenoのドキュメントにはシバンをつけて実行する例があるので、試してみましょう。

hello.ts

実行する際は、以下のようにします。

chmod +x hello.ts
./hello.ts

hello.tsの実行結果

もっと Deno らしいことをする

試しに、私の1つ目の記事のタイトルを取得するスクリプトを書いてみましょう。

いわゆるスクレイピングですが、DenoのfetchDOMParserを使って簡単に書けます。

#!/usr/bin/env -S deno run -A
import { DOMParser } from "jsr:@b-fuze/deno-dom";

const blog = await fetch("https://blog.bigdragon.tech/articles/launch-blog");
const dom = new DOMParser().parseFromString(await blog.text(), "text/html");

const title = dom.querySelector("h1");
console.log(title?.textContent);

このスクリプトをdom.tsとして保存し、実行してみましょう。

dom.tsの実行結果

まとめ

今回はTypeScript(Deno)で書かれたスクリプトを、シバンを使って実行してみました。

みなさんが好きな言語もシバンに対応しているかもしれません。ぜひチャレンジしてみてください!