一番簡単な入門方法

さて、PowerShellについて少しでもおわかりいただけたなら幸いなことだ。ここからは一番簡単な入門方法についてお話ししたい。PowerShellを使おうと検討している方がどんな方なのかによって、PowerShellというものの見え方がかなり違うと考えられる。しかし、どの立場にいたとしても一番簡単な入門方法を考えてみた。もちろん異論や反論はあるだろう。

環境を揃えるには

もしお使いのコンピュータがWindowsであれば、非常にラッキーだ。最新ではないがPowerShellを利用する準備はすでに整っている。スタートメニュー(スタートメニューがないバージョンをお使いかもしれないが)などからWindows PowerShellというアイコンを見つけたらクリックしてほしい。これで準備は万端だ。

もしmacやLinuxの場合は最新のバージョンしか選択できない。なぜなら、クロスプラットフォーム化されたPowerShellが最新バージョンだからだ。それに、それまでのPowerShellはWindowsでしか動作しない。それぞれインストーラが存在する。Githubのプロジェクトページにあるリリースから該当するインストーラを選んでダウンロードしてほしい。そしてそれをインストールだ。ダウンロードするまでにお気づきだと思うが、2017年2月現在ではα版という状態だ。だから思わぬ動作をすることがあるかもしれない。さらにインストールができない場合もあるだろう。そうしたときにはソースコードからビルドするという方法もあるにはある。

ここまでお読みになれば、一番簡単な環境構築の方法はWindowsを持っているということがよくお判りだろう。

基本的な操作を知る

ラッキーにも環境を構築できたら、次は起動してみよう。Windowsではさまざまな起動の方法がある。メニューからアイコンで起動する。エクスプローラのアドレスバーに「powershell」と入力して起動する。「ファイル名を指定して実行」ダイアログに「powershell」と入力して起動する。コマンドプロンプトから「powershell」を実行する。どの方法でもかまわない。

macやLinuxの場合はターミナルから「powershell」と実行すれば起動することができる。何が変わったか?プロンプトがいつものものと違うことを確認してほしい。これがPowerShellコンソールというものだ。オペレーティングシステムごとの実行ファイルから起動された.Net Frameworkオブジェクトの塊によって構成されている。しかし基本的にはコマンドプロンプトだったりターミナルでしかない。

現在のフォルダ位置を出力するには「pwd」とすればいい。それはmacやLinuxでは当たり前のコマンドだ。出力はどうだろうか?普段のpwdコマンドの出力とは違うはずだ。「Path」というヘッダーがついた状態で出力されている。ここがオブジェクトが出力であるということだ。コマンドラインからの操作に慣れている方であれば、ほとんどは普段と変わらない操作でフォルダ間の移動などもおこなうことができるようになっている。しかし、出力は異なる。それにオプションも異なる。

これはPowerShellにあるエイリアス機能が働いているためだ。つまりはよく知っているコマンドの名前をエイリアス(別名)としてPowerShellに用意されたコマンドレットへ読み替えて実行しているためだ。はっきり言って、Unixの世界で生活してきた方には気持ちが悪くて仕方がないことだと思う。

いまのところ、「ls」などについてはUnixの方のコマンドを呼び出すようにしてある。Windowsではもちろんコマンドレットが呼び出されているのだが、クロスプラットフォームになったばかりの過渡期であるためだと思いたい。

気持ちの悪いことが続くのだが、入門するためにはコマンドレットを利用する他に、制御構文や演算子、変数なども学んでいく必要があるだろう。これらはシェルからの操作だけを考えると不要なものかもしれない。ただ、PowerShellにおいては無用なトラブルを未然に防ぐために知っておいたほうがよいこと、という捉え方もできる。

よく使うコマンドレットを繰り返し使う

はじめのうちは意図しない結果を生むことが多い。UnixコマンドやWindowsコマンドに慣れていたとしても、驚きを隠せないこともある。ExcelマクロなどからPowerShellへ入門しようとすると、こんなこともできないのか、とうんざりすることもあるかもしれない。これはあまりにもPowerShellの文化が独特であるためだ。

一方で、PowerShell自体のプログラミング言語としての仕様はそれほど難しいものではない。意外とあっさりしている。これも.Net Frameworkを拡張しているような形になっているためだと考えられる。むしろ学習をすすめていくほどにオペレーティングシステムとの絡みやWindowsにおいては旧来の技術との絡みで悩まされることのほうが多いかもしれない。

正直言って、PowerShellを使うだけならコマンドレットでよく使いそうなものだけを繰り返し利用してみて手になじませることのほうがよほどか有意義だと考えている。あなたがいまお使いのオペレーティングシステムで一番行う操作はなんだろうか?フォルダを開く?ファイルを開く?あたらしくファイルをつくる?フォルダをつくる?ブラウザでウェブ閲覧がほとんどかもしれない。

それでは、ここではPowerShellでよく使いそうなコマンドレットをならべてみることにした。もちろん、もっとたくさん存在しているしモジュールを追加すればさらに増えていく。覚える必要があるのか?htmlのタグなどと違って覚えておく必要があるものは少ない。わたしも最初は「こんなにあるのか!?無理だ!」と憤ったこともあった。しかしいずれ気がつくはずだ。慣れれば自分で探すことができるようになるからだ。

コマンドレット なにをするものか 別名
Get-Help コマンドレットなどのヘルプを表示する help
Set-Location 現在のフォルダを変更する cd
Get-Location 現在のフォルダパスを出力する pwd
Get-ChildItem 指定フォルダ内のフォルダ、ファイルを出力する dir
Get-Content 指定ファイルの内容を出力する cat
New-Item アイテム(フォルダ、ファイル)を作成する ni
Copy-Item アイテム(フォルダ、ファイル)をコピーする copy, cp
Move-Item アイテム(フォルダ、ファイル)を移動する mv, move
Remove-Item アイテム(フォルダ、ファイル)を削除する rm
Rename-Item アイテム(フォルダ、ファイル)の名前を変更する ren
Set-Content ファイルなどに出力する
Out-File ファイルに出力する
Write-Output 標準出力へ出力する echo
Write-Warning 標準出力へ警告を出力する
Write-Error 標準エラー出力へ出力する
Write-Host コンソールへ出力する

このくらいを繰り返し利用していけば徐々に慣れてくるはずだ。もし、このあたりでわからないことがあれば、Get-Helpコマンドレットにコマンドレット名を指定して実行するとヘルプを出力してくれる。また、-Onlineパラメータをつけることでブラウザで公式ドキュメントを表示してくれるため、より見やすくなっている。

Get-Help Get-Content -Online

基本的な操作がPowerShellでできるようになったら、はじめてスクリプト利用を考えるとよいだろう。

モチベーションを下げる難関

PowerShellを学ぶときに発生する、最大の難関が「いままでのコマンド環境やほかのスクリプト言語でもできるよ」という事実だろう。実際、先ほど列挙したコマンドレットはUnixコマンドでもWindowsコマンドでも解決できるものがほとんどだ。わざわざ新たに覚え直す必要があるのか!?と考えてしまうと、それ以上のモチベーション発揮は期待できない。

わたしも最初はこのことでPowerShellを学ぶ必要があるのかどうか非常に悩んだ。学ぶために「学ぶべきか」と悩ませるプログラミング言語なんてあるのだろうか?とすら思う。それでも学ぶべきだと考えられることはたった1つしかない。それはPowerShellが既存のコマンド環境やスクリプト環境を置き換えるものではないということだ。

PowerShellの操作をしていれば自ずと気がつくのだが、PowerShellコンソールからはUnix / Windowsコマンドや既存のアプリケーションもほとんど違和感なく実行することができる。つまり、既存のアプリケーションやツールセットありきの世界を想定してデザインされているのだ。これらと競合することなく、自然に共存できるように入出力をオブジェクトにしてある。このため、既存のツールセットが出力する標準出力をテキストオブジェクトとしてパイプラインから受け取り、加工してオブジェクトとして出力することができる。結果が標準出力のこともあるだろうし、ファイルということもあるだろう。場合によってはWeb APIの呼び出しということも可能だ。サービスに特化したモジュールを介してクラウドの操作にも利用できる。

このほかに、わたし個人がPowerShellを学ぶに至ったモチベーションの1つを挙げておきたい。それは.Net Frameworkをコンパイルすることなく利用することができ、既存の.Net資産を利用してコマンドラインツールの外側へ容易に脱出を図ることができるためだ。コマンド環境でもあり、スクリプト環境でもある。さらにWindowsでは標準的にインストールされているため、あえてWindowsでUnixをエミュレートする環境を準備しなくてもある程度のことまでカバーすることができるというのも魅力だった。おかげでわたしはPowerShellを利用しながら学び、文法を学び直したのは数年後のことだった。

まとめると、モチベーションを下げてしまう「いままでの環境やスクリプトでもできるのに、学ぶ理由はあるのか」という問いに対しての回答はいままでの技術や資産を違和感なくつないで、さらに.Net Frameworkを利用して効率的にオペレーションすることができるということになるだろう。

これでもまだPowerShellはどうだろうと考えるのであれば、個人的にはpython、groovyをお勧めしたい。これらはコマンド環境ではなくスクリプト環境だが、pythonはほとんどのUnix環境にインストール済みでありターミナルを起動すればすぐに学習を開始することができる。それに情報も書籍の数もPowerShellとは比較にならないほど多い。groovyはJavaを使用しているユーザーにはもってこいだ。Javaで書いたコードファイルをそのままgroovyコマンドに渡すと問題なく実行してくれるはずだ。

results matching ""

    No results matching ""