人生シーケンスブレイク

シーケンスブレイク(Sequence breaking、シークエンスブレイクとも)とは、テレビゲームにおいて開発が想定している攻略ルートを逸脱し、ショートカットする行為のことである。

gitで不要になったブランチをまとめて一発で消したい

やりたいこと

開発していると不要なブランチがローカルに溜まってしまうのでまとめて一発で削除したい

コマンド

パイプとxargsを利用してまとめて消せるようにしたコマンド

$ git branch | grep -v "*" | grep -v master | xargs git branch -D

grep-v オプションは除外。
ブランチ一覧から、カレントを示す * と masterブランチを除外し、ブランチを削除する

エイリアス

時々実行することがあるので、 zshrc にエイリアスとして以下を追加した。

alias delete_branches='git branch | grep -v "*" | grep -v master | xargs git branch -D'

利用してみる

$ delete_branches
Deleted branch feature/1xhe8z (was 39c4a8ce).
Deleted branch feature/29jz8b (was 0afd71da).
Deleted branch fix/29jgvq (was 5872b902).

楽になった。

feature/xxxx みたいなブランチ運用している時には↓のようにしてもいいかもですね。

$ git branch | grep -v "*" | grep feature | xargs git branch -D

プロンプト表示をカスタマイズが容易な Starship に乗り換えた

Rust製の starship.rs が良さそうだったので乗り換えた。 乗り換えたといっても、プロンプト表示だけなので Shell は Zsh や Fish のまま移行できる。

インストール

$ brew install starship

して zsh を利用しているので  ~/.zshenv に

$ eval "$(starship init zsh)"

と書くだけ。

何が嬉しいの?

f:id:ShineSpark:20200303023422p:plain

こんな感じにディレクトリのgitステータスやリポジトリ配下の言語のバージョンが表示されるようになる。

元々 zsh の RPROMPT とかにgitのブランチ名やステータスを表示していたが、Starshipの方がカンタンかつオシャレに表示できるので乗り換えた。

カスタマイズ

設定 | Starship を参考にしながら.config/starship.toml に設定を記述していくとカスタマイズが可能。

自分の設定を貼り付けて置くので参考にどうぞ。

# 表示順を再定義
prompt_order = [
    "username",
    "hostname",
    "kubernetes",
    "directory",
    "git_branch",
    "git_commit",
    "git_state",
    "git_status",
    "hg_branch",
    "package",
    "dotnet",
    "elm",
    "golang",
    "haskell",
    "java",
    "nodejs",
    "php",
    "python",
    "ruby",
    "rust",
    "terraform",
    "nix_shell",
    "conda",
    "memory_usage",
    "aws",
    "env_var",
    "crystal",
    "cmd_duration",
    "jobs",
    "battery",
    "time",
    "line_break",
    "character",
]

[directory]
truncation_length = 10 # 10ディレクトリまでは省略しない
truncate_to_repo = false # gitのルートディレクトリでもパスを省略しない
style = "bold green" # 太字の緑

[git_commit]
disabled = false # gitのコミットIDを表示する(rebase中などのみ表示される)

[git_state] # gitのステータスに応じて表示するメッセージをカスタマイズ(絵文字を追加)
rebase = "🛠 REBASING"
revert = "💥 REVERTING"
cherry_pick = "🍒 PICKING"

[time] 
disabled = false # 時刻を表示


# 利用予定のないモジュールを明示的に無効化
[dotnet]
disabled = true

[hg_branch]
disabled = true

[nix_shell]
disabled = true

macOSでcommand+Hを無効にした

macOScommand + H は最小化なのだが、最小化したいユースケースが殆どないにも関わらず、 control + H のつもりで押してしまったりすることが多かったので無効にすることにした。

Karabiner-Elements - Software for macOS で keycode を out にすれば無効になる。

{
    "description": "Disable Left_command + h",
    "manipulators": [
        {
            "from": {
                "key_code": "h",
                "modifiers": {
                    "mandatory": [
                        "left_command"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "out"
                }
            ],
            "type": "basic"
        }
    ]
}

どうしても利用したかったら right_command + H すればよい。

入力ソースが3種類以上ある時にVimで検索しようとするとIMEがおかしくなることがあった

macOSの入力ソースを3種類以上設定されている際に、MacVimで iminsertimsearch の設定を0以外に設定していると想定通りにIMEが切り替わらない事象があった。

f:id:ShineSpark:20200221195803p:plain
入力ソースが3種類ある例

Dvorakユーザーなので、Kinesisなどのハードウェア上でキーボードレイアウト変更が可能なキーボードの場合には ABC (QWERTY) を、 ハードウェア上でレイアウト変更ができないキーボードの場合には Dvorak を適宜選んで利用していた。

が、Vim起動後に QWERTY / Dvorak を切り替えると IME On / Off でなく QWERTY / Dvorak になったりしてしまった。

モード切り替え時にVim上からIMEを制御しないように、

set iminsert=0
set imsearch=-1

とすることで対応した。

EscでVimのinsertモードを抜けつつIME OFFにして直接入力にする

Vimのinsertモードを抜ける際に、 Esc だけではIMEが有効なままになっていたのをそろそろ見直すことにした。

Karabiner-Elements - Software for macOS のkarabiner.jsonに以下を追加して、 Esc キー押下時に、Esc + 英数キー 押下と同じ挙動を行うようにした。 設定して1ヶ月以上経つが、 Esc を押す度に英数も押されてしまうことによる副作用は今の所まったく感じられない。

    "description": "Change Escape to Escape + Eisuu",
    "manipulators": [
        {
            "from": {
                "key_code": "escape"
            },
            "to": [
                {
                    "key_code": "escape"
                },
                {
                    "key_code": "japanese_eisuu"
                }
            ],
            "type": "basic"
        }
    ]
}

自分は Command + EEsc としているので、こちらも同様にした。

{
    "description": "Change Left_command + e to Escape + Eisuu",
    "manipulators": [
        {
            "from": {
                "key_code": "e",
                "modifiers": {
                    "mandatory": [
                        "left_command"
                    ],
                    "optional": [
                        "any"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "escape"
                },
                {
                    "key_code": "japanese_eisuu"
                }
            ],
            "type": "basic"
        }
    ]
}

今ではもっと早く設定しておけばよかったと思っているぐらい快適。

WealthNavi for 住信SBIネット銀行 を解約して、よりおトクな WealthNavi を契約した

TL;DR

住信SBIネット銀行きっかけでWealthNavi for 住信SBIネット銀行を使っていたけれども、WealthNaviの方がおトクなのでWealthNaviに移行した

事の発端

元々住信SBIネット銀行のランク判定条件だったこともありWealthNavi for 住信SBIネット銀行を契約していたが、昨年11月頃にたまたまアプリの不具合で 長期割 というWealthNavi限定のプログラムの存在を知った。

f:id:ShineSpark:20200219011053p:plain

長期割が適用されると、手数料が最大で0.90%まで割引されるようになる。

自分が200万円ほど運用していた時には月々数千円手数料として差し引きされていたことと、向こう数十年引かれる手数料が少し安くなるのは大きなメリットになるのではと思ったので長期割について調べてみることにした。

WealthNavi と WealthNavi for 住信SBIネット銀行 の違い

調べたり実際にウェルスナビ株式会社に問い合わせをした結果、以下の違いがあることがわかった。

WealthNavi

  • 独自キャンペーンがある
  • 長期割がある

WealthNavi for 住信SBIネット銀行

移行に関する諸注意

自分は既にスマプロランク3であったし、キャンペーンはどちらも独自とのことなので実質長期割があるWealthNaviの方が良さそうだったので、WealthNaviに移管することにした。

移管方法についてウェルスナビ株式会社に問い合わせた所、WealthNaviやWealthNavi for ○○は、特定口座の為下記の制約を受けることを知った。

  • 移管といった概念はない
  • いずれか1つしか契約できない
  • 同一年内に再開設はできない

もしWealthNaviへ変更する場合には一度WealthNavi for 住信SBIネット銀行を解約し、翌年以降にWealthNaviを新規に申し込む必要がある。

再契約処理

昨年11月に長期割の存在を知りこれらの情報を確認したので、早々に手続きを行った。手続きはスムーズですぐに解約・登録口座に入金が行われた。

自分の場合、200万円強を2年程度運用していたのだが、解約時に幾つか税務処理等々で数万円差し引かれたものの10万円オーバーの金額がプラスで返ってきた。

  • 11月中旬には解約申し込み
  • 外国証券取引口座解約請求書 が郵送で届くので、必要事項を記入の上で返送
  • 予定通り年内に解約手続きが完了
  • 1月4日にWealthNaviを新規に申し込み
  • 1月中旬から運用開始

で再契約が完了した。

現在

こんな感じで長期割までのカウンタが表示されるようになった。

f:id:ShineSpark:20200219013757p:plain

200万円以上預けると長期割の手数料割引率が上がっていくので、当面は月々の積立金額を増やして運用することにしている。

ちなみに、自動積立した金額の反映は 引落日の【3営業日後】に行われ、恐らく反映日の夜間にETFの購入が行われる為時間が掛かるので、住信SBIネット銀行の定額自動振込サービスでクイック入金を行って入金している。

こちらであれば平日10時までに入金されればその日の夜間ETFの購入が行われるので反映が早い。

これでWealthNaviは最適化ができた。

ロボアドバイザー投資1年目の教科書

ロボアドバイザー投資1年目の教科書

コミットメッセージに自動でチケットIDを入れたい

やりたいこと

feature/${チケットID}-awesome-function みたいなブランチ名でコミットした時に、自動でコミットメッセージのプレフィクスに [#チケットID] を挿入しておきたい。

実行環境に左右されたくなかったので、bash / zshだけで実装したい。

githooks prepare-commit-msg を使う

Git - githooks Documentation

#!/bin/sh
COMMIT_MSG_FILE=$1
CURRENT_BRANCH=$(git rev-parse --abbrev-ref @)

if [[ $CURRENT_BRANCH =~ ^[^/]+/([0-9A-Za-z]+)[-|_]?.+$ ]]; then
  TICKET_ID=${BASH_REMATCH[1]}
  if [[ -n "$TICKET_ID" ]]; then
    echo "[#$TICKET_ID] $(cat $COMMIT_MSG_FILE)" > $COMMIT_MSG_FILE
  fi
fi

以下解説。

  • $1 には $git commit した際にエディタでコミットメッセージを入力する際のメッセージ。 sampleに倣って変数に格納した。
  • 現在のブランチ名は git rev-parse --abbrev-ref @ で取得できる
  • BASH_REMATCH[1]は 正規表現でマッチした1番目のキャプチャを取得する。この場合にはifの条件式内の () で括った箇所。
  • チケットIDがうまく取得できていたら、オリジナルのコミットメッセージファイルの中身の先頭にチケットIDを追加したものを出力する。なお、きちんと > $COMMIT_MSG_FILE しないとエディタ上に反映されない

オリジナルのサンプルはこちら git/hooks--prepare-commit-msg.sample at master · git/git

できた

こんな感じになる。

f:id:ShineSpark:20200213015624p:plain

いいですね。

実用Git

実用Git