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
shiro seike
PRO
June 10, 2021
Programming
21
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
1.1k
Seeing Through Serverless: Observability for AWS Lambda with ADOT and CloudWatch Application Signals
seike460
PRO
1
170
Seeing Through Serverless: ADOT と CloudWatch Application Signals で実現する AWS Lambda のオブザーバビリティ(日本語版)/ Seeing Through Serverless (Japanese Edition)
seike460
PRO
1
43
モノレポの型は、そのままつながる 〜Hono RPCで型を素通しする開発体験〜 / Monorepo Types Connect As-Is: Passing Types Through with Hono RPC
seike460
PRO
1
51
OSSのコンセプトを知る / Understanding the Concept Behind an OSS
seike460
PRO
1
52
型も通る、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
690
コミュニティの有益性 ~JAWS Days 2026 での体験を通して~ / The Benefits of a Community ~Through My Experience at JAWS Days 2026~
seike460
PRO
0
500
実行委員長目線で振り返る JAWS DAYS 2026 / JAWS DAYS 2026 from the Chair's Perspective
seike460
PRO
1
44
SLO から始める SRE / Starting SRE with SLO
seike460
PRO
1
120
Other Decks in Programming
See All in Programming
AI-Powered Domain-Driven Design
ziobrando
0
200
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
3
1k
sbt 2.0: takeoff
eed3si9n
0
170
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
410
JIS keyboard support in Omarchy
lef237
0
150
Event is what happens
moro
2
1.2k
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
310
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
190
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
880
GraphQL の onError と Nullability のこれから
quramy
0
150
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
270
[2026-09-26]空論ジェネリックプロセス~テスト資産とAIで紡ぐ、再現可能なパフォーマンスチューニングの話~
tosite
0
270
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
529
40k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.4k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
310
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Tell your own story through comics
letsgokoyo
1
1.1k
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
570
Making the Leap to Tech Lead
cromwellryan
135
10k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.8k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
550
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
380
The Art of Programming - Codeland 2020
erikaheidi
57
14k
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/