目次
概要
ローカル環境の課題として "複数環境構築時の競合" が個人的に一番つらみを感じる
下手に広く浅くWeb技術に手を出すのでフロントのツールがクラウド系のモジュールと競合するとかあったり。Nodeのバージョンとか。
次点で "bashの起動速度" が課題。
そこらへんが整ってきたので文字に起こした。
TL;DR
- 前提としてサーバーサイドがメインで、たまにWebフロントで遊ぶ人間。
- ローカル環境のランタイムは片っ端からDockerへ固める
.bash_profiles
に起動の遅いものは追加しない(脳死)- アプリ類はCaskで入れ、1passwordなどのセンシティブなものは気分の問題でAppStoreから直接入れる
dotfiles
実行環境
各種言語の実行環境は基本的にDockerイメージを使うかDockerfileで固める。
最初に書いた通り "複数環境構築時の競合" を回避するのが理由。
ローカルに入っているものとしてはmacOSにプリインストールされてるRubyやPythonなどと、自前で入れているGolangのみ。
例えば「PlnatUMLをローカルで書きたい」場合はJVMを単純に入れるのは回避する。
JAVA_HOMEでJVMを指定しておくかPlantUML ProxyをDockerで立てるなどして、なるべくインストールしないことやアンインストールしやすくすることを意識する。
また、IDEは使わずにspacemacsを使っているのもあってかDockerと相性が良い。
IDEはなんかそこらへんの対策方法とかある気がするけど使う予定が無いので知らない。
ちなみに社用PCにはお仕事でサーバーサイドKotlinとJavaを扱ってるのでsdkman(gradle)とJVMをローカルへ入れてる。
プロダクト自体はdocker-composeで固めてはあるけど、ローカルに直接プロダクトの環境構築してる方も居るのでその環境を再現するのが主な理由。
余計なものが入ってないとこういうときにすんなり環境構築ができるのも○
終わったらJVMもsdkmanもサクッと消しちゃいます。
ターミナル
だいたい↓の5つで構成されてる
- Terminal
- bash
- tmux
- spacemacs
- Docker
Terminal
ターミナルはMacのデフォルトの Terminal を使用している
iTerm2はキーボード入力が薄皮一枚分遅くなるのですぐにやめた
terminalで設定しているものとしてはテーマはProを使っている。
他にはMetaキーをONにして、Bellを全てOFFにして、ANSI Colorsの青を明るめにして、Antialias TextをONにしているぐらい。
bash
shellにはbashを使っている。
zsh/fishを使ったけど起動がbashより起動が遅い気がするのと、それを許容するだけの魅力を特に感じなかったのでbashを使っている。補完とかは基本 C-r
で間に合ってるし、ほしいのは bash-completion
に頼る。
起動速度にこだわるのは、僕の使い方が微妙なんだろうけど、bashをカジュアルに起動して閉じまくるから。
これはもう手癖で今更直らないので起動速度を上げる方針。
.bash_profile
基本的に何か追記するときは time
コマンドで測って導入するか決めてる。
遅いツールは別のを探したり、どうしてもほしい場合はbash起動時には適用せずに起動用コマンドなどを作ったりしている。
例えばgolangのバージョン管理ツールであるgvmは普段使わないので、 gvm
が初めて叩かれたタイミングでgvmを起動するようにしている
export IS_GVM_ENABLED=false gvm() { [ -s ~/.gvm/scripts/gvm -o "${IS_GVM_ENABLED}" == false ] && IS_GVM_ENABLED=true && . ~/.gvm/scripts/gvm gvm $@ }
なんでこんなことしてるかというと、 .bash_profile
の読み込みは time source ~/.bash_profile
で0.5sec以内に収まるようにしている。
で、gvmの起動には 0.05secほどかかる( time source ~/.gvm/scripts/gvm
)のでチリツモで許容できないのです。
alias/function
あまり登録はしてないけど、万人受けしそうなのだけあげるなら。
pbcopy
ビルトインのpbcopyは日本語が扱えないため、それを可能にするalias。
前提条件として nfk
をインストールする必要がある
nfkはbrewでインストールできる
$ brew install nfk
alias pbcopy="nkf -w | __CF_USER_TEXT_ENCODING=0x$(printf %x $(id -u)):0x08000100:14 pbcopy"
cdf
現在開いているFinderのパスへ移動するためのfunction。
cdf() { target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'` if [ "$target" != "" ]; then builtin cd "$target"; pwd else echo 'No Finder window found' >&2 fi }
適当なパスをFinderで開いて cdf
$ open ~/Pictures/ # デスクトップにFinderで Picturesが開く $ cdf $ pwd /Users/y-ohgi/Pictures
プロンプト
プロンプトには "カレントディレクトリ"、"gitのブランチとユーザー名" 、"選択中のgcpプロジェクト"、"最後に実行したコマンドの成否" を表示するようにしている。
PS1
へ直接プロンプト記述するわけではなく、 PROMPT_COMMAND
でPS1を変更したい場合は既存の PROMPT_COMMAND
も読み込むようにしてあげないとせっかくインストールしてあげたツール類が動かなくなることに注意。
PROMPT_COMMAND="_prompt_command;${PROMPT_COMMAND}" _prompt_command() { LAST_EXEC="$?" PS1="" [[ ${IS_KUBE_PS1_ENABLED} == true && "${TMUX}" == "" ]] && PS1+=$(kube_ps1) PS1+="\w " PS1+="${Green}\$(_git_branch)${Color_Off} " PS1+="${Blue}\$(_gcp_project)${Color_Off} " PS1+="\$(_last_result) " PS1+="\n" PS1+="$ " }
だいたいこんなかんじになる
syslogの削除
bashを起動する際ここが肥大化すると引きずられて起動速度が落ちるので削除する。自己責任。
参考: macOS Sierra時代のsyslogとの付き合いかた - すがブロ
$ sudo rm -rf /private/var/log/asl/*.asl
tmux
sshセッションの維持とか画面分割とかしてくれるツール。
画面分割目的に使ってる。
開始キーはデフォルトだとemacsと競合するので C-t
に変更してる。
何度か挫折してたけど同期のemacsライクな設定を参考にゴニョったら世界が変わった。同期に感謝
同期のdotfile
sinnershiki/dot_files: dot files
Spacemacs
知らない人に説明するなら「emacsとvimを足せば最強だよね」って思想のエディタ。ベースはemacs。
最近emacsからspacemacsへ乗り換えた。
emacsのコンフィグをゴニョゴニョするのは楽しいけど無限に時間が吹っ飛ぶ。
で、そこらへんの設定周りをいい感じにするためにspacemacsに乗り換えた。
spacemacsには一般的に使われるであろうパッケージがデフォルトで入っていて、markdownやgitなどの設定は layer
と呼ばれる機能で公式が 設定を一式 提供してくれる
いざ乗り換えてみると最初はemacsだと思って使って痛い目みたけど、なれてきたら快適そのもの。
ほしいパッケージはほんとにほとんど最初から入ってるし、新しく言語を始める場合はlayerがあるしで最高のユーザー体験が得られる。
packages
万人受けしそうなのをあげるなら
multiple-cursor
名前の通りマルチカーソル用パッケージ。
例えば矩形選択は直線の同時編集には強いけど行末の同時編集は苦手である
そういったときにmultiple-cursorで行末にカーソル増やし、行末に編集を行う。
QuickTimePlayerを初めて使った。
参考: multiple-cursor.elの設定を調整してみた - Qiita
undo-tree
編集履歴をツリー形式で表示させ、自由に履歴を行き来するパッケージ。
単純に一本道でundoするだけじゃなく、gitのブランチのように過去にundoしたタイミングにも戻れる。
こちらも百聞は一見にしかずなので動画を撮った。
Applications
おまけでGUIのアプリケーションを。
2年ぐらいほとんど固定化されてる気がする。
満足してるのもあるけど単純に探してないだけ。
基本Caskを使って、Caskに無いものは直接取得しに行く。
Google 日本語入力
Windowsでネトゲやってた頃から使っていて手に馴染んでいるので使ってる。
Microsoft IMEがネトゲと相性悪くてGoogle IMEを入れたのが最初だった気がする。
Google Chrome
メインブラウザ。
サブはCanary。Safariは使ってない。
Chrome Extension
名前順にいつも使ってるのをつらつらと
- 1password
- 1password
- Awesome Screenshot
- キャプチャがメインっぽいけど画像の編集の用途に使ってる
- Chrome extension source viewer
- CSS Viewer
- カーソルをあわせた要素のCSSを閲覧できるようになる
- EditThisCookie
- Cookieの閲覧編集
- Emoji Keyboard
- PCでemojiを使う
- Enable right click
- 右クリック禁止の禁止
- Hatena Bookmark
- Highlight to Search
- カーソルで選択した箇所を即座に検索するためのツール
- HTTP/2 and SPDY indicator
- HTTP2とSPDY対応のサイト判別
- JSON Formatter
- JSONのフォーマット
- Keepa - Amazon Price Tracker
- Amazonの商品ページで値段の推移が見れるようになる
- Octotree
- PlantUML Viewer
- PlantUMLのプレビュー
- title tag getter
- User JavaScript and CSS
- vimium
- Wappalayzer
- 現在居るページがどんな技術で作られてるかを閲覧するツール
Alfred
Option + Space
でアプリケーション呼び出し用inputフォームが最前面に出てくるサムシング。使えばわかる系。
アプリ呼び出しより課金してスニペットメインで使ってる。
Better Snap Tool
Better Touch Tool
一部アプリのキーバインド上書き用に使ってる。
IDEとか使うときemacsライクなキーバインド( C-h
や C-_
)ができなかったりするので、
こいつで( C-h
を Backspace
へ、 C-_
を Cmd-z
へ、etc...)強制的に上書く。
Dropbox
バックアップ用。
画像は自分のアイコンしか使わないしソースコードはGitHubなので、DropBoxがバックアップの全て。
会社では会社の方針かなにかで使えないのがしんどい。そっちはGoogle Driveを使ってる
Postman
WebAPIのテストツール
Gyazo (GIF)
画面キャプチャ & 共有ツール
キャプチャ後アップロードされURLが生成されるユーザー体験は素晴らしい。
Wunderlist
Todo管理ツール
Shift + Option + Space
でAlfred的なinputフォームを呼び出せて思いついたタスクをカジュアルに登録できるのが気に入ってる。
todo登録しようとしてアプリ起動からやってると何しようとしてたか忘れるので(忘れるので)ショートカットはほんと大事。
Inkdrop
Markdownで書けるメモ帳。
いろいろ試したけどMarkdownベースならこれが最高だったので課金して使ってる
Atom
いちばんemacsライクなキーバインドが使えるGUIエディタなので入れてる。
GUIでテキストファイルクリックしたときに起動する用。基本使わない。
Visual Studio Code
ひとが僕の環境でエディタを使うときはこいつを起動します。