演習 - パラメーター
このユニットでは、Linux ターミナルとして画面の右側にある Azure Cloud Shell を使用します。 Azure Cloud Shell は、Azure portal または https://shell.azure.com でアクセスできるシェルです。 お使いのコンピューターに何もインストールしなくても使用できます。
スクリプトを柔軟にするには、たとえばパラメーターを使用します。そうすれば、ユーザーはスクリプトの実行時に入力を行えます。 この演習では、バックアップ スクリプトを作成し、そこにパラメーターを追加します。
バックアップ スクリプトを作成する
一般的なタスクは、バックアップを作成 することです。 バックアップとは、通常、アプリなどに属するすべてのファイルを格納した圧縮ファイルになります。 PowerShell をインストールしたときに、このタスクを完了するのに役立つコマンドレット Compress-Archive
を取得しています。
Cloud Shell ターミナルで次の bash コマンドを実行します。
mkdir app cd app touch index.html app.js cd ..
これで、 app という名前のディレクトリが作成されます。 PowerShell を使用する準備ができました。
同じターミナルで、
pwsh
を実行して、PowerShell シェルを開始します (まだ開始されていない場合)。pwsh
現在のディレクトリ にBackup.ps1 という名前のスクリプト ファイルを作成し、コード エディターで開きます。
touch Backup.ps1 code Backup.ps1
次のコンテンツをファイルに追加し、そのファイルを保存します。 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
は、結果として生成される圧縮ファイルへのパスです。
-
次のスクリプトを実行します。
./Backup.ps1
次のように出力されます。
Created backup at ./backup-<current date as YYYY-MM-DD>.zip
スクリプトにパラメーターを追加する
スクリプトにパラメーターを追加すると、ユーザーは実行時に値を指定できます。 バックアップ スクリプトにパラメーターを追加して、ソース ファイルと結果として生成される ZIP ファイルの場所の構成を有効にします。
Backup.ps1 ファイルの先頭に次のコードを追加します。
注
エディターが開いていない場合は、
code Backup.ps1
コマンドを使用してファイルを開きます。Param( [string]$Path = './app', [string]$DestinationPath = './' )
スクリプトに
$Path
と$DestinationPath
の 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')"
次のコマンドを実行して、 アプリ ディレクトリの名前を webapp に変更します。
mv app webapp
アプリ ディレクトリの名前を変更すると、バックアップする必要があるすべてのディレクトリがアプリと呼ばれるわけではないという事実がシミュレートされます。
$Path
の既定値を利用することはできなくなりました。 スクリプトを実行するときに、コンソールから値を指定することが必要になります。バックアップ ファイルを削除し、
<current date as YYYY-MM-DD>
を現在の日付に置き換えます。rm backup-<current date as YYYY-MM-DD>.zip
このファイルを削除して、
$Path
値が存在しないことを示すメッセージが表示されるかを確認します。 そうならない場合は、既に存在している ZIP ファイルに関するメッセージが表示され、修正しようとしている問題は表示されません。パラメーターを指定せずにスクリプトを実行します。 (スクリプトでは、パラメーターに既定値が使用されます)。
./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
パラメーターに値を指定し、スクリプトにパラメーターを追加する利点を見てみましょう。スクリプトを実行してテストします。
./Backup.ps1 -Path './webapp'
前に表示されたものと同様のメッセージが表示されます。
Created backup at ./backup-<current date as YYYY-MM-DD>.zip
バックアップするディレクトリが ./app と呼ばれない場合や、圧縮ファイルを現在のディレクトリ以外の場所に配置する場合は、パラメーターを使用できるようになりました。
おめでとうございます。 アプリ ディレクトリまたはその他の重要なディレクトリのバックアップを作成するときにいつでも使用できるバックアップ スクリプトを作成しました。 続いて、頻繁に変更する必要があると思われるスクリプトの部分を特定し、静的な値をパラメーター値に置き換えました。 このようにして、要件が変わったときにスクリプト自体を変更する必要はほとんどなくなります (たとえば、アプリの名前が変わる場合や、対象パスを変更する必要がある場合)。