0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

テンプレートリポジトリからPowerShellスクリプトで楽に新規作成する

Last updated at Posted at 2023-02-18

概要

  • 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

みたいなコマンド一発で実行できると便利ですね!
では作りましょう!

poetry-template.ps1
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では実はcdSet-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したり。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?