15 ポイント 投稿者 GN⁺ 2024-01-15 | 7件のコメント | WhatsAppで共有

#!とは何か?

  • #!(シバンと読む)は、Unix で主に Python や Bash のようなスクリプト言語のために使われる慣習
  • これを利用して、クロスプラットフォームおよび複数の Linux ディストリビューション向けにアプリケーションを配布する方法を、単一ファイルとしてパッケージ化した事例の紹介
  • サンプルの Dockerfile は、バックエンド、データベース、UI をすべて含むフルスタックサーバーを単一ファイルで構成している
  • Cosmopolitan Libc に似ているが、アプリケーションのパッケージングを目的としている

なぜ使うのか?

  • 使わない理由があるだろうか?

安全か?

  • おそらく安全ではない。

使うべきか?

  • 使いたければ使える。

性能は良いか?

  • 可能性はある。

保守可能か?

  • いいえ。

動くのか?

  • はい。

どう実行するのか?

  • 次のコマンドで実行できる: chmod +x ./Dockerfile ./Dockerfile
  • その後、http://127.0.0.1:8080 にアクセスする。

GN⁺の意見

  • この記事は、#!(シバン)を使って単一の Dockerfile にフルスタックサーバーをパッケージングするユニークな方法を紹介している。
  • 技術的な好奇心を刺激し、従来のアプリケーション配布方法に対する新しいアプローチを提示している。
  • この方法は保守性と安定性の面では推奨されないが、実験的で革新的なプロジェクトに関心のある開発者にとっては興味深い代替案になり得る。

7件のコメント

 
minhoryang 2024-01-17

<<EOF のような heredoc を使うには、Dockerfile の先頭に # syntax = docker/dockerfile:1.4.0 が必要です。驚くべきことに、syntax も docker registry から取得されます。

 
pmc7777 2024-01-16

わあ……今年最大の精神的衝撃ですwwwwww

 
arfwene 2024-01-15

面白いやり方ですね

 
bbulbum 2024-01-15

笑笑…本当に斬新ですね

 
sagee 2024-01-15

わあ……これは斬新ですね。まるで鉄筋とコンクリートの組み合わせを発見したような……というのはちょっと大げさですが、いいですね。
#! のシバンがちょうど Dockerfile では # がコメント文字だから、こういう裏技が効くとは……。
これからは build-run-test.sh みたいな別ファイルの代わりに、Dockerfile に入れればよさそうですね。

 
GN⁺ 2024-01-15
Hacker Newsのコメント
  • nix-shell shebang の使用例

    • nix-shell shebang を使って、必要な依存関係をすべて含む実行可能スクリプトを作る方法を説明している。
    • 画像を 50% 縮小する Python スクリプトの例を示している。
    • スクリプトに実行権限を付与すると(chmod +x)、指定した依存関係を持つ実行ファイルになる。
  • /usr/bin/env-S / --split-string オプション

    • GNU Coreutils 8.30 以降で利用可能な -S オプションについて説明している。
    • このオプションは標準ではない動作に依存しており、すべてのテキストを実行ファイルの引数として扱う OS でのみ動作する。
    • ほとんどの現代的な GNU/Linux、BSD、macOS ではこの非標準動作が機能する。
  • Docker とアーキテクチャ互換性

    • Docker は実際には Linux 以外のプラットフォームでは Linux VM を必要とすると指摘している。
    • Linux コンテナは優れているが、Docker を真のクロスプラットフォームソリューションと見るのは難しい。
  • 単一ファイルアプリケーションに関する意見

    • 単一ファイルにアプリケーション全体を含めるというアイデアを称賛している。
    • Docker の複雑さを批判し、セキュリティやバージョン管理のためにコンテナを使うことに疑問を呈している。
    • WebAssembly(WASM)がこうした問題を解決できるのかという疑問が出ている。
  • Docker の代替として Podman と bubblewrap に言及

    • Docker の代わりに Podman や bubblewrap を使うほうがよい場合があると述べている。
    • Podman は特定のディストリビューションへの依存がやや強く、bubblewrap は一部のディストリビューションではセキュリティ上の問題から含まれていない可能性がある。
  • heredocs を使った単一ファイルプロジェクト

    • clever shebang がなくても、heredocs を使って任意の言語やインフラ向けの単一ファイルプロジェクトを作ることができる。
    • bash スクリプトとしてパッケージ化された同じアプリの例を示している。
  • 「単一ファイル」への執着に対する批判

    • すべてを 1 つのファイルにパッケージ化する代わりに、ディレクトリを使って自己完結型アプリケーションを作れると指摘している。
    • 単一ファイル化が必ずしもより良い方法とは限らないと述べている。
  • 自己消費型スクリプトのパターン

    • スクリプト内に別のインタープリタスクリプトを埋め込み、sed を使ってタグ間のスクリプトを抽出する方法を説明している。
    • こうした方法はときに非常に有用だが、複雑になり得ることも認めている。
  • shebang の位置で guix shell を使う方法

    • Guix マニュアルから持ってきた guix shell の使用例を示している。
    • より複雑な環境を指定するマニフェストファイルと組み合わせて動作する。
  • 自己ビルドして実行される Dockerfile

    • 2021年11月に書かれた、自己ビルドして実行される Dockerfile についての説明とサンプルコードを示している。