後輩プログラマに入社する前に身につけて欲しい考えと技術要素
はじめに
組織でチームとして開発をすることは、趣味で行うプログラミングをや学生が研究のために開発をするのとはまた異なる知識やスキルが必要となる。本文ではチーム・業務環境での開発に明るくない人を対象としてその考え方の違いや、身につけて欲しい知識としてCI、テスト、DB周りの事を紹介する。
プロフェッショナルとして組織で開発するということ
学生や個人で開発をすることと、企業で開発をすることの大きな違いとして、金銭等を対価にシステムの運営を期待されていることや不特定多数との共同作業が求められることなどが挙げられる。
プロフェッショナルとして
企業で開発をするということは基本的にはお金を対価に製品・サービスを提供することだ。「僕の変更でちょっとシステム止まっちゃった、動くまで1時間待って」では済まないのである(最近たまに見る光景ではある)。"Don't Ship the Shit"だ。貴方の研究のアルゴリズムが間違ってたせいでプレゼン資料に誤ったデータを載せて教授に注意されるのとはわけ違うわけだ。
こういった問題を防ぎ、プロフェッショナルとして製品やサービスを提供するにはコードクオリティの向上が必要だ。今回紹介する技術要素は全てここに関わってくる。
チームとして
組織における開発はとにかく関わる人が多い。大学等での開発はほとんどが個人、もしくは先輩後輩で密にコミュニケーションの小さなチームで異なる部分に着目しての開発だろうか。 その点企業での開発はほとんどがチーム、多きなものでは数十、数百人がひとつのプロダクトを開発するために関わるだろう。 更に貴方のチームメイトは今一緒に働く人達だけじゃなく、将来入ってくる人々も貴方の加える変更の影響を受けるチームメイトなのだ。
この様に企業では不特定多数の人が関わり一つのものをつくり上げることを意識しなければいけない。
身につけて欲しい技術要素
CI (継続的インテグレーション)
CI (継続的インテグレーション)はソフトウェアのビルドやテストを継続的に行い、ソフトウェア品質の維持を保つための仕組みである。ここではgit、svnなどのバージョン管理システムから継続的デリバリなどの一連の流れを含めてCIとして挙げてある。
VCS (バージョン管理システム)
最近は学生等にも広く浸透していると思うがgitやsvnなどのバージョン管理システムは安定した開発を続けるために非常に重要だ。 既存のコードに変更を変更を加えて何かを試したいときにファイルの名前を変えたりコードをコメントアウトするのは筋が悪い。 行うべきはコードのコミットであり、後はツールが履歴の記録やdiffの生成を簡単に行ってくれる。
また、VCSを利用することでコードの共有が圧倒的に容易になる。チームで開発をするときにはひとつのリポジトリからコードを取得しメンバーの開発した成果は最終的にひとつのリポジトリに入れられる。この際は自分の成果が他のモノを壊していないか充分に確認してから行うべきだ。 自分の変更が他の人に共有される事を意識してコミット時のコメントは他のチームメイトや将来自分が見返した時に意図が伝わりやすいものを意識しよう。
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus)
- 作者: 大塚弘記
- 出版社/メーカー: 技術評論社
- 発売日: 2014/03/20
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (18件) を見る
Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)
- 作者: Mike Mason,でびあんぐる
- 出版社/メーカー: オーム社
- 発売日: 2007/04/21
- メディア: 単行本(ソフトカバー)
- 購入: 35人 クリック: 672回
- この商品を含むブログ (103件) を見る
コードレビュー
コードレビューはその名の通りコードの出来を皆で確認するプロセスだ。ここに辿り着くまでにはたいてい幾つもの苦労があるが、これも大きな関門だ。ある意味自分のデキのshowcaseであり、実力が判断される場だ。見苦しいshitを皆の前に出さないように気をつけよう。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)
- 作者: Dustin Boswell,Trevor Foucher,須藤功平,角征典
- 出版社/メーカー: オライリージャパン
- 発売日: 2012/06/23
- メディア: 単行本(ソフトカバー)
- 購入: 68人 クリック: 1,802回
- この商品を含むブログ (122件) を見る
CI (継続的インテグレーション)
個人での開発のレベルでCIをきっちりと行っている人は多くはないかもしれないが、CIは手間のかかるビルドをビルド自動で定期的に行う事を可能にし、その際ビルド結果に対するテストも可能にする。これを継続的に行うことでコードの異常を素早く発見することができ、自動化されているため一度設定してしまえば手間も少ない。多くの場合、JenkinsやTeamCityなどのツールが使われている。
環境にもよるが、共有リポジトリにコミットがあったらビルドを走らせるという設定をしている場は多いだろう。コミットは必ずビルド・テストが全て適切に行えるとローカルで確認してから行うようにしよう。(万が一共有のビルドをクラッシュさせた場合には直すまで鬼のように電話やメールがくるという可能性も否定出来ない。)
- 作者: ポール・M・デュバル,スティーブ・M・マティアス,アンドリュー・グローバー,大塚庸史,丸山大輔,岡本裕二,亀村圭助
- 出版社/メーカー: 日経BP社
- 発売日: 2009/08/06
- メディア: 単行本
- 購入: 18人 クリック: 388回
- この商品を含むブログ (37件) を見る
- 作者: Junio C Hamano,大塚弘記,川口耕介,kana,大竹智也(tomoya),尾藤正人,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2013/04/10
- メディア: 大型本
- クリック: 1回
- この商品を含むブログ (11件) を見る
継続的デリバリ
企業文化にもよるだろうが、多くの場合は変更が出来たらすぐに変更をリリースというわけではない。 1週間や1ヶ月に一度プロダクションリリースの日があり、その日を目標にある機能を作成しQA環境でのテスト、ユーザを巻き込んだUATをパスし準備万端の状態でリリースを行うことが望まれている。 きたるその日に備えて我々プログラマは日々コードとにらめっこするのだ。
個人的にはチェックイン後のビルドが走る度に最新のコードがQA環境に自動でデプロイされ、UAT環境には基本的なテストをパスしたRC(Release Candidate)のみがデプロイされるというような設定が好きだ。 UAT後の変更は有り得る話だが、基本的にUATまでには出来る限り全ての確認を終えあとはリリースをするだけだという状態で臨みたい。 最後に急な仕様変更を求めてくるクライアントはクソ食らえだ!
Jenkins実践入門 ?ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)
- 作者: 佐藤聖規,和田貴久,河村雅人,米沢弘樹,山岸啓,川口耕介
- 出版社/メーカー: 技術評論社
- 発売日: 2011/11/11
- メディア: 単行本(ソフトカバー)
- 購入: 26人 クリック: 496回
- この商品を含むブログ (65件) を見る
チーム開発実践入門 ~共同作業を円滑に行うツール・メソッド (WEB+DB PRESS plus)
- 作者: 池田尚史,藤倉和明,井上史彰
- 出版社/メーカー: 技術評論社
- 発売日: 2014/04/16
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (8件) を見る
テスト
企業での開発はテスト!テスト!テスト!!だ。 学生時代に研究用のコードにテストを書いていた人はあまり見たことがないが、企業ではそうはいかない。 成果の出来を確認し、クライアントのもとに届けるまでにはユニットテスト、レグレッションテスト、インテグレーションテスト等々様々な切り口からのテストが必要となる。(それぞれのテストの意図がわからない人は今すぐググろう) テストを書くことは意図せぬ変更からチームメイトを守り、将来再びそのコードに訪れる自分を守ることに繋がる。
最近はコードの中で完結する従来のようなテストのみでなく、ユーザも巻き込んで仕様書をインプットとしたりテストケースをプログラムに詳しくない人にも書かせることを可能にしたFitnesseや、(マウス)ポインタをハイジャックして実際のGUIを用いてテストをするSikuliといったものまである。 テストに詳しくなって強固な開発基盤を構築する事を意識しよう。
JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
- 作者: 渡辺修司
- 出版社/メーカー: 技術評論社
- 発売日: 2012/11/21
- メディア: 単行本(ソフトカバー)
- 購入: 14人 クリック: 273回
- この商品を含むブログ (68件) を見る
実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)
- 作者: Janet Gregory,Lisa Crispin,榊原彰,増田聡,山腰直樹,石橋正章
- 出版社/メーカー: 翔泳社
- 発売日: 2009/11/28
- メディア: 大型本
- 購入: 3人 クリック: 142回
- この商品を含むブログ (52件) を見る
DB (SQL)
ここではDBの設計等ではなく、SQLクエリの話だ。(余談だがEnglish SpeakersはSQLを”えすきゅーえる”と発音するのではなく"しーくる"と言う)
アドホックなクエリ、プログラムに組み込むクエリどちらの場合もとにかくパフォーマンスを意識するべきだ。 プロダクションDBでなにか探しものをするときに酷いクエリを走らせてCPUを専有しシステム全体のスループットを落としましたなどとなったら目も当てられない。
クエリの設計・実行を行う場合にはどのインデックスを使用するのか、クエリプランはどのようになるか、充分なフィルタはされているのか、ストアドプロシジャにするべきか否か等をよく考えてから行動をするようにして欲しい。
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る
- 作者: Bill Karwin,和田卓人(監訳),和田省二(監訳),児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (40件) を見る
まとめ
以上で新人のプログラマに働く前に最低限抑えて欲しいことを挙げたが、実際に働き出したらここに挙げたような事でもわからないことに多くぶつかると思う。 そんな場合にはこんなことを聞いてもいいのかと思い悩まずにどんどん先輩に質問して欲しい。 多分先輩社員はなんだかんだ後輩が来るのが楽しみであるだろうし、新人の成長はチーム全体の生産性の向上につながるのでそのための協力は惜しまない。 この文を読んでくれた人が良いデベロッパとして楽しい環境で開発を続けられることを祈っている。