RSS

カテゴリー別アーカイブ: engineer

アジャイルが悪くないたったひとつの理由

緊張感が持続する。
これに尽きると思う。
スプリントの成果として動くものを生み出すというのは、なんだかんだ言って大変な労力だし、ゴールが明確なだけすごいプレッシャになる。
これがチームに緊張感をもたらし、結果的に持続的なパフォーマンスを生み出す。
Think Simpleで、忙しすぎるぐらいがパフォーマンスを出すには丁度いい、と書かれていましたがそう思います。

ただ、それなりにレベルが同じ人、それなりに計画ができるマスタが揃わないとオススメできない。
お金をもらって仕事を請け負う場合、アジャイルやるにしても計画はする。
最終ゴールを設定して、それを分割して、変化、変更を見込んで計画できるセンスのある人がマスタじゃないと、納期にあわせられなくて失敗する。
あと、チームとして動かすことが前提だから、レベルにデコボコがあるとまずうまく回らない。
動くものまで短期間に仕上げる必要があるので、どうしてもチームでのコミュニケーションは多くなる。
ここで問題になるのが、レベルの違いによる会話が通じない問題。
レベルが違うと会話が成立しないのです。
こうなるとコミュニケーションにとてもコストがかかるようになり、どんどん時間を消費していく。

ということなんだけど、来年度はレベルにデコボコができそうなんだよなあ。。。

広告
 
コメントする

投稿者: : 2013/03/25 投稿先 engineer

 

logbackを使う

昔はJavaにおけるロギングフレームワークといえばcommons-logging、log4jあたりが鉄板でしたが、今はlogbackslf4jあたりが鉄板なのかなと。
というわけで、logback+slf4jを使うための設定をまとめてみます。

自分はMavenを使ってモジュールのBuildをしているのでMavenのコンフィグレーションです。
まず、必要な依存性として以下を定義。

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>${org.slf4j.slf4j.version}</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-ext</artifactId>
  <version>${org.slf4j.slf4j.version}</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>${org.slf4j.slf4j.version}</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jul-to-slf4j</artifactId>
  <version>${org.slf4j.slf4j.version}</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>${ch.qos.logback.logback.version}</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-core</artifactId>
  <version>${ch.qos.logback.logback.version}</version>
</dependency>
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-access</artifactId>
  <version>${ch.qos.logback.logback.version}</version>
</dependency>

あと、commons-loggingやlog4jのライブラリが依存に入っていると競合して想定した動作をしてくれないため、これらのライブラリが使われていないことをチェックする定義を書きます。
これは、maven enforcer プラグインの力を借ります。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <executions>
    <execution>
      <id>enforce-versions</id>
      <goals>
        <goal>enforce</goal>
      </goals>
      <configuration>
        <rules>
          <bannedDependencies>
            <searchTransitive>true</searchTransitive>
            <excludes>
              <exclude>commons-logging</exclude>
              <exclude>log4j:log4j</exclude>
              <exclude>org.slf4j:1.5*</exclude>
            </excludes>
          </bannedDependencies>
        </rules>
        <fail>true</fail>
      </configuration>
    </execution>
  </executions>
</plugin>

もし、このプラグイン設定をして Build でエラーが出るようなら、mvn dependency:tree コマンドで依存ツリーを表示し、commons-logging などが無いか確認します。
もし、使っているライブラリからの依存で読み込まれていたら、そのライブラリの dependency 定義で exclusion してやります。

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>${org.springframework.spring.version}</version>
  <exclusions>
    <exclusion>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

これで、logback.xml を書いてやればOK。
logback.xml の書き方はあちこちに参考になる記事がありますのでそちらを見てみてください。
これで、変に依存ライブラリにログが吸い込まれたりすることもなく、ロギングコントロールを一本化できます。
ログはデバッグの要なので、ロギングフレームワークもしっかり固めておきたいところ。

 
コメントする

投稿者: : 2012/09/09 投稿先 engineer, java