ちょっとしたCLIツール書いた際にどのように配布していますか?
利用者目線で考えると、OSSにしてパッケージ管理ツールを用意すればすぐ使ってもらえそうです。
とはいえ制作者目線で見ると、たった1ファイルくらいのものの場合、リポジトリを用意して設定ファイルを置いて〜というのもちょっと面倒なこともあります。
また社内向けには認証が必要なので、「git cloneしてディレクトリ移動して実行して〜たまに最新にして〜」などを案内するなども必要なこともありました。
そういった手間が必要な課題を解決するため、最近は社内向けのツールを含めdenoを使い始めました。
結論
スクリプトのtsファイルを書いたら以下のコマンドの形式で伝えれば完成です。
DENO_AUTH_TOKENS=$(gh auth token)@raw.githubusercontent.com deno https://raw.githubusercontent.com/cohalz/tools/e53a15512b87886b24621c67196700de9218afb9/hello.ts
上のコマンドを実行するとHello, Deno!と表示されるはずです。
これはパブリックリポジトリでも組織プライベートリポジトリでもGitHubのリポジトリに置いて指定してやればすぐ使ってもらえます。(パブリックリポジトリの場合はDENO_AUTH_TOKENSは不要)
この呼び出しを基本としていくつか用途に合わせてオプションを変えてやれば良いです。
信頼できるスクリプトであればDeno 2.6で追加されたdx(deno x)コマンドを利用しても良いと思います。
解説など
denoコマンド(deno run)はURL指定でそのままスクリプトを実行できます。
ちなみにURLを指定した場合は、初回実行のみダウンロードが実行され以降はキャッシュから実行されます。
キャッシュファイルの場所は deno info | grep 'Remote modules cache'とかで確認できます。
最新の内容に更新する
-r(--reload)オプションをつけることでキャッシュを無視して再ダウンロードが可能です。
このreloadオプションをを使うことで、提供者がツールを更新したらすぐ利用者にも新しいものを使って欲しい場合に便利です。URLにはmainブランチなどを指定しておいて提示するコマンドも deno -r オプションをつけることで毎回最新のスクリプトを実行してもらえます。
逆に勝手に更新して欲しくない場合はスクリプトのURLをコミットハッシュなどにしておくなど推奨です。
プライベートリポジトリのコードを実行する
最初に提示したように以下の変数を設定することでプライベートリポジトリのコードをすぐ実行できます。
DENO_AUTH_TOKENS=$(gh auth token)@raw.githubusercontent.com
DENO_AUTH_TOKENS はdenoで認証が必要な場合にこの変数にトークンを含めることで解決できるというものです。(ドキュメント)
これはモジュールだけでなく、ツールの実行にも使えます。
これに gh auth token というGitHub CLIで利用しているトークンを表示するコマンドを合わせることでトークンを発行したり管理する手間なくプライベートリポジトリのコードを実行することができます。(ドキュメント)
もし権限がない場合には gh auth status とかで現在のトークンの権限が確認できます。
作ったもの紹介
せっかくなので最近denoで書いたOSSのCLIツールも紹介します。READMEなど整備できてないですがすぐ使えます。
mackerel-alert-stats.ts
期間を指定してその期間にあったMackerelのアラートの履歴を集計し、合計時間やMTTR、稼働率(アラート合計時間を期間で割ったもの)をCosense(Scrapbox)形式で出してくれるツール。 前の期間との比較も括弧内に出してくれるので、定期的に見て変化があったかを確認する用途に使えます。(本当はグラフとかにしたいですが)
table:2025/12/5 17:01:55 ~ 2025/12/19 17:01:55の集計 (前期間: 2025/11/21 17:01:55 ~ 2025/12/5 17:01:55) 監視名 回数 MTTR(分) 稼働率(%) Alert1 8(+0) 3(+2) 99.88(-0.08) Alert2 2(-4) 5(-5) 99.95(+0.25)
mackerel/list_monitors.ts
Mackerelの監視ルールを「スコープもしくは監視名」か「通知グループに紐づいたもの」で絞り込んで表示できるツール。
org内に複数サービスがあった際に、このサービスどういう監視があるんだっけ?とかチームで管理してる監視ルールってどれだっけ?とかを確認するのに使えます。
github/make_team_maintainer.ts
GitHubのorgとユーザを指定して、org内でそのユーザが所属するチーム全てにmaintainer権限を設定するスクリプト。
GitHubでは組織でOwnerからMemberに変更する際にチームのmaintainer権限も失うケースがあるため、再設定をするスクリプトです。これ自体は需要は少ないけどチーム一覧に何かするみたいなのを作りたい時に使えるかも?
以下の記事の対応を進めている際に作りました。
おわり
そんな感じでdenoでCLIツールを書く話でした。リポジトリ構成やファイル名なども気にせず雑多にスクリプトを置いてすぐ実行してもらえるという気軽さが気に入ってます。
denoは権限を明示的に許可しないとファイル操作や通信もできない状態なので、「外部のよくわからないスクリプトを実行して事故になってしまう」みたいなリスクも一段階落とせるのも嬉しいですね。
というわけで はてなエンジニア Advent Calendar 2025 の1月1日の記事でした。
前日のエントリーはこちらです。 developer.hatenastaff.com











