はとのーと

エジソンノート(アイデア、思い付き、メモ)として使っています。誰かの役に立つかもしれないので公開しています。

Rubyについてのメモ

調べたことなど。

メソッドが定義されているクラスを調べる

参考: 【Ruby】メソッドが定義されているクラスを調べる

object.method(:method_name).owner で調べる。

>> a = (1..3).to_a
=> [1, 2, 3]

>> a.length
=> 3

>> a.method(:length).owner
=> Array

>> b= "abc"
=> "abc"

>> b.length
=> 3

>> b.method(:length).owner
=> String

Gemのインストール先を調べる

$ gem environment gemdir
/usr/local/bundle

$ gem which sqlite3
/usr/local/bundle/gems/sqlite3-1.4.2/lib/sqlite3.rb

Visual Studio Codeについてのメモ

VSCodeについての自分用メモ。

目次:

編集画面Tips

  • Ctrl + Shift + Pでコマンドパレットが表示される
  • 文字列をHTMLのタグで囲みたい時は文字列を選択してからコマンドパレットからEmmet: Wrap with Abbrebiationを実行する

リモートDockerコンテナで開発する

SSHで接続した先のリモートホスト上で動くDockerコンテナ内で開発する方法。 開発環境はDockerコンテナ内に構築する。 ローカルマシンにはDockerも開発言語もインストールしなくてよい。

VSCode拡張機能の準備
  1. クライアント側から公開鍵でパスワードなしで ssh ユーザ名@ホスト名 で接続できるようにしておく
  2. ローカルにVS Codeをインストールする
  3. 拡張機能 Visual Studio Code Remote Development Extension Pack (Remote Development)をインストールする
Dockerfileを準備する

ソースコードリモートホスト上に置く。 正常にビルドできるDockerfileを用意する。

次のように開発用ユーザーを追加する記述も入れておく。

RUN addgroup -g 1000 devuser && \
    adduser -u 1000 --home /tmp devuser -G devuser -D
devcontainer.jsonを準備する

Dockerを実行するディレクトリに.devcontainerディレクトリを作成し、その中にdevcontainer.jsonを作成する。 以下のような内容で事前に準備してもよいが、なければ初回接続時に一般的な内容のものが作成される。

.devcontainer/devcontainer.json:

{
    "name": "testdev",
    "build": {
        "dockerfile": "../Dockerfile"
    },
    "forwardPorts": [3000],
    "remoteUser": "devuser"
}

"remoteUser"にはDockerfileで作成したユーザーを指定する。

初回接続
  1. 左下の><をクリックし、[ Connect Current Window to Host... ] を選択する
  2. ホストを選択するか、+ Add New SSH Host... をクリック → 上記 ユーザ名@ホスト名 を入力 → .ssh/hosts を選択 → Open Remote を選択する
  3. ソースコードのあるディレクトリを開く
  4. コマンドパレットから [ Reopen in Container ] を選択する

もしdevcontainer.jsonファイルがない場合には、 From Dockerfile を選択してDockerfileを指定するとdevcontainer.jsonファイルが作成される。

初回はコンテナをビルドするため時間がかかる。

ビルドに失敗して、その後に修正しても反映されない場合には、リモートホスト上でdocker ps --allをしてエラーを起こしたコンテナが残っているか確認する。 もしコンテナが残っていたらdocker rm コンテナIDで削除するとビルドできるようになる場合がある。

2回目からの接続

2回目からは次のどちらかで接続できる。

  • [ Connect Current Window to Host... ] で接続し [ Reopen in Container ] を実行する
  • VSCode の「最近使用した項目」から [ Dev Container: 〜 ] と書かれている項目を選択する

なお、Dockerfile内ではUID、GIDともに1000で作成したが、Remote Developmentを使うと実行時に利用者のUID、GIDに変更してくれる。

参照: Docker や VSCode + Remote-Container のパーミッション問題に立ち向かう

LXC上にDebianをインストール

設定の備忘録。 DebianのバージョンはBullsEye (11)。 LXC/LXDの設定は終わっている前提。 関連ページ: LXC/LXDについてのメモ

以下は断りのない場合はすべてroot権限で実行。

コンテナを作成する

ホスト上から lxc launch images:debian/11/amd64 deb1 でインストール。 コンテナ名は deb1

lxc exec deb1 -- /bin/bash でコンテナの中に入る。

以下、コンテナ内での操作。

近くのリポジトリを設定する

/etc/apt/sources.list の内容を Debian JP Project - ミラーサイトについて に書いてある内容に変更。

deb http://ftp.jp.debian.org/debian/ bullseye main contrib non-free
deb http://ftp.jp.debian.org/debian bullseye-updates main contrib

netselect-apt を入れてさらに近いミラーサイトを調べる。

$ sudo apt update
$ sudo apt install netselect-apt
$ sudo netselect-apt --country japan
...
Of the hosts tested we choose the fastest valid for http:
        http://mirrors.xtom.jp/debian/

自分の場所からはxTomが近いので /etc/apt/sources.list を次のように変更。

deb http://mirrors.xtom.jp/debian/ bullseye main contrib non-free
deb http://mirrors.xtom.jp/debian bullseye-updates main contrib
一般ユーザを作成する

useradd -m -U paz でユーザを作成。 -m はホームディレクトリの作成、-U は同名グループの作成。

password paz でパスワードを設定。

usermod -a -G sudo pazsudoグループに追加。

chsh -s /bin/bash paz でログインシェルをBashに変更。

共有設定

ホスト側で lxc config set deb1 raw.idmap 'both 1000 1000' を実行してホストと同じユーザ(1000)でDebianが動くように設定。

ホスト側で lxc config device add deb1 share disk source=/home/foo/share path=/home/foo/share を実行して ~/share 以下をホストとゲストで共有する。

リモートデスクトップで接続できるようにする

apt install xrdp xterm twm でxRDPとxterm、twmをインストール。

ホスト側で lxc config device add deb1 deb1-rdp proxy listen=tcp:192.168.0.4:3389 connect=tcp:0.0.0.0:3389 bind=host で3389ポートをポートフォワード。

RDPで接続するとウィンドウマネージャとしてtwmが動いている画面になる。

デスクトップ環境としてMATEをインストールする

apt install --no-install-recommends task-mate-desktop でMATEデスクトップ環境をインストール。

ユーザのホームディレクトリに以下のファイルを置く。

~/.xsesion:

mate-session

~/.xsessionrc:

export XDG_SESSION_DESKTOP=mate
export XDG_DATA_DIRS=/usr/share/mate:/usr/share/mate:/usr/local/share:/usr/share:/var/lib/snapd/desktop
export XDG_CONFIG_DIRS=/etc/xdg/xdg-mate:/etc/xdg

RDPで接続するとデスクトップ環境としてMATEが動いている画面になる。

その他のアプリをインストール:

  • Brisk Menu (お気に入りつきのメニュー) をインストール - apt install mate-applet-brisk-menu
  • Mozo (MATEメニューエディタ) をインストール - apt install mozo
日本語環境をインストールする

apt install task-japanese で日本語環境をインストール。

dpkg-reconfigure locales を実行し、en_US.UTF-8 UTF-8 のチェックを外し、ja_JP.UTF-8 UTF-8 にチェックを入れる。

apt install task-japanese-desktop をインストール。 日本語入力環境としてUIM+Mozcが入る。

タイムゾーンを設定する

timedatectl set-timezone Asia/Tokyo を実行してローカルタイムを東京にする。

skkをインストールする

日本語入力メソッドとしてskkをインストールする。 すでに uim-mozc が入っているのでUIM上で使う。

apt install uim-skk でインストールし、IME設定からskkに切り替える。

Google日本語入力の変換サーバを利用するために apt install yaskkserv でサーバをインストールする。

/etc/defaults/yaskkserv で以下の行を設定する。

YASKKSERV_BIN="yaskkserv_hairy"
HAIRY_OPTS="${NORMAL_OPTS} --server-completion-test=1 --google-japanese-input=notfound-input-suggest --google-suggest"

UIMの設定画面からskkの変換サーバをlocalhost、ポートを1178にする。

Operaをインストールする
# wgetを取得する
sudo apt install wget

# GPGキーをインポートする
wget -O- https://deb.opera.com/archive.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/opera.gpg

# Operaリポジトリを登録する
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/opera.gpg] https://deb.opera.com/opera-stable/ stable non-free" | sudo tee /etc/apt/sources.list.d/opera.list

# Operaをインストールする
sudo apt update
sudo apt install opera-stable

その後「/etc/apt/souces.list.dリポジトリを登録するか?」と聞いてくるが、上記作業ですでに登録してあるので No を選択する。

VS Codeをインストールする

PGPキーをインポートする。

wget -O- https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor | sudo tee /usr/share/keyrings/vscode.gpg

リポジトリを登録する。

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/vscode.gpg] https://packages.microsoft.com/repos/vscode stable main" | sudo tee /etc/apt/sources.list.d/vscode.list

VS Codeをインストールする。

sudo apt update
sudo apt install vscode
その他のアプリケーションを入れる