2021年 10月 の投稿一覧

WSL2 Ubuntu に、nodenv 環境を作る簡単な手順(作業時間10分未満)

こんにちは、ウチイダです。

PCをセットアップするときにいつも調べている、nodeの環境構築。

そろそろ打ち止めにしたいので、メモリークリップに書き留めておきます。

今回の手順は、以下の環境で動作させました。

  • Windwos 11 Pro (21H2 ビルド 22000.194)
  • WSL カーネル バージョン: 5.10.60.1-microsoft-standard-WSL2
  • Windows Terminal バージョン: 1.10.2714.0
  • Ubuntu バージョン: 20.04.3 LTS (Focal Fossa)

nodenv installerを使うのがおすすめ

併せてanyenvを使う方法とか、homebrew経由でインストールする方法などが紹介されているサイトも多いですが、とにかく最短でnodeのマルチバージョン環境を整えたいのであれば、nodenv installerを利用するのが良いです。

必要に応じて、各種言語の管理ツールを入れるので良いかなーと思っています。

nodenv の公式リポジトリでも紹介されています。

https://github.com/nodenv/nodenv-installer#nodenv-installer

1. nodenv installer を実行する

使い方はとても簡単で、スクリプトをダウンロードしてきて、実行するだけです。

nodenv installerのgithubのREADMEでは、curlを使ったサンプルコマンドが紹介されているので、それの通りに実行します。

$ curl -fsSL https://raw.githubusercontent.com/nodenv/nodenv-installer/master/bin/nodenv-installer | bash
Installing nodenv with git...
Initialized empty Git repository in /home/y-uchiida/.nodenv/.git/

# ...(中略)...

Running doctor script to verify installation...
Checking for `nodenv' in PATH: /home/y-uchiida/.nodenv/bin/nodenv
Checking for nodenv shims in PATH: OK
Checking `nodenv install' support: /home/y-uchiida/.nodenv/plugins/node-build/bin/nodenv-install (node-build 4.9.59)
Counting installed Node versions: none
  There aren't any Node versions installed under `/home/y-uchiida/.nodenv/versions'.
  You can install Node versions like so: nodenv install 2.2.4
Auditing installed plugins: OK

All done!
Note that this installer doesn't yet configure your shell startup files:
1. You'll want to ensure that `~/.nodenv/bin' is added to PATH.
2. Run `nodenv init' to see instructions how to configure nodenv for your shell.
3. Launch a new terminal window to verify that the configuration is correct.

# nodenvがインストールできているか、バージョンを確認
$ /home/y-uchiida/.nodenv/bin/nodenv -v
nodenv 1.4.0+3.631d0b6

「All done」の表示が出たら、nodenvのインストールは完了です。

2. nodenvのインストールディレクトリにパスを通す

nodenv installerは、パスの追加までは行わないので、パスの追加を行います。

Ubuntuの初期設定であれば、ログインシェルはbashになっていると思いますので、ホームディレクトリの.bashrcの末尾に、以下を追記します。

# nodenv のインストールディレクトリをPATHに追記
export PATH="$HOME/.nodenv/bin:$PATH"

# nodenvを動作させるための設定を実行
eval "$(nodenv init -)"

追記が終わったら、bashを立ち上げなおすか、sourceコマンドで変更を反映します。

$ source ~/.bashrc

# コマンド名だけでバージョン確認できたら、パスの追加は完了
$ node -v
nodenv 1.4.0+3.631d0b6

3. node のインストール

nodenvがインストールできたので、nodeをインストールします。

とりあえずLTSの最新版を入れてみます。

LTSのバージョン情報は、下記のNode.js公式サイトのトップに書いてあるので、それを見るのが早いです。

https://nodejs.org/ja/

2,021年10月現在だと、ちょうどv14系からv16系に安定板が切り替わるタイミングです。

https://nodejs.org/ja/about/releases/

10月26日からがv16のLTSのスタートなので、ちょっと早いですが(執筆時点では10月14日です)、v16を入れておくことにします。

# nodenvで、最新版をインストール(公式サイトでバージョン番号を確認してください)
$ nodenv install 16.11.1
Downloading node-v16.11.1-linux-x64.tar.gz...
-> https://nodejs.org/dist/v16.11.1/node-v16.11.1-linux-x64.tar.gz
Installing node-v16.11.1-linux-x64...
Installed node-v16.11.1-linux-x64 to /home/y-uchiida/.nodenv/versions/16.11.1

# インストールしたバージョンを、システム全体で利用するように設定
$ nodenv global 16.11.1

# 設定できたか、バージョンを確認
$ node -v
v16.11.1

nodeがインストールできていれば、npmも入っています。

ちょっとした開発や検証なら、ここまでの設定で不自由することはないと思います。

バージョンを分けて管理したい場合は、nodenv local コマンドで、動作させるバージョンを切り替えてください。

もっと本格的に使うのであれば、Dockerなどを使って環境を分離することをお勧めします。

アンインストール

ホームディレクトリ内に追加されている「.nodenv」ディレクトリに関連データが入っていますので、それを削除すればOKです。

# nodenv のアンインストール、削除
$ rm -r ~/.nodenv

.nodenvディレクトリを削除すると、今までインストールしたnodeのバージョンとか設定とか全部まとめて消えてしまいます。

必要に応じてバックアップをしてください!

まとめと余談

以上でnodejs/nodenvの環境構築は完了です。

検索結果の上位に出てくる方法は、brewをインストールしたり、anyenvの中のnodenvを使うような網羅的な方法が出てくることが多いように思います。

ちょっとnodeのバージョン管理がしたいだけなのに手間が多いな~と思っていたので、シンプルな方法をまとめました。

ここからバリバリ開発していきましょう!

ちなみに、ウチイダは過去にanyenvをWSL Ubuntuで利用していて、起動がとても遅くなった経験をしたことがあります。

最近では、本格的に開発をする場合Dockerに環境を用意することが多いのではないでしょうか。

そのため、anyenvでまとめて管理しないといけないほど、WSL上で直接いろいろな言語の開発環境が必要になることは少ないと思っています。

起動時間のことなどもかんがみて、ホスト側(厳密には、WSLはホストじゃないですが…)の環境はシンプルに保っておきたいです。

以上です。あなたのお役に立てればうれしいです。

phpbrewで、mcryptバリアントがインストールできない

こんにちは、ウチイダです。

最近またPHPを触ることが増えてきていて、Windows11のWSL2上にphpbrewで環境構築をしています。

今回はmcryptを使いたくなり、バリアントを追加しようとしたらうまくいかなかったというトラブルです。

バリアントをインストールしようとしたら、以下のようなエラーが。

$ phpbrew ext install mcrypt
Downloading https://pecl.php.net/rest/r/mcrypt/stable.txt via curl extension
[==================================================================] 5.00/5.00B 100%
Downloading https://pecl.php.net/rest/r/mcrypt/1.0.4.xml via curl extension
[==================================================================] 736.00/736.00B 100%
Downloading https://pecl.php.net/rest/r/mcrypt/stable.txt via curl extension
[==================================================================] 5.00/5.00B 100%
Downloading https://pecl.php.net/rest/r/mcrypt/1.0.4.xml via curl extension
[==================================================================] 736.00/736.00B 100%
Downloading https://pecl.php.net/get/mcrypt-1.0.4.tgz via curl extension
[==================================================================] 26.42/26.42KB 100%
===> Extracting to /home/y-uchiida/.phpbrew/build/php-7.4.23/ext...
===> Installing mcrypt extension...
Log stored at: /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt/build.log
Changing directory to /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt
===> Phpize...
Error: Command failed: phpize > /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt/build.log 2>&1 returns:

調べてみたところ、どうやらautoconfのパッケージが入ってなかったり、バージョンが古いと、phpizeでエラーするみたいです。

とりあえずautoconfをインストールします。

$ sudo apt install autoconf

再度バリアントのインストールを試みると、今度は別のエラーが出ました。

$ phpbrew ext install mcrypt
[ ] mcrypt extension is disabled.
===> Installing mcrypt extension...
Log stored at: /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt/build.log
Changing directory to /home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt
===> Running make clean: /usr/bin/make -C '/home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt' --quiet 'clean'
===> Phpize...
===> Configuring...
Error: Command failed: ./configure '--with-php-config=/home/y-uchiida/.phpbrew/php/php-7.4.23/bin/php-config' >> '/home/y-uchiida/.phpbrew/build/php-7.4.23/ext/mcrypt/build.log' 2>&1 returns:

調べてみたけど、よくわかりませんでした…

ふと、バリアントは、パッケージの本体がないとインストールできないという仕様に思い至りました。

WSLのほうでmcryptのパッケージを入れてなかったような気がしたので、インストール。

$ sudo apt-get install libmcrypt-dev
# ...(中略)...
The following NEW packages will be installed:
  libmcrypt-dev

やっぱり入ってませんでした。

再度、mcrypt バリアントをインストールします。

$ phpbrew ext install mcrypt
[ ] mcrypt extension is already disabled.
===> Installing mcrypt extension...
# ...(中略)...
[*] mcrypt extension is enabled.
Done.

今度はうまくいったみたいです。

最後に、phpbrewで管理しているPHPに、バリアントを追加します。

$ phpbrew install 7.4.20 +mcrypt
===> phpbrew will now build 7.4.20
===> Loading and resolving variants...
# ...(中略)...
Congratulations! Now you have PHP with 7.4.20 as php-7.4.20

* To configure your installed PHP further, you can edit the config file at
    /home/y-uchiida/.phpbrew/php/php-7.4.20/etc/php.ini

To use the newly built PHP, try the line(s) below:

    $ phpbrew use php-7.4.20

Or you can use switch command to switch your default php to php-7.4.20:

    $ phpbrew switch php-7.4.20

Enjoy!

ビルドしなおしなので、結構時間かかります。

phpinfo を見てみると、mcryptの項目が増えていることが確認できました。

まとめ

今回必要だったのは、以下のコマンドを実行することでした。

  • autoconf パッケージのインストール( sudo apt install autoconf )
  • mcyrpt パッケージのインストール( sudo apt-get install libmcrypt-dev )
  • mcrypt バリアントを含めて、phpbrewで再ビルド(sudo phpbrew install 7.4.20 +mcrypt)

以上です。

あなたのお役に立てたらうれしいです。