Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
nanafshiを使って簡単に作るFUSEの動的ファイル
Search
Ryotaro Tamura
February 12, 2019
Programming
610
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
nanafshiを使って簡単に作るFUSEの動的ファイル
Ryotaro Tamura
February 12, 2019
More Decks by Ryotaro Tamura
See All by Ryotaro Tamura
BlockNoteとDuckDB-WASMでつくる、ブラウザ内データ分析環境の設計
tokibi
0
130
Prometheus setup with long term storage
tokibi
7
6k
monotips #3 - fzfる
tokibi
0
170
IAMロールはどこから来て、どこへ行くのか / Where do IAM rolls come from and where to go?
tokibi
2
2.7k
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
620
ランチタイムLT会3周年!ランチタイムLT会を3年間続けられたお話
y0hgi
1
120
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.8k
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
650
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
15
8.1k
なぜ型を書くのか? TSKaigi2026で改めて考える #tskaigi_smarthr
kajitack
0
180
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
6k
トークンをケチるな、設計しろ:GitHub Copilotを賢く使うコンテキスト戦略
ochtum
0
260
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.5k
Signal Forms: Details & Live Coding @enterJS 2026 in Mannheim
manfredsteyer
PRO
0
210
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
14
6.5k
JavaDoc 再入門
nagise
1
430
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
How GitHub (no longer) Works
holman
316
150k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
240
Chasing Engaging Ingredients in Design
codingconduct
0
230
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
380
The Language of Interfaces
destraynor
162
27k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Building AI with AI
inesmontani
PRO
1
1.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
How to Talk to Developers About Accessibility
jct
2
270
Transcript
ాଜཾଠ(.01FQBCP *OD 'VLVPLBHP 0LBZBNBHP OBOBGTIJΛͬͯ؆୯ʹ࡞Δ '64&ͷಈతϑΝΠϧ
ΤϯδχΞ ాଜཾଠ!@UPLJCJ ϗεςΟϯάࣄۀ෦ϗεςΟϯάάϧʔϓϚωʔδυΫϥυνʔϜ
.PUJWBUJPO
ಈతʹத͕มΘΔ ϑΝΠϧΛ࡞Γ͍ͨ
Πϝʔδ
༻్ wϛυϧΣΞͷઃఆϑΝΠϧΛੜ wൿີ伴ͷΑ͏ͳϑΝΠϧͰ͋Δ͜ͱΛཁٻ͞ΕΔೝূใΛऔಘ wϩάσʔλΛσΟεΫͰͳ͘֎෦ͷετΞʹอଘ
ྫCBTI@IJTUPSZ wCBTI@IJTUPSZΛ֎෦ͷετΞʹอଘ͢Δ
ίϚϯυ ৼΔ͍ Λ ϑΝΠϧʹٖଶͤ͞Δͱ৭ʑͰ͖ͦ͏
"QQSPBDI
'64& 'JMFTZTUFNJO6TFSTQBDF wϢʔβ্ۭؒͰϑΝΠϧγεςϜ Λ࡞͢ΔΈ wEFWGVTFΛհͯ͠Χʔωϧۭ ؒͱϢʔβۭؒͷؒͰϑΝΠϧ ͷΞΫηεཁٻΛΓऔΓ͢Δ w'64&σʔϞϯड͚औͬͨϦΫ ΤετΛॲཧͯ͠Χʔωϧۭؒʹ ฦ͢
Ҿ༻ݩIUUQTKBXJLJQFEJBPSHXJLJ'JMFTZTUFN@JO@6TFSTQBDF
ϥΠϒϥϦ͋Δ͠ ؆୯ʹͰ͖ΔͷͰ
࣮ wHJUIVCDPNIBOXFOHPGVTFΛ༻ wTBNQMF͕๛Ͱཧղ͍͢͠ wJOPEFϕʔεͰॲཧΛఆٛ͢ΔOPEFGTͱɺϑΝΠϧύεϕʔεͰॲཧ Λఆٛ͢ΔQBUIGTͷछྨͷ࣮ํ๏͕͋Δ wࠓճJOPEFΛಓʹ࡞͍ͯ͘͠OPEFGTΛબ
࣮Πϝʔδ
͑
શવ؆୯ ͡Όͳ͍
1SPCMFN
ෳࡶ͞ͷݪҼ wσΟϨΫτϦϑΝΠϧͷΞΫηε࣌ʹԿͷγεςϜίʔϧ͕ൃߦ ͞ΕͯɺͲͷΑ͏ͳใΛඞཁͱ͢Δͷ͔Ѳ͍ͯ͠ͳ͍ͱ͍͚ͳ͍ ϨΠϠΊ wγεςϜίʔϧͷର͕JOPEFͳͷ͔ɺJOPEFΛPQFOͨ࣌͠ʹੜ ͞ΕΔ'JMFߏମͳͷ͔ͰৼΔ͍Λม͑Δඞཁ͕͋Δ wEFOUSZϖʔδΩϟογϡͷڍಈΛΒͳ͍ͱɺࢥͬͨΑ͏ʹಈ͔ ͳ͍͕࣌͋Δ ಈ͔ͳ͔ͬͨ
Γ͍ͨ͜ͱ
ϑΝΠϧʹΞΫηεͨ͠Β ͍͍ײ͡ͰίϚϯυΛ࣮ߦͯ͠΄͍͠
1SPQPTBM
HJUIVCDPNUPLJCJOBOBGTIJ
OBOBGTIJ wత w'64&৭ʑͰָ͖ͯͦ͠͏͚ͩͲ࣮େม wͬͱΧδϡΞϧʹ'64&ͰಈతͳϑΝΠϧΛ࡞Γ͍ͨ wඞཁͱ͢Δલఏࣝ γεςϜίʔϧͳͲ ΛͰ͖Δ͚ͩগͳ͍ͨ͘͠ wΓ͍ͨ͜ͱ͕มΘΔʹɺίʔυΛॻ͍ͯϏϧυͯ͠όΠφϦΛ ࠶͢ΔखؒΛແ͍ͨ͘͠
OBOBGTIJ wZBNMͰσΟϨΫτϦͷߏͱϑΝΠϧΞΫηε࣌ͷৼΔ͍Λఆٛ wࢦఆͨ͠γΣϧͰఆٛ͞ΕͨίϚϯυΛ࣮ߦ͢Δ wεΫϦϓτͰόΠφϦͰԿͰ wϑΝΠϧΞΫηε࣌ʹϓϩηε͔Β͖ͬͯͨใΛίϚϯυ࣮ߦ࣌ ʹڥมͱͯ͠ઃఆ͢Δ
ઃఆྫ shell: /bin/bash services: - name: dir files: - name:
now read: command: date - name: writable write: async: true command: echo $FUSE_STDIN >> /tmp/file
ಈ࡞ྫ $ nanafshi -c config.yml /mnt/nanafshi $ tree /mnt/nanafshi /mnt/nanafshi
└── dir ├── now └── writable $ cat /mnt/nanafshi/dir/now Tue Feb 12 14:53:56 JST 2019
Ґஔ͚
࣮ྫ func (n CommandFile) Open(flags uint32, ctx *fuse.Context) (nodefs.File, fuse.Status)
{ if flags&fuse.O_ANYWRITE != 0 { return nodefs.NewDevNullFile(), fuse.OK } p, err := n.ReadFile(ctx) if err != nil { return nil, fuse.EIO } return &nodefs.WithFlags{ File: nodefs.NewDataFile(p), FuseFlags: fuse.FOPEN_DIRECT_IO, }, fuse.OK } wJOPEFͷૢ࡞ΛJOUFSGBDFͱͯ͠ఆٛͯ͘͠ΕͯΔͷͰͦΕΛຬͨ͢
࣮ྫ func (n CommandFile) ReadFile(ctx *fuse.Context) ([]byte, error) { cmd,
err := n.ReadCommand.Command.Build(conf.Shell, n.makeEnv(ctx)) if err != nil { return nil, err } out, err := cmd.Output() if err != nil { return nil, err } return out, nil } w'JMFTZTUFNͷίΞ࣮
ۤ࿑ͨ͠ͱ͜Ζ wEFOUSZͱ͔ϖʔδΩϟογϡͷษڧ w7'4ʹର͢ΔΠϯλʔϑΣʔεͷ࣮ JOPEFPQFSBUJPOT ͱɺϑΝΠ ϧγεςϜͱͯ͠ԿΛ͍ͨ͠ͷ͔Λ࣮͢Δ෦Λͤ͞ͳ͍ͱɺ ࠞಱͱͯ͘͠Δ w͕ࣗJOPEFΛ࡞͍ͬͯΔͷ͔'JMFߏମΛ࡞͍ͬͯΔͷ͔Θ͔Βͳ ͘ͳͬͯ͘Δ
࣮ͷϙΠϯτ
·ͱΊ w'64&৭ʑͰ͖ͦ͏Ͱເ͕͕Δ w࣮͕େมͰΔؾ͕Ͱͳ͔ͬͨํOBOBGTIJͰ࣮ݧͯ͠ΈͯԼ͍͞ wOBOBGTIJ͕ཪͰίϚϯυΛ࣮ߦ ผϓϩηε͕ىಈ ͢ΔͷͰएׯͷ Φʔόʔϔου͕͋Γ·͢ w໘ന͍͍ํ͕͋ͬͨΒڭ͑ͯԼ͍͞