狠狠撸

狠狠撸Share a Scribd company logo
公司で使う厂辫谤颈苍驳

       鈴木雄介
グロースエクスパートナーズ(株)
     JSUG/JJUG/SIProp
  http://www.arclamp.jp/


       2009/6/24
はじめに
? 鈴木雄介
 – IT?ーキテクト
 – 今の主な仕事は、顧客企業側に立って標準化
   の策定/推進を行うこと
 – Spring好き。規約より設定重要
  ? ?ノテーション嫌い
 – 今日の目標:難しく言わない
 – つっこみ歓迎
アジェンダ
?   システム開発で大事なこと
?   設計と実装
?   なぜSpringを使うのか
?   Springの使い方
システム開発で大事なこと
? “安く作る”より”安く使う”
 – 保守性の高い?プリ
? ?プリの枠より作業の枠
 – 構成管理と自動化
? ベストよりバランス
システム開発で大事なこと
? “安く作る”より”安く使う”
 – 保守費の割合は60-80%程度。最初に作るコ
   ストのうち実装は1/3程度。つまり、実装コ
   ストは?プリの一生からすると7%-13%程度
 – 時代背景からすると、今後、ますます仕様変
   更は増えている。拡張性は重要なテーマ
 – 保守性の高い?プリケーションを、どう作る
   のか
参考:保守性
? 保守性とは
 – 解析性:バグの原因を早く見つけたい
   ? ソフトウェ?にある欠陥の診断または故障原因の追及、およ
     びソフトウェ?の修正箇所の識別を行なうためのソフトウェ
     ?製品の能力のこと。
 – 変更性:修正するときにめんどくない
   ? 指定された修正を行なうことができるソフトウェ?製品の能
     力のこと。修正の実施にはコーデ?ング、設計、および仕様
     書の変更を含みます。
 – 安定性:デグレや他影響が少ない
   ? ソフトウェ?の修正による、予期せぬ影響を避けるソフト
     ウェ?製品の能力のこと。
 – 試験性:テストするのが楽
   ? 修正したソフトウェ?の妥当性確認ができるソフトウェ?製
     品の能力のこと。
    JIS X 0129-1 ソフトウェ?製品の品質-第1部:品質モデルより
システム開発で大事なこと
? ?プリの枠より仕事の枠
 – 個別の?プリケーションは最適化されていく
   べき。”平均的”な?プリケーションは存在し
   ない=標準フレームワークって意味あるの?
  ? 意味ないことはないけど、緩めに設計する必要が
    ある
 – 仕事の仕方を合わせた方が効果は高い
  ? 構成管理重要。ソースコード、課題
  ? 自動化重要
システム開発で大事なこと
? バランス、バランス、バランス
 – すべての利害関係者(未来含む)の調整が重
   要
 – 個別最適と全体最適
 – “判断は遅く”でも”早く決める”
設計と実装
 ? コンポーネントの集約は大事
   – ただし、機能とクラスは必ず直交するので矛
     盾が生じやすい。もう、これは運命
          クラスA   クラスC         クラスD   クラスG

同じ機能は、同
じクラスに集約                 機能A

                              クラスE
                        機能B
もし変更があれ
ば、すべての機
能に影響が出
てしまう                    機能C

          クラスB                クラスF   クラスH
設計と実装
? コンポーネントの分離は重要
 – 実装要件の違いで切れる
  ? トランザクションの切れ目、?ーキテクチャの切
    れ目、UIとデータとロジック
 – 分業のための分離と、その統合
  ? 互いの作業が、なるべく影響し合わないように、
    コンポーネントに分離する
  ? ただし、コンポーネントの統合がビッグバンにな
    らないように注意する
   – ?ンターフェース定義、カプセル化、責務、ロール
設計と実装
? コンポーネントの適切なデザ?ンが要
 – ただし、要件分析/概要設計段階で織り込む。
   実装/詳細設計段階でデザ?ンを変えることは
   難しいし、そんなコストはかけられない
  ? 再利用=抽象化は設計段階で検討するべき内容
 – コードこそ矛盾のない「真の設計書」
  ? 早くコードにするほど矛盾が分かる。プロトタ?
    プは設計の仕事
設計と実装
? デザ?ンパターン
 – “デザ?ン”パターンは”設計”段階で使うもの
 – 設計方法論は難しい。美しい方法論は、基本
   的にあやしい(象牙の塔)
  ? DDDは、特に難しいと思う。相当、ドメ?ンのビ
    ジネス知識がないと無理。
設計と実装
? 未来への対応
 – 5年後の誰かが悲しまないために
  ? 「なんだよ、この設計/実装!ありえん」
 – 今後、拡張性や柔軟性がもっと求められる
  ? 小規模は作りなおせばいいじゃんでもOK
 – 可変性分析
  ? 拡張の方向性や手段について、きちんと確定して
    おく
なぜSpringを使うのか
? Springはフレームワークのフレームワー
  ク
 – 個別?プリのためにフレームワークを構築す
   るためのフレームワーク
 – 開発効率よりもSpringらしい”スタ?ル”を重
   視
 – さまざまな3rd Partyプロダクトに対応し、中
   立性を重んじる。なるべく個性を削らない
 – EAIやSOAなどに連携可能
なぜSpringを使うのか
? Springを使う上では、
 – オススメのプラクテ?スはあまりないので、
   自分で決めてからやる
   ? 実装フレームワークもコンポーネント分割も
 – 設定は確かに複雑になるので担当者を明確に
   する。あと設定フ??ルの分離重要
 – 使いこなすとすごいけど、設定が難しいプロ
   ダクトがある
   ? WebFlow、Security
なぜSpringを使うのか
? なぜSeasarを使わないのか
 – Seasarは優秀なWeb?プリフレームワーク
 – 開発の効率化、エンジニ?の能力向上に注力
 – プラクテ?ス(実践)や規約を重視
 – 適切な部分には、ぜひ使うべき
Springの使い方
? というわけで、非機能の話を中心に
 – コンポーネント化
  ? 外部リソース?クセスの分離
  ? 横断的関心事の分離
 – ロギング
 – Maven2のプロフ??ル機能
外部リソースアクセスの分離
? 例:ログ?ン処理
 – 1.ログ?ン情報を受け取る
 – 2.LDAPで認証
 – 3.DBからユーザー情報を獲得
 – 4.ログ?ン履歴を保存
 – 5.認証認可情報を返却する
? 2,3,4は外部リソース?クセスなので分離
  するように作る
外部リソースアクセスの分離
? シーケンス図

                                              Login
         LoginBL       LDAP認証      UserDao
                                             Logger
ログイン(ログイン情報)

               認証フラグ:認証(認証情報)




               ユーザー情報:検索(ユーザーID)



               ログ(ユーザー情報)


:ユーザー認証情報
外部リソースアクセスの分離
? メリット
 – テストがしやすい、デバッグもしやすい
 – 個別に実装が遅れても逃げられる。たいてい
   は要件確定が遅れる
横断的関心事の分離
? ?スペクト指向=見地
? 横断的関心事って?
 – 「メソッドの最初や最後に必ず書く」みたい
   なもの
 – ログ、トランザクション、セキュリテ?
  ? ServletFilterは、AOP的

               ア
               ス
               ペ          クラス
               ク
               ト
横断的関心事の分離
? 実装の考え方
 – 基本はProxyパターンで理解する
                                LoginBlImpl
           <Interface>
                                Implements
             LoginBl
                                  LoginBl




                                              LoginBlImpl
  <Interface>         LoginInterceptor
                                              Implements
     MyBl            implements MyBL
                                                LoginBl
横断的関心事の分離
? SpringのAOPを使う
 – ポ?ントカット:どこに挟むのか
 – ?ドバ?ザー:何を挟むのか
? 使いどころ
 – 性能検証
 – ?クセスログ(内部統制で)
 – 更新日や更新者の自動設定
ロギング
? ロギングはSLF4JとLogbackがオススメ
 – Log4jの作者の新作
? 使い方
 – ログ出力:org.slf4j.Logger;
 – 設定: appenderとlogger
ロギング:APIの使い方
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SampleLogic {
  private static Logger logger
    = LoggerFactory.getLogger(SampleLogic.class);

    public void execute() throws Exception {
      if (logger.isTraceEnabled()) {
        logger.trace("trace level");
      }
      if (logger.isDebugEnabled()) {
        logger.debug("debug level");
      }
      logger.info("info level");
      logger.warn("warn level");
      logger.error("error level");
    }
}
ロギング:設定ファイル
<?xml version="1.0" encoding="UTF-8" ?>
 <configuration debug="true">
  <appender name="STDOUT" class="ch.qos.logback.core.Console
    <Target>System.out</Target>
    <layout class="ch.qos.logback.classic.PatternLayout">
     <Pattern>
      %d{HH:mm:ss.SSS} [%thread] %-5level %logger{10} - %msg
     </Pattern>
    </layout>
  </appender>
  <logger name="org.springframework" level="WARN" />
  <logger name="org.apache" level="WARN" />
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>
ロギング:マーカー
? マーカー
 – マーカーを付けると、出力先を分けることが
   できる。
 private IMarkerFactory markerFactory;

 @Override               マーカーを指定
 public void logging(User user) {

     logger.info(markerFactory.getMarker("login"),
     “user loged in “ + user.getName());

 }
ロギング:マーカー

<appender name=“LOGIN" class="ch.qos.logback.core.ConsoleApp
 <Target>System.out</Target>
 <layout class="ch.qos.logback.classic.PatternLayout">
   <Pattern> LOGIN %logger{10} - %msg%n </Pattern>
 </layout>
 <filter class="jp.arclamp.jsug.sample.log.MarkerFilter">
  <marker>login</marker>
  <OnMismatch>DENY</OnMismatch>
  <OnMatch>ACCEPT</OnMatch>
 </filter>
</appender>

         フィルターを適用して、出力を制御
ロギング:コンバーター
? コンバート
 – 要素conversionRule
   ? 属性conversionWord:キーワード
   ? 属性converterClass:出力クラス
? パターンのところで出力が可能
 – %{conversionWord}%
? 使いどころ
 – ログへのログ?ンユーザー情報出力
ロギング:コンバーター
                                              キーワード
<?xml version="1.0" encoding="UTF-8" ?>       の設定
 <configuration debug="true">
  <conversionRule conversionWord="user"
    converterClass=" jp.arclamp.jsug.sample.user.UserInfoCon
                             コンバータークラスの指定
 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleA
  <Target>System.out</Target>
  <layout class="ch.qos.logback.classic.PatternLayout">
   <Pattern>
%d{HH:mm:ss.SSS} [%thread] [%user] %-5level %logger{10} - %m
   </Pattern>
  </layout>
 </appender>                       ここが置換される
 <root level="DEBUG">
  <appender-ref ref="STDOUT" />
 </root>
</configuration>
ロギング:コンバーター
                                             継承してコンバー
package jp.arclamp.jsug.sample.user;         ターを作成

import jp.arclamp.jsug.sample.log.LogConverterTest;
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.LoggingEvent;

public class UserInfoConverter extends ClassicConverter {
  @Override
  public String convert(LoggingEvent event) {
    return UserInfoHolder.get();
  }
}

         出力する文字列を返却
Maven2のプロファイル機能
? 環境毎に設定フ??ルの切替を実施
 – DB接続設定やログ設定などの切替
 – ローカル、IT、本番…など、プロフ??ルを
   カスタマ?ズ可能
? コマンドラ?ン(-P{プロフ??ル名})
 – mvn eclipse:eclipse –Plocal
 – mvn package -Pproduction
Maven2のプロファイル機能
<profiles>          プロファイル名の指定
 <profile>
  <id>local</id>
  <build>
   <resources>                 プロファイルで有効になる
    <resource>                 ディレクトリの指定。
     <directory>src/main/resources/local</directory>
     <includes>
      <include>*.properties</include>
      <include>*.xml</include>
     </includes>
    </resource>
   </resources>
  </build>
</profile>
Maven2のプロファイル機能
? フォルダ側



            他のモノは無視




              クラスパスに通る
サンプルコード
? ブログエントリ

? サンプルコード
ライセンスについて
?   JSUGマスコット??コン(本スラ?ド左下)が残されている場合に限り、本作品
    (またそれを元にした派生作品)の複製?頒布?表示?上演を認めます。

?   非商用目的に限り、本作品(またそれを元にした派生作品)の複製?頒布?表示?
    上演を認めます。

?   本作品のラ?センスを遵守する限り、派生作品を頒布することを許可します。

More Related Content

What's hot (20)

PDF
マイクロサービスに至る歴史とこれから - XP祭り2021
Yusuke Suzuki
?
PDF
MicroserviceでのNoOps戦略 - NoOps Meetup Tokyo #2 #NoOpsJP
Yusuke Suzuki
?
PDF
エンタープライズ、アーキテクチャ、アジャイルのこれから
Yusuke Suzuki
?
PDF
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
Yusuke Suzuki
?
PDF
アジャイル开発を支えるアーキテクチャ设计とは
Yusuke Suzuki
?
PDF
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
Yusuke Suzuki
?
PDF
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall
Yusuke Suzuki
?
PDF
闯闯鲍骋初心者のための闯补惫补/闯闯鲍骋讲座
Yusuke Suzuki
?
PDF
アーキテクチャとアジャイルプロジェクトをまともに進めるための両輪について-DevLOVE関西 #DevKan
Yusuke Suzuki
?
PDF
なぜソフトウェアアーキテクトが必要なのか - デブサミ2011
Yusuke Suzuki
?
PDF
20130629 KA法ワークショッフ?@DevLOVE仙台
chachaki chachaki
?
PDF
闯补惫补はコミュニティの力で再び伟大になれるのか
Yusuke Suzuki
?
PPTX
20140126 KA法ワークショップ@DevLOVElove関西
chachaki chachaki
?
PDF
なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423
Yusuke Suzuki
?
PDF
エンタープライズアジャイルと全体最适について ~アーキテクチャ设计とウォーターフォールの必要性~
Yusuke Suzuki
?
PDF
Javaのカルチャーとグロース - MANABIYA 2018
Yusuke Suzuki
?
PDF
DX時代に目指すべき品質向上とテスト - @IT ソフトウェア品質向上セミナー 2019夏
Yusuke Suzuki
?
PDF
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
Yusuke Suzuki
?
PDF
Javaとコミュニティの歩み 2020
Yusuke Suzuki
?
PDF
エナジャイル设立によせて
Yusuke Suzuki
?
マイクロサービスに至る歴史とこれから - XP祭り2021
Yusuke Suzuki
?
MicroserviceでのNoOps戦略 - NoOps Meetup Tokyo #2 #NoOpsJP
Yusuke Suzuki
?
エンタープライズ、アーキテクチャ、アジャイルのこれから
Yusuke Suzuki
?
エンタープライズアジャイルでチームが超えるべきこと - エンタープライズアジャイル勉強会 2018年10月セミナー
Yusuke Suzuki
?
アジャイル开発を支えるアーキテクチャ设计とは
Yusuke Suzuki
?
エンタープライズアジャイルにおける要求探索の勘所 要求開発アライアンス2018年7月定例会
Yusuke Suzuki
?
Javaエンジニアのためのアーキテクト講座-JJUG CCC 2014 Fall
Yusuke Suzuki
?
闯闯鲍骋初心者のための闯补惫补/闯闯鲍骋讲座
Yusuke Suzuki
?
アーキテクチャとアジャイルプロジェクトをまともに進めるための両輪について-DevLOVE関西 #DevKan
Yusuke Suzuki
?
なぜソフトウェアアーキテクトが必要なのか - デブサミ2011
Yusuke Suzuki
?
20130629 KA法ワークショッフ?@DevLOVE仙台
chachaki chachaki
?
闯补惫补はコミュニティの力で再び伟大になれるのか
Yusuke Suzuki
?
20140126 KA法ワークショップ@DevLOVElove関西
chachaki chachaki
?
なぜソフトウェアアーキテクトが必要なのか - Devlove 20110423
Yusuke Suzuki
?
エンタープライズアジャイルと全体最适について ~アーキテクチャ设计とウォーターフォールの必要性~
Yusuke Suzuki
?
Javaのカルチャーとグロース - MANABIYA 2018
Yusuke Suzuki
?
DX時代に目指すべき品質向上とテスト - @IT ソフトウェア品質向上セミナー 2019夏
Yusuke Suzuki
?
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
Yusuke Suzuki
?
Javaとコミュニティの歩み 2020
Yusuke Suzuki
?
エナジャイル设立によせて
Yusuke Suzuki
?

Viewers also liked (17)

PDF
DevLOVE2009 開発以外に大事な4つのこと
Yusuke Suzuki
?
PDF
食と农の再生シンポ0925糸长pp
y246ra
?
PDF
クラウドを超えた先の企業システム像 20091008 JJUG CCC
Yusuke Suzuki
?
PDF
10 Things It Architect Should Know
Yusuke Suzuki
?
PDF
要件定义すれば要求が理解できる、なんてことはない
Yusuke Suzuki
?
PDF
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール?環境篇>」
Yusuke Suzuki
?
PDF
自己紹介 糸井重里さんインタヒ?ュー用
コピーライターはせがわ てつじ
?
PDF
ユーザー企業における標準化のあり方 : QCon Tokyo 2010
Yusuke Suzuki
?
PPTX
SPICE MATLABユーザー向け二次電池シミュレーションセミナー資料(05JUN2015)
Tsuyoshi Horigome
?
PDF
【B-3】 創業122年の企業と顧客価値にコミットした開発を実現する試みと成果について
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
?
PDF
齿笔祭り2014「アジャイルを手放して得られたこと」
Yusuke Suzuki
?
PDF
すごい自己绍介
Hikaru Wada
?
PDF
JavaOne 2016総括 #jjug
Yusuke Suzuki
?
PDF
ユーザー企業へのアジャイル導入四苦八苦 - エンタープライズアジャイル勉強会2016年11月セミナー
Yusuke Suzuki
?
PDF
今どきのアーキテクチャ設計戦略 - QCon Tokyo 2016
Yusuke Suzuki
?
PDF
プロダクトオーナーは育成できるのか? - プロダクトオーナー祭り2016
Yusuke Suzuki
?
PDF
滨罢アーキテクトの思考法
Yusuke Suzuki
?
DevLOVE2009 開発以外に大事な4つのこと
Yusuke Suzuki
?
食と农の再生シンポ0925糸长pp
y246ra
?
クラウドを超えた先の企業システム像 20091008 JJUG CCC
Yusuke Suzuki
?
10 Things It Architect Should Know
Yusuke Suzuki
?
要件定义すれば要求が理解できる、なんてことはない
Yusuke Suzuki
?
Agile Japan 2010 「変化を受け入れるアジャイルなプロジェクトマネジメントと現場 &lt;ツール?環境篇>」
Yusuke Suzuki
?
自己紹介 糸井重里さんインタヒ?ュー用
コピーライターはせがわ てつじ
?
ユーザー企業における標準化のあり方 : QCon Tokyo 2010
Yusuke Suzuki
?
SPICE MATLABユーザー向け二次電池シミュレーションセミナー資料(05JUN2015)
Tsuyoshi Horigome
?
【B-3】 創業122年の企業と顧客価値にコミットした開発を実現する試みと成果について
グロースエクスパートナーズ株式会社/Growth xPartners Incorporated.
?
齿笔祭り2014「アジャイルを手放して得られたこと」
Yusuke Suzuki
?
すごい自己绍介
Hikaru Wada
?
JavaOne 2016総括 #jjug
Yusuke Suzuki
?
ユーザー企業へのアジャイル導入四苦八苦 - エンタープライズアジャイル勉強会2016年11月セミナー
Yusuke Suzuki
?
今どきのアーキテクチャ設計戦略 - QCon Tokyo 2016
Yusuke Suzuki
?
プロダクトオーナーは育成できるのか? - プロダクトオーナー祭り2016
Yusuke Suzuki
?
滨罢アーキテクトの思考法
Yusuke Suzuki
?
Ad

Similar to 公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会20090624 (20)

PDF
[豆ナイト]Java small object programming
Yuichi Hasegawa
?
PDF
厂别补蝉补谤プロジェクト彻底攻略
takezoe
?
ODP
厂辫谤颈苍驳2概论蔼第1回闯厂鲍骋勉强会
Mitsuhiro Okamoto
?
PDF
搁辞诲から闻いたことを全部话すぜ
Hiroki Kondo
?
PDF
Spring3.1概要x di
Yuichi Hasegawa
?
PDF
Spring Day 2016 springの現在過去未来
Yuichi Hasegawa
?
PDF
Jjug springセッション
Yuichi Hasegawa
?
PPT
第1回箩补惫补実习(丑别濒濒辞飞辞谤濒诲)2011
デジタルシープラーニング
?
PDF
イマドキの现场で使える闯补惫补ライブラリ事情
takezoe
?
PPTX
骋濒补蝉蝉蹿颈蝉丑勉强会(闯补惫补贰贰6について)
Ryo Asai
?
PDF
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
?
PDF
成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-
Hiroki Kondo
?
PDF
Jsug2015 summer spring適用におけるハ?ット?ノウハウとヘ?ターフ?ラクティス
Yoichi KIKUCHI
?
PPTX
搁补飞濒别谤フレームワーク(全体)
Takaichi Ito
?
PDF
OSSで支えられるライブドアの巨大ログ集計 #nhntech
SATOSHI TAGOMORI
?
PDF
DDD 20121106 SEA Forum November
増田 亨
?
PDF
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
?
PPTX
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Takeshi Hirosue
?
PDF
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
?
[豆ナイト]Java small object programming
Yuichi Hasegawa
?
厂别补蝉补谤プロジェクト彻底攻略
takezoe
?
厂辫谤颈苍驳2概论蔼第1回闯厂鲍骋勉强会
Mitsuhiro Okamoto
?
搁辞诲から闻いたことを全部话すぜ
Hiroki Kondo
?
Spring3.1概要x di
Yuichi Hasegawa
?
Spring Day 2016 springの現在過去未来
Yuichi Hasegawa
?
Jjug springセッション
Yuichi Hasegawa
?
第1回箩补惫补実习(丑别濒濒辞飞辞谤濒诲)2011
デジタルシープラーニング
?
イマドキの现场で使える闯补惫补ライブラリ事情
takezoe
?
骋濒补蝉蝉蹿颈蝉丑勉强会(闯补惫补贰贰6について)
Ryo Asai
?
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
?
成长できるエンタープライズシステムを目指して-翱厂骋颈によるモジュール型アーキテクチャの実现-
Hiroki Kondo
?
Jsug2015 summer spring適用におけるハ?ット?ノウハウとヘ?ターフ?ラクティス
Yoichi KIKUCHI
?
搁补飞濒别谤フレームワーク(全体)
Takaichi Ito
?
OSSで支えられるライブドアの巨大ログ集計 #nhntech
SATOSHI TAGOMORI
?
DDD 20121106 SEA Forum November
増田 亨
?
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
Tsuyoshi Yamamoto
?
Spring Fest 2017 「エンタープライズで利用するSpring Boot」#jsug #sf_h1
Takeshi Hirosue
?
Grails 2.0.0.M1の話
Tsuyoshi Yamamoto
?
Ad

More from Yusuke Suzuki (13)

PDF
アーキテクチャの进化から学ぶ、プラットフォームエンジニアリングへのアプローチ
Yusuke Suzuki
?
PDF
見えない壁を越えよう!アジャイルやマイクロサービスを阻む「今までのやり方」 - デブサミ夏2023
Yusuke Suzuki
?
PDF
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
Yusuke Suzuki
?
PDF
エンタプライズ領域のアジャイル開発の課題 - FIT2020
Yusuke Suzuki
?
PDF
なせ?「マイクロサーヒ?ス“化”」か?必要なのか
Yusuke Suzuki
?
PDF
アーキテクチャのレビューについて - JaSST Review '18
Yusuke Suzuki
?
PDF
滨罢トレンドに见る日本のエンタープライズ滨罢について
Yusuke Suzuki
?
PDF
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
Yusuke Suzuki
?
PDF
クラウド時代のエンジニアについて #sesfukui
Yusuke Suzuki
?
PDF
JavaとOSSとAndroid - JavaAPI訴訟問題を考える
Yusuke Suzuki
?
PDF
ウォーターフォールとアジャイルを考える #ita_ws
Yusuke Suzuki
?
PDF
アジャイルと言わないエンタープライズアジャイル導入 - Agile Japan 2016
Yusuke Suzuki
?
PDF
Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016
Yusuke Suzuki
?
アーキテクチャの进化から学ぶ、プラットフォームエンジニアリングへのアプローチ
Yusuke Suzuki
?
見えない壁を越えよう!アジャイルやマイクロサービスを阻む「今までのやり方」 - デブサミ夏2023
Yusuke Suzuki
?
サービスブループリントによるシステム設計手法の紹介 - XP祭り2022
Yusuke Suzuki
?
エンタプライズ領域のアジャイル開発の課題 - FIT2020
Yusuke Suzuki
?
なせ?「マイクロサーヒ?ス“化”」か?必要なのか
Yusuke Suzuki
?
アーキテクチャのレビューについて - JaSST Review '18
Yusuke Suzuki
?
滨罢トレンドに见る日本のエンタープライズ滨罢について
Yusuke Suzuki
?
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
Yusuke Suzuki
?
クラウド時代のエンジニアについて #sesfukui
Yusuke Suzuki
?
JavaとOSSとAndroid - JavaAPI訴訟問題を考える
Yusuke Suzuki
?
ウォーターフォールとアジャイルを考える #ita_ws
Yusuke Suzuki
?
アジャイルと言わないエンタープライズアジャイル導入 - Agile Japan 2016
Yusuke Suzuki
?
Javaエンジニアのための"クラウド時代の過ごし方" Java Day Tokyo 2016
Yusuke Suzuki
?

Recently uploaded (9)

PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?

公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会20090624

  • 1. 公司で使う厂辫谤颈苍驳 鈴木雄介 グロースエクスパートナーズ(株) JSUG/JJUG/SIProp http://www.arclamp.jp/ 2009/6/24
  • 2. はじめに ? 鈴木雄介 – IT?ーキテクト – 今の主な仕事は、顧客企業側に立って標準化 の策定/推進を行うこと – Spring好き。規約より設定重要 ? ?ノテーション嫌い – 今日の目標:難しく言わない – つっこみ歓迎
  • 3. アジェンダ ? システム開発で大事なこと ? 設計と実装 ? なぜSpringを使うのか ? Springの使い方
  • 4. システム開発で大事なこと ? “安く作る”より”安く使う” – 保守性の高い?プリ ? ?プリの枠より作業の枠 – 構成管理と自動化 ? ベストよりバランス
  • 5. システム開発で大事なこと ? “安く作る”より”安く使う” – 保守費の割合は60-80%程度。最初に作るコ ストのうち実装は1/3程度。つまり、実装コ ストは?プリの一生からすると7%-13%程度 – 時代背景からすると、今後、ますます仕様変 更は増えている。拡張性は重要なテーマ – 保守性の高い?プリケーションを、どう作る のか
  • 6. 参考:保守性 ? 保守性とは – 解析性:バグの原因を早く見つけたい ? ソフトウェ?にある欠陥の診断または故障原因の追及、およ びソフトウェ?の修正箇所の識別を行なうためのソフトウェ ?製品の能力のこと。 – 変更性:修正するときにめんどくない ? 指定された修正を行なうことができるソフトウェ?製品の能 力のこと。修正の実施にはコーデ?ング、設計、および仕様 書の変更を含みます。 – 安定性:デグレや他影響が少ない ? ソフトウェ?の修正による、予期せぬ影響を避けるソフト ウェ?製品の能力のこと。 – 試験性:テストするのが楽 ? 修正したソフトウェ?の妥当性確認ができるソフトウェ?製 品の能力のこと。 JIS X 0129-1 ソフトウェ?製品の品質-第1部:品質モデルより
  • 7. システム開発で大事なこと ? ?プリの枠より仕事の枠 – 個別の?プリケーションは最適化されていく べき。”平均的”な?プリケーションは存在し ない=標準フレームワークって意味あるの? ? 意味ないことはないけど、緩めに設計する必要が ある – 仕事の仕方を合わせた方が効果は高い ? 構成管理重要。ソースコード、課題 ? 自動化重要
  • 8. システム開発で大事なこと ? バランス、バランス、バランス – すべての利害関係者(未来含む)の調整が重 要 – 個別最適と全体最適 – “判断は遅く”でも”早く決める”
  • 9. 設計と実装 ? コンポーネントの集約は大事 – ただし、機能とクラスは必ず直交するので矛 盾が生じやすい。もう、これは運命 クラスA クラスC クラスD クラスG 同じ機能は、同 じクラスに集約 機能A クラスE 機能B もし変更があれ ば、すべての機 能に影響が出 てしまう 機能C クラスB クラスF クラスH
  • 10. 設計と実装 ? コンポーネントの分離は重要 – 実装要件の違いで切れる ? トランザクションの切れ目、?ーキテクチャの切 れ目、UIとデータとロジック – 分業のための分離と、その統合 ? 互いの作業が、なるべく影響し合わないように、 コンポーネントに分離する ? ただし、コンポーネントの統合がビッグバンにな らないように注意する – ?ンターフェース定義、カプセル化、責務、ロール
  • 11. 設計と実装 ? コンポーネントの適切なデザ?ンが要 – ただし、要件分析/概要設計段階で織り込む。 実装/詳細設計段階でデザ?ンを変えることは 難しいし、そんなコストはかけられない ? 再利用=抽象化は設計段階で検討するべき内容 – コードこそ矛盾のない「真の設計書」 ? 早くコードにするほど矛盾が分かる。プロトタ? プは設計の仕事
  • 12. 設計と実装 ? デザ?ンパターン – “デザ?ン”パターンは”設計”段階で使うもの – 設計方法論は難しい。美しい方法論は、基本 的にあやしい(象牙の塔) ? DDDは、特に難しいと思う。相当、ドメ?ンのビ ジネス知識がないと無理。
  • 13. 設計と実装 ? 未来への対応 – 5年後の誰かが悲しまないために ? 「なんだよ、この設計/実装!ありえん」 – 今後、拡張性や柔軟性がもっと求められる ? 小規模は作りなおせばいいじゃんでもOK – 可変性分析 ? 拡張の方向性や手段について、きちんと確定して おく
  • 14. なぜSpringを使うのか ? Springはフレームワークのフレームワー ク – 個別?プリのためにフレームワークを構築す るためのフレームワーク – 開発効率よりもSpringらしい”スタ?ル”を重 視 – さまざまな3rd Partyプロダクトに対応し、中 立性を重んじる。なるべく個性を削らない – EAIやSOAなどに連携可能
  • 15. なぜSpringを使うのか ? Springを使う上では、 – オススメのプラクテ?スはあまりないので、 自分で決めてからやる ? 実装フレームワークもコンポーネント分割も – 設定は確かに複雑になるので担当者を明確に する。あと設定フ??ルの分離重要 – 使いこなすとすごいけど、設定が難しいプロ ダクトがある ? WebFlow、Security
  • 16. なぜSpringを使うのか ? なぜSeasarを使わないのか – Seasarは優秀なWeb?プリフレームワーク – 開発の効率化、エンジニ?の能力向上に注力 – プラクテ?ス(実践)や規約を重視 – 適切な部分には、ぜひ使うべき
  • 17. Springの使い方 ? というわけで、非機能の話を中心に – コンポーネント化 ? 外部リソース?クセスの分離 ? 横断的関心事の分離 – ロギング – Maven2のプロフ??ル機能
  • 18. 外部リソースアクセスの分離 ? 例:ログ?ン処理 – 1.ログ?ン情報を受け取る – 2.LDAPで認証 – 3.DBからユーザー情報を獲得 – 4.ログ?ン履歴を保存 – 5.認証認可情報を返却する ? 2,3,4は外部リソース?クセスなので分離 するように作る
  • 19. 外部リソースアクセスの分離 ? シーケンス図 Login LoginBL LDAP認証 UserDao Logger ログイン(ログイン情報) 認証フラグ:認証(認証情報) ユーザー情報:検索(ユーザーID) ログ(ユーザー情報) :ユーザー認証情報
  • 20. 外部リソースアクセスの分離 ? メリット – テストがしやすい、デバッグもしやすい – 個別に実装が遅れても逃げられる。たいてい は要件確定が遅れる
  • 21. 横断的関心事の分離 ? ?スペクト指向=見地 ? 横断的関心事って? – 「メソッドの最初や最後に必ず書く」みたい なもの – ログ、トランザクション、セキュリテ? ? ServletFilterは、AOP的 ア ス ペ クラス ク ト
  • 22. 横断的関心事の分離 ? 実装の考え方 – 基本はProxyパターンで理解する LoginBlImpl <Interface> Implements LoginBl LoginBl LoginBlImpl <Interface> LoginInterceptor Implements MyBl implements MyBL LoginBl
  • 23. 横断的関心事の分離 ? SpringのAOPを使う – ポ?ントカット:どこに挟むのか – ?ドバ?ザー:何を挟むのか ? 使いどころ – 性能検証 – ?クセスログ(内部統制で) – 更新日や更新者の自動設定
  • 24. ロギング ? ロギングはSLF4JとLogbackがオススメ – Log4jの作者の新作 ? 使い方 – ログ出力:org.slf4j.Logger; – 設定: appenderとlogger
  • 25. ロギング:APIの使い方 import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SampleLogic { private static Logger logger = LoggerFactory.getLogger(SampleLogic.class); public void execute() throws Exception { if (logger.isTraceEnabled()) { logger.trace("trace level"); } if (logger.isDebugEnabled()) { logger.debug("debug level"); } logger.info("info level"); logger.warn("warn level"); logger.error("error level"); } }
  • 26. ロギング:設定ファイル <?xml version="1.0" encoding="UTF-8" ?> <configuration debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.Console <Target>System.out</Target> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{HH:mm:ss.SSS} [%thread] %-5level %logger{10} - %msg </Pattern> </layout> </appender> <logger name="org.springframework" level="WARN" /> <logger name="org.apache" level="WARN" /> <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root> </configuration>
  • 27. ロギング:マーカー ? マーカー – マーカーを付けると、出力先を分けることが できる。 private IMarkerFactory markerFactory; @Override マーカーを指定 public void logging(User user) { logger.info(markerFactory.getMarker("login"), “user loged in “ + user.getName()); }
  • 28. ロギング:マーカー <appender name=“LOGIN" class="ch.qos.logback.core.ConsoleApp <Target>System.out</Target> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> LOGIN %logger{10} - %msg%n </Pattern> </layout> <filter class="jp.arclamp.jsug.sample.log.MarkerFilter"> <marker>login</marker> <OnMismatch>DENY</OnMismatch> <OnMatch>ACCEPT</OnMatch> </filter> </appender> フィルターを適用して、出力を制御
  • 29. ロギング:コンバーター ? コンバート – 要素conversionRule ? 属性conversionWord:キーワード ? 属性converterClass:出力クラス ? パターンのところで出力が可能 – %{conversionWord}% ? 使いどころ – ログへのログ?ンユーザー情報出力
  • 30. ロギング:コンバーター キーワード <?xml version="1.0" encoding="UTF-8" ?> の設定 <configuration debug="true"> <conversionRule conversionWord="user" converterClass=" jp.arclamp.jsug.sample.user.UserInfoCon コンバータークラスの指定 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleA <Target>System.out</Target> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern> %d{HH:mm:ss.SSS} [%thread] [%user] %-5level %logger{10} - %m </Pattern> </layout> </appender> ここが置換される <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root> </configuration>
  • 31. ロギング:コンバーター 継承してコンバー package jp.arclamp.jsug.sample.user; ターを作成 import jp.arclamp.jsug.sample.log.LogConverterTest; import ch.qos.logback.classic.pattern.ClassicConverter; import ch.qos.logback.classic.spi.LoggingEvent; public class UserInfoConverter extends ClassicConverter { @Override public String convert(LoggingEvent event) { return UserInfoHolder.get(); } } 出力する文字列を返却
  • 32. Maven2のプロファイル機能 ? 環境毎に設定フ??ルの切替を実施 – DB接続設定やログ設定などの切替 – ローカル、IT、本番…など、プロフ??ルを カスタマ?ズ可能 ? コマンドラ?ン(-P{プロフ??ル名}) – mvn eclipse:eclipse –Plocal – mvn package -Pproduction
  • 33. Maven2のプロファイル機能 <profiles> プロファイル名の指定 <profile> <id>local</id> <build> <resources> プロファイルで有効になる <resource> ディレクトリの指定。 <directory>src/main/resources/local</directory> <includes> <include>*.properties</include> <include>*.xml</include> </includes> </resource> </resources> </build> </profile>
  • 34. Maven2のプロファイル機能 ? フォルダ側 他のモノは無視 クラスパスに通る
  • 36. ライセンスについて ? JSUGマスコット??コン(本スラ?ド左下)が残されている場合に限り、本作品 (またそれを元にした派生作品)の複製?頒布?表示?上演を認めます。 ? 非商用目的に限り、本作品(またそれを元にした派生作品)の複製?頒布?表示? 上演を認めます。 ? 本作品のラ?センスを遵守する限り、派生作品を頒布することを許可します。