MOSA Multi-OS Software Artists

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

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

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

2005-06-21

目次

  • 「WebObjects Dev Report」    第10回  田畑 英和
  • 小池邦人の WWDC2005参加レポート      ★MOSA会員専用記事★
  • SqueakではじめるSmalltalk入門  第41回  鷲見 正人
  • ニュース・解説               木下 誠

「WebObjects Dev Report」  第10回  田畑 英和

 今年もサンフランシスコで開催されたWWDCでは、MacのCPUをPower PCからIntelへ移行することが発表されました。CPUの移行については事前に情報が流れてはいましたが、まさに衝撃的な発表でした。
 新たにリリースされたXcode2.1では、CPUの移行をサポートするためにPower PC/Intelの両方のCPU上で動作するバイナリー「Universal Binary」の生成が可能になりました。またXcode 2.1ではなんとWebObjectsの開発環境が組み込まれるようになりました。そこで今回はXcode 2.1に組み込まれたWebObjectsについてレポートしたいと思います。

WebObjects 5.3

 Xcode 2.1に組み込まれたWebObjectsですが、バージョンアップがおこなわれておりVer 5.3となっています。Ver 5.3に関する情報ですがApple社のサイトでは以下のような情報が公開されています。

・WebObjects 5.3 Release Notes
http://developer.apple.com/releasenotes/WebObjects/WO53_ReleaseNotes/
・WebObjects 5.3製品紹介
http://www.apple.com/webobjects/
・WebObjects 5.3 API Reference
http://developer.apple.com/documentation/WebObjects/Reference/API/

 製品紹介のtech specsページをみてみますと、サポートプラットフォームが変更になっているのが分かります。日本語のWebObjects製品ページはこの原稿を執筆している時点ではまだVer 5.2のままですので、こちらで紹介されている情報から変更点を簡単にまとめてみると以下のようになっています。

・開発プラットフォーム
  Windows 2000が未サポート
・運用プラットフォーム
  Windows 2000/Solaris 8が未サポート
・データベース
  MySQLが3.23.51から4.1.10aへ
  OpenBaseが7.0.8から8.0へ
  Oracleが8.1.7および9.2.0.1から10gと9iへ
  ※SQL ServerとSybaseも引き続きサポート
・Webサーバ
  Sun ONE Web ServerとIISが未サポート

 ようするに開発/運用プラットフォームがMacのみになり、Webサーバもこれまで複数のサーバをサポートしていましたが、Mac OS X Serverに搭載されているApacheのみがサポート対象となっています。これまでWebObjectsは複数のプラットフォームをサポートしていることが特長だったこともあり、この変更は特にWindows上で開発をおこなっているデベロッパーにとっては影響が出るものと思われます。
 さいわいまだWebObjects 5.2のパッケージ販売も継続しているようですのでしばらくは現状維持ということにもできますが、いずれ開発プラットフォームの変更を検討する必要がでてくるでしょう。もっともVer 5.2の時点ですでにWindows上での開発環境とMac OS X上での開発環境には大きな差がでていましたし、ついに(あるいはようやく)この日がきたかといったところです。
 運用環境に関しては基本的にはJava環境があればよいわけで、こちらに関しては開発環境の変化よりはインパクトが少ないものと思われますが、今後ライセンスがどのように変化していくかは注意が必要です。
 一方データベースに関してはサポートプロダクトの変更はなく、それぞれサポート対象のバージョンが上がってきています。とくにOracle 10gを正式にサポートしたことはエンタープライズ系の方々にはよいニュースなのではないでしょうか。

新機能

 では次にVer 5.3で具体的になにが変わったのかを紹介します。主な変更点をまとめると次のようになっています。

・Xcode 2.1にWebObjectsの開発環境が組み込み
・XcodeのEO Model design toolでモデルの作成が可能に
・WebObjects BuilderがバージョンアップしHTML/XHTMLのサポートを強化
・Java Collection Classのサポート
・Webサービスのアップデート

 フレームワークには大きな変更はなく、今回のバージョンアップでは主に開発ツールの変更がおこなわれています。IDE環境はすでにProject BuilderからXcodeへの移行がおこなわれていましたが、ようやくEOModelerやWebObjects Builderも新しい環境へと移行がおこなわれるようになりました。
 これまではWindows版もサポートしていたせいか、開発ツールの進化がすっかり停滞していましたが、今後は開発プラットフォームがMac OS Xのみに限定されるでしょうから、よりよい開発ツールへの対応を期待したいところです。
 EOModelerについてはCore Data用に開発されたModel design toolへと移行していくようですが、WebObjects 5.3にはまだEOModelerも含まれており、完全に移行するにはまだ時間がかかるようです。
 また一番大きな変更はWebObjectsの開発環境がXcodeに統合されたことですが、これにより今後より多くのデベロッパーがWebObjectsを利用できるようになるでしょう。

Intel

 最後にIntelへの移行がWebObjectsに及ぼす影響ですが、WebObjectsはJavaで実装されていますので、Intel版Macに搭載されるJava VM上で基本的にはなんの変更もなく動作するということになります。Universal Binaryへの対応についてはすでにドキュメントが公開されていますので、詳しくはこちらを参照してください。Javaに関する注意事項なども記述されています。

・Universal binary Programming Guidelines
http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/index.html

 またWebObjectsでJavaで実装されていないものとしては、起動用のスクリプトと、Webサーバのアダプターがありますが、スクリプトに関してはIntel上でも動作するはずですし、Webサーバのアダプターに関してはソースコードも公開されていますので、さほど大きな影響はないものと思われます。
 ただし、Intelへの移行時には、使用しているプログラムがPower PC用なのかIntel用なのか、あるいはUniversal Binaryなのかを注意する必要があるでしょう。
 昨年のWWDCではWebObjectsに関する新しいアナウンスはなにもなかっただけに、今年のWWDCでの新バージョンの登場は嬉しいニュースでしたが、その性能については今後しっかりと評価していきたいと思います。

MOSA会員専用記事

小池邦人の WWDC2005参加レポート(2005/5/20)

3年連続でサンフランシスコ・モスコンセンターで開催されたWWDC2005(World Wide Developers Conference)でしたが、今年は珍しく1日だけ雨が降りました。WWDCへは何度となく参加している筆者ですが、会場へ向かう道中で傘をさした記憶はほとんどありません。IBMの「涙雨」だったのでしょうか(笑)。直前にTiger(Mac OS X 10.4)の販売が開始されたこともあり、今年のWWDCは、そのフィードバックとハンズオン(Apple社の技術者と共に最新技術を実装をする実習)が中心になると予想されていました。よく言えば「堅実で平穏」、悪く言えば「目玉無しで新鮮みに欠ける」WWDCになると考えていたのは筆者だけではないでしょう。そんな雰囲気の中でも、Jobsの基調講演においてPowerBook G5や4CPU PowerMacの発表があるかもしれないと、密かに期待していた参加者も多かったと思います。筆者もそのうちの一人でした。

ところが、ふたを開けてみてビックリ仰天!Jobsの基調講演において、MacintoshのCPUをPowerPCからIntel版へ切り替えるというビッグニュースが飛び出しました。QuickDrawとは今回でサヨナラだと覚悟を決めていたのですが、先んじてPowerPCとサヨナラするとは思いもよりませんでした(笑)。確かに、事前にメディアからそうした噂が流れていたため、WWDC開催前から参加者の間ではザワザワとした雰囲気が漂っていました。しかし、その時点ではみんな半信半疑、どちらかと言うと「それはないだろ?」という声の方が多数を占めていました。兎にも角にも、この発表により、平和で平穏な5日間となるはずだったWWDC2005が一気にヒートアップしました。ただし、CPU切換という大事件に対しても、Intelマシン上のMac OS Xで自社アプリをデモするなど、Apple社側が周到な準備を整えていたため、デベロッパー側からは大きな反発はありませんでした。どちらかというとCPU切換に対する賞賛の声の方が大きかったかもしれません。まあ、基調講演で私の隣に座っていた青年は「オー、ジーザース」とうなっていましたが(笑)。

CPU切換のロードマップですが、2006年の6月までに最初のIntel版CPU搭載のMacintoshを発表し、2007年度中にはすべてのMacintoshのCPUをIntel 版へと切り替えるという内容です。移行準備のためにApple社側がデベロッパーに対して用意したツールは、x86コンパイラを実装したXcode 2.1とUniversal Binaryフォーマットの定義、Mac OS X起動可能なIntel版CPUを搭載したマシン「Developer Transition Kit」、そしてPowerPCコードをx86コードへ変換するバイナリトランスレーション技術の「Rosetta」です。Xcode 2.1のCD-ROMはWWDC会場ですぐさま配布され、同時にADCサイトからもダウンロードが可能となりました。$999の値が付いたDeveloper Transition Kitの方も、すぐさまADC Select&Premierメンバーに対して販売が開始されました。初日は販売サイトが恐ろしく混雑していて接続出来ませんでしたが、数日後、筆者も無事購入することができました。そして、直接の移行用ツールではないですが、Rosettaの存在は、Intel版CPUへの対応が遅れているアプリケーションでも問題なく使えるという安心感をユーザへ提供します。

Developer Transition Kitで提供されるだろうマシンは、WWDC会場のラボにも複数台設置され、誰でも自由にチェックできるように配慮されていました。さっそく多数のデベロッパーが自社製品のソースコードをラボへ持ちこみ、Rosettaでの動作確認やXcode 2.1によるx86コードへの変換を試みていたようです。現在では、周辺機器ドライバなどのコアな箇所でも昔のようにアセンブラコードに依存しているようなことはありませんので、CPUを680xxからPowerPCへ移行した時よりも、全体の作業量は少なくて済むはずです。しかし、今回も大きな問題が2つ存在します。一つは「エンディアン変換」、もう一つは「AltiVecコードの排除と修正」です。詳しい技術的解説は省略しますが、エンディアン変換の方は時間をかけて力ずくで行えば解決できる問題です。しかし、AltiVecコードの修正の方は幾つか難しい問題を含んでいます。なぜなら、AltiVecコードを通常コードへと切り替えるのは割と簡単なのですが、メイン処理の高速化にAltiVecが貢献しているようなアプリケーションでは、その部分をIntel版CPUのSSEコードなどへ書き換えないと弊害が発生すると考えられます。これは、AltiVecコードを大量に利用しているデベロッパにとっては実に頭の痛い問題です。

本当であれば、「エンディアン変換」や「AltiVecコード」の問題は、CPU側でハード的に解決してくれると嬉しいのですが…。まあ、Intel版CPUにAltiVecユニットが搭載される可能性はないでしょうが(笑)、エンディアン変換機能ぐらいは「友好の証」として付けて欲しいところです。この機能、実際にG4には搭載されており、Virtual PCの処理速度向上に貢献していると聞いています。もし可能になれば、Rosettaの処理スピード向上や、コード移行作業の軽減に大きく貢献するはずです。それから、Intel版CPUへの切り替え発表により、私が期待していた64bit化 CarbonとCocoa Frameworkの発表もリセットされてしまいました(涙)。ところで、Intelにも64bitアーキテクチャのCPUが存在しています。そこで、64bit化に関するいくつかのセッションに参加し、その件について注目していたのですが、Intel版CPUのIA-64を含めた64bitアーキテクチャに関連する発表は何一つありませんでした。つまり対応については「未定」ということのようです。64bit化に関する詳細については、来年のWWDC2006を待つしかないようです。

多分、Jobsの最終目標は、x86用Mac OS X(ハードも?)を他社にもライセンスし、そのシェアをWindowsに近づけることだと思います(きっと)。以前に失敗したMacintoshクローンビジネスを教訓に、OSライセンスを実行しても会社の収益に問題が生じないタイミングを見計らっているのは間違いないでしょう。そのタイミングの第一歩として、Tigerの評判が良くiPodの売り上げが好調なこの時期にIntel版CPUのMacintoshを市場に投入しようとするのは、大きな壁をひとつ乗り越えるためには絶妙のタイミングなのかもしれません。今回の発表により、PowerPC搭載のMacintoshの買い控えが心配されますが、市場には大量のPowerPCマシンが存在しますので、かなりの期間(ほぼ半永久的)に、デベロッパーはPowerPCとx86コードを搭載したUniversal Binaryフォーマットのアプリケーションを供給します。よって、CPUが異なるMacintoshというだけで、本質的には大きな問題は存在しないはずです。新しいマシンを購入しようと考えている方は(Classic環境を継続利用したい方は特に..)、逆に今が買い時かもしれません。

今年は3800人という最大の参加者を集めたWWDCとなりました。おかげで、アップルキャンパス内で開催されたBeer Bashパーティも人、人、人! 食べ物もビールもあっという間に無くなり、カンパニーストアは終了間際になっても長蛇の列です(涙)。こんな調子だと、次期Mac OS Xバージョン「Leopard」等の大ネタが出るだろうWWDC2006はどうなってしまうのでしょうか? 楽しみと心配が交錯する今日この頃です(笑)。

SqueakではじめるSmalltalk入門   第41回  鷲見正人

 本連載では、名前は知っていてもなかなか触れる機会のないSmalltalkについて、最近話題のSqueakシステムを使って紹介しています。

 前回は、先頃リリースされた日本語版Squeak「SqueakNihongo7」において、日本語文字列の扱いがどうなっているのかを見てみました。結論として、内部的に新しいクラスであるMultiStringが設けられてはいるものの、オブジェクトの持つ“多態性”のおかげで、我々ユーザーはその違いを意識することなく、従来の公式版でのアルファベットの文字列となんら変わらない扱いが可能、ということでした。オブジェクト指向万歳!ですね。

 文字列の他に、日本語の扱いで無視できないのがファイルの入出力です。これらについても文字列とほぼ同様のこと(つまり、日本語であることを意識せずに扱える…)が言えそうですが、ただ文字コードというものが絡んでくるため、じゃっかん複雑なことになりそうです。Squeakシステムでは、ファイルの入出力はストリーム(Stream)というクラスに属するオブジェクトを介して行なわれます。とりあえず今回はこの「ストリーム」というものに親しんでおきましょう。

 ストリームというのは“絶え間のない(データの)流れ”を意味します。コレクションはランダムアクセスが可能でしたが、ストリームはアクセスできる場所(ポジション)が決まっていて、そのポジションを必要に応じて前後に移動しながら、そこに位置するデータを読み書きします。磁気テープと磁気ヘッドの関係のようなイメージですね。なお、ファイルなどの外部情報へのアクセスを目的としないストリーム(内部ストリーム)は、コレクションをデータの置き場にして作られます。

 まず、ストリームを束縛するグローバル変数「MYSTREAM」を定義してください。これを使って、ストリームの振る舞いを調べたいと思います。

Smalltalk at: #MYSTREAM put: nil

 まず読み出し専用のストリーム(a ReadStream)を作って、今、定義したグローバル変数に束縛します。基になるコレクションを指定するために「on: aCollection」というメッセージをストリームのクラスReadStreamに送るか、あるいは、基にしたいコレクションに「readStream」というメッセージを送ります。

MYSTREAM _ ReadStream on: #(‘this’ #is $a 10)
” もしくは ”
MYSTREAM _ #(‘this’ #is $a 10) readStream

 データ読み出しの場所(ポジション、position)は初期値では 0 になっています。

MYSTREAM position ” => 0 ”

 「next」というメッセージを送るとデータを読み出し、positionをひとつ次へ移動します。メッセージ「next: anInteger」なら、指定した数だけデータを読みながらポジションを移動させ、読み出したデータは配列でまとめて返します。

MYSTREAM next       " => 'this' "
MYSTREAM position   " => 1      "
MYSTREAM next: 2    " => #(#is $a) "
MYSTREAM position   " => 3      "

 メッセージ「position: anInteger」の送信で直接移動もできます。「peek」はポジションを移動させずにデータを読み出すためのメッセージです。

MYSTREAM position: 2; peek ” => $a ”

 ポジションが最後にきたかどうかは「atEnd」を送信することで知ることができます。

World findATranscript: nil. ” トランスクリプトを表示 ”
MYSTREAM reset. ” ストリームをリセット ”
[MYSTREAM atEnd] whileFalse: [Transcript cr; show: MYSTREAM next]

 ストリームが基にしているコレクションの内容を知るにはメッセージ「contents」を送ります。

MYSTREAM contents ” => #(‘this’ #is $a 10) ”

 読み取り専用とは逆の、書き込み専用のストリーム「WriteStream」もあります。

MYSTREAM _ WriteStream on: String new.

 書き込みに際しては「nextPut: anObject」を送信します。

MYSTREAM nextPut: $a.
MYSTREAM contents   " => 'a' "

 ただ、ここの例に限っては、基になっているコレクションが文字列(a String)なので、その要素は文字(a Character)でなければいけません。

MYSTREAM nextPut: 1 ” => Error: Strings only store Characters ”

 データをまとめて流し込むこともできます。このときは「nextPutAll: aCollection」を使います。この例では、パラメータとして文字列を与えてもよいでしょう。

MYSTREAM nextPutAll: #($b $c $d $e $f)
” もしくは ”
MYSTREAM nextPutAll: ($b to: $f)
” もしくは ”
MYSTREAM nextPutAll: ‘bcdef’

 読み出し専用ストリーム同様、ポジションの任意の位置への移動も可能です。

MYSTREAM position: 2; nextPutAll: ‘CD’; contents ” => ‘abCD’ ”

 なお、書き込み専用ストリームでcontentsはポジションの位置までのデータしか示さないので、もし全データを参照したいときはsetToEndでポジションを既存の最後のデータの位置まで移動しておく必要があります。

MYSTREAM setToEnd; contents ” => ‘abCDef’ ”

 余談ですが、書き込み専用ストリームは、長さ(要素数)固定のコレクションである文字列や配列の要素を自動生成したい場合などに重宝します。たとえば1から100までを要素に持つ配列は、次のように、ストリームを使って作ることも可能です。(もちろん1から100までなら、もっとシンプルな方法もありますが、あくまでもストリームを使った例ということで)

| stream |
stream _ Array new writeStream.
(1 to: 100) do: [:each | stream nextPut: each].
^ stream contents


 この手続きを抽象化した「SequenceableCollection class >>#streamContents:」というクラスメソッドもあります。内部的には上とまったく同じことをしているのですが(「streamContents:」を選択後、browse itでソースを確認してみてください)、一時変数の宣言が不要で、要素の生成ロジック(とストリームへの追加)だけを記述すればよいので全体のスクリプトもよりすっきりとしたものにできるでしょう。

^ Array streamContents: [:stream |
   (1 to: 100) do: [: each | stream nextPut: each]]

 以上を踏まえて、次回はファイルストリームとそこでの日本語データの扱いについて触れます。なお、今回使用したグローバル変数MYSTREAMは、次の式をdo itすれば削除できます。

Smalltalk removeKey: #MYSTREAM

バックナンバー:
http://squab.no-ip.com:8080/mosaren/

ニュース・解説

今週の解説担当:木下 誠

WWDCも無事終了しましたね。MOSADeNの読者からも、多くの方が参加したと思います。今回は、はじめにIntelチップ採用という大きなニュースがありました。いまから対応策を検討している方もいるでしょう。その反面、OSの大きなアップデートは2006年末か2007年まで行われないことが確認され、ソフトウェア関連ではあまり大きな発表はありませんでした。

次の一年間は、Intelチップへの対応と、Tigerテクノロジーの熟成がテーマになりそうです。

———————————————————————-
次期Macintoshで、Intelチップを採用
———————————————————————-

すでに各所で報じられている通り、2006年よりMacintoshにIntelチップが採用されることになりました。

開発者に向けては、Intel inside Macintoshを試すための、Developer Transition Kitの提供が始まっています。$999でIntel Macを手に入れることができます(要返却)。また、PowerPCとIntelの両チップに対応する、Universal Binaryを作成するためのガイドラインが公開されています。一言で言うと、Xcodeを使って、エンディアンに気をつけろ、という内容ですね。

Developer Transition Kit
http://developer.apple.com/transitionkit.html

Universal Binary Programming Guidelines
http://developer.apple.com/documentation/MacOSX/Conceptual/universal_binary/

———————————————————————-
Xcode 2.1が公開、フリーとなるWebObjects 5.3を含む
———————————————————————-

Intelチップ採用の話に合わせて、Xcodeがアップデートし、2.1となりました。このバージョンでは、PowerPCおよびIntelチップ向けの、Universal Binaryを作ることができます。PowerPC上では、Mac OS X 10.4 (Universal)SDKを選択してコンパイルすることになります。Intelバイナリの実行には、とうぜんIntel Macが必要です。

また、WebObjects 5.3が公開され、このバージョンからEOModelerがXcodeに統合されることになりました。これにより、Core Dataのモデリングツールを使って、EOModelの編集を行うことができるようです。さらに、XcodeにWebObjects開発環境が付属することになりました。Xcodeは無料で配布されるので、WebObjectsもフリーで手に入れることが出来るようになるようです。詳しくは、田畑さんの「WebObjects Dev Report」も参照して下さい。

Tools – Xcode
http://developer.apple.com/tools/xcode/index.html

WebOjbects 5.3リリース
http://pcweb.mycom.co.jp/news/2005/06/07/027.html

Apple、WebObjectsをフリーアプリケーションとしてリリース
http://www.itmedia.co.jp/enterprise/articles/0506/17/news013.html

———————————————————————-
WWDCで使われたサンプルが大量に公開
———————————————————————-

ADCで、WWDCのセッションで使われたサンプルが、一般に公開されていました。すべてではないですが、かなりの量が見れます。ADCのSample Code Listのうち、6月1日から6日あたりの日付で公開されているものが、それにあたります。

WWDCのセッションはNDAのもとで行われますが、今年はTigerのすでに公になっている情報に基づくセッションが多かったためか、多くのサンプルが公開されることになったようです。

Sample Code List
http://developer.apple.com/samplecode/index-date.html

———————————————————————-
Web Kitオープンソース化
———————————————————————-

Web Kitがオープンソースプロジェクトとなり、ソースコードが公開されました。従来、そのサブフレームワークである、WebCore(KHTMLベース)とJavaScriptCore(KJSベース)だけが公開されていましたが、ほとんどのコードが公開されることになりました。一部、セキュリティに関するところは、公開されていません。CVSに直接アクセスして、ダウンロードできます。

The WebKit Open Source Project
http://webkit.opendarwin.org/

———————————————————————-
アップルが日本語ドキュメントを公開
———————————————————————-

アップルジャパンが、SpotlightおよびDashboardに関するドキュメントの日本語訳を公開していました。AJが翻訳を公開することは、重要なことだと思います。なかなかやりませんが。

Spotlightインポータのプログラミングガイド
http://developer.apple.com/ja/documentation/Carbon/Conceptual/MDImporters/index.html

Spotlightの概要
http://developer.apple.com/ja/documentation/Carbon/Conceptual/MetadataIntro/index.html

Dashboardプログラミングガイドの紹介
http://developer.apple.com/ja/documentation/AppleApplications/Conceptual/Dashboard_Tutorial/index.html

———————————————————————-
Dashboardプログラミングの解説本が発売
———————————————————————-

Dashboardプログラミングを解説した本、「Programming Dashboard」がBNN新社より発売されました。Dashboardのウィジェットを作成する手順を、ていねいに解説しています。2,940円です。

自分の本で恐縮なんですが、私、木下が書きました。宣伝です。すいません。全国の本屋で発売中なので、よろしければ手に取ってみてください。

BNN Books: Happy Macintosh Developing Time! Programming Dashboard
http://www.bnn.co.jp/books/archives/2005/04/happy_macintosh_1.html

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

MOSA Developer News   略称[MOSADeN=モサ伝]
Apple、Mac OSは米国アップルコンピュータ社の登録商標です。またそのほかの各製品名等はそれぞれ各社の商標ならびに登録商標です。
このメールの再配信、および掲載された記事の無断転載を禁じます。
特定非営利活動法人MOSA
Copyright (C)2005 MOSA. All rights reserved.