NodeSchoolに入学しよう!

非同期的なファイル読み込み

全334コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
非同期I/Oの概念について学んだ上で、fsモジュールを使用して実際にファイルを非同期的に読み込みます。
講師:
08:33

字幕

このレッスンではファイルのデータを 非同期的に読み込む方法について学びます それではまず ワークショッパーを起動しましょう "learnyounode" そして今回はこの4番目の "MY FIRST ASYNC I/O!" という問題を解きます "Enter" を押しましょう 問題 さて今回ファイルのデータを読み込むのですが 同期的に読み込むのではなく 非同期的に つまり そのファイルの読み出しの関数を 実行した時点で直ぐに実行結果が返って来る ファイルの読み込みの最中であったとしても 直ぐに読み出しが完了するという事です これを非同期的な実行といいます それでは実際に非同期的なファイルの 読み込みをちょっとやってみましょう まずは読み込むファイルを作成します "test.txt" というファイルを テキストエディタで作成します "line 1" まあ7行程度の 行が含まれるファイルを作成します そして保存 さてこれを "node" から 読み込みましょう まずは "node" の インタープリターを立ち上げます そしてファイルを読み込む為には "fs" モジュールを使用します モジュールの読み込みは "require()" 関数を使用します そして "fs" 読み込みたいモジュール名を パラメーターとして与えます さて同期的に読み込むのであれば "readFileSync()" 読み込みたいファイルのパスを与えます これで読み込みます 非同期的に読み込む場合には この "Sync" というのを外して この様にします これが非同期的な読み込みです そして非同期的な読み込みの場合には 必ずコールバック関数 つまり読み込みが完了した時に 呼び出される関数を渡してやる必要があります "Node.js" 環境一般に通じる規則なのですが コールバック関数の1番目のパラメーターは 必ずエラーを示すパラメーターです そして2番目にデータが帰って来ます この場合は "Buffer" 型のデータが帰って来ます そして例えばそれを出力してみましょう "console.log" で "data" を "toString()" で "Buffer" 型を "String" 型に変換した上で出力 そして閉じます これで実行するとこの様に ファイルの中身が非同期的に 呼び出された上で実行されました ちなみにこのインタープリター上で 非同期的な関数を実行した場合には 関数の呼び出し自体は直ぐに完了するのですが その場で次のプロンプトに戻って来るのではなく 先程の様に直ぐには戻って来ないで 改行を何度か押した時点で 次のこの三角印 プロンプトですね これに戻って来ました しかしながらこの実行は 非同期的に実行されてますので 何度も繰り返しますが 関数の呼び出しは直ぐに戻って来ています それから今回もう1点新しい "readFile()" 関係の機能をご紹介します "fs.readFileSync()" これは "readFileSync()" でも "readFile()" でも つまり同期的でも非同期的でも共通なのですが まず1番目のパラメーターに ファイル名を指定する そして2番目のパラメーターに 文字列を指定します その文字列としては読み込みたいファイルの 文字コードを指定します 今回の場合ですと "utf8" この様に指定する事で 何も指定しなかった場合には "Buffer" オブジェクトが 帰って来ました それを自分で "toString()" で 文字列に変換して処理していましたね そうではなく2番目に 文字コードを指定する事によって 直接文字列が入って来ます この様にする事によって "toString()" を 呼び出す手間が省けますので 中身が文字列であると分かっている場合には この様に2番目のパラメーターに 文字コードを指定した方が便利かもしれません "readFileSync()" ではなく "readFile()" でこれをやる場合には 2番目は文字コードで 3番目にコールバック関数を渡す という事になるでしょう この場合にはデータが 文字列でそのまま取得出来るはずです 一応やってみます この様に最初から文字列になりました "toString()" は使っていません ではヒントはここまでです ここで動画を止めて皆さん 問題を解いてみてください さて皆さん問題には正解出来ましたでしょうか それではこれから私の方で 正解のプログラムを書いてみます テキストエディタでソースコードを開きます そしてまずは ファイルシステムモジュールをロードします "require('fs')" そして "fs" モジュールの機能を使って "readFile()" 今回は非同期の読み込みですので "readFile()" メソッド それから読み出すファイルのパス名は コマンドラインパラメーターで 与えられますので "process.arg[2]" そして2番目のパラメーターに ファイルの文字コードですね指定します そして3番目にはコールバック関数 コールバック関数の1番目のパラメーターは "Node.js" では 必ずエラーを示す変数が渡されます そしてコールバック関数の 2番目のパラメーターは "data" これには文字列が入っています もし "err" に何か入っていた場合は これは読み込みで 何かエラーが発生した場合ですので 何かエラー処理をする必要があります 今回簡単なプログラムですので エラーチェックは省略しますが 通常の本格的なプログラムであれば エラーチェックは必ずしてください この様に "if 文" を使って エラーオブジェクトが "true" と評価される場合には 何かしらエラーが発生していますので 異常な場合のコードを 何かしら記述してください そして今回やりたい事は "console.log(" "data" に含まれる 改行の数を数えたいので まずは "split()" で改行コードで 文字を分割した上で 配列になっているので "length" プロパティを使います これでそのテキストファイルに含まれる 改行コードの数が分かるはずです ではテキストエディタを終了して プログラムが通るかどうかやってみましょう "learnyounode" "verify" の "program.js" プログラムが間違っていた様ですね 再度ソースコードを開きます こちらの "process" の "arg" となっていますが 正しくは "argv" でしたね この与えられたファイル名が間違っていたので 正しくファイルのデータが 読み込まれなかった様です これで "-1" をしないと行数 改行コードの数ではなく 行数が出てしまいますので "-1" をする必要がありました 再度検証します これでようやく正解が出ました 改行コードの数は29文字でしたね このレッスンでは "Node.js" で ファイルのデータを非同期的に 読み込む方法について学びました

NodeSchoolに入学しよう!

NodeSchoolワークショッパーとは、オープンソースで開発されているNode.jsやJava Scriptについて学ぶためのクイズ形式のアプリケーションです。このコースでは、learnyounodeとexpressworksという2つのワークショッパーを通じてNode.jsとExpress.jsの基本的な使い方を学びます。

3時間13分 (24 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
Node.js Node.js 0.10.24
価格: 3,990
発売日:2015年04月07日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。