Dotfilesについて最近考えていること

自分は、dotfilesリポジトリを作って、いろいろ管理するタイプの人間なのですが、最近のdotfilesの構成についてまとめようと思います。

自分のdotfilesでやっていることは、以下

  • 基本的なshellのセットアップ
  • 環境変数などのコマンドラインのセットアップ。
  • デスクトップアプリのインストール

もはや、dotfilesの領域を超えて、デスクトップの設定も行っています。

先日、OSのクリーンインストールしたのをきっかけに環境を見直しました。そのときに、セットアップを大幅にアップデートしたので、そのときに考えた基本設計です。

とりあえず、disposableに

レガシーソフトウェア改善ガイド読み終わった”でも触れたのですが、disposableな設計は良い品質を維持するために大切なことだと思うので、自らの環境にも導入しています。例えば、医療の場でも、使用する機器は患者ごとに、disposableにしていることがほとんどだと思いますし、常に新鮮に保つという意味でも良いプラクティスだと思っています。

また、今、ベストだと思っている環境はいずれ、古くなっていきます。したがって、どんどんアップデートできる環境を構築することが大切です。その意味で、パッケージマネジャーはほぼ必須です。ほぼ全てのソフトウェアをbrewかmasで管理しています。できるだけ、古い技術に依存せず、どんどん新しいものに入れ替えていけることを目指しています。

何をやるか

大まかに何を開発するかによって異なります。目的に合った環境を作るのが大事です。

例えば、iOSを開発するのであれば、それをベースに組み立てます。iOS開発に必要なのは、Xcode, Ruby, brew, zshell, git, slack, sketchあたりからいろいろと入れると思います。

実際は、Xcode, SlackはApp Storeから。Sketchはbrew caskで、Rubyはrbenv,  zshellはbrew, gitはデフォルトか、brewから入れるという感じになります。

これらは管理下に置きたいので、インストールスクリプトを書いて、自動化します。

例えば、こんな感じです。

brew bundle --file=- <<EOF
brew "go"
brew "peco"
cask "1password"
cask "sketch"
mas "Xcode", id: 497799835
EOF

このようなスクリプトを用意することで、一括でインストールできるようになります。

他にいろいろやってる人はその都度、設定を追加していきます。手を広げている人はその分、大変になります。自分もなんだかんだで、色々と入れています。

何をやらないか

無駄に管理するのもコストがかかって大変なので、必要ないものは割り切って、use/local以下に入れてしまうのも手です。env系が必要なのはバージョンごとの挙動を試さないといけない場合なので、そこまで必要ない場合は、env系で管理せず、デフォルトのを使うか、brewで引っ張ってこれるのをそのまま使います。

あとはミニマリストではないですが、ラップトップの中くらいは、自分の管理できる範囲で運用するというのも手です。

ということで、必要ないものは極力入れないようにしよう。他のコマンドのオプションで代用できたりしないかなど、考えてみる。たまにはデフォルト厨になるのも手です。

E.g.) Curlを使って何が出来るのか。emacsの基本機能を調べてみるなど。

ちなみに最近、筆者はemacsを捨てました。笑

気をつけていること

何かをインストールした時は、それが一時的なものか、必要かを考えて、必要なら、どんどん自動化してます。設定のスクリプトまで自動挿入されるように準備しています。

ソフトウエアがどう作られてるかや、どう動くのかといったことを理解するのも重要です。分かればわかるほど、コンパクトにまとめられると思います。

最後に

ちなみに、自分のdotfilesはこちらに公開しております。

もし興味がありましたら、見てみてください。

具体的にどう構築しているかは、後日まとめるかもしれないです。

BR

how to toggle web proxy from commandline

Awesome tips!

I don’t usually use proxy servers. But depending on the network environment, I need to connect proxy servers.

I had been searching for the solution for switching proxy. The more simple or easier, the better.
I tried locamatic, or other softwares. But nothing served well.

Now, that post taught me how to manipulate proxy setting from command line.
That suggests the commads below:

networksetup -setwebproxy Ethernet proxy.example.net 80 off
networksetup -setwebproxy Ethernet proxy.example.net 80 on proxyuser "p4ssw0rd"
networksetup -setwebproxystate Ethernet off

And then, I added one function to my bashrc for myself.

setPrefProxy() {
    server=$1
    port=$2
    adapter=$3
    mode=$4

    echo "s:$1 p:$2 m:$3"

    if [ ${mode} = "on" ];then
	    networksetup -setwebproxy ${adapter} ${server} ${port} off
	    networksetup -setsecurewebproxy ${adapter} ${server} ${port} off
	    networksetup -setftpproxy ${adapter} ${server} ${port} off
    else
	    networksetup -setwebproxystate ${adapter} off
	    networksetup -setsecurewebproxystate ${adapter} off
	    networksetup -setftpproxystate ${adapter} off
    fi
}

Usage:

setPrefProxy proxy.server.com 8080 Ethernet on[off]
  • You have to input password for modifying configuration.

OK. It may be life-changing.