Windows で Cygwin+Ruby/GTK プログラミング
CygwinのRuby/GTKを使うと
Windows [www.microsoft.com] で Ruby [www.ruby-lang.org] を使うには、公式の Windows 用のパッケージを使うか、Cygwin [ja.wikipedia.org] 用パッケージを使うかのどちらかでしょう。
Unix 系のシェルで Ruby を使いたいときには、もしかすると自然と Cygwin 用のパッケージを利用するかも知れません。
Ruby を使うだけならば、Cygwin 用のパッケージを利用するほうが簡単です。
しかし Ruby で GTK をするとなると Cygwin 用のパッケージではかなりの容量が必要になり、また導入が難解となります。
Unix 系シェルのCUI操作に慣れた人ならば、このシェル操作で Ruby もいじってみたいと思うかも知れません。
私は Rubyist [d.hatena.ne.jp] ではありませんが、できることならばやってみようと思ったので以下にメモ書きします。
Ruby/GTK は Windows用を使う
簡単なことです。
Cygwin は Cygwin 用の実行ファイルと Windows 用の実行ファイルのどちらも実行できます。
シェルは Cygwin で、Ruby/GTK は Windows 用パッケージを動作させれば、よりシンプルに、軽量に、簡単に導入することができます。
この方法でインストールすると、150MB 程度の容量しか使いません(インストーラなどは計50MB程度)。
ちなみに全部 Cygwin でかためると、2GB程度の容量が必要になります(パッケージも加えるとプラス約700MB)。
『目次』
1.Cygwin のインストール
2.Ruby のインストール
3.Ruby用Gtk のインストール
4.実行テスト
1.Cygwin のインストール
まずこちら [www.cygwin.com]にアクセスします。
中段の [Install or update now!] から Cygwin インストーラをダウンロードします。
インストール時は管理者権限をつけてインストーラを起動しておくと、全てのユーザが気軽に使えるようになります。
起動すると、インストール先やパッケージのダウンロード先を尋ねられますが、全て標準のままにしておきます。
[Cygwin Setup - Choose Download Site(s)](キャプションバー)という部分ではパッケージのミラーサーバを指定します。
日本に住んでいる方は .jp を選んだ方がダウンロードも早いのでそちらを選びましょう。
今回は ftp://ftp.jaist.ac.jp を使います。
選択するとパッケージ郡を取得しはじめます。
[Cygwin Setup - Select Packages](キャプションバー)という部分では全て Default の状態にします。
今回は特に追加で必要なパッケージはありませんが、openssh や何か他に必要なパッケージがある場合は各々で入れてください。
次へをクリックすると、パッケージのダウンロード、展開、インストール、セットアップが始まります。
上部が終わると、Cygwin がインストール終了のお知らせをしてくれます。
これにて Cygwin のインストールは終わりです。
2.Ruby のインストール
Ruby そして GTK のインストールはこちら [ruby-gnome2.sourceforge.jp]に書いてあるので、その通り導入していきます。
まずインストーラのリスト [rubyforge.org]から Ruby の Windows用 インストーラをダウンロードします。
現時点での最新版は 1.8.6-27 でした。
ダウンロードが終わったら、こちらも Cygwin 同様に管理者権限をつけて起動します。
デフォルト設定のまま進みます。
ちなみに以下の画像の部分では Enable RubyGems にチェックしなくてもいいようです。
あとはインストーラが色々と展開してコピーしまくるのに5分程度かかるので、そのまま放置してお茶でも作ります。
インストーラの作業部分に [Complete] という文があらわれたら完了のお知らせです。
公式ではここで再起動をするように書かれていますが、再起動せずに引き続きインストールしても簡単なテスト動作は可能でした。
気になる方は再起動してください。
3.Rub用Gtk のインストール
Windows用GTK のインストーラを パッケージのリスト [sourceforge.net]からダウンロードします。
ruby-gnome2-0.16.0-1-i386-mswin32.exe というのを選んでください。
他に最新のパッケージ [sourceforge.net]がありますが、2009-04-01確認で Windows用 が無かったため 0.16.0-1 を使うことにしました。
こちらも他と同様に管理者権限をつけて起動します。
インストールを進めていくと、以下の画像のような場所に到達します。
環境変数PATHには影響しないようですが、他にGTKをインストールしてなかったり、インストール済みのGTKと干渉しないと予測できるならば進んでチェックを入れた方がよいでしょう。
後はインストーラが色々と展開してコピーしまくりますが、こちらはそれほど時間がかからないので、先ほどいれたお茶の残りでも飲んで待ちます。
Ruby-Gnome2のインストールが終われば導入は完了です。
あとは実行テストの確認です。
4.実行テスト
Cygwin を起動して ruby の実行テストをします。
実行テスト時にもしかしたら挙動が変になる可能性がありますが、変だと感じたらパソコンを再起動してみてください。
まずバージョン確認です。
バージョン確認
$ ruby -v
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]
ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]
と、Rubyのバージョンが表示されれば成功です。
GTK用のテストコードも走らせてみます。
Ruby/Gtkテストコード
$ ruby -e "
> require 'gtk2'
> w=Gtk::Window.new
> w.signal_connect('delete_event'){
> Gtk.main_quit
> }
> w.title='hello world'
> w.show
> Gtk.main
> "
> require 'gtk2'
> w=Gtk::Window.new
> w.signal_connect('delete_event'){
> Gtk.main_quit
> }
> w.title='hello world'
> w.show
> Gtk.main
> "
これでウィンドウが表示されれば成功です。
中身としては終了処理とタイトルの変更をしています。
以上を一行で入力したい場合は以下になります。
Ruby/Gtkテストコード(一行版)
$ ruby -e " require 'gtk2'; w=Gtk::Window.new; w.signal_connect('delete_event'){Gtk.main_quit}; w.title='hello world' ;w.show; Gtk.main"
----
追記・追伸無し
Google検索で天気が分かる
日ごろから Google
[google.co.jp] を使っていましたが、つい先日まで知らなかった機能がある。
タイトルの通りですが、Googleは 天気も検索 [googlejapan.blogspot.com] してくれるようです。
天気も検索 [googlejapan.blogspot.com] のリンクを見てもらえれば分かるのですが、とても見やすいし当日+先三日分まで抜き出してくれます。
これで洗濯物をいつ干せばいいか、判断基準になり役立ちます。
私の気象予報の楽しみである、洗濯物の安否と 半井さん [google.co.jp] のうち、実に半分がなくなってしまいました。
あとは半井さんに集中するだけですみそうなので、その意味でも助かります。
また最高気温と最低気温も出てくれるので、服装もそうですし、熱中症についてもどれだけ気をつければいいかの判断材料にもなってくれます。
検索の仕方は、「(所在地) 天気」の複合検索だけです。
所在地は地名であったり駅名であったり、検索の幅についてはまだ分かりませんが、有名な地名 [google.co.jp] から無名の駅名 [google.co.jp]まで、きちんと拾ってくれます。
Google検索にはまだまだ色々な機能があった気がしますが、使わないものを無理に使おうとするのは愚の骨頂なので、特に気にせずに利用しようと思います。
洗濯物ありがとうございますGoogleさん。
オマケ.
そういえば以前ネットシェルについて検索したときに見つけたもので Google shell [goosh.org] というのがあるらしいです。
主に利用したという事もありませんし、使い方も分からないので詳しくはかけませんが、何か面白いことが出来るかも知れません。
タイトルの通りですが、Googleは 天気も検索 [googlejapan.blogspot.com] してくれるようです。
天気も検索 [googlejapan.blogspot.com] のリンクを見てもらえれば分かるのですが、とても見やすいし当日+先三日分まで抜き出してくれます。
これで洗濯物をいつ干せばいいか、判断基準になり役立ちます。
私の気象予報の楽しみである、洗濯物の安否と 半井さん [google.co.jp] のうち、実に半分がなくなってしまいました。
あとは半井さんに集中するだけですみそうなので、その意味でも助かります。
また最高気温と最低気温も出てくれるので、服装もそうですし、熱中症についてもどれだけ気をつければいいかの判断材料にもなってくれます。
検索の仕方は、「(所在地) 天気」の複合検索だけです。
所在地は地名であったり駅名であったり、検索の幅についてはまだ分かりませんが、有名な地名 [google.co.jp] から無名の駅名 [google.co.jp]まで、きちんと拾ってくれます。
Google検索にはまだまだ色々な機能があった気がしますが、使わないものを無理に使おうとするのは愚の骨頂なので、特に気にせずに利用しようと思います。
洗濯物ありがとうございますGoogleさん。
オマケ.
そういえば以前ネットシェルについて検索したときに見つけたもので Google shell [goosh.org] というのがあるらしいです。
主に利用したという事もありませんし、使い方も分からないので詳しくはかけませんが、何か面白いことが出来るかも知れません。
PHPテンプレートのコード比較
PHP
[jp2.php.net] では数多くの テンプレートエンジン
[ja.wikipedia.org] が開発されています。
テンプレートエンジンを利用することで、Webプログラムの処理部分と出力レイアウト部分を別々に開発できるようになります。
これは必要なデータが何かを伝えておくだけで、処理部分だけを開発する人とWebページのレイアウトを開発する人が同時期にスタートするできます。
それだけでなく処理部で変更した変数を、汎用化した出力レイアウトにあてることで、
「ページのレイアウトを変えずに内容だけ変える」ことが可能になり、
Webサイトのレイアウトに一貫性を持たせることが容易になります。
しかしその種類の豊富さから、勝手が分からず手をつけるにいたり辛くなっているかも知れません。
ここでは気になったテンプレートエンジンを初歩中の初歩の出力でサンプル表示してみます。
Smarty の 公式 [www.smarty.net] からダウンロードしたファイルを解凍し、
libs/ 以下を Smarty/ というディレクトリ名に変更してパスが通るようにします。
require_once 'Smarty/Smarty.class.php'; // パスの通っている Smarty を読み込む
$sm = new Smarty(); // Smartyクラス を作成する
$sm->template_dir = "tpl/"; // テンプレートファイルが格納されているディレクトリパス
$sm->compile_dir = "tpl_p/"; // テンプレートファイルのコンパイル作業をするディレクトリ
// $sm->cache_dir = "tpl_c/"; // テンプレートファイルのキャッシュを格納するディレクトリ、無くても動く
// $sm->config_dir = "tpl_cfg/"; // configファイルが格納されているディレクトリパス、無くても動く
$sm->assign('output_tpl', "出力用データ"); // output_tpl と "出力用データ" を関連付けます
$html_out = $sm->fetch('test.tpl'); // test.tpl を呼び出します
echo $html_out; // test.tpl を出力します
$sm->clear_all_assign(); // 上記の設定を消します
unset($sm); // 変数を消します
// ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
{ * Smarty用コメント:これは出力されない * }
<!-- HTML用コメント:これは出力される -->
{ $output_tpl }
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
<!-- HTML用コメント:これは出力される -->
出力用データ
</body>
</html>
Template Lite の 公式 [sourceforge.net] からダウンロードしたファイルを解凍し、
src/ 以下を TLite/ というディレクトリ名に変更してアップロードします。
Smarty 互換なので Template_Liteクラス も $sm で宣言しています。
require_once 'TLite/class.template.php';; // パスの通っている Template Lite を読み込む
$sm = new Template_Lite(); // Template_Liteクラス を作成する
$sm->template_dir = "tpl/"; // テンプレートファイルが格納されているディレクトリパス
$sm->compile_dir = "tpl_p/"; // テンプレートファイルのコンパイル作業をするディレクトリ
// $sm->cache_dir = "tpl_c/"; // テンプレートファイルのキャッシュを格納するディレクトリ、無くても動く
// $sm->config_dir = "tpl_cfg/"; // configファイルが格納されているディレクトリパス、無くても動く
$sm->assign('output_tpl', "出力用データ"); // output_tpl と "出力用データ" を関連付けます
$html_out = $sm->fetch('test.tpl'); // test.tpl を呼び出します
echo $html_out; // test.tpl を出力します
$sm->clear_all_assign(); // 上記の設定を消します
unset($sm); // 変数を消します
// ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
{ * Template Lite用コメント:これは出力されない * }
<!-- HTML用コメント:これは出力される -->
{ $output_tpl }
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
<!-- HTML用コメント:これは出力される -->
出力用データ
</body>
</html>
bTemplate を 公式 [massassi.com] からダウンロードしたファイルを解凍し、
bTemplate_0.x/ 以下のファイルを bTemplate/ ディレクトリを作成しコピーしてアップロードします。
require_once 'bTemplate/bTemplate.php'; // パスの通っている bTemplate を読み込む
$btpl = new bTemplate("tpl/"); // bTemplateクラス を作成する
$btpl->set('output_tpl', "出力用データ"); // output_tpl と "出力用データ" を関連付けます
$html_out = $btpl->fetch('test.tpl'); // test.tpl を呼び出します
echo $html_out; // test.tpl を出力します
unset ($btpl); // 変数を消します
// ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
<tag:output_tpl />
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
出力用データ
</body>
</html>
参考.
世界のPHPテンプレートエンジン、トップ25 - GIGAZINE [gigazine.net]
追記・追伸:まだ無し
テンプレートエンジンを利用することで、Webプログラムの処理部分と出力レイアウト部分を別々に開発できるようになります。
これは必要なデータが何かを伝えておくだけで、処理部分だけを開発する人とWebページのレイアウトを開発する人が同時期にスタートするできます。
それだけでなく処理部で変更した変数を、汎用化した出力レイアウトにあてることで、
「ページのレイアウトを変えずに内容だけ変える」ことが可能になり、
Webサイトのレイアウトに一貫性を持たせることが容易になります。
しかしその種類の豊富さから、勝手が分からず手をつけるにいたり辛くなっているかも知れません。
ここでは気になったテンプレートエンジンを初歩中の初歩の出力でサンプル表示してみます。
テンプレート | 特徴 |
Smarty ( 例
) [マニュアル :www.smarty.net] |
高機能でテンプレート界の金字塔 |
Template Lite ( 例
) [マニュアル :templatelite.sourceforge.net] |
完全Smarty互換 |
bTemplate ( 例
) [マニュアル :massassi.com] |
簡単・明瞭・軽量 |
Smarty 使用例
Smarty の 公式 [www.smarty.net] からダウンロードしたファイルを解凍し、
libs/ 以下を Smarty/ というディレクトリ名に変更してパスが通るようにします。
PHPファイルソース[test.php]
<?phprequire_once 'Smarty/Smarty.class.php'; // パスの通っている Smarty を読み込む
$sm = new Smarty(); // Smartyクラス を作成する
$sm->template_dir = "tpl/"; // テンプレートファイルが格納されているディレクトリパス
$sm->compile_dir = "tpl_p/"; // テンプレートファイルのコンパイル作業をするディレクトリ
// $sm->cache_dir = "tpl_c/"; // テンプレートファイルのキャッシュを格納するディレクトリ、無くても動く
// $sm->config_dir = "tpl_cfg/"; // configファイルが格納されているディレクトリパス、無くても動く
$sm->assign('output_tpl', "出力用データ"); // output_tpl と "出力用データ" を関連付けます
$html_out = $sm->fetch('test.tpl'); // test.tpl を呼び出します
echo $html_out; // test.tpl を出力します
$sm->clear_all_assign(); // 上記の設定を消します
unset($sm); // 変数を消します
// ?>
テンプレートファイルソース[tpl/test.tpl]
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
{ * Smarty用コメント:これは出力されない * }
<!-- HTML用コメント:これは出力される -->
{ $output_tpl }
</body>
</html>
出力ソース
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
<!-- HTML用コメント:これは出力される -->
出力用データ
</body>
</html>
Template Lite 使用例
Template Lite の 公式 [sourceforge.net] からダウンロードしたファイルを解凍し、
src/ 以下を TLite/ というディレクトリ名に変更してアップロードします。
Smarty 互換なので Template_Liteクラス も $sm で宣言しています。
PHPファイルソース[test.php]
<?phprequire_once 'TLite/class.template.php';; // パスの通っている Template Lite を読み込む
$sm = new Template_Lite(); // Template_Liteクラス を作成する
$sm->template_dir = "tpl/"; // テンプレートファイルが格納されているディレクトリパス
$sm->compile_dir = "tpl_p/"; // テンプレートファイルのコンパイル作業をするディレクトリ
// $sm->cache_dir = "tpl_c/"; // テンプレートファイルのキャッシュを格納するディレクトリ、無くても動く
// $sm->config_dir = "tpl_cfg/"; // configファイルが格納されているディレクトリパス、無くても動く
$sm->assign('output_tpl', "出力用データ"); // output_tpl と "出力用データ" を関連付けます
$html_out = $sm->fetch('test.tpl'); // test.tpl を呼び出します
echo $html_out; // test.tpl を出力します
$sm->clear_all_assign(); // 上記の設定を消します
unset($sm); // 変数を消します
// ?>
テンプレートファイルソース[tpl/test.tpl]
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
{ * Template Lite用コメント:これは出力されない * }
<!-- HTML用コメント:これは出力される -->
{ $output_tpl }
</body>
</html>
出力ソース
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
<!-- HTML用コメント:これは出力される -->
出力用データ
</body>
</html>
bTemplate 使用例
bTemplate を 公式 [massassi.com] からダウンロードしたファイルを解凍し、
bTemplate_0.x/ 以下のファイルを bTemplate/ ディレクトリを作成しコピーしてアップロードします。
PHPファイルソース[test.php]
<?phprequire_once 'bTemplate/bTemplate.php'; // パスの通っている bTemplate を読み込む
$btpl = new bTemplate("tpl/"); // bTemplateクラス を作成する
$btpl->set('output_tpl', "出力用データ"); // output_tpl と "出力用データ" を関連付けます
$html_out = $btpl->fetch('test.tpl'); // test.tpl を呼び出します
echo $html_out; // test.tpl を出力します
unset ($btpl); // 変数を消します
// ?>
テンプレートファイルソース[tpl/test.tpl]
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
<tag:output_tpl />
</body>
</html>
出力ソース
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html lang="ja">
<head>
</head>
<body>
出力用データ
</body>
</html>
参考.
世界のPHPテンプレートエンジン、トップ25 - GIGAZINE [gigazine.net]
追記・追伸:まだ無し