Glide Note

glidenote's blog

peco/percolでCUIなスニペットツールを作ってみる

以前にSheetというスニペットツールを利用すると大変便利と書いた。

で、障害対応で使うコマンドとかよく忘れるコマンドを大量に登録してて、毎日使ってて重宝してるんですが、スニペットが 増えると管理が破綻する問題があって、pecopercolを使えば解決出来そうと思ってやってみた。

仕組み

  • snippets用のファイル or sheetのスニペットファイルをpeco/percolで絞りこんで、クリップボードに送ったりして簡単に利用できるようにする

よく使うコマンドのスニペットファイルを用意

sheetの資産をそのまま利用も出来るんですが、今回は下記のような感じでファイルを~/.snippetsで用意。私が使ってるやつから一部抜粋。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# apache
tail -n 5000 /usr/local/apache2/logs/access_log | awk '{print $1}'  | sort | uniq -c | sort -gr | head -n 4
tail -n 5000 /usr/local/apache2/logs/access_log | awk '{print $2}'  | sort | uniq -c | sort -gr | head -n 4
tail -n 5000 /usr/local/apache2/logs/access_log | awk '{print $12}' | sort | uniq -c | sort -gr | head -n 4
tail -n 5000 /usr/local/apache2/logs/access_log | awk '{print $13}' | sort | uniq -c | sort -gr | head -n 4

# search
netstat -ltapn | grep ESTABLISHED | more
netstat -ltan | grep ":80 " | awk '{print $5}' | awk -F : '{print $4}' | sort | uniq -c | sort -nr | head
lsof -i:80

# dstat
dstat -Tclmdrn
dstat -Tclm
dstat -Tclr
dstat -Tclnd
dstat -Tcldr
dstat --top-cpu --top-cputime
dstat --top-io --top-bio
dstat --top-io-adv --top-bio-adv

# openssl
openssl x509 -noout -modulus -in *.crt | openssl md5
openssl rsa  -noout -modulus -in *.key | openssl md5
openssl req  -noout -modulus -in *.csr | openssl md5

# find
find ./ -daystart -ctime +2
find ./ -daystart -ctime -2

# date
date +%Y%m%d

peco/percol経由で利用出来るようにする

下記のようなのを、.zshrcに記載するか、peco-snippets.zshとかでファイルを作成してsourceして読み込む

1
2
3
4
5
6
7
8
function peco-snippets() {

    local SNIPPETS=$(grep -v "^#" ~/.snippets | peco --query "$LBUFFER" | pbcopy)
    zle clear-screen
}

zle -N peco-snippets
bindkey '^x^s' peco-snippets

snippetsファイルを用意せずに、sheetの資産を生かすなら、下記みたいな感じ。

1
2
3
4
5
6
7
8
function peco-snippets() {

    local SNIPPETS=$(cat ~/.sheets/* | peco --query "$LBUFFER" | pbcopy)
    zle clear-screen
}

zle -N peco-snippets
bindkey '^x^s' peco-snippets

で上の例だとCtrl+x, Ctrl+sでスニペットの一覧が出てくるのでpecoやpercolで絞ると pbcopyに渡されて、クリップボードに格納される。

Linux上とかでクリップボード使わずに、そのまま利用したい場合は下記みたいな感じ

1
2
3
4
5
6
7
8
function peco-snippets() {

    BUFFER=$(grep -v "^#" ~/.snippets | peco --query "$LBUFFER")
    zle clear-screen
}

zle -N peco-snippets
bindkey '^x^s' peco-snippets

実際に動かして見るとこんな感じ

便利になった!

私がUNIXという考え方にどっぶり浸かっているので、pecoやpercolのパイプで渡して処理させるってのは感覚的に分かりやすくて大変扱いやすい。

vim-quickrunでServerspecをカーソル行単位でテストして編集効率を10倍にする

Serverspecが超高速で書けるserverspec-snippetsを作ったの続き。

超高速でServerspecが書けるようになったので、 今度はvim-quickrunを使って、 Serverspecを書きながらカーソル行だけテストを回せるようにした。

どんな感じかまた動画を用意したので、見ていただくのが早いです。

カーソル行だけテストが実行されるので、全体のテストを実行するより高速になってます。

vim-quickrunでテストを実行すると、出力に色が付かないので下記のようなsyntaxプラグインを作成。 使い方やvim-quickrunの設定例も下記にまとまっているので、参照ください。

g:quickrun_configにおいてcmdoptargsexecを調整すれば いろんな環境に対応が出来ると思います。

参考

Serverspecが超高速で書けるserverspec-snippetsを作った

Serverspec書いてますか!

Serverspecが超高速で書けるようにsnippetsを作成しました。(本当は私がResource Typesを全く覚えられないので作成しただけなんですが)

どんな感じのものなのかは動画を見て頂くのが早いです。

インストール方法や使い方はglidenote/serverspec-snippets を参照ください。

https://github.com/Keithbsmiley/rspec.vim/blob/master/ftdetect/rspec.vim みたい感じで、 filetypeをruby.serverspecへと自動指定は出来るんですが、rspecと干渉するので、ちょっと良い案を思案中。

大変便利になった

追記 2014/06/26

should <=> should_notなどの切り替えは下記のプラグインを使うと簡単にできるのでオススメです。

ソフトウェアの自前ビルド環境をVagrantで管理する

ここ1年くらい自分が担当しているサービスで使ってるNginxとか自前ビルドが必要なソフトは RPMを作らずビルドサーバでビルドしたバイナリをpuppetで管理して、 プロダクション環境にはpuppetやらデプロイツールなりで、バイナリ差し替え配布している。 (epelとかにrpmがあって、それがそのまま使えれば、基本的にそれを使ってるので、 自前ビルドしているパッケージはごく少数です。)

なんでRPMを作らないかは@hirose31さんのブログを読むと分かります!!

バージョンアップ、脆弱性対応、モジュールを追加などのたびにビルドし直さないといけなくて、 普通にやってると結構面倒くさい作業なので、Vagrantを使ってビルドしてる。

具体的にNginxを例に説明すると、下記のような感じのファイルを用意して、vagrant upだけでバイナリが作成される。

上の例だと

/tmp/build/nginx-1.7.1/objs/nginxにバイナリが出来上がるので、 それをpuppetのリポジトリに入れて、puppet各サーバで流して終わり。

アップデートや、モジュールを追加する場合は、provision.shを修正するだけで、 ビルドが終わったらvagrant destroyでビルドサーバを削除。

Vagrantfileprovision.shをgit管理しておけば、ビルド環境もバージョン管理が出来るし、 たいていこういう作業は忘れた頃に発生して毎回過去のissueを探したり面倒くさいので Vagrant使うと大変便利という話。

参考

bundle openでVimfilerやCtrlP.vimやFuzzyFinderを起動する

今朝社内IRCで@hsbtさんと@udzuraさんIdobataのGemfileの話をしていて、

1
2
3
10:54:44      hsbt | この Gemfile を持って来て、bundle install && bundle open が
10:54:58      hsbt | 一番、これ何だを見るのが楽だった
10:56:28    udzura | bundler benri

その中で上のようなbundlerの便利情報を話していて、そういえばrebuild.fm vol.41で 同じようなこと言ってたなーと思い出して、vim使って便利に出来ないかなーと思ってやってみたら簡単にできたのでメモ。

各種Vimプラグインのインストール方法は割愛。(neobundle.vimとかを使ってください)

単にBUNDLER_EDITORという環境変数を設定するだけのお手軽TIPS

VimFilerを利用する場合

1
export BUNDLER_EDITOR="vim +VimFiler"

ctrlp.vimを利用する場合

1
export BUNDLER_EDITOR="vim +CtrlP"

FuzzyFinderを利用する場合

1
export BUNDLER_EDITOR="vim +FufFile"

bundle openでgemの中身を確認

1
bundle open gemname

私はVimfiler使うように設定。

たとえば、bundle open rubocopとかやると下記のような感じでVimfilerで 該当gemの中身を見れるようになった。

便利〜

参考