Tomcatにゼロダウンタイムでデプロイする

Tomcat7からゼロダウンタイムでデプロイができるようになりました(だいぶむか~しの話になってしまいましたが、、、

ようやくTomcatを7にアップグレードしたので、ゼロダウンロードデプロイできるようにJenkinsさんの成果物にバージョニングをしたいなぁと

…と思っていると、まさにされている方がいらっしゃいました。

Tomcat7 でゼロダウンタイムデプロイ - mallowlabsの備忘録

自分の場合は、本番用のビルドをあまり走らせていないため、採番が一桁になってしまいます。

この辺の情報を元に3桁くらいあれば、困ることはないよねーということで、 Apache Tomcat 7 Configuration Reference (7.0.55) - The Context Container ハードリンク作成をちょっと変更して

ln "${WORKSPACE}/target/hoge.war" "${WORKSPACE}/target/hoge##$(printf %03d ${BUILD_NUMBER}).war"

とこんな形でシェルを実行しています。

Mavenプロジェクトなので、そっちのバージョンでもいいかなぁと思いましたが、integration環境とかだとかぶっちゃうので当分は、シンプルなJenkinsさんの採番でやってみようかなぁというところです。

DBFluteフェス 2013

昨日、DBFluteフェス 2013へ参加してきました。 http://atnd.org/events/43654

一番目のAセッションで行われたjfluteさんの『DBFluteとは?』について 備忘録としてまとめます。

全体の流れはこんな感じ...

  1. CBをつかってDBアクセスのライブコーディング
  2. 会場からのリクエストで、現場で使うクエリ対応例をライブコーディング
  3. jfluteさん自己紹介とDBFluteの説明

というjfluteさんスタイルでした。やっぱりライブコーディングみているのは 楽しいですね。

セッションの内容は、

  • IDEのショートカット機能を使いきって効率的に開発しよう!
  • DBFluteはIDEと親和性がとても高いので、DBFlute+IDEで超速コーディングができますよ!!

という感じでしょうか

会場で披露されたEclipseショートカット

  • Ctrl + 2,その後に L:定義側を作ってくれますが、セミコロンもいれてくれるの知らなかった!
  • Shift + Return で次の行に移る(入力モード中でもそこから抜けて次の行にいける)
  • 入力モードのときに、緑の棒はエンター押したときに行くところ(囲われている変数部分は、変更できる場所ですね)
  • foreと書き込んであとは補完(Ctrl + Space) でfor eachを作る(直前にあるlistで作ってくれる)
  • Ctrl + 1 ,直ったら Enter
  • Ctrl + Alt + ↑でコピー行をつくって, Alt + ↑ で移動させる (同じ記述が必要になったとき) 方向は下でもよかった気がします

あと、Ctrl + Shift + T と Ctrl + Shift + R はDBFluteユーザにはあたりまえですかね。

http://d.hatena.ne.jp/jflute/20090628/1246196310

現場で使うクエリ対応例

  1. 複数のカラムに対しての曖昧検索
  2. 一部のカラムだけ取得
  3. 期間指定系でいいのないですか
  4. NN検索(本人から)

期間指定系でいいのないですか?

  • まで検索(ex. 1日から3日いっぱいまで)がしたくなったらsetFromalizedDatedDatetime_FromToを使うと簡単にできる。 終了日時を次の日の0時にして未満でクエリをつくってくれる。
  • さらに、FromToOptionを使うと、月まで指定の検索ができる。
  • FromToOptionはいろいろ入ってて便利(週指定とか月指定とかできてスタート日も設定できるので、水曜からの一週間や、20日締め日での計算とか)
  • ちょっとやり過ぎなぐらいに盛りだくさんでしたが、日付処理系のところは人のミスによるバグが入りやすいところということで、かなり作りこんだそうです。

http://dbflute.seasar.org/ja/manual/function/ormapper/conditionbean/query/fromto.html

DBFluteの紹介

DBFluteは自動生成ツール

  • 早い、打ち間違えがないのも特徴だけど、DBがかわったらコンパイルエラーで分かること(Freegenの魅力ですね)。
  • DBの方がアプリよりも長生きなので、アプリの都合でDBが変えられないことを防ぎたい。
  • orが使えるようになってます。DBMSでインデックスマージが使えるようになってきているので(まだunionを使った方が早いケースがあるそうです)

こだわっていることについて

  • きっちりとログを出すこと
  • ログに出すsqlのインデントには拘っている

  • スピードの速いビジネス変化。DB変更に強くいかにするのか

HTTPの教科書を読んで

実は、HTTPのことをきちんと理解していないシステム開発者って多いんだと思います。 『HTTPの教科書』は、そんなシステム開発者が読むべき本というのが感想です。

特に社内システム開発等の担当者だとビジネスロジックやデータ周りのことに興味がいってしまってHTTPまわりってアクセスしてレスポンスがあればOKみたいな感じでシステム開発の経験を積んでいく人が多そうな気がしてます。イントラからのアクセスであれば、あまりセキュリティに関して文句も言われなさそうだし

ちょっと前からのRESTプームやJavaScript系がイントラシステムでも使われるようになってきているのでこういった本を一冊くらいは読んでおくべきだと思います。

『Webを支える技術 ── HTTP,URI,HTML,そしてREST』と重なる部分もありますが、代表的なステータスコードのわかりやすい説明がいいなぁと思います。 認証部分やセキュリティ、今後についての部分は、HTTPの教科書が詳しい(といっても詳細までではないですが)のでそういった部分も踏まえて学びたい人にはこちらがおすすめかなと思います。 REST にかんしては、やっぱりWebを支える技術が詳しいと思います。

HTTPの教科書

HTTPの教科書

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

『アジャイル開発とスクラム』を読んで

遅ればせながら、『アジャイル開発とスクラム』を読みました。 DevSum2013でも売られていたのですが、なんだかんだで今頃になってしまいました。

はじめにで、"ユーザ企業の情報システム部門の方にも"と書かれていましたが、今まで読んだAgile本と比べ情報システム担当が読んでぐさっとくる本でした。
特に、第2部の実践事例はとても面白い内容で、富士通事例はユーザ企業の情シスが抱えている問題点や課題にスクラムでどう対応したのかが語られていてとても参考になりました。リクルートの事例に出てくるQCDのQを高くすることは出版業界だけでなく製造業全般(特に日本)のスタイルだなぁと思います。どうしても一度出してしまったものを修正できないシステムの中ではQを高めることが全てに優先されるべきなのだと思います。

そういう意味で、製造業系の多くの人や仕組みがアジャイル開発を気持ちや制度的に”中途半端なものを提供する”とどうしても捉えがちなのかなと感じました。 やはりドキュメントや人による隅々までのテスト、品質チェックが”安心”を生むというのは、なかなか変えにくいのだと思います。 安全はいくらでも自働化でできたとしても安心度を高めることが、情シスの現場が頑張っていかなければならないことなんだと思います。日本の製造業はQCがとくに優れていると言われてきましたが、形式的になりがちなQCを本来のQC型にしていく、柔軟にしていくことが現場に求められているものだと感じました。

おわりにで、書かれていた合宿による解決については平鍋さんが何かのカンファレンスで話されたのを思い出しました。それくらい私の中でも組織の本質なんだろうなという思いがありました。 考えてみると町内会の集まりって、とても面白い集まりだなと思います。いろんな技術や知識を持っている人が集まって町を良くしていく。お酒などの催しもあってみんな主観を言い合って、みんなで主体的に動く。とても日本的で組織の本質を持っているのではないのかなと思いました。

アジャイル開発とスクラム 顧客・技術・経営をつなぐ協調的ソフトウェア開発マネジメント

アジャイル開発とスクラム 顧客・技術・経営をつなぐ協調的ソフトウェア開発マネジメント

DBFlute.NETの複数DB設定をつかってみた

DBFlute.NETの複数DB設定をつかってみたのでメモ。

普段Java版のDBFluteを使っていて、.NETについては無知なのでところどころつまづいてしまいました。
(やったことは、QuillDBFluteをつかってのDB接続です。)
とりあえず動くようになりましたが、間違い等指ありましたら摘いただけると助かります

ということで複数DB接続をDBFlute.NETでやる場合に必要なこと備忘録

DBFlute.NETについてはDBFlute.NETの紹介 | DBFlute.NETにて説明があります。 また、svnリポジトリにdfnet-multipledb-quil-exampleがあります。

自動生成について

自動生成はJavaと同じようにdfprop等の設定をしてmanage.batを叩けば出力される。

  • basicInfoMap.dfpropのtargetLanguageをcsharpにする
  • basicInfoMap.dfpropのpackageBaseを出力するパスに設定する
    • 上記サンプルを参考にDBFlute部分(Dao)をまとめたプロジェクトを作成し、ソリューションに含めていたので同じようにしました。
    • HogeDbフォルダとFooDbフォルダがXXXDaoのDBFluteフォルダ配下に置かれる形にするためには、 packageBaseは、XXXDao.DBFlute.HogeDBとXXXDao.DBFlute.FooDbとする
  • Javaでも同じですが、basicInfoMap.dfpropのprojectPrefixを設定して名前が被らないようにする
  • 外だしファイルを使うときには、outsideSqlDefinitionMap.dfpropのsqlPackage = $$PACKAGEBASE$$のコメントアウトを外しておく(Javaでも一緒)
    • これを有効にしていないと、jdbcやgenerateの際に自分のものではないsqlファイルを見に行ってしまいエラーとなる

VisualStudioでの設定とか

  • 外だしsqlファイルは、ExBhvに置く
  • ファイルのプロパティ設定でビルドアクションを”埋め込まれたリソース”に変更する
    • 埋め込まれたリソースに変更しないと、アセンブリに登録されず外だしsqlファイルが見つからないエラーが発生する
  • 各DB用に生成されたフォルダ配下のAllCommon/S2Dao/XXS2DaoSettig.csのXXS2DaoSettingクラスにメソッドを追加する

    public override String DataSourceName { get { return "DataSourceのid"; } }

感想など

  • JavaDBFluteをつかっている人からすると同じ感覚で使用出来るのがとてもメリット
  • アセンブリへの登録など.NET特有のことがわからなかった
    • JavaDBFluteやってるからまぁできるでしょ、の前にちょっとは勉強しておいた方がよさそう
  • Quillがとても便利。細かい融通はきかないけどとりあえずDIでってときにはとても便利
  • Seasar以外の.NETのDIについて調べる。というか.NETのテクノロジ全然しらないので勉強する。

OSC2013 Spring

オープンソースカンファレンス 2013 Spring http://www.ospn.jp/osc2013-spring/ に行ってきました。

トピックは

の3つです。

初めてのOSC

初めてのOSCへの参加だったのでわくわくしながら参加したわけですが、けっこう明星大学って都心から遠かったです。 新宿 -> 調布 -> 多摩センター -> 中央大学 明星大学 ただ多摩センターから多摩モノレール沿線に広がる街は、とても住みやすそうでした。都心にも近くて広い中で生活できそうでした。

最初に会場についたときの感想は、DevSumiyよりギーク(オタク)ぽい。でした。 DevSumiはいわゆる上流といわれる範囲やソフト的な部分、プロジェクト管理などが中震ですが、OSCはH/W, OSについても広く出展されていました。 あと来場者の技術レベルもちょっと高めな感じがしました。

CMS

CMS系のOSSの出展が非常に多かったように思う。ビジネスでも個人でもWebページの基本だからなんですかね。 WordPress考えてもコミュニティの大きさやプラグイン系の量あたりが重要なパラメータになるのかなと思います。

Camel & Sphinx

前にちょっと使ってみたCamelとSphinxについてユーザグループの方といろいろと話がきけました。 やっぱり、やってる方々を直に会えるとと安心感というか実在感ができて、使うにしても何にしてもプラスな気がする。気分的な問題なんだけど

リーン開発の本質1

『リーン開発の本質』を読み始めて第1章からとても引き寄せられた。

第1章は歴史としてリーンの元であるトヨタ生産方式について説明されているけれど、ソフトウェア開発、会社で起こっていることに対して素直に解決をしていくことの大切さをとても感じることができる。

  • Just In Time ==> 複雑生の攻略
  • 自働化: 組織が指示を仰ぐのではなく、出来事に即座、的確に反応する反射生をそなえる
  • 局所的な効率ばかり追い求めてはならない
  • コンセプト--> 製品の具現化の流れを大切にする

改めて、システム開発において有効に活用できるという前提や、アジャイルに関しての予備知識があるとすごい納得ができる事だと感じられる。 なんとなくだけれど、有機的だ

リーン開発の本質 ソフトウエア開発に活かす7つの原則

リーン開発の本質 ソフトウエア開発に活かす7つの原則