rust

かなり久しぶりにrust再挑戦。今度はdocker環境を使って(dockerの練習を兼ねて)ホスト環境を汚さず、何かあっても復旧しやすくするというお題もある。なにせ、システムドライブを拡張しようとして、コピーツールによるコピー失敗から起動不可、クリーンインストールという嫌な目にあったばかりだし。

それはそれとして、選んだ本は「プログラミングRust」オライリーの厚めの本。今の自分にはなじみやすい気がする。とはいっても50ページも進んでないけど。以前の経験からガッツリ理解、記憶してから先に進むなんてことは微塵も考えない。vscodeのdevcontainerでrust環境のコンテナを始動、cargo newでプロジェクトを作り、そのプロジェクトを開きなおす。そのうえでプログラムを書いて動作を確認。エラーが出たらChatGPT、GitHub Copilot Chat、Rust公式ページ等を頼りつつ折り合いをつけていく。

ちょっとした目論見があり、pythonのpsycopg2に対応するrustのpostgresクレートを使って、別のコンテナで立ち上げたpostgresに接続した。その後、aws rdsでpostgresqlのインスタンスを作って、それにも接続した。たんに接続確認だけだけど、少し進んだ気がする。

次は、pythonでやろうとしていたクラス化に相当する構造体へのトレイト実装に進みたい。その次はpythonのpandasに相当するpolarsクレートだ。最後にgrib2のデコードをやれば基本は抑えたことになる…かな。楽しみではあるけれど、いったいどれだけ時間がかかることやら。うまくいくならコストダウンとサービス性向上を両立できるし、将来的にも見通しが明るくなるので元は取れる。

消すのに疲れた

WindowsのDocker Desktopではディスク使用量の増加に伴って自動で領域を拡張してくれる機能が有効になっている。wsl2対応後はそういうものらしい。

しかし、いただけないのは、拡張した後は手動でも縮小できないということ。とても面倒な手続きを踏めばできるという記事もあるけど、これを普通と呼ぶのは間違ってる。

システムドライブの残りが100GB近辺まで減ってしまったが、いらないものを消して、当面必要のないものを外に移して、残り400GBまで復活させたけど、この先ずっと気にしていかなければならないのは気が滅入る。それで使わなくなってしまったら、せっかくいろいろ試せるDocker Desktop環境を入れたことが何の役にも立たず、それどころか面倒になっただけである。

何年かのうちにはマイクロソフトが対応するだろうと期待して、目先の対処としてシステムドライブの容量を増やすことにした。

VSCodeのDev Containers拡張機能が便利

Docker Desktopを使ってコンテナを起動した後、ホストOS直で開発しているのと同じような操作感でコンテナ内で開発できる。

Dockerfileまたはcomposeを用意しておき、Reopen in Containerを選択するとコンテナの作成・起動・接続を自動でやってくれる。接続の際に、/workspace/プロジェクト名のディレクトリを作ってホストのプロジェクトルートとバインドマウントしてくれる。

ただし、Dev Containersが最後にコマンドを実行するため、compose.yamlに書いたコマンドが無視される(実行されない)ということには注意が必要。anacondaコンテナでjupyter notebookを起動する設定になっているcompose.yamlでも、Dev Containersで起動してvscodeと接続した時点でjupyter notebookは起動していない。同じコマンドで手動起動してもいいけど、シェルスクリプト化してcompose.yamlからもDev Containersが作った.devcontainer/docker-compose.ymlからもそのスクリプトを実行するのがいいのではないかと思う。