Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

インタフェースのこころ

4,655 views

Published on

Ruby合同勉強会@Sansan (http://connpass.com/event/14398/)

Published in: Engineering
  • Be the first to comment

インタフェースのこころ

  1. 1. インタフェースの Sansan株式会社さまオフィス (株) 永和システムマネジメント アジャイル事業部 Ruby x Agile グループ 伊藤 浩一 (@koic) 2015.05.15 (Fri) Ruby合同勉強会@Sansan From IDE to Terminal こころHead First Readline
  2. 2. 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
  3. 3. COMING SOON! http://agile.esm.co.jp/cases/sansan.html にて公開予定
  4. 4. 今日の話
  5. 5. GUIのメリットはYSIWYG̶What You See Is What You Get (見たとおりのも のが結果を得られる) ーというものです。そ してデメリットはWYSIAYGーWhat You See Is All You Get (見たとおり以上のも のは得られない) ーなのです。 21. コマンド・シェルの力を使うこと 『達人プログラマー』78 ページより抜粋
  6. 6. GUIが使えない場合 はシェルを使う。
  7. 7. 「黒い画面」の異名で有名
  8. 8. 入力インタフェースと 実装インタフェース話
  9. 9. http://ja.wikipedia.org/wiki/GNU_readline
  10. 10. •#1 入力インタフェース •#2 Ruby標準ライブラリ •#3 異言語バインディング Readlineの歩き方
  11. 11. #1 •#1 入力インタフェース •#2 Ruby標準ライブラリ •#3 異言語バインディング Readlineの歩き方
  12. 12. • 人とコンピュータのインタフェース • 考えるために考えない by @mtsmfm • 「思考の速さで入力する」 • キーバインディング重要、ショートカット重要 • 如何に指の筋肉運動を変えずに操作するか? • コマンドラインに限らず、Readline のインタフェー スで操作できるアプリケーションがさりげなくある 入力デバイスの重要性 https://speakerdeck.com/mtsmfm/find-your-favorite-tools?slide=26
  13. 13. • 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 (バッファを貼付ける) ほかにあったかな?
  14. 14. ショートカット は早く覚えた 分効果も高い
  15. 15. https://twitter.com/koic/status/18370534918
  16. 16. ちなみにデフォルト ではEmacsという エディタの操作らし いですよ (ステマ)
  17. 17. #2 •#1 入力インタフェース •#2 Ruby標準ライブラリ •#3 異言語バインディング Readlineの歩き方
  18. 18. http://docs.ruby-lang.org/ja/2.2.0/library
  19. 19. http://docs.ruby-lang.org/ja/2.2.0/class/Readline.html
  20. 20. https://github.com/koic/acappella/commit/bbebaa99cea88c1559e683a8739112ed08977187?diff=split
  21. 21. #3 •#1 入力インタフェース •#2 Ruby標準ライブラリ •#3 異言語バインディング Readlineの歩き方
  22. 22. 異世界を繋げる バインディング インタフェース
  23. 23. https://github.com/ruby/ruby/blob/ruby_2_2/ext/readline/readline.c
  24. 24. 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
  25. 25. 世界を渡る 時の決め事 http://ja.wikipedia.org/wiki/%E5%A4%A7%E8%88%AA%E6%B5%B7%E6%99%82%E4%BB%A3#/media/File:CantinoPlanisphere.png
  26. 26. Cの変数には型があり,データには 型がありません.(中略) 逆にRuby の変数には型がなく,データに型が あります.この違いのため,Cと Rubyは相互に変換しなければ,お 互いのデータをアクセスできません. https://github.com/ruby/ruby/blob/trunk/doc/extension.ja.rdoc
  27. 27. • 用途 • 既存のC言語ライブラリを使いたいとき • 開発速度を犠牲にしても実行速度を得たいとき • RubyのAPIの知識、考え方を流用可能 (呼び出し方はC言語の流 儀に乗る) • メモリ管理をRubyの処理系に任せられたり、そうじゃなかったり • Rubyの拡張を C言語で書くなら、こうあって欲しいのインタ フェースになっている C言語による拡張
  28. 28. readline.c https://github.com/ruby/ruby/blob/ruby_2_2/ext/readline/readline.c#L1800
  29. 29. • 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 より抜粋)
  30. 30. モジュール定義 https://github.com/ruby/ruby/blob/ruby_2_2/ext/readline/readline.c#L1828 https://gist.github.com/koic/cf46eccf3cc6e7c066fe C言語の関数でありながら Rubyのインタフェースに 置き換えて考えられる • メソッド名と実装の関数を紐付ける
  31. 31. インターフェイスの三原則 『インターフェイス指向設計』15 ページより抜粋 • 原則1 インターフェイス実装は、そのメソッ ド名が示す通りの処理をしなければならない • 原則2 インターフェイス実装は他に危害を加 えてはならない • 原則3 インターフェイス実装は、責務を果た せない場合にそれを呼び出し元に伝えねばな らない
  32. 32. 驚き最小の 原則 Principle of Least Surprises Rubyに慣れた人にとっての (入り口は><)
  33. 33. Ruby拡張ライブラリ 流儀 C言語で構成されたフレームワークの世界 郷に入っては郷に従え TO

×