クラウドをプラットホームにした開発の実際のところ
弊社は基本的には、受託のシステム開発のビジネスを行っている。ときにはメインフレームの案件すら手がけることもあるが、おもにはUNIXやLinux、Windowsをプラットホームに、C言語、Java、その他Perlやらアセンブラなどまで用い、幅広いシステム開発を行ってきた。
とはいえこの領域の仕事、先行きが明るいとは決して言えない。もちろんなくなることはないかもしれないが、いまやコードを書いたら書くだけある種負けなんじゃないかと思われるところもある。バグの問題もあるし、テストの手間もあるし、セキュリティリスクも考えないと。システム開発の現場ではリスクが増えているのに、対価は上がらない。上がらないどころか、下がっているというのが実情だ。
★
そんなこともあり、遅ればせながらSaaS、クラウドにも進出している。既存のアプリケーションをSalesforce.comのForce.comの上に移植してみたり、Amazon EC2やGoogle Appsの上でもさまざまなアプリケーションを作り始めている。案件の依頼や提案でも、これらのクラウド上のプラットホーム活用の話しも、ちらほら出つつある(Azureの話はまだないけど)。まだまだ経験豊富とまではいかないが、いくつかクラウド上の開発を手がけてきたところでの印象を。
たとえば、Salesforce.comのForce.comを利用する場合だが、おもにインターフェイス周りのアプリケーション開発では、3つのパターンが考えられる。
- 標準機能だけで作る(手作りコードなし)
- 標準機能+トリガ機能で作る。これは、たとえばボタンをクリックした際に手作りコードに飛ばすようなもの。
- すべて手作りコードで構築する。この場合はVisualforceを活用することになる。
Salesforce.comのデータを自分用に表示するだけならば、1の標準機能だけで構築できる。これはアプリケーション開発と言うよりもカスタマイズの域かもしれない。2は標準的な画面だけでは実現できない機能を、別立てでロジックをプログラミングし、それを呼び出して利用するような場合だ。そして、Salesforce.comの既存の画面などからはまったく独立した形でアプリケーションを作る場合には、3の方法をとることになる。
設計やらなんやらは、まあローカル環境でもクラウドでも同様とする。工程をプログラム開発からから単体テスト(ユニットテスト)までと仮定してForce.com上で開発するのと、ローカル環境でJavaを用いて開発するのとで比較する。1の場合はSalesforce.comに慣れていれば当然効率よく開発ができる。とはいえ、Javaもいまやさまざまな便利ツールが用意されつつあるので、大きな差にはならないかもしれない。
プログラムコード開発が入る2、3の方法は、Force.com独自のApexコードを使うことになる。これを憶えるのに手間は若干かかるが、Javaに精通していればとくにそれは課題にはならない。というわけで、プログラミングそのものの手間は、弊社では大きく変わらない。Javaのほうが汎用性が高いぶんだけ若干の時間と手間を要する場合があるといったところか。
分析すると大きくは双方の手間は変わらないようなのだが、結果的にはクラウドのほうが開発効率が良さそうだという印象がある。弊社における実績では、Salesforce.comで1日~2日でできるものが、Javaだと3,4日程度といった感じで進む場合が多い。この数字だけみれば、かなり開発効率はいいとも言える。
明らかに手間の削減につながっているのが、クラウドだとアプリケーションサーバーやデータベースを別に用意する手間がないこと。この分の工数は、確実に削減される。またハードやOSにまつわるなんらかの障害に対応しない(対応しようがない)というのも、手間がかからないといえばかからないことになる。
★
ところで、テストに関しては、Salesforce.comのForce.comでは、Javaで言うところのJUnitのような各メソッドをコールするテストケースを書いて行うことになる。このテストで75%の網羅性がないとリリースできないルールがあるのだ。
Javaの案件の場合、JUnitのテストケースを書くとなると、多くの場合は本体と同じくらいのコードを書くことになる。そのため、テスト仕様として要件定義されていなければ、あえてこのレベルのテストを実施することはない。替わりに、テストケースを書かなくてもいいような、他のツールなどを利用しテストを行うことが多い。このあたりのテストの手間をどう捉えるかで、テストの効率性は変わってくるかもしれない。
当然ながら、Force.comもJavaでもユニットテストだけでなく論理的な試験(結合試験)は必要になる。その手間は、削減されるものではない。テストは厳密かつ広範に行えれば行えるに越したことはない。1つ言えるのは、Force.comで開発する場合には、あらかじめこの網羅テストの工数をきちんと加味しておく必要があるということだ。
★
Javaでの開発に慣れていれば、Salesforce.comの上で開発、テストをする手間は大きくは変わらない。とはいえ、あらかじめ用意されているものが多い分だけ、クラウドでは確実に効率化というか開発工数の削減は可能になる。テストに関しては、場合によってはクラウドのほうがより慎重に行う必要も出てくるので、そのあたりは開発に入る前に十分に検討しておくべき、というのがいまのところのクラウド開発の印象ということになる。
まあ、どちらにしても、さらなるクラウド上での開発スキル蓄積に務めなきゃだなぁと思う次第。スキル積んでくれば、この印象もまた変わるのかもしれない。