スクリプト言語の比較しながらGoのお勉強 〜 環境構築編(MacOS)

# ごあいさつ
はじめまして。@kuroseetsと申します。
２０００年からフリーランスで仕事を始め開発12年、インフラ8年経験してきたオッサンです。
皆さんはどのプログラミング言語、スクリプト言語が好きですか？または仕事などで何をよく使っていますか？
開発をされている方だとJavaが多いのかな？またはC#？Ruby？PHP？
事務系でスクリプトを組む方などはVBScriptなども現役ですよね。
私は現在インフラ運用構築側にいますので、私を含めて周辺でよく使われているのが、Python, Ruby, Perl, Bash辺りが多く、最近ではさらにGolangが増えてきている印象です。（あくまで個人的主観で、ですよ
それぞれ好みはあるとは思いますが、環境や現場による制約で使えるもの使えないものがありまして、私もその都度現場でキャッチアップしてスキルを身に付けてきました。
現在では`Infrastructure as Code`と謳われるだけあって、構成管理の設定ファイル以外でも手を動かすことも増えてきたと身を以て感じています。
今回個人的にGolangを勉強しようと思っているのですが、折角なので勉強ついでに有名なスクリプト言語を比較してみようかなと思います。
対象はGolangの他、Python, Ruby, Perl, Bash（インフラ運用４強スクリプト！）を予定しています。

---

# 環境構築
使うからには最新版を使いたい！
ということで常に最新版をインストールしやすく、また管理しやすくするためにバージョン管理ツール越しにインタプリタをインストールすることにしました。
## anyenvのインストール
@rinpa さんの https://qiita.com/rinpa/items/81766cd6a7b23dea9f3c を参考にしてインストールしました。
各スクリプト言語を使用するのにenv系コマンドは非常に便利なのですが、個別にインストールすると面倒です。
が、anyenvで一元管理できたら非常に便利ですね。

```shell
# anyenvインストール
brew install anyenv

# anyenvが実行できるか確認
anyenv --version

# 初期ディレクトリがないので初期化して作成
anyenv install --init

# インストールできるenv系コマンドの確認
anyenv install -l

# 各envをインストール
anyenv install goenv
anyenv install pyenv
anyenv install rbenv
anyenv install plenv

# 環境変数の設定
echo 'eval "$(anyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
```

## golang
golangの最新版のインストールはgoenvに従って粛々と進めていきます。

```shell
# インストール可能なgoのバージョンを確認
goenv install -l

# 最新版をインストール(執筆時は1.13.6)
goenv install 1.13.6

# インストールしたバージョンを指定
goenv global 1.13.6

# 指定したバージョンが実行できているか確認
go --version
```

## python
pythonも同様に最新版をインストールします。

```shell
# インストール可能なpythonのバージョンを確認
pyenv install -l

# 最新版をインストール(執筆時は3.8.1)
pyenv install 3.8.1

# インストールした最新版バージョンを指定
pyenv global 3.8.1

# 指定したバージョンが実行できているか確認
python --version
```

## ruby
rubyも同じ手順です。

```shell
# インストール可能なrubyのバージョンを確認
rbenv install -l

# 最新版をインストール(執筆時は2.7.0)
rbenv install 2.7.0

# インストールした最新版バージョンを指定
rbenv global 2.7.0

# 指定したバージョンが実行できているか確認
ruby --version
```

## perl
そしてperlも。

```shell
# インストール可能なrubyのバージョンを確認
plenv install -l

# stableの最新版をインストール(執筆時は5.30.1)
plenv install 5.30.1

# インストールした最新版バージョンを指定
plenv global 5.30.1

# 指定したバージョンが実行できているか確認
perl --version
```

## bash
anyenvにはbashのバージョンを管理するツールがありませんので、下記のツールを利用させて頂きました。
https://i-beam.org/2015/12/25/211817/

サイトを参考にインストールしてみましたがエラーが出ました

```shell
git clone https://github.com/ueokande/bashvm ~/.bashvm
echo 'source $HOME/.bashvm/bin/bashvm-init' >> ~/.bashrc
source ~/.bashrc

  readlink: illegal option -- f
  usage: readlink [-n] [file ...]
```

BSD系のMacは`readlink`に`-f`オプションがないみたいですね
こちらを参考に`readlink -f`するコマンドを作成
https://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac

```shell
cat << 'EOF' > /usr/local/bin/readlinkf
#!/bin/sh

TARGET_FILE=$1

cd `dirname $TARGET_FILE`
TARGET_FILE=`basename $TARGET_FILE`

# Iterate down a (possible) chain of symlinks
while [ -L "$TARGET_FILE" ]
do
    TARGET_FILE=`readlink $TARGET_FILE`
    cd `dirname $TARGET_FILE`
    TARGET_FILE=`basename $TARGET_FILE`
done

# Compute the canonicalized name by finding the physical path 
# for the directory we're in and appending the target file.
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$TARGET_FILE
echo $RESULT
EOF
chmod 755 /usr/local/bin/readlinkf
```

`readlink -f`しているところをこのコマンドに置き換えます

```diff
--- bashvm-init.bak	2020-01-18 07:08:43.000000000 +0900
+++ bashvm-init	2020-01-18 07:09:30.000000000 +0900
@@ -124,7 +124,7 @@
 export -f bashvm
 
 export BASHVM_HOME=${BASHVM_HOME:-$HOME/.bashvm}
-PATH="$(readlink -f $(dirname $BASH_SOURCE)):$PATH"
+PATH="$(readlinkf $(dirname $BASH_SOURCE)):$PATH"
 
 test -f $BASHVM_HOME/config && source $BASHVM_HOME/config
 export bashvm_default_version=${bashvm_default_version:-system}
```

改めて`source ~/.bashrc`を実行すると成功しました
ではbashの最新版をインストールします

```shell
# 執筆次の最新は5.0
bashvm install 5.0

# インストールした最新版バージョンを指定
bashvm use 5.0

# 指定したバージョンが実行できているか確認
bash --version
```
---
以上で構築作業は完了です。
次回から各言語を比較しながらプログラミングしていきます。