ターミナルでCLIを使って複数のリポジトリを操作することを普段から行なっています。
対象のリポジトリがGitHubの場合は gh browse
でシュッとCLIからブラウザへ切り替えて対象リポジトリを操作することができますが、Azure DevOpsでもそれをちょっとした工夫でできるようにしました。
課題
Azure DevOpsのReposをターミナルのCLIからブラウザでシュッと開きたい。
前提(環境)
以下の環境で行なっています。
- MacOS: Sonoma 14.4
- awk: 20200816
- zsh: 5.9
- azure-cliは以下
{
"azure-cli": "2.58.0",
"azure-cli-core": "2.58.0",
"azure-cli-telemetry": "1.1.0",
"extensions": {
"account": "0.2.5",
"azure-devops": "1.0.0"
}
}
対策
以下のようなローカルコマンドを用意する。(2024年にオライリーから本が出ると話題のawk
を使用しています)
#!/bin/zsh
git config --get remote.origin.url | awk -F/ '{cmd="az repos show --open --org=https://dev.azure.com/"$5 " --project="$6 " --repository="$7}END{print cmd;system(cmd)}'
上記をPATHの通った ~/bin/
などへ適当な名前で配置しておくことで、簡単にターミナルで操作中のAzure DevOps Reposのリポジトリをブラウザから開けるようになりました!
私の場合は以下のようにローカルのコマンドを用意しています。azroは"AZure Repos Open"の略です。
$ vim ~/bin/azro
-> 上記のコマンドを貼り付け
$ chmod +x ~/bin/azro
-> 権限付与
$ azro
-> 動作確認、ブラウザ起動!
解説
簡単にコマンド解説です。
azコマンドにはもともと az repos show --open
でブラウザを開く機能が用意されています。
--open : Open the repository page in your web browser.
$ az repos show --help
This command is from the following extension: azure-devops
Command
az repos show : Get the details of a Git repository.
Arguments
--repository -r [Required] : Name or ID of the repository.
--detect : Automatically detect organization. Allowed values: false, true.
--open : Open the repository page in your web browser.
--org --organization : Azure DevOps organization URL. You can configure the default
organization using az devops configure -d organization=ORG_URL.
Required if not configured as default or picked up via git config.
Example: https://dev.azure.com/MyOrganizationName/.
--project -p : Name or ID of the project. You can configure the default project
using az devops configure -d project=NAME_OR_ID. Required if not
configured as default or picked up via git config.
az repos show
コマンドに対しては以下の3パラメータを渡します。
- --org
- --project
- --repository
az repos show
コマンドの必須パラメタは--repository
のみで、--project
と--org
はgit configureまたはdevops configureから取得するとhelpに記述がありますが、省略したところエラー
Page not found. Operation returned a 404 status code.
となったため敢えて指定しています。(これは私の環境が良く無いだけかもしれません...)
参考としてdevops configureは以下の様に設定します。
az devops configure --defaults organization=https://dev.azure.com/MyOrganization project=MyProject
3つのパラメタに必要な情報を git config --get remote.origin.url
から awk
で刻んで取得しています。
具体的にgit config --get remote.origin.url
からは
ssh//git@ssh.dev.azure.com/v3/MyOrganization/Project/Repository
のような結果がリターンされます。
これをawk
を利用し -F/
で'/'を区切り文字として指定し、文字列az repos show
も整形しつつsystem
でコマンドを実行しました。
awk -F/ '{
# 変数cmdにコマンドを組み立てる
cmd="az repos show --open --org=https://dev.azure.com/"$5 " --project="$6 " --repository="$7
}
END{
# 実行されるコマンドを一応printで表示
print cmd;
# 組み立てたコマンドを実行
system(cmd)
}'
謝辞
上記は @raki からいただいた私のPostに対する以下の返信を参考に実現できました。サンキュー!!
その他
今回は簡単なローカルコマンドで実現しました。
一方 @raki の返信でコメントもありましたが、以下のFeature Requestが実装されればaz repos show
のオプションで簡単に開ける様になるかもしれません。