Don't Repeat Yourself

Don't Repeat Yourself (DRY) is a principle of software development aimed at reducing repetition of all kinds. -- wikipedia

今さらだけど dotfiles を書いた

会社で使っている PC を変えてもらったんですが、環境構築が大変だなあと思ったのでいろいろ同僚に教えてもらいながら dotfiles を整えてみました。

とりあえず言われたことは「oh-my-zsh を使うんじゃねえ」だそうです🤣 詳しいことはわかりませんが、メンテナンスのされ具合や脆弱性の放置度合いがあまりよくないのだそう。

(シェルは適当に Mac デフォルトのものを使っていたり、エディタの設定も大してやらないなど、そういうものにまったく無頓着だったのを少し反省しました。IDE 上で普段生きているため、コードさえ書ければいいやの人種でしたので…)

今回の目的としては、私の Mac さえ設定できればいいというものです。実際 Mac 以外の OS は使わないし、家に Raspberry Pi もあったりするんですけど、Mac で開発したものを転送して動かすということしかやらないので、実質 OS はひとつかなあと思いそうしています。他の方は、様々な開発環境向けに中身を用意していてすごいと思います。

近々自宅用に Mac mini も買おうと思っているので、ちょうどいい機会だと思って整備しました。

構成

  • deploy.sh: .xxx という名前のファイルなりディレクトリにエイリアスを貼ってくれるものです。
  • brew_install.sh: brew install や brew cask install で入れるものを書いておくシェルです。
  • initialize.sh: brew install で済ませられないものを入れておくシェルです。
  • .zshrc: zsh 向けの設定をいくつか仕込んであります。エイリアスもここに設定しています。
  • .gitconfig: git 関係の設定。
  • .vimrc: vim 向けの設定(Vim ユーザーなためです)。
  • .config: このディレクトリを使用するツール向けのものです。

便利だと思ったもの

brew install 系をまとめるシェルを用意できるらしい

いろいろ調べてみたところ、brew install 系をまとめることができるらしく、それを試してみました。たしかにまとまりきってすっきりしたと思います。

https://github.com/yuk1ty/dotfiles/blob/master/brew_initialize.sh

調べてみると、たとえば IntelliJ とかこれまでサイトからダウンロードして使っていた多くのアプリケーションに brew cask install 対応がされていて、これをシェルひとつですべてセットアップできるのはとても楽ちんだと思いました。

ミドルウェアを全部 docker-compose で立ち上げる

ローカルで製作物を動かす際に、MySQL 5.7 を想定して作っているアプリケーションなのに brew install mysql すると今は8系が入ってしまって…というめんどうくささがあったのを、新人さんなどのメンターを通じて前から把握していました。せっかくなので、ミドルウェアは全部 Docker 上で立ち上げてしまうことにしました。

クライアントは Table Plus を使うことにしました。MySQL 以外にも、Redis なんかにも対応しているので。Memcachedtelnet で見られるので問題なし。DynamoDB は、たしかブラウザから見られたはずなのでいいと思います。最悪、毎回捨てコンテナを立ち上げてアクセスすれば大丈夫。

https://github.com/yuk1ty/dotfiles/blob/master/docker-compose.yml

おかげさまで、少し brew install する量が減りました。

もちろん、毎回 docker-compose のあのコマンドを打つのは少し大変なので、エイリアスを仕込んであります。

https://github.com/yuk1ty/dotfiles/blob/master/.zshrc#L28

iTerm2 のテーマサイトがある

あるんですね。

iterm2colorschemes.com

前から Atom のカラーパレットかわいいなーと思っていたので、Atom を入れてみました。すき。

startship

Starship というプロンプトをご存知でしょうか。Rust 製のプロンプトで、普段遣いのシェルがいい感じになります。

git のブランチ今どこにいるとかも表示できて、シェルもかなりいろいろカスタマイズできるので、結構オススメです。

starship.rs

Rust 系のモダンなコマンド

以前 Qiita の記事で話題になっていたかと思いますが、Rust 製のモダンな Linux コマンドの置き換え OSS がいくつか存在しています。せっかくなので、これをいい機会と思って入れてみました。シェルがとてもカラフルになってかわいいです。テンション上がります。

こういったコマンドは UI もいくつか既存のコマンドと比べて改善されていることが多く、色遣いに慣れてきたらすごく生産性が上がりそうだなと思います。

  • bat: cat コマンドのモダン版。カラースキームが設定された状態で cat を表示できるなど。
  • exa: ls コマンドのモダン版。カラースキームが設定された状態で ls を表示できるなど、可視性が高くなっています。
  • ripgrep (rg): 高速な grep コマンド。
  • hexyl: hexdump のモダン版。ダンプに色をつけられます。
  • procs: ps のモダン版。ps コマンドがものすごくきれいになります。
  • ytop: top のモダン版。もはや別物。

https://github.com/yuk1ty/dotfiles/blob/master/.zshrc#L22

わからないこと

  • Python は結局 env 系は何を入れたらいいんでしょうか?pyenv?pipenv?Anaconda?

まとめ

dotfiles を用意しきったので、これで急な買い替えにもバッチリ対応できそうです。よかった。

ただ実はまだ、Kubernetes 周りの環境整備を終えておらず、そのあたりの設定も追加したいと思っています。時間を見つけて追加しておきたいです。

結果はこちらにまとめました。

github.com