シスアーキ in はてな

シスアーキ(自称)の技術ブログ

DevOps時代の必読本?「チーム開発実践入門」を読んだよ!

「チーム開発実践入門」を読了しました。

 

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)

 

 

4/16の発売日に購入して役一ヶ月、相変わらず本読むスピードが遅いので嫌になります。読了後の感想としては購入当初の想定どおり、今の自分に必要な本だったと感じました。チームメンバ、そしてソフトウェア開発に携わる全ての人達に読んでほしいなと思います。

早く行きたいなら一人で

「早く行きたいなら一人で、遠くへ行きたいならみんなで行け

(If You Want To Go Fast, Go Alone. If You Want To Go Far, Go Together)」

 

アフリカのことわざです。個人プレーが好きな僕でもグッとくる言葉です。

どんな天才であれ時間は有限であり平等です。

「人間50年、下天のうちをくらぶれば夢幻の如くなり」

 

という一説は信長で有名ですが、SIer風に表すと

「人間600人月 大規模開発期間にくらぶれば夢幻の如くなり」

 

とでも表すのでしょうか。

 現代ビジネスのスピード感で価値あるシステムを素早く市場に提供するには、チームで協力して開発するしかありません。好き嫌いに関係なく、ITで仕事をするということは、チームに所属するということです。

本書ではチーム開発を進める上でのベストプラクティスのヒントが多数記述されています。

まずは2章を

この本の価値を知りたければ、まずは2章を読んでみることをおすすめします。本日も至る所で繰り返されているだろう、開発現場の悲惨な現状を垣間みることが出来ます。

おそらく、2章を読んで

 「こんな現場あるはずないだろう〜w」

 というあなた!

自分の幸せを噛み締めてください。そして、周りの先輩への感謝も忘れずに!

 だいたいの人は

  • 苦笑する
  • トラウマを感じて震える
  • なぜ俺の現場を知っているのだ?

 という感想を抱くでしょう。

2章を読んで心震えた方は、3章以降を読んで現場を改善しましょう!

 3章から具体的な実践方法

3章以降は

  1. バージョン管理
  2. チケット管理
  3. CI
  4. デプロイの自動化
  5. リグレッションテスト

 と続きます。後になるほどよりチーム力は強化されますが、導入難易度もあがるのでこの順番で導入を検討していくのがいいでしょう。実践の言葉どおり、それぞれの考え方のみならず具体的なツールの使い方が記述されています。

人間は道具を使うことで進化してきました。開発においても、いかに良いツールを使いこなすかが重要だと思います。*1

この本のいいところは、各ツールの特性と他のツールとの比較や連携方法などを説明しており、自分のチームにあったツールの選択の助けになるところだと思います。逆に、ツールのインストール方法や詳細な説明は他の書籍を参考にする必要があります。

チーム開発はSIerこその課題

僕は過去に大手SIerで常駐、今では自社で請負の開発に従事しています。その経験からも、ツールを活用したチーム開発はSIerの大きな課題と考えています。

 SIerは大きな資本金を背景に、大規模システムを一人では到底仕上げれない期間で開発するお仕事です。そのため、開発チームは急造かつ大人数という特性があります。

 その中で、

  • 要求/要件/課題/品質の管理
  • スケジュール/タスク/納期管理
  • 品質管理
  • 質問管理
  • コスト管理
  • 変更/バージョン管理
  • 構成管理

といった様々な管理をチームリーダーは行う必要があります。*2

今までの開発では、Excelなどの表計算ソフトにより手作業によりこれらの管理作業をカバーしてきました。大規模チームで人のリソースは豊富にあるので、開発時はマンパワーでどうにか賄うことも可能です。

しかし、このような属人性に依存した管理方法は時間経過と共に必ず崩壊します。*3

 「チーム実践開発入門」にはそういった崩壊を防ぐヒントが多数記述されています。

人らしいお仕事を

現時点でも人はコンピュータより優れたリソースであり、貴重なリソースです。

機械に出来ることは機械にやらせ、人間にしか出来ないことに注力したほうが幸せだと思います。この本はその為への道しるべにもなると思います。

 

あ、みんなの役立つかもしれないからハンドサインを貼っとくね!(((o(*゚▽゚*)o)))*4

 

f:id:kozake:20140515074941p:plain

 

*1:ここら辺については、書籍のp.213にある図6.1がうまく纏まっていると思います。

*2:その為、SIerの社員(プロパー)は技術よりマネージメントスキルを求められることが多いのです。

*3:この理由を書くとは長くなりますが、SIerの保守運用チームでの経験のある方は実感頂けると思います。

*4:結局コレがしたかっただけ

January 2014 in Action

気づくと今年も12分の1を過ぎて2月。時間が経つのが日ごとに早くなってるように感じます。今年の目標は未だにふわっとしてますが、出来れば今月中にはきちんと考えてブログ化したいと思います。

 

とりあえず、今年からは月毎の活動をブログに残すことにしました。今年の抱負で決めた「流」の一環です。活動をブログ化することでアウトプットを意識した行動が出来るのを期待してと、自分自身の振り返りにも役立つかな〜と考えてです。

 

今年の抱負の「変」のとおり、少しずつ色々変えました。

まずは生活の時間配分を変えました。今年に入ってからは朝5:30起きて、スタバで朝モクを開始しています。朝は頭も冴えているし、のんびりと自分の時間を持てるのでこの習慣は気に入っています。また、6:31に最寄り駅始発が電車があることに気づき、朝の電車に座れていい感じです。朝早く起きると自然と夜も早く寝るので、一般的にゴールデンタイムといわれる22:00〜02:00の間の睡眠も多く取れて、睡眠時間が減った割には体調はかなりいいです。ま〜、ちょっと最近体調崩しましたが、これはあきらかに飲み過ぎですな。ノンアルコール生活を続けたら、大分回復しました。

また、最近MBAを買いました。このブログも早速MBAで書いていますが、なかなかキーボード操作もろもろ慣れないです^^;

早く使いこなしたいですね。

 

では、1月の活動です。

 

勉強会で「KnockoutJS勉強会」に参加しました。

http://connpass.com/event/4548/

 

JavaScriptは個人的にはあまり好きな言語ではないのですが、Webというフロントエンドの地位を確立し、周辺に様々な面白いプロダクトが出てきています。今年の目標としてJavaScriptの勉強は視野に入っています、というか、積読になっていた「パーフェクトJavaScript」で勉強を始めています。

 

朝モクで「Play Framework徹底入門」を読了して書評を書きました。

http://kozake.hatenablog.com/entry/2014/01/31/224029

 

書評って難しいですね。でも、書評ってアウトプットを意識していたので、いつも以上に集中して読書できた気がします。

今後は読んだ本は書評を書いていってもいいな〜とか考えています。

 

その他、通勤電車の中で「Team Geek」を読みました。HRTはいいですね。僕も過去の失敗をみるとこの精神が欠けていたように思います。

この本も近々書評書きたいです。

 

今年の抱負の「楽」ですが、ちょっと楽しい成分が不足していますね。「つらみ」が多いです。やっぱりもっと楽しいことしたいな〜。ここら辺はもう少し反省して、楽しい成分を取り入れていきたいですね。

ま〜、ドラクエモンスターズは始めたけど、あまり楽しくないww

 

ってことで、ざっくばらんですが1月の活動はこんなもので。

2月は楽しかったと思えるように頑張りたいです!

 

【献本駆動】「Play Framework2 徹底入門」を読んだよ!

@kara_d さんから「Play Framework2 徹底入門」を献本頂きました!とても嬉しかったです!  

 

Play Framework 2徹底入門 JavaではじめるアジャイルWeb開発
 

 

 その時の喜びよう

 

早速読んで書評を書こうと思いましたが、読むスピードが人より遅いのと、かなりのボリューム量だったこともあり、読了まで時間がかかりました。読んだ感想は、すごい面白かった&楽しかったです。

 

Play Framework2(以下、Play)は今流行のRailsライクなJavaScalaフルスタックフレームワークです。

Playに関しては、以下の理由で今年の注目技術だと思っています。

 

・今年の流行?

 

 今年に入って日経系雑誌でやたらScala押しの記事を見かけます。そのScalaの本命フレームワークとして、Playが紹介されています。

ちなみに、「Play Framework2 徹底入門」はJava版です(9章にはScala版の簡単な説明もあります)。「なんだ、Java版か」と思った方もいると思いますが、後述の理由から本書は十分読む価値があると思います。

 

SIerフルスタックフレームワークの導入が必須

 

 なにかと世間をにぎわすSIerですが、SIer界隈ではシステムアーキテクト、上級プログラマという人材が不足しています。ええ、それはもう圧倒的に(みんなWebとかソーシャルに流れちゃうからね)。

 そのような状況下でSIerに残る身としては、フルスタックフレームワークの存在は大変ありがたいです。藁にもすがる想いです。フルスタックフレームワークを導入することで、アーキテクトの仕事はかなり軽減します。

フルスタックフレームワークの代表といえばRuby on Railsを思いつくでしょうが、Ruby技術者はこの界隈にはあまりいません。

「そんなことないよ」という皆さん、それはあなたのTLだけの話です。

Scalaについては、「Scala is 何?」です(最近は大分マシにはなったかも知れませんが)。

 

SIerにはJavaフルスタックフレームワークが必要

 

SIerはそのビジネスモデルのため、チーム体制が流動的です。大規模プロジェクトの終了はチーム縮小を意味し、次のプロジェクトが受注できると短期間で体制を整えなければいけません。その点でJava技術者は揃えやすいです。

よって、Java言語による開発が行われやすく、Javaをサポートしたフルスタックフレームワークは魅力的です。 更に言うと、そもそもRFPで「開発言語はJavaで」と指定されていることもあります。

 若干悲観的な意見が多いですが、それだけではありません。Javaも進化しています。

今年はJava界隈で注目のJava8がリリースされる予定です。ラムダをサポートするなど、Javaも遅ればせながらも最新の言語技術を取り込んで来ています。Java8やGuava、Lombokなどのライブラリと組み合わせることで、まだまだJavaでも十分生産性の高い開発が行えると考えています。

 

Java脱却やで!RubyScalaのほうが生産性が高いんやってな!10倍やで!」という上層部の皆さん、皆さんが脱却しないといけないのはCOBOLCOBOL文化です。本気で生産性を考えるなら、現場にCIサーバーをそっと渡してあげてください。喜ばれますよ!

 

その他にも色々理由がありますが、まとめて列挙すると、

 

  • Playは日本のコミュニティの努力もあり、日本語情報が豊富*1で、習得が比較的容易です。有志のコミュニティ*2もあります。急造チームのメンバのスキル習得コストを考えると、技術習得が容易なことは必要条件です。
  • モデル層はEbeanをサポートしているが、他のORMに容易に切替が可能。レガシーDBとの戦いはSIerには日常茶飯事です。モデル層を簡単な変更できることは魅力的です。
  • SIerに忍び寄るクラウドの波。Playはクラウドと相性のいいF/Wです。
  • SIerにとってセキュリティ対策は必須。Playはセキュリティまわりもしっかりサポートしてますよ。

という理由で、SIer各位にも本書をお勧めしたいと思います。PlayはWebやソーシャル界隈の「あちらの技術」ではなく、SIerにとっても魅力的な技術ですよ!

 

では、長々と本筋から離れてしまいましたが、本書の書評です。

 

・「Play Framework2 徹底入門」の書評

 

 徹底入門という名前のとおり、入門から実践的な内容まで幅広いです。

「ヒープメモリが不足した場合の対処」や「コンソール文字が文字化けした場合の対処」、「Herokuへのデプロイ時の注意」など、実際に使っていく上で当たるだろう問題についてもColumnで言及されています。

 

1~3章はPlayの基本が丁寧に説明されています。実際に動かしながら学べるので、Playをはじめて導入するチームの教育資料として良いのではないかと思います。

 

4章からは実践編です。僕は4章が一番読んでて面白かったです。

「4章 アプリケーションの企画と設計」では実際にPlayでアプリケーションを企画、設計する上での進め方や注意点が述べられています。

企画時の注意点として、サーバーの規模やCookie、セッションの扱いなど、Play独自の注意点が述べられております。また、Play向きの企画、不向きな企画、開発環境や運用環境についてなどの注意点も記載されておりますので、実際にPlayをプロジェクトに導入検討する際は、必ず読んでおいたほうがいいでしょう。

設計では、一線で活躍する@kara_d さんの思想を垣間見ることが出来て、すごい参考になります。

要件はViewから、設計はモデルからという開発の進め方は、僕たちのチームも同じ方法を採っています。このほうが要件のずれが防げるし、設計がしっかりするんですよね。

 

「5章 MVCの実装」からは実際に小さな診断アプリを作っていくことで、開発を擬似体験できます。本章にも書かれていますが、サンプルソースを見ながら本書を読み進めたほうがいいと思います。僕はSublime Textでソースを見ながら本書を読みました。

WebJarsを使ったフロントエンドのライブラリ管理やBootstrap3を使ったデザイン、Twitterシェアボタンなどなど、Playと併用する技術を用いたモダンなWeb開発を経験できます。

ただサンプルソースの内容を説明するだけでなく、その設計にした理由が論理や経験に基づいて説明されており、開発を通して著者と会話している気分になります。

「え、ロジックはモデルでしょ?」という疑問の答えが次のページに記載されていたり、「どんだけOption好きなんだよw」と一人で突っ込みながら読んでいました。

 

「6章 共通処理とAPIの実装」では、実際に業務で必要になる、ログ、バッチ、エラーハンドリングなどの地味な技術についても記述されています。また、単体テストや社内環境、本番環境など、複数環境での環境設定ファイルの運用方法などについても記述されております。

世の中には運用面をまるで考慮していないシステムがあふれており、SIerの保守・運用で大量の技術者の阿鼻叫喚を聞いてきた(時には僕も叫んできた)僕としては、このように運用面についてきちんと記述されているのはうれしいです。

最近のWebアプリでは必須といえるAPIの実装についてもしっかり記述されています。

 

「7章 テスト・デプロイ・管理」では、テストやデプロイ方法について記述されています。個人的に嬉しかったのは、CRUDの説明です。著者作成のCRUDツールの説明がされています。実際のシステム運用では、データパッチを当てるシーンは少なくありません。すみやかにCRUDが作れる仕組みはうれしいです。

 

「8章 Play Tips」では、セキュリティについてしっかりとした記述があります。個人的にはSSLの導入も欲しかったなとは思います。また、認証まわりの仕組みがしっかり書かれているのはうれしいです。実際のシステムで認証がないシステムはほとんどないですからね。

ActorとWebSocketまわりは上級編のイメージを受けました。Actorまわりの説明が不足しているので、ここら辺は別の書籍でしっかり学ぶ必要があるかと思います。

最後に、エンタープライズシステムでは重要なトランザクション制御やSQLの直発行などについても記述があります。これは重要ですからね!

 

「9章 Scalaによる開発」では、JavaプログラマのためのScala入門とScalaによるPlayアプリケーションの作成が記述されています。

この章だけでJavaプログラマScalaに移るのは難しいと僕は感じました。Scalaはコップ本で勉強しましょう!ただ、本章はScalaをやったことないJavaプログラマに、「こういう世界もあるよ」といういい入り口になると思います。

 

・注意点

 

長々と書きましたが、如何でしょうか?僕は1系メインでやってきましたが、そろそろ2系の導入に踏み切ってもいいような感じています。

 

ただ、Playには中毒性があるので皆さん気をつけましょう! 

 

f:id:kozake:20140131075654p:plain

 

(過度の依存性から抜け出すためには、4章を読み直しましょう!)

 

・まとめ

 

  • SturutsをラップしたオレオレF/Wを今でも使って現場を苦しめてるアーキテクトのみなさん!自重して最新のF/Wを使いましょう!Playは楽しいフレームワークですよ!
  • 昔とった杵柄のJavaプログラマさん、最新のJava環境に触れてみましょう!昔プログラマで活躍したからといって、今のプログラマの気持ちが分かるとは限らないですよ!
  • アーキテクト不足に悩んでいるSIerのマネージャー各位!息のいい若手にこの本を渡しましょう!会社経費で渡すと喜ばれますよ!

 

ということで

 

「いつやるの!?」「(ry」

  

Play Framework 2徹底入門 JavaではじめるアジャイルWeb開発
 

 

*1:Play Framework日本語サイト: http://www.playframework-ja.org/

*2:日本Playframeworkユーザー会: https://groups.google.com/forum/#!forum/play_ja

2014 in Plan

あけましておめでとう!

 という時期もあっという間に過ぎもう既に1月が半分終わろうとしています。

 ここら辺で今年の抱負を書いておかないとずるずるといきそうなので、2014年の抱負を書いておこうと思います。

 

 今年のテーマは3つ。

「流」「変」「楽」

 

今年は流れを意識して、考え、行動していきたいと思います。清流が綺麗なのは流れがあるからです。流れのないものは濁り、よどんできます。「吐いて吸う」。これが生きる基本です。去年はインプットに偏りすぎていて、アウトプットが足りていなかったように感じます。また、人生にもよどみを感じてきていますので、流れを意識した行動を心掛けたいと思います。

特にアウトプット。アウトプット駆動で頑張りたいと思います。

目標としては、自分なりのコンテンツを作成していきたいなと思います。

 

新しいことをしていきたいと思います。技術であり、生活習慣であり。ようするに今までの行動を見直し、変えていく。新しい行動をしていきたいと思います。

 

「今までと同じ考えや行動を繰り返して、異なる結果を期待するのは狂気である ~アルベルト・アインシュタイン~」

 

「人間が変わる方法は3つしかない。1番目は時間配分を変える。2番目は住む場所を変える。3番目はつきあう人を変える。この3つの要素でしか人間は変わらない。最も無意味なのは『決意を新たにする』ことだ。 ~大前研一~」

 

とあるように住む場所を変えることはなかなか難しいですが、時間配分や新しい人との付き合いなどが出来ればいいな~と思います。

 

とりあえず、ブログをAmebaからはてなに切り替えました!

今後、技術ブログはこちらで書いていこうと思います。

 

「楽すれば、楽が邪魔して楽ならず、楽せぬ楽がはるか楽々」

 

という富山の薬売りの言葉があります。

 楽しようとすれば楽しようという想いが邪魔して楽になりませんよ。楽せず楽しんですることが楽ですし楽しいですよ、という意味です。

 「楽したい」という想いが文明を発達させてきたと考えている僕としては、「楽しない」という考えはあまり賛同できないのですが、楽しいことをして、結果楽しようようという考え方はいいなと思います。

僕ももう人生半ばまで来ています。楽しいこと、やりたいことが何かを考えて、出来ることからやっていきたいなと思います。

 

 まずは、前々から行きたいと思っていた離島やしまなみ海道への一人旅や、プロダクト作成とか。お金や時間に限りがあるので、出来ることからやっていきたいと思います。

あ、あとドラクエ10も2.0が出たことだし、それもクリアしなければw

 

今年のテーマは以上です。

これを元に、去年の反省も加えて今年の目標を練りたいと思います。