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

【LT資料】GoでつくるCUIツール

 【LT資料】GoでつくるCUIツール

【とらのあな主催】オタクが最新技術を追うライトニングトークイベント6回目で発表した資料になります。

Transcript

  1. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. GoでつくるCUIツール 2019.4.18

    オタクが最新技術を追うライトニングトークイベント 虎の穴ラボ 上田 昌寛
  2. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 今回話すこと 1.

    自己紹介 2. Go で CUIをつくる事について 3. 作ったツールの紹介 4. まとめ 2
  3. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 上田昌寛 (Masahiro

    Ueda) • 2017年5月虎の穴入社 • KEEPER,とらのあなクラフトの運用/開発   勉強中な言語 Go, TypeScript • 好きなアニメ ご注文はうさぎですか? ふらいんぐうぃっち 今期は「八月のシンデレラナイン」 3
  4. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. GoでCUIツールをつくるモチベーション ➔

    Goの勉強をしたい ➔ シングルバイナリの為、配布しやすい ➔ htopみたいなコンソール上でカッコイ描画ツールを自 分で作れるようになりたい 4
  5. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介 5

    OpenSSHのクライアント設定ファイルの 閲覧と生成が出来るツール (※特定のディレクトリのファイル閲覧と生成)
  6. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介 6

    使っているライブラリ : gocui https://github.com/jroimartin/gocui
  7. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介 7

    制作時間:10時間程 コード量:250行
  8. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介 8

    Host server1 HostName 192.168.1.100 User ueda IdentityFile ~/.ssh/server1_rsa $HOME/.ssh/config に設定する $ ssh server1 右のコマンドだけで 192.168.1.100 に接続できる
  9. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介(前提) 9

    OpenSSH の configで Include を利用します。
  10. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介(前提) 10

    $HOME .ssh config gossh server2 server3 server1 # 以下を先頭に定義する Include gossh/* Host server1 HostName 192.168.1.100 User ueda IdentityFile ~/.ssh/server1_rsa 接続情報を複数のファイルで 管理することが可能
  11. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介(前提) 11

    $HOME .ssh config gossh server2 server3 server1 生成/閲覧するツール
  12. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介 12

    ➔ SSH configファイルの作成 ➔ 設定できるキーワード ◆ HostName,User,Port,IdentityFile ➔ gosshフォルダ内で作ったファイルの閲覧
  13. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介 13

    SetView("Lists", 0, 0, 30, maxY-1) SetView("Config", 31, 0, maxX-1, maxY-1) 左側:設定ファイル名一覧 右側:選択した設定ファイルの中身を表示
  14. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介 14

    if view, err := g.SetView(listView, 0, 0, 30, maxY-1); err != nil { view.Title = "SSH Configs" fmt.Fprintln(view, "Server1") fmt.Fprintln(view, "Server2") fmt.Fprintln(view, "Server3") } 作成したViewにたいしてFprintln関数で追加しているだ け
  15. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 作ったツールの紹介 15

    func keybindings(g *gocui.Gui) error { if err := g.SetKeybinding(listView, gocui.KeyArrowUp, gocui.ModNone, cursorUp); err != nil { return err } if err := g.SetKeybinding(listView, gocui.KeyArrowDown, gocui.ModNone, cursorDown); err != nil { return err } if err := g.SetKeybinding(listView, gocui.KeyCtrlA, gocui.ModNone, newConfig); err != nil { return err } if err := g.SetKeybinding("", gocui.KeyCtrlC, gocui.ModNone, quit); err != nil { return err } return nil } Viewに対して対応するキーと関数を設定 第一引数にViewの名前(ない場合はどのViewに対しても有効)
  16. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. 今後やること •

    ツールの改良 – 選択したサーバーに接続(内部でsshを叩く) – 接続チェック機能 • ログのリアルタイム出力(フィルター機能) 16
  17. Copyright (C) 2019 Toranoana Inc. All Rights Reserved. まとめ •

    今後の改良でもっとGo言語の勉強に! • 普段の開発にも役立つものをデザインしたい • gocuiを使って手軽でもっとカッコいいツールを作ってみ よう! 17