RubyKaigi 2019に参加していました

遅くなりましたが、福岡国際会議場で2019/04/18(Tue) - 4/20(Sat)に開催されたRubyKaigi 2019に参加しました。

rubykaigi.org

業務の都合で4/18は不参加でしたが、4/19, 4/20の2日間で10以上のセッションを拝聴しました。

参加してみての感想

過去にPHPカンファレンス福岡やBuildersconなどに参加したことがありますが、RubyKaigiは1000人規模のイベントで自分が過去に参加したカンファレンスの中で一番規模が大きいもので、参加人数も多いだけにかなり熱いイベントでした。

今年は福岡での開催でしたが、本編だけでなく初日のOfficial Partyは中洲川端商店街を貸し切って行っていたりと運営の本気さを感じたり、会場内の各企業ブースも気合が入っていて様々なノベルティを用意してくださっており、それらを見て回るのもすごく楽しめました。

今回、福岡での開催だったこともありかなり気軽に参加できたのですが、来年は長野の松本市での開催ということですが、機会があればまた参加してみたいと思いました。

印象に残ったセッション

最終日の最終セッションだったRubyの最適化周りについてのセッションは内容的にかなり印象的でしたが、 Optimization Techniques Used by the Benchmark Winners - RubyKaigi 2019

最適化周りでいうと個人的にはMessagePack-Rubyの話も大変面白かったです。
Performance Optimization Techniques of MessagePack-Ruby - RubyKaigi 2019

そして個人的に自分が一番印象に残ったセッションのタイトルはTerminal cursesでした。 理由としては普段の業務でターミナルをよく使っているため身近なものであったということがあります。
Terminal curses - RubyKaigi 2019

内容としては、前半はターミナルについての入門的な説明で、後半はcursesを使ったTUIを実装するための実装例の紹介でした。

また、発表自体もテキストエディタを使って発表されていて面白かったです。 github.com

まだ5/12日時点ではこのセッションの動画は公開されていませんが、Hall AでのセッションはYoutubeですべて公開されていそうでした。 www.youtube.com

RubyKaigi後

Terminal cursesというセッションを聴いたあと、発表内容で出てきた端末についてや、普段何気なくターミナル上でコマンド実行していたのですが、その処理の全体像についてについて調べたことを簡単にまとめてみました。

TLDR

  • SSH接続したサーバ上では/dev/pts/Xというデバイスファイルでサーバに端末(ターミナル)が認識されている
    • $ ttyコマンドで現在のptsがわかる
  • ターミナル上での標準入出力
  • 標準入出力とファイルディスクリプタ

端末(ターミナル)の種類

  • tty
    • 物理端末
  • pts
    • 仮想端末
    • SSH接続した際に表示されるターミナルはpts端末として接続したサーバ上で扱われる
    • 動作としてはttyと同じ

VagrantCentOS 7を起動後、vagrant ssh後にtty実行してみた結果

[vagrant@server01 ~]$ tty
/dev/pts/0

さらにもう1つターミナル開いてsshしてttyした

[vagrant@server01 ~]$ tty
/dev/pts/1

参考: ttyとptsとptmxとpty - tweeeetyのぶろぐ的めも

標準入出力

  • Linuxのキーボードでの入力は標準入力にデフォルトで紐付けられているため、普通に文字を入力するとターミナル上に入力文字が表示される
  • Linuxの標準出力はデフォルトでターミナルに紐付けられているため、$ echo fooなどの実行結果がターミナル上に出力される

Linuxターミナル、コマンドtips その3: stdin, stderr, stdout, リダイレクト, パイプ - 百日半狂乱

標準入出力とファイルディスクリプタ

ファイルディスクリプタについて理解する - Qiita

ファイルディスクリプタとプロセスの関係性

  • ファイルディスクリプタはプログラミングする上で普段はあまり意識しなくてよい
  • しかしプロセスをForkして処理を実行するようなプログラムを作る場合には意識しておく必要がある
    • プロセスをForkする際にファイルディスクリプタが複製される
    • ファイルディスクリプタLinux上で開ける数に制限がある
    • 一般的にこの辺を意識するプログラムと言ったらWebサーバのプロセスくらいだろうか?というイメージ

http://shinpeim.github.io/process-book/

まとめ

入出力周りはまだまだ面白そうなことがありそうなのでもっとLinuxの内部的なところを調べて行きたい