演習 - パラメーター

完了

このユニットでは、Linux ターミナルとして画面の右側にある Azure Cloud Shell を使用します。 Azure Cloud Shell は、Azure portal または https://shell.azure.com でアクセスできるシェルです。 お使いのコンピューターに何もインストールしなくても使用できます。

スクリプトを柔軟にするには、たとえばパラメーターを使用します。そうすれば、ユーザーはスクリプトの実行時に入力を行えます。 この演習では、バックアップ スクリプトを作成し、そこにパラメーターを追加します。

バックアップ スクリプトを作成する

一般的なタスクは、バックアップを作成 することです。 バックアップとは、通常、アプリなどに属するすべてのファイルを格納した圧縮ファイルになります。 PowerShell をインストールしたときに、このタスクを完了するのに役立つコマンドレット Compress-Archive を取得しています。

  1. Cloud Shell ターミナルで次の bash コマンドを実行します。

    mkdir app
    cd app
    touch index.html app.js
    cd ..
    

    これで、 app という名前のディレクトリが作成されます。 PowerShell を使用する準備ができました。

  2. 同じターミナルで、pwsh を実行して、PowerShell シェルを開始します (まだ開始されていない場合)。

    pwsh
    
  3. 現在のディレクトリ にBackup.ps1 という名前のスクリプト ファイルを作成し、コード エディターで開きます。

    touch Backup.ps1
    code Backup.ps1
    
  4. 次のコンテンツをファイルに追加し、そのファイルを保存します。 Windows および Linux では Ctrl + S 、Mac では CMD + S キーを使用して保存できます。

    $date = Get-Date -format "yyyy-MM-dd"
    Compress-Archive -Path './app' -CompressionLevel 'Fastest' -DestinationPath "./backup-$date"
    Write-Host "Created backup at $('./backup-' + $date + '.zip')"
    

    このスクリプトでは、Compress-Archive を呼び出し、次の 3 つのパラメーターを使用します。

    • -Path は、圧縮するファイルのディレクトリです。
    • -CompressionLevel は、ファイルを圧縮する程度を指定します。
    • -DestinationPath は、結果として生成される圧縮ファイルへのパスです。
  5. 次のスクリプトを実行します。

    ./Backup.ps1 
    

    次のように出力されます。

    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

スクリプトにパラメーターを追加する

スクリプトにパラメーターを追加すると、ユーザーは実行時に値を指定できます。 バックアップ スクリプトにパラメーターを追加して、ソース ファイルと結果として生成される ZIP ファイルの場所の構成を有効にします。

  1. Backup.ps1 ファイルの先頭に次のコードを追加します。

    エディターが開いていない場合は、code Backup.ps1 コマンドを使用してファイルを開きます。

    Param(
      [string]$Path = './app',
      [string]$DestinationPath = './'
    )
    

    スクリプトに $Path$DestinationPath の 2 つのパラメーターを追加しました。 また、既定値を指定したので、ユーザーが値を指定する必要はありません。 ユーザーは、必要に応じて既定値をオーバーライドできます。 これらのパラメーターを使用するようにスクリプトを調整する必要があります。 次にそれを行います。

  2. パラメーターを使用するようにファイル内のコードを変更し、ファイルを保存します。 Backup.ps1 は次のようになります。

    Param(
      [string]$Path = './app',
      [string]$DestinationPath = './'
    )
    $date = Get-Date -format "yyyy-MM-dd"
    Compress-Archive -Path $Path -CompressionLevel 'Fastest' -DestinationPath "$($DestinationPath + 'backup-' + $date)"
    Write-Host "Created backup at $($DestinationPath + 'backup-' + $date + '.zip')"
    
  3. 次のコマンドを実行して、 アプリ ディレクトリの名前を webapp に変更します。

    mv app webapp
    

    アプリ ディレクトリの名前を変更すると、バックアップする必要があるすべてのディレクトリがアプリと呼ばれるわけではないという事実がシミュレートされます。

    $Path の既定値を利用することはできなくなりました。 スクリプトを実行するときに、コンソールから値を指定することが必要になります。

  4. バックアップ ファイルを削除し、<current date as YYYY-MM-DD> を現在の日付に置き換えます。

    rm backup-<current date as YYYY-MM-DD>.zip
    

    このファイルを削除して、$Path 値が存在しないことを示すメッセージが表示されるかを確認します。 そうならない場合は、既に存在している ZIP ファイルに関するメッセージが表示され、修正しようとしている問題は表示されません。

  5. パラメーターを指定せずにスクリプトを実行します。 (スクリプトでは、パラメーターに既定値が使用されます)。

    ./Backup.ps1
    

    次のようなエラー メッセージが表示されます。

    Line |
       8 |  Compress-Archive -Path $Path -CompressionLevel 'Fastest' -Destination …
         |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         | The path './app' either does not exist or is not a valid file system path.
    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

    このスクリプトは、ディレクトリ ./app が見つからないことを通知します。 それでは、続いて $Path パラメーターに値を指定し、スクリプトにパラメーターを追加する利点を見てみましょう。

  6. スクリプトを実行してテストします。

    ./Backup.ps1 -Path './webapp'
    

    前に表示されたものと同様のメッセージが表示されます。

    Created backup at ./backup-<current date as YYYY-MM-DD>.zip
    

    バックアップするディレクトリが ./app と呼ばれない場合や、圧縮ファイルを現在のディレクトリ以外の場所に配置する場合は、パラメーターを使用できるようになりました。

おめでとうございます。 アプリ ディレクトリまたはその他の重要なディレクトリのバックアップを作成するときにいつでも使用できるバックアップ スクリプトを作成しました。 続いて、頻繁に変更する必要があると思われるスクリプトの部分を特定し、静的な値をパラメーター値に置き換えました。 このようにして、要件が変わったときにスクリプト自体を変更する必要はほとんどなくなります (たとえば、アプリの名前が変わる場合や、対象パスを変更する必要がある場合)。