Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

マスター スクリプト:反復的なタスクを自動化して生産性を向上

マスター スクリプト:反復的なタスクを自動化して生産性を向上

厳格で高品質なソフトウェアを構築した経験が豊富な開発者は、スクリプトを作成することで作業のほとんどを自動化する傾向があります。これらのスクリプトは、単純なエイリアス bash コマンドから、サーバー上で実行される反復的な cron トリガーまで多岐にわたります。

このチュートリアルでは、スクリプトとは何か、その多くの使用例、スクリプトを使用する利点と欠点について学びます。また、実際の動作を確認できるように、いくつかのサンプル スクリプトについても説明します。

スクリプトとは何ですか?

スクリプトは、タスクや制御プロセスの自動化に役立つスクリプト言語 (Bash、Python、JavaScript など) で記述された一連の命令です。コンパイルされたプログラムとは異なり、スクリプトは通常解釈されます。つまり、事前にコンパイルすることなく、ランタイム環境によって直接実行されます。

スクリプトは、反復的なタスクを自動化し、ワークフローを管理し、小さな (場合によっては大きな) 問題を効率的に解決するための強力なツールです。初心者でも経験豊富な開発者でも、スクリプトの書き方を理解することで生産性が向上し、技術的能力を広げることができます。

スクリプトを書く理由

スクリプトで何ができるかについてはすでに触れました。それでは、それらの利点 (および課題) をいくつか見て、なぜそれらが非常に強力なのか、そしていつ使用するべきかを理解しましょう。

スクリプトの利点

<オル>
  • 自動化:スクリプトは、データ処理やファイル管理などの反復的なタスクを簡素化するのに役立ちます。

  • 効率:手動で行う必要があるタスクを自動化することで、時間を節約することもできます。

  • エラーの削減:スクリプトは、命令を一貫して実行することで人的エラーを削減するのに役立ちます。

  • 柔軟性:スクリプトは最小限の変更でさまざまなタスクに適応できます。

  • 統合:他のシステム、ツール、ワークフローとシームレスに統合することもできます。

  • スクリプトの課題

    <オル>
  • パフォーマンス:スクリプトは、解釈のオーバーヘッドにより、コンパイルされたプログラムよりも遅くなる可能性があります。

  • スケーラビリティ:大規模なタスクや非常に複雑なタスクには必ずしも適しているとは限りません。

  • デバッグ:スクリプトのデバッグは、その動的な性質により困難な場合があります。

  • セキュリティ リスク:スクリプトが適切に書かれていないと、特にシステム レベルのコマンドを実行する場合に脆弱性が露呈する可能性があります。

  • スクリプトを使用する場合と使用しない場合

    スクリプトは次の場合に最適です。

    <オル>
  • タスクは単純、明確に定義されているか、または 1 回限りのものです

  • プロトタイピングまたはプロセスの迅速な自動化

  • スコープは複雑さを避けるために十分小さいです

  • スクリプトは次の場合には理想的ではありません。

    <オル>
  • 高い効率を必要とするパフォーマンスが重要なタスク。スクリプトの代わりに、専用の ETL (抽出、変換、ロード) ツール、メッセージ ブローカー、またはユースケースに合った同様の代替ツールを使用してみてください。

  • 広範なユーザー インターフェイスを備えたアプリケーション。代わりに、適切なロギング、テスト、ドキュメントを備えた小さなアプリケーションまたはモジュール式システムを構築できます。

  • 長期的なメンテナンスが必要なシナリオ。コンパイルされたプログラムの方が安定している可能性があります。代わりに、CRON、Airflow、AWS Lambda/GCP 関数などのタスク スケジューラまたはワークフロー マネージャーを使用してください。

  • 効果的なスクリプトの書き方

    これは、役立つスクリプトを作成するために私が使用するプロセスです。これを完了すると、さまざまな言語でのスクリプトの例がいくつか表示されるので、実際に練習することができます。

    <オル>
  • 問題を定義する:スクリプトを作成する前に、スクリプトによって解決される問題を特定します。自動化するタスクと期待される結果について明確にしてください。

  • 適切な言語を選択してください:

    • バッシュ: ファイル操作やサーバー管理などのシステムレベルのタスクに最適です。

    • Python: データ処理、Web スクレイピング、より複雑な自動化に最適です。

    • JavaScript: Web 開発とブラウザベースの自動化に適しています。

  • スクリプトを作成します。テキスト エディターまたは統合開発環境 (IDE) を使用し、コメント、意味のある変数名、モジュール コードの使用などのベスト プラクティスに従ってください。これらについては以下で説明します。

  • スクリプトをテストする:制御された環境でスクリプトをテストし、エラーが発生せずに期待どおりに実行されることを確認します。

  • 実行とデプロイ:スクリプトを目的の環境で実行します。必要に応じて、Cron (Bash 用) やタスク スケジューラなどのツールを使用して実行をスケジュールします。

  • スクリプト例

    基本を理解したので、いくつか練習してみましょう。 「book-part-1.pdf」、「book-part-2.pdf」、…、「book-part-100.pdf」という名前のファイルが約 100 個あると仮定します。ファイル名に含まれるすべてのハイフン (-) をアンダースコア (_) に置き換えます。これは、これらのドキュメントをアップロードしようとしている Web サイトでは、名前にハイフンが含まれるファイルのアップロードが許可されていないためです。

    以下に、同じ操作を実行する 3 つの異なる言語で書かれたスクリプトを示します。プロセスは次のようになります。

    <オル>
  • ディレクトリ内のすべてのファイルを検索します。

  • 名前にハイフン (-) が含まれているかどうかを確認し、

  • ハイフンはアンダースコア (_) に置き換えてください。

  • 開始するファイル名は次のとおりです (ハイフンを含む)。

    マスター スクリプト:反復的なタスクを自動化して生産性を向上

    Bash スクリプト

    bash スクリプトから始めます。これが次のとおりです。

    #!/bin/bash
    # Replace "-" with "_" in file names
    DIRECTORY="/path/to/your/folder"
    for FILE in "$DIRECTORY"/*; do
     if [[ "$FILE" == *-* ]]; then
     NEW_NAME=$(echo "$FILE" | sed 's/-/_/g')
     mv "$FILE" "$NEW_NAME"
     echo "Renamed: $FILE -> $NEW_NAME"
     fi
    done
    

    ファイルが存在するディレクトリ (フォルダー) を最上部に定義します。ディレクトリ内の各ファイルについて、名前に - が含まれているかどうかを確認します。 。このような場合、新しいファイル名を作成し、変数 NEW_NAME に保存します。 echo を使用して古いファイル名をコピーする コマンドを使用して、- を置き換えます。 _ を使用 sed を使用する コマンド。最後に、移動コマンド mv を使用します。 引数として古いファイル名と新しいファイル名を指定します。

    Python スクリプト

    次に、Python ではどのようになるかを見てみましょう。

    import os
    # Replace "-" with "_" in file names
    directory = "/path/to/your/folder"
    for filename in os.listdir(directory):
     if "-" in filename:
     old_path = os.path.join(directory, filename)
     new_filename = filename.replace("-", "_")
     new_path = os.path.join(directory, new_filename)
     os.rename(old_path, new_path)
     print(f"Renamed: {filename} -> {new_filename}")
    

    この手順は Python でもかなり似ています。まずディレクトリを定義し、ディレクトリ内の各ファイルを繰り返し処理します。ディレクトリ内のすべてのファイルを検索するには、listdir を使用する必要があります。 os のメソッド パッケージ。

    次に、ファイル名に - が含まれているかどうかを確認します。 次の行で。このような場合、現在のパス (old_path) が見つかります。 ) ディレクトリとそのファイル名を結合してファイルを作成します。 - を置き換えることで、新しいファイル名を作成できます。 _ を使用 replace を使用する メソッド。

    次に、新しいファイル パス (new_path) を生成します。 ) 同様の方法で old_path を生成します。 。最後に、rename を呼び出します。 os のメソッド 引数として古いファイル パスと新しいファイル パスを含むパッケージ。

    JavaScript スクリプト

    それでは、JavaScript でどのように見えるかを見てみましょう:

    const fs = require('fs');
    const path = require('path');
    const directory = '/path/to/your/folder';
    fs.readdir(directory, (err, files) => {
     if (err) {
     console.error('Error reading directory:', err);
     return;
     }
     files.forEach(file => {
     if (file.includes('-')) {
     const oldPath = path.join(directory, file);
     const newFilename = file.replace(/-/g, '_');
     const newPath = path.join(directory, newFilename);
     fs.rename(oldPath, newPath, err => {
     if (err) {
     console.error(`Error renaming ${file}:`, err);
     } else {
     console.log(`Renamed: ${file} -> ${newFilename}`);
     }
     });
     }
     });
    });
    

    JavaScript の実装は Python の実装に似ていますが、さらに多くのコードを記述する必要があります。一般に、開発者はこの種のスクリプトに JavaScript を使用することを好みません。それらのほとんどは Bash/Python に依存しています。 JavaScript は、ブラウザベースの自動スクリプトに適しています。

    それでも、ここに何があるか見てみましょう。この JavaScript コードでは、2 つの異なるパッケージ fs を使用する必要があります。 と path 。先頭にディレクトリを定義し、readdir を使用してディレクトリ内のファイルを読み取ります。 fs のメソッド パッケージを作成し、ディレクトリを引数として渡します。ディレクトリとともに、ファイルが読み取られたときに実行されるコールバック関数も渡します。

    コールバック関数内で、各ファイルをループし、ファイル名にハイフン (-) が含まれているかどうかを確認します。 )。存在する場合は、path を使用して古いパスを見つけます。 引数としてディレクトリ名とファイル名を指定してパッケージを作成します。次に、replace を使用してすべてのハイフンをアンダースコアに置き換えて、新しいファイル名を作成します。 メソッド。

    古いパスと同様に、新しいファイル名を引数として使用して新しいパスを見つけます。次に、rename を使用します。 fs のメソッド パッケージを使用して、古いファイル名と新しいファイル名の両方を渡してファイル名を変更します。ディレクトリ内のファイルの名前変更または読み取り中にエラーが発生した場合、エラー メッセージが記録されます。それ以外の場合は、成功メッセージを記録します。

    これらのスクリプトの実行方法

    さて、これらのスクリプトを実際に使用する方法は次のとおりです。

    <オル>
  • /path/to/your/folder を置き換えます ファイルを含む実際のディレクトリに置き換えます。

  • 対応する環境でスクリプトを実行します。

    • バッシュ: .sh として保存 ファイルを作成し、bash script.sh で実行します。

    • Python: .py として保存 ファイルを作成し、python script.py で実行します。

    • JavaScript: .js として保存 ファイルを作成し、node script.js で実行します。

  • 以下のスクリーンショットは、bash スクリプトを実行してファイル名を変更するところを示しています。

    マスター スクリプト:反復的なタスクを自動化して生産性を向上

    マスター スクリプト:反復的なタスクを自動化して生産性を向上

    定期的なスクリプト

    定期的なスクリプトは、システムのステータスを毎週チェックしたり、ログをクリーンアップしたり、データ更新を取得したりするなど、定期的な間隔で実行するように設計されています。これらのスクリプトは通常、何らかの形式のタスク スケジューラを使用します。

    一般的なアプローチ

    <オル>
  • CRON ジョブ:ほとんどのオペレーティング システムは CRON をサポートしており、定義されたスケジュールに基づいてスクリプトをトリガーできます。

  • タスク キュー:Celery (Python)、Bull (Node.js)、Sidekiq (Ruby) などのツールを使用すると、スケジュールされたジョブをより柔軟に処理できます。

  • クラウド スケジューラ:EventBridge を備えた AWS Lambda、Google Cloud Scheduler、Azure Logic Apps などのサービスを使用すると、サーバーレス アーキテクチャで定期的なスクリプトを設定できます。

  • 定期的なスクリプトの良い使用例の 1 つは、システムの使用状況/パフォーマンスの日次/週次レポートを送信することです。製品に参加して購読しているユーザーの数を検索するスクリプトを作成し、そのレポートを電子メールとして毎日または毎週送信できます。

    スクリプト作成のベスト プラクティス

    スクリプトを作成する際に留意すべき点がいくつかあります。

    1.コメントを使用する :スクリプトの複雑な部分をコメントで説明します。

    以下の例では、コメントがないと、税率がパーセンテージではなく小数である理由を理解するために余分な時間を費やす必要がある可能性があります。

    # Calculate the total price with tax
    def calculate_price_with_tax(price, tax_rate):
     # Tax rate is expressed as a decimal (e.g., 0.07 for 7%)
     return price + (price * tax_rate)
    

    2. エラー処理 :起こり得るエラーを考慮し、適切に処理してください。

    以下の例では、ファイルが見つからない場合でもスクリプトはクラッシュせず、代わりに役立つエラー メッセージが表示されます。

    try:
     with open('data.csv', 'r') as file:
     data = file.readlines()
    except FileNotFoundError:
     print("Error: 'data.csv' file not found. Make sure the file exists before running the script.")
    except Exception as e:
     print(f"An unexpected error occurred: {e}")
    

    3. モジュール設計 :スクリプトを再利用可能な関数またはモジュールに分割します。

    以下の例では、機能をより小さな再利用可能な関数に分割することで、スクリプトの一部を個別にデバッグまたは再利用できます。

    def fetch_data_from_api(api_url):
     # Fetch data from the given API
     pass
    def process_data(data):
     # Process the data into the desired format
     pass
    def save_to_file(data, filename):
     # Save processed data to a file
     pass
    # Main script
    if __name__ == "__main__":
     data = fetch_data_from_api("https://example.com/api")
     processed_data = process_data(data)
     save_to_file(processed_data, "output.json")
    

    4. 入力検証 :ユーザー入力を検証して、予期しないエラーやセキュリティ リスクを防ぎます。

    検証を行わないと、誰かが無効または悪意のあるデータ (たとえば、特定のシナリオでの SQL インジェクション文字列) を入力する可能性があります。

    import re
    # Validate that the input is a valid email address
    def validate_email(email):
     pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
     if not re.match(pattern, email):
     raise ValueError("Invalid email address format")
     return email
    # Example usage
    try:
     user_email = validate_email(input("Enter your email: "))
     print(f"Valid email: {user_email}")
    except ValueError as e:
     print(e)
    

    5. バージョン管理 :Git またはその他のバージョン管理ツールを使用して、変更を追跡します。

    変更によってスクリプトが中断された場合は、git checkout を使用して以前のコミットに簡単に戻すことができます。 。さらに、チーム メンバーとシームレスに共同作業できます。

    git init
    git add script.py
    git commit -m "Initial commit"
    

    結論

    スクリプトを書くことは、生産性と問題解決能力を大幅に向上させるスキルです。 Bash、Python、JavaScript などのスクリプト言語の基本を理解することで、タスクを自動化し、ワークフローを合理化し、貴重な時間を節約できます。この貴重なスキルを習得するには、小規模から始めて段階的に構築し、さまざまなユースケースに応じたスクリプトの作成を練習してください。

    練習があります。このサンプル スクリプトを実行して検証するには、100 個のファイルを手動で作成する必要があると思われるかもしれません。それには多くの時間がかかります。

    これら 100 個のファイルを生成するスクリプトを作成しました。また、ファイル名にハイフンを含むファイルを 100 個生成するスクリプトを作成してみることをお勧めします。次に、サンプル スクリプトを実行してハイフンをアンダースコアに変換してみます。

    最初は難しく聞こえるかもしれませんが、100 個のファイルを生成するには 5 行の bash コードを記述するだけで済むと信じてください。 100 個だけでなく、わずか 5 行のコードで 100 万、10 億、1 兆個のファイルを生成することもできます。

    スクリプトについてさらに詳しく知りたい場合は、私のメール ニュースレター (https://5minslearn.gogosoon.com/) を購読し、ソーシャル メディアで私をフォローしてください。

    スクリプト作成を楽しんでください!

    無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう


    1. Linux 向け PDF ページトリミングツールトップ 5:効率的、信頼性が高く、無料

      ポータブル ドキュメント形式 (PDF ) は広く認識されており、おそらく現在最も一般的に使用されているファイル形式であり、特にソフトウェア、ハードウェア、さらに重要なことにオペレーティング システムに関係なく、ドキュメントの信頼性の高い表示と共有のために使用されています。 これは、特にインターネット上の電子ドキュメントの事実上の標準となっています。この理由と電子情報の共有の増加により、今日では多くの人が PDF ドキュメントの貴重な情報にアクセスしています。 この記事では、Linux システムに最適な PDF ページ トリミング ツール 6 つをリストします。 1.マスター PDF エデ

    2. Linuxコマンド-知っておくべき基本的なBashコマンドラインのヒント

      Linuxには大量のコマンドがありますが、ほとんどの人はそれらのほんの一部しか使用していません。ターミナルで使用する最もよく使用されるLinuxコマンドのいくつかを次に示します。 最初に、コマンドラインを使いやすくするためのヒントをいくつか紹介します。 オートコンプリートにはタブを使用します。 Linuxターミナルで何かを入力し始めたら、Tabキーを押すと、これまでに入力した文字列で始まる可能なオプションが提案されます。 ctrl+r search_termを使用します 以前に使用したコマンドを検索します。 ctrl+aを使用して行の先頭または末尾にすばやく移動します およびctrl