概要
- GitHubテンプレートリポジトリから、PowerShellスクリプト(.ps1)で楽に新規プロジェクトを作成する
- スクリプトの実行ポリシーについて少し触れる
経緯
poetryやNext.jsのテンプレートを(自分用に)作ってGitHubに置いています。
(ちなみにpoetryテンプレート自体の解説は以下の記事に書きました)
使うときは、
git clone https://github.com/torippy1024/poetry-template.git projectName
cd projectName
にようにクローンすればいいんですけど、ちょっと面倒。
あと新しいプロジェクトとして管理するので、リモートリポジトリはこの段階でテンプレートから切り離したいですね。(誤プッシュする可能性もあるし)
ついでにVSCodeで開発するのでcloneと同時にVSCodeで開いてしまいたいですね。
ということで、テンプレートリポジトリから新規プロジェクト作成時に実行したいのは以下になります。
git clone https://github.com/torippy1024/poetry-template.git projectName
cd projectName
git remote rm origin
code .
毎回全部打つのは面倒ですね…。
PowerShellスクリプトを作成
git clone https://github.com/torippy1024/poetry-template.git projectName
cd projectName
git remote rm origin
code .
を、
poetry-template projectName
みたいなコマンド一発で実行できると便利ですね!
では作りましょう!
Param ([string]$projectName = poetry-template)
git clone https://github.com/torippy1024/poetry-template $projectName
Set-Location $projectName
git remote rm origin
code .
大体そのままですね。
powershellのスクリプトファイルの拡張子はps1
です。
今回はプロジェクト名を引数として渡したいので、以下のように記述することで変数$projectName
に引数を渡します。
Param ([string]$projectName = poetry-template)
また、プロジェクト名の指定がなかったときはプロジェクト名がpoetry-template
になるようにデフォルト引数を与えてあげています。
あと元のスクリプトと違うところはSet-Location
くらいですね。
ディレクトリ移動には普通cd
を使うと思いますが、powershellでは実はcd
はSet-Location
のエイリアスになっています。
cd
でも動くのですが、vscodeでpowershellの拡張機能を入れて開発しているとwarningが出たのできちんとSet-Location
と書いています。
PowerShellスクリプトを実行
PowerShellスクリプトができたので、さっそく実行してみましょう。
.\poetry-template.ps1 projectName
さて、実行できたでしょうか?
「このシステムではスクリプトの実行が無効になっているため、…」といったエラーが出てないでしょうか?
おそらくデフォルトの設定では実行できないと思います。
もし実行できた場合はすでにご自身で何らかの設定を行っているだと思うので次の節に進みましょう。
実行ポリシーというものがあって、何も設定していないと.ps1
のスクリプトファイルの実行がブロックされます。
詳しい説明は後ほどしますが、一旦以下のコマンドでスクリプトファイルを一時的に実行できるようにしましょう。
(現在のセッション限りの設定なので、powershellを開き直すとまた実行できなくなります)
Set-ExecutionPolicy RemoteSigned Process
改めてps1を実行してみましょう。
.\poetry-template.ps1 projectName
おそらくtestという名前でcloneされた上でvscodeが立ち上がったのではないでしょうか。
立ち上がってたらOKです。
PowerShellスクリプトにパスを通す
ps1を実行できるようになりました。
しかし、今のままではps1ファイルをカレントディレクトリに置くか絶対パスで指定するかしてあげなければいけません。
パスを通すことでどこでも実行できるようにしてあげましょう。
パスの通し方の詳しい説明は省略しますが、自作ps1ファイルを置く用のフォルダを作って、そのフォルダにパスを通せばOKです。
あとは任意の位置でpoetry-template projectName
が実行できたら完成!
無事、GitHubテンプレートリポジトリからPowerShellスクリプト(.ps1)で楽に新規プロジェクトを作成できるようになりました!
ちなみにpowershellは入力補完してくれるので、最初の数文字打ってからtabを押せば全文入力しなくて済むと思います。
つまり、もともと
git clone https://github.com/torippy1024/poetry-template.git projectName
cd projectName
git remote rm origin
code .
と打たなきゃいけなかったところが、
poe
まで
便利ですね!
スクリプトの実行ポリシーについて
完成!めでたしめでたし…と言いたいところですが、今のままでは毎回Set-ExecutionPolicy RemoteSigned Process
打たなきゃいけないですね。
実行ポリシーをどうするかは悩みどころです。
こちらのサイトが非常に参考になると思います。
実行ポリシーは厳しい順に Restricted
(デフォルト), AllSigned
, RemoteSigned
, Unrestricted
, Bypass
です。
スコープは狭い順に、Process
(現在のセッションのみ), CurrentUser
(現在のユーザーのみ),LocalMachine
(現在のコンピュータすべて) です。
できるだけ厳しい&狭いスコープの方がセキュリティ的には良いということですね。
利便性とセキュリティは表裏一体なところがあるので、どのレベルにしておくかはご自身の環境に合わせて設定すると良いでしょう。
Get-ExecutionPolicy -List
で現在の実行ポリシーをスコープごとに確認することができます。
利便性重視の場合は以下を1回実行すると、そのユーザーでは永続的にps1ファイルを実行できるようにはなります。
Set-ExecutionPolicy RemoteSigned CurrentUser
powershellの実行ポリシーについては単体で記事を書きました。
終わりに
テンプレートリポジトリからPowerShellスクリプトで楽に新規プロジェクト作成する手順を紹介しました。
テンプレートの種類に合わせて、処理を追加したりしても良いかもしれませんね。
poetryプロジェクトならpoetry install
まで入れたり、npmならnpm install
したり。