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
620
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
140
Prometheus setup with long term storage
tokibi
7
6k
monotips #3 - fzfる
tokibi
0
180
IAMロールはどこから来て、どこへ行くのか / Where do IAM rolls come from and where to go?
tokibi
2
2.7k
Other Decks in Programming
See All in Programming
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
240
AI Readyの正体はデータマネジメントだ メダリオン2.0の最前線
freee
PRO
0
330
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
150
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.4k
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
120
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
230
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.6k
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.8k
MySQLとPostgreSQLって何が違うの?
akagami
0
120
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
330
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
110
Pythonの実行はどこまで賢くなったのか? CPythonとPyPyから見る最適化のしくみ
curekoshimizu
0
150
Featured
See All Featured
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
400
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
500
Believing is Seeing
oripsolob
1
190
Marketing to machines
jonoalderson
1
5.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Skip the Path - Find Your Career Trail
mkilby
1
190
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Done Done
chrislema
186
16k
Technical Leadership for Architectural Decision Making
baasie
3
510
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
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໘ന͍͍ํ͕͋ͬͨΒڭ͑ͯԼ͍͞