ブログ

読んで思い出す。忘れるために書く

よく使うコピペコードを Listary でクリップボードにコピーする

ゴール

YouTubeRSS フィード URL を知りたいことが多いので、*.bat ファイルにコードを書き、それを Listary で呼び出すことで、いつもの作業を省力化する

gouf.hatenablog.com

バッチファイル

適当な場所にバッチファイルを書いて保存する

echo ytInitialData.metadata.channelMetadataRenderer.rssUrl | clip

クリップボードにコピーしたい内容を echo してパイプで繋いで clip に渡すことで、任意の文字列をクリップボードに写せる

Listary の設定

Listary の設定画面から「キーワード」→「カスタム」と進み、次の画像のように設定する

f:id:innocent-zero:20211222193237p:plain
カスタム コマンドの設定

cmd/c オプションを渡すことで、実行後に終了してくれるようになる

Links

Q. YouTube のチャンネルページから RSS URL を取得したい

A. 開発者コンソールを開いて次のコードをコピペする

ytInitialData.metadata.channelMetadataRenderer.rssUrl

手順

  1. 適当なチャンネルにアクセスする : eg. 「獅子神レオナ/レオナちゃんねる - YouTube
  2. 開発者コンソールを開く
  3. コードを貼り付けて実行 : ytInitialData.metadata.channelMetadataRenderer.rssUrl

あとは 得られた URL を Feedly や Slack の RSS App に追加する

Link

YouTube の HTML ソースは圧縮されてるため目視での確認がむつかしかった

Docker 環境の Rails プロジェクトで RSpec を監視・実行する (fswatch)

Docker 環境であっても コンテナが気軽に増設できるなら guard-rspec を立ち上げてもいい

今回は ShellScript で何とかするパターン

ゴール

  1. docker compose up で立ち上げたコンテナ内で、rspec を実行したい
  2. ローカル環境で *_spec.rb ファイルを更新したら、そのテストを実行したい

ShellScript を書く

watch_rspec.sh, rspec.sh の2ファイルを用意

#!/bin/sh

# file: watch_rspec.sh

fswatch -0 -e ".*" -i "\.rb$" --event=Created spec | while read -d "" path; do
  clear
  ./rspec.sh $path
done
#!/bin/sh

# file: rspec.sh

set -e
target=$(echo $1 | awk -F 'my_project_root_dir/' '{print $2}')
container=app
echo $target

docker compose exec -e RAILS_ENV=test $container bundle e rspec $target

メモ

fswatch

  • -0 でヌル文字区切りでファイルパスを渡す
  • --event=Created で「ファイルが作成された」ものを絞り込んで検出する
  • -e ".*" で一旦すべてのファイルを監視対象から除外
  • -i "\.rb"Ruby ファイルのみを監視対象にする

rspec.sh

  • fswatch から渡されるファイルパスは ローカル環境のフルパスなので... awk で加工して、プロジェクトディレクトリ以降のパスを渡す

docker compose exec に渡すときにコンテナ内のファイルパス指定と等価になる

Links

Q. エラー: "Couldn't connect to Docker daemon at http+docker://localhost - is it running?" が出る

A. WSL のバージョンをアップグレードする

WSL で docker-compose up したときにエラーが出るので、アップグレードする必要があった

wsl.exe -l -v # サブシステムのリストアップ

wsl.exe --set-version (distro name) 2 # アップグレード

あとは次のリンクに沿って Docker Desktop の連携を有効化する

Link

Q. docker-compose 環境で guard コンテナを実行したい

A. つぎの設定を追記する

docker-compose.yml :

# ...
services:
  # ...
  guard:
    build:
      context: .
    env_file:
      - .env
    command: bundle exec guard
    depends_on:
      - mysql
    volumes:
      - .:/app
    tty: true
    stdin_open: true

# ...

Dockerfile (Alpine Linux) :

RUN apk add readline ncurses

Links

Git でコミットするアカウントを切り替える

問題

ひとつの PC で「私用」「仕事用」の git アカウント情報を切り替えたい

解決

Bash の関数を定義する

関数の定義

git config する関数を定義する

function switch_git_config {
  name="$1"
  email="$2"
  gpg_pub_sign="$3"

  git config --global --unset-all user.name
  git config --global --unset-all user.email
  git config --global --unset-all user.signingkey

  git config --global user.name "$name"
  git config --global user.email "$email"
  git config --global user.signingkey "$gpg_pub_sign"

  echo "Configuration has changed:"
  echo "git config user.name: $(git config user.name)"
  echo "git config user.email: $(git config user.email)"
  echo "git config user.signingkey: $(git config user.signingkey)"
}

関数を利用する関数の定義

先ほど定義した関数をすぐ利用できるよう、別の関数を定義する

# Private account
function git_a {
  switch_git_config "my_name_A" "my_name_A@example.com" "SIGN_A"
}

# For work account
function git_b {
  switch_git_config "my_name_B" "my_name_B@example.com" "SIGN_B"
}

「私用」「仕事用」の切り替えがすぐできるようになった