1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Deno REPL を計算機として活用する

1
Posted at

Deno REPL を計算機として活用する

概要

Windows上の計算機用途で AutoHotkey というツールで Deno を起動するプログラムを生成しました。

日常的に行うちょっとした計算式を、Excelや標準の「電卓」、あるいはGoogle検索に入力する際の「コンテキスト・スイッチ」の重さは無視できません。思考を止めず、なるべくキーボードから手を離さず、かつ「プログラマブル」な計算ができることは技術者にとって大事なポイントです。

Deno REPL は Node.jsよりも軽量で、一瞬でプロンプトが立ち上がり、数式を入力してEnterを叩くだけで計算結果が表示されます。この Deno REPL を起動するスクリプトを AutoHotkey でパッケージ化し、タスクバーに配置することで起動までのコストを最小にできます。

denorepl1.gif

背景

Excelや「電卓」アプリは、非常に便利なツールで、私も多様しています。ただ、ちょっとした数式を解きたい場合で、Excelでは重く、電卓ではもの足りない場面は少なくありません。

Deno REPLを使うとBigInt (巨大整数)、Math オブジェクト、最新のJavaScript/TypeScript構文がそのまま使えます。日常的な用途に併せて様々なカスタマイズ、自動化が可能です。特殊なライブラリを入れずとも、URLエンコードや日付操作が標準APIで完結します。さらに変数や関数を定義したまま何度でも参照でき、履歴で式をやり直せます。

Windows 環境の Deno REPL は cmd.exe から起動されます。計算機用途としては多重起動しない方が使い勝手が良いのですが、Deno 単体でこれを制御するのは困難です。プロセス名では区別ができないので、ウィンドウタイトルの取得やアクティベートが簡単にできる必要があるからです。この課題は、AutoHotkey というツールを使えば簡単に解決できます。

AutoHotkey は、Windows 上でキーボード・マウス・ウィンドウ操作などをスクリプトで自動化するためのスクリプト言語兼ランタイムです。以下のような特長があります。

  • Windows 専用の軽量スクリプトランタイムで、拡張子 .ahk のテキストスクリプトを実行できます。
  • スクリプトをコンパイルして Exe ファイルを作る機能があります。
  • ホットキーを定義して、スクリプトを起動する使い方が一般的です。
  • Windows ネイティブ向けに特化しており、レジストリやウィンドウメッセージ、クリップボードなど OS 機能へのアクセスが非常に広い範囲で可能です。

開発内容

  • Deno を起動する AutoHotkey スクリプトを作成します
  • アイコンファイルを指定し、Ahk2Exe for AutoHotkey で Exe ファイルを作成します
  • ショートカットを登録します

開発手順

1. 環境を整える

2. AutoHotkey スクリプトをテキストエディタで書く

スクリプトのこだわりポイント

  • すでに起動していれば、そのウィンドウを前面に出す(計算履歴を保持できる)機能を実装しています。Deno は cmd.exe 上で動かすので title Deno REPL と明示することで、他のコマンドプロンプトと混同させずに済みます。
  • データファイルの読み書きができるよう Deno に File IO を許可しています。
  • あらかじめグローバル関数を定義することで回答を得るまでの時間を短縮できます。この作例では 5 つの関数を定義しています。
    • n3(n): n を 3 桁区切りの文字列にフォーマットする
    • jpy(n): n を先頭に ¥ を付けた 3 桁区切りの文字列にフォーマットする
    • total(...args): args の総和を返す
    • avg(...args): args の平均を返す
    • std(...args): args の標準偏差を返す

AutoHotkey スクリプト例

; Deno のコンソールウィンドウがあるか確認
if WinExist("Deno REPL") {
    ;タイトルにDeno REPLを含むウィンドウがあると誤作動するが許容する
    WinActivate
} else {
    Run (
        'C:\Windows\System32\cmd.exe /k title Deno REPL & deno repl --allow-read --allow-write --eval "'
        ' const n3 = n => (typeof n === \"number\" || typeof n === \"bigint\") ? n.toLocaleString() : n;'
        ' const jpy = n => new Intl.NumberFormat(\"ja-JP\", { style: \"currency\", currency: \"JPY\" }).format(n);'
        ' const total = (...args) => args.reduce((sum, n) => sum + n, 0);'
        ' const avg = (...args) => total(...args) / args.length;'
        ' const std = (...args) => {'
        '   const m = avg(...args);'
        '   return Math.sqrt(total(...args.map(n => (n - m) ** 2)) / args.length);'
        ' };'
        '"'
    )
}
ExitApp

3. Ahk2Exe for AutoHotkey で Exe ファイルを作成する

  1. Source フィールドに先のスクリプトのファイルを指定します。
  2. Custom Icon フィールドに Deno の アイコンファイル を指定します。
  3. Convert ボタンをクリックするとスクリプトのフォルダに Exe ファイルが生成されます。

Ahk2Exe

4. タスクバーにショートカットを登録する

生成した Exe ファイルの上で右クリックし、「その他のオプションを確認」「タスクバーにピン留めする」を選択するとタスクバーにショートカットが登録されます。(Windows 11 24H2 の場合)

このショートカットをタスクバーの左端に登録しておくと、Wind1をタイプすることでキーボードだけで起動できるようになります。

REPLならではの利用例

  • n3(1 << 30) * 4 4GBって何バイトだっけ?
  • total(120, 450, 300) ちょっとした合計値を出したい
  • new Date(1738234800000).toLocaleString() このログの時刻、日本時間でいつ?

まとめ

このツールを用意するまでは、たいていExcelで計算していました。起動や転記に時間がかかる点がストレスだったのですが、Deno導入により解消しました。お勧めです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?