SlideShare a Scribd company logo
1 of 17
Download to read offline
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
GoでつくるCUIツール
2019.4.18 オタクが最新技術を追うライトニングトークイベント
虎の穴ラボ
上田 昌寛
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
今回話すこと
1. 自己紹介
2. Go で CUIをつくる事について
3. 作ったツールの紹介
4. まとめ
2
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
上田昌寛 (Masahiro Ueda)
• 2017年5月虎の穴入社
• KEEPER,とらのあなクラフトの運用/開発
  勉強中な言語
Go, TypeScript
• 好きなアニメ
ご注文はうさぎですか?
ふらいんぐうぃっち
今期は「八月のシンデレラナイン」
3
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
GoでCUIツールをつくるモチベーション
➔ Goの勉強をしたい
➔ シングルバイナリの為、配布しやすい
➔ htopみたいなコンソール上でカッコイ描画ツールを自
分で作れるようになりたい
4
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
作ったツールの紹介
5
OpenSSHのクライアント設定ファイルの
閲覧と生成が出来るツール
(※特定のディレクトリのファイル閲覧と生成)
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
作ったツールの紹介
6
使っているライブラリ : gocui
https://github.com/jroimartin/gocui
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
作ったツールの紹介
7
制作時間:10時間程
コード量:250行
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 に接続できる
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
作ったツールの紹介(前提)
9
OpenSSH の configで Include を利用します。
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
接続情報を複数のファイルで
管理することが可能
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
作ったツールの紹介(前提)
11
$HOME
.ssh config
gossh
server2
server3
server1 生成/閲覧するツール
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
作ったツールの紹介
12
➔ SSH configファイルの作成
➔ 設定できるキーワード
◆ HostName,User,Port,IdentityFile
➔ gosshフォルダ内で作ったファイルの閲覧
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
作ったツールの紹介
13
SetView("Lists", 0, 0, 30, maxY-1) SetView("Config", 31, 0, maxX-1, maxY-1)
左側:設定ファイル名一覧 右側:選択した設定ファイルの中身を表示
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関数で追加しているだ
け
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に対しても有効)
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
今後やること
• ツールの改良
– 選択したサーバーに接続(内部でsshを叩く)
– 接続チェック機能
• ログのリアルタイム出力(フィルター機能)
16
Copyright  (C) 2019 Toranoana Inc. All Rights Reserved.
まとめ
• 今後の改良でもっとGo言語の勉強に!
• 普段の開発にも役立つものをデザインしたい
• gocuiを使って手軽でもっとカッコいいツールを作ってみ
よう!
17

More Related Content

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

俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
 俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜 俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜虎の穴 開発室
 
【LT資料】ラムダ式でDSL
【LT資料】ラムダ式でDSL【LT資料】ラムダ式でDSL
【LT資料】ラムダ式でDSL虎の穴 開発室
 
インターネットを活用した“国内”テレワークの実際[電子出版事業編]2018
インターネットを活用した“国内”テレワークの実際[電子出版事業編]2018インターネットを活用した“国内”テレワークの実際[電子出版事業編]2018
インターネットを活用した“国内”テレワークの実際[電子出版事業編]2018馮 富久
 
[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)
[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)
[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)虎の穴 開発室
 
Alexaの電卓スキルを作ってみる
Alexaの電卓スキルを作ってみるAlexaの電卓スキルを作ってみる
Alexaの電卓スキルを作ってみる虎の穴 開発室
 
Ionicを使ってスマホアプリを作ってみた
Ionicを使ってスマホアプリを作ってみたIonicを使ってスマホアプリを作ってみた
Ionicを使ってスマホアプリを作ってみた虎の穴 開発室
 
スマホ業界とエンジニアのキャリア形成
スマホ業界とエンジニアのキャリア形成スマホ業界とエンジニアのキャリア形成
スマホ業界とエンジニアのキャリア形成Namito Satoyama
 
誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発Namito Satoyama
 
Pepper君で即売会のお手伝い
Pepper君で即売会のお手伝いPepper君で即売会のお手伝い
Pepper君で即売会のお手伝い虎の穴 開発室
 
製造業アジャイル勉強会LT大会-ペイフォワードのはなし
製造業アジャイル勉強会LT大会-ペイフォワードのはなし製造業アジャイル勉強会LT大会-ペイフォワードのはなし
製造業アジャイル勉強会LT大会-ペイフォワードのはなしizumi ito
 
Big Raspberry Jam Tokyo 2013
Big Raspberry Jam Tokyo 2013Big Raspberry Jam Tokyo 2013
Big Raspberry Jam Tokyo 2013wakadannacom
 
Kansai Game Study 2019 Keiji Kikuchi
Kansai Game Study 2019 Keiji KikuchiKansai Game Study 2019 Keiji Kikuchi
Kansai Game Study 2019 Keiji KikuchiKeiji Kikuchi
 
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来馮 富久
 
はじめてのAzure Sphere
はじめてのAzure SphereはじめてのAzure Sphere
はじめてのAzure SphereTomokazu Kizawa
 
コワーキングアジアカンファレンス2013の作り方 〜インターネット編〜
コワーキングアジアカンファレンス2013の作り方 〜インターネット編〜コワーキングアジアカンファレンス2013の作り方 〜インターネット編〜
コワーキングアジアカンファレンス2013の作り方 〜インターネット編〜Kei Mikage
 
JEPA2017年年末イベントパネルディスカッション資料
JEPA2017年年末イベントパネルディスカッション資料JEPA2017年年末イベントパネルディスカッション資料
JEPA2017年年末イベントパネルディスカッション資料馮 富久
 
Deep Learning の落とし穴に落ちてみた2019
Deep Learning の落とし穴に落ちてみた2019Deep Learning の落とし穴に落ちてみた2019
Deep Learning の落とし穴に落ちてみた2019一成 真鍋
 
SpiderAFにおける機械学習を使った不正検知
SpiderAFにおける機械学習を使った不正検知SpiderAFにおける機械学習を使った不正検知
SpiderAFにおける機械学習を使った不正検知Spider Labs, Ltd.
 
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyoGitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyoYahoo!デベロッパーネットワーク
 
技術書典の被チェック数を計測してみた
技術書典の被チェック数を計測してみた技術書典の被チェック数を計測してみた
技術書典の被チェック数を計測してみた虎の穴 開発室
 

Similar to 【LT資料】GoでつくるCUIツール (20)

俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
 俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜 俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
俺が好きなのはJavaだけどJavaじゃない 〜虎の穴でのJava活用について〜
 
【LT資料】ラムダ式でDSL
【LT資料】ラムダ式でDSL【LT資料】ラムダ式でDSL
【LT資料】ラムダ式でDSL
 
インターネットを活用した“国内”テレワークの実際[電子出版事業編]2018
インターネットを活用した“国内”テレワークの実際[電子出版事業編]2018インターネットを活用した“国内”テレワークの実際[電子出版事業編]2018
インターネットを活用した“国内”テレワークの実際[電子出版事業編]2018
 
[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)
[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)
[X-Tech] アニメ・漫画 企業でITを活用してオタク業界の未来を変える取り組み (Anitech)
 
Alexaの電卓スキルを作ってみる
Alexaの電卓スキルを作ってみるAlexaの電卓スキルを作ってみる
Alexaの電卓スキルを作ってみる
 
Ionicを使ってスマホアプリを作ってみた
Ionicを使ってスマホアプリを作ってみたIonicを使ってスマホアプリを作ってみた
Ionicを使ってスマホアプリを作ってみた
 
スマホ業界とエンジニアのキャリア形成
スマホ業界とエンジニアのキャリア形成スマホ業界とエンジニアのキャリア形成
スマホ業界とエンジニアのキャリア形成
 
誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発誰でもできるGoogleアシスタント開発
誰でもできるGoogleアシスタント開発
 
Pepper君で即売会のお手伝い
Pepper君で即売会のお手伝いPepper君で即売会のお手伝い
Pepper君で即売会のお手伝い
 
製造業アジャイル勉強会LT大会-ペイフォワードのはなし
製造業アジャイル勉強会LT大会-ペイフォワードのはなし製造業アジャイル勉強会LT大会-ペイフォワードのはなし
製造業アジャイル勉強会LT大会-ペイフォワードのはなし
 
Big Raspberry Jam Tokyo 2013
Big Raspberry Jam Tokyo 2013Big Raspberry Jam Tokyo 2013
Big Raspberry Jam Tokyo 2013
 
Kansai Game Study 2019 Keiji Kikuchi
Kansai Game Study 2019 Keiji KikuchiKansai Game Study 2019 Keiji Kikuchi
Kansai Game Study 2019 Keiji Kikuchi
 
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
 
はじめてのAzure Sphere
はじめてのAzure SphereはじめてのAzure Sphere
はじめてのAzure Sphere
 
コワーキングアジアカンファレンス2013の作り方 〜インターネット編〜
コワーキングアジアカンファレンス2013の作り方 〜インターネット編〜コワーキングアジアカンファレンス2013の作り方 〜インターネット編〜
コワーキングアジアカンファレンス2013の作り方 〜インターネット編〜
 
JEPA2017年年末イベントパネルディスカッション資料
JEPA2017年年末イベントパネルディスカッション資料JEPA2017年年末イベントパネルディスカッション資料
JEPA2017年年末イベントパネルディスカッション資料
 
Deep Learning の落とし穴に落ちてみた2019
Deep Learning の落とし穴に落ちてみた2019Deep Learning の落とし穴に落ちてみた2019
Deep Learning の落とし穴に落ちてみた2019
 
SpiderAFにおける機械学習を使った不正検知
SpiderAFにおける機械学習を使った不正検知SpiderAFにおける機械学習を使った不正検知
SpiderAFにおける機械学習を使った不正検知
 
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyoGitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
GitHubを導入したいとき、どう説得していこう #GitHubSatelliteTokyo
 
技術書典の被チェック数を計測してみた
技術書典の被チェック数を計測してみた技術書典の被チェック数を計測してみた
技術書典の被チェック数を計測してみた
 

More from 虎の穴 開発室

Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する虎の穴 開発室
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴 開発室
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf虎の穴 開発室
 
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明虎の穴 開発室
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介しますDeno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します虎の穴 開発室
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –虎の穴 開発室
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと虎の穴 開発室
 
通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」虎の穴 開発室
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!虎の穴 開発室
 
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説虎の穴 開発室
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発虎の穴 開発室
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた虎の穴 開発室
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!虎の穴 開発室
 
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ虎の穴 開発室
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴 開発室
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜 虎の穴 開発室
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴 開発室
 

More from 虎の穴 開発室 (20)

FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化FizzBuzzで学ぶJavaの進化
FizzBuzzで学ぶJavaの進化
 
Railsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認するRailsのデバッグ どうやるかを改めて確認する
Railsのデバッグ どうやるかを改めて確認する
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴ラボ エンジニア採用説明資料 .pdf
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
 
toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明toranoana.deno #6 アジェンダ 採用説明
toranoana.deno #6 アジェンダ 採用説明
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介しますDeno 向け WEB 開発用のツールを作ったので 紹介します
Deno 向け WEB 開発用のツールを作ったので 紹介します
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
 
GCPの画像認識APIの紹介
GCPの画像認識APIの紹介 GCPの画像認識APIの紹介
GCPの画像認識APIの紹介
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
 
GitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼうGitHub APIとfreshで遊ぼう
GitHub APIとfreshで遊ぼう
 
通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」通販開発部の西田さん「通販開発マネジメントの5ルール」
通販開発部の西田さん「通販開発マネジメントの5ルール」
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
 
セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説セキュリティを強化しよう!CloudArmorの機能解説
セキュリティを強化しよう!CloudArmorの機能解説
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発JavaScript LT会 〜 React.js   Node.js歓迎 〜 Deno で やってみるweb開発
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
 
Amplify Studioを使ってみた
Amplify Studioを使ってみたAmplify Studioを使ってみた
Amplify Studioを使ってみた
 
いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!いいテスト会 (スプリントレビュー) をやろう!
いいテスト会 (スプリントレビュー) をやろう!
 
【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ【Saitama.js】Denoのすすめ
【Saitama.js】Denoのすすめ
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜	【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント 虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
 

Recently uploaded

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 

Recently uploaded (10)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

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

  • 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