engineers_blog先月中途で入社した卜部です。中途入社したタイミングでちょうどよいので環境設定を見直していました。全部捨てて書き直したのは8年ぶりくらいでした。今回の感想を忘れないうちに書いておきます。EmacsEmacsを使い続けている理由はauto-save-buffersです。これと同じような機能を提供しているエディタは(RubyMineとかなくもないが)とても少なく、移行先として選択肢があまりありません。Atomのautosaveはどうやら求めているものと違うようですし。auto-save-buffersで救われたファイルは数知れず、というか保存とかいう前世紀の遺物を計算資源に下請けさせることで考えることが減るので、本当は他のエディタにも是非あるべき機能です。下にzshでpredict-onの話も書いてありますが、自分は0クリック革命をわりと実践している派だと思います。パッケージシステムを使うことにしたさて以前はEmacsの設定ファイルはもちろん手書きで、文字コードはEUC-JP、パッケージシステムなどもなく、すでに使わなくなったnavi2chの設定が残っていたり、最古のコードには”fj.editor.mule“と書いてあったりして、端的に言ってだいぶ雑然としていました。modernization」でいろいろ検索したりして、やはりelispファイルをローカルにをコピペして運用する時代はとっくに終わっていたということと、「とりあえずparadoxが使えると良さそうだ」という結論になったので、まずはparadoxが使えるようにセットアップしました。paradox-list-packagesをぬぬぬと眺めて、多分use-packageというやつが便利の気がしました。t))以前はuse-packageが提供しているようなautoloadしてauto-mode-alist設定して...みたいのをやるマクロ書いたりしてましたが、今回は他人のパッケージに乗っかる判断です。これは実際にやってみると、最初に学習コストがかかるのでやや面倒ではあるものの、慣れないelispの俺マクロをメンテしつづける工数のことを考えると断然軽いし、そもそもuse-packageを使ってみたら起動が高速になりました(従来は無駄な読み込みなどあったのだろうとおもいます)。この判断は正解だったなという気がします。他のパッケージ「これを使うと便利」みたいのは、今はまだよくわからんという感じですね。移行したばかりですし。使ってたdiminishとかmic-parenとかwindmoveとかあるけど、それは鉄板すぎて今更だし、逆に今回からhelm使ってみたけど、まだ便利とかいうほど使いこなせてないし。'woman)こんな感じのようです。あとruby-electricとかelectric-spacingとか「コマンド叩かなくても勝手になんとかする」系が目に付くけど、やはりそのあたり人間より機械のほうがよほど正確ですね。人間は働かないのが正義。いまのところ動かすこと優先なのでまだコピペされたコードも残っている状態なのです。これはいずれ改善していきたいところです。どのパッケージ使えばいいんでしょうね。real-auto-saveってやつなのかな。ZshZshを使い続けている理由はpredict-onです。この機能はなかなか強烈(ソースコードに魔術とか書いてあって笑うレベル)なので、一部の人にとってはライフチェンジングであり、合わない人には合わない機能かと思います。一言で言うと、コマンドプロンプトでブラウザのURL欄みたいに履歴のインタラクティブ検索をやってくれるやつです。履歴が育ってくると一文字二文字打つだけでだいたいの作業が終わるようになってくるが、設定とかとくにぜすとも「勝手に育つ」のが素晴らしい。慣れると後戻りが難しくなります。他人にお勧めするのはややためらわれるのですが、そこまでではなくもう少し穏健な感じで同様の機能としてzsh-autosuggestionsというのもあるので、こちらは割と安心してお勧めできます。試してみるといいです。パッケージシステムを使うことにしたさてそんなこんなでEmacs同様にZshの設定もプラグインを基本とした他人の尻馬に乗る時代かと思い、プラグインマネージャを使ってみようとしましたが、いろいろあるようですね。有名どころでoh-my-zshなど閲覧しましたが、大きすぎてどこを読んでいいかよくわかりませんでした。いうわけで今回はファイル一個で読みやすいし置くだけ簡単設置なのでb4b4r07/zplugを採用しました(あと日本語通じそうというのももちろん地味にポジティブです)。loadplugins.zshに使うプラグインを書いていきます。from:localzsh-functionalところで今回はじめてこのTarrasch/zsh-functionalなるものの存在を知ったのですがこれはなかなか良いですね。mapとかeachとかそういう系のコマンドが提供されているだけですが。これでシェルの(控えめに言っても風変わりな)ループ構文を書かなくて良くなるのでかなりわかりやすくなる気がしました。-n1)以前ならforとifで書いていたところです。今回powerlineも試してみました。たしかに見た目はかっこいい。シェルの起動が目に見えて遅くなりました。毎日の作業中にシェルの立ち上がりがキビキビしないのは生産性の面で厳しいものがありますので、残念ながら不採用となりました。出すだけのシンプルなやつで落ち着きました。時々、$HOME直下ではなく$XDG_CONFIG_HOMEというディレクトリに設定ファイルを置いてもいいアプリがあります。代表的な例としてGitなどがあります。設定ファイルを一箇所にまとめておけるとバージョン管理がすごく簡単になるので、これはぜひ使いたいところです。いえ全ての設定がどこかのディレクトリに移動できるかというとそうでもない。ZshとかBashの設定ファイルは、そもそもそれが起動する瞬間までに$XDG_CONFIG_HOMEを指定する方法がないから、どうがんばっても~/.zshenvとか~/.bashrcとかから読むしかないです。他にもたとえば~/.sshを見に行くSSHクライアント実装がたぶん複数種あるので、それらは一存では場所を変えられないのではと愚考するところです。$XDG_CONFIG_HOMEとは別の環境変数を見るというやつもあります。そのような例としてVimがあるようです。ようするにカオスなのですが、とはいえ設定ファイルの場所がまとまるのは魅力的です。「環境変数でまとめれるやつはまとめる、まとめれないのは諦める」というやや現実に負けた感のある折衷案に落ち着きました。LESSHISTFILE=$XDG_CACHE_HOME/less/historyそのほか他の設定ファイルも一通り作り直しです。tmuxを使ってみている上でzsh上のpowerline諦めた話を書きましたが、とはいえかっこよさには一定の評価があるかと思い、tmuxでpowerlineしてみるかと試しているところです。これに関しては初心者なので「使ってみてます」以上の話はないかとおもいます。powerline入れた以外はほとんどいじってないですし。dir_colorsみなさんもlsの出力に色をつけて楽しんだりしていることかと思いますが、この色をつける呪文を生成してくれるdircolors(1)というプログラムがあり、それに入力する別の呪文がdir_colors(5)です。00;38;5;244と書いておくと、~で終わるファイルがグレーアウトして見えるという塩梅。256色に対応しているようです(最後の244というのが色番号)。以前はlsに渡す環境変数を手書きでメンテナンスしていましたが、さすがにそういう時代は終わったぽいので、今回は素直に他人の尻馬に乗ることにしました。tokenなど、不用意にgithubに公開してしまうと危険な情報を含んでいるため、注意が必要でした。~/data/etc/git/localまとめ今回は方向性としてはパッケージシステムを最大利用して楽をする(設定ファイルで苦労しない)自動化できることを自動化して楽をする(作業で苦労しない)という方向でした。共感していただける方も多い方針ではと思います。過去に苦労していた部分が今では他人のプロダクトでさっくりと実現できているところもあって、やはり時代は変わっているのだと実感しました。実際にはたとえばpredict-onなど癖もあるので、今回の自分の設定が他の人すべてにおすすめできるとは思いません。参考にしていただける部分はきっとあるのではと思います。いうわけで実際の設定ファイルはshyouhei/dotfilesに置いておきましたのでよろしくご査収ください。最後にマネーフォワードでは、エンジニアを絶賛募集しています。ご応募お待ちしています。