パイプラインの考え方
元となるデータを集めて、それを徐々に加工していくイメージ。
処理の基本的な流れ
コレクションを……
- 取得する
- 絞り込む
- 加工する
- 利用する
※yuroyoro さんの「Scala的な考え方 - Scalaがとっつきにくいと思っている人へ」を参考にしました。
例
訪日外国人旅行者向け無料公衆無線 LAN スポットの一覧のうち、駅構内に設置されているスポットの数を都道府県ごとに集計します。
# 1. コレクションを取得する(CSV ファイルを読み込む)
Import-Csv -Path jta_free_wifi.csv -Encoding Default |
# 2. 絞り込む(駅構内に設置されているスポットに限定する)
?{ $_.カテゴリー -match "鉄道" } |
# 3. 加工する(都道府県ごとにスポット数を集計する)
Group-Object 都道府県 | Select-Object Name, Count | Sort-Object Count -Descending |
# 4. 利用する(集計結果を CSV ファイルに出力する)
Export-Csv -Path ranking.csv -Encoding Default -NoTypeInformation
個人的な背景
少し前まではパイプラインに「前のコマンドの出力をそのまま次のコマンドの入力にできるから便利」程度の認識しか持っていなかったので、コマンドをどのように連携させればいいのか分からず、複数のコマンドを組み合わせて処理を行うことがうまくできていませんでした。
その後 PowerShell を触り始めると、パイプラインでオブジェクトのコレクションを渡すという PowerShell 仕様のおかげで「集めたデータを徐々に加工することで処理を完了させる」という考え方ができるようになり、以前と比べコマンドをうまく使えるようになってきました。
この考え方は大事だなと思ったので、備忘録として残しておきます。
Unix系OSを触っていたときは、この考え方にはたどり着けませんでした。データを行で管理するかコレクションで管理するかの違いでしかなくて、本質的には同じはずですが……(´・ω・`)