Pythonスクリプトを一つの「コマンド」として

#!/usr/bin/env python3

LinuxでPythonスクリプトを作成する際、最初の行に上記のようなシバン(shebang)を記述できることは、皆さんご存知かと思います。しかし、多くの人があえてシバンを含めないようです。単に「python3というコマンドを入力する手間を省くだけでしょ?それくらいなら手入力でいいや。」と考えているからではないでしょうか。

「入力の手間を少し省く機能」と言われると、正直なところあまり魅力を感じません。しかし、これをこのように表現すると話は変わってきます。

「自分のPythonコードをLinuxのネイティブコマンドのように偽装する技術」

これはちょっと…心惹かれませんか?

LinuxでPythonスクリプトによるプロセス


Pythonスクリプトが「ツール」へと昇格する瞬間

この一行が:

#!/usr/bin/env python3

これを単に「Pythonのパスを教えるもの」と理解しているなら、これまではただコードを実行しただけです。

しかし、これを正しく使う瞬間から、 👉 システムに一つのツールを追加したことになります。

その違いは、想像以上に大きいでしょう。


1. .pyという足枷を断ち切る

私たちは習慣的にこのように書きます:

python3 crawler.py

これは実際、このような感覚です:

「これ、Pythonファイルなんですけど…Pythonで実行してください…」

非常に受動的ですよね。

しかし、シバンを記述し、chmod +xで実行権限を与えれば、その時点から拡張子は不要になります。

./crawler

何だかトーンが全く変わります。


言語よりも機能に集中する

crawler
backup
log-cleaner
notify

これで、これらのファイルが:

  • Pythonなのか

  • Cなのか

  • Goなのか

といったことに興味がなくなります。

つまり、実装したツールが何であったかよりも、ただスクリプトの機能そのものに集中できるようになります。この心理的な違いは、実際に体験してみるとかなり大きく感じられるでしょう。

私のコードはもはや、

  • script.pyではなく

  • Linuxコマンドの一つになります

lsgrepawkの隣に自分のコードが並んでいるような気分。

これが最初の快感です。


2. パイプラインに自然に溶け込む

個人的に、Linuxの真の力はパイプ|にあると考えています。Linuxの数え切れないほどの利点の中でも、このパイプの存在は本当に最高だと言えるでしょう。

コマンドを連結して 👉 一つの流れを創り出すこと

この美しいパイプを、シバンなしのスクリプトで構成するとこうなるでしょう。

cat access.log | python3 parser.py | python3 filter.py

何だか…流れが途切れます。

  • 「あ、これはPythonか」

  • 「あ、またインタプリタか」

と、常に意識してしまいます。

しかし、シバンを装着したスクリプトは、このような姿になるでしょう。

cat access.log | parser | filter | notifier

あるいは

ps aux | my-filter | sort | uniq

印象が変わりませんか?

流れが途切れません

  • 入力を受け取り

  • 処理し

  • 次へ渡す

これが、ごく自然に繋がっていくように感じられます。

少し誇張して表現するなら、「Pythonスクリプト」ではなく、UNIX哲学に従う一つのフィルターになったような感覚です。そして、自分のコードがPythonの世界よりも、よりLinuxの世界へと位置を変えたような感覚を覚えます。

3. Pythonで簡単に作る、自分だけのLinuxコマンド

もちろん、Linuxで簡単な自動化といえば、まずBashスクリプトが思い浮かぶでしょう。別途パッケージをインストール(import)することなく、システムコマンドをまるで自分の手足のように操れるからです。

しかし、正直に胸に手を当てて考えてみてください。条件文が複雑になり、データ構造を扱うようになると、Bashコードはいつの間にか「後で読みたくない暗号」と化してしまうことがよくあります。書いている当時はコードに没頭して簡単に理解できたものでも、数ヶ月後にメンテナンスのために開いた時に、もどかしさを感じたことはありませんか?

ここでPythonの真価が発揮されます。

  • 可読性の勝利: 数ヶ月後、メンテナンスのためにファイルを開いた時のあの安堵感。Pythonは、過去に自分が何を考えていたのかを丁寧に説明してくれます。

  • 強力なパッケージエコシステム: 複雑なAPI呼び出しやデータ処理も、Pythonの高度なパッケージを利用すればわずか数行で完結します。Bashで格闘している間に、Pythonならすでに実装を終えてコーヒーブレイクも可能です。

結局のところ、「ロジックはPythonの生産性で組み、実行はLinuxネイティブコマンドの簡潔さで行う」という戦略です。

.pyを削除し、chmod +xを与えた後、そのファイルをPATHのどこかにそっと置いてみてください。そして、ターミナルでたった一言、例えばdeployと入力した時にコードが実行される光景を眺めてみてください。

妙な快感がこみ上げてくるでしょう。単にコードを書いただけではなく、自分のシステムに永久に存在する「自分だけの新しいコマンド」を創造した気分になるはずです。


まとめ

シバンは些細な文法ではありません。

#!/usr/bin/env python3

これは単なる実行パスではなく、単なるスクリプトからコマンドへと役割を変更する宣言文だと私は言いたいです。

読者の皆さんも、ぜひPythonコードにシバンを記述し、ターミナルで自分のコード名を直接入力してみてください。その時、指先で感じる感覚こそが、この技術の本質です。

関連記事