Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Neofetchライクな自己紹介ツールyuyufetchを作った / Created yuyu...

Hiroya-W
November 25, 2022

Neofetchライクな自己紹介ツールyuyufetchを作った / Created yuyufetch, a Neofetch-like self-introduction tool

Hiroya-W

November 25, 2022
Tweet

More Decks by Hiroya-W

Other Decks in Technology

Transcript

  1. 5

  2. yuyufetch 11 n GitHub • https://github.com/Hiroya-W/yuyufetch n 使い方 • インストールして

    • $ go install github.com/Hiroya- W/yuyufetch/cmd/yuyufetch@latest • 実行 • $ yuyufetch n きっかけ • Twitterでやっている人を見て作りたくなって作った
  3. Neofetch 13 n システム情報を表示するツール n GitHub • https://github.com/dylanaraps/neofetch • 1つのBashスクリプトで書かれている

    n パソコン何使っているん?って 聞かれたら、とりあえずこれ見て って言えばOK
  4. (余談) NiTch 14 n 他にも同じようなツールはある (の1例) n GitHub • https://github.com/unxsh/nitch

    • Nimを使って書かれている • Neofetch同様カスタマイズが可能
  5. jp2a: JPEG/PNG to ASCII converter 15 n 画像をAAに変換するツール n GitHub

    • https://github.com/Talinx/jp2a • JPEGだけじゃなくてPNGにも対応している
  6. 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
  7. 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
  8. 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
  9. 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) }
  10. 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 }
  11. ロゴの埋め込み 23 n jp2aの出力をそのままベタ書き… n エスケープシーケンスの扱い • ヒアドキュメント(``で囲む文字列)は、そのまま 表示される •

    ¥nや¥tは、改行やタブにならずそのまま • jp2aの出力をコピペした場合は、見えない文字で 挿入されている • エスケープコードを ¥x1b と書く場合は “” で 囲む文字列として書く