`deno compile --no-terminal`を使いたいときはmacOSを使おう
この記事は、Deno Advent Calendar 2023の18日目です。
deno compile
とは
Deno本体が有する、JavaScirptファイルを単一実行可能ファイルにコンパイルするコマンドです。
--target
を付与することでWindowsやmacOS、Linux向けにコンパイルできるため、コンパイルするのにわざわざそのOSを用意する必要もありません。
--include
を付与することでWorkersを含めてコンパイルすることもできます。
詳細は上記の公式ドキュメントを御覧ください。
ちなみに、Node.jsもv19.7.0で単一実行可能ファイルのコンパイルに対応しました。
これはNode.jsのリリースもやられているRuy Adornoさんのスライドにも書かれています。
担当チームのブログでは、Denoが引き合いに出されていました。
deno compile --no-terminal
とは
デフォルトでは、Windowsに向けてdeno compile
をするとターミナルが背後に表示されるようになっています。
これはWindowsの単一実行ファイルのヘッダーにあるSubsystemフィールドの部分が2になっていなかったのが原因のようで、以下のPRで修正され、v1.36.0で--no-terminal
が追加されました。
しかし、v1.39.0現在、このフラグは正常に動作していません。
--no-terminal
をつけるとアプリが表示されない
WindowsとWSLで検証当時はv1.38.0で、Ubuntu on WSL 2でコンパイルしたところ発覚したためIssueを提出しました。
その後、v1.39.0とリリース時のv1.36.0でコンパイル結果を確認しましたが、私の環境下ではWindows 10とUbuntu on WSL 2でアプリが表示されないという事象が確認されました。
macOSであれば問題ないようです。
GitHub Actionsで解決
せっかくdeno compile
が手持ちのOSに依存しない仕組みになっていても、ここで『macOSでしか--no-terminal
が動かないから実機を準備』となっては意味はありません。
そこで、手元にないmacOS環境に頼ります。
GitHub ActionsはmacOSをサポートしているため、わざわざ実機を準備する必要はありません。
この環境を利用することで、--no-terminal
が適用されたアプリが表示されるはずです。
最後に
以上が、私が遭遇したdeno compile
の挙動の話でした。
近いうちに、この挙動に遭遇したときの制作物についても書きたいと思います。
誰かの開発の一助となれば幸いです。
お読みいただき、ありがとうございました。
Discussion