経緯
mac,linux(arch,ubuntu,debian),windows(wsl)で同じ環境作るのめんどくさすぎ問題。が発端
詳しくは以下の"開発環境めんどくさすぎる問題"を読んでください。
https://qiita.com/aki-f/items/494cefe0e98cc74249fa
問題
今までのやり方だとすべてのパソコンでhaskellやrustがインストールされてしまう。
そして環境変数化へ
以下のファイルを作った。
config.json
{
"languages": {
"haskell": {
"enable" : true
},
"rust": {
"enable" : true
},
"ruby": {
"enable": true,
"version": "3.0.1",
"modules": [
"solargraph"
]
},
"nodejs": {
"enable": true,
"version": "14.17.0",
"modules": []
},
"jvm": {
"enable": true,
"version": "11.0.10",
"modules": ["gradle"]
}
}
}
これを環境変数にするには
enviroment.sh
export RUBY_FLAG=$(cat ~/dotfiles/config.json | jq .languages.ruby.enable)
export RUBY_VER=$(cat ~/dotfiles/config.json | jq -r .languages.ruby.version)
export RUBY_MODULES=$(cat ~/dotfiles/config.json | jq -r .languages.ruby.modules\[\] | tr '\n' ' ' )
export NODE_FLAG=$(cat ~/dotfiles/config.json | jq .languages.nodejs.enable)
export NODE_VER=$(cat ~/dotfiles/config.json | jq -r .languages.nodejs.version)
export NODE_MODULES=$(cat ~/dotfiles/config.json | jq -r .languages.nodejs.modules\[\] | tr '\n' ' ')
export JVM_FLAG=$(cat ~/dotfiles/config.json | jq .languages.jvm.enable)
export JVM_VER=$(cat ~/dotfiles/config.json | jq -r .languages.jvm.version)
export JVM_MODULES=$(cat ~/dotfiles/config.json | jq -r .languages.jvm.modules\[\] | tr '\n' ' ')
export RUST_FLAG=$(cat ~/dotfiles/config.json | jq -r .languages.rust.enable)
export HASKELL_FLAG=$(cat ~/dotfiles/config.json | jq -r .languages.haskell.enable)
source enviroment.sh
例えばjavaだとこうなる
install/jvm.sh
if [ $JVM_FLAG ]; then
curl -s "https://get.sdkman.io" | bash
source ~/.sdkman/bin/sdkman-init.sh
if [ "$(uname)" == 'Darwin' ]; then
if [ "$(uname -m)" == 'arm64' ]; then
sdk install java $JVM_VER-zulu
else
sdk install java $JVM_VER.9-ms
fi
else
sdk install java $JVM_VER-ms
fi
sdk install $JVM_MODULES
fi
$JVM_FLAGがfalseならインストールしないし、各種アーキテクチャによってパッケージを変えるが、すべて同じバージョン。
現状はruby,nodejs,jvm,rust,haskellに対応してる。
最後に
これからはconfig.json
をパソコンごとに変更するだけで環境を作れます。
やっぱりdotfile用にフレームワーク作りたい。
もっとクールなやり方あったら教えて下さい。