LoginSignup
1
3

More than 1 year has passed since last update.

開発環境自動化②

Last updated at Posted at 2021-06-11

経緯

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用にフレームワーク作りたい。

もっとクールなやり方あったら教えて下さい。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3