Spring2.0.4 [3]修正画面パターン
修正画面を作成。修正画面は一覧画面と同じく、画面表示時にデータをロードする処理が走り、修正ボタンを押されると更新処理が走る。
仕様 修正画面を開くと修正データがFormにロードされる 修正ボタンを押すと修正処理が走る 一覧画面修正
一覧画面に修正ボタンを追加する。
//list.jsp
<c:forEach items=”${userCommandList}” var=”userCommand”>
<tr>
<td>${userCommand.userName}</td>
<td>
<form:form commandName=”userCommandModInit”
action=’<%=request.getContextPath() + “/modinit.form” %>’>
<input type=”hidden” name=”userName” value=”${userCommand.userName}” />
<input type=”submit” value=”修正” />
</form:form>
</td>
</tr>
</c:forEach> 修正画面作成
修正画面では修正データ初期化処理でとってきた情報をFormに設定する。
//mod.jsp
<h1>修正画面</h1>
<h1>修正画面</h1>
<c:if test=”${errorMsg != null}”>
<div style=”color:red”><c:out value=”${errorMsg}” /></div>
</c:if>
<form:form commandName=”userCommandMod”
action=’<%=request.getContextPath() + “/mod.form” %>’>
<table>
<tr>
<th>ユーザ名:</th>
<td><input type=”text” name=”userName” value=”${userCommandModInit.userName}” /></td>
<td><input type=”submit” value=”修正” /></td>
</tr>
</table>
</form:form> 修正データ初期化用Controller作成
修正ボタンが押されたときに、Hiddenのユーザ名からデータを取得し、修正画面で設定するためにModelAndViewに設定する。
//UserModInitController.java
public class UserModInitController extends SimpleFormController {
Spring2.0.4 [2]一覧画面パターン
一覧画面を作成してみる。一覧画面は、表示するときにデータ取得処理が走る。
登録画面作成で気が付いた点を設計に反映しているので、構造がかなり変わっているから注意。
仕様 メニューの一覧画面リンクをクリックすると一覧画面に遷移する 一覧画面にはユーザ名の一覧が表示される 一覧画面には登録ボタンがある 登録ボタンをクリックすると登録画面に遷移する 一覧画面には修正ボタンがある 修正ボタンをクリックすると対象のユーザの修正画面へ遷移する メニューの作成
一覧画面へのリンクを作成するだけ
//menu.jsp
<ul>
<li><a href=”<%= request.getContextPath() %>/list.form”>一覧画面</a></li>
</ul> 一覧画面の作成
一覧画面には登録画面、修正画面へのリンクがある。
//list.jsp
<h1>一覧画面</h1>
<a href=”<%= request.getContextPath() %>/reg.form”>登録画面</a>
<c:choose>
<c:when test=”${userCommandList != null}”>
<table border=”1″>
<tr>
<th>ユーザ名</th>
<th> </th>
</tr>
<c:forEach items=”${userCommandList}” var=”userCommand”>
<tr>
<td>${userCommand.userName}</td>
<td><a href=”<%= request.getContextPath() %>/mod.form”>修正</a></td>
</tr>
</c:forEach>
</table>
</c:when>
<c:otherwise>
データがありません。
</c:otherwise> UserListControllerの作成
UserListControllerによって、一覧画面で表示するデータを取得する。
//UserListController.java
public class UserListController extends AbstractController {
private UserListLogic userListLogic;
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception [...]
Spring2.0.4 [1]登録画面パターン
簡単な登録画面を作成してみる。
仕様 メニューの登録画面リンクをクリックしたら登録画面へ遷移する 登録画面でユーザ名を入力し登録ボタンを押したら登録処理が走る 登録に失敗した場合は、エラーメッセージを表示して登録画面に遷移する 登録に成功した場合は、登録完了画面を表示する メニュー作成
SpringでもTilesを使えるみたいだけど、今回はシンプルにメニューを作る。
//menu.jsp
<ul>
<li><a href=”<%= request.getContextPath() %>/reg.form”>登録画面</a></li>
</ul> 登録画面作成
テキストボックスは1つのシンプルな画面。エラー時はこの画面に戻るので、エラーメッセージを表示する実装を行っている。Formの値はSimpleFormContorollerを使って処理する。
//reg.jsp
<h1>登録画面</h1>
<c:if test=”${errorMsg != null}”>
<div style=”color:red”><c:out value=”${errorMsg}” /></div>
</c:if>
<form:form commandName=”userCommandReg”>
<table>
<tr>
<th>ユーザ名:</th>
<td><form:input path=”userName” /></td>
<td><input type=”submit” value=”登録” /></td>
</tr>
</table>
</form:form> 登録完了画面
成功メッセージを表示するだけのページ。
//complete.jsp
<c:if test=”${successMsg != null}”>
<div style=”color:blue”><c:out value=”${successMsg}” /></div>
</c:if> UserControllerの作成
登録処理では入力された値をつかってビジネスロジッククラスを呼び出して処理する設計にしておく。Controllerは修正でも使えそうなのでビジネスロジッククラスを差し替えれるように作成。
//UserController.java
public class UserController extends SimpleFormController {
private IUserLogic userLogic;
public IUserLogic getUserLogic() {
return userLogic;
}
public void setUserLogic(IUserLogic userLogic) [...]
Spring2.0.4 CommandControllers
CommandControllerはSpringWebMVCの基本部分。データオブジェクトと対話する方法を提供する。また、HttpServletRequestからデータオブジェクトへのダイナミックなバインドも行う。
StrutsのActionFormに似た役割として機能する。しかしSpringではデータオブジェクトにフレームワークの仕様であるインタフェースを実装しなくてもよい。
クラス AbstractCommandController リクエストパラメタを指定したデータオブジェクトにバインディングすることができる。このクラスは機能的なFormを提供しない。しかし、Validationを提供し、リクエストパラメタ値に投入したCommandオブジェクトで何をしたらいいかを指定できる。 AbstractFormController Submitをサポート。これを使えばFormをモデリングでき、FormのデータをController内で取り出しCommandオブジェクトとして使うことができる。ユーザがFormを入力したあとに、AbstractFormControllerは
フィールドのバインディングを行い、Commandオブジェクトの妥当性チェックを行う。適切なActionを行うために、Controllerにオブ
ジェクトを戻す。無効なSubmit、Validation、フォームを使ったワークフローを提供する。Viewはフォームの表現と成功に使用され、それ
らを決定するために、メソッドを実装する。Formを使用するときはこのControllerを使う。しかし、ユーザに次に見せるViewを特定しようと
してはならない。(意味不明) SimpleFormController AbstractFormControllerを継承している。Commandオブジェクトに一致しているFormを作成するとき、さらにサポートする。Submitに成功したとき、Commandオブジェクトや、FormのためのView名、ユーザに見せるページのためのView名を指定する。 AbstractWizardFormController AbstractFormControllerを継承。典型的なウィザード形式のワークフローに対応したController。
Spring2.0.4 AbstractController
Controllerを便利にしたのがAbstractController。
handleRequestの変わりに、handleRequestInternalメソッドが呼ばれるので、このメソッドを実装する。
設定できる項目 supportedMethods サポートするHTTPメソッドをカンマ区切りで指定できる。デフォルトは「GET,POST」。PUTも設定可能 requireSession このコントローラのリクエストを処理するためにセッションが必要かどうかを設定。デフォルトはFalse。セッションが見つからない場合、ServletExceptionが投げられる cacheSeconds レスポンスのキャッシュヘッダの秒数を設定。デフォルトは-1でキャッシュが設定されない。 synchronizeOnSession 処理をシンクロナイズドさせるかを設定する。デフォルトはFalse useExpiresHeader HTTP1.0のExpireヘッダを利用するかどうか設定。デフォルトはTrue。 useCacheHeader HTTP1.1のExpireヘッダを利用するかどうか設定。デフォルトはTrue。
上記設定はBean定義ファイルに記述する。
<bean id=”testAbstractController” class=”com.daipresents.spring204.controller.TestAbstractController”>
<property name=”cacheSeconds” value=”120″/>
<property name=”synchronizeOnSession” value=”true” />
</bean> 実装例
AbstractControllerを継承した「TestAbstractController」はこんな感じ。
public class TestAbstractController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(
HttpServletRequest req,
HttpServletResponse res) throws Exception {
System.out.println(“getCacheSeconds() = ” + getCacheSeconds());
System.out.println(“isSynchronizeOnSession() = ” + isSynchronizeOnSession());
return new ModelAndView(“/index.jsp”);
}
}
しかーし、System.outした設定値を見てみても反映されていない。何か別の方法があるのかもと思って調べてみると、ApplicationContextを経由しないとだめぽい。IDてもんがあるんだからそらそうか。
public class TestAbstractController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(
HttpServletRequest req,
HttpServletResponse res) throws Exception {
ApplicationContext context
= [...]
Spring2.0.4 InternalResourceViewResolver
UrlBasedViewResolverを継承したクラス。PrefixとSuffixを設定可能。
UrlBasedViewResolver InternalResourceViewResolver Javadoc Bean定義例 <bean id=”viewResolver”
class=”org.springframework.web.servlet.view.InternalResourceViewResolver”>
<property name=”prefix” value=”/WEB-INF/jsp/”/>
<property name=”suffix” value=”.jsp”/>
</bean>
この場合、Controller内で「return new ModelAndView(“index”);」みたいにすると、「/WEB-INF/jsp/index.jsp」に置き換えてくれる。
階層が1つだったらいいけど、フォルダなんかでJSPわけたら困りそう。
Spring2.0.4 MultiActionController
MultiActionControllerを使って1つのControllerに複数のアクションをまとめることができ、これによって機能的にグルーピングすることが可能。メソッド名によってリクエストをマッピングすることができる。
呼び出すメソッドは以下の形式になっていなければならない。
public [ModelAndView | Map | void] メソッド名(HttpServletRequest, HttpServletResponse [, Exception | AnyObject]);
メソッドのオーバーロードは許されていない。さらに、メソッドを使っての例外ハンドリングも可能。Exception引数にはExceptionやRuntimeExceptionのサブクラスを指定できる。AnyObjectにはどんなクラスも指定できる。
設定できる項目 delegate MultiActionControllerには使用方法が2つある。サブクラスでMethodNameResolverを使ってメソッド名を解決する方法(この場合は、delegateを設定する必要はない)。もしくは、メソッドの解決のためにdelegateオブジェクトを定義する方法。後者を選んだ場合、このdelegateパラメタを使って定義しなければならない methodNameResolver MultiActionControllerは、やってくるリクエストからメソッドを実行するため解決方法としてMethodNameResolverインタフェースを使う。これを解決するために、このパラメタを利用する。 MethodNameResolver ParameterMethodNameResolver リクエストパラメタから解決可能。例えば「http://daipresents.com/index.view?testParam=testIt」というリクエストがきた場合、「testIt()」というメソッドが呼ばれる。paramNameプロパティで調べるパラメタ名を規定する。 InternalPathMethodNameResolver リクエストパスからファイル名を取り出し、メソッド名として使う。例えば「http://daipresents.com/testing.view」というリクエストが着たら、「testing()」が呼ばれる。 PropertiesMethodNameResolver リクエストURLとユーザ定義の値を比較して名前解決する。例えば「/index/welcome.html=doIt」と設定した場合、「/index.welcome.html」にリクエストが来たら「doIt()」メソッドが呼ばれる。このメソッド名解決はPathMatcherと一緒に動作するため「/**/welcom?.html」としてもちゃんと動作する。 サブクラスを作ってみる場合
ドキュメントに書いてなかったので作成中ですわ。
delegateパラメタを使う場合
DispatcherServletのBean定義ファイルには以下の記述をする。
<bean name=”/testmultiactioncontroller.do”
class=”org.springframework.web.servlet.mvc.multiaction.MultiActionController”>
<property name=”methodNameResolver” ref=”paramResolver”/>
<property name=”delegate” ref=”testDelegate”/>
</bean>
<bean id=”paramResolver”
class=”org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver”>
<property name=”paramName” value=”method”/>
</bean>
<bean id=”testDelegate” class=”com.daipresents.spring204.test.TestDelegate”/>
「/testmultiactioncontroller.do」が呼ばれたらMultiActionControlerが呼ばれ、methodNameResolverにparamResolverというIDで指定されたParameterMethodNameResplverが使われる。そして、委譲先にはtestDelegateというIDで指定されたTestDelegateが使われる。
続いてTestDelegateクラスには「testMethod」メソッドを用意する。
public class TestDelegate {
public ModelAndView testMethod(HttpServletRequest req, HttpServletResponse resp) {
System.out.println(“testMethodが呼ばれました。”);
return new ModelAndView(“/index.jsp”);
}
}
そして、JSPから「ContextPath/testmultiactioncontroller.do?method=testMethod」にアクセスすると、methodパラメタで指定したtestMethodが呼ばれる。
今のところBean定義ファイルにName属性で指定しないとうまくいかない。「SimpleUrlHandlerMapping」なんか使えばうまくいくみたいだけど。。。
PropertiesMethodNameResolverを使ったらこんな書き方になる。(サンプルより)
<!– Application specific multi-action controller –>
[...]
Spring2.0.4 SimpleFormController
SimpleFormControllerを使うとFormを使った処理が簡単にできる。WebアプリケーションではこのTypeの処理をよくするので。
SimpleFormController Javadoc BaseCommandController Javadoc 設定項目
以下はBaseCommandControllerから受け継いでいる。
commandName RequestにCommandクラスをバインディングするときに使う名前。 commandClass リクエストを受け取るときやリクエストパラメタを受け取るときに使うクラスを指定する。 formView ユーザが新しいFormを使うとき(はじめて画面を表示するとき)や妥当性エラーが発生したときのViewを指定する successView 処理に成功したときのViewを指定する。 実装例 public class RegController extends SimpleFormController {
private RegLogic regLogic;
public RegLogic getRegLogic() {
return regLogic;
}
public void setRegLogic(RegLogic regLogic) {
this.regLogic = regLogic;
}
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object command, BindException bind)
throws Exception {
System.out.println(“RegController.onSubmit”);
//CommandからFormの値を取得
RegCommand regCommand = (RegCommand) command;
System.out.println(“UserName = ” + regCommand.getUserName());
//BusinessLogic実行
this.regLogic.execute(regCommand);
//次の画面へ
ModelAndView mav = new ModelAndView(getSuccessView(), bind.getModel());
mav.addObject(“successMsg”, [...]
Bean定義ファイル読み込みでorg.xml.sax.SAXParseException
Bean定義ファイル読み込みでorg.xml.sax.SAXParseExceptionが発生。
Bean定義ファイルをSpringドキュメントにあわせて以下のように書いてみた。
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans/spring-beans-2.0.xsd”>
するとどうでしょう。以下のエラーが発生する。
2007/05/02 1:57:25 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
情報: Loading XML bean definitions from class path resource [com/daipresents/spring204/beans.xml]
2007/05/02 1:57:26 org.springframework.util.xml.SimpleSaxErrorHandler warning
警告: Ignored XML validation warning
org.xml.sax.SAXParseException: SchemaLocation: schemaLocation value = ‘http://www.springframework.org/schema/beans/spring-beans-2.0.xsd’ must have even number of URI’s.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.storeLocations(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDispatcher.scanRootElementHook(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown [...]
Spring2.0.4の設定ファイル
Springのドキュメントでは「configuration metadata」と呼ばれている。その他に「bean定義ファイル」や「設定ファイル」と呼ばれることもある。
設定ファイルの分割
設定ファイルを分割して利用することができる。
<beans>
<import resource=”services.xml”/>
<import resource=”resources/messageSource.xml”/>
<import resource=”/resources/themeSource.xml”/>
<bean id=”bean1″ class=”…”/>
<bean id=”bean2″ class=”…”/>
</beans>
Spring2.0.4のWebMVC
DIとかAOPとか、Springはビジネスロジックの実装が面白そうだけど、やっぱりしりたいのはWebとの連携部分。
参考:ブロストテクノロジズさん
ざっと読んでみたけど、Springのドキュメントはわかりにくい。手段がたくさんあるので、どれを選ぶかが重要になりそう。
ApplicationContextの初期化
Spring Reference 3.8.4. Convenient ApplicationContext instantiation for web applications
Listenerを使う方法とServletを使う方法がある。
ContextLoaderListenerを使う <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
applicationContext.xmlはBean定義ファイルと呼ばれるもの。
ContetLoaderServletを使う <servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> DispatcherServlet
「org.springframework.web.servlet.DispatcherServlet」はStrutsでいうActionServletに近い存在。Front Controllerデザインパターンで表現され、リクエストの受信、レスポンスの送信を一番フロントで行ってくれる。
web.xmlには以下のように定義する。サーブレット名を「sampleapp」としている。
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
DispatcherServletの初期化で、WEB-INFフォルダににある「[servlet-name]-servlet.xml」ファイルが検索される。DispatcherServletごとにBean定義ファイルを設定することができる。
今回の場合はWEB-INFフォルダに「DispatcherServlet-servlet.xml」を配置した。中身はまだ空っぽ。
Controller
MVCのうち「C」の役割を持つのがController。DispatcherServletから委譲され、かわってRequest、とResponseを受け取り、ModelAndViewを返す。
下の例では、単にindex.jspに遷移するだけのController。
public class IndexController implements Controller {
public ModelAndView handleRequest(
HttpServletRequest req,
HttpServletResponse res) throws Exception{
return new ModelAndView(“/index.jsp”);
Spring2.0.4でDI 依存性の注入
DIの実現には以下の方法がある。
Setter Injection Constructor Injection Setter Injection
依存オブジェクトを注入してみる。メインのクラスにセッターを用意して、そこにクラスを設定することでオブジェクトの注入を表す。
設定ファイル作成
CarクラスにEngineクラスを設定する。
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN 2.0//EN” “http://www.springframework.org/dtd/spring-beans-2.0.dtd”>
<beans>
<bean id=”car” class=”com.daipresents.spring204.test.Car” >
<property name=”engine”>
<ref bean=”engine”/>
</property>
</bean>
<bean id=”engine” class=”com.daipresents.spring204.test.Engine” />
</beans> コンポーネントの作成
Carクラスに、依存するEngineクラスを注入する。
CarクラスにはEngineのセッター・ゲッターを用意するだけ。注入されたオブジェクトにアクセスするためにdriveStartメソッドを用意した。
public class Car {
private Engine engine;
public void driveStart(){
Engine en = getEngine();
if(en != null){
en.startEngine();
}else{
System.out.println(“エンジンがないので動きません。”);
}
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
}
Engineクラスはエンジンをスタートすることができるクラス。
public class Engine {
Spring2.0.4のIoCコンテナ
BeanFactoryはSpringの中で最も重要になるクラス。DI(依存性の注入)をBeanFactoryを使ってみてみる。
インスタンスの生成
BeanFactoryとは別にApplicationContextというクラスを使ってBeanを生成することもできる。「どっちを使えばいいのか?」と悩んでしまうが、ドキュメントには以下のように書いていた。
ユーザはBeanFactoryとApplicationContextのどちらが状況に適しているか迷ってしまう。BeanFactoryは大体の場合、インスタンス生成やBeanの設定に使える。ApplicationContextもまた同じで、たくさんのエンタープライズ仕様や、トランザクション処理やAOPといった機能を実現する基盤をサポートしてくれる。ようは、できるだけApplicationContextを使ったほうがいい
XMLBeanFactoryを使う場合
BeanFactoryを実装したXMLBeanFactoryを利用したインスタンス生成。
Resource resource = new ClassPathResource(“/com/daipresents/spring204/beans.xml”);
XmlBeanFactory factory = new XmlBeanFactory(resource);
Car car = (Car)factory.getBean(“car”); ApplicationContextを使う場合
結局BeanFactoryを取得している感じになる。
ApplicationContext context =
new ClassPathXmlApplicationContext(“/com/daipresents/spring204/beans.xml”);
Car car = (Car)context.getBean(“car”);
ClassPathXmlApplicationContextのコンストラクタに複数のファイルを指定することもできる。
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[]{“aaa.xml”, “bbb.xml”}); XMLBeanFactoryを使ってDIを体感
XMLBeanFactoryを使って「設定を利用から分離する」というDIの概念を勉強。
設定ファイル作成
まずは、設定ファイルを作る。同じクラスを使って、2種類の振る舞いを行ってくれるようにしてみた。
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN 2.0//EN” “http://www.springframework.org/dtd/spring-beans-2.0.dtd”>
<beans>
<bean id=”japan” class=”com.daipresents.spring204.test.Message” >
<property name=”message” >
<value>こんにちは、世界!</value>
</property>
</bean>
<bean id=”usa” class=”com.daipresents.spring204.test.Message” >
<property name=”message” >
<value>Hello,World.</value>
</property>
</bean>
</beans> コンポーネント作成
「設定を利用から分離する」という考えを持って、再利用性が高いコンポーネントになるようにコンポーネント設計を行う。これが多分難しいところなのだが、今回はサンプルなので、設定値を変えるだけで、クラスの振る舞いを変えるという簡単なクラスを作ってみた。
単純に自分に設定されたmessageをspeakメソッドでプリントしてくれるクラス。
public class Message {
private String message;
public void speak(){
[...]
僕について
Dai Fujihara
A hero can be anyone.
藤原大はマネージャでありアジャイル実践者だ。そして、プロジェクトリーダー、チェンジ・エージェント、アジャイルコーチ、トレーナーでもある。彼はまたRedmine、Jenkinsといった開発を支援するツール環境の整備や、アジャイル開発を活用した創造的なソフトウェア開発の支援を行っている。さらに、趣味は沖縄離島巡りらしい。
ここ最近の人気
アジャイルコミュニティは超めんどうくさい… 958 view(s)
3年使ったRedmineの使い方について共有したい10の… 564 view(s)
チームとタワーを創造せよ!マシュマロチャレンジでチームビ… 302 view(s)
Javaで入力チェックに使える正規表現まとめ… 208 view(s)
Redmineプラグイン開発 – 史上最高のチームプラグ… 155 view(s)
開発ツールを使うと「思いやり」が減る(前半) #swat… 122 view(s)
開発ツールを使うと「思いやり」が減る(後半) #swat… 120 view(s)
Redmineプラグイン開発 – パーキングロットチャー… 98 view(s)
LinkStationのようなNASを買ってもバックアッ… 94 view(s)
DAOとかDTOとかVOとかEntityとか… 89 view(s)
永久保存の本
Jonathan Rasmusson (著), 西村 直人 (翻訳), 角谷 信太郎 (翻訳)
アジャイルサムライ―それはソフトウェアを顧客に届ける猛々しきプロフェッショナルだ。本書では、圧倒的なアジャイルプロジェクトの姿を見せる。2011年爆発的にヒットしたアジャイル開発に情熱を持つエンジニアに届けたい本。
Mike Cohn (著), マイク コーン (著), 安井 力 (翻訳), 角谷 信太郎 (翻訳)
採用した現在のタイトルは、見積りや計画づくりといったプロセスを、アジャイルに進めなければならないと謳っているのだ。見積りと計画づくりがアジャイルでないのに、プロジェクトがアジャイルであるということはありえない。(イントロダクションより)
Venkat Subramaniam (著), Andy Hunt (著), 木下 史彦 (監訳), 角谷 信太郎 (監訳)
アジャイルな習慣とは一体何なのか?本書ではプラクティスを交えながら、その姿勢を読者に問いかけている。世代や役割をこえて色褪せない「アジャイル」に対する良書。Amazonレビュー
メアリー・ポッペンディーク (著), トム・ポッペンディーク (著), 高嶋 優子 (翻訳), 天野 勝 (翻訳), 平鍋 健児 (翻訳)
「トヨタ生産方式」を源流にする「リーン開発」をソフトウエア開発に取り入れるための具体的方法を紹介した本です。本書は、リーンの7大原則を「価値」「ムダ」「スピード」「人」「知識」「品質」「パートナー」に整理し、ソフト開発現場にどうしたら効果的に適用できるかを、多くの実例を交えながら具体的に説明します。
タグ
Agile ant Apache bash Eclipse GlassFish install Java Javascript kobo Linux log4j Management Maven Open Source PHP Pukiwiki Python Redmine Ruby Ruby on Rails Scrum Spring Struts Struts2 Subversion Test Tomcat Trac VBA Web WebDriver WebLogic Windows WordPress 働く 勉強会 嫁(ベータ) 思い出し笑う 我思う 旅する 映画/ドラマ 英語を話す 読むと聞く 過去を語るアーカイブ









