Macユーザーのエンジニア、開発者の皆さん、
日々の作業をもっと効率的にしませんか?
Mac OSはUnixベースです。
つまり、強力なシェル環境があります。
ここにPythonを加えると、自動化や効率化が格段に進みます。
この記事では、PythonとUnixコマンドの組み合わせを解説します。
具体的には、簡易テキスト検索スクリプトを例にします。
この組み合わせがいかに強力か、そしてどんな新たな可能性があるかを探ります。
コードで見る:PythonとUnixコマンドの強力な融合
以下は、PythonとUnixコマンドを組み合わせて作成された強力なテキスト検索スクリプトです。
import subprocess import sys def search_files(pattern, path): # 'find' コマンドを使って特定のパターンにマッチするファイルを検索 find_command = ["find", path, "-type", "f"] try: files = subprocess.check_output(find_command).decode().split('\n') except subprocess.CalledProcessError as e: print(f"エラー: {e}") return for file in files: if file: # 'grep' コマンドを使ってファイル内のテキストを検索 try: grep_command = ["grep", "--color=always", "-F", "-H", pattern, file] result = subprocess.check_output(grep_command).decode() print(result) except subprocess.CalledProcessError: # パターンにマッチするテキストがない場合 continue if __name__ == "__main__": if len(sys.argv) != 3: print("使用方法: python search.py [検索パターン] [検索ディレクトリ]") else: pattern = sys.argv[1] path = sys.argv[2] search_files(pattern, path)
このスクリプトは、ユーザーが指定したパターンに基づいてファイルを検索します。
マッチした結果があれば、次のように表示されることになります。
コードの内容としては、Unixの find コマンドを利用して特定のディレクトリ内のファイルを探索しています。
次に、 grep コマンドでそれらのファイル内のテキストを検索します。
さらに、検索結果のハイライト表示にも対応しています。
このスクリプトの特徴は、そのシンプルさと効率性にあります。
コマンドラインから直接実行可能です。
上記結果の実行コマンドは、以下。
python search.py '大谷翔平' .
Pythonのスクリプトにより、grepやfindなどのコマンドの結果を柔軟に扱うことができます。
ユーザーは検索パターンとディレクトリを指定するだけで、瞬時に必要な情報を見つけ出すことができます。
また、エンジニアやプログラマーにとっては、このスクリプトはカスタマイズや拡張が容易です。
さまざまな状況に合わせて調整することが可能となっています。
未来への道筋:PythonとUnixコマンドの可能性を拡げる
Macユーザーのエンジニアにとって、
PythonとUnixコマンドの組み合わせは大きな可能性を秘めています。
マシンスペックによっては、機械学習との連携もあり得るでしょう。
Unixコマンドと組み合わせることで、データの収集、加工、分析を柔軟に行うことが可能です。
Pythonでは、GUIアプリを容易に開発できます。
GUIからUnixコマンドを気軽に使うことも実現可能です。
「GUIアプリはよくわからない・・・」
このような場合は、ChatGPTに作らせましょう。
Macユーザーは、本当にこの環境を活かすべきだと思います。
Windowsでは、容易にUnixコマンドを扱うことはできませんからね。
WSLやCygwinもありますが、ネイティブではありません。
ここまで書いてなんですが、プライベートではWindowsを利用しています。
おそらく、今後もWindowsを使うでしょう。
でも、職場ではMacなんですよね。
Windowsに比べてアプリの数が少なくて、かなり不便を感じていました。
そのため、Pythonで自作スクリプトやアプリを作って対応していた状況です。
その過程において、PythonとUnixコマンドの連携に気付き、感動したという流れになります。