Docker で code-server を試してみる
モチベーション
code-server がかなり良く仕上がってきているらしいので、使ってみる。
* https://github.com/cdr/code-server
* https://coder.com/docs/code-server/latest
PC を持ち運ばず、タブレットなどでいつでも気軽に開発ができる環境を構築するのが自分の理想。
code-server で Web IDE を提供し、多数あるリモートのサーバに SSH 等で接続して開発を行いたい。
現在の code-server は何処までできるのか、検証したい。
Remote Development はまだ使えない
調査で分かったことは、現状 remote development extension はサポートされていないため、このコンテナをベースにリモートサーバ上で開発ということは出来ないらしい。とはいえ、このコンテナの上で自分用の開発環境を構築すれば、かなり理想には近づく。なので、今回は開発用コンテナ debian:bullseye-slim をベースに code-server を同居させた構築を目指す。
Android / iPad タブレット単体では Chrome DevTools が使えない
PC を持ち運ばないこと(身軽になること)が理想だが、Android / iPad では Chrome DevTools が使えない。Chromebook に Crostini で、という手もあるが。。。現状では、windows または macOS がまだ必要。Surface Go 3 辺りのタブレットが理想に近いか。
Android には Droid Web Spector、iPad には Console というツールがあるらしい が、未検証。
PHP や Node.js のライブラリ開発などであれば、DevTools 要らないので Android / iPad でも全然行けそう。
開発言語のターゲット
ターゲットとする開発言語は フロントエンド html, css, JavaScript/TypeScript、バックエンドは PHP とする。
予めコンテナに、php, php-xdebug, composer, node.js git 等をインストールしておくとよい.
今回インストールした PHP 向けの extension は、
- PHP Language Basics (built-in) 一旦、ダウンロードしてからインストール
- https://open-vsx.org/extension/vscode/php から PHP Language Basics (built-in) という extension をダウンロード
- マニュアルでインストールするには、
code-server --install-extension path_to_vsix
- PHP Debug
- PHP Intelephense
なお、フロントエンド用の各種エクステンションは未検証。
構築手順
- code-server コンテナをビルドし、Docker レジストリに登録
- ビルド済みコンテナを pull
- 環境は Docker で作成するため、ソースコード等を永続化するためのボリュームを作成
- docker-compose で起動環境を構築
- インターネットからの接続は ssh トンネルや SSL 経由など
結果は快適!
味見程度の検証結果としては、ブラウザから xdebug も使え、非常に快適な開発環境が構築できる。
スマホでは画面が小さすぎて操作が辛いが、8インチ程度のタブレットからなら、十分操作できる。
但し、各種ウィンドウのリサイズにマウスやタッチパッドが無いと大きさの調整が難しい。
今後の課題、発展の可能性
コンテナ自体はアップデートなどでインスタンスが再生成されることがあるため、設定内容やストレージの永続化が必要。docker volume, Git リポジトリの組み合わせで十分。
また、Web アプリケーションの開発では、 code-server への接続用ポートの他、デバック用の Web ポートも別で必要になる。
開発用 Web サーバは PHP Built-in Server で十分かと思うが、nginx & php-fpm 等を使っても良い。
複数ユーザーでの運用を考えると、ユーザー単位に docker-compose.yml ファイルを作り、ユーザー単位にサブドメインを生成し、nginx proxy などを置いて、ポート転送すると判り易い。
個人開発用環境の場合はコンテナから更に外部サーバへの ssh 接続ができると、 code-server の terminal からデプロイ作業や簡単な調査用の接続が可能になる。
但し、前述の通り Remote Development 拡張はまだ利用できないため、過度な期待はしない方がよい。
その他、必要に応じて MySQL や Redis などの永続化層をサービスしたり、インスタンスのリソースを調整したり。
タブレット以外何も持たないのが理想なので、あまり好きではないが phpMyAdmin などの管理ツールもインストールしておくと良いか。
その辺りの付加サービスは、面倒だから AWS 等のクラウドで全てサービスすれば楽になれるか?
MIT ライセンスなので商用サービス化も考えられるが、それは 本家の Coder を使えば良い。