WSL2(Ubuntu22.04)にDockerをインストールする

久々に開発環境を再構築している。昔よりだいぶ簡単になっている

Dockerのインストール

Install Docker Engine on Ubuntu | Docker Docsを参考に、以下のコマンドでDockerをインストールする

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

rootlessモードにする

uidmapを入れて

sudo apt-get install -y uidmap

rootlessモード用のスクリプトを実行する

dockerd-rootless-setuptool.sh install

あとは環境変数DOCKER_HOSTを追加しておく

echo "#for rootless mode on docker"
echo "export DOCKER_HOST=unix:///run/user/1000//docker.sock" >>  ~/.bash_profile

以上

`WSL (2526) ERROR: UtilTranslatePathList:2866: Failed to translate XXXX` というエラーがでてWSL2が起動できないときは、` wsl --set-default `

事象

WSL2にUbuntu22.04をインストールしたあと、再起動したところ、以下のようなエラーがでて起動できなかった。

<3>WSL (2552) ERROR: UtilTranslatePathList:2866: Failed to translate C:\WINDOWS\system32
<3>WSL (2552) ERROR: UtilTranslatePathList:2866: Failed to translate C:\WINDOWS
(Userのパスなど含まれるので略)

原因

よくわからない。

対策

以下を実行してWSL再起動

wsl --set-default {distro_name}

調査

とりあえずググると以下のような記事が見つかる

一応、wsl --listを実行してみるが、ただしく既定のdistroは存在しているように見える

> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-22.04 (既定)
Ubuntu

念のため再設定してみる

>  wsl --set-default Ubuntu-22.04
この操作を正しく終了しました。
> wsl --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-22.04 (既定)
Ubuntu

なぜか、上記を実行すると、正常に起動するようになった。

この辺のGithubでも議論はされている模様 <3>WSL (8) ERROR: CreateProcessParseCommon:782: Failed to translate \\wsl.localhost\westie\home\mwoodpatrick · Issue #9252 · microsoft/WSL

システムで使うコードについて

雑なメモ

コード設計

コード設計の指針としては以下のようなものがあるみたい

https://cio.go.jp/guides の 「コード(分類体系)導入実践ガイドブック」とか

https://brevis.exblog.jp/27630954/ のブログとも面白い   「品目コードNo.」の考え方・採り方もいいかもね。

コードのまとめ

  • 政府CIOポータルに政府が持ってるコードの一覧があります https://cio.go.jp/codes
    • 性別だけでも11個コードがあったりするけど...

個人的にまとめたコード

統一金融機関コード

全国銀行協会内の金融機関共同コード管理委員会が制定する、金融機関に付与された4桁のコードである。金融機関コード銀行コード全銀協コードとも呼ばれる via wikipedia https://ja.wikipedia.org/wiki/%E7%B5%B1%E4%B8%80%E9%87%91%E8%9E%8D%E6%A9%9F%E9%96%A2%E3%82%B3%E3%83%BC%E3%83%89

マスタは全銀協のサイトで購入できる https://www.jba-shuppancenter.jp/

サードバーティならBankCodeJP APIなどもあるhttps://bankcode-jp.com/

支店コード

金融機関の支店を表すコード。数字3ケタ。取得方法は統一金融機関コードに同じ。

郵便番号

郵便を送るためのおまかな地域と紐づいたコード。数字7桁。

郵便局がKEN_ALL.csvhttps://www.post.japanpost.jp/zipcode/download.htmlを公開しているが、複数の地番https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142がまとまっているので、パースするのは大変そう。

サードパーティのケンオールとか使うのがいいのではhttps://kenall.jp/

法人番号

都道府県

いろいろありますが、JIS X 0401都道府県コード とか、 https://ja.wikipedia.org/wiki/ISO_3166-2:JP あたりを使うのがよいでしょう。

地方公共団体

全国地方公共団体コードをつかえる。各種役所向けのコードもある

https://ja.wikipedia.org/wiki/%E5%85%A8%E5%9B%BD%E5%9C%B0%E6%96%B9%E5%85%AC%E5%85%B1%E5%9B%A3%E4%BD%93%E3%82%B3%E3%83%BC%E3%83%89#%E9%83%BD%E9%81%93%E5%BA%9C%E7%9C%8C

性別

https://ja.wikipedia.org/wiki/ISO_5218 に従っておくのがよいでしょう。このコードをシステムでどう扱うかは、 https://qiita.com/aoshirobo/items/32deb45cb8c8b87d65a4とか見ると良い。

EANコード

EANコード(イアンコード、European Article Number)は、商品識別コードおよびバーコード規格のひとつ。日本の規格は「JANコード」(Japanese Article Number)と呼ばれる。

https://ja.wikipedia.org/wiki/EAN%E3%82%B3%E3%83%BC%E3%83%89

golangにおける...(Triple dots)

`golangではtriple dotsがちょっと特殊な意味を持つ場合がある

(すごい雑な記事だが、何かしら書かないと忘れそうだったので記録として)

SAVEPOINTの使いどころがよくわからない

SQLにはSAVEPOINTというステートメントがある。

SAVEPOINTは、サブトランザクション入れ子トランザクションとも呼ばれる)を実現するための、データベース言語SQLステートメントの1つである。

via. SAVEPOINT (SQL) - Wikipedia)

標準SQLにも入っているので、おそらく広く使われている機能だと思うのだが、いまいち使いどころがわからなかった。

機能としてはWikipediaの例をみれば十分理解できるものの、これまでの経験*1 サブトランザクションが生じざるを得ない時点でなにかデータ構造の設計を誤っている気がする。

ひとまず、わからないことがあった、ということの記録として。

参考

*1:まあこれが大したことがないからだ、と言われるとそれまでかもなのだが

WSL2のDockerをログイン時に自動起動する

小ネタ。WSL2ではsystemdがPID1で起動しないので、ログイン時に自動起動するように設定します。

ログインユーザーがdockerグループに所属していることを確認しておく

$ getent group docker
docker:x:999:mk55

ログインユーザーでdockerを起動するために、sudo visudoを実行してsudoers に以下を追記する。

# Allow members of docker group to start docker service
%docker ALL=(ALL)  NOPASSWD: /usr/sbin/service docker start

ログインしたときにdockerが起動していなければ起動するように、~/.profile に以下を追記する

# if not runnig docker daemon, start docker daemon.
service docker status > /dev/null || sudo service docker start > /dev/null

VSCodeのRemote-Containerを使って、開発環境を準備する

最近全然、家での技術もブログもできてないのだが、リハビリがてら自分用のメモ

拡張機能のインストール

VSCode上で、Remote DevelopmentのExtension Packをインストールする。

SSH/WSL/Containers等の関連する拡張機能が一括でインストールされる

WSL2の設定

拡張機能を利用できるようにするためにWSL2側にも設定が必要。でやった手順は割愛しているので一からやるときはこちらも対応しておくこと。Windows 10 に開発環境を作る(WSL2 Docker編) - mk_55's diaryで対応したことは割愛してるので、一から環境を作る場合はこちらも実施すること。

# 作業前の更新
sudo apt update
sudo apt upgrade

# docker-composeのインストール(入れないとRemote-Containerで環境を初期化できない)
sudo apt install docker-compose -y

# dockerデーモンの起動
sudo service docker start

# ユーザーがdockerを操作できるようにグループに追加
sudo gpasswd -a ユーザー名 docker

環境作成

  • WSLに接続した状態で、開発に利用したいディレクトリに移動する
  • code .を実行してカレントディレクトリをVSCodeで開く
  • VSCodeの左下をクリックして、Reopen in Containerを選択して、コンテナ環境で現在のディレクトリを開きなおす
  • ダイアログに従って利用したいコンテナの設定を選んでいく

上記の手順を実行すると、ディレクトリの中に以下のファイルが作成される

.devcontainer
├── devcontainer.json #devcontainerの設定ファイル
└── Dockerfile        #自動で作成されるDockerファイル

残件

Dockerの起動を自動化できてない。毎度、serviceで起動するのは面倒なのだが... systemctlがない環境で常時起動ってどうやればいいのかは今度調べて対応する。