Amberでbashスクリプトが本格的なプログラミングになる
通常のbashスクリプトが50行を超えてくると、コードベースの中で静かな悪夢が始まります。変数のクォート、条件式の括子の前後のスペース、予測不能なエラー処理、本番でスクリプトが実行されるまでコンパイラが完全に沈黙する——这些问题が発生します。私たちは、PythonやNode.jsのようなランタイムをインストールせずにシェルスクリプトがどこでも動作するという事実を受け入れてきました。
最近Amberを発見しました——コードを直接クリーンなBashに変換する高級プログラミング言語コンパイラです。このアイデアは非常に実用的で、なぜもっと早く実現しなかったのかと思わずにはいられません。
このプロジェクトとは何か、なぜ必要なのか
Amberは馴染みのある課題を解決します:開発者にモダンな構文、厳格な型付け、コンパイル時のチェック、便利な文字列処理を提供しながら、最終成果物は通常のテキストスクリプトのままにします。生成された.shファイルは、任意のLinuxサーバーにドロップしたり、最小限のDockerコンテナ内で実行したりできます。そこに必要なのは標準のBashインタープリターだけです。
コンパイラはRustで書かれており、高速に動作し、安全モードを有効にすると読みやすいシェルコードを生成します。set -e
Amberのコード是什么样的
言語の構文は、Rust、TypeScript、おなじみのシェルコマンドの良い点を採用しています。すぐに目を引くいくつかの注目すべき機能を紹介します:
適切な型付けと明確な変数
exportの魔法とエスケープの代わりに、通常の型があります:Text、Num、Bool、そして配列です。
let name = "Alex"
let age = 30
let is_admin = true
echo "Пользователь: {name}, возраст: {age}"
コンパイラが自動的に型をチェックし、文字列を数値が予期される場所に渡すことができません。
シェルコマンドの安全な実行
言語の主な機能は、システムユーティリティとのシームレスな統合です。コマンドはコード内で直接$シンボル内またはブロック内に記述され、コンパイラが戻りコードを監視します。
let output = $curl -s https://api.github.com$ failed {
echo "Ошибка загрузки данных"
exit 1
}
echo "Полученный ответ: {output}"
failed構文は、コマンドがゼロ以外のステータスで終了した場合のシナリオを明示的に処理することを強制します。誰かがユーティリティの終了コードの確認を忘れたために、デプロイの途中で予期せずクラッシュすることがなくなります。
戻り値を持つ適切な関数
純粋なBashでは、関数は数値ステータスまたはstdoutへの出力(stdout経由のecho)を除いて、適切に値を返すことはできません。Amberでは、関数はプログラマーが期待する方法で動作します:
fun calculate_disk_usage(path: Text): Num {
let raw = $df {path} | awk 'NR==2 {print $5}' | tr -d '%'$?
return parse_num(raw)
}
実践での活用場所
Amberは主にクラウドインフラと自動化のために設計されました。
- CI/CDパイプライン。YAMLの3行ではビルドステップが複雑になり過ぎるが、依存関係のあるPythonを持ち込みたくない場合。Amberは開発マシンまたはCIランナー上で単一のバイナリをビルドし、準備完了の
.shをターゲットシステムに送ります。 - cloud-initとVM初期化スクリプト。サーバー準備スクリプトは環境変数のタイプミスのせいで失敗することがよくあります。コンパイル前の静的解析により、クリーンインスタンスを数十回再起動する羽目から守られます。
- サーバーシステムユーティリティ。任意のサーバーで確実に動作し、サードパーティパッケージをインストールせずに実行できる、信頼性の高い監視ツールやログローテーションスクリプトの作成。
玉にきず
プロジェクト作者はリポジトリの冒頭で正直に警告を掲げています:この言語はまだ активно開発中で、大規模な本番環境には 준비されていません。構文はこれからも変更される可能性があり、チームは現在シェルコード生成のいくつかの珍しいエッジケースを磨いているところです。
実際の業務でAmberを試すことを決めたら、生成されたbashコードをクリティカルなマシンで実行する前に必ず確認することをお勧めします。幸いなことに、生成されたスクリプトは開いて理解可能なままです。
試してみる価値はあるか
regularly write automation in Bash and are tired of catching strange bugs with quotes and spaces — definitely yes. Amber gives you the feeling of proper modern development where before you had to fight with a thirty-year-old standard. Try rewriting a couple of helper scripts from your CI to see the difference in readability and reliability.
関連プロジェクト