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
Neofetchライクな自己紹介ツールyuyufetchを作った / Created yuyu...
Search
Hiroya-W
November 25, 2022
Technology
370
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Neofetchライクな自己紹介ツールyuyufetchを作った / Created yuyufetch, a Neofetch-like self-introduction tool
Hiroya-W
November 25, 2022
More Decks by Hiroya-W
See All by Hiroya-W
PSRにのっかってバックエンドサーバを書く / Write a backend server using PSR
hyuyukun
0
98
phina.jsで弾幕シューティングを作る / Creating a bullet-hell shooter with phina.js
hyuyukun
0
310
ピアノ経験ゼロからピアノを練習して弾いてみた / I practiced and played the piano from zero piano experience.
hyuyukun
1
160
Blenderに入門しました / I started to use Blender
hyuyukun
0
170
気軽にパソコンを吹き飛ばせるようにするために / To initialize your computer easily
hyuyukun
0
110
僕っぽいことを喋るBotをマストドンで育てています / I'm growing a bot on mastodon that talks like me.
hyuyukun
0
150
4年と半年かけてようやくフロントエンドを書けるようになった / It took me 4 years and 6 months to be able to write the frontend
hyuyukun
0
350
世界観を考察するのが好き?Sound Horizonはいいぞ / Introduction to Sound Horizon
hyuyukun
0
1.1k
夏インターンと趣味開発 / Summer Internships and Hobby Development
hyuyukun
0
110
Other Decks in Technology
See All in Technology
Bits AI を制するものは Datadog を制す / The player that controls Bits AI, controls Datadog
kaminashi
0
100
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
300
え?フロントエンドエンジニアの ワイがインフラも!?
puku0x
1
570
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
140
システム思考で問題に対処する
yussak
0
280
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
3.5k
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.3k
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
230
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
170
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
240
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
3.3k
Featured
See All Featured
Bash Introduction
62gerente
615
220k
New Earth Scene 8
popppiees
3
2.5k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
240
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
640
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Context Engineering - Making Every Token Count
addyosmani
9
1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Making Projects Easy
brettharned
120
6.7k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Claude Code のすすめ
schroneko
67
230k
Exploring anti-patterns in Rails
aemeredith
3
460
Transcript
/FPGFUDIϥΠΫͳ ࣗݾհπʔϧͷ ZVZVGFUDIΛ࡞ͬͨ ゆゆ君(@Hyuyu_kun) in あくあたん工房 2022/11/25
とつぜんですが 2
自己紹介どうやってますか 3
LTなら1枚スライドを挟めばいいですが 4
5
名刺を渡す 6
自分のホームページを見せる 7
僕は 8
バイナリを渡します 9
デモします 10
yuyufetch 11 n GitHub • https://github.com/Hiroya-W/yuyufetch n 使い方 • インストールして
• $ go install github.com/Hiroya- W/yuyufetch/cmd/yuyufetch@latest • 実行 • $ yuyufetch n きっかけ • Twitterでやっている人を見て作りたくなって作った
yuyufetch 12 n 好きポイント n Shell: Japanese n Uptime: 199244h1m0s
Neofetch 13 n システム情報を表示するツール n GitHub • https://github.com/dylanaraps/neofetch • 1つのBashスクリプトで書かれている
n パソコン何使っているん?って 聞かれたら、とりあえずこれ見て って言えばOK
(余談) NiTch 14 n 他にも同じようなツールはある (の1例) n GitHub • https://github.com/unxsh/nitch
• Nimを使って書かれている • Neofetch同様カスタマイズが可能
jp2a: JPEG/PNG to ASCII converter 15 n 画像をAAに変換するツール n GitHub
• https://github.com/Talinx/jp2a • JPEGだけじゃなくてPNGにも対応している
jp2aの使い方 n ソースビルドするかDockerを使う方法(Dockerが楽だと思う) • $ docker run -t --rm -e
COLORTERM="$COLORTERM" -v "$(pwd)":/app talinx/jp2a n オプション • --colors • 色付きで出力する。 • --size=WxH • 出力サイズ(幅は1文字が半角なのでW=2Hにするといい感じ)。 • --chars=… • AAに使う文字の組み合わせ。左側が黒に近い色、右側が白に近い色で使う。 • --background=dark, --background=light • 文字色の色味が変わる。背景色が暗いか明るいかで使い分けると良いと思う。 16
自動生成出来るようにしたいなと思ったり 17
自動生成出来るようにしたいなと思ったり 18 Neofetchはテキスト埋め込んでいるので別にいいかと思ったり
GoのCLIツールのリポジトリ構成(バイナリ配布) ! . ├── & bin │ └── , yuyufetch
├── 4 go.mod ├── 9 lib │ ├── ; informations.go # package yuyufetch │ ├── ; version.go # package yuyufetch │ └── ; yuyufetch.go # package yuyufetch ├── , LICENSE ├── ; main.go # package main ├── I Makefile └── K README.md 19
GoのCLIツールのリポジトリ構成(ライブラリ配布) ! . ├── & bin │ └── , yuyufetch
├── ! cmd │ └── ! yuyufetch │ └── 6 main.go # package main ├── = go.mod ├── 6 informations.go # package yuyufetch ├── , LICENSE ├── F Makefile ├── I README.md ├── 6 version.go # package yuyufetch └── 6 yuyufetch.go # package yuyufetch 20
CLI構造体で出力先と入力元を制御 21 // 定義 type CLI struct { Stdout io.Writer
Stderr io.Writer Stdin io.Reader } func (cli *CLI) Run(args []string) error { // something } // メインプログラムで使う時 cli := &mytool.CLI{ Stdout: os.Stdout, Stderr: os.Stderr, Stdin: os.Stdin, } fmt.Fprintln(cli.Stdout, ”Hello") // テストで使う時 s := “-input=hoge –output=fuga” input := “piyo” want := “correct” var got bytes.Buffer cli := &mytool.CLI{ // 置き換える Stdout: &got, Stderr: &got, Stdin: strings.NewReader(input), } args := strings.Split(s, " ") err := cli.Run(args) if got := got.String(); got != want { fmt.Printfln("want %q, but got %q", want, got) }
flagパッケージ: CLIのオプションを作る 22 var showVersion bool fs := flag.NewFlagSet(args[0], flag.ContinueOnError)
fs.BoolVar(&showVersion, "v", false, "show version") fs.BoolVar(&showVersion, "version", false, "show version") fs.Usage = func() { fmt.Printf("yuyufetch %s¥n¥n", version) fmt.Printf("Usage:¥n %s [Options]¥n¥n", "yuyufetch") fmt.Println("Options:") fs.PrintDefaults() fmt.Println("") } if err := fs.Parse(args[1:]); err != nil { return err } if showVersion { fmt.Fprintln(cli.Stdout, "yuyufetch", version) return nil }
ロゴの埋め込み 23 n jp2aの出力をそのままベタ書き… n エスケープシーケンスの扱い • ヒアドキュメント(``で囲む文字列)は、そのまま 表示される •
¥nや¥tは、改行やタブにならずそのまま • jp2aの出力をコピペした場合は、見えない文字で 挿入されている • エスケープコードを ¥x1b と書く場合は “” で 囲む文字列として書く
やりたいこと n このロゴを埋め込んでいるところをなんとかしたい • 自動生成したい n ターミナルサイズに応じてサイズ調整 • 文字列の折返しをしないようにして、ロゴが崩れないように n
色付け部分 • エスケープシーケンスをくっつけた文字列を生成する関数? 24
yuyufetchを作った話でした 25
ありがとうございました
参考文献 n みんなのGo言語 現場で使える実践テクニック n Hiroya-W/yuyufetch • https://github.com/Hiroya-W/yuyufetch n Goで書くテスタブルなCLIツールの作り方
• https://gihyo.jp/article/2022/11/tsukinami-go-03 27