4 ポイント 投稿者 GN⁺ 2024-12-09 | 1件のコメント | WhatsAppで共有
  • 世界最大のシェルプログラム

    • akinomyoga/ble.sh: 合計61K LoC(46K SLoC)。Bash Line Editorであり、純粋な bash で書かれた fish 風のインタラクティブな行エディタ。主要ファイル out/ble.sh は30K LoC(23K SLoC)を含み、全体では60K+ LoCがある。日本語のコメントが多数含まれている。ble.sh の動作方法に関する概要があり、非常に洗練されたデータ構造の使用を示している。

    • kalua: OpenWRT アドオンで、約56K SLoC/行の POSIX シェルで構成されている。

    • bashdb: bash デバッガで、約14K 行の bash で構成されている。デバッガ実装の興味深い歴史を持つ。

    • drwetter/testssl.sh: 単一ファイルに21K 行の bash で構成されている。手作業で書かれたように見える。

    • Simplenetes: 17K 行の Shell で構成された Kubernetes。驚くべきことに、現在は非アクティブ状態。

    • rkhunter: 公式サイトでは、2003年から2018年の間に書かれた21K 行の Bourne シェル。

    • romkatv/powerlevel10k: ディレクトリ internal/ に12K 行の zsh スクリプトがある。さらに8K 行の設定および補助スクリプトがある。

    • dylanaraps/neofetch: 10K 行の bash 3.2 でシステム情報を表示する。

    • xwmx/nb: nb 自体に26K LoC(22K SLoC)の bash がある。さらに bats テストを bash として数えると、91K LoC(61K SLoC)がある。

    • distrobox: 7K 以上の bash スクリプトで構成されている。ターミナル内であらゆる Linux ディストリビューションを使える。

    • acme.sh: 7K 行のシェルスクリプトで、証明書を発行および更新する。

    • inxi 2.3.56 [obsolete]: 16K 行の bash で構成されている。2008年に infobash のフォークとして始まった。

    • bashforth: 約3800行で構成されているが、実際のプログラミング言語を実装している。

    • yoda: bashforth の半分の規模だが、完全なインタプリタとコンパイラを実装している。

    • vegardit/bash-funk: 合計27K LoC(24K SLoC)の Bash ライブラリ。

    • Relax-and-Recover: 35K LoC(24K SLoC)。バックアップおよび復元ツール。

    • abcde / A Better CD Encoder: CD リッピングに使われ、約5.5k LoCで構成されている。

    • thc-segfault: 3.3K LoC。主に Bash で構築された pubnix サーバー。

    • ffmpeg/configure: 8.4K LoC。FFmpeg の設定スクリプトで、手作業で書かれている。

    • ffhevc: 4k LoC。FFmpeg および libx265 を使って HEVC 動画へエンコードするための、完全に手作業の Bash ラッパースクリプト。

    • ffx264: 3.9k LoC。FFmpeg および libx264 を使って H.264/AVC 動画へエンコードするための、完全に手作業の Bash ラッパースクリプト。

    • h264enc: 9.2k LoC。MEncoder を使って H.264/AVC 動画へエンコードするための、完全に手作業の Bash ラッパースクリプト。

    • bashtop: 5.3k LoC。リソースモニタ。

    • halcyon: 6.6k LoC。Haskell アプリのインストールシステム。

    • winetricks: 22K 行のシェルスクリプト。Wine でさまざまな Windows プログラムをインストールする。

    • wordshell: 約7k 行のコード。コマンドラインから複数の WordPress サイトを管理する。

    • BaCon: 約10k 行のコード。BASIC で書かれたプログラムを C に変換する。

  • シェル系言語 / DSL

    • modernish: シェルで書かれた移植可能なシェル方言。

    • bats: テストを書くための DSL。bash コードを生成する。

    • bashible: bash における Ansible 風 DSL。

    • clash: 現代的な POSIX シェルと互換性のあるオブジェクト指向フレームワーク。

    • bash Infinity: bash のための標準ライブラリおよびボイラープレートフレームワーク。

  • 小さなプログラム

    • Alpine, Aboriginal, Debian scripts: ブログ記事を参照。

    • Completion scripts: 大きいが、しばしば反復的。

    • _git Zsh completion: 8.3k 行のコード。

    • git-completion.bash: Docker completion.

    • dyne/Tomb: 約3500行の zsh スクリプト。

    • Basalt: 純粋な Bash で書かれたフル機能のパッケージマネージャ(およそ2021年)。わずか数千行にすぎないが、すでに豊かなエコシステム(15以上のアプリ/ライブラリ)がある。

1件のコメント

 
GN⁺ 2024-12-09
Hacker Newsのコメント
  • Sonyで25年前、非常に遅く頻繁にダウンする受注管理システムを改善するプロジェクトに配属された。

    • AIXサーバー上で数十年放置されていた、50,000行のシェルスクリプトで構成されたシステムだった。
    • Perlを使ってシステムを5,000行にまで削減し、性能を10〜100倍向上させた。
    • このプロジェクトは非常に満足度の高い経験だった。
  • Enrust CAとディレクトリのインストーラーを書き、あらゆるUnixで動作するように発展させた。

    • インストールは簡単だったが、アップグレードは複雑だった。
    • Unixごとにユーティリティが少しずつ異なり、管理が必要だった。
    • DECのUnixは、コマンドラインユーティリティが出力幅を制限するなど、混乱を招いた。
    • HP-UXはバージョンごとに変更点があった。
  • スクリプト言語Lilのインタープリタをbashで書こうとしたが、浮動小数点演算の難しさと配列サポートの限定性からAWKを選んだ。

    • AWKはPOSIX環境で利用でき、汎用的な言語として適していた。
  • Bashスクリプトは複雑なプログラムを書くのに向いていない。

    • 可読性が低く、変数スコープの規則が微妙で、エラー処理も原始的だ。
    • 静的解析ツール、リンター、デバッガが不足しており、保守が難しい。
    • テストが煩雑で、複雑なロジックやデータ構造を扱いにくい。
    • Bashは簡単な自動化には向いているが、複雑なアプリケーションには他の言語のほうが適している。
  • rkhunterのスクリプトはコードが良く、情報量も豊富だ。

    • さまざまなプラットフォームでユーティリティが期待どおりに動作することを保証するために、多くのコードが使われている。
    • より複雑なプログラミング言語で書かれていたなら、透明性は低くなっていただろう。
  • 過去に使った中で最大のシェルプログラムはabcdeで、約5500行のコードで構成されていた。

  • FreeBSD Updateクライアントは約3600行のshコードで構成されている。

    • オペレーティングシステムを更新するツールとして、かなりの機能を提供している。
  • シェルは利用可能であることが保証された唯一のツールかもしれないが、大きなシェルアプリを書くときは再考する必要がある。

  • acme.shスクリプトは7.1K行で、Let's Encryptで証明書を発行・更新するために使われている。

  • mod_pagespeedではシェルスクリプトを使ってシステムテストを行っていたが、Pythonに切り替えたほうがよかっただろう。

    • 10,579行のbashコードが使われていた。
    • 段階的に移行するほうがより効率的だっただろう。