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
150
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
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
360
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
160
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
{ Android | Kotlin } Gradle Plugin in 2026
ryunen344
1
290
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
450
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
340
書籍「プロフェッショナルAI駆動開発」紹介スライド
juntaromatsumoto
0
990
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
170
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
Foundry Localでエージェント開発
seosoft
0
140
Building an Out-of-Order CPU
latte72
0
700
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
520
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
Building the Perfect Custom Keyboard
takai
2
860
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
A Soul's Torment
seathinner
7
3.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
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໘ന͍͍ํ͕͋ͬͨΒڭ͑ͯԼ͍͞