[RUBY] Ouvrez VS Code Remote Containers directement depuis la CLI sur votre Mac

Comment ça fonctionne

Après avoir ouvert une fois VS Code Remote Containers, accédez à cat ~ / Library / Application \ Support / Code / storage.json Si vous regardez windowsState> lastActiveWindow> dossier, vous pouvez voir qu'il ressemble à ce qui suit.

    "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": []
    },

Si vous connaissez l'URL de ce dossier

$ code --folder-uri vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src

Il est possible de lancer directement depuis la CLI de cette manière.

La partie de 2f557365722f6e616d652f646576656c6f702f70726f6a656374 est une chaîne de caractères hexadécimaux Le décodage donnera / User / name / develop / project. Vous pouvez également voir qu'il est encodé en URL car il contient % 2B. Le dernier / usr / src est le chemin spécifié par workspaceFolder dans devcontainer.json. Sur cette base, comme l'ensemble du composant URL

"vscode-remote://" + URI.encode_www_form_component("dev-container+" + "/User/name/develop/project".unpack('H*')) + "/usr/src"

Il semble que ce soit le cas.

Créer un script

Écrivons un script qui générera une URL pour démarrer VS Code Remote Containers après avoir spécifié le chemin. Il est généré en lisant workspaceFolder de .devcontainer / devcontainer.json sous le chemin spécifié.

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)

Enregistrez ce qui précède en tant que main.rb et exécutez comme suit pour générer l'URL

$ ruby main.rb '/User/name/xxxx'
# => vscode-remote://dev-container%2B2f557365722f6e616d652f646576656c6f702f70726f6a656374/usr/src

Création de flux de travail Alfred

Cette fois, j'ai créé des workflows qui fonctionnent en combinaison avec ghq. VSCode est démarré directement dans le conteneur en spécifiant le nom du référentiel comme ↓ comme image d'opération.

Je l'ai ajouté au script ci-dessus lors de la création de flux de travail.

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

Ce que je fais, c'est utiliser ghq pour obtenir une liste des dépôts cibles J'essaie de ne renvoyer que le référentiel contenant le répertoire .devcontainer.

Le produit fini est https://gist.github.com/Slowhand0309/253bb296cd7acb089601d2b32da4723b Je l'ai mis ici. Je viens de le faire pour le moment, donc si vous trouvez des problèmes Nous vous serions reconnaissants si vous pouviez nous contacter.

Recommended Posts

Ouvrez VS Code Remote Containers directement depuis la CLI sur votre Mac
Hello World sur Mac VSCode Java
[Ruby on Rails] Saisissez automatiquement une adresse à partir d'un code postal
Comment ouvrir un fichier de script à partir d'Ubuntu avec du code VS
Exécutez l'AWS CLI sur Docker
Construire Java avec Mac vs Code
Passer d'Eclipse à VS Code
Environnement de développement Java (Mac, VS Code)
Vérifiez si vous ne pouvez pas accéder au conteneur à partir de l'hôte dans l'environnement Laravel sur docker à l'aide du conteneur distant de VSCode.