ブログトップ 記事一覧 ログイン 無料ブログ開設

やさしいデスマーチ このページをアンテナに追加 RSSフィード

札幌のWebエンジニアの綴る日常と開発の日々。
GoogleAppEngine/slim3/Django/NetBeans/Swing/JavaFXを中心にお届け。

2013-08-01

株式会社エスプラニングを退職しました

12:30 |  株式会社エスプラニングを退職しましたを含むブックマーク

7月31日付で2年半ほど在籍した株式会社エスプラニングを退職しました。退職系のエントリーはブクマが稼げると聞いて、状況報告を書こうかなと思います。

前職でやっていたこと

前職は主にJavaによるアプリケーション開発が主業務でしたが、珍しくWeb系というわけでもありません。入社した頃は、Swingでのデスクトップアプリケーションが主プロダクトでした。最近はWebアプリケーションスマフォ系もやっています。そんな会社で自分が行ってきたことは、開発環境の整備、コード品質の向上、プロジェクト全体の進め方の改善などです。

具体的には、ユニットテスト、読みやすいコード、リファクタリング、レビュー、KPT、カンバン、Trac/Redmine、バージョン管理、継続的インテグレーションユースケース駆動開発などなどです。

ぶっちゃけ言えば、入社した当時はお世辞にも技術レベルは高いと言えませんでした。バージョン管理はCVSでしたし、Excelの課題管理表や意味の無いチェックシートなどを、お客さんに言われるまま使っていた、どこにでもあるような開発現場です。

ですが、2年半ほど経過し、ユニットテストCIが自然にある開発環境にまでなっています。少なくとも札幌のような地方都市で、そのような開発環境が整備されている会社は少ないと思います(もし、そんな開発環境で仕事したいのであればコンタクトしてみてください)。

なぜ、新しい手法を導入したいのか?

新しい手法は、当然のように古い手法の問題点を解決するために生まれました。なので、新しい事を導入していくと効率よく品質も高くなっていきます。

というのは建前で、新しい手法を導入していく方が楽しいからです。

ずっと同じやり方をやっていく保守的な環境は刺激がありません。新しい事を試せば失敗もします。失敗から学ぶことも多いですし、それを乗り越えれば効率もよくなります。学ぶことは大変ですし、新しい事を学ぶのはプライベートの時間を使います。それを職場で導入します。問題があれば自宅で対策を練ることもあります。

でも、それが楽しい。

新しい手法を導入したことによる良い点

何はともあれ、自分が楽しいです。好きなエンジニアリングを仕事にする以上、楽しめなくなったら業界から身を引きたいと考えています。仕事を続けるモチベーション、それが一番です。

次に良い点として、社員間などで沢山の技術的な話ができます。ああでもないこうでもないと議論して、一緒に解決するってチームによる開発の醍醐味です。時には意見がぶつかります。それでも、保守的に事なかれ主義でいるよりずっと楽しいです。そして、気がつけば仲間も新しい事を見つけてきます。そうなれば自分も成長できます。

勿論、最新の手法を駆使しているので、品質や生産性もよくなります。TDDまでは完全に導入していませんでしたが、ユニットテストを根ざした影響で、各自で作るクラスやメソッドの意味を考えるようになりました。後で困らないように相談するシーンも増えました。CIで常にビルドとテストが走るようになったため、緊急リリースにも落ち着いて対応できるようになりました。ユースケースの導入により、無駄な機能を省くことやテストケースの抽出もスムーズになりました。必要な事を一通りできるようになったため、作業見積もりの精度も高くなりました。

新しい手法を導入したことによる悪い点

ところが、新しい手法を導入していくと、悪い意味でも化学反応が起きるわけです。基本的に「なんで変えるの?今までのやり方でいいじゃん」との戦いです。

保守派としては、新しい事を覚えるモチベーションはありません。それは無駄な努力ですから。努力せずに今の状況が続けられるならばそれで良いのです(勿論、保守的なことが重要なドメインもあります)。

この解決方法はひとつだけあります。改革派多数にしてしまえば良いのです。6人チームであれば、改革派が2人いれば充分です。保守派の中には完璧な保守派の他に、多数派が多く居ます。影響力の強い方につく人を含めて6人中4人になってしまえば、純粋な保守派も押さえ込めます。そして、そんな保守派もやってみたくないだけで、やってみれば意外と楽しんでくれます。食わず嫌いみたいなもんですね。まあ、中にはどうにもならない人もいると思いますが・・・。

やれることは、だいたい終わった

それほど大きな会社でもありません。入社して2年もすると、開発環境周りのアップデートもほとんど終わりました。最近では、Mercurial + Jenkins + Redmine の環境も整っていましたし、最後のプロジェクトではCucumeber + Seleniumでのテストの自動化も試しました。まったく改善点がないわけでもありませんが、やりたいことはだいたいやったかなという所です。去年は、勢いに任せて、プライベートでJUnit実践入門も執筆しました。

JUnit実践入門の執筆後あたりからでしょうか、やりたいことはだいたい終わったと感じはじめます。

キッカケは突然、でも必然

色々な経緯で転職して2年ほど過ぎました。新しいことをどんどんと導入してカンフル剤になるような役割もだいたい終わったかなと感じ、新しい事を探し始めます。MongoDBなどに興味持ったり、ユニットテストから受入テストの自動化をもっと調べたり、どうしても今のスキルの延長で考える事が多かったかと思います。

そんな中で、執筆の前後から東京に行く機会もあり、JavaOne Tokyoの懇親会で都元ダイスケさんと出会いました(ネットでは知っていたけどリアルという意味で)。その後、Facebookなどとかで絡んでいたのですが、ふとしたキッカケで、氏が転職したばかりのクラスメソッド株式会社へ電撃転職するような流れになりました(そのあたりの経緯は後日)。

本当に偶然と勢いだったのですが、ここ2年半を振り返ると、それなりに意味のあるステップを踏んできたからこそ、この機会に巡り会えたと感じます。もし、和田さんに会ってなかったら、もし、TDDBCを主催しなかったら、もし、ユニットテストをもっと勉強しなかったら、もし、前職に新しい技術を導入しなかったら、もし、その導入が失敗していたなら、もし、JUnit実践入門を執筆していなかったら・・・と。

新しいことにチャレンジしたい

次職では主にAWSを扱うエンジニアとなります。

Google App Engineは少し触っていましたが、AWSVPS程度にいじったことがある程度です。基本的にまったく未知の領域です。勿論、基本的なLinuxコマンドは使えますが、JavaのWebアプリ開発で環境構築をするとかそんなレベルです。しばらくは学び、役に立つレベルのスキルを習得することに注力するでしょう。

その方がぬくぬくとしているよりも刺激があって楽しいということで、レベル0から再出発です。ツライと思います。

失敗するかもしれません。それはひとつの経験として受け止めます。その時は、どこか拾ってください(笑)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)

追記

東京に引っ越すの?という話ですが、当面は在宅を予定しているため、札幌在住は変わりません。むしろ、札幌に(ry

追記2

転職エントリー転職先会社ブログでご覧ください。

2013-07-15

ニセコ開発キャンプまとめ

06:05 | ニセコ開発キャンプまとめを含むブックマーク

Twitterやら地元やらで集まった開発系のメンツを集め、ニセコで遊んできました。

最初は4泊くらいしようという話だったんですが、予定を合わせたりどうこうしているうちに2泊3日に。当初はノートPCを開いてゴソゴソもやる予定でしたが、最終的にすべてリア充系の遊びをすることになりました。

最終的な参加者は以下の通り。

  • @shuji_w6e
  • @irasally
  • @fel97048
  • @gishi_yama
  • @tmaeda1981jp
  • @megascus
  • @irof
  • @grimrose
  • @Posaune

上5名が道内の人、下4名が道外の人。

0日目

@megascusが木曜日に札幌入していたので、パークゴルフとフッズでレンタルMTBでちょろっと遊び、スープカレーを食す。

f:id:shuji_w6e:20130711185823j:image

1日目

午前中に道外組(@irof @grimrose @Posaune)が新千歳に到着し、自分と@gishi_yamaの車に分乗して余市へ。目的地は柿崎商店。

f:id:shuji_w6e:20130712131434j:image

さらにカニを購入したので水曜日あたりに着弾予定。

その後は余市のニッカウヰスキー工場の見学試飲。

f:id:shuji_w6e:20130712141831j:image

自分と@gishi_yamaはドライバーなので飲めず・・・。悔しいのでアップルワインとウイスキーの原酒を購入。

4時頃にニセコ(正確には倶知安だけど)に移動したら、クロスバイクをレンタルしてサイクリング。だいたい20kmほどのアップダウンを走る。

f:id:shuji_w6e:20130712170656j:image

なお、@megascusが暴走し、行方不明になるイベントが発生。・・・曲がるポイント教えたよね・・・、他の人は全員まがったよorz

7時くらいからバーベキュー。肉を食う。

f:id:shuji_w6e:20130712201311j:image

よほど疲れたのか喰いまくって酒はあまり減らなかった。

11時就寝。

2日目

自分だけは4時半に起床し、5時から朝練。ニセコのヒルクライムコースを走り、さらにパノラマラインを周回し、55kmほどをロードバイクで疾走。

f:id:shuji_w6e:20130713062523j:image

f:id:shuji_w6e:20130713063053j:image

絶景カナ

宿に戻り、9時半からNACのMTBに参加。京極あたりの山奥までハイエースで移動し、そこから軽い山道を走る感じ。ここで、@tmaeda1981jp合流。

f:id:shuji_w6e:20130713103423j:image

f:id:shuji_w6e:20130713105235j:image

羊蹄山カッコイイ。草原の中を走ったりダート走ったり楽しかった。

昼はハンバーガー。ここで@irasally、@fel97048合流。

結構なボリュームで良い塩加減。芋も旨い。

f:id:shuji_w6e:20130713123507j:image

ここで@gishi_yamaは離脱し、午後はラフティング。ゴムボートに5−8人くらいで乗り込んで川下り。

これはもの凄く面白い。端から見たら単に流されているだけであまり楽しそうに見えないけど、自分から落ちて楽しんでみたり、他のボートに水をかけたり、岩にぶつかってみたりと。

ちなみにMTBでもラフティングでもインストラクターが、オリバーって外人だった。悪ノリ大好きのテンションMAXで面白すぎたw

と、丸1日遊んで、夜は再びバーベキュー。2日目は肉控えめ、酒多め。

ホタテが旨い!

3日目

@tmaeda1981jpと自分は朝練。それぞれ別のコースで30km/20kmほどをロードバイクで走った。1日目に比べるとあまり天気良くなかった。

7時くらいから移動を開始し、五色温泉へ。そこからニセコアンヌプリへトレッキング。1時間40分ほど登って、山頂。

f:id:shuji_w6e:20130714093131j:image

雲海の中の羊蹄山。

f:id:shuji_w6e:20130714092943j:image

すばら!

1時間20分くらいで下山したらば、温泉へ・・・。疲れを癒やす。

ランチはコロッケと思っていたが、混雑していて食べられず…。いくつか店を回ったけど、どこも混雑。ちょっと想定外。最終的に回転寿司に寄ってランチ。結構アタリだったので結果オーライ。

14時頃に倶知安に道外組を送り、道内組はそれぞれ帰路に着き、全行程を完了。

まとめ

開発者の体力を開発するキャンプでした。また来年やろうと思います。

2013-02-11

『JUnit実践入門』正誤表(6) #junitbook

| 01:12 | 『JUnit実践入門』正誤表(6) #junitbookを含むブックマーク

誤植速報その6です。

その1からその5までは初刷のみの誤植で2刷では修正済みです。

その1(2刷反映済),その2(2刷反映済),その3(2刷反映済), その4(2刷反映済), その5(2刷反映済), 技評さんの公式サイトです(おって反映されます)。

P362 テストケースのリスト5番目(最後)

誤)

Itemが1つ追加されている状態で、addで同じItemオブジェクトを追加するとgetNumで1が取得できる

正)

Itemが1つ追加されている状態で、addで異なるItemオブジェクトを追加するとgetNumで1が取得できる

リスト18.10のテストコード(最後のテストケース)に対応するテストケースです。テストコードに誤植はありません。

P19.9 複数行テキストのアサーション

テストコード中の期待値に誤りがあります。

誤)

public class MultiLineStringTest {
    @Test
    public void joinで文字列が連結される() throws Exception {
        String ls = System.getProperty("line.separator");
        String expected = "Hello" + ls + "World";
        assertThat(MultiLineString.join("Hello", "World"), is(text(expected)));
    }
}

正)

public class MultiLineStringTest {
    @Test
    public void joinで文字列が連結される() throws Exception {
        String ls = System.getProperty("line.separator");
        String expected = "Hello" + ls + "World" + ls;
        assertThat(MultiLineString.join("Hello", "World"), is(text(expected)));
    }
}

公開済みのサンプルコードは正しいコードとなっており、書籍のみ誤植になります。

ご迷惑をおかけして申し訳ありません。

(7)に続く...

2013-02-05

SQLアンチパターンにおけるPostgreSQLパッチ #sqlap

| 11:16 |  SQLアンチパターンにおけるPostgreSQLパッチ #sqlapを含むブックマーク

SQLアンチパターンMySQLがベースになっているのでPostgreSQLではそのまま動かない。とりあえずサンプルデータベースの変更ポイント。

  • BLOBをBYTEAに変更
  • UNSIGNGEDがないので省略
  • DATETIMEをTIMESTAMPに変更

テーブルを削除したい場合はDROP文をIF EXISTSオプションを付けて冒頭に書いておけばOK。

DROP TABLE IF EXISTS 
  Accounts, BugStatus, Bugs, 
  Comments, Screenshots, Tags, 
  Products, BugsProducts;

修正後のSQLって公開してもいいのかな?

id:t-wada さんに公開OKといただきました。

(追記)リポジトリ公開しました

写経しながらとなりますが、こちらのリポジトリにおいておきます。

https://bitbucket.org/shuji.w6e/sqlap

最初のセットアップスクリプトこちら

t-wadat-wada 2013/02/05 16:34 ぜひぜひ公開して頂ければと思います!

shuji_w6eshuji_w6e 2013/02/05 16:51 ありがとうございます。
早速、リポジトリをpublicにしました。

2013-01-17

北海道Devキャンプ2013 ーニセコのお知らせ

21:44 |  北海道Devキャンプ2013 ーニセコのお知らせを含むブックマーク

7月の連休(予定)となりますが、ニセコのコテージとかを数日借りて、TDDBCをベースとした開発合宿を行う予定です。

とは言っても、TDDBC関係者が中心となっているだけで、TDDとかやらなくても全く問題ありません。やることが特に決まっていないならば、TDDBCのお題を解いてみたり、その辺の話題で盛り上がったりできればいいな、という程度です。

また、今回のキャンプでは開発合宿だけではなく、温泉・サイクリングやラフティングといったアクティビティ・バーベキューなど北海道を楽しんで、仲間と一緒にリフレッシュしようというのがテーマです。

遊ぶものはおって決めていきたいと思いますが、サイクリングだけは確定。1人でも朝走りますw

なお、遊ぶための道具については持ち込んでもらっても、ニセコでレンタルしてもOKです(実費)。

と、こんなノリで、北海道に遊びに来たいと感じた人は、こちらから参加表明を!なお、この参加登録は本登録ではなく、だいたいの人数把握のためです。本登録のための募集は3月以降になります。