Slide 1

Slide 1 text

Node.jsͰͷrecursive readdirΛߟ͑Δ ͋Β΍ @arayaryoma Gotanda.js #11 in Mobile Factory

Slide 2

Slide 2 text

ࣗݾ঺հ ͋Β΍ / Ѩ෦ ྇ຏ @arayaryoma @arayaryoma https://araya.dev גࣜձࣾϔϚλΠτ / ෭ۀϑϦʔϥϯε JavaScript/TypeScript/Go/Kotlin Angular/React/ReactNative/Next.js/Nest.js

Slide 3

Slide 3 text

͔͜͜Β໨ࠇํ໘ʹ10෼͘Β͍า͍ͨͱ͜ΖʹΦϑΟε͕͋ΔձࣾͰಇ͍͍ͯ·͢ ޒ൓ాͷ޷͖ͳ͓ళ͸ϗοτεϓʔϯͰ͢

Slide 4

Slide 4 text

ୡ੒͍ͨ͜͠ͱ ͜ͷΑ͏ͳσΟϨΫτϦͰ filesΑΓԼʹ͋ΔશͯͷϑΝΠϧͷϦετΛऔಘ͍ͨ͠

Slide 5

Slide 5 text

·ͣߟ͑Δ͜ͱ fs.readdirʹΦϓγϣϯΛ౉͢ͱɺ΋͔͍͍ͯ͠͠ײ͡ʹऔΕΔͷͰ͸ͳ͍͔

Slide 6

Slide 6 text

·ͣߟ͑Δ͜ͱ ౰વͦΜͳந৅తͳ΋ͷ͸ͳ͍

Slide 7

Slide 7 text

ੈͷதʹస͕͍ͬͯΔղܾࡦ • https://github.com/jergason/recursive-readdir • https://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search • https://gist.github.com/kethinov/6658166
 
 ͳͲ… GoogleͰʮnode.js recursive readdirʯͱݕࡧ͢Δͱɺ ͍͔ͭ͘ղܾࡦ΍ϥΠϒϥϦ͕ݟ͔ͭΔ

Slide 8

Slide 8 text

ੈͷதʹస͕͍ͬͯΔղܾࡦ ͜ΕΒͷ࣮૷ྫͰ͸ɺ͓͓·͔ʹ 1. fs.readdirͰσΟϨΫτϦ௚ԼͷϑΝΠϧͷϦετΛऔಘ͢Δ 2. 1ͷ݁ՌΛϧʔϓ΍ΠςϨʔλͰճ͠ɺ֤ϑΝΠϧͷύεΛfs.statؔ਺ʹ౉͠ɺ fs.StatsΦϒδΣΫτΛಘΔ 3. fs.StatsΦϒδΣΫτʹ͸isDirectory()ϝιου͕͋Γɺ͜ΕͰର৅ͷϑΝΠϧ͕ σΟϨΫτϦ͔Ͳ͏͔൑ఆ͢Δ 4. 3ͷ݁ՌɺσΟϨΫτϦͩͬͨ৔߹͸ͦͷσΟϨΫτϦʹ͍ͭͯɺ1~3Λߦ͏
 3ͷ݁ՌɺϑΝΠϧͩͬͨ৔߹͸഑ྻfilesʹ௥Ճ͢Δ 5. ϧʔϓ͕ऴΘͬͨΒ഑ྻfilesΛฦ͢ ͱ͍͏ํ๏͕ͱΒΕ͍ͯΔɻ

Slide 9

Slide 9 text

ੈͷதʹస͕͍ͬͯΔղܾࡦ ΤϥʔϋϯυϦϯά౳͸ແࢹͨ͠࠷খݶͷ࣮૷ྫ ಡΈ΍͢͞ͷͨΊʹಉظ࣮ߦ͞ΕΔؔ਺Λ࢖༻

Slide 10

Slide 10 text

ੈͷதʹస͕͍ͬͯΔղܾࡦ ݱࡏͷσΟϨΫτϦ௚ԼͷϑΝΠϧҰཡΛऔಘ

Slide 11

Slide 11 text

ੈͷதʹస͕͍ͬͯΔղܾࡦ fs.statSync()Ͱfs.StatsΦϒδΣΫτΛऔಘ͠ɺ σΟϨΫτϦ͔Ͳ͏͔൑ఆɻ ϑΝΠϧͩͬͨ৔߹͸ϑΝΠϧϦετʹ௥Ճɻ

Slide 12

Slide 12 text

ੈͷதʹస͕͍ͬͯΔղܾࡦ ࢠσΟϨΫτϦͷϦετΛϧʔϓͰճ͠ɺ ֤ࢠσΟϨΫτϦʹରͯؔ͠਺Λ࠶ؼݺͼग़͢͠Δɻ

Slide 13

Slide 13 text

ੈͷதʹస͕͍ͬͯΔղܾࡦ ϑΝΠϧͷϦετΛฦ͢

Slide 14

Slide 14 text

ੈͷதʹస͕͍ͬͯΔղܾࡦ ࣮ߦ݁Ռ

Slide 15

Slide 15 text

Node.js v10.10Ҏ߱Ͱ͸fs.statΛ࢖Θͣʹॻ͚Δ fs.readdir()ʹ{withFileTypes: true}Λ౉͢ͱɺfiles͸fs.DirentΦϒδΣΫτͷ഑ྻʹͳΔ

Slide 16

Slide 16 text

Node.js v10.10Ҏ߱Ͱ͸fs.statΛ࢖Θͣʹॻ͚Δ fs.DirentΦϒδΣΫτʹ͸isDirectory()΍ isFile()ͳͲͷϝιου͕࣮૷͞Ε͍ͯΔ ϑΝΠϧ໊͸.nameͰऔಘͰ͖Δ -> ϑΝΠϧγεςϜίʔϧΛ1σΟϨΫτϦʹ͖ͭ 1౓Ͱࡁ·͢͜ͱ͕Ͱ͖Δ https://github.com/nodejs/node/pull/22020

Slide 17

Slide 17 text

fs.Dirent ΦϒδΣΫτΛ࢖࣮ͬͨ૷ྫ

Slide 18

Slide 18 text

fs.Dirent ΦϒδΣΫτΛ࢖࣮ͬͨ૷ྫ {withFileTypes: true}Λࢦఆͯ͠ fs.DirentΦϒδΣΫτΛಘΔ dirent.isDirectoryͰ σΟϨΫτϦ͔Ͳ͏͔൑ఆ 1֊૚ʹ͖ͭ1౓ͷϑΝΠϧγεςϜίʔϧ

Slide 19

Slide 19 text

fs.Dirent ΦϒδΣΫτΛ࢖࣮ͬͨ૷ྫ {withFileTypes: true}Λࢦఆͯ͠ fs.DirentΦϒδΣΫτΛಘΔ dirent.isDirectoryͰ σΟϨΫτϦ͔Ͳ͏͔൑ఆ 1֊૚ʹ͖ͭ1౓ͷϑΝΠϧγεςϜίʔϧ

Slide 20

Slide 20 text

ඇಉظʹ͢Δ fs.readdir()ʹίʔϧόοΫؔ਺Λ౉ͯ݁͠ՌΛॲཧͯ͠΋͍͍͕ɺ Node.js v10 Ͱ͸ɺExperimental͕ͩfs Promises API͕ఏڙ͞Ε͍ͯΔ (v12Ͱ͸stable)

Slide 21

Slide 21 text

fs Promises API

Slide 22

Slide 22 text

fs Promises APIΛ࢖ͬͯॻ͖௚͢

Slide 23

Slide 23 text

·ͱΊ •ϥΠϒϥϦΛ࢖Θͳͯ͘΋ɺͦ͜·Ͱଟ͘ͳ͍هड़ྔͰrecursive readdir͸࣮ݱͰ͖Δɻ •Node.js v10.10Ҏ͕߱࢖͑Δ৔߹͸fs.DirentΦϒδΣΫτΛ׆༻ͯ͠
 ϑΝΠϧγεςϜίʔϧͷճ਺ΛݮΒ͢͜ͱ͕Ͱ͖Δɻ •fs Promises APIΛ༻͍Δ͜ͱͰɺϑΝΠϧγεςϜૢ࡞͕PromiseϕʔεͰॻ͚Δɻ •Node.js͸minor version updateͰศརͳAPI͕௥Ճ͞ΕΔ͜ͱ͕͋ΔͨΊɺ
 LTSͷ࠷৽Λ࢖͍ଓ͚Δબ୒ࢶ͕औΕΔͱྑ͍ɻ

Slide 24

Slide 24 text

ิ଍: direntͱ͍͏֓೦ʹ͍ͭͯ dirent͸Linux Programmingʹ͓͍ͯɺϑΝΠϧͷ৘ใΛ࣋ͭߏ଄ମɻ readdirؔ਺͸͜ͷߏ଄ମΛฦ͢ɻ manϖʔδ( http://man7.org/linux/man-pages/man3/readdir.3.html )ΑΓɺglibcͰͷ࣮૷