トップスポーツチームの監督に教わる秘訣
この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。
作者 Werner Schuster, 翻訳者 金森 諭 投稿日 2008年8月14日 午後6時0分
RubyFringe(Ruby過激派の意味)(リンク)の講演で、Merbプロジェクトの参画者でもあるEngineYardの従業員のYehuda Katz氏(リンク)が未来を見通すためにいくつかのツールを紹介した。それらはドキュメント生成ツールで、そのひとつであるYARD(リンク)ではRubyドキュメントにメタデータを付けることができる。YARDはRDoc形式のデータによく適用するよう設計されているが、異なるマークアップ表記法も扱える。YARDは拡張性が高く、コード生成や別の出力エンジンのための独自ハンドラをプラグインすることができるようになっている。
特徴的なのはコメント内でのメタデータをサポートしていることで、Javadocのようなツールのユーザが慣れ親しんでいる形のメタタグが扱える。次のはYARDのReadme(from the YARD Readme(リンク))に含まれているコメントだ。
# Reverses the contents of a String or IO object.
#
# @param [String, #read] contentsはリバースするデータを格納する
# @return [String] 辞書順でリバースされたcontents
def reverse(contents)
contents = contents.read if respond_to? :read
contents.reverse
end
このcontentsパラメータについてのコードからメソッドの引数の型についての情報をどのように付加すればいいかがわかる。引数はStringであっても#readメソッドを持つどのようなクラスであってもいいのだ(InfoQは以前プロトコルとダックタイピングに関するアノテーションを付加するいくつかの方法について議論している(参考記事・英語))。
RDoc 2.1(リンク)とYARDはメソッドについてメタプログラムしてドキュメントを作る機能がある。RDocではコメントを"##"で始めるとメタプログラムの定義となる。特徴的なのは##の後のコメント行を無視してそれに続く要素をメソッド名として扱うことである。
##
# 何かするメソッド
add_method :foo
##
# :method invisible_method
YARDはプラガブルなハンドラ(リンク)によって構築される。実際に基本機能もハンドラの集まりとして実装されている。新しいハンドラはYARD::Handlers::Baseクラスを拡張することでつくることができ、処理をおこなうクラスをオーバーライドして独自のコード生成を行うハンドラをつくって、内部DSLやRDocに似たことをすることができる。
YARDをプロジェクトで実行すると、収集したコード構造とデータをキャッシュした.yardocデータベースを作る。RDocのriにあたるYRADのyriツールはこのデータベースを使ってドキュメントを対話式に検索することができる。またYARDはデータベースにキャッシュされた情報を使って、解析を何度もおこなわないでも複数の形式でドキュメントを出力することもできる。YARDのキャッシュはIDEによって生成されるコードインデックスに似たもので、より強力なコード検索(たとえば言語要素の検索を単なるフルテキスト検索以上にできる)、コードブラウジングがおこなえたり、プロジェクトの全コードに対してリファクタリングしないといけない時のツールとして使うことできる。
コメント内でメソッドについてのメタデータを扱うというアイディアはRubyの世界では何度も出てきていたことだった。いくつかのプロジェクトではコメントに任意の型アノテーションをもたせる方法を推進している。たとえばMerbには次のようなドキュメント作成ガイドライン(リンク)がある。
全てのメソッド(publicもprivateも)には明確なメソッドシグネチャが必要です。それには各パラメータの型、各ハッシュで指定可能な値、戻り値の型やその他の情報が含まれます。
Merbは今のところメソッドシグネチャを指定するのに別の表記法を用いている。
SapphireSteelのRuby In Steel IDE(リンク)では型アサーション(リンク)という方法がサポートされている。そのメタデータはJavadocやYARDの@tagとは異なった形式だが、インデックス化されドキュメント作成に使ったりIntelliSense(自動補完などの支援機能)で利用することができる(動画で型アサーションを使ったIntelliSenseの使い方が説明されている(リンク)。
原文はこちらです:http://www.infoq.com/news/2008/07/yard-documentation-generator
ITマネージャ必聴!IT活用セミナー 勝ち残りの法則~管理・統合化スペシャル~
12/5 CSQ会員限定技術情報交換会にてJCP議長が標準化について語る
InfoQ Japanはコンポーネントスクエアが運営しています
この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。
マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。
Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。サブミッションが選択された人、そうでない人も含めて、個々の目的意識の確認、膨大なプログラムから聞きたいセッションの選択、旅行の準備、プレゼンテーションの準備の期間を終えて、無事当日を迎えました。
筆者はアジャイルソフトウェア開発についての年に一度の国際会議であるAgile2008に初めて参加してきました。今年の日本からの参加者の数は14名にも及び、発表者は5名、受け持ったセッションは8つに及び、例年にない活躍を見せました。なぜ今年のAgile2008では、これほど多くの日本人が参加し発表に至ったのか? そのレポートをお届けします。
エスエムジーでは、Java全般を対象にしたトラブルシューティングサービス「JaTS」を提供しています。この記事では、前回に引き続き、JaTSにて蓄積したトラブル事例とその解決ノウハウの一部をお送りしている「Javaトラブルシューティングメールマガジン」(JTSMM)の総集編として、過去2ヶ月のトラブル事例と追加情報をダイジェストとして提供いたします。
この記事では、モデル駆動アプローチがうまく機能しない、または機能しなくなることによって期待した結果が実現できなくなる 8 つの理由について書きたいと思います。
No comments
返信