BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Bun、JavaScriptとTypeScriptによるクロスプラットフォーム・シェルスクリプティングを発表

Bun、JavaScriptとTypeScriptによるクロスプラットフォーム・シェルスクリプティングを発表

原文リンク(2024-02-22)

BunのCEO兼創設者であるJarred Sumner氏は最近、JavaScriptとTypeScriptの開発者にクロスプラットフォームのシェルを提供するBun Shellのリリースを発表した。このリリースは、JavaScriptおよびTypeScriptでのシェルスクリプトの実行を簡素化することを目的としており、glob、環境変数、リダイレクト、パイピングなどの機能を提供するbashライクな環境を提供する。このリリースはアルファ版であり、将来的に変更される可能性がある。

Node.jsにシェル・コマンドを組み込むことは、開発者にとって必ずしも簡単なことではなかった。child_processモジュールは機能的だが、セキュリティ・リスク、特にサニタイズされていないユーザー入力を処理する際のリスクがあり、使いやすさに欠ける。一方、fs/promiseモジュールは非同期ファイルシステム操作を提供するが、一般的なシェルコマンドの直接的な代用品としては不十分だ。このギャップを埋めるために、開発者コミュニティはshelljsやrimrafといったパッケージに注目している。

Bun Shell APIは、スクリプティング体験を向上させるために設計されたさまざまな機能を導入している。まず、クロスプラットフォームの互換性を確保し、Windows、Linux、macOSで作業する際に追加の依存関係を必要としない。さらに、bashのような環境を採用し、シェルスクリプトで確立された慣例に沿った使い慣れた構文を提供する。現在、"ls"、"cd"、"rm "といった重要なコマンドをネイティブでサポートしている。また、**、*、{expansion}などのglobパターンをネイティブでサポートしており、コマンド作成の柔軟性を高めている。Bun Shellのテンプレートリテラルは、変数や式を簡単に補間してシェルコマンドを実行できる。セキュリティ上の理由から、すべての文字列はデフォルトでエスケープされ、シェルインジェクション攻撃のリスクを軽減している。

Sumner氏は、Bun Shellの多用途性と機能を次のように強調している。

Windows、macOS、Linuxで動作する。glob、環境変数、リダイレクト、パイピングなど、多くの一般的なコマンドや機能を実装している。

JavaScriptの補間も特筆すべき機能で、Response、ArrayBuffer、Blob、Bun.file(path)、その他stdin、stdout、stderrなどのJavaScriptオブジェクトを使用できる。この統合により、スクリプト内で多様なデータタイプを扱うことができる。

メッセージのエコーなど基本的なことから始めるには、$テンプレートリテラルタグを使用する。

    import { $ } from "bun"    await $`echo "Hello World!"`; // Hello World!   

テキストとして出力にアクセスするには、.text() メソッドを使用する。

    import { $ } from "bun"    const result = await $`echo "Hello World!" | wc -w`.| wc -w`.text()    
    console.log(result); // 2   

先日発表されたBun Shellのリリースについて議論している Redditのスレッドで、Redditユーザーのu/nonloginが質問を投げかけた。

zxと比べてどうなのか?

これに対し、u/TheUnlockedはBun Shellとzxの違いを強調し、次のように述べた。

Bunのバージョンは完全に新しいシェルで、bashと似たような構文を持つ(しかしクロスプラットフォームで、バッファへのリダイレクトのような巧妙なことができる)。 一方、zxは既存のシェルを呼び出すための、より簡単かつ安全な方法だ。

BunのシェルAPIはzx、daxbnxにインスパイアされている。

作者について

この記事に星をつける

おすすめ度
スタイル

BT