## Pythonスクリプトを一つの「コマンド」として {#sec-e5db7dc8c348} `#!/usr/bin/env python3` [[Linux]]でPythonスクリプトを作成する際、最初の行に上記のようなシバン(shebang)を記述できることは、皆さんご存知かと思います。しかし、多くの人があえてシバンを含めないようです。単に「`python3`というコマンドを入力する手間を省くだけでしょ?それくらいなら手入力でいいや。」と考えているからではないでしょうか。 「入力の手間を少し省く機能」と言われると、正直なところあまり魅力を感じません。しかし、これをこのように表現すると話は変わってきます。 > **「自分のPythonコードをLinuxのネイティブコマンドのように偽装する技術」** これはちょっと…心惹かれませんか? ![LinuxでPythonスクリプトによるプロセス](/media/whitedec/blog_img/3d9a3bd717534666b5e3ced5b2867e89.webp) --- ## Pythonスクリプトが「ツール」へと昇格する瞬間 {#sec-6078e36b7072} この一行が: ```python #!/usr/bin/env python3 ``` これを単に「Pythonのパスを教えるもの」と理解しているなら、これまではただ**コードを実行しただけ**です。 しかし、これを正しく使う瞬間から、 👉 **システムに一つのツールを追加した**ことになります。 その違いは、想像以上に大きいでしょう。 --- ## 1. `.py`という足枷を断ち切る {#sec-789004867c8d} 私たちは習慣的にこのように書きます: ```bash python3 crawler.py ``` これは実際、このような感覚です: > 「これ、Pythonファイルなんですけど…Pythonで実行してください…」 非常に受動的ですよね。 しかし、シバンを記述し、`chmod +x`で実行権限を与えれば、その時点から拡張子は不要になります。 ```bash ./crawler ``` 何だかトーンが全く変わります。 --- ### 言語よりも機能に集中する {#sec-7518d1265207} ```bash crawler backup log-cleaner notify ``` これで、これらのファイルが: - Pythonなのか - Cなのか - Goなのか といったことに興味がなくなります。 つまり、実装したツールが何であったかよりも、ただ**スクリプトの機能そのものに集中**できるようになります。この心理的な違いは、実際に体験してみるとかなり大きく感じられるでしょう。 私のコードはもはや、 - `script.py`ではなく - **Linuxコマンドの一つ**になります `ls`、`grep`、`awk`の隣に**自分のコードが並んでいるような気分。** これが最初の快感です。 --- ## 2. パイプラインに自然に溶け込む {#sec-1ae280c7d5d4} 個人的に、Linuxの真の力はパイプ`|`にあると考えています。Linuxの数え切れないほどの利点の中でも、このパイプの存在は本当に最高だと言えるでしょう。 **コマンドを連結して 👉 一つの流れを創り出すこと** この美しいパイプを、シバンなしのスクリプトで構成するとこうなるでしょう。 ```bash cat access.log | python3 parser.py | python3 filter.py ``` 何だか…流れが途切れます。 - 「あ、これはPythonか」 - 「あ、またインタプリタか」 と、常に意識してしまいます。 しかし、シバンを装着したスクリプトは、このような姿になるでしょう。 ```bash cat access.log | parser | filter | notifier ``` あるいは ```sh ps aux | my-filter | sort | uniq ``` 印象が変わりませんか? **流れが途切れません** - 入力を受け取り - 処理し - 次へ渡す これが、ごく自然に繋がっていくように感じられます。 > 少し誇張して表現するなら、「Pythonスクリプト」ではなく、**UNIX哲学に従う一つのフィルター**になったような感覚です。そして、自分のコードが**Pythonの世界よりも、よりLinuxの世界へと位置を変えたような感覚**を覚えます。 ## 3. Pythonで簡単に作る、自分だけのLinuxコマンド {#sec-7acaed130940} もちろん、[[Linux]]で簡単な自動化といえば、まずBashスクリプトが思い浮かぶでしょう。別途パッケージをインストール(`import`)することなく、システムコマンドをまるで自分の手足のように操れるからです。 しかし、正直に胸に手を当てて考えてみてください。条件文が複雑になり、データ構造を扱うようになると、Bashコードはいつの間にか「後で読みたくない暗号」と化してしまうことがよくあります。書いている当時はコードに没頭して簡単に理解できたものでも、数ヶ月後にメンテナンスのために開いた時に、もどかしさを感じたことはありませんか? ここでPythonの真価が発揮されます。 - **可読性の勝利:** 数ヶ月後、メンテナンスのためにファイルを開いた時のあの安堵感。Pythonは、過去に自分が何を考えていたのかを丁寧に説明してくれます。 - **強力なパッケージエコシステム:** 複雑なAPI呼び出しやデータ処理も、Pythonの高度なパッケージを利用すればわずか数行で完結します。Bashで格闘している間に、Pythonならすでに実装を終えてコーヒーブレイクも可能です。 結局のところ、「ロジックはPythonの生産性で組み、実行はLinuxネイティブコマンドの簡潔さで行う」という戦略です。 `.py`を削除し、`chmod +x`を与えた後、そのファイルを`PATH`のどこかにそっと置いてみてください。そして、ターミナルでたった一言、例えば`deploy`と入力した時にコードが実行される光景を眺めてみてください。 妙な快感がこみ上げてくるでしょう。単にコードを書いただけではなく、自分のシステムに永久に存在する「自分だけの新しいコマンド」を創造した気分になるはずです。 --- ## まとめ {#sec-6fad019925de} シバンは些細な文法ではありません。 ```bash #!/usr/bin/env python3 ``` これは単なる実行パスではなく、単なるスクリプトからコマンドへと**役割を変更する宣言文**だと私は言いたいです。 読者の皆さんも、ぜひPythonコードにシバンを記述し、ターミナルで自分のコード名を直接入力してみてください。その時、指先で感じる感覚こそが、この技術の本質です。 **関連記事** - [Linuxスクリプトの最初の行の意味は? #!/usr/bin/env bash vs #!/bin/bash の違いと使い方](/ko/whitedec/2025/12/12/linux-script-first-line-env-vs-bin-bash/)