SlideShare a Scribd company logo
インタフェースの
Sansan株式会社さまオフィス
(株) 永和システムマネジメント
アジャイル事業部
Ruby x Agile グループ
伊藤 浩一 (@koic)
2015.05.15 (Fri)
Ruby合同勉強会@Sansan
From IDE to Terminal
こころHead First Readline
http://www.ruby.or.jp/ja/news/20150326_2.html
Computer programmer, guitarist.
Leader of an Agile software development team
at Eiwa System Management, Inc.
Lives in Shinjuku.
@koic photo token by @NaCl
COMING SOON!	

http://agile.esm.co.jp/cases/sansan.html にて公開予定
インタフェースのこころ
インタフェースのこころ
インタフェースのこころ
今日の話
インタフェースのこころ
GUIのメリットはYSIWYG̶What You
See Is What You Get (見たとおりのも
のが結果を得られる) ーというものです。そ
してデメリットはWYSIAYGーWhat You
See Is All You Get (見たとおり以上のも
のは得られない) ーなのです。
21. コマンド・シェルの力を使うこと
『達人プログラマー』78 ページより抜粋
GUIが使えない場合
はシェルを使う。
「黒い画面」の異名で有名
入力インタフェースと
実装インタフェース話
http://ja.wikipedia.org/wiki/GNU_readline
•#1 入力インタフェース
•#2 Ruby標準ライブラリ
•#3 異言語バインディング
Readlineの歩き方
#1
•#1 入力インタフェース
•#2 Ruby標準ライブラリ
•#3 異言語バインディング
Readlineの歩き方
• 人とコンピュータのインタフェース
• 考えるために考えない by @mtsmfm
• 「思考の速さで入力する」
• キーバインディング重要、ショートカット重要
• 如何に指の筋肉運動を変えずに操作するか?
• コマンドラインに限らず、Readline のインタフェー
スで操作できるアプリケーションがさりげなくある
入力デバイスの重要性
https://speakerdeck.com/mtsmfm/find-your-favorite-tools?slide=26
• Ctrl+a (行頭へ移動)
• Ctrl+e (行末へ移動)
• Ctrl+f (1文字進む)
• Ctrl+b (1文字戻る)
• Ctrl+p (入力履歴を戻る)
• Ctrl+n (入力履歴を進める)
• Ctrl+h (現直前の文字削除)
• Ctrl+l (画面をクリアする)
私がターミナルでよく使う行内編集
• Ctrl+r (入力履歴から補完)
• Meta+f (1ワード進む)
• Meta+b (1ワード戻る)
• 入力中のCtrl+d (現位置削除)
• Ctrl+k (現位置以降を行末ま
で削除してバッファへ)
• Ctrl+y (バッファを貼付ける)
ほかにあったかな?
ショートカット
は早く覚えた
分効果も高い
https://twitter.com/koic/status/18370534918
ちなみにデフォルト
ではEmacsという
エディタの操作らし
いですよ (ステマ)
インタフェースのこころ
#2
•#1 入力インタフェース
•#2 Ruby標準ライブラリ
•#3 異言語バインディング
Readlineの歩き方
http://docs.ruby-lang.org/ja/2.2.0/library
http://docs.ruby-lang.org/ja/2.2.0/class/Readline.html
https://github.com/koic/acappella/commit/bbebaa99cea88c1559e683a8739112ed08977187?diff=split
インタフェースのこころ
#3
•#1 入力インタフェース
•#2 Ruby標準ライブラリ
•#3 異言語バインディング
Readlineの歩き方
異世界を繋げる
バインディング
インタフェース
https://github.com/ruby/ruby/blob/ruby_2_2/ext/readline/readline.c
ruby.h
readline.c
C言語による拡張実装の世界
Client Readline
<<ruby>>
Rubyの世界
C言語実装をRubyのインタフェース実装で使えるようにアダプタされてる
Readlineの作り概要
※1…readline.hは環境により互換実装editlineが使われる
※2…ruby.h直接ではなくinternal.h経由で読んでる
(internal.hは外に使わせないヘッダっぽい。理解が足らず)
readline/
readline.h
<<readline>>
ロードパスに含まれた.rbに継ぎ
.so, .bundle, .dllを読む
ビルドによる越境
※1
※2
世界を渡る
時の決め事
http://ja.wikipedia.org/wiki/%E5%A4%A7%E8%88%AA%E6%B5%B7%E6%99%82%E4%BB%A3#/media/File:CantinoPlanisphere.png
Cの変数には型があり,データには
型がありません.(中略) 逆にRuby
の変数には型がなく,データに型が
あります.この違いのため,Cと
Rubyは相互に変換しなければ,お
互いのデータをアクセスできません.
https://github.com/ruby/ruby/blob/trunk/doc/extension.ja.rdoc
• 用途
• 既存のC言語ライブラリを使いたいとき
• 開発速度を犠牲にしても実行速度を得たいとき
• RubyのAPIの知識、考え方を流用可能 (呼び出し方はC言語の流
儀に乗る)
• メモリ管理をRubyの処理系に任せられたり、そうじゃなかったり
• Rubyの拡張を C言語で書くなら、こうあって欲しいのインタ
フェースになっている
C言語による拡張
readline.c
https://github.com/ruby/ruby/blob/ruby_2_2/ext/readline/readline.c#L1800
• void Init_readline(void) がライブラリ定義のエン
トリ
• Rubyは拡張ライブラリをロードする時に「Init_ラ
イブラリ名」という関数を自動的に実行します (中略)
この関数の中でクラス,モジュール,メソッド,定数
などの 定義を行います.
• 組み込みライブラリの String であれば、string.c
に void Init_string(void) という具合になっている
ライブラリ定義の入り口
https://github.com/ruby/ruby/blob/ruby_2_2/ext/readline/readline.c#L1800
(extension.ja.rdoc より抜粋)
モジュール定義
https://github.com/ruby/ruby/blob/ruby_2_2/ext/readline/readline.c#L1828
https://gist.github.com/koic/cf46eccf3cc6e7c066fe
C言語の関数でありながら
Rubyのインタフェースに
置き換えて考えられる
• メソッド名と実装の関数を紐付ける
インターフェイスの三原則
『インターフェイス指向設計』15 ページより抜粋
• 原則1 インターフェイス実装は、そのメソッ
ド名が示す通りの処理をしなければならない
• 原則2 インターフェイス実装は他に危害を加
えてはならない
• 原則3 インターフェイス実装は、責務を果た
せない場合にそれを呼び出し元に伝えねばな
らない
驚き最小の
原則
Principle of Least Surprises
Rubyに慣れた人にとっての
(入り口は><)
Ruby拡張ライブラリ
流儀
C言語で構成されたフレームワークの世界
郷に入っては郷に従え
TO
 BE
 CONTINUED
予習復習研究はこちら
http://www.amazon.co.jp/dp/4274066428
プログラミングRuby 第2版 言語編
Rubyのしくみ
-Ruby Under a Microscope-
http://www.amazon.co.jp/dp/4274050653
Rubyソースコード完全解説
http://www.amazon.co.jp/dp/4844317210
青木 峰郎 (著), まつもと ゆきひろ (監修)
Dave Thomas (著), Chad Fowler (著), Andy Hunt (著),
田和 勝 (翻訳), まつもと ゆきひろ (翻訳)
Pat Shaughnessy (著), 島田 浩二 (翻訳), 角谷 信太郎 (翻訳)
おわりに
http://fkino.net/20150225.html

More Related Content

PDF
受託開発とRubyGems
PDF
The World is Connected
PDF
JavaからRubyへの変遷を約10年見てきて、プロジェクトで変わったこと、変わっていないこと12集
PDF
INSPIRE FUTURE GENERATIONS
PDF
進撃の受託開発
PDF
Detroit Programming City
PDF
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
PDF
Reading 1st dRuby
受託開発とRubyGems
The World is Connected
JavaからRubyへの変遷を約10年見てきて、プロジェクトで変わったこと、変わっていないこと12集
INSPIRE FUTURE GENERATIONS
進撃の受託開発
Detroit Programming City
俺も受託開発〜準委任契約によるふつうのソフトウェア開発〜
Reading 1st dRuby

What's hot (20)

PPTX
Spring 12年の歴史
PDF
ポストJenkins時代のCI戦略
PDF
Spring4-DevLove発表資料
PPTX
こだわりのkintone
PPTX
さくっと理解するSpring bootの仕組み
PDF
「ITアーキテクトの役割と責任」デブサミ2015 20-C-1
PDF
Agile Testing Night #4 LT
PDF
JavaとOSSとAndroid - JavaAPI訴訟問題を考える
PDF
[Java Day Tokyo 2018]50分で最新技術学習の基礎を身につける(SOMPO Systems Daisuke Nishino)
PPTX
5分で出来る!イケてるconfluenceページ
PPTX
Spring starterによるSpring Boot Starter
PDF
6製品1サービスの開発にPortfolio for JIRAを使ってみた
PDF
今どきのアーキテクチャ設計戦略 - QCon Tokyo 2016
PDF
[ダウンロード推奨]OOW2017 and Javaone2017 report Daisuke Nishino(Sompo Systems)
PPTX
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
PDF
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall
PDF
エナジャイル設立によせて
PDF
Agile japan2016 a 2 ricksoft
PDF
NoOps?よろしいならば戦争だ
Spring 12年の歴史
ポストJenkins時代のCI戦略
Spring4-DevLove発表資料
こだわりのkintone
さくっと理解するSpring bootの仕組み
「ITアーキテクトの役割と責任」デブサミ2015 20-C-1
Agile Testing Night #4 LT
JavaとOSSとAndroid - JavaAPI訴訟問題を考える
[Java Day Tokyo 2018]50分で最新技術学習の基礎を身につける(SOMPO Systems Daisuke Nishino)
5分で出来る!イケてるconfluenceページ
Spring starterによるSpring Boot Starter
6製品1サービスの開発にPortfolio for JIRAを使ってみた
今どきのアーキテクチャ設計戦略 - QCon Tokyo 2016
[ダウンロード推奨]OOW2017 and Javaone2017 report Daisuke Nishino(Sompo Systems)
エンドツーエンドテストを自動化したらチームがすごく良くなった@XPまつり2015LT
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall
エナジャイル設立によせて
Agile japan2016 a 2 ricksoft
NoOps?よろしいならば戦争だ
Ad

Viewers also liked (12)

PDF
パーフェクトBody(仮)
PDF
Sansan x ESM Ruby合同勉強会 2015.05.15
PPTX
ヒューマンインタフェースな学会に参加してみた
PDF
Argカフェ&argフェスト冒頭説明
PDF
音声インタフェースとWebアクセシビリティ
PDF
電子書籍小説の「立ち読み」インタフェース 牛尼剛聡
PDF
ユーザーインタフェースの分解
PDF
『UXデザインの教科書』を書きました
PDF
インタフェースデザインの心理学 まとめ
PDF
誰に何を伝える?わたしの デザインコンセプトの 作り方、探し方
PDF
研究サーベイ論文
PDF
JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」
パーフェクトBody(仮)
Sansan x ESM Ruby合同勉強会 2015.05.15
ヒューマンインタフェースな学会に参加してみた
Argカフェ&argフェスト冒頭説明
音声インタフェースとWebアクセシビリティ
電子書籍小説の「立ち読み」インタフェース 牛尼剛聡
ユーザーインタフェースの分解
『UXデザインの教科書』を書きました
インタフェースデザインの心理学 まとめ
誰に何を伝える?わたしの デザインコンセプトの 作り方、探し方
研究サーベイ論文
JAWS DAYS 2017「サーバーレスが切り拓く Eightのリアルタイム大規模データ分析」
Ad

Similar to インタフェースのこころ (14)

PPTX
Guiを使わないテキストデータ処理
PPTX
インターフェイスによるオブジェクト指向設計
PDF
Dverseお勉強会 -user interface-
ODP
RubyStation(仮)
KEY
20120519 #qpstudy インターフェース入門
PDF
GC黄金時代
PDF
20091010名古屋Ruby会議01 プログラマとプログラマでない人のための課題管理ツール『Redmine』
PDF
CodingTips+ 基礎編
PDF
2011年10月21日
PDF
RubyKaigi2014: Just in Time compiler for CRuby
PDF
Ruby on rackhub
PDF
Ruby on rackhub
PDF
Kanonってなぁ~に?~楽々Kanonで華麗にお仕事しよう~
PDF
Rubyによる本気のGC
Guiを使わないテキストデータ処理
インターフェイスによるオブジェクト指向設計
Dverseお勉強会 -user interface-
RubyStation(仮)
20120519 #qpstudy インターフェース入門
GC黄金時代
20091010名古屋Ruby会議01 プログラマとプログラマでない人のための課題管理ツール『Redmine』
CodingTips+ 基礎編
2011年10月21日
RubyKaigi2014: Just in Time compiler for CRuby
Ruby on rackhub
Ruby on rackhub
Kanonってなぁ~に?~楽々Kanonで華麗にお仕事しよう~
Rubyによる本気のGC

More from Koichi ITO (20)

PDF
Bundler 2 の胎動
PDF
アプリがパッチにまみれたら
PDF
Stairway to The Pragmatic Rails Programmer
PDF
最軽の開発手法 dX 改
PDF
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
PDF
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
PDF
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
PDF
俺の開発日誌
PDF
ghq gem-src and more
PDF
RuboCopとXPコーディング規約
PDF
俺たちの新人教育!!
PDF
スローテスト刑事 (デカ)
PDF
Gate of Agile Web Development
PDF
RubyKaigi 2015 の Drinkup を支える技術
PDF
開発時の探し物を楽にする習慣作り
PDF
Motivationware
PDF
達人プログラマーへの道
PDF
Let's get ready for next Ruby
PDF
職と人
PDF
Agile Software Development with Edge Ruby
Bundler 2 の胎動
アプリがパッチにまみれたら
Stairway to The Pragmatic Rails Programmer
最軽の開発手法 dX 改
Railsアプリケーションプロジェクトでの読み書きそろばんの1周目、2周目とそれから
Ruby 2.4 / Rails 5.0に上げた際のパッチ5選
10年生きる Ruby / Rails アプリケーションプログラマーのエコシステム
俺の開発日誌
ghq gem-src and more
RuboCopとXPコーディング規約
俺たちの新人教育!!
スローテスト刑事 (デカ)
Gate of Agile Web Development
RubyKaigi 2015 の Drinkup を支える技術
開発時の探し物を楽にする習慣作り
Motivationware
達人プログラマーへの道
Let's get ready for next Ruby
職と人
Agile Software Development with Edge Ruby

インタフェースのこころ