smellman's Broken Diary

クソみたいなもんです

続・自分がエンジニアとして働くために学んできたことをまとめてみる

前回のまとめの続きを書きます。が、その前に一つだけ。「ケイビーエムジェイ編楽しみにしてるよ」とか飲みながら脅すのはやめてください。とてもプレッシャーですw
というわけで、株式会社ケイビーエムジェイ入社後から現在までと、mmasudaさんから受けたリクエストに答えようという感じです。

社会人二社目:株式会社ケイビーエムジェイ

細かく書くので年度ごとにわけます。

一年目

ケイビーエムジェイで最初に担当したのはJava案件でした。Java+Spring FrameworkというまたStruts系とは違う感じのスタイルですごく戸惑ったのを覚えています。
当時はうつ病がひどく、あまり記憶に無いのですが、一番学んだのは若者のノリです。僕が転職一ヶ月後に入ってきた新卒たちがありえないぐらい呑みに行っていて、たまに一緒に行くとびびる飲み方をしていて、若いってすごいなぁと感じたのを覚えています。
自分にとって一番強かったのがオープンソースのデータベースを扱い始めたことです。具体的にはPostgreSQLMySQLを仕事のメインで扱うのはケイビーエムジェイに入ってからが初めてです。
とくに初期の仕事で強烈に覚えているのが上記のJava案件とは別に、Ruby on Railsの案件でPostgreSQL+Slony-Iを使った冗長化を担当したことです。もういつやったか覚えてないのですが、作業内容は僕にとっては相当強烈でした。
まず、メモリが2GBしかないマシンでVMWare Fusionを使って5台のインスタンスを動かして、本番環境の単純にスペックが低い状態の環境をほぼ再現しました。まぁ、糞重いことこの上ないですw同時に起動したりした時なんかはいつ立ち上がるか分からないのでタバコ吸いに行ったりとかしていました。
そして、Slony-Iの特性から導入後の問題点とかを知れたのが良かったです。Slony-IRuby on Railsのmigrationという仕組みとの相性がめちゃくちゃ悪く、一度導入してしまうとmigrationの仕組みに頼ることができないという問題点がありました。SQLを書いてデプロイするのが前提となってしまうのです。この問題点自体は開発者にも伝え、あまり拡張しないという前提の上で運用してもらうということになりました。しかしながら、Ruby on Railsの案件では拡張性なども考慮しないと後々に困るケースが多々あるので、他のプロダクトや方法を検討しないとまずいという意識が強烈に残っていたため、これが後々の開発での認識を変える事となりました。
一年目のラストに僕の現在のインフラ関係の元ネタとなるHeartbeat+DRDBの構築を担当しました。当時の作業はdorubyに残っています(DRBD+Heartbeat+NFS)。

二年目

二年目に突入すると部署異動に伴い、Ruby on Railsの業務を担当することになります。初期のころにはRESTを意識する開発とかRSpecを使ったTDDなどを学んだりしていました。
その後、一ヶ月で部署異動で戻されて、他のJava案件(SA-Struts使ってたなぁ...)に関わって生贄にされたりとかありました。生贄の件についてはうつ病が治っていない時期だったのでまぁ死ぬかと思いました。laptopを使っているという理由で生贄にされるのを学びました。
生贄として働きながら、終電で帰ると生贄先の人に嘘を言って会社に戻ってサーバ構築してたのもいい思い出です。Javaの仕事で疲れた精神をサーバ構築で回復するという謎の性癖があるのを学びました。学んだ?
二年目の途中からASPの追加開発を経験しました。その中で自分の開発に関わるものをどのようにテストすればいいかと悩んだ時にMindMapを使って頭に出てきたものを整理して美味いこといったのが印象的でした。また、うつ病が治ったのがこの頃で、当時のPMととても良い仕事が出来たのが要因でした。それまでも良い仕事はあったのですが、たぶん人生で一番いい仕事だと自信を持って言える仕事です。最初から最後まで満足して働ける仕事があるというのを学びました。
そして、二年目の最後に関わったのがオープンソースECパッケージエレコマの開発です。エレコマはリリース後は僕がメイン担当として退職まで関わり続けました。このパッケージで一番学んだのはリリースタイミングは重要ということでした。開発はかなり前からやっていたのですが、某イベントでたまたま別の会社が「来年1月にRuby on Railsで書いたオープンソースECパッケージをリリースします」とチラシを配っていたのですが、そのチラシを見せたらだったらうちはその前に出そうという形になりました。実際に2009年12月にリリースをしたのですが、うちじゃない方は...大変だったらしいですね...
ちなみに、OSCに会社で出展をはじめたのもコレがきっかけだったりします。

三年目

三年目はキャリアの幅が無駄に広がり始めた年です。基本はエレコマの担当だったのですが、それ以外の仕事も入りました。
三年目に突入して早々に関わったのが某qpstudyで発表した事例です。えーと、詮索はよしてくれ。ちなみにコレは突然のヘルプでした。日曜日にうっかり仕事してると飛んでもないキラーパスが飛んでくるのを学びました。
次に今までとは違う仕事としてiPhone系の開発の話が来ました。とは言え、開発というよりは検証でした。iPhone系で最初にやったのが「In App PurchaseのiPhoneとサーバのサンプル実装を一週間で」というものです。一週間!?Objective-C自体は大学のころにちょっと勉強していた(Macのアプリ作りたかった)のですが、正直ほぼ未経験に近い状態でした。やけになって三日で終わらせました。そしたらその案件のサーバ構築担当に...
数ヶ月後にもう一件iPhoneの開発の話が来ました。「SQLiteの暗号化の方法を検証してほしい」この時にやった検証結果はslideshareにアップしています(スマートフォン勉強会@関東 #11 LT 5分で語る SQLite暗号化)。ここではsqlite自体に暗号化などをするための枠組みがあるのを学びました。これはどこかで仕組み自体の振り返りを行いたいと未だに思っています。
サーバ系の作業では大きな構築が一件ありました。そこではHeartbeat V2+DRBD+MySQLという仕組みで冗長化構成を組みました。僕自身はMySQLはすごく苦手(今もです)で、関わるとだいたいハマるんですが、この時の仕組みではHeartbeatで制御する箇所とMySQLの構築部分はきっぱりと別れたため、MySQLではあまりハマらずに済みました。個人的には嬉しい経験でした。
その後、エレコマのプラグイン開発後にベトナムに行くことになります。一回目は現地のエンジニアにiPhone開発を教えるという内容でした。これはFirefox Developer Conferenceの懇親会LTでネタにしたので覚えてる方もいると思いますが、当時iPhone開発歴は2週間もないのに教えにいくという相当なムチャぶりでした。
二回目のベトナム出張ではRuby on Railsの実際の業務を持って行きました。現在も動いているサイトですが、かなりの部分をベトナムで作りました。設計もほとんどベトナム現地で行い、日本にいる担当者とチャットで詰めながら現地のエンジニアに教育しながら作りました。サイト運用まで結構積み残しがあったまま帰国したのですが、この二回の出張で教育の楽しみを覚え、ベトナムでのビジネスプランを議論したりして数ヶ月後には戻ってこようと思いました。デング熱で台なしになりましたorz 蚊は怖いというのを初めて学びました(涙

四年目

四年目に突入直後、3.11を迎えました。数日後、sinsai.infoに参加しました。最初はバグ修正でと思っていたのですが、初期のサーバ移行を担当したり、gitのPull Requestの管理なども担当しました。会社の業務が再開してしまい、そのまま離れてしまったのですが、あの数日間にやったこと、特にサーバ移行作業は僕にとって誇りとなる作業となりました。
四年目ではまずエレコマを使った開発と保守と、別件で開発されたエレコマベースのプロダクトの保守をメインで行いました。金額面での採算が合わせるのが結構たいへんだったため、なるべくお客様に任せられるところを管理画面で実装してみたりとかしました。erbを書き換える手間よりも実装する時間の方がだいたい二倍だったので、erbの修正が年に数回あると考えたら機能を作る方が後々の作業費を浮かせられるという判斷をしました。RoRのパッケージの強みがよく出た事例だなと思いました。
エレコマというとエレコマベースの案件を新たにゲットすべく営業の人たちと何件かお客様のところに回ったり、資料を作ったりというのをしていました。新規案件を取るというのがいかに難しいかを学びました。
あと、Android開発を二回担当することになりましたが、黒歴史なので割愛します。
途中、ヘルプで案件に入りました。ファイルの大きさをlengthでチェックしてる箇所が盛大なメモリリークを起こしていたのを修正とかしていました。それ以外の記憶があまりない...
最後は退職まで一つの大きな案件を担当しました。Ruby on Rails 3.1で開発を行ない、サーバではインスタンスを含めて20台以上のシステムを一人で初期構築をしました。クリスマスイブをサーバルームで迎えることのさびしさを学びました。その案件では初めてPacemaker+Corosyncを使った構成で組みました。crmの使いやすさが素晴らしく、Heartbeat V1, V2と両方やってきたものとしては驚きの連続でした。

まとめ

ケイビーエムジェイではRuby on RailsLinux-HAが僕のメインの知識として得る形となりました。
Linux-HAは特にOSC京都でLinux-HA Japanの人たちと会って(久保さんは元々知り合いでしたけど)話をするようになったのが一番大きいと思います。このコミュニティを通して得られるものが非常に多く、最後のプロダクトではコミュニティに遊びに行って得られたものをふんだんに使うことができました。

ケイビーエムジェイ時代に読んでいた本はここらへんです。

初めてのRuby

初めてのRuby


Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)


Joel on Software

Joel on Software


More Joel on Software

More Joel on Software


ソフトウエア・クリエイティビティ ソフトウエア開発に創造性はなぜ必要か

ソフトウエア・クリエイティビティ ソフトウエア開発に創造性はなぜ必要か



ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション

ThoughtWorksアンソロジー ―アジャイルとオブジェクト指向によるソフトウェアイノベーション


セキュリティの神話

セキュリティの神話


Redmineによるタスクマネジメント実践技法

Redmineによるタスクマネジメント実践技法


.NET Frameworkエッセンシャルズ 第2版

.NET Frameworkエッセンシャルズ 第2版


The Root of .NET Framework

The Root of .NET Framework


Android Hacks ―プロが教えるテクニック & ツール

Android Hacks ―プロが教えるテクニック & ツール


(Railsは洋書で勉強してたんだけど、Amazonで見つからない...)

最後に

僕が心が折れた時に読む本を紹介します。

G戦場ヘヴンズドア 1集 (IKKI COMICS)

G戦場ヘヴンズドア 1集 (IKKI COMICS)


G戦場ヘヴンズドア 2集 (IKKI COMICS)

G戦場ヘヴンズドア 2集 (IKKI COMICS)


G戦場ヘヴンズドア 3集 (IKKI COMICS)

G戦場ヘヴンズドア 3集 (IKKI COMICS)

何度支えられたかわかりません。

さて、明日からの次の職場では何を学ぶのでしょうか?松澤太郎の来世にご期待ください。