After opening VS Code Remote Containers once, go to cat ~ / Library / Application \ Support / Code / storage.json
If you look at windowsState> lastActiveWindow> folder, you can see that it looks like the following.
"windowsState": {
"lastActiveWindow": {
"folder": "vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src",
"backupPath": "...",
"remoteAuthority": "dev-container+2f557365722f6e616d652f646576656c6f702f70726f6a656374",
"uiState": {
"mode": 1,
"x": 0,
"y": 23,
"width": 3440,
"height": 1417
}
},
"openedWindows": []
},
If you know the URL of this folder
$ code --folder-uri vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src
It is possible to launch directly from the CLI in this way.
The part of 2f557365722f6e616d652f646576656c6f702f70726f6a656374 is hexadecimal string.
Decoding this will result in / User / name / develop / project. You can also see that it is URL-encoded because it contains % 2B.
The final / usr / src will be the path specified by workspaceFolder in devcontainer.json.
Based on these, as the whole URL component
"vscode-remote://" + URI.encode_www_form_component("dev-container+" + "/User/name/develop/project".unpack('H*')) + "/usr/src"
It seems that it is.
I will write a script that will generate a URL to start VS Code Remote Containers after specifying the path.
It is generated by reading workspaceFolder of .devcontainer / devcontainer.json under the specified path.
main.rb
# frozen_string_literal: true
# !/usr/bin/env ruby
require 'json'
module VSCodeRemoteContainer
class Utility
def initialize
end
def generate_url(root_path)
folder = find_workspace_folder(root_path)
path = "dev-container+#{root_path.unpack('H*')[0]}"
puts "vscode-remote://#{URI.encode_www_form_component(path)}#{folder}"
end
def find_workspace_folder(root_path)
unless File.exist?("#{root_path}/.devcontainer/devcontainer.json")
puts 'Not found devcontainer.json file.'
return
end
config = JSON.parse(File.read("#{root_path}/.devcontainer/devcontainer.json"))
config['workspaceFolder']
end
end
end
VSCodeRemoteContainer::Utility.new.generate_url(*ARGV)
Save the above as main.rb and execute as below to generate the URL
$ ruby main.rb '/User/name/xxxx'
# => vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src
This time, I created Workflows that work in combination with ghq.
VS Code is started directly in the container by specifying the repository name as ↓ as an operation image.

I added it to the above script when creating Workflows.
module VSCodeRemoteContainer
class Utility
attr_accessor :bin_path
def initialize
@bin_path = ENV['GHQ_PATH'] || '/usr/local/bin'
end
def ghq_exists?
!`which #{@bin_path}/ghq`.empty?
end
def search
return unless ghq_exists?
result = []
`#{@bin_path}/ghq list --full-path`.split(/\R/).each do |d|
Dir.foreach(d) do |path|
next if ['.', '..'].include?(path)
file = File.join(d, path)
result << d if file.include?('.devcontainer')
end
end
result
end
end
end
What I'm doing is using ghq to get a list of the target repositories and
I try to return only the repositories that have the .devcontainer directory.
The finished product is https://gist.github.com/Slowhand0309/253bb296cd7acb089601d2b32da4723b I put it here. I just made it for the time being, so if you find any problems We would appreciate it if you could contact us.
zsh, but if you can modify it with your shell as you like: pray:Recommended Posts