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
Neofetchライクな自己紹介ツールyuyufetchを作った / Created yuyu...
Search
Hiroya-W / yuyukun
November 25, 2022
Technology
380
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 / yuyukun
November 25, 2022
More Decks by Hiroya-W / yuyukun
See All by Hiroya-W / yuyukun
PHPカンファレンス振り返りと プロポーザルについて話します / PHP Tech Talk Night ~ after phpcon 2026
hyuyukun
0
46
PSRにのっかってバックエンドサーバを書く / Write a backend server using PSR
hyuyukun
0
100
phina.jsで弾幕シューティングを作る / Creating a bullet-hell shooter with phina.js
hyuyukun
0
320
ピアノ経験ゼロからピアノを練習して弾いてみた / I practiced and played the piano from zero piano experience.
hyuyukun
1
170
Blenderに入門しました / I started to use Blender
hyuyukun
0
170
気軽にパソコンを吹き飛ばせるようにするために / To initialize your computer easily
hyuyukun
0
120
僕っぽいことを喋るBotをマストドンで育てています / I'm growing a bot on mastodon that talks like me.
hyuyukun
0
160
4年と半年かけてようやくフロントエンドを書けるようになった / It took me 4 years and 6 months to be able to write the frontend
hyuyukun
0
360
世界観を考察するのが好き?Sound Horizonはいいぞ / Introduction to Sound Horizon
hyuyukun
0
1.1k
Other Decks in Technology
See All in Technology
自主式軟體工廠
philipz
0
240
購入ドメインでの課題と取り組み
ykagano
0
150
LocalStack を使ったサーバーレスアプリケーション開発 / Serverless Development with LocalStack
kakakakakku
1
310
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
300
Kiro Crewをはじめよう
kizawa2020
1
100
転んだ話が背中を預ける理由になる / A_story_about_falling_down_gives_you_a_reason_to_watch_each_other_s_backs.pdf
pauli
3
330
オンラインゲームのシステム全体像 - コロプラ 2026年度 新卒研修
colopl
0
950
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
490
しろおびから始める!ログ活用の第一歩
shumei_ito
0
740
Incremental HTTP
kazuho
5
2.1k
LLM機能を自作して分かるSnowflake Cortex AIの強み
nayuts
0
330
味覇で作るパスタが美味い - 20261001_yabaubuki.dev
livesense
PRO
0
110
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Being A Developer After 40
akosma
92
590k
Become a Pro
speakerdeck
PRO
31
6.3k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
770
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Visualization
eitanlees
153
17k
The SEO identity crisis: Don't let AI make you average
varn
0
580
How to train your dragon (web standard)
notwaldorf
96
6.9k
GitHub's CSS Performance
jonrohan
1033
470k
Marketing to machines
jonoalderson
1
5.9k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
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