MOSA Multi-OS Software Artists

MOSAはソフトウェア開発者を支援します

  • iPhone/iPod touch アプリ紹介
  • MOSA掲示板
  • 活動履歴
  • About MOSA(English)

MOSA Developer News[MOSADeN=モサ伝]第273号

2007-10-30

目次

  • りんご味Ruby          第13回  藤本 尚邦
  • 藤本裕之のプログラミング夜話   #125
  • 高橋真人の「プログラミング指南」  第123回
  • 書籍紹介             求めない

りんご味Ruby   第13回  藤本 尚邦

モサ伝読者の皆さまはもちろんご存知だと思いますが、ようやくLeopardが出ましたね。ということで、今回は当然ながらLeopardの話題でいきます。実のところ、Leopardは現在最強のRuby開発環境ではなかろうかというくらいRuby関連のソフトウェアがいろいろと入っています。概観してみましょう。

■ Ruby.framework にインストールされた Ruby 1.8.6

LeopardにはRuby.frameworkというフレームワークがあります。TigerにもRuby(1.8.2)がインストールされていたわけですが、そこにはRuby.frameworkというものはありませんでした。Leopardで導入されたこのフレームワークは、Ruby本体のインストール先としての意味を持っています。Tiger以前のMacOS Xに付属しているRubyは、/usr ディレクトリ以下に直接インストールされていましたが、LeopardにあらかじめインストールされているRuby 1.8.6は

 /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr

にインストールされています。/usr/binの下に置かれているRuby付属の各コマンドは、RubyCocoa.frameworkの中にある実体へのシンボリックリンクになっています。仮想マシンベースになった新しいRuby 1.9がリリース(今年の12月といわれている)されるときなど、このフレームワーク化により、Ruby 1.8と1.9を簡単に切り替えて使えるようになるのではないかと予想されます。

■ RubyGems

RubyGemsは、Rubyの世界で普及しているネットワークベースのRuby関連プログラムパッケージインストールシステムです。Ruby on Railsやrakeをはじめとして、よく使われているコマンドやライブラリなどのパッケージがあらかじめインストールされています。

■ Ruby on Rails

WebアプリケーションフレームワークのRuby on Rails (1.2.3)が、RubyGemsパッケージとしてインストールされています。

Railsの開発ではリレーショナルデータベース管理システム(RDBMS)が用いられるのが一般的ですが、Leopardに付属しているRDBMSはsqlite3というライブラリ形式のものだけです。Railsアプリケーションを生成するためのrailsコマンドでは、デフォルトで使用するデータベースがあらかじめsqlite3に設定されています(コマンドラインオプションで変更可能)。Railsの解説書ではMySQLを前提にしている場合が多いので、解説書で学ぶときには少しだけ読み替える必要があるかもしれません。

筆者も最近Railsの開発をするようになりそれで気づいたのですが、Railsは必ずしもリレーショナルデータベースを必要とはしません。Mac OS Xに搭載されたことで、例えばCoreDataのフロントエンドWebアプリの開発にRailsを使うという応用などもありうるかもしれませんね。

■ RubyCocoa

この連載でもすでに何度か紹介しているように、RubyCocoaはアプリケーションなどのMac OS X用プログラムをRubyで開発するためのフレームワークです。

Xcodeの新規プロジェクトに Cocoa-Rubyアプリケーションをはじめとして、
RubyCocoaアプリケーション用のテンプレートが加わっています。また、これが大きいのですが、XcodeとInterface BuilderがRubyプログラムをサポートするようになっています。

 ・XcodeでRubyプログラムのアウトレットやアクションを追加・変更すると
   Nibファイルに反映される

 ・Interface Builderでアウトレットやアクションを追加・変更するとXcode
   側のRubyプログラムに反映される

 ・NibファイルのコントローラからRubyプログラムを生成する

ドキュメントもあらたに加わっています。Xcodeのヘルプメニューの「製品ドキュメント」で、RubyCocoaで検索すると、RubyCocoaやPyObjCについて解説したドキュメントがいくつかあって参考になります。RubyやRubyCocoaなどのサンプルプログラムは、/Developer/Examples/Rubyフォルダの中に入っています。

■ まとめ

今回は、LeopardのRubyまわりについて概観しました。以下のURLにも詳しく書かれているので興味のある方はご覧ください。

http://trac.macosforge.org/projects/ruby/wiki/WhatsNewInLeopard

Leopardが発売になったということで、今後RubyCocoaについてもいろいろ取り上げていこうと思います。

藤本裕之のプログラミング夜話 #125

 前回まででツールバーにアイテムを出す仕組みはだいたい飲み込めていただけたと思う。予告通り今回からは,この仕組みの細かいところ、重箱の隅めいたところをつついていこうと思うのだが、その前にちょっと準備をせねばならない。いやたいしたことぢゃないんだけど、つまりは今まで追加してきた「ネコ」とかぢゃなくて、もともとシステムに用意されているいくつかのツールバーアイテムについて書いて、適当にテストプログラムにこれらを追加しておかねば今後の説明がやりにくいのだ。

 NSToolbarItemクラスにはあらかじめ、7つのIdentifierが定義されている。早い話……遅い話にするのは難しいが、これらを 
toolbarDefaultItemIdentifiers: とtoolbarAllowedItemIdentifiers:  に渡すアレイに含めてやれば、あとはなんもしなくてもツールバーアイテムとして表示されてくれるわけ。順に説明しておく。

NSToolbarSeparatorItemIdentifier
 ツールバーの上でアイテム同士を区切る縦棒である。身近なところでは「プレビュー」でなんかファイルを開くと、「パネル」と「反時計回り」の間と、「時計回り」と「実際のサイズ」の間に表示されてるので暇なひとは「おお、これか」と確認されたし。

NSToolbarSpaceItemIdentifier
 空白である。探してみたがあんまり使われていないと思う。このあとテストプログラムで使ってみましょう。

NSToolbarFlexibleSpaceItemIdentifier
 これも空白だけど、こっちは伸び縮みするので結構使われている。Xcodeのエディタの「ブレークポイント」と「プロジェクト」の間とか、Finderの「アクション」と「検索」の間にありますな。これが入ると以降のアイテムがウインドウ幅に対して右寄せで表示される。

NSToolbarShowColorsItemIdentifier
 こっからはちゃんとアクションを持っているアイテム。まずこれは「カラー・パネル」を表示させる。……どっかで使ってるのを見た気がするんだが、ちょっと見つからない。まぁ出してみればすぐわかる。
 
NSToolbarShowFontsItemIdentifier
 同じく「フォント・パネル」を表示させるアイテム。

NSToolbarCustomizeToolbarItemIdentifier
 これはツールバーをカスタマイズするパネルを出すアイテム。このからくりはあとで説明する予定なんだけど、とりあえず見たことがないひとはたとえばXcodeのエディタでウインドウの右肩のところにある……これ、正しい呼び名がわからんのだが、扁平なボタンをオプション・キーとコマンド・キーを押しながらクリックしてみてちょうだい。出ましたか? それを出すアイテムであります。他のキー・コンビネーションだと違うことが起きるので注意。

NSToolbarPrintItemIdentifier
 これはたとえばXcodeのリファレンスのウインドウとかに出てくる「プリント」のアイテムである。アクションはファイルメニューから「プリント」を選んだときと同じ。

 とまぁ、講釈たれてばっかりだと退屈なので、とりあえずテストプログラムの toolbarDefaultItemIdentifiers: と toolbarAllowedItemIdentifiers: の中身を以下のように変更して実行してみて欲しい(どっちも同じコードでOK)。

return  [NSArray arrayWithObjects:
    @"Cat",
    NSToolbarSeparatorItemIdentifier,
    NSToolbarShowColorsItemIdentifier,
    NSToolbarSpaceItemIdentifier,
    NSToolbarShowFontsItemIdentifier,
    NSToolbarFlexibleSpaceItemIdentifier,
    NSToolbarCustomizeToolbarItemIdentifier,
    NSToolbarPrintItemIdentifier,
    @"Align Text",nil];


 できたらウインドウをリサイズしたり、アイテムをクリックしたり(できないのもあるはず、それは後で説明する)して何が起きるか確かめてくだされ。あ、書かなかったけどInterface Builderでウインドウにある NSTextViewがちゃんとウインドウのリサイズに追随するように設定しておくと見栄えがよろしいと思います。ほんぢゃ。
                            (2007_10_25)

高橋真人の「プログラミング指南」第123回

プログラマのためのオブジェクト指向再入門(31)

〜XcodeによるPowerPlant X入門(14)〜

 こんにちは、高橋真人です。
 今回は、前回のコード部分の続きになります。

[MyWindow.h]

 修正後の方が短くなりますので、すべてを掲載します。

#include 
#include 

#include "MenuCommandDisableDoer.h"

class MyWindow : public PPx::Window,
                 public SpecificMenuCommandDisableDoer
{
private:
    virtual void        FinishInit();

};


[MyApplication.cp]


 こちらも関数一つのみになりますので、すべてを掲載します。

#include "MyWindow.h"

#include 

void
MyWindow::FinishInit()
{
    EventTargetRef targetRef = GetSysEventTarget();
    SpecificMenuCommandDisableDoer::Install(targetRef);
}

 残りは新規のファイルです。
 ReverseCommandConverterとMenuCommandDisableDoerという名前で、それぞ
れヘッダとソースのペアを二つずつ作ります。以下はその内容です。

[ReverseCommandConverter.h]

#include 

class ReverseCommandConverter : public PPx::CommandConverter
{
protected:
   virtual OSStatus    DoCommandUpdateStatus(
                               PPx::SysCarbonEvent&    ioEvent,
                               HICommand               inCommand,
                               UInt32                  inMenuContext);
};


[ReverseCommandConverter.cp]

#include "ReverseCommandConverter.h"

#include 

OSStatus
ReverseCommandConverter::DoCommandUpdateStatus(
   PPx::SysCarbonEvent&    ioEvent,
   HICommand               inCommand,
   UInt32                  inMenuContext)
{
   if (PPx::EventUtils::UpdateCommandID(inCommand, inMenuContext) != noErr) {
       if (inCommand.attributes & kHICommandFromMenu) {
           ::EnableMenuCommand(nil, inCommand.commandID);
       }
   }

   return noErr;
}


[SpecificMenuCommandDisableDoer.h]

#include 

template 
class SpecificMenuCommandDisableDoer : public PPx::SpecificMenuCommandEnableDoer
{
private:
   virtual OSStatus    DoEvent(PPx::SysCarbonEvent& ioEvent);
};


template 
OSStatus
SpecificMenuCommandDisableDoer::DoEvent(PPx::SysCarbonEvent& ioEvent)
{
   ::DisableMenuCommand(nil, TCommandID);

   return noErr;
}


[SpecificMenuCommandDisableDoer.cp]

《中身はありません》


 最後のソースファイル、SpecificMenuCommandDisableDoer.cpは中身がカラです。従って、このファイル自体がなくても構いません。
 ちなみに、C++のテンプレートを利用したライブラリではヘッダファイルだけですべての機能を実現してしまうものが多くあります。何故なら、テンプレートを使った場合ヘッダファイルに実装コードを記述する必要があるからです。
 テンプレートを利用したコードは、テンプレート引数(上記の
SpecificMenuCommandDisableDoerの例ではTCommandIDがこれに当たります)が
特定されて初めてコンパイルが可能になるので、ヘッダ部のみでコンパイルされるわけではないのです。よって、これらの機能は、必ずいずれかのソースからインクルードされることになります。
 このような仕組みのため、テンプレートを多用して作られたC++のライブラリは、単にヘッダをインクルードするだけで済み、ソースファイルやライブラリをプロジェクトに加えたりする必要がないものが多くあり、気軽に利用できるのです。

 以上で作業は終了です。動かして試してみてください。

書籍紹介              求めない

 解説担当:高橋政明

求めない
 加島 祥造 著
 小学館  ISBN978-4-09-387722-0  1,365円(税込)

 先日、朝のテレビで紹介されていた本を買いました。テレビを見た時点で買ってみようと決めていましたが、本屋に行ってみると売れ行きランキングのベスト10に入っていてびっくり。うまく乗せられてしまったようです…それが今回ご紹介する『求めない』です。

 詩集だそうです。『ベストセラー』にも『詩集』にもこれまでまったく縁がなく自分で買った記憶はありません。

 見開きページの使い方が新鮮でした。
 詩なので当然なのでしょうが、読んだときのリズムも心地よく、ずんずん読み進めることができます(行数も字数も少ないことももちろんですが)。
 でも、急いで読む本ではありませんね。

 評判の本ですので、私があれこれ書かずともいろいろな感想や書評を目にされることと思います。

 職業柄多くのストレスにさらされている(そう思っている あるいは、そう思わされている?)私たちにとって、ちょっとしたギアチェンジのきっかけになってくれそうな本なのでご紹介しました。

 CDジャケット程の小ぶりの本です。
 まずは手に取って、ぱらぱらとページをめくってみてはいかがでしょうか。

▼出版社のweb
http://skygarden.shogakukan.co.jp/skygarden/owa/solrenew_detail?isbn=9784093877220

◇MOSAからのお知らせと編集後記は割愛します◇

 

 MOSA Developer News   略称[MOSADeN=モサ伝]
        配信停止 mailto:mosaden-ml@mosa.gr.jp
 記事内容に関するご意見 mailto:mosaden-toukou@mosa.gr.jp
      記事投稿受付 http://www.mosa.gr.jp/?page_id=850
Apple、Mac OSは米国アップル社の登録商標です。またそのほかの各製品名等
はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA  http://www.mosa.gr.jp/
Copyright (C)2007 MOSA. All rights reserved.