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
Rustで作った自作コマンド群の話
Search
garebare
June 17, 2022
Programming
0
120
Rustで作った自作コマンド群の話
6月17日に行われたNEW DEBUG!!!!で発表した資料です。
https://caspur.wintu.dev/front/lives/264
garebare
June 17, 2022
Tweet
Share
More Decks by garebare
See All by garebare
ペンギンをおすすめする
garebareda
0
15
hey-techcamp-2022
garebareda
2
47
クリーンアーキテクチャ をGoでする場合に不要な Interfaceは消しやがれ
garebareda
0
90
自作Git作った話
garebareda
3
550
Rustで自作言語のインタプリタ作って Webで動くようにした話
garebareda
0
620
Vtuberをやりたくなりました
garebareda
1
60
Other Decks in Programming
See All in Programming
Rails と人魚の話/rails-and-mermaid
sanfrecce_osaka
0
100
Code Reviews
bkuhlmann
4
890
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
160
Build Apps for iOS, Android & Desktop in 100% Kotlin With Compose Multiplatform (mDevCamp 2024)
zsmb
0
170
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
260
Rubyでたのしむクリエイティブコーディング/Enjoy Creative coding with Ruby
chobishiba
1
170
FigmaとPHPで作る1ミリたりとも表示崩れしない最強の帳票印刷ソリューション
ttskch
43
18k
チーム力を高めるスクラム実践法:カンバン公開と課題攻略について - ニフティのスクラムトーク Vol. 2 - NIFTY Tech Talk #18
niftycorp
PRO
1
110
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
6
880
PHP8.3の機能を振り返る / Review of PHP 8.3 features
seike460
PRO
1
110
educure_カリキュラム生操作マニュアル.pdf
linew_official
0
640
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
380
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
226
16k
GraphQLとの向き合い方2022年版
quramy
31
12k
How to train your dragon (web standard)
notwaldorf
72
5.1k
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
Art, The Web, and Tiny UX
lynnandtonic
288
19k
Principles of Awesome APIs and How to Build Them.
keavy
120
16k
Writing Fast Ruby
sferik
620
60k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.4k
Web Components: a chance to create the future
zenorocha
305
41k
The Invisible Side of Design
smashingmag
294
49k
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 フルパスの表示
これで全部!