NodeSchoolに入学しよう!

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

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

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
require関数を使用してモジュールを読み込んだ上で、fsモジュールを使用してローカルファイルのデータを同期的に読み込む方法について学びます。
講師:
10:00

字幕

このレッスンでは "Node.js" で ファイルのデータを 読み込む方法について説明します それではまず ワークショッパーを起動しましょう "learnyounode" "Enter" そして今日はこの3番目の "MY FIRST I/O!" という問題を解きます "Enter" を押してください 問題 という事で今回は ファイルの中身を読み込みます その前に少し余談になりますが この問題文が書かれている所に "cat" "file" 縦棒 これパイプと読みます パイプの "wc" "-l" コマンドの様な プログラムを書きなさい という事が書いてあります これは実際にターミナル上で 使用出来るコマンドなのですが これを使う事によってファイル内の 改行の数を数える事が出来ます ではこれを実際に試してみましょう まずは改行が幾つか含まれた 適当なテキストファイルを作成します "vim test.txt" そして適当に "line 1" "line 2" "line 3" "line 4" "line 5" "line 6" "line 7" 7行含まれたテキストファイルを作成して 保存してテキストエディタを閉じます ここで上記のコマンドを実行してみましょう "cat" の "test.txt" そして "|" の "wc -l" 実行すると "7" という数字が出力されました これを少し説明すると "cat" というのは そのファイルの中身をテキストファイルとして そのまま表示してくれるプログラムです 例えば "cat test.txt" とやると この様にファイルの中身が表示されます そして縦棒を使って "wc" というプログラムに その前のプログラムの出力を そのままデータとして渡す事が出来ます そして "wc" というプログラムは その渡されたデータの中に 何文字含まれているか 或いは何行含まれているかといった事を 計算出来るプログラムですので この様に "cat" の出力を パイプで "wc" に渡す事によって 行数を数える事が出来ます この様に小さなコマンドを組み合わせて やりたい仕事を成し遂げるというのが "UNIX" という OS の思想の一つです ちなみに "Mac OS" も "UNIX" の一種です それでは実際に "node" を使って ファイルを読み込みましょう まず "node" の インタープリターを起動します "node" と打って "Enter" そしてファイルを読み込む為には "fs" というモジュールを 読み込む必要があります モジュールを読み込む為にまず変数の中に "require()" という関数を使って ここに読み込みたい モジュールの名前を文字列で渡します 今回は "fs" ファイルシステムの略ですね これを使って こうする事によって "fs" の中に ファイルシステムの モジュールが読み込まれました このモジュールを使う事によって ファイルの中のデータを読み込む事が可能です そしてファイルの中身を読み込む為には "fs.readFileSync()" という関数を使います ここに読み込みたいファイルのファイル名 またはファイルのパスを与えます 今読み込んでみるのは "test.txt" という 先程作成したファイルです こうすると帰り値として "Buffer" オブジェクトが返されます そして "readFileSync()" となっているんですが この "Sync" というのは同期的に "I\O" つまり入出力を行う という事を意味しています 同期的な "I\O" というのは どういう意味かというと このメソッド 関数を実行して その関数の実行内容が全て完了するまで この関数の呼び出しから戻って来ない という意味です ファイルの読み込みですと ちょっと分かり辛いのですが 例えばこのファイルが物凄く巨大だったとして 例えば 1GB などの 巨大なファイルだったとして "readFileSync()" そしてそのファイルを読み込もうとすると 暫く結果が返って来ないはずです その様に関数を実行して 関数の処理が完全に完了するまで 関数の呼び出しから戻って来ない事を 同期的な実行と言ったりします 同期的な実行がある訳ですから 当然非同期的な実行もあります そちらについては このチャプターで後ほど扱います それではこの "readFileSync()" で で読み込んだ "Buffer" を 変数の中に一旦格納しましょう 変数 "buf" というものの中に格納します これで "buf" の中に ファイルから読み込んだデータが 全て格納されています さてこれを "Java Script" から 実際に利用する為に 幾つか利用の仕方があるのですが 例えば "buf.toString()" という風にする事によって そのデータを文字列に変換する事が出来ます ですので呼び出すと この様に読み込まれたファイルの中身が 文字列として格納されています こちらの "\ n" バックスラッシュ n ですね これは改行コードを意味しています このバックスラッシュの記号を 入力したい場合には日本語のキーボードですと "¥" マークを押すと入力されるはずです そして今回の問題は ファイルの中に含まれている 改行の数を数えるという問題なのですが その為のもう1つのヒントとして 文字列を例えばこの様に空白で 区切られた文字列があるとします "a b c d e" これに対して "split()" メソッドを使って そして区切り文字を入れます そうするとこれが空白を区切り文字と認識して 空白で区切られた配列の形になりました 勿論今空白を与えましたが この与える文字列を改行コード "\" + "n" ですね にすれば "\" で文字列を 区切る事が出来るはずです さてヒントはここまでです それではここで一旦動画を見るのを止めて ファイルを読み込んで改行の個数を 数えるプログラムを作成してみてください さてそれでは正解のコードを 書く事は出来たでしょうか 答え合わせです 私の方でこれから 正解のプログラムを書いてみます まずテキストエディタで プログラムのファイルを開きます "program.js" というファイルに プログラムコードを書いていきます さて "program.js" という 空のファイルを開きました ここにまずは モジュールをロードします モジュールをロードする為に "require()" 関数を使用して "fs" モジュールをロードします そして "fs" モジュールを使って "readFileSync(" それから読み込むファイル名は コマンドライン引数の 1番目のパラメーターで 与えられるという事でしたので "process" "process" オブジェクトの "argv" で コマンドラインパラメーターは取得出来ます それの1番目のパラメーターという事ですので 添え字には "2" を与えます "argv" の 0番目 つまり1番始めのパラメーターには "node" という文字列 そして2番目 数字の "1" ここには自分自身の スクリプトの絶対パスが入っていますので 3番目のこちらに プログラムに与えられた パラメーターが読み込まれます そして この状態で "buf" にはファイルから 読み込まれたデータが入っているはずですので これを "buf" の "toString()" で文字列にしてから "split()" で改行コードで 区切ってやります そうするとこれは配列になっていますので "length" プロパティで その個数が取得出来ます それをそのまま出力してやれば プログラムは完成です "console.log()" これでプログラムは完成のはずです では実行してみましょう "learnyounode" "verfy" の "program.js" スペルが間違っていましたかね "verify" "program.js" 答えが間違っていましたね 今回求めるべき答えは 再度プログラムのファイルを開きます これですと改行コードで区切った 各行の個数が出てしまいますので 答えとして今回求めたいのは 改行コードの数でした ですので "1" を 引いてやる必要がありました これで再度 "verify" を実行すると この様に正解でした このレッスンでは "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宛までご連絡ください。