SlideShare a Scribd company logo
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 Kikuchi
Keiji Kikuchi
 
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
Gihyo Digital Publishing10年の歩み~専門書・専門雑誌の電子出版の過去・現在・未来
馮 富久
 
はじめてのAzure Sphere
はじめてのAzure SphereはじめてのAzure Sphere
はじめてのAzure Sphere
Tomokazu 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を導入したいとき、どう説得していこう #GitHubSatelliteTokyo
Yahoo!デベロッパーネットワーク
 
技術書典の被チェック数を計測してみた
技術書典の被チェック数を計測してみた技術書典の被チェック数を計測してみた
技術書典の被チェック数を計測してみた
虎の穴 開発室
 

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 虎の穴 開発室

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%!リモートワークを可能にするマネージメント
虎の穴 開発室
 

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年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
atsushi061452
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 

Recently uploaded (15)

2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 

【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