パス操作(path)とファイル操作(fs)

pathモジュールを利用したパス操作方法、fsモジュールを利用したファイル操作方法(読み込み、書き込み、削除など)について動作確認します。

path|パス操作

以下フォルダ構成で動作確認します。

.
├── documentsA
│   ├── documentsB
│   │   └── text.txt
│   └── test.txt
├── documentsC
│   └── test.txt
└── path.js

パス情報を取得

パスが指すファイルの ディレクトリ 拡張子 などの情報を取得してみます。

path.js に以下処理を記述します。

const path = require('path');

console.log('---- basename ----');
console.log(path.basename('./documentsA/test.txt'));

console.log('---- dirname ----');
console.log(path.dirname('./documentsA/test.txt'));

console.log('---- extname ----');
console.log(path.extname('./documentsA/test.txt'));

console.log('---- parse ----');
console.log(path.parse('./documentsA/test.txt'));
$ node path.js 
---- basename ----
test.txt
---- dirname ----
./documentsA
---- extname ----
.txt
---- parse ----
{ root: '',
  dir: './documentsA',
  base: 'test.txt',
  ext: '.txt',
  name: 'test' }

パス結合

path.js に以下処理を記述します。

const path = require('path');

console.log(path.join('/xxx', 'yyy', 'aaa/bbb'));
$ node path.js 
/xxx/yyy/aaa/bbb

ディレクトリ間の相対パスを取得

第1引数のディレクトリ から 第2引数のディレクトリ への 相対パス を取得してみます。

path.js に以下処理を記述します。

const path = require('path');

console.log(path.relative('./documentsA', './documentsA/documentsB'));
console.log(path.relative('./documentsA/documentsB', './documentsC'));
console.log(path.relative('./documentsA', './documentsC'));
console.log(path.relative('./documentsA', '.'));
$ node path.js 
documentsB
../../documentsC
../documentsC
..

fs|ファイル操作

同期形式と非同期形式

以下のように、fsモジュール のメソッドには 同期形式非同期形式 が用意されています。

同期形式 非同期形式
statSync stat
copyFileSync copyFile
readFileSync readFile
unlinkSync unlink
  • 同期形式
    • 処理が完了するまでプロセス全体が待機状態になる
  • 非同期形式
    • 処理の完了を待たずに次の処理に進める

非同期処理 を利用すると性能面でメリットがあります。なので、処理内容的に 非同期処理 でも問題なければ、非同期処理を選ぶと良いです。

同期形式の場合の実装

try 〜 catch でエラーハンドリングします。

const fs = require('fs')

try {
  fs.statSync('documentsA/test1.txt')
  console.log('successfully')
} catch (err) {
  console.log(err)
}

非同期形式の場合の実装

最後の引数で コールバック を指定します。

const fs = require('fs')

fs.stat('documentsA/test1.txt', (err) => {
  if (err) throw err
  console.log('successfully')
})

ファイルの存在確認
( statSync, stat )

ファイルが存在すれば、fs.Statsオブジェクトを返します。

const fs = require('fs')

try {
  const statsA = fs.statSync('documentsA/test1.txt')
  console.log(statsA.isDirectory())  // false

  const statsB = fs.statSync('documentsA')
  console.log(statsB.isDirectory())  // true
} catch (err) {
  console.log(err)
}

fs.StatsisDirectoryメソッド で指定ファイルがディレクトリであるか判定することもできます。

ディレクトリ配下の一覧を取得
( readdirSync, readdir )

ディレクトリ配下の ファイル & ディレクトリ一覧 を取得します。

const fs = require('fs')

try {
  console.log(fs.readdirSync('documentsA'))
  console.log(fs.readdirSync('documentsA/documentsB'))
} catch (err) {
  console.log(err)
}
$ node file.js 
[ 'documentsB', 'test1.txt', 'test2.txt' ]
[ 'text1.txt' ]

ファイル読み込み
( readFileSync, readFile )

const fs = require('fs')

try {
  console.log(fs.readFileSync('documentsA/test1.txt', 'utf8'))
} catch (err) {
  console.log(err)
}
$ cat documentsA/test1.txt 
aaa
bbb
ccc
$ 
$ node file.js 
aaa
bbb
ccc

ファイル書き込み(新規作成 or 上書き)
( writeFileSync, writeFile )

ファイルが存在しなければ 新規作成 して、存在する場合は 上書き します。

const fs = require('fs')

try {
  fs.writeFileSync(
    'documentsA/new_test.txt',
    'あいうえお\nかきくけこ\n',
    'utf8'
  )
} catch (err) {
  console.log(err)
}
$ node file.js 
$ 
$ cat documentsA/new_test.txt 
あいうえお
かきくけこ

ファイル書き込み(追記)
( appendFileSync, appendFile )

const fs = require('fs')

try {
  fs.appendFileSync(
    'documentsA/test1.txt',
    'あああああああ\nいいいいいいい\n',
    'utf8'
  )
} catch (err) {
  console.log(err)
}
$ cat documentsA/test1.txt 
aaa
bbb
ccc
$ 
$ node file.js 
$ 
$ cat documentsA/test1.txt 
aaa
bbb
ccc
あああああああ
いいいいいいい
const fs = require('fs')

try {
  fs.unlinkSync('documentsA/test1.txt')
} catch (err) {
  console.log(err)
}
$ ls documentsA/test1.txt 
documentsA/test1.txt
$ 
$ node file.js 
$ 
$ ls documentsA/test1.txt 
ls: documentsA/test1.txt: No such file or directory

参考

【エンジニア向け】仕事を見つける方法

転職する

転職エージェントを活用する

転職サイトの場合、自身でサイト上から企業を探す必要があります。 一方「レバテックキャリア」 などの転職エージェントの場合、エージェントが企業を紹介してくれます。エージェントが間に入ることにより、日程調整や、条件交渉などもサポートしてくれます。

転職ドラフトを活用する

転職ドラフト」は、 企業がITエンジニアをドラフトという形で指名するサービスです。年収が最初に提示されるなどのメリットがあります。 ただ、初回登録時にレジュメ作成が必要で、すでにエンジニア経験が豊富にあるエンジニア向けのサービスかと思います。 レジュメ作成が手間ですが、自身のキャリアを見直す機会になり、他の仕事探しにも役立つはずです。

エンジニア転職保証のあるスクールを活用する

ある程度、開発経験のあるかたであれば、独学で必要なスキルを身につけることができるはずです。ただ、別業種からエンジニアに転職したい場合など、1から独学で学ぶのはハードルが高いです。そういった方は、スクールの活用を検討しても良いと思います。 「TechAcademy」は、エンジニア転職保証コースを提供しています。給付金制度の対象講座として認定されているため、金銭面の負担も抑えることができます。

フリーランスとして活動する

レバテックフリーランス」「ITプロパートナーズ」「ギークスジョブ」は、フリーランスエージェントサービスです。 エージェントによって、支払いサイトなど細かい違いはありますが、まずは良い案件を見つけることが重要です。 登録自体は無料なので、複数エージェントに登録して、より多くの案件を紹介してもらうのがおすすめです。

logo
わくわくBank.
技術系の記事を中心に、役に立つと思ったこと、整理したい情報などを掲載しています。