モーリーのメモ

アプリ開発等(プログラミング、CG作成)、興味を持ったことを実践してまとめるブログです。

モーリーのメモ

Node.jsをMacにインストール!(Homebrew→Nodebrew→Node.js順にインストール)

 <前置き>
 画像から文字を読み込むOCRについて調べていたら、Tessract.js(テッサラクト・ジェイエス)というライブラリを発見しました。
 なんと純粋なJavaScriptで書かれているとのこと。しかも60以上の言語を認識出来るらしいです。
 さっそく手順に従ってHTMLに組み込んでみましたが、ブラウザがローカルデータへのアクセスを制限されているため失敗しました。
 ブラウザにアクセス許可を与えるのは怖いなと思ったのですが、他に『Tesseract.jsをnpmでインストールして、requireして使う方法』が書いてありました。出てきた用語だいたいわかりません。
 npm?、require?、どういうこと?と思って調べると、まずはNode.jsを導入する必要があることがわかりました。
 Node.jsは、従来のHTMLに組み込むJavaScriptとは別物でしたが、調べるとBrowserifyという従来のJavaScriptと結びつける方法もあるようなので、中々おもしろそうです。
 ということで、名前は知っていたものの横目で見るだけだったNode.jsをこれを機に導入することにしました。
 <ここから本題>
 調べたところNode.jsを直接インストールするより、Homebrew→Nodebrew→Node.jsの順にインストールするのが後々を良いようです。
 その理由となるそれぞれの役割について、簡単にですがまとめました。
 また、YosemiteやEl Capitanで、Homebrew経由でインストールするとNodebrewがうまく動かないという記事がありましたが、私の環境(El Capitan)では問題は起きていません。
 実際にインストールした手順をまとめました。
 インストール後に、Node.jsで実際に、HelloWorldプログラムとTessract.jsを使った文字認識を実行しました。

使用環境

 私が今回使用した環境です。

  • Mac OS X El Capitan Version 10.11.6
  • ブラウザ:Google Chrome Version 54.0.2840.98 (64-bit)
  • Homebrew Version 1.1.0
  • Nodebrew Version 0.9.6
  • Node.js Version 7.1.0
  • Tesseract.js Version 1.0.10

Node.js(ノード・ジェイエス)とは?

 公式サイト:https://nodejs.org/ja/
 最初はJavaScriptで使えるライブラリの1つかと思いましたが、そうではなく実行環境そのものでした。
 Webアプリはブラウザとサーバーでやりとりします。Node.jsは、このサーバー側の処理をJavaScriptで書くことが出来る実行環境です。
 普通のJavaScriptはブラウザ側で動くので、対照的に『Node.jsはサーバーサイドJavaScriptです。』と表現されます。
 
 結局どこでどうするもの?と言えば、テキストエディタで書いて、コマンドライン(『ターミナル』)で実行するJavaScriptの実行環境です。
 色んな人が作った便利なライブラリ(世界最大のオープンソースライブラリ)を利用できます。

npm( エヌピーエム、Node Packaged Moduleの略)とは?

 公式サイト:https://www.npmjs.com/
 npmは、Node.jsのパッケージマネージャです。
 Node.js用に作られたライブラリやパッケージの、

  • インストール
  • 削除
  • 依存関係の整理

 などをするツールです。
 npmは、Node.jsをインストールすれば使用できます。

Homebrew(ホームブリュー)とは?

 公式サイト:http://brew.sh/index_ja.html
 Homebrewは、macOS用のパッケージ管理マネージャです。
 つまり、コマンドラインツール(ターミナル.appで使うソフトウェア)の、

  • インストール
  • アップデート
  • 削除
  • 使用するバージョンの切り替え

 などを楽にするものです。
 インストールの際に、依存関係にあるソフト(実行するのに必要なソフト)があれば、自動的にインストールしてくれます。
 コマンドラインツールの導入を一元管理します。

Nodebrew(ノードブリュー)とは?

 公式サイト:https://github.com/hokaccha/nodebrew
 Nodebrewは、Node.jsのバージョン管理ツールです。
 Node.jsの、

  • インストール
  • アップデート
  • 削除
  • 使用するバージョンの切り替え

 などを楽にするものです。ん?、Homebrewと同じ?
 それならNode.jsもHomebrewで良いのではと思いましたが、違いました。
 違いはコレです。↓

HomebrewとNodebrewの違い

 Nodebrewは、Node.jsの過去のバージョンも簡単にインストール出来ますが、Homebrewは基本的には無理です。
 HomebrewとNodebrewは、それぞれのリポジトリ(貯蔵庫)にあるソフトをインストール出来ます。
 Nodebrewは、Node.jsの多く(全部?)のバージョンをリポジトリで管理していますが、Homebrewは1つだけです。
 下図左はHomebrew、右はNodebrewでインストール出来るNode.jsを検索した結果です。
f:id:mmorley:20161118214206p:plain:w500
 Node.jsは更新頻度が高く、バージョン間の互換性の問題もあるので、Nodebrewのような専用のバージョン管理ツールが必要となるようです。

nvm?、npm?ややこしい

 ちなみにnvm(Node Version Manager)というツールは、Nodebrewと同目的のものです(npmと名前がややこしい)。Nodebrewの方が主流っぽいです。

Homebrewをインストール

 ここから、Homebrew→Nodebrew→Node.jsの順にインストール作業を行います。
 まずはHomebrewのインストールからです。

Homebrewのインストール要件

 公式サイトのGitHubに書かれている要件は下記の通りです。

 インストール要件を満たしているか確認して、必要であればインストールします。

ターミナルを起動

  1. Finderで、『アプリケーション』-『ユーティリティ』フォルダ内にある『ターミナル』を起動
    f:id:mmorley:20160510140811p:plain

CPUを確認

  1. 『ターミナル』で、次のコマンドを実行

    sysctl machdep.cpu.brand_string

    CPUの情報が表示されるので、その中にIntelの文字があればOK。

OS Xのバージョンを確認

  1. 『ターミナル』で、次のコマンドを実行

    sw_vers -productVersion

    表示されたバージョンが、10.10以降ならOK。

XCodeのCommand Line Toolsの有無を確認

  1. 『ターミナル』で、次のコマンドを実行

    xcodebuild -version

    バージョンが表示されればOK(インストール済み)。
    無い場合は、下記の手順で、XCodeごとまたは、Command Line Toolsを単独でインストールします。
    Xcode バージョン 6.1 以降、Command Line Toolsは同時にインストールされるそうです。

XCodeをインストールする場合

下記のリンクからインストールします。

Command Line Toolsだけインストールする場合
  1. 下記のリンクを開き、Apple IDでログイン
    f:id:mmorley:20161115173036p:plain:w250
  2. リストから、Command Line Toolsを選んでダウンロード
    f:id:mmorley:20161115181635p:plain:w500
    OSのバージョンに合わせて選択して下さい。
    Betaは避けたほうが良いかも。
  3. dmgファイル(ディスクイメージファイル)を開く(マウント)
  4. pkgファイルを実行して、ダイアログに従ってインストール

Homebrewをインストール

  1. 『ターミナル』で、公式サイトにあるインストール用のコマンドを実行

    /usr/bin/ruby -e /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

    *上記は最新と異なる可能性もあるので、公式サイトで最新のコマンドを取得してから実行して下さい。

  2. 『Press RETURN to continue or any other key to abort』と表示されるので『Return』キーを押して続行
  3. Macの管理者パスワードが求められるので、『Password:』の後に入力
    次のように表示されれば、インストール成功

    ==> Installation successful!
    ==> Next steps
    Run `brew help` to get started

    brew help』と入力して実行すると、コマンドの一覧が表示されます。

  4. 『ターミナル』で、次のコマンドを実行

    brew doctor

     すると、実行環境の問題点とその解決方法が表示されます。

brew doctor』の例

 私の場合は、下記のように表示されました。

Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: Homebrew's sbin was not found in your PATH but you have installed
formulae that put executables in /usr/local/sbin.
Consider setting the PATH for example like so
  echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile

Warning: Your Xcode (7.3) is outdated.
Please update to Xcode 8.1 (or delete it).
Xcode can be updated from the App Store.

 最初の文章に『これらの警告は、Homebrewのメンテナがデバッグに使用するだけなので、Homebrewの動作に問題がなければ無視して下さい。』とあります。
 なので無視して良さそうですが、最初の警告はパスを通すだけなので、指示通り『 echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile』を実行しました。
 『ターミナル』で、『source ~/.bash_profile』を実行してパスを反映します。
 再度『brew doctor』を実行すると最初の警告は消えてました。
 2個目はXCodeが古い云々は、無視することにしました。

Nodebrewをインストール

 Homebrewを使ってNodebrewをインストールします。
 『ターミナル』で、下記のコマンドを順次実行します。

  1. Nodebrewをインストール

    brew install nodebrew

  2. Nodebrewをセットアップ

    nodebrew setup

  3. .bash_profileにパスの設定を書き込む

    echo 'export PATH=$HOME/.nodebrew/current/bin:$PATH' >> ~/.bash_profile

  4. .bash_profileを再読込し、追加したパスを有効にする

    source ~/.bash_profile

  5. 動作確認

    nodebrew -help

    下記のようにヘルプが表示されれば、インストール完了です。

    nodebrew 0.9.6
    
    Usage:
        nodebrew help                         Show this message
        nodebrew install <version>            Download and install <version> (compile from source)
    以下略

Node.jsをインストール

 『ターミナル』で、下記のコマンドを順次実行します。

  1. Node.jsのインストール可能なバージョンを調べる

    nodebrew ls-all

  2. Node.jsの安定版をインストール

    nodebrew install-binary stable

    尚、バージョンを指定する場合は、
     『nodebrew install-binary v7.1.0』(v7.1.0を指定)
    最新版を指定する場合は、
     『nodebrew install-binary latest』
    とコマンドを実行します。

  3. インストールしたものから、使用するバージョンを選択
     *1つしかインストールしていなくても選択する必要があります。

    nodebrew use stable

  4. 動作確認

    node -v

     バージョンが表示されれば、Node.jsのインストールは完了です。

失敗事例

Nodebrewのインストールで『nodebrew setup』を忘れた場合

    下記のように表示されてNode.jsのインストールに失敗します。

    $ nodebrew install-binary stable
    Fetching: https://nodejs.org/dist/v7.1.0/node-v7.1.0-darwin-x64.tar.gz
    Warning: Failed to create the file 
    Warning: /Users/am/.nodebrew/src/v7.1.0/node-v7.1.0-darwin-x64.tar.gz: No such 
    Warning: file or directory
    
    curl: (23) Failed writing body (0 != 941)
    download failed: https://nodejs.org/dist/v7.1.0/node-v7.1.0-darwin-x64.tar.gz

Node.jsのインストールで『nodebrew use stable』を忘れた場合

    『node -v』で、動作確認した際に、下記のように表示されて失敗します。

    command not found

Hello World!を実行

 インストールしたNode.jsで『Hello World!』を実行します。

対話モードで実行

 対話モードにすると『ターミナル』でJavaScriptのコードが直接実行出来ます。
 『ターミナル』で、下記のコマンドを順次実行します。

  1. 対話モード開始

    node

    少し待つと『>』が表示されます

  2. Hello World!を出力

    console.log("Hello World!");

    下記のように表示されます。

    Hello World!
    undefined

  3. 対話モードから抜ける

    .exit

    『control + c』を2回連続で押して抜ける方法もあります。

jsファイルを実行

  1. 『Finder』で、作業フォルダを作成
    例:デスクトップにworkspaceという作業フォルダを作成
  2. テキストエディタで、下記の内容のhello.jsファイルを作成し、作業フォルダ内に保存

    console.log("Hello World!");

  3. 作業フォルダをカレントフォルダにする

    1. 『ターミナル』に"cd "(cdの後に半角スペース)まで入力
    2. 『Finder』から『ターミナル』にhelloフォルダをドラッグ&ドロップ
    3. 『ターミナル』に下記のように入力されるので、Enterキーを押す
    cd /Users/ユーザ名/Desktop/workspace

  4. 『ターミナル』で、hello.jsを実行

    node hello.js

    『ターミナル』に、下記のように表示されます。

    Hello World!

Tesseract.jsを試す

 Node.jsの導入のきっかけとなった(※冒頭の前置き参照)Tesseract.jsを試します。
 Tesseract.jsは、OCR機能を実装するためのライブラリです。

  1. 作業フォルダ(例:/Users/ユーザ名/Desktop/workspace)に、下記の画像をtest.pngという名前で保存
    コレ↓画像です。
    f:id:mmorley:20161122162115p:plain
    画像はGIMPで、フォント名:Sans、フォントサイズ:24px、行間:12で作成しました。
  2. テキストエディタで、下記の内容のocr_test.jsファイルを作成し、作業フォルダ内に保存

    var Tesseract = require('tesseract.js')
    
    Tesseract.recognize("./test.png", { lang:"eng" })
             .then(function(result){ console.log(result.text) })

  3. 作業フォルダをカレントフォルダにする

    1. 『ターミナル』で、下記のコマンドを実行
    cd /Users/ユーザ名/Desktop/workspace

  4. 『ターミナル』で、カレントフォルダにTesseract.jsライブラリをインストール

    npm install tesseract.js

    作業フォルダにTesseract.jsライブラリがインストールされます。

  5. 『ターミナル』で、ocr_test.jsを実行

    node ocr_test.js

    下記のように結果が表示されました。

    Tesseract.js is a pure Javascript port
    of the popular Tesseract OCR engine.

    画像内の文字サイズによっても、読み取り精度が変わります。
    フォントサイズを18pxにすると、Tesseract.jsの部分のピリオドが抜けました。
    他の文字は18pxでも正常に読み込めました。

  6. 『ターミナル』で『control + c』を押して実行状態を終了

npmの捕捉

パッケージ(ライブラリ)のインストール先

  • 『npm install パッケージ名』で、カレントフォルダにインストール
  • 『npm install パッケージ名 -g』で、グローバルにインストール

 グローバルの場所は、
 『/Users/ユーザ名/.nodebrew/node/v7.1.0/lib/node_modules』

インストールしたパッケージ(ライブラリ)のバージョンを確認

  1. 作業フォルダ(ライブラリをインストールしたフォルダ)をカレントフォルダにする

    1. 『ターミナル』で、下記のコマンドを実行
    cd /Users/ユーザ名/Desktop/workspace

  2. 『ターミナル』で、下記のコマンドを実行

    npm list --depth=0

    下記のように表示されます。

    /Users/ユーザ名/Desktop/workspace
    └── tesseract.js@1.0.10

グローバルのパッケージのバージョンの確認は、-gオプションを付けます。

    npm list --depth=0 -g

あとがき

 分からないことだらけなので、色々調べながら作業しました。
 ライブラリやツールがたくさんありますが、流行り廃りもあり、同系統の機能のものがある場合はどっちを選べばいいのかなと困る場合もありそうです。情報収集をして実際に試しながら現在のNode.jsの作法に慣れたいと思います。先人は多いようなので、探せば情報はあるはず、、と期待します。