高架下のRuby

#: subtitle # Railsのない生活 : author

横山昌史

#: institution # Ruby-GNOME2 Project Team : content-source

札幌市中央区Ruby会議01

: date

2014/02/08

: allotted-time

23m

: theme

.

自己紹介

  # image
  # src = my-icon.png
  # relative_width = 20
  # align = right
  # relative_argin_right = -10

* @myokoym (GitHub, Twitter)
  * 由来:((*m*)).((*yokoy*))a((*m*))a
  * 発音例:myokoyamaa
* ソフトウェア開発者
* 将棋指し(アマ三段)

Ruby Kaja 2013

# image
# src = ruby-kaja-2013.jpg
# relative_height = 100

札幌の将棋事情

* 北海道将棋会館
  * ((*札幌市中央区*))南4西9
* 北海道将棋連盟のブログ
  * (('note:http://doshoren.blog.fc2.com/'))
* 札幌将棋情報のブログ
  * (('note:http://blogs.yahoo.co.jp/sapporoshogijoho'))

よろしくお願いします。nnm(_ _)m

はじめに

高架下とは?

((*高架橋*))の下

((*高架橋*))とは

# image
# src = rail.jpg
# relative_height = 75

((‘tag:center’)) ((‘tag:large’)) ((*↑これ*))

私(達)

* Railsを使っていない
  * 高架下の住人

たまに見かける仮説

((‘tag:center’)) ((‘tag:x-large’)) ((‘tag:italic:Ruby = Rails’))

私(達)

* Railsを使っていない
* Rubyは使っている

論破

プロパティ

: as-large-as-possible

true

お伝えしたいこと

((‘tag:center’)) Railsを使う機会がなくても、n Rubyを活用できるということ

話すこと

* コマンドラインツール
* デスクトップアプリケーション

話すこと

* ((*コマンドラインツール*))
* デスクトップアプリケーション

コマンドライン

# image
# src = terminal-on-windows.png
# relative_height = 90
# reflect_ratio = 0.1

コマンドラインツール

* bashやコマンドプロンプト\nなどで動くプログラム

# coderay ruby
puts "Hello, World!"

コマンドラインの利点

* UIを作成しなくていい
  * 気軽に書ける
  * Rubyだけで書ける
* 一括処理や自動化しやすい
* シェルスクリプトの代替

シェルスクリプトの代替

* 違うOSで同じコードが動く
  * Rubyが動けばOK
  * 環境の差は(ほぼ)Rubyが吸収

実行方法

* irb
* ワンライナー
* ファイルに保存して実行

irb

* 1行ずつ実行
* チュートリアル向き

# coderay bash
$ irb
irb(main):001:0> puts "Hello, World!"
Hello, World!
=> nil

ワンライナー

* コマンドラインに直接コードを書いて実行
* ((*ヒストリーに残る*))

ワンライナー

* $ ruby -e ...

# coderay bash
$ ruby -e 'puts "Hello, World!"'
Hello, World!

ワンライナー

* Perlに似たオプションが使える

# coderay bash
$ echo こんにちは | ruby -ple 'gsub(/[な-の]/, "ぬ")'
こんぬちは

((‘tag:center’)) ((‘note:ヒント:るりまサーチ、Rubyの起動’))

ファイルに保存して実行

* 1行目はshebang

# coderay ruby
#!/usr/bin/env ruby

puts "Hello, World!"

shebang

* Unixのスクリプトの一行目の(('tag:italic:((*#!*))'))
  * インタプリタのパスを指定
  * envの場合、環境変数PATHを探す
* 書かなくてもいい

ファイルに保存して実行

* shebang+実行権限

    # coderay bash
    $ ./hello.rb

* shebangなし

    # coderay bash
    $ ruby hello.rb

マジックコメント

* shebangがあるときは2行目に書く
* Ruby2.0以降はUTF-8なら省略可

# coderay ruby
#!/usr/bin/env ruby
# coding: utf-8

puts "こんにちは!"

実用例

* ファイル名を一括変更
* ファイルごとに圧縮

ファイル名を一括変更

# coderay ruby
require "fileutils"

Dir.glob("*") do |name|
  next unless /\Asl.*\.txt\z/ =~ name
  FileUtils.mv(name,
               name.sub(/\Asl/, "ls"))
end

ファイルごとに圧縮

* 外部コマンドを使う場合
  * 7-Zipなどはコマンドラインで使える

# coderay ruby
Dir.glob("*.log") do |name|
  system("7z", "a", "#{name}.zip", name)
end

生Ruby

# image
# src = ruby.png
# relative_height = 100

プロパティ

: enable-title-on-image

true

話すこと

* (('del:コマンドラインツール'))
* ((*デスクトップアプリケーション*))

デスクトップアプリとは

* デスクトップ環境で動作するアプリケーション
  * PCにインストールして使うもの
* GUIツールキットを使って作る
  * GUIアプリケーションとも呼ばれる

GUIツールキット

* GUIアプリケーションを構成する部品の集まり
* 一からウィンドウを作成
  * 自由度が高い
  * JavaScriptを書かなくていい

GUIツールキットの例

* マルチプラットフォーム(C/C++)
  * GTK+, Qt, Tk
* Mac OS X
  * Cocoa
* Windows
  * .NET Framework

Ruby × GUI

* Ruby標準添付
  * Ruby/Tk
* GNOME開発環境(GTK+ 等)
  * Ruby-GNOME2(Ruby/GTK)

etc…

GNOMEとは

  # image
  # src = Gnomelogo.svg
  # relative_width = 20
  # align = right

* デスクトップ環境
  * Debian GNU/Linux
  * Fedora
  * CentOS, RHEL
  * (Ubuntu)

デスクトップ環境

* Linux
  * GNOME, KDE, Xfce, Unityなど
* Mac OS X
  * Aqua
* Windows Vista, 7, 8
  * Aero

Ruby-GNOME2とは

# blockquote
Ruby-GNOME2はGNOMEで使用されるGTK+などの主要なライブラリの
Rubyバインディング集です。

(('note:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/49734'))

Ruby-GNOME2とは

# blockquote
GTK+はマルチプラットフォーム対応のGUIツールキットなので、マ
ルチプラットフォーム対応のGUIアプリケーションをRubyで書くこ
とができます。

(('note:http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/49734'))

なぜRuby-GNOME2か

# image
# src = logo-gy.svg
# relative_height = 60

((‘tag:center’)) 楽しくプログラミングできる

なぜ楽しいのか

* Rubyらしく書ける
* 拡張ライブラリがたくさん
* GitHubでオープンソース
* 日本人開発者が多い

Rubyらしく書ける

# blockquote
Ruby言語の持つ様々な特徴(例外処理やブロックの使用)をうまく取り入れることでRubyとの親和性が極めて高い.

(('note:http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?gtk2-tut-introduction'))

拡張ライブラリがたくさん

* Ruby/Poppler
  * PDF読み込み、書き出し
* Ruby/GStreamer
  * 音声、動画の再生、編集
* Ruby/WebKitGTK
  * Webブラウザウィジェット

GitHubでオープンソース

* https://github.com/
  * ruby-gnome2/ruby-gnome2

日本人開発者が多い

* 日本語メーリングリスト
  * ruby-list
  * ruby-gnome2-devel-ja
  * 日本語で質問できる
    * 煮詰まったら気軽に投稿

あと何分?

バージョンについて

  # image
  # src = GTK.png
  # relative_width = 30
  # align = right

* Ruby/GTK2
* Ruby/GTK3

Ruby/GTK2

GTK+ 2のRubyバインディング

* 旧バージョン
  * GTK+ 2の開発はほぼ終了
* 採用実績が多く、安定性は高い
  * Rabbit(プレゼンツール)
  * mikutter(Twitterクライアント)

Ruby/GTK3

GTK+ 3のRubyバインディング

* 最新バージョン
  * 機能向上(CSS対応の強化など)
  * 移行が推奨されている
* 採用実績
  * Mireru(ファイルビューア)

Hello, GUI!

# coderay ruby
require "gtk3"

window = Gtk::Window.new
window.title = "Hello, GUI!"
window.signal_connect("destroy") do
  Gtk.main_quit
end
window.show_all
Gtk.main

準備

* gtk2またはgtk3をインストールする

# coderay ruby
gem install gtk3

((‘note:連絡先:’))n ((‘note:github.com/ruby-gnome2/ruby-gnome2/issues’))n ((‘note:lists.sourceforge.net/lists/listinfo/ruby-gnome2-devel-ja’))

準備

* gtk2またはgtk3をrequireする

# coderay ruby
require "gtk3"

メインウィンドウ作成

* ×ボタンなどが付いた普通のウィンドウが生成される

# coderay ruby

window = Gtk::Window.new
window.title = "Hello, GUI!"

イベント取得

* 既定のイベントが発生すると、ブロック内の処理が実行される

# coderay ruby
window.signal_connect("destroy") do
  Gtk.main_quit
end

メインループ

* showやshow_allで表示フラグON
* Gtk.mainでメインループに突入

# coderay ruby
window.show_all
Gtk.main

Hello, GUI!

# image
# src = hello-gui.png
# relative_width = 35

おわりに

Rubyは汎用プログラミング言語です。Webに限らず、 いろいろな場所で活用してみてください。

((‘note:デスクトップアプリケーションの勉強会を検討中なので、興味がある方はお知らせくださいませ :-)’))