code-serverでいつでもどこでもジョブテッチする

このエントリーは一人アドベントカレンダー2021 4日目のものです。
一人って何だ。

私儀、

FacebookとかLinkedinの職歴にはかなり前から反映していたんだけど、6月末で前職を退職して、コモン・クリエーション合同会社にCTOとしてジョインした。

技術で殴って課題を解決したり、効率化のために研究開発したりするお仕事だけれども、ゆるゆる頑張っていきたい。

端末ごとの環境合わせがだるい

ギョームでは自作PCで大抵の作業を行っているけど、稀によく(?)ソファでだらだらしながらMacBook AirとかMacBook Proとかでも作業するようになった。
開発を進めていくとNode.jsのバージョンを更新したり、Pythonのバージョンを更新したりするが、どうも環境間で合わせるのがだるい。
もちろん、nとかpyenvでバージョンを揃えられる状態にしているが、そんなことは本来hogeenv側で勝手にやってしかるべきことだと思う(.python-versionとかあるんだし)。
まあ、そんなことをここで喚いていてもしょうがないので、クラウド上に開発環境を置いといて、各端末から繋ぎに行けるような構成を作りこんだ。

https://github.com/mohemohe/docker-code-server

Oracle Cloud Infrastructureとcode-server

OCIについては省略。無料で4core/24GBのインスタンスがつかえるやつ。
ガチでやらないといけないプロダクトはともかく、ちょっといろいろやる分には開発用としては非力なスペックでもいいでしょうということで。

code-serverは、Coderが提供している、VSCodeをブラウザ上で動かしつつ、リモート接続でホストのファイルを弄れるようにしている環境。
似たようなものだとGitpodとかCodeAnywhereとかがあるが、基本的に有料。
code-serverを自力でホストすれば、環境の使い捨てが難しいかわりに無料で使うことができる。

今回は環境としてより扱いやすいlinuxserver.io版のlscr.io/linuxserver/code-serverを使う。

カスタマイズ

Dockerイメージをそのまま使うとユーザー名がabcでキショいのと、毎回hogeenvの依存パッケージを入れないといけないので、適宜カスタマイズする。
幸いにして、linuxserver.io版はs6-overlayが使われているのと、/config/custom-cont-init.dにcont-init.d相当のファイルを入れると実行してくれる仕組みが備わっているので、その辺をよろしくやる。

例えば、ユーザー名を変えるとしたら、/config/custom-cont-init.d/10-userみたいなファイルを用意して、

#!/usr/bin/with-contenv bash

DEDAULT_USER="$(id -un $PUID)"
mkdir -p /home/$USER
usermod -l $USER -d /home/$USER $DEDAULT_USER
echo "$USER ALL=(ALL) NOPASSWD: ALL" >| /etc/sudoers.d/default
chsh -s "$(which zsh)" $USER

とかやればいい(実際にはもっといろいろやっているけど)。

実際にできたもの

最終的にこんな感じ。
いつも使っているzshとdotfilesをブチ込んでいるし、DooDでDockerも使える。
これがクライアント側の端末スペックにほぼ関係ない上に無料で使えてしまう。

一方ロシアは

母艦があるならParsecでリモートデスクトップすれば良くね?
新幹線のWi-Fi(+SoftEther)では問題なかったから、そういう環境ではアリかも。


明日はツナワボさんの予定です。