LoginSignup
0
0

More than 1 year has passed since last update.

[備忘録]flatpak上のVSCodeでrust-analyzerを動かす (SDK extensionを利用する)

Posted at

rust-analyzerのドキュメントに書いてあると言われればそうなんだが、読んでも苦労したのでメモしておく。もっといい方法を知っている人がいたらコメントをほしい。
現段階では、VSCodeをflatpakで動かすのは苦労が多いので他人には推奨しない。

結論

org.freedesktop.Sdk.Extension.rust-stable をインストールし、VSCodeのコンテナに環境変数 FLATPAK_ENABLE_SDK_EXT=* を加える。

Flatpak

公式サイトはこちら。Linuxデスクトップのアプリケーションをコンテナ上で動かす仕組み。パッケージマネージャも兼ねている。
Flatpakの概要図

FlatpakでのVSCodeのインストールと実行

インストール
flatpak install --user com.visualstudio.code
実行
flatpak run com.visualstudio.code

どういう問題が起きたか?

VSCodeの拡張機能 rust-analyzer をインストールしたが、rust-analyzer上から cargo が見つからなかった。VSCodeが動作しているコンテナから、ホスト環境の /usr/bin などが見えていないことが原因。

rustup環境でcargoが呼び出される仕組み

実は cargorustup へのシンボリックリンクになっている。

$ ls -l $(which cargo) 
lrwxrwxrwx 1 root root 15 Feb  4 21:47 /usr/bin/cargo -> /usr/bin/rustup

rustup は、自分がどの名前で呼ばれたかを見て、そして、他のコマンドの名前で呼ばれていたら、そのツールを代わりに動かす。

rust-analyzerのドキュメントには以下のようにある。

Distro packages will not work.

これはつまり、ディストリビューション標準のパッケージマネージャで rustup をインストールした場合、 cargo が(通常は) /usr/bin にあるのでコンテナから呼び出すのに苦労するということだと思ったらいい。今回、その方法を行わなかったが、おそらくPATH=/app/bin:/usr/bin:/bin:$HOME/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin をコンテナ上に設定すれば動くのではないか。

ランタイムExtensionのインストール

VSCodeのコンテナは、 org.freedesktop.Sdk ランタイム上で動いているが、そこに別途Rust環境を入れることができる。

まず、runtimeのバージョンを見ておく。

$ flatpak info com.visualstudio.code 

Visual Studio Code - Visual Studio Code. Code editing. Redefined.

          ID: com.visualstudio.code
         Ref: app/com.visualstudio.code/x86_64/stable
        Arch: x86_64
      Branch: stable
     Version: 1.76.2-1678817801
     License: LicenseRef-proprietary=https://code.visualstudio.com/license
      Origin: flathub
  Collection: org.flathub.Stable
Installation: user
   Installed: 10.2 MB
     Runtime: org.freedesktop.Sdk/x86_64/22.08
         Sdk: org.freedesktop.Sdk/x86_64/22.08

      Commit: 484df2e726d0d140db5a1730c4fc856eea730f6ea56ad410996bb88fd6c63979
      Parent: abaf56a1be37f0f0a455e3a3336137934a9527561c09ade1013355c4f131ea2d
     Subject: Update 2 modules (5024c3f3)
        Date: 2023-03-27 11:43:27 +0000

ここでは、 org.freedesktop.Sdk/x86_64/22.08 が使われている。

Rustをインストールする。

$ flatpak install --user org.freedesktop.Sdk.Extension.rust-stable

バージョンを聞かれるので、上と同じもの(ここでは 22.08)をインストールする。

Extensionを有効にする

なんと、インストールしただけではExtensionが有効にならない。環境変数 FLATPAK_ENABLE_SDK_EXT をセットすることで有効になる。
この環境変数は、ホスト側でもコンテナ側でもどちらでセットしてもいいらしい。

FLATPAK_ENABLE_SDK_EXT=* または FLATPAK_ENABLE_SDK_EXT=rust-stable (複数ある場合はカンマ区切り)をセットする。
もしコンテナ側でセットする場合、以下のように行う。

Flatsealを使ってGUIで行うのがおすすめ。コマンドで行いたい場合は flatpak override --user --env=FLATPAK_ENABLE_SDK_EXT=\* のように行う。

これで、無事に cargo がコンテナから見えるようになった。

参考文献など

.NETなどを動かすときも、SDK extensionが使えるようだ。

なお、flatpak上のVSCodeで、ターミナルが不便で困ることがあると思う。VSCodeに以下の設定を追加することで、ホスト環境のターミナルが使える。

{
  "terminal.integrated.defaultProfile.linux": "bash",
  "terminal.integrated.profiles.linux": {
    "bash": {
      "path": "/usr/bin/flatpak-spawn",
      "args": ["--host", "--env=TERM=xterm-256color", "bash"]
    }
  }
}
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