2013/07/08

async.jsを使ったNodeの非同期処理

Nodeでの非同期処理に欠かせないasync.jsの使い方メモ。
NodeはJavascriptで動くので、処理の流れがコールバックの連続になってしまう場合があります。
そんな状況を解決する為のnpm(Node Package Manager)なのです。
async.jsでは次のようなメソッドが用意されています。

# 処理を順番に実行するメソッド
 * series
 * waterfall

# 並列的に処理を実行するメソッド
 * parallel


async.jsのインストール
まずはasync.jsをインストールしましょう。
npmのインストールには、グローバルで行ってどのプロジェクトからも使えるようにする方法と、ローカルにインストールしてプロジェクトごとに必要なものだけを使う方法があります。今回はグローバル領域を汚したくないのでローカルで行っていきます。

次のコマンドをターミナルに入力して実行します。
(グローバルでインストールしたい場合は、このコマンドに-gオプションをつけて実行してください。)


これでNodeでasync.jsを使えるようになりました。
各メソッドの使い方は次のようになります。

series

seriesメソッドは第一引数に関数を格納した配列、第二引数には第一引数の配列に格納した関数が全て実行された後に入る最終的なコールバック関数を入れます。
このメソッドを実行すると第一引数に格納した関数が順番に実行され、最後に第二引数に指定した関数が実行されます。console.logの結果は次のようになります。

function1
function2
final callback & result = arg1,arg2

第一引数の配列に格納された関数の引数のcallbackは次に実行する関数を指しています。
(function1のcallbackはfunction2を指しているってことです)


waterfall

waterfallメソッドではseriesと同じように第一引数に実行したい順番で関数を格納した配列、第二引数には第一引数の処理が全て終わった後に実行される最終的なコールバック関数を入れます。console.logの結果は次のようになります。

function1
function2
final callback & result = 2


seriesとwaterfallの違いは引数の処理の方法です。
seriesは配列に格納された関数ひとつひとつが最終的なコールバック関数に引数を渡すのに対して、waterfallでは配列に格納された関数がリレー形式で次に実行される関数に引数を渡し、最終的なコールバック関数には配列の最後の関数で指定した引数が渡されます。


parallel

parallelメソッドは名前の通りに並列的に処理を実行するメソッドです。第一引数に実行したい関数を格納した配列、第二引数に第一引数の処理が全て終わった後に実行される最終的なコールバック関数を入れます。parallelメソッドを実行すると第一引数に格納した関数が同時に実行され、全ての関数の処理が終了すると第二引数の最終コールバック関数が実行されます。
console.logの結果は次のようになります。

function1
function2
function3
function3_END
function1_END
function2_END
final callback & result = arg1,arg2,arg3



実装例
実際には次のようにNodeの処理の中に組み込みます。




2013/07/07

Node.jsのHelloWorld

helloworld.js


こんな感じでhelloworld.jsを作成したら、ターミナルを起動してこのファイルの置いてあるディレクトリまで移動する。
そこで次のコマンドを入力する。

これでnode.jsがlocalhostの8080番ポートに起動します。
ブラウザでhttp://localhpst:8080にアクセスすると「Hello World」の文字が表示されているはずです!


2013/07/06

Node.jsの導入



Node.jsはじめました。
その導入手順をメモしておきます。

導入方法には、

1. パッケージでインストールする
2. ターミナルでコマンドを叩く

の2つあります。1の方法だとNode.jsの公式ページに行って、インストールからパッケージを落としてくるだけなので...
ちょっと面倒ですが後々nodeの操作にターミナルのコマンドを使うようになるので、慣れる為にも2の方法で説明していきます。
注:環境はMac OS Lionで作業しています。


1. homebreのインストール
まずはターミナルにhomebrewをインストールします。
homebrewはMacのパッケージ管理システムで、ターミナルでのアプリケーションのインストールを簡単に行えるようにするものです。homebrewの機能については割愛させて貰います。
またhomebrewはXcodeを必要とするので、あらかじめインストールしておいて下さい。Xcodeが最新のバージョンでないとエラーが出る場合もあるので、アップデートしておくことも忘れずに...

でhomebrewのインストールですが、ターミナルで次のコマンドを実行します。

実行するとターミナルがインストールを開始するので、完了したら次のコマンドでbrewのヘルプを見てみましょう。

ヘルプが表示されたら、brewは正しくインストールされているということです!



2. Node.jsのインストール
ターミナルで次のコマンドを実行する。
インストール完了したら次のコマンドでnodeのバージョンを見てみましょう。

v0.10.12のようにバージョンが表示されたら、インストールは成功です。
これでNodeのインストールは完了です!





2013/07/03

Go2Shell

http://zipzapmac.com/Go2Shell

Finderで開いているディレクトリのパスからターミナルを開くことができるアプリケーション。
深い階層で作業しているときとかに超絶便利です。

起動するターミナルのアプリケーションも選択することもできます。ターミナルで
と入力すると新しいウィンドウが出てくので


「terminal application to use」という項目から使いたいアプリケーションを選択します。
あとはFinderのメニューバーにGo2Shellのアイコンをドラッグ&ドロップで追加すれば導入は完了です。
ファイルをFinderで表示してGo2Shellのアイコンをクリックすると、ターミナルが起動して自動でそのファイルまでcdしてくれます。

2013/06/23

ターミナルとgitのコマンドについてのメモ

【ターミナルとは】
MacでBashというシェルを使う為のCUIアプリケーション
下記のサイトがシリーズで詳しく説明してくれています。

Webデザイナーの為の「本当は怖くない」”黒い画面”入門シリーズ一覧

コマンドは大抵なにかの略称なので、セットにすると覚えやすい。
あとコマンドの後に半角スペースを入れて -hoge などとオプションを指定することもできます。


【よく使うコマンド】

コマンド略のもと説明
cdChange Directory引数で渡したパスのディレクトリに移動する。引数なしで実行するとルートディレクトリに移動する。
lsList今いるディレクトリの中にあるファイルやディレクトリの一覧を表示する。
<オプション>
-a :ドットで始まる隠しファイルも表示
-l :ファイルの詳細(パーミッション等)も表示
pwdPrint Working Directory今いるディレクトリのパスを表示する。
cpCopyファイルやディレクトリをコピーする。
第一引数:コピーする対象の名前
第二引数:コピーして生成されるファイルの名前
rmRemoveファイルやディレクトリを削除する。
引数で削除するファイルを指定。
<オプション>
-f :警告・エラーなしで削除
-i :削除するかをユーザに問い合わせてから削除
-r :ディレクトリ指定して、それごと削除
-v :削除後、処理した内容を表示
mvMoveファイルやディレクトリを移動 or 名前を変える
第一引数:もとのファイル
第二引数:移動先 or 新しい名前
mkdirMake Directory引数に指定した名前のディレクトリを作る。
<オプション>
-p :深い階層のファイルを作る
例)$ mkdir -p hoge/fuga/homhom
rmdirRemove Directory引数に指定した名前のディレクトリを削除。
touchそのまま引数のファイルが保持している最終アクセス日時と最終更新日時を変更できる。指定したファイルが存在しないと、サイズが0の空ファイルを作成する。
たいてい空ファイル作成する為に使われるコマンド
man manual 引数のコマンドのマニュアルを表示する。
コマンドに-hもしくわ--helpのオプションを付けて実行するとヘルプを表示してくれるんですが、それよりも詳細な説明を見たいときに。
curl Client for URLs 引数にURLを渡して、そのソースを表示
<オプション>
-o :URLの内容をそのファイル名で保存する
-f :HTTPエラーメッセージを表示せず、エラーコードを返す。
chown Change Owner ファイルやディレクトリの所有者を変更する
<オプション>
-R :ディレクトリを変更する際に、中のファイルやサブディレクトリも変更する
sudo Super User Do 引数に渡したコマンドを管理者権限で実行する




【git関連のコマンド】

コマンド 説明
git add インデックスに引数のファイルを追加する
git commit コミットする
<オプション>
-m :コミットのメッセージをつける。
例)git commit -m "コミットメッセージはダブルコーテーションでくくる"
git branch 引数の名前のブランチを作成する。引数無しの場合、ブランチを一覧表示する。
現在の作業中のブランチには先頭に*マークがつく。
例)
issue1
* master
git checkout 引数の名前のブランチに移動
git merge 引数のブランチを現在のブランチにマージする




コマンド表は適宜追加とか整理していけたらいいなと思っています。
gitとターミナルの使い方がわかったら練習サイトとかもあるのでやってるといいんじゃないかな。
Learn Git Branching