概要
- 手動コマンド入力 から スクリプトファイル運用 への移行による効率化
- make.ts のような一時スクリプトファイル活用の提案
- コマンド履歴依存から脱却し、 再現性・編集性 向上
- Deno+dax 等のモダンなスクリプト環境の活用
- スクリプトの 漸進的発展 によるワークフロー改善
シェル履歴からスクリプトファイル運用へ
- これまで Up Enter Up Up Enter のような履歴呼び出しでコマンドを繰り返し実行していた運用
- 複雑なコマンド列 や マルチプロセス環境 では手動入力が非効率
- make.ts のような(gitignore対象の)一時スクリプトファイルを用いる新しいワークフローへの転換
- コマンドを直接ターミナルで入力せず、 まずファイルに書いてから実行 する習慣
- この方法は 「ちゃんとしたスクリプト」作成を推奨するものではなく、あくまで一時的な作業記録と再利用を目的
スクリプトファイル運用のメリット
- 長いコマンドや複数コマンド も2Dエディタで編集可能
- 一度に複数コマンドを記述し、 一発実行 できる利便性
- コマンド列を 段階的に改善・洗練 しやすい
- 再現性の高い作業 や 将来的なスクリプト化 へのスムーズな移行
- マルチプロセス管理 や 並列実行 の容易さ
- 履歴依存からの脱却 によるワークフローの安定化
スクリプトファイルの運用方法
- 一貫したファイル名 (例: make.ts)をプロジェクトルートに配置
- .git/info/exclude(共有されないgitignore)で除外
- コマンド実行履歴 (例: ./make.ts)をシェル履歴に保持し、オートサジェスト活用
- シバン (例: #!/usr/bin/env -S deno run --allow-all)を先頭に記述し、chmod a+xで実行権限付与
- 自分が慣れた言語 (TypeScript推奨)で記述
- サブプロセス起動 や 並行処理 が容易な言語
- Deno+dax や Bun、 zx などのモダンなスクリプト環境
- daxは シェルを介さず直接プロセス起動 できる点が特徴
- async/await による並列実行サポート
JavaScript/TypeScriptによるスクリプト例
- Tagged Template によるコマンド記述
- 例: $
ls ${dir}のような書き方で、コマンドと引数を明確に分離
- 例: $
- daxライブラリ を使ったサブプロセス管理
- Promise.all で複数コマンドの並列実行
実践例:TigerBeetleクラスタのベンチマーク
- 複数マシンでの一連の手順 (ビルド、配布、フォーマット、起動)をスクリプト化
- コマンドの追加・修正も ファイル編集のみで即反映
- ベンチマークとクラスタ起動の並列実行 も簡単
- for文や関数化 でスクリプトの拡張性確保
- パラメータマトリクス による自動化ベンチマークスケジューリング
漸進的なスクリプト化の価値
- 最初は 一時的なコマンド集 として活用
- 作業を進めるうちに 徐々に本格的なスクリプトへ発展
- 複数ターミナルや履歴編集の手間 を大幅削減
- 再現性・保守性の高いワークフロー の確立
まとめ
- シェル履歴 に頼らず、 まずファイルにコマンドを記録
- 一時的なスクリプトファイル運用 が効率化・再現性・拡張性を実現
- 現代的なスクリプト環境 (Deno、Bun、TypeScript+dax等)の活用推奨
そうだね。シェルはスクリプト言語としては最悪で、最初の
ifを「簡単な」スクリプトに入れなきゃいけない時とか、もうちょっと複雑な文字列操作をしなきゃいけない時に、選んだことを後悔し始めるんだよね。今はLLMがBashをJS/Python/Rubyにすぐ書き換えてくれるから、少しは楽になったけど。