この記事はdotfiles Advent Calendar 2019 - Qiitaの6日目の記事です
数年前に作り込んだけどそれ以来あまりメンテナンスできていないので思い出すのも兼ねて構成とかを書き出してみる
開発で使うマシンがCentOSのため基本的にCentOSを前提とした作りになっている
ディレクトリ構造
.
|-- README.md
|-- ansible
| |-- README.md
| .....
| .....
| .....
|-- batfiles
| |-- rubocop.bat
| `-- solargraph.bat
|-- bin
| |-- README.md
| |-- ansi_colorlist
| |-- as_ips
| |-- file2slack
| |-- gluediff
| |-- jq2esc
| |-- mbsplit
| |-- server
| |-- setup_gitconfig
| |-- traceback
| |-- watch-server
| `-- wcmd
|-- cheatsheets
| |-- _curl
| |-- ag
| |-- ansible
| |-- git
| |-- jq
| |-- mail
| |-- mkdocs
| |-- mysqlbinlog
| |-- nkf
| |-- pgrep
| |-- server
| |-- tmux
| `-- twurl
|-- config
| |-- peco
| | `-- config.json
| `-- ssh
| `-- config
|-- envs_version
|-- neobundle
|-- node_modules
|-- powerline_theme
| |-- base_colorscheme_default.json
| |-- colors.json
| |-- shell_colorscheme_allblue.json
| |-- shell_colorscheme_default.json
| |-- shell_colorscheme_lucius.json
| |-- vim_colorscheme_allblue.json
| `-- vim_colorscheme_lucius.json
|-- putty
| |-- lucario.reg
| |-- memo.txt
| `-- setting.md
|-- servers_processes.sh
|-- setup.root.sh
|-- setup.sh
|-- test
|-- tmux
| |-- blue.sh
| |-- green.sh
| |-- lucario.sh
| `-- lucius.sh
|-- vimrc
| |-- plugins
| | |-- ale.vim
| | |-- caw.vim
| | |-- complete.vim
| | |-- indent-guides.vim
| | |-- indentline.vim
| | |-- lightline.vim
| | |-- powerline.vim
| | |-- quickhl.vim
| | |-- smartchr.vim
| | |-- srcexpl.vim
| | |-- submode.vim
| | |-- taglist.vim
| | |-- unite-outline.vim
| | |-- unite.vim
| | |-- vcscommand.vim
| | |-- vim-go.vim
| | `-- yankround.vim
| `-- rc
| |-- basic.vim
| |-- mapping.vim
| |-- plugins.vim
| `-- tab.vim
`-- zsh
|-- alias.command
|-- functions
|-- hooks
|-- lscolor
|-- peco
|-- prompt
`-- vcs_prompt
ざっと見た感じゴミが残っている気もする…
Ansibleでの構築
このdotfilesにansibleディレクトリがありその中にplaybookがなどがおいてある
新しく開発環境を立てる際にはこのansibleをたたく
ただ、最近試したら一発じゃ構築できなかった…
ただまぁその対応を除いたとしても色々入れているので今のところ価値はあるのではと思っている(どっかで時間見つけて直したい)

cheat
よく使うけどコマンドをゼロから入力してみると出てこない…みたいなやつ
履歴からのpecoでも良いが解説含め何だったっけな…といったことがあったのでcheatというコマンドを使ってチートシートを書くようにしていた
cheatsheetsというディレクトリにいれている
jqとかのチートシートは毎度ググっていたりしたのでよく使うものはcheatsheetに残したりして思い出すために使っていた
設定自体は.zshrcに書いている
export DEFAULT_CHEAT_DIR=~/dotfiles/cheatsheets export CHEATCOLORS=true
cheat -e jq でcheatsheet自体を編集でき編集した内容がそのままGitで差分として出てくるので更新したらpushするようにしている
下記はjqの例
- cheatsheets/jq
# Pretty print the json
jq "." < filename.json
# Access the value at key "foo"
jq '.foo'
# Access first list item
jq '.[0]'
# Slice & Dice
jq '.[2:4]'
jq '.[:3]'
jq '.[-2:]'
# where的な使いかた
jq 'select(.request_time > 20)'
# 配列から Instancesの項目を取得(複数)
jq '.[].Instances'
# 組み合わせ autoscalingのinstance_idを取得
jq '.AutoScalingGroups[]|select(.AutoScalingGroupName == "backends")|.Instances[].InstanceId'
# 日付の比較(複数select)
jq 'select(.time <= "2015-12-18 03:20:00")|select(.time >= "2015-12-18 03:10:00")|'
# 複数取得
jq '.Messages[].Body, .Messages[].Handle'
# 一行出力
jq '-c [.group.unread_count_display, .group.name]'
# 特定の要素が存在するか
jq 'select(has("age"))'
# 特定の要素を含むかチェック
jq 'select(contains({age:20}))'
# ハッシュの生成
jq '.[]|{a: .foo, b: bar}'
# 特定のキーでソート
jq 'sort_by(.key)'
# 全行をまとめて配列にしてjqに食わせる
jq '.[]|{a: .foo, b: bar}' | paste -s -d ',' | sed -e 's/^/\[/' -e 's/$/\]/' | jq 'sort_by(.b)'
# CSV的な出力
jq -r '.TargetHealthDescriptions[]|select(.TargetHealth.State!="healthy2")|[.Target.Id,.TargetHealth.State]|join(",")'
# 特定のをnullに書き換え(ない場合もある)
jq 'if(has(".next_cursor")) then .next_cursor|=null else . end'
jqは使い方の参考だがある程度使うコマンド固定で適当な名前を定義して使えばpecoと組み合わせて実行みたいなこともできる
server辞書にワンライナーのコマンドをメモしておいてそのまま実行みたいなこともできる

使い方次第で色々らくできると思う
設定ファイル
vimrc
vimrc/ディレクトリを用意してその下に記述する内容を分けて設定を記述
.vimrcで分けた設定ファイルを読み込むようにしている
ディレクトリ構成はこんな感じ
vimrc
|-- plugins
| |-- ale.vim
| |-- caw.vim
| |-- complete.vim
| |-- indent-guides.vim
| |-- indentline.vim
| |-- lightline.vim
| |-- powerline.vim
| |-- quickhl.vim
| |-- smartchr.vim
| |-- srcexpl.vim
| |-- submode.vim
| |-- taglist.vim
| |-- unite-outline.vim
| |-- unite.vim
| |-- vcscommand.vim
| |-- vim-go.vim
| `-- yankround.vim
`-- rc
|-- basic.vim
|-- mapping.vim
|-- plugins.vim
`-- tab.vim
binディレクトリに自作コマンド
Ansibleでの環境構築時に~/dotfiles/binへのPATHを通すようにしている
- .zshrc
export PATH="$HOME/dotfiles/bin:$PATH"
なんかしら汎用的に使えそうなコマンドとかシェルスクリプトはこのディレクトリにおいてサクッと使えるようにしている
どれも車輪の…感はあるもののなんだかんだで便利に使っているものが多い
一部紹介すると
- server
カレントディレクトリでPythonのhttp.serverを起動するためだけのコマンド
単純な静的ファイルやHTMLレポート生成ツールなどの成果物をserveしたいときとかに便利
- file2slack
ファイル内容をslackに投稿するためのコマンド
調査などでコマンドの結果をそのままslackに投げたいときとかに使っている
最初のうちは結構使っていたが最近は調査自体が減ってしまったので出番があまりない
下記記事で紹介している
slack APIでコードスニペットを投稿する - notebook
- wcmd
#!/bin/bash inotifywait --recursive --monitor --quiet \ --event MODIFY \ --exclude ".*\.sw[pox]|./log|./tmp|./git" \ ./ | while read d e f; do echo "$d$f" "$@" echo '---------- END ----------' done
inotifytoolsでファイルの変更を検知して設定したコマンドを実行するやーつ
最近は開発用のサーバを立ち上げる系のコマンドだったりはだいたい変更したら自動でリロードしてくれる便利な感じになっているのでそんなに出番がなくなった
変更を検知する部分だけをコマンド化してあるので用途は色々ある
直近だとmd2googleslideでスライド作成をMarkdownファイルに変更があるたびに実行したりしてた
pecoの活用
下記記事で紹介しているコード辺をzsh/pecoに書いていて.zshrcで読み込むようにしている
- .zshrc
# zshディレクトリ以下の設定ファイルを読み込み for file in $HOME/dotfiles/zsh/* do source $file done
branchのフィルタリング、変更があったファイルのフィルタリングあたりは今もよく使っている
pecoを使った便利な設定などのまとめ - notebook
まとめ
ダラダラと書いてしまいましたが良さそうなのがあれば取り入れてみてくれれば光栄です
メンテナンス全然行えてなかったのでちょこちょこ時間見つけてやっていきたい所存
最後にdotfilesへのリンクを張って終わります