Edited at

開発環境で今年変えてみたこと

More than 1 year has passed since last update.

私の開発環境に関して今年変えてみたことや知ったことをまとめてみたいと思います。


ターミナルから他のアプリケーションを起動する


よく使うコマンド

私は作業を始めるときに、まずターミナルにて対象システムのディレクトリへ移動します。

そして、そこからGitを操作するSourceTreeやIntellij IDEAを起動します。

そのためのaliasが以下です。

# gg は以前は git-guiをこのaliasで起動していた名残

alias gg='open -a SourceTree.app'

alias idea='open -a IntelliJ\ IDEA\ CE.app'

使い方は以下の通りです。

$ cd myapp

# このディレクトリのプロジェクトをIntellij IDEAで開く
$ idea .

# このディレクトリのgitリポジトリをSouceTreeで開く
$ gg .

# このディレクトリをFinderで開く
$ open .

OSXの openコマンドはファイルを開く・アプリを起動するといった"開く"(Finder上でcommand + o)操作を行うコマンドです。

このコマンドは、引数のファイルやディレクトリを-aオプションで指定したアプリで開くことができます。

また、アプリを指定しなかった場合は対象がディレクトリであればFinderを開くことができます。

これの起動方法のおかげで、アプリを起動してからアプリ内で対象ディレクトリを開く操作を省くことができます。


openコマンドで特殊な起動

ついでにopenを使ったtipsをもう少し。

openを使うことでアプリの起動時に引数を渡すことができます。

例えば、Google Chromeは起動時の引数に--app="<URL>"と指定すると、

Chromeのウインドウをアプリモード(タブバー、アドレスバーが表示されないモード)で起動できます。

これを使うことで、GmailやChatworkといったアプリ的なWebサイトをデスクトップアプリのように使えます。

open -n -a "Google Chrome.app" --args --app="https://www.google.com/"


vimからFinderを開く

Vimでファイルを編集しているときに、以下のコマンドでそのファイルが存在するフォルダをFinderで開くことができます。

:!open %:h

Exコマンドで!にて外部コマンドとしてopenを実行します。%:hが現在のファイルのディレクトリに展開されます。


Git関連


gitコミットコメントをMacVimで記述する

以下の環境変数でGitでのコミットコメント記述にはvimを使っていたのをMacVimに変えました。

今までもそうしたかったのですが、mvim起動時に"-f"オプションをつけなければいけないことを知りませんでした。

# mvim : MacVim起動用コマンド。vimコマンドのMacVim版

# -f or --nofork フォアグラウンド: GUIを始めるときにforkしない
export EDITOR="mvim -f"


Gitのログを見やすい形式で取得する

アプリのCHANGELOGを書くときに以下のコマンドでgitログを取得すると整理しやすいです。

$ git log --graph --stat --topo-order origin/master..HEAD | mvim - # パイプ先はお好きなエディタを。

こうすると以下のようにfeatureブランチがメインブランチにマージされる流れがわかりやすい表記になります。

この中でメインブランチへの結合点の内容をピックアップしていくとCHANGELOGを作成できます。

*   commit ded5a3beee8a11fecd4866bace35038c16c5158e

|\ Merge: 383085d a1e72b3
| | Author: namutaka <namutaka+g@gmail.com>
| | Date: Sat Aug 20 16:37:57 2016 +0900
| |
| | Merge branch 'feature1'
| |
| * commit a1e72b31b5651c0feb848bd816d4b0a3969fa8d1
|/ Author: namutaka <namutaka+g@gmail.com>
| Date: Sat Aug 20 16:37:21 2016 +0900
|
| Add something
|
| example/somefile.js | 15 ++-------------
| 1 files changed, 10 insertions(+), 28 deletions(-)
|
* commit e1061dd7784518c57424ac2828ad6bf426ea5138
Author: namutaka <namutaka+g@gmail.com>
Date: Sat Aug 13 15:58:08 2016 +0900

Improved something


SSH接続

sshrcというツールの紹介記事を見つけて導入してみたのですが、地味に便利でした。

sshrcは、手元の環境に以下のようなファイルを用意しておけば、sshrcコマンドでssh接続したサーバー内でこのファイルを自動で読み込んで(source)してくれます。

これによって、接続先のサーバー1つ1つに個人の環境設定を行わなくてもよくなります。


$HOME/.sshrc

# alias

alias ll='ls -l'
alias la='ls -la'
alias rm='rm -i'
alias grep='grep --line-buffered'

# プロンプトにサーバー名を表示
export PS1="[\u@\h \W]\$ "

# vim
# 手元で $HOME/.sshrc.d/.vimrc というファイルで vim設定を用意しておく
export VIMINIT="let \$MYVIMRC='$SSHHOME/.sshrc.d/.vimrc' | source \$MYVIMRC"
which vim > /dev/null 2>&1 && alias vi=$(which vim)


sshrcはsshコマンドの代わりに使うのですが、私はaliasでsshrcをsshとして使うようにしています。

# sshrc

alias ssh='sshrc'

注意として、sshrcでは接続先側でコマンドを実行させたい場合にsshから帰ってこない場合があるので、適宜aliasなしのsshと使い分ける必要があります。

# ssh を sshrcとする

$ alias ssh='sshrc'

# sshでサーバー内でコマンド実行した結果を取得
$ ssh server1 grep "info" app.log
→ このとき、grepを実行したあとでsshが終了せずサーバーに入ったままになる

# そういう時は、コマンド前に"\"を記述してaliasなしでのsshコマンド実行をする
$ \ssh server1 grep "info" app.log


Vim

知っているひとには今更なことがいくつかあると思いますが、まとめておきます。


標準入力をUTF-8として開く

vimでは何らかのコマンドの結果をパイプして開くときに、文字コードが latin1 になって文字化けてしまいます。これを回避するために以下の設定を入れました。


.vimrc

"" 標準入力はUTF-8と見なす

autocmd StdinReadPre * set fileencodings=utf-8

使い方

$ echo "あいう" | vim - # UTF8で開くようになった


一括で連番を作る

数字の連番を一括で作るのを、g<C-a>g<C-x>でできることを知りました。

詳しい説明は以下の記事を参照ください

http://vim-jp.org/blog/2015/06/30/visual-ctrl-a-ctrl-x.html


vim-quickrunを非同期で実行する

編集中のスクリプトをその場で即座に実行できるという非常に便利なvimプラグインのvim-quickrunを以前から使わせていただいています。

ですが、最初にあまり詳しく調べなかったもので、非同期で実行できるのを今更知りました。

vim-quickrunに関する設定は以下のような感じなのですが、"'runner/vimproc/updatetime' : 60"という部分を指定することでVimの操作を止めずに実行できるようになりました。


.vimrc

vim-quickrun

" QuickRun {{{
Plugin 'thinca/vim-quickrun'

let g:quickrun_config = {}
let g:quickrun_config['_'] = {
\ 'split' : '',
\ 'runner' : 'vimproc',
\ 'runner/vimproc/updatetime' : 60
\}



Unite のファイル検索を ag(The Silver Searcher) を使う

Vimの操作を補助してくれる unite.vimの検索を、agを使うようにしました。

設定方法はどなたかの紹介記事からそのままなのですが、どこだったかを忘れてしまいました。

設定としては以下のような感じです。


.vimrc

Plugin 'Shougo/unite.vim'

" The prefix key.
nnoremap [unite] <Nop>
nmap <C-q> [unite]

" grep検索
nnoremap <silent> [unite]g :<C-u>Unite grep:. -buffer-name=search-buffer<CR>
" カーソル位置の単語をgrep検索
nnoremap <silent> [unite]gr :<C-u>Unite grep:. -buffer-name=search-buffer<CR><C-R><C-W>
" grep検索結果の再呼出
nnoremap <silent> [unite]gg :<C-u>UniteResume search-buffer<CR>

" unite grep に ag(The Silver Searcher) を使う
if executable('ag')
let g:unite_source_grep_command = 'ag'
let g:unite_source_grep_default_opts = '--nogroup --nocolor --column'
let g:unite_source_grep_recursive_opt = ''
endif



テキスト整形を Align から easy-align に切り替えた

これまで、CSVなどを区切り文字に沿って表形式に整形するのにAlignを使っていました。

ですが、最近になって類似の物がないかを調べてvim-easy-alignに変えてみました。

Align で十分使えていたのですが、以下のような点で少し不便さを感じていました。


  • 処理がやけに遅い(行が増えると顕著)

  • 整形後にカーソルが変な位置に飛ぶ

  • Markdownの表組みのような先頭と終端に区切り文字がある場合に整形後に先頭と終端に空白が入る

そこでeasy-alignに変えてみたところ、概ね上記の問題が解消しました。

公式の説明では、以下の interactive mode での起動を最初に紹介していますが、使い方がVimとしては独特なのでちょっと操作に慣れるまで戸惑いそうです。


.vimrc

nmap ga <Plug>(EasyAlign)

xmap ga <Plug>(EasyAlign)

それよりも、Exコマンドとして使う方がVim的な感じで使いやすそうな気がします。

範囲選択後に:EasyAlign */<区切り文字>/[Enter]で整形できます。