いまだ明確な定義のない「DevOps」ですが、基本的な概念としては開発者と技術者の協業によって開発効率をアップすることらしいです。
http://ja.wikipedia.org/wiki/DevOps
では、どうしたら実際に効率化が図れるかを考えてみます。
もし、今のままの状態で、開発と技術の打合せを行ったとします。
するとお互いにところどころわからない専門用語などが出てきて、もしその対応方法が間違ってるかもしれないと尻込みしてしまい、結局お互いの得意分野の内容しかうまくかみ合いません。
打合せで言っていることは同じ日本語なのですが、外国語のように思うように話ができないのです。だからといって通訳など入れようにも簡単ではありません。
まず一番簡単なのは、開発と技術が両方できる人たちを集めることです。
次にいいのは開発と技術が両方できる人たちを育てることでしょう。
ですが、これを実際行おうとすると技術情報分野の範囲が広すぎて、勉強時間だけで作業時間がどんどんつぶれていってしまいます。
本格的にやるとすれば、ITの技術研究グループを用意して社内勉強会を繰り広げることが近道だと思います。
また、それもいまだ外注の多い国内企業ではなかなか難しいでしょう。
他社の人材の勉強時間は工数として換算したくないでしょうし、入れ替えも激しいためそこまで育てる義理もないのですから。。。
そこで、一つの現実的な方法としては「開発と技術が両方できる人」にプロデュースを行ってもらう形での分業と、特にはクラウドサーバーや仮想化環境を有効に活用することです。
責任重大ですが、プロデューサー(監督)を利用するのはお互いの責任転嫁を避けるためになります。また、作業判断の遅れも効率の低下の原因でしょう。うまくけば、プロデューサー(監督)でのブランド戦略もできるかもしれません。
クラウドサーバーの活用の理由は、随時スケールインとスケールアウトが可能なところです。ハードウェアのスペック見積もりで減価償却も考えた過剰なスペック見積もりの問題もなくなります。
クラウドサーバーも今ではIaaSも使えますし、VPN接続も利用できます。
テストサーバーを用意するのに1か月とか、本番サーバーへの移行に1か月とか余計な懸念も必要ありません。そのまま本番移行することもできるのですから。
さらにはクラウドの環境を複製して、随時クライアントへの提示もかんたんです。
もし、本番稼働をオンプレミス(自社内)で行いたい場合でも、そのまま仮想化のイメージを社内で利用することすら可能です。
開発環境においても仮想化で構築しておけば、各種バーション環境の保全も簡単ですし、リモートワークにも活用できるでしょう。
日時バッチ処理なども古いコマンドなどで深夜などに対応しなくても、プログラミング言語で簡単に対応できる時代になっています。
実際のところ、開発者や技術者がこのような環境構築方法を知っているだけでも、かなり開発効率がアップするはずです。
また、既に知識を身につけて使っている状態であれば、「DevOps」は開発者や技術者の垣根を越えた「DevOpsチーム」だと考えたほうがいいかもしれません。
ある意味開発・運用におけるエリート集団でしょう。
今、どんどんITの技術革新が進んでいます。
やはり新技術にはメリットとデメリットがありますが、それを知っているだけでも十分なメリットとなります。
「DevOps」は開発手法みたいに話されていますが、実のところ、他の技術分野でもまずは知識を得たうえで、技術者は開発者へ、開発者は技術者へと立場によらずにお互いが貢献しあうことで開発効率がアップできるということを言いたいのかもしれません。
知らないから、苦手だから、関係ないからと言わずにお互いの技術情報はマッチアップして、お互いを尊重しながら効率よく進めて行くことが大事なのだと思います。
P.S.
さらに掘り下げると、現在利用言語が多すぎだと思っています。。。
すべてがJavaScriptやC#などをベースにコマンドやバッチが実行できれば、よりお互いの垣根が下がると思います。オープンソースになってきましたので、ここらへんも言語戦争などせずにうまくエイリアスで対応できると思いますので、なんとかしていってほしいものですね。。。
追記(2015/09/17)
関連記事になります。こちらも合わせてどうぞ。
DevOps開発手法の概念と実践について考えてみた