[[VisualStudioCode]] >

* 目次 [#l42d75af]
#contents

* 概要 [#od22f5ba]

- code-server はリモートサーバでVisualStudioCodeを実行し、ブラウザからのアクセスを可能にしてくれるOSSです。いわゆるクラウドIDEプロダクトです。

* インストール [#df2eeb08]

- クラウドでのコンテナ実行が最終的なゴールだと思われますが、セットアップの手間と制限を考慮すると現時点ではサーバローカルでの実行がおすすめです。

** サーバローカル [#lea1f4df]

+ [[こちら>https://github.com/codercom/code-server/releases]]から最新のアーカイブをダウンロードします。
#geshi{{
$ curl -L -O $(curl -s -L https://api.github.com/repos/cdr/code-server/releases/latest | jq -r '.assets[] | select(.name | contains("linux-x64")) | .browser_download_url')
}}
+ 解凍して適当な場所に配備します。
#geshi{{
$ sudo tar xvzf code-server*-linux-x64.tar.gz -C /usr/local/bin/ --strip=1 --wildcards '*/code-server'
}}
+ 以下のような要領で起動させます。デフォルトではフォアグラウンドで 0.0.0.0:8443 のHTTPSサービスとして起動されます。サーバ証明書と秘密鍵を省略した場合には自己署名証明書が自動で作成されます(ブラウザアクセス時に警告されます)。オープンフォルダの指定は必須ではありません。
#geshi{{
$ /usr/local/bin/code-server \
  --disable-telemetry \
  --cert=/path/to/server.crt \
  --cert-key=/path/to/server.key \
  ~/dev
}}
+ https://code-server.example.com:8443 のようなURLでアクセスし、起動時に出力されたパスワードを入力します。
-- code-server は実行ユーザ(あなた)権限で起動しており、IDE内のターミナルからは通常のシェルと同じ操作が可能です。
-- 設定はデフォルトで ''~/.local/share/code-server'' に保存されます。インストールした拡張機能等も保存されます。これは、''--user-data-dir'' 起動オプションでで変更することも可能。
-- また、あなたの環境ではおそらく ssh-agent によるSSH認証もセットアップ済みだろうと思われますので、SSH経由のgit操作なども問題なく行えます。
-- なお、code-serverコマンドの起動オプションは以下の通りです。
#geshi{{
$ code-server --help
Usage: code-server [options]

Run VS Code on a remote server.

Options:
  -V, --version                output the version number
  --cert <value>
  --cert-key <value>
  -e, --extensions-dir <dir>   Set the root path for extensions.
  -d --user-data-dir <dir>      Specifies the directory that user data is kept in, useful when running as root.
  --data-dir <value>           DEPRECATED: Use '--user-data-dir' instead. Customize where user-data is stored.
  -h, --host <value>           Customize the hostname. (default: "0.0.0.0")
  -o, --open                   Open in the browser on startup.
  -p, --port <number>          Port to bind on. (default: 8443)
  -N, --no-auth                Start without requiring authentication.
  -H, --allow-http             Allow http connections.
  -P, --password <value>       DEPRECATED: Use the PASSWORD environment variable instead. Specify a password for authentication.
  --disable-telemetry          Disables ALL telemetry.
  --socket <value>             Listen on a UNIX socket. Host and port will be ignored when set.
  --install-extension <value>  Install an extension by its ID.
  --bootstrap-fork <name>      Used for development. Never set.
  --extra-args <args>          Used for development. Never set.
  -h, --help                   output usage information
}}

** on [[WSL>BashOnUbuntuOnWindows]] [#z2919ced]

- Windows版のVS CodeはWSLのファイルシステムにアクセスできませんが、WSL上でcode-serverを実行することによりWSL環境を全面的に活用してVS Codeを利用した開発ができるようになります。

+ [[こちら>https://github.com/codercom/code-server/releases]]から最新のアーカイブをダウンロードします。
+ 解凍して適当な場所に配備します。
#geshi{{
$ tar xvzf code-server<version>-vsc<version>-linux-x64.tar.gz
$ sudo mv code-server<version>-vsc<version>-linux-x64/code-server /usr/local/bin/
}}
+ 以下のような要領で起動させます。ローカルホストとしてアクセスすれば十分ですので、認証なしのHTTPサービスでよいでしょう。オープンフォルダの指定は必須ではありません。
#geshi{{
$ /usr/local/bin/code-server \
  --disable-telemetry \
  --allow-http --no-auth \
  --host 127.0.0.1 --port 8080 \
  ~/dev
}}
+ http://localhost:8080 にアクセスします。
-- code-server は実行ユーザ(あなた)権限で起動しており、IDE内のターミナルからは通常のシェルと同じ操作が可能です。
-- 設定はデフォルトで ''~/.local/share/code-server'' に保存されます。インストールした拡張機能等も保存されます。これは、''--user-data-dir'' 起動オプションでで変更することも可能。
-- また、あなたの環境ではおそらく ssh-agent によるSSH認証もセットアップ済みだろうと思われますので、SSH経由のgit操作なども問題なく行えます。

** sshcode [#i4be5b08]

- すでにLinuxデスクトップでVisualStudioCodeを利用している場合には、sshcodeコマンドでサーバにcode-serverを起動されるのが便利です。開発にサーバのリソースを利用することができます。
- https://github.com/codercom/sshcode

** on Docker [#o5f64c35]

- サービス再起動の便のため、DockerComposeを利用します。
- &ref(images/lightbulb.png,nolink);以下の内容は[[こちらのリポジトリ>https://github.com/wdstar/code-server]]にまとめてあります。このリポジトリを git clone すればすぐに起動させることができます。

+ 適当なアプリケーションフォルダを用意します。開発環境をある程度永続化するためにホームディレクトリをマウントするためのディレクトリ(''coder/'')も作成し、コンテナ起動ユーザ(''coder (1000:1000)'')をオーナーにします。
#geshi{{
$ mkdir -p ~/docker-compose/app/code-server
$ cd ~/docker-compose/app/code-server
$ mkdir coder
$ sudo chown 1000:1000 coder
}}
+ 以下のような設定ファイル(''~/docker-compose/app/code-server/docker-compose.yml'')を用意します。
#geshi(yaml,number){{
---
version: '2'
services:
  code-server:
    image: codercom/code-server:latest
    command:
    - --disable-telemetry
    # with server certificate and key
    #- --cert=/server.crt
    #- --cert-key=/server.key
    # for local access
    #- --allow-http --no-auth
    ports:
    - 8443:8443
    # for local access
    #- 127.0.0.1:8080:8443
    volumes:
    - "${PWD}/coder:/home/coder:rw"
    - "${PWD}/opt:/opt:rw"
    - "${SSH_AUTH_SOCK}:/ssh-agent:rw"
    # with server certificate and key
    #- "/path/to/server.crt:/server.crt:ro"
    #- "/path/to/server.key:/server.key:ro"
    environment:
      # ICU
      LD_LIBRARY_PATH: /opt/icu/lib
      # Optware-ng, .Net
      PATH: '${PATH}:/opt/bin:/opt/sbin:/opt/dotnet:/home/coder/dotnet'
      SSH_AUTH_SOCK: /ssh-agent
}}
-- 起動オプションに ''--allow-http --no-auth'' を指定しない場合、''0.0.0.0:8443 のHTTPSサービス(フォーム認証付き)''として起動されます。
-- gitのアクセスの便のためSSH認証のため認証ソケットをコンテナ内にマウントしています。したがって、認証ソケットがすでに利用可能であることをあらかじめご確認ください。また、ホストサーバへのSSHログインセッションが閉じるとこの認証ソケットも利用不可(再マウントが必要)となりますのでご注意ください。
-- &ref(images/lightbulb.png,nolink);認証なしのローカルホストサービスにしてリモートからセキュアにアクセスしたい場合には、SSHトンネルをセットアップするとよいでしょう。
+ coder ユーザにSSH認証ソケットへの読み書き権限を付与((GIDが1000のグループに対して認証ソケットへのアクセス権を付与することにリスクがある場合にはそのサーバでの利用は控えましょう。))してから起動させます。これらは起動スクリプトにしておくとよいかもしれません。
#geshi{{
$ sudo chgrp 1000 $SSH_AUTH_SOCK
$ sudo chmod g+w  $SSH_AUTH_SOCK
$ docker-compose up -d
}}
docker-compose の実行にsudo権限が必要な場合には、環境変数を引き継ぐため ''-E'' オプションを付加します。
#geshi{{
$ sudo -E docker-compose up -d
}}
+ https://code-server.example.com:8443 のようなURLでアクセスします。
-- パスワードは、 ''docker-compose logs'' コマンドで確認できます。
-- 起動ユーザは ''coder (1000:1000)''ですので、マウントした ''${PWD}/coder'' ディレクトリへの読み書きに支障はないでしょう。クラウド環境を含めてそれ以外の場合はその限りではありません。
-- この[[イメージ>https://github.com/codercom/code-server/blob/master/Dockerfile]]では coder ユーザにパスワード入力不要のsudo権限が付与されていますので、開発に必要なツールのインストールにも不便はないでしょう。

*** 開発言語やツールのインストール [#l285a41d]

- コンテナは揮発しますので、ディストリビューションのパッケージによる言語SDKのインストールは起動毎の手間になるかもしれません。
- 上記のセットアップ例ではホームディレクトリ(''/home/coder'')と ''/opt'' ディレクトリを永続化するようにマウントしていますので、それらのディレクトリにインストールするようにするとよいでしょう。
- 詳細については、[[こちらのリポジトリ>https://github.com/wdstar/code-server]]をご参照ください。

* 既知の問題、制限 [#m8fa063a]

** 共通 [#r01523a0]

+ Microsoftのオフィシャルマーケットプレイスがまだ利用できません。
-- 直接オフィシャルサイトから ''.vsix'' ファイルをダウンロード(各プラグインページのDownload Extensionリンク)してインストールすることは可能です。
+ ''Japanese Language Pack for VS Code'' が有効になりません。
+ %%''.vsix'' ファイルで拡張がインストールできない%%([[#508>https://github.com/codercom/code-server/issues/508]]で修正済)。

*** .Net [#j755504a]

+ ライセンスの制限でデバッグ機能が使えない([[Debugging .NET Core>https://github.com/cdr/code-server/issues/473]])
-- https://aka.ms/VSCode-DotNet-DbgLicense
+ BOMのあるファイルの編集、保存ができない([[Cannot save *.cs or *.fs file. #389>https://github.com/cdr/code-server/issues/389]])

** サーバローカル、on WSL [#ga462004]

+ ''Open Folder...'' でホームディレクトリ直下をブラウズできない場合があります。

** on Docker [#h5e0a92d]

+ %%以下のエラーで認証機能が正しく動作しません。%%
 code-server_1  | Error: ENOENT: no such file or directory, open '/src/packages/server/build/web/login/index.html' 

** CentOS 7 [#d3c1385d]

- gccのバージョンが古く、起動に失敗します。比較的新しいgccをソースからビルドしインストールすれば解決しますが、上記のDockerを利用する方が簡単でしょう。
#geshi{{
$ code-server
code-server: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by code-server)
code-server: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by code-server)
code-server: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by code-server)
}}

* Tips [#c9daedf9]

- エディタとターミナルの Font Family を ''Consolas, 'Courier New', monospace''((エディタのデフォルト設定は、'Droid Sans Mono', 'monospace', monospace, 'Droid Sans Fallback')) に変更すると、通常版と同じ体裁になります。
- Chromeのショートカット(リンク先の例: ''"...\chrome.exe" --app=https://code-server.example.com:8443/ '')を作成し、アプリケーションとして起動するとアドレスバーなどが非表示となりすっきりします。

* リソース [#h5376a40]

- https://github.com/codercom/code-server

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS