Denoのキャッシュディレクトリを取得する関数を作った
コードを書いていると、情報をキャッシュしたいことはよくあると思います。
一時的なものであればカレントディレクトリに置いてしまってもよいのですが、別環境に持っていくことがあったり、別のプログラムから参照されたりする可能性がある場合、何らかのルールを決めておくと取り回しが楽です。
Denoは、CLIの情報を環境変数DENO_DIR
で設定されたディレクトリに保存しているので、自作ツールの情報もそこにキャッシュしてしまえばよいのではないかと考えました。
ですが、このパスは環境変数の設定状況やOS等によって異なりうるため、ハードコーディングしてしまうのは良くない気がします。
そこで、DENO_DIR
を取得する関数を作成しました。
deno infoで表示できる
このディレクトリは、deno info
コマンドで確認できます。
自分の環境では以下のような出力になりました。
❯ deno info
DENO_DIR location: "/Users/kawarimidoll/Library/Caches/deno"
Remote modules cache: "/Users/kawarimidoll/Library/Caches/deno/deps"
Emitted modules cache: "/Users/kawarimidoll/Library/Caches/deno/gen"
Language server registries cache: "/Users/kawarimidoll/Library/Caches/deno/registries"
Origin storage: "/Users/kawarimidoll/Library/Caches/deno/location_data"
上記のdeno info
の出力から DENO_DIR location:"~~~"
の部分を抽出すれば、DENO_DIR
の値を取得できます。
❯ deno info | grep DENO_DIR | sed -e 's/.* "//' -e 's/"$//'
/Users/kawarimidoll/Library/Caches/deno
JSで整形する
Denoスクリプトから使いやすいよう、上記の処理を行う関数を作成しました。
このコードは上記の通りGistで公開しているので、ファイルパスをimport from
に渡せば読み込むことができます。ちょっと長いけど。
import { getDenoDir } from "https://gist.githubusercontent.com/kawarimidoll/92179f60dfc67de3b0a52c5eb25ad333/raw/b193e088e47ee033a7d685ca6e9f45793bd26844/get_deno_dir.ts"
console.log(await getDenoDir());
内部でdeno info
コマンドを実行するため、--allow-run
権限が必要です。
❯ deno run --allow-run=deno ./deno_dir_sample.ts
/Users/kawarimidoll/Library/Caches/deno
あとはここに対してensureDir
でディレクトリを作ってwriteFile
でファイルを保存すればOKです。
おわりに
Denoが実行されている環境であれば、確実にこのディレクトリは存在するので、何らかのキャッシュをするときには使えると思います。
なお、既存のキャッシュ(deno info
の出力の2行目以降)はDeno自身が管理しているものなので、変更しないようにご注意ください。
Discussion