Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Rustで作った自作コマンド群の話
Search
garebare
June 17, 2022
Programming
190
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rustで作った自作コマンド群の話
6月17日に行われたNEW DEBUG!!!!で発表した資料です。
https://caspur.wintu.dev/front/lives/264
garebare
June 17, 2022
More Decks by garebare
See All by garebare
ペンギンをおすすめする
garebareda
0
62
hey-techcamp-2022
garebareda
2
81
クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ
garebareda
0
160
自作Git作った話
garebareda
3
880
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
880
Vtuberをやりたくなりました
garebareda
1
94
Other Decks in Programming
See All in Programming
ジョジョの世界をXRで再現する
mofurune
0
180
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1.1k
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
190
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
140
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.3k
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
4
780
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
170
オーケストレーション記述言語 Katari
yukikurage
0
180
学びを記事・スライド・Xへ高速展開する― AI-assisted Learning Loopで回すコンテンツ生成術
ochtum
0
100
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
180
re:Inventに行く前に知っておきたい現地参加のノウハウ
nokomoro3
0
460
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1k
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
260
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
420
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
530
Technical Leadership for Architectural Decision Making
baasie
3
610
A better future with KSS
kneath
240
18k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
The Pragmatic Product Professional
lauravandoore
37
7.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
We Are The Robots
honzajavorek
0
400
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
290
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
Transcript
Rustで作った 自作コマンド群の話 @garebare521
自己紹介 名前:ガレバレ とうとうインターンシップ始めた 授業とインターンシップで死にそうに なってる コーヒーの器具を一式買った
このスライドは前座
皆さん、自作コマンド 作りたくないですか?
作りたいですよね?
残念ですがそんなことを思っている間に 私が先に作りました
でもフルスクラッチではないので 皆さん頑張って下さい
最初に下準備
とりあえず、全部に実装するトレイトを定義する pub trait Commands { fn help(&self); fn version(&self); fn
name(&self) -> &str; fn run(&self) -> Result<(), String>; }
helpとversionのオプションはデフォルトで実装 pub trait Commands { fn print_help(&self, options: &Vec<String>, arg:
&str) -> bool { if options.contains(&"--help".to_string()) || options.contains(&"-help".to_string()) || options.contains(&"-h".to_string()) || arg == "help" { self.help(); return true; } false } }
parser 毎度同じみのパーサー 一番最初に来たものはコマンド名として処理する ハイフンがついているものはオプションとして処理する 何もついてないのは引数として処理する
オプション let options = args.iter().filter(|arg| arg.starts_with(“-”)) .map(|arg| arg.to_string()) .collect(); Rustの場合こんな感じにすれば最初の文字がハイフンで始
まってる文字列が取れる
引数 let args = args.iter().filter(|arg| !arg.starts_with(“-”)) .map(|arg| arg.to_string()) .collect(); 条件を反転させるだけ
- cat - ls - ps - rm - touch
- witch 作ったコマンド
ざっくり紹介します
cat 単純にRustでファイルを開いて一行ずつ読み込んで表示して る -e 最後に$を入れる -n 行番号をつける -b 空白行を入れずに行番号をつける
エンジニアの皆様なら 実装は想像つきますよね????
ls std::os::unix::fs::{MetadetaExt, PremisstionsExt}でメタデー タと権限を取得 あとはディレクトリを回して表示してる 存在している権限はライブラリで取得 -a 隠しファイルも表示 -l ディテールの表示
-R 再帰的に表示 -r 逆順で表示
ps ライブラリを使ってuidとプロセスを取得 大体ライブラリの例通り実装してオプションにより表示を制限す ればいい -x 端末操作以外の全てのプロセスも表示 -a 他ユーザーのも含めてすべてのプロセスを表示 -l ディテールも表示
rm Rustでディレクトリを回して単純に削除してる -r 再帰的にファイルを削除 -i 削除する際に同意を求める
touch 実はファイルを生成するコマンドじゃない! ライブラリを使って編集時間を取得して更新もしている metadetaから編集時間などを取得するためまぁまぁ実装する のに疲れた -a 最終アクセスした時間をアップデート -m 最終編集した時間をアップデート -r
指定したファイルのタイムスタンプと同じ日時にする
touch とは言えファイルの生成もできるようにした
witch 環境変数PATHを全部読み込んで分割して表示してる -a フルパスの表示
これで全部!