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
Goで作るTUIツール / Building TUI Tools with Go
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
shiro seike
PRO
June 10, 2021
Programming
19
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで作るTUIツール / Building TUI Tools with Go
Go で TUI(ターミナルUI)ツールを作る方法を紹介した資料です。
shiro seike
PRO
June 10, 2021
More Decks by shiro seike
See All by shiro seike
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
620
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
160
Seeing Through Serverless: ADOT と CloudWatch Application Signals で実現する AWS Lambda のオブザーバビリティ(日本語版)/ Seeing Through Serverless (Japanese Edition)
seike460
PRO
1
31
モノレポの型は、そのままつながる 〜Hono RPCで型を素通しする開発体験〜 / Monorepo Types Connect As-Is: Passing Types Through with Hono RPC
seike460
PRO
1
39
OSSのコンセプトを知る / Understanding the Concept Behind an OSS
seike460
PRO
1
38
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
660
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
490
実行委員長目線で振り返る JAWS DAYS 2026 / JAWS DAYS 2026 from the Chair's Perspective
seike460
PRO
1
38
SLO から始める SRE / Starting SRE with SLO
seike460
PRO
1
120
Other Decks in Programming
See All in Programming
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
320
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
140
Turning Architecture into Unit Tests in the AI Era (NSSpain XIV)
steliosf
PRO
1
120
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
400
JPUG勉強会 OSSデータベースの内部構造を理解しよう(第2回)
oga5
0
280
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
180
iOSDCのペンライトを自動制御したい!
akkeylab
0
280
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
410
GemmaをJevのように使ってみる / Use Gemma like Jev
kishida
4
410
GitHubハンズオン講座 — 実務レベルのチーム開発のフローを身につけよう
junhat6
0
110
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
9
5.2k
一人だけ、Kiroが静止する日
hideg
0
140
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
600
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
550
Navigating Team Friction
lara
192
16k
Music & Morning Musume
bryan
48
7.4k
Raft: Consensus for Rubyists
vanstee
142
7.7k
Abbi's Birthday
coloredviolet
4
10k
GitHub's CSS Performance
jonrohan
1033
470k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
710
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Transcript
Goで作るTUIツール Fukuoka.go #16 2020.07.14 清家 史郎 1
自己紹介 - ID - - Work at - - 清家
史郎 seike460 Github:seike460 Twitter:@seike460 株式会社 Fusic (フュージック) 技術開発本部/技術開発第一部門 ▪ エバンジェリスト ▪ チームリーダー ▪ プリンシパルエンジニア Skill - PHP Go AWS 2
TUI
TUIとは テキストベースのユーザインタフェース - グラフィカルユーザインタフェース (GUI) が考案された後に名づけられた レトロニムであり、テキストベースのユーザインタフェースを区別して 呼ぶための名称である(Wikipediaより転載) - Terminalから出たくない族からすると非常にありがたいインターフェース
- git - lazygit top - htop Docker - dry 4
tview GoでTUIを作るぞ!
github.com/mattn/go-pipeline #mercarigo「プログラミング言語Go完全入門 質問会 2020.6.3」に参加 「tviewを使ってみたくてTODOツールを作った話」@bluemon0919さん - - いい感じのTUIを簡単に作れるツールをご紹介 - 試してみた所、非常に手軽に使えそうだった
- 二番煎じではあるけど、かなりいい感じだったので改めて紹介したい tview - terminal based user interfaces 6
利用イメージ AWS Service 利用するサービス Target 処理対象バケット Objects バケット内のファイル 左で選択されたもので 次の選択肢を表示していく
7
画面構成部分のコード app := tview.NewApplication() serviceList := tview.NewList() ▪一番左のリスト serviceList.SetTitle("- AWS
Service -").SetBorder(true) ▪タイトルとボーダーをつける bucketsList := tview.NewList() ▪真ん中のリスト bucketsList.SetTitle("- Target -").SetBorder(true) objectList := tview.NewList() ▪右のリスト objectList.SetTitle("- Objects -").SetBorder(true) flex := tview.NewFlex(). // FlexタイプのBox AddItem(serviceList, 20, 0, true). // 固定値20, 均等割合 0, Focusを当てる AddItem(bucketsList, 0, 1, false). // 固定値0 , 均等割合 1, Focusを当てない AddItem(objectList, 0, 2, false) // 固定値0 , 均等割合 2, Focusを当てない 8
項目追加とクリックイベント serviceList.AddItem(" S3 ", " Objects Storage ", 0, func()
{ Serviceリストに追加 ▪主要テキスト、サブテキスト、ショートカット用rune、クリック時関数 s := awsservice.NewS3() ▪ AWS接続のための構造体 buckets, _ := s.ListBuckets() ▪ バケットの取得 bucketsList.Clear() ▪ Listのクリア for _, val := range buckets.Buckets { bucketsList.AddItem(*val.Name, *buckets.Owner.DisplayName, 0, func() { bucketリストに追加 ▪バケット名、オーナー、なし、クリック時関数 bucketFunc(objectList, bucketsList, s, app) // }) } app.SetFocus(bucketsList) ▪ bucketリストにFocusを合わせる }) ----------------------------------------------func bucketFunc(objectList *tview.List, bucketsList *tview.List, s awsservice.S3, app *tview.Application) { objectList.Clear() // List クリア itemText, _ := bucketsList.GetItemText(bucketsList.GetCurrentItem()) ▪選択されているバケットテキスト取得 objects, _ := s.ListObjects(itemText) ▪バケット内ファイルを取得 for _, v := range objects.Contents { objectList.AddItem(*v.Key, v.LastModified.Format("2006/01/02 15:04:05"), 0, nil) ▪Objectsリストに追加 } app.SetFocus(objectList) ▪ ObjectsリストにFocusを合わせる } 9
github.com/rivo/tview - 大変な画面調整をいい感じにコントロールしてくれる - 各種イベントに応じて実行する関数を簡単に割り当てれる - - 実際の処理を書くのも簡単 モーダル、ボタン、テキスト入力などの機能も有するので 高機能なTUIが簡単に提供出来る
- - UI部品はこのサンプルで確認する事が出来ます 「何かを作ってみよう」の受け皿になってくれる サンプルコードレベルですが公開しております github.com/seike460/caws 10
余談 - Goの社内勉強会を初心者向けにやってみた - Welcome to a tour of Go
- プログラミング言語Go完全入門 - 上記をひたすら読み物として読むだけだとモチベーションの低下が見られた - 最初は手を動かしながら学ぶのが良さそう! - tview使って簡単なツールを作るのいかがでしょうか!!(こじつけ) 11
Thank You ご清聴いただきありがとうございました We are Hiring ! https://recruit.fusic.co.jp/