.net column

.NET開発者のためのブログメディア

PowerShellのfunctionとは?functionを使用して関数を作成しよう!

2020年12月02日

SE
PowerShellで関数を使用するメリットとはなんでしょう?

PM
同じ処理を繰り返すことができるなど、そのメリットは多岐にわたります。

PowerShellのfunctionを使って関数を作ってみましょう


PowerShellを使っていて、何度も同じ処理や似たような処理を書いているな、と思ったことはありませんか。そういった処理の内容をまとめて書いておくだけであとは呼び出しさえすれば何度でも実行できるのが、関数です。

関数を使うことで同じ、もしくは似たような処理を再利用化でき、コーディング時間の短縮を図ることができます。

今回はPowerShellのfunctionを使った関数の作り方について説明します。

function(関数)について


function(関数)は、再利用可能な処理(繰り返し使われる処理)をモジュール化する際に使います。
プログラミングをしていると同じ処理や似たような処理を何度も記述するようなシーンが多く出てきます。その際に関数として処理をモジュール化しておけば、後は使いたい時にその関数を呼び出すだけで同じような処理を何度も書かずに済みます。

時には10,000行近くソースを書かなければいけないシステムもありますので、関数を使って再利用可能なモジュールにしておくことは常に行っておきたい手段と言えます。

関数を作る際の心構えとは?


プログラムにおいて重要な要素の一つは、ロジックの組み立てです。とりわけ関数はロジックを正確且つ遅延なく組み立てる上で重要です。

そのため、関数を作る際には以下の3つのことを心構えとして心に留めておくと良いでしょう。

1.内容を複雑にしすぎないこと
2.可読性のある関数名をつけること
3.不必要なコードを記述しないこと

これら3つの心構えについて詳しく説明します。

内容を複雑にしすぎない

シンプルで単純なコードを書くように心がけてください。これはチームで作業する場合はもちろん、個人で開発する際も然りです。

個人開発の場合は自分が理解していればそれでいいと思うかもしれませんが、何千何万行とコードを書いているとボリュームが膨らむに連れて細部までコードを見ることが億劫になります。

また、人間は忘れる生き物です。自分が作ったシステムでもほんの数日、数ヶ月時が経つだけでどんなコードや構成で作ったかを忘れてしまいます。その際にシンプルで見やすいコードであればそんなに時間を要することなくコードを追うことができるでしょう。

シンプル且つ単純なコードを書くことができない場合は、その分コメントをしっかりと残しておくのが得策です。

可読性のある関数名をつける

その関数が一体どのような処理をしている関数なのかが見ただけで分かるような名前が望ましいでしょう。
本来関数とは何かの処理をまとめて「する」ものなので、関数名に動詞をつけることはデファクトスタンダードとなっています。

例えばテキストに文字を追加する関数であれば関数名は「Add-Text」のように動詞-名詞の形で命名します。

Microsoftの公式ドキュメントによると、PowerShellで関数に名前をつける際はPowerShell内で認証されている動詞と単数形名詞を使った命名が推奨されています。また、既定コマンドや他ユーザが作った関数とバッティングしないために動詞と名詞の間にプレフィックスをつけることをすすめています。

関数の命名については後の章で詳しく説明します。

不必要なコードを記述しない

関数が動作するために必要でないコードは記述しないようにしましょう。これは、システムの開発が終了しコードレビューの際や保守フェーズに移行した際に特に重要になります。

コードを見直す際に、そのコードが関数にとって必要かどうかを開発者以外が見分けるのは時間がかかります。バグが発生しコードを見直す時にも、判断に悩むような材料になりかねません。

ですので、これは関数に限った話ではありませんが不必要なコードは記述しないように日頃から意識しましょう。また、開発する中で常に必要かどうかを考えながらコードを組み立てる癖をつけることが大切です。

functionを使ってみましょう


それではここからは実際にfunctionを使って関数を作ってみましょう。

手順としては、はじめに関数の名前を決めましょう。次にパラメータに関して記述します。その後で関数の内部処理について書いていきます。

PowerShellではfunctionで定義した関数をコマンドレットとして使用することができます。呼び出し方もPowerShell既定のコマンドレットと同じですので関数の作り方を見ていくとイメージがしやすいでしょう。

以降は関数の作り方について手順を一つずつ説明します。関数は再利用可能な処理をモジュール化することを目的としていますので、手順を追いながらコードの組み立て方について理解していきましょう。

関数の記述方法は?

まず初めに関数の記述方法について説明します。関数を定義する場合は以下のように記述します。

function 関数名 {
処理内容
}

シンプルな記述方法です。functionの後に関数名を記述するので、この行を見ただけでどのような関数を記述しているセクションかが分かります。

また、関数の処理内容部分は中括弧で囲ってください。処理内容はインデントをつけて書きましょう。

簡単な関数を作ってみましょう

では、関数が呼ばれたら「こんにちは」と表示される関数を作ってみましょう。
この関数は「こんにちは」を表示する処理ですので、関数名は「Display-PSHello」とします。PSがプレフィックスとなります。

function Display-PSHello {
Write-Output “こんにちは”
}

Write-Outputを使うことで指定した値がターミナルに表示されます。

この関数を実行する場合は以下のように呼び出します。

Display-PSHello

— 実行結果 —
こんにちは

これで定義した関数を呼び出せます。

関数名をつける

「関数を作る際の心構え」でも説明しましたが、Microsoftの公式ドキュメントによると、PowerShellで関数に名前をつける際はPowerShell内で認証されている動詞と単数形名詞を使った命名が推奨されています。

PowerShell内で認証されている動詞というのがいくつかあり、その一覧は以下のコマンドレットを実行して取得できます。

Get-Verb | Sort-Object -Property Verb

先程も例に挙げましたが、テキストに値を追加する関数の場合の名前は「Add-Text」とした動詞-名詞の組み合わせが好ましいです。関数名を見ればどのような処理をする関数かが分かるようになります。

関数名にプレフィックスをつけたバッティング対策

Microsoftの公式ドキュメントでは名詞の前にプレフィックスと呼ばれる、接頭辞をつけてPowerShellの既定コマンドや他ユーザが作った関数とバッティングしないようにすることを推奨しています。

このプレフィックスは任意で問題ありません。あらかじめコーディングルールとして何かしらのプレフィックスを決めておきましょう。

例えば、テキストに値を追加する関数「Add-Text」にプレフィックスとして「PR」をつけると「add-PRText」となります。

【動詞】-【プレフィックス】【名詞】という形を覚えておきましょう。

パラメータの記述方法は?

パラメータの記述方法は以下のとおりです。

function 関数名 {
param (
$パラメータ名,
$パラメータ名,

)
処理内容
}

パラメータが複数ある場合はカンマをつけて複数指定しましょう。

また、パラメータ名を考える際も関数名同様に見ただけでどのようなものか想像がつくように、名詞を使って命名してみてください。

パラメータ付き関数を記述してみましょう

では、パラメータがついた関数の例を記述してみます。
今回はパラメータで名前と年齢を指定することで「私は○○です。△△歳です。」と表示されるような自己紹介関数を作ってみます。

自己紹介をする関数なので、関数名は「Set-PSSelfIntroduce」とします。自己紹介をセットする、という意味です。このSetという動詞もPowerShell内で認証されている動詞の一つです。PSがプレフィックスです。

function Set-PSSelfIntroduce {
param (
$name,
$age
)
Write-Output “”私は $name です。$age 歳です。””
}

この関数を呼び出す場合は以下のようになります。パラメータのname(名前)に太郎、age(年齢)に30歳とそれぞれ指定して実行してみましょう。

Set-PSSelfIntroduce -name “”太郎”” -age “”30″”

— 実行結果 —
私は太郎です。30歳です。

パラメータを複数指定することでより高度な関数を作ることができます。

PowerShell認証動詞について


ここまで何度か話題に挙げた「PowerShell内で認証されている動詞」について説明します。

前出していますが、PowerShellでは承認されている動詞を使って関数名を定義することを推奨しています。これは、既定のコマンドレットやユーザが作った関数との一貫性を保つためです。既定かユーザが作成したものかを判断するために、関数名のプレフィックスが目印になります。

実際のところ、未認証の動詞を使えないというわけではありません。例えば「紹介する」という意味の「introduce」という未認証の動詞を使うこともプログラムを実行することもできますが、この動詞を使った関数を使う際に警告メッセージが表示されてしまいます。

警告メッセージはプログラム上ないほうが好ましいのでPowerShell内で認証されている動詞を使うようにしましょう。

SE
効率的な処理を行うためには最適だと言えますね。

PM
何度も使用するので、シンプルでわかりやすい関数を作るよう心がけましょう。

さいごに


ここまでPowerShellでfunctionを使った関数の使用方法について見てきました。

関数の仕組みを理解するのが難しいと感じた方は、是非多くの関数を実際に書いてシステムを動かしてみましょう。上に挙げた例を使っても構いません。慣れていくうちに少しずつ仕組みを理解していけます。

また、PowerShellに慣れていない方の場合、認証されている動詞について苦戦することもあるでしょう。認証されている動詞の一覧はコマンドレットを使って取得できます。全ての動詞を覚える必要はありません。日常使う動詞は限られてくると思いますので、一覧と照らし合わせながらコードを組み立ててみてください。


.NET分野でのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

求人一覧

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)