読者です 読者をやめる 読者になる 読者になる

basyura's blog

あしたになったらほんきだす。

僕のチームの開発ルール

僕のチームの開発ルール、なんていうと大げさだし内容があってない感あるけど触発されて書いてみる。ただの思い出の殴り書き。

CVS

java servlet で IE をうにょうにょ動かす web? システムを作っていた。その頃はプロジェクトで CVS を使っていた。SVN 1.0 が出てはいたが 1.1 はまだだった。そもそも存在を知らなかったと思う。

wiki を使っているチームもあったが、基本的には excel に書いて共通フォルダに置いていたような気がする。ある程度の仕様書は web 上に置かれていた。最新化されることもなく情報共有の認識も薄かったのでそれぞれでメモを持っていた。客先(開発室)にいたこともあって充分なネット環境がなく、air edge で 256kbps はええ!トルネード速くなるけど画像が荒い!といった時期だった。

Eclipse の CVS 連携で表示される差分が見やすくて非常に良かった。差分表示機能だけ取り出せないものかと試行錯誤してた気がするけど、今思えば winmerge とか使えばよかったんじゃないだろうか。知識も検索力も乏しい時代だったので何かと時間がかかっていたように思う。

最近は Eclipse がバカにされている?風潮があるけど、上位バージョンで使える機能を除けば昨今の visual studio より扱いやすかった印象。たまにメモリ不足で落ちることを除けばバックグラウンドでビルドしてくれるしアウトラインがポップアップで出るし起動するまでに dll 読み込みすぎてアレとかなかったし(これは構成の問題だけど)。jsp を書き換えて IE を F5 でリロードして即反映されるのが楽だった。js も書き換えれば即反映だったし。生産性は悪くなかったと思うけど業務知識も開発スキルも低くて黒歴史が量産された。あの頃は若かった問題。

当時は IE6 なのもあってパフォーマンスに悩まされ続けたけど最近は PC の性能も上がりまくって爆速になってたりする。

Vimmer になったのもその頃で ViPlugin が便利だった。途中から vrapper に切り替えてさらに便利になった。

CVS と Redmine

相変わらず CVS で開発してユーザーごとにタグを打つとか移動するとかしていた。ファイル単位に。それはそれで小回りがきいて激しく困ったことはなかった。バージョンもそんなに別れてなかったし。

この頃はほぼ一人で開発とメンテをしていたのだけど、機能追加やバグ修正に伴って記録が全くないのはマズイだろうと一人 Redmine を始める。自分がいなくなっても経緯とかはここを見てもらえばなんとかなるだろうというのもあった。

数人が入っては抜けてを繰り返し自分も抜けて無事に引き渡しができた。見ることはないけど今も稼働しているので十分に役立った。

SVN

別プロジェクトが始まって SVN 運用がはじまった。開発中は何も考えずコミットしていけばよかったけど、リリースのためのブランチがきられると地獄がはじまった。コミット単位のマージがめんどくさいし分岐したブランチの統合は何回か試みが行われた後は戻そうと言い出す人はいなくなった。マージ担当が徹夜でコンフリクトを直した結果、マージ元と先が逆になってて早朝に破棄されてたのは胸が熱くなった。お疲れ。

元々資源管理に関する運用を考えるということに対して全体的に希薄だったのがよくなかった。マージすればいいんでしょ、ぐらいの軽い気持ちだったように思う。

SVN だけで複数の案件を並行して開発するのは無理に感じたので、僕は git-svn を使っていた。他の人は歯を食いしばっていた、ように思っていたけど git に切り替わるとSVN の方が良かった(分かり易かった)と言う声をかなり聞くのでこだわってたのはごく少数だったのかもしれない。

SVN + Redmine

課題管理を何でするか?となった時に excel 管理は嫌だ!と言い通して(駄々をこねて)導入。チームとして Redmine を使う事になる。最初はみんな慣れてなくて右往左往するか何も書き込まない。継続的な啓蒙活動と Redmine おじさん活動を行う。こまめにチケットに反応しているとようやく要領が分かったようで浸透していった。ついでにチケット上での喧嘩がちょいちょい勃発していたけど思春期みたいなもので一定期間過ぎると無くなっていった。

最初は windows server に SVN を立てていたのだけど、別の windows 機に立ててる Redmine がリポジトリの内容を引っ張れなくて残念だった。リビジョン番号はチケットに書いているけど、その修正内容は Redmine で見れないのでリリース系にマージされてるのかを調べるのが手間でメリットが半減していた。

チケット番号と SVN のログからコミットされているかを付き合わせて一覧化するスクリプトを書いて、出荷のたびにエクセルでリリースブランチにマージしてるのかしてないのかを書き込んでもらう運用。

その後、SVN のサーバが変わったタイミングで取れるようになったのでチケットとコミットが紐づけることができるようになった。チケットを開けばマージ状況はもちろん diff も見れるようになったのでいろんなことが捗るようになった。ようやく一人前になれた気がした。

必要に応じて Redmine 本体をいじったり plugin を書いたりして運用中。

最近は親子関係のチケットが量産されているのが気になっているが、自発的にチケットおこしやコメントをすることが当たり前になっている。「それチケットに登録されてる?」「チケットの番号は?」という会話が普通にされている。

SVN + Redmine + Jenkins

開発が進むにつれてビルドエラーが目立つようになる。うっかりコミット漏れもあるがビルドが通るかの確認もなくコミットされてるケースもあった。自分のところだけならまだいいけど、他チームにも迷惑をかけてしまうことも多々あった。ちょうど良いタイミングで Jenkins のセミナーがあったので受講。ググれと言われればそれまでだけれど、順序立てて教えてもらえるのは分かりやすくてありがたかった。すぐに自チーム用の Jenkins を立てて日に5回程度ビルドして注意を促した。同時に他チーム起因によるエラーを見つけては連絡していた。だいたいみんな「自分のところではビルド通ってますけどね」と言う。

Redmine と同じサーバに Jenkins も入れていたのでビルド中は Redmine が重いなぁと感じることがあったけど、最近はパフォーマンスアップされたのかビルド中でも特に感じなくなった。Jenkins でいい感じに並列ビルドできず時間がまぁまぁかかるのが難点。SSD にしたい。プロジェクト構成的に並列ビルドが厳しいのもなんとかしたいけど手遅れ感がある。

git

プロジェクト開始当初も git にするかという話はあったのだけど勉強コストがあるのと、今から変えると大混乱することが目に見えていたので先送りにされていた。

開発に 1 つの区切りができたのもあり、SVN だと辛いことが多いのもあって git への移行が決定される。言い出しっぺなところもあるけど、蓋を開けてみると git を知っている人が数人しかおらず、github を使っていた自分が一番詳しかったようで旗振り役になる。

詳しかったと言っても一人プロジェクトだったので、複数人でやるときの merge や rebase 運用についてはいろいろ調べながら試行錯誤で進めた。yokohama.vim でも相談させてもらった。運用はしているけど、それが一般的なのか間違ってるのかが分からないので、外の人に直接話を聞ける場があるっていうのは非常にありがたかった。

Github はお金的な問題でダメ。Gitbucket か GitLab かで迷ったけれど GitLab を採用。 Gitbucket ではフックがまだ使えなかったのが大きな理由だった。試用を兼ねて立てているけど、jar 一個で動くお手軽感はすげーなと思う。

GitLab は良いタイミングでパフォーマンスチューニングが活発になっていたのも大きかった。ネットでは重いと評判だったし自分で立てて検証してみても確かに厳しいなという感触だった。それがアップデートの度にいい感じに改善していた。現状でも重いなと思うことはしばしばあるけど “まだ” 許容範囲。

もう 1 つタイミングが良かったなと思うのが git for windows の改善。コマンド入力が苦手な人が多すぎるのは置いとくとして、問題なく使えている。packman を使ってパッケージを入れられるのも良かった。このタイミングで cygwin をようやく捨てることができた。長い間本当にお世話になった。ck も。

GitLab をセットアップし、定期的にアップデートして、Ruby でフックを作った。Redmine の plugin に次ぐ、業務で Ruby のお仕事。

ブランチ戦略を考えたり、wiki に手順や困った時の tips などなど沢山書き込んで情報発信しまくった。当初は使ってなかったけど merge request を紹介して運用に乗せた。今は当たり前に使っていてソースレビューも行われている。

現在の運用はほぼ手を離れていて担当の人に任せてある状態。何かあればフォローする程度になった。

次は

Elasticsearch などを使って Redmine やアプリログの可視化をしたいなと思っている。けどプロジェクトのピークがずっと続いててなかなか手をつけられてない。

まとめ

某 naoya さんがスクルトをかける方が好きだという表現をしていたけど、僕もそっちがあってるっぽい。レベルが違うので同じとか言うのも恥ずかしいけど。 自分でコードを書くし設計したりもするけど、開発スピードを上げるための活動やリリースの改善をした結果、助かる人がいるとか喜んでくれる人がいるとやる気がでる。 本来やるべきこととはズレたボランティアベースな所が多々ある。活動として給料が出るといいんだけど、本来やるべきところを後ろにずらしてやってたりするのでトントンか。他にも効率よく開発できるようにリポジトリの掃除や整備も地味にやってたりするんだけど、なかなか評価されない所ではある。自分からアピールしたりもしないけど。みんなで効率悪いことやってると気になってしまうので仕方がない。

今年度は (も) 色々あって激動の年になりそうだけど、適度に頑張る。体が元気ならなんとでもなる。