Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ruby x Terminal
Search
Akira Matsuda
February 21, 2026
Programming
620
7
Share
Ruby x Terminal
出雲Ruby会議01の招待講演「Ruby x Terminal」の発表スライド
https://regional.rubykaigi.org/izumo01/
#izumork01
Akira Matsuda
February 21, 2026
More Decks by Akira Matsuda
See All by Akira Matsuda
初心者のためのRubyKaigi入門/RubyKaigi Introduction
a_matsuda
15
7.7k
Hanamiを支える技術 2023 / Asakusa.rb Hanami 2023
a_matsuda
2
790
Rails 7.1をn倍速くした話
a_matsuda
11
13k
RubyKaigi 2022 After Talk
a_matsuda
0
530
Coming Soon…💎 / coming soon
a_matsuda
12
8.5k
Rails Performance Issues and Solutions
a_matsuda
9
39k
Extending Rails for Real World App Development
a_matsuda
9
8k
A RubyKaigi Talk
a_matsuda
8
2.7k
Ginza Rails 1
a_matsuda
6
1.4k
Other Decks in Programming
See All in Programming
最初からAWS CDKで技術検証してもいいんじゃない?
akihisaikeda
4
180
車輪の再発明をしよう!PHP で実装して学ぶ、Web サーバーの仕組みと HTTP の正体
h1r0
2
480
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
260
Feature Toggle は捨てやすく使おう
gennei
0
400
AIと共にエンジニアとPMの “二刀流”を実現する
naruogram
0
120
Coding at the Speed of Thought: The New Era of Symfony Docker
dunglas
0
4.3k
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
320
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
170
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.2k
ポーリング処理廃止によるイベント駆動アーキテクチャへの移行
seitarof
3
1.3k
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
180
Strategy for Finding a Problem for OSS: With Real Examples
kibitan
0
130
Featured
See All Featured
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
460
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
Docker and Python
trallard
47
3.8k
The Cost Of JavaScript in 2023
addyosmani
55
9.8k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Rails Girls Zürich Keynote
gr2m
96
14k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
640
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
190
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
160
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.3k
Transcript
Ruby x Terminal @a_matsuda / 出雲Ruby会議01 1 / 127
self ・Ruby/Rails ・RubyKaigi主催 ・Asakusa.rb主催 ・最後のRuby Hero ・2代目Rails Luminary ・武将系プログラマー 2
/ 127
ターミナルの話 3 / 127
開発環境現状確認 2026 4 / 127
最近のターミナルエミュレーター ・iTerm2 ・alacritty ・WezTerm ・kitty ・ghostty 5 / 127
kitty ちょっと前までWezTermを使ってて、 去年からghosttyに乗り換えてたんだけど、 一昨日からkitty使ってます 6 / 127
Why kitty? 7 / 127
kitty "The text sizing protocol" 8 / 127
The kitty text sizing protocol ・https://github.com/kovidgoyal/kitty/issues/8226 ・去年提案されて実装された新機能 ・OSC Escape Code
でテキストのサイズを指定できるようになった 9 / 127
デカい文字! 10 / 127
デカい文字! もっとデカい文字! 11 / 127
デカい文字! すごくデカい文字! 12 / 127
Markdown描画がはかどる! 13 / 127
他のターミナルたちも追随するか 現状まだその動きはなさそう 14 / 127
なのでkitty 15 / 127
kitty でもなー、Pythonなんだよなー 16 / 127
とか思いつつ、 17 / 127
もしかして これならいい感じのプレゼンツールも作れる! 18 / 127
ので作った ・昨日から ・プレゼンの準備を始めようと思ってまずプレゼンツールを作り始めちゃうっ ていうよくあるやつ 19 / 127
przn ・https://github.com/amatsuda/przn ・すごい投げやりな名前…… 20 / 127
Structure ・parser.rb: Markdownをパースしてデッキを構築 ・controller.rb: キー入力を受け付けてコマンドを発行 ・terminal.rb: io-consoleでターミナルに描画 21 / 127
md記法はだいたいRabbit準拠 (ところどころイマイチ感はあるんだけど) 22 / 127
io-console ・なかなかコード例が見当たらない気がしていて、あんまり使われてないのか も? ・Rubyの標準ライブラリ ・consoleでちょっと遊ぶのに便利 ・nobuの代表作 23 / 127
io-console ・なかなかコード例が見当たらない気がしていて、あんまり使われてないのか も? ・Rubyの標準ライブラリ ・consoleでちょっと遊ぶのに便利 ・nobuの代表作 24 / 127
io-consoleで遊んでみよう 25 / 127
Demo ruby demo/ioconsole/tetris.rb 26 / 127
ちょっとコードを見てみる 27 / 127
Rubyでターミナルで何かするやつ ・io-console ・Curses ・Reline 28 / 127
Curses ・CursesのRubyバインディング ・shugomaedaがメンテしている ・テキストエディタが作れる ・もちろんテトリスも作れる 29 / 127
Demo ruby demo/curses/tetris.rb 30 / 127
もう1個Cursesで昔作ったもの 31 / 127
ファイラー ・MacでいうところのFinder.app ・Finder.app => 使いにくくて論外 ・昔のWindowsのexplorer.exeが一番よかったよなあ ・それを言ったら、その前のMS-DOS時代のファイラーが個人的には原体験 32 / 127
FD 当時のパソコンユーザーは全員使ってたはず 33 / 127
rfd ・https://github.com/amatsuda/rfd ・FDみたいなやつ ・Vimっぽい操作感 ・pure Ruby ・Curses 34 / 127
Demo 2 rfd 35 / 127
Rubyでターミナルで何かするやつ ・io-console ・Curses ・Reline 36 / 127
Reline ・pure RubyのReadline実装 ・keijuさんが"Reidine"として着想(おそらく未完) ・itoyanagiさんが"Reline"という名前で実装 ・irbのバックエンド ・現在はirbチームでメンテ中 37 / 127
Readline ユーザーからのキー入力に際してターミナルエミュレーターとシェルの橋渡し をするやつ 38 / 127
"Reidine"とはなんだったのか Reishの一部 39 / 127
Reish ・https://github.com/keiju/reish ・pure Rubyのシェル ・Rubyっぽい独自のシェル文法を持ったシェル 40 / 127
Reidline ・シェルを作るには、まずはpure Ruby Readlineが必要! ・とか言って作り始めて、沼にハマって帰ってこなかった…… 41 / 127
Reline ・itoyanagiさんが馬力を発揮してReidlineと同じコンセプトのものを作 りきっちゃったやつ ・irbのバックエンドに標準搭載 42 / 127
Demo ruby demo/reline/tetris.rb 43 / 127
Demo 2 irb 44 / 127
シェル 45 / 127
主なモダンシェル ・bash ・zsh ・fish 46 / 127
bash ・標準のやつ ・これが標準じゃないOSはほぼ絶滅した感があるので、天下統一を成し遂げ たシェルと言ってよいのでは 47 / 127
zsh ・モダンshellの極み ・細やかなカスタマイズ ・高度な補完システム ・プラグイン機構 ・shellのプラグインという新しい世界を作った 48 / 127
ところで、シェルの役割とは ・対話環境 ・スクリプティング言語 49 / 127
「シェル言語」 ・むしろこっちが本業 ・対話環境ってのは、シェル言語を1行1行プロンプトから手打ちして実行で きるモードみたいなもん ・というのがわかれば、コマンドが正常終了した時に何も言わないのがデフォ ルトなのも納得できる 50 / 127
シェル言語の肝 パイプライン 51 / 127
シェル言語の制約 ・パイプラインベースという設計から来る ・入出力に型がない ・全てがString ・コマンドやfunctionの引数は全部string ・STDOUTへのアウトプットはStringの配列 ・つまりパイプからの入力はStringの配列 ・そういえばちょうどwebの世界によく似てる気がしませんか? ・演算、型変換あたりの無理矢理っぷりがひどい ・testコマンドとかいうゴミ溜めみたいなコマンド
52 / 127
testコマンド bashなどでは内部コマンド 53 / 127
testコマンドの基本機能 % test 1 = 1 % echo $? 0
% test 1 = 2 % echo $? 1 54 / 127
[ というトリッキーな別名 % if [ "$FOO" = "hello" ]; then
> echo true > fi 55 / 127
testコマンド ・変数の値を比較するときに空文字だったら死ぬのを回避するクオートってい うイディオム ・ちなみにさっきの1 = 1は文字列比較で、数値比較したかったら -eq オプ ションを使う 56
/ 127
他にも無数のオプション ・-e: ファイルの存在確認 ・-f: 通常ファイルの存在確認 ・-d: ディレクトリの存在確認 ・-r: 読み込み可能かどうか ・-z:
文字列が空かどうか ・-n: 文字列が空でないかどうか ・-a: AND ・-o: OR ・などなどなどなど 57 / 127
あまりに複雑怪奇で ・絶対覚えられないし読めないしとてもよくバグる ・このへんは型がないことの弊害だよなあ 58 / 127
余談 ・シェルの世界に型の概念を持ち込もうとしたPower Shellってのがあるに はあった ・パワーが足りなかった 59 / 127
ともあれ、 60 / 127
zsh vs fish 61 / 127
zsh ・究極のシェルを目指して作られたやつ ・対話環境 => bashがデフォルトで便利でおせっかいになった感じ? ・スクリプティング言語 => bashを部分的にちょっと便利にした感じ ・とにかく多機能で細やかなカスタマイズができるけど、逐一設定が必要 62
/ 127
fish ・zshを踏まえたさらにモダンでopinionatedなシェル ・強力なfunction ・アグレッシブな補完とかサジェスト ・設定ファイルの細分化 ・プラグインも健在 ・いちいち設定しなくても、デフォルトでそこそこ便利に使える ・もっさりしてて使いもんにならないやつ、って印象だった 63 /
127
fish ・対話環境 => bashがデフォルトでいろいろ便利でカラフルでおせっかいに なった感じ? ・スクリプティング言語 => なぜか新しく設計された別言語 64 /
127
は? 65 / 127
🐡の致命的にダメなところ スクリプトがbash互換じゃない!!! 66 / 127
fish言語 ・bashのダメなところを改良したいきもち ・気持ちはわかる ・センス悪っ! ・使いにくい 67 / 127
で、結局、理想のシェルってなくない? 68 / 127
じゃあ自分で作るか 69 / 127
理想のシェル やっぱRubyっぽい何かが喋れてほしい 70 / 127
Reish Again 71 / 127
Reish Again irbを作ったkeijuさんですら完成させられなかったものをなぜ僕が作ろうと 思ったか 72 / 127
やっぱAI? 今ならコードは全部AIに書かせれるので…… 73 / 127
進捗 ・今年の1月1日に書き始めて、2週間後ぐらいにはだいたい動くものができた ・それ以降ずっと自分のメインのログインシェルとして使ってる 74 / 127
特徴 ・シェル言語はbashの完全互換 ・動かないbashスクリプトがあったらバグとみなす ・ところどころにRubyテイストな拡張 ・機能としては一見zsh程度には高機能なはず ・デフォルトでだいたい便利に使える感じ 75 / 127
当たり前の便利機能 ・プロンプト ・デフォルトでとてもかしこい補完 76 / 127
Demo cd cd ~ git gem bundle rbenv 77 /
127
Rubyテイスト ・if, elif, fi => if, elsif, end ・ブロックの導入 ・メソッドチェイン
・lambdaリテラル ・p でinspect ・Rubyの定数参照 ・その他いろんな実験機能(詳細は省略) ・遅い処理はバックグラウンドで。RubyにはThreadがあるので。 78 / 127
ブロック ・if とかが { } を取れて、Rubyで条件が書ける ・謎のtestコマンドを全て忘れてよい ・Enumerator ・each, select,
map ・暗黙のit 79 / 127
Demo if { 1 + 1 == 2 } echo
"1 + 1 is 2" end 80 / 127
見どころ ・if文が読める!書ける! ・ifがendで終わってる! 81 / 127
メソッドチェイン ・メソッド呼び出しに()をつけても良い ・パイプはメソッドチェインでも書ける 82 / 127
Demo ls(/usr/bin).select { it.start_with? 'a' } 83 / 127
メソッド? 84 / 127
Demo def hoge 'hoge' * 2 end 85 / 127
定数参照 ・UNIXで大文字はじまりのコマンドはない ・ので、大文字はじまりだったらRubyの定数への参照とみなす ・組み込みrequireコマンドでgemなどをrequireできる 86 / 127
Demo Time.now 87 / 127
Demo Date.today 88 / 127
did_you_meanインテグレーション 89 / 127
Demo なんかtypo 90 / 127
実装 91 / 127
Rubyエコシステムの巨人の肩 Reline FiltUtils Open3 thread did_you_mean などなど 92 / 127
TODO ・細かいバグはまだまだ ・処理中に叩いたキーがうまくバッファリングされてないとか ・タブ補完をもうちょいいい感じにしたい (Relineにパッチsubmit済み) ・builtin peco (Relineにパッチ書かなきゃ) ・Rubyとのさらなるインテグレーション 93
/ 127
Repo ・https://github.com/amatsuda/rubish 94 / 127
名前問題 rubishって名前で作ってたんだけど、gemとしては既存だった…… 95 / 127
Reishインスパイア ・ponsh ・kansh ・junmaish ・ginjoush ・jukuseish 96 / 127
"system ruby"問題 ・rbenvとかロードする前なので、シェル自体の動作にはsystem Rubyが使 われる ・Macだと2.6系 ・ちょっと古い 97 / 127
今後の展望 ・ターミナルインテグレーション ・こぴぺとかをキーボードから手を離さずにやりたい ・GNU Screenてきな? ・直前のコマンドの標準出力からpecoできるぐらいでよい 98 / 127
シェルではどうしようもない領域 ・ターミナルエミュレーターのおしごと ・たとえばkittyは独自でなんかやってる 99 / 127
kitty やっぱkittyかぁ 100 / 127
kitty でもなー、Pythonなんだよなー 101 / 127
Python? てーか、Pythonで作れるならRubyでも作れるんでは?💡 102 / 127
作り始めました(昨日) 103 / 127
Echoes ・https://github.com/amatsuda/echoes ・pure Rubyターミナルエミュレーター ・今のところMacのみ ・Vimとかまだ表示がぶっ壊れてる ・シェルは動く ・プレゼンも動く ・テトリスも動く 104
/ 127
pure Rubyターミナルエミュレーター 正直、速度面とかではガチのやつらに勝てる気はしない 105 / 127
ではなぜ作るのか 106 / 127
今後の展望 シェルインテグレーション 107 / 127
インテグレーション ・連携とかめんどくさいから、1個のRubyプロセスで完結しちゃえばいいんじ ゃ? ・シナジーってやつ? 108 / 127
そこまでやるなら ・Rubyで書かれたエディタもインテグレーションしたい ・あとGitインテグレーションとか? 109 / 127
時代はフルスタック ・ターミナル・シェル・エディタでいちいち分かれてるから不便 ・疎結合よりフルスタックのほうがつよい ・Railsが証明してくれた 110 / 127
あれ、それってもしかしてIDE? ・ひとつのプロセスでシェルもエディタもターミナルもGitも ・自分が何を作りたいのかだんだんわからなくなってきた…… 111 / 127
まとめ 112 / 127
開発環境現状確認 2026 全部作ってる 113 / 127
全部作ってる ・他人のソフトウェアに対して文句言ってぐらいだったら自分で作ればいいじ ゃん ・実際にそれが実現できてしまう武器を僕らは手に入れつつある 114 / 127
AIの話 115 / 127
「AIすごいすごい」 そうだね 116 / 127
AI ・コードは正直読めたもんじゃない ・設計もぐちゃぐちゃ ・でもなんか動く ・思いついたものがとにかく作れる 117 / 127
AI時代のコーディング ・みんな同じAIを使うからアウトプットも差がつかなくなる ・っていうふうにはなってない ・現時点では 118 / 127
将棋界が10〜5年前ぐらいに通った道 ・いわゆるAIシンギュラリティ ・その結果、将棋がつまらなくなったか? 119 / 127
AI時代の将棋 ・藤井聡太のようなAI時代の申し子が現れて、むしろ最高にレベルアップし た ・空前の将棋ブーム ・同じようにAIを活用して研究してても「棋風」の差はめちゃめちゃ出る 120 / 127
AI時代のコーディング ・イメージ ・デザイン 121 / 127
いちカンファレンス主催者として ・テックカンファレンスでAIがまったく視界に入ってないフリをするのも不 自然 ・自分ではめっちゃ使ってるし 122 / 127
RubyKaigiがAIの話ばっかりになっちゃう ? ・その心配はしなくて良いと思ってます ・「AI使いこなし術」みたいな話はどうせ全部落とすんで 123 / 127
テックトークで本当に聞きたい話 ・どういう問題を発見したか ・それをどうやって(Rubyで)解決したか ・AIを使ったか使ってないかはどうでもいい ・ただ、AIをうまく使うとコンセプトを実現するスピードをブーストはで きそう 124 / 127
まとめ 125 / 127
開発環境現状確認 2026 全部作ってる 126 / 127
全部作ってる ・ぜひご利用ください ・または、皆さんもご自分でいろいろ作ってみるのをお勧めします 127 / 127