Node.js, Ruby, Pythonの最新Ver.を簡単にインストールする方法まとめ

# Ubuntuで主要言語達をインストールしよう！

最近環境構築ばっかりやっていますが、あれどうやるんだっけと毎回記憶喪失になり、その都度ググりながら構築する日々を過ごしてます。

毎回やり方を調べてインストールするのは大変だったので、まとめて記事にしてみました。

今回はバージョン管理を考慮したインストール方法を解説します。shellスクリプトでまとめて自動インストールする方法もあるので、とりあえず楽にインストールしたい方は「**[自動ですべて終わらせたい方へ](#%E8%87%AA%E5%8B%95%E3%81%A7%E3%81%99%E3%81%B9%E3%81%A6%E7%B5%82%E3%82%8F%E3%82%89%E3%81%9B%E3%81%9F%E3%81%84%E6%96%B9%E3%81%B8201853-%E6%9B%B4%E6%96%B0)**」の章を見てください。
ひとつひとつ確認しながらインストールしたい人は次の章「**[解説を読みながらインストールしたい方へ](#%E8%A7%A3%E8%AA%AC%E3%82%92%E8%AA%AD%E3%81%BF%E3%81%AA%E3%81%8C%E3%82%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E3%81%84%E6%96%B9%E3%81%B8)**」から進めてください。

## インストールする言語

今回は導入に癖のある以下の言語のインストールをします。

- Node.js
- Ruby
- Python

## 環境

以下の環境で動作を確認しています。（2018/5/3 現在）

- Ubuntu17.10

CentOSにも対応を検討中です。

# 自動ですべて終わらせたい方へ（2018/5/3 更新）

shellスクリプトでライブラリのインストールから言語のインストールまで自動実行できるものを作りました。いずれはCentOSにも対応するつもりです。
ひとつひとつ確認しながらインストールしたい人は次の章「**[解説を読みながらインストールしたい方へ](#%E8%A7%A3%E8%AA%AC%E3%82%92%E8%AA%AD%E3%81%BF%E3%81%AA%E3%81%8C%E3%82%89%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E3%81%84%E6%96%B9%E3%81%B8)**」から進めてください。

インストールされるものは、

- Git（インストールされていない方のみ）
- Node.js（LTS版）
- Ruby（最新版）
- Python（最新版）
- 各依存パッケージ

です。もし違うバージョンをインストールしたい場合は下記の解説を読んで直接shellファイルを編集するか、インストール後に違うバージョンを入れてください。

## インストール方法

以下のコマンドを実行してください。Gitをインストールしていない人はGitのインストール（最新版、ただしRC版は除く）も同時に行えます。
注）途中ライブラリ更新のため`sudo`を使っています。管理者のパスワードを入力して進めてください。

```sh:terminal
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/terappy/install-some-langs/master/install.sh)"
```

以下のGitHubへのリンク先のinstall.shに実行するコマンドが載っているので参考にしてください。
[install-some-langs](https://github.com/terappy/install-some-langs)

これでインストールが完了です。次の章からは解説になりますのでインストールだけの目的の方はここで終わりです。
お疲れ様でした～


---

# 解説を読みながらインストールしたい方へ

「**[自動ですべて終わらせたい方へ](#%E8%87%AA%E5%8B%95%E3%81%A7%E3%81%99%E3%81%B9%E3%81%A6%E7%B5%82%E3%82%8F%E3%82%89%E3%81%9B%E3%81%9F%E3%81%84%E6%96%B9%E3%81%B8201853-%E6%9B%B4%E6%96%B0)**」の章を飛ばした方はここからスタートです！

## 前準備

インストール作業に移る前に前準備をしないといけません。ここを飛ばすと進めないので必ず行いましょう。

## 依存パッケージをまとめてインストール（めんどくさい人向け）

この後のものをいろいろをインストールするために依存パッケージをまとめてインストールします。各々必要なパッケージは各項目に記述しておきますので、個別にインストールする際はそちらを参考にしてください。

```sh:terminal
$ sudo apt update
$ sudo apt install -y build-essential bison libyaml-dev libreadline6-dev \
  zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev libreadline-dev \
  libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev openssl \
  libbz2-dev libsqlite3-dev python3-tk tk-dev python-tk libfreetype6-dev \
  llvm libncursesw5-dev xz-utils autoconf asciidoc xmlto docbook2x make gcc
```
## Gitのインストール (2018/4/30 更新)

Gitをインストールするために必要なパッケージをインストールします。要らないものも混じっているかもしれないですが、とりあえず入れときましょう！（テキトー）

```sh:terminal
$ sudo apt update
$ sudo apt install libcurl4-gnutls-dev libexpat1-dev gettext \
  libz-dev libssl-dev asciidoc xmlto docbook2x make gcc
```


Gitをインストールします。

```sh:terminal
$ sudo apt update
$ sudo apt install git
```

ただaptでインストールした場合少し古いものがインストールされてしまうことがあります。(というか大体古い)

気になる方は以下のコマンドを実行して最新版を入れましょう。~~Gitのバージョンは適宜最新版に読み替えてください。~~ （2018/4/30 更新: 自動で最新版を取得する方法に変更しました。）

```sh:terminal
# aptでgitがインストール済みであれば以下を実行してgitを削除しておく
$ sudo apt -y remove git
# 最新バージョンの番号を取得
$ GIT_VERSION=$(curl -sL https://github.com/git/git/releases | sed -nre 's:\s*<span class="tag-name">.*v([0-9]+\.[0-9]+\.[0-9]+)</span>:\1:p' | sort -dr | head -n 1)
$ wget https://github.com/git/git/archive/v${GIT_VERSION}.tar.gz
$ tar -zxf v${GIT_VERSION}.tar.gz
$ cd git-${GIT_VERSION}
$ make configure
$ ./configure --prefix=/usr
$ make all doc info
$ sudo make install install-doc install-html install-info
```

# Node.jsをインストール

## 導入手順

まずはaptでnodejs,npm,build-essentialをインストールします。

```sh:terminal
$ sudo apt install -y nodejs npm build-essential
```

次にn packageをインストールします。

```sh:terminal
$ sudo npm cache clean
$ sudo npm i -g n
```

最後にn packageを用いてnodeをインストールします。最初に入れた古いnodejs,npmは削除しておきます。

```sh:terminal
$ sudo n stable
$ sudo ln -sh /usr/local/bin/node /usr/bin/node

# 古いnode,npmを削除
$ sudo apt --purge remove -y nodejs npm
```

最新版をインストールできたか確認してみます。

```sh:terminal
$ node -v
v9.11.1
```

ちなみにn packageはバージョン管理できるので別バージョンを入れたいときは、以下のようにすると切り替えられます。
例えば安定板(LTS)のインストールは

```sh:terminal
$ sudo n lts
$ node -v
v8.11.1
```

でできます。
元に戻すときもバージョンを指定してやるだけで簡単に切り替えられます。

```sh:terminal
$ sudo n 9.11.1
$ node -v
v9.11.1
```

# Rubyをインストール

## 導入手順

依存パッケージをインストールします。

```sh:terminal
$ sudo apt install gcc make autoconf bison build-essential libssl-dev \
  libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev
```

<!--
CentOS7
```sh:terminal
yum install -y gcc-6 bzip2 openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel
```
-->

バージョン管理のためrbenv,ruby-buildを導入します。.bash_profileに設定の追記も同時に行います。

```sh:terminal
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

# .bashrcに設定を書き込み
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc

# 設定の反映
$ source ~/.bashrc
```

以下のコマンドを実行しインストールできるrubyのバージョンをチェックします。

```sh:terminal
$ rbenv install --list
```

インストールするバージョンを決めたら以下を実行しましょう。`rbenv global [バージョン]`でデフォルトのrubyのバージョンを設定できます。

```sh:terminal
# rubyをインストール
$ rbenv install 2.x.x

# デフォルトに設定
$ rbenv global 2.x.x
```

※何かエラーが出た時はパッケージが不足している可能性があるので、エラーメッセージをよく読み、適宜必要なパッケージをインストールしてください。


# Pythonをインストール

## 導入手順

依存パッケージのインストール

```sh:terminal
$ sudo apt install gcc make openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev llvm libncursesw5-dev xz-utils
# 描画系のライブラリ
$ sudo apt install python3-tk tk-dev python-tk libfreetype6-dev 
```

pyenvのインストール

```sh:terminal
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv

# .bashrcに設定の書き込み
$ echo 'export PYENV_ROOT=$HOME/.pyenv' >> ~/.bashrc
$ echo 'export PATH=$PYENV_ROOT/bin:$PATH' >> ~/.bashrc
$ echo 'eval "$(pyenv init -)"' >> ~/.bashrc

# 設定の反映
$ source ~/.bashrc
```

pythonのインストール

```sh:terminal
# インストールできるバージョンを確認
$ pyenv install --list

# python 3.x.x をインストール
$ pyenv install 3.x.x

# 使用するバージョンを指定
$ pyenv global 3.x.x

# バージョン確認
$ python --version
```

お好みでvirtualenvのインストール。

ちなみにvirtualenvとは、特定のバージョンの環境をコピーし、クリアな環境を作成することができるものです。

```sh:terminal
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
# 設定書き込み
$ echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
# 設定再読み込み
$ source ~/.bashrc
```

以下のようにして使用します。

```:使用例
pyenv virtualenv [元となるバージョン] <新たに作る環境名>
```

```sh:terminal
# 環境を構築したいディレクトリを作成し移動
$ mkdir hoge-dir
$ cd hoge-dir
# 実行
$ pyenv virtualenv 3.x.x test
$ pyenv local test
```

# 終わりに

環境構築って初めこそ手間がかかりますが、一度やってしまえば快適なプログラミングライフを送ることができるので、頑張って構築しましょうね！
誰かの役に立てれば幸いです。


# 参考サイト

- [1.5 使い始める - Gitのインストール](https://git-scm.com/book/ja/v2/%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81%E3%82%8B-Git%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB#%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%8B%E3%82%89%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)
- [最新版の Git をインストールする](https://qiita.com/noraworld/items/8546c44d1ec6d739493f)
- [Ubuntuに最新のNode.jsを難なくインストールする](https://qiita.com/seibe/items/36cef7df85fe2cefa3ea)
- [rbenv で ruby の環境を整える](https://qiita.com/ringo/items/4351c6aee70ed6f346c8)
- [UbuntuでPythonの開発環境を整える](https://qiita.com/uryyyyyyy/items/268f8dc0d6ec3d7da7e3)
- [Python3の環境構築(Linux、Mac)](http://www.python.ambitious-engineer.com/archives/7)
- [pyenv - Wiki "Common build problems"](https://github.com/pyenv/pyenv/wiki/Common-build-problems)