サンプルフックのシェバンをポータブルに変更

basecamp/kamal

Kamal のサンプルフックスクリプトの shebang#!/bin/sh から #!/usr/bin/env sh に置き換えることで、/bin/sh が存在しない環境でもスクリプトが実行できるようになりました。

背景

一部のシステム(NixOS や特定の BSD 系)では /bin/sh がデフォルトで提供されておらず、従来の shebang ではフックが起動できませんでした。この制限は実運用でのデプロイ自動化に支障を来す可能性があります。

この PR は、サンプルフックが既に Ruby 用に #!/usr/bin/env ruby 形式を採用していることに倣い、シェルスクリプトでも同様のポータビリティを確保することを目的としています。

技術的な変更

対象ファイルは lib/kamal/cli/templates/sample_hooks/ 配下の全 7 件です。各ファイルの先頭行を次のように置換しました。

変更前:

#!/bin/sh

変更後:

#!/usr/bin/env sh

他のサンプルフック(post-app-boot.sample, post-deploy.sample, post-proxy-reboot.sample, pre-app-boot.sample, pre-build.sample, pre-proxy-reboot.sample)も同様に 1 行目を置換しています。機能ロジック自体は変更されておらず、実行メッセージはそのまま保持されています。

置換に伴うロジック変更はなく、単純なテキスト差分であるため、既存のフック利用者への互換性リスクは最小限です。

設計判断

ポータブル shebang の採用 という方針は、Kamal の他言語サンプルでも一貫している点から、設定の統一性とユーザビリティ向上を意図した設計判断といえます。#!/usr/bin/env sh は実行時に $PATH から sh を探索するため、環境依存のパス指定を排除します。

この変更は、追加の条件分岐や設定項目を導入せず、単に文字列を書き換えるだけなので、コードベースへの負荷は極めて低く、保守コストも増加しません。代替案として新しいテンプレートキーを導入する議論もありましたが、既存ファイルの直接置換が最もシンプルで後方互換性を保ちやすいと判断されました。

まとめ

Kamal のサンプルフックで shebang を #!/usr/bin/env sh に統一したことにより、/bin/sh が存在しない環境でもスクリプトが正しく実行できるようになり、デプロイ自動化のポータビリティが向上しました。変更はテキスト置換のみで、既存機能への影響はなく、設計上の一貫性も保たれています。

記事メタデータ

Generated by:
gpt-oss-120b for DiffDaily
LLM Trace:
7db392a3

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
gpt-oss-120b for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文→背景→技術的変更→設計判断→まとめの5部構成があり、総論・各論・結論が明確に分かれている。

カスタムMarkdown構文 ⚠ WARNING

シンタックスハイライト・GitHubリンク記法の正確性

ファイル名付きシンタックスハイライトは正しい形式。PRリンクは `[PR #1815](URL)` と記載されており、#付きではあるが推奨の `[#1815](URL)` 形式から若干逸脱している。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

エンジニア向けの専門的な内容で、初心者向けの冗長な説明はない。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションは総論パラグラフ・各論パラグラフ・結論パラグラフで構成され、段落は1トピック・6文未満で空行で区切られている。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事中のコードブロックはDiffに記載された `#!/bin/sh` → `#!/usr/bin/env sh` の置換を正確に示している。追加のコンテキスト行は省略されているが、変更点は一致。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

shebang, portable, `#!/usr/bin/env sh` などの用語はPRと一致し、誤用はない。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

ポータビリティ向上や互換性リスク最小化の説明はPRの内容と合致している。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

記事の全ての主張はPRタイトル・説明・Diffで裏付けられており、根拠のない推測はない。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR番号 #1815 が正確に記載されている。その他数値・固有名詞の誤りはなし。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

日本語タイトルは PR の「fix: use portable shebang in sample hooks」の意味を的確に表現している。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

LTSやリリース日程など、PRに記載されていない外部情報は含まれていない。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

時間表現に関する記述はなく、PRと矛盾する表現もない。