#12 JavaScriptで学ぶファイル読み書きの基本

JavaScriptのファイル操作は、動かす場所(ブラウザかNode.jsか)によって大きく事情が異なる分野です。この記事では、それぞれの環境でのファイル操作の考え方を解説します。

ブラウザ上ではファイルに直接アクセスできない

セキュリティ上の理由から、ブラウザ上で動くJavaScriptは、利用者のパソコンのファイルに自由にアクセスすることができません。利用者が<input type="file">で明示的に選択したファイルだけを、限定的に読み込める仕組みが用意されています。

document.querySelector('input').addEventListener('change', (e) => {
    const file = e.target.files[0];
    const reader = new FileReader();
    reader.onload = () => console.log(reader.result);
    reader.readAsText(file);
});

Node.js環境でのファイル操作

Node.jsにはfsというファイル操作専用のモジュールがあります。

const fs = require('fs');

const content = fs.readFileSync('data.txt', 'utf-8');
console.log(content);

ファイルに書き込む

fs.writeFileSync('data.txt', 'こんにちは');

既存の内容に追記したい場合はfs.appendFileSync('data.txt', '\n追記内容')を使います。

非同期の書き方

fsモジュールには、非同期(Promiseベース)の書き方も用意されています。

const fs = require('fs/promises');

async function main() {
    const content = await fs.readFile('data.txt', 'utf-8');
    console.log(content);
}
main();

同期的な書き方はファイル処理が終わるまでプログラム全体が止まってしまうため、Webサーバーなど多数の処理を同時に扱うプログラムでは、非同期の書き方が推奨されます。

JavaScriptならではの注意点

fsモジュールには、今回紹介した「同期的」な(その場で終わるまで待つ)書き方に加え、非同期の書き方も用意されています。大きなファイルを扱う本格的なプログラムでは非同期の書き方が推奨されますが、学習の最初は同期的な書き方から慣れていくとよいでしょう。ブラウザとNode.jsではファイル操作の考え方がまったく異なるため、自分が書いているコードがどちらの環境で動くものかを常に意識することも大切です。

まとめ

JavaScriptのファイル操作は、ブラウザでは制限があり、Node.jsではfsモジュールを使います。同期・非同期の使い分けと、動かす環境によって考え方が大きく変わる点を意識しましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

JavaScriptをもっと学びたい方には「改訂新版JavaScript本格入門」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本