システムを構築する上で、決定しなければならない要件がたくさんあります。
業務要件をはじめ、非機能要件(可用性、性能・拡張性、運用・保守性、移行性、セキュリティ、システム環境・エコロジー)など、短い時間の中で、ある程度の将来を予測して、決断しなければらないです。
そういう見通しが不確実なプロジェクトでは、構築するアプリケーションの構築が非常に重要になってきます。
従来のウォーターフォール型のような要件をしっかりと決定し、実装、運用テストという流れでは、仕様齟齬などの出戻りのコストが大きいのです。
そういったリスクを低減するためにも、最近の自社開発では、アジャイル開発が多く取り入れられていると思います。
主要機能を、プロトタイプで作成し、これをベースにユーザーと確認し、機能を固めつつ、関連する機能の実装を進めていくという流れです。
アジャイル開発のメリットは沢山ありますが、不確実な業務に関するシステム開発を、随時、エンドユーザーと調整しながら構築していける事だと思っています。
実際に、弊社の自社アプリケーションでも、新しい業務をスタートしてみないとわからない要件など多々ありました。
そういう状況でも、ある程度の仮説で、システムを構築する必要性がありました。
そういう状況で、強力にパフォーマンスを上げる必要があります。
このような時には、フレームワークを取り入れての開発が、非常に短期間で実現します。
WEBアプリケーション、ネイティブアプリケーションの違いがあっても、今やフレームワークを取り入れて開発することは必須といっても良いでしょう。
私の勤務する会社のシステムでも、受注管理、商品管理、在庫管理、請求管理、顧客管理、その他モール連携などの一般的なシステムを、2週間でリリースできているのも、強力なフレームワークを利用した構築のメリットを存分に活用した成果だと思っています。
フレームワークは最初に覚える事は多くあります。
また、こういった制限を嫌うことがら、フルスクラッチ開発を選択する場合もあると思います。
しかしながら、フレームワークの機能を隅々まで理解し、自社の機能にどのように取り入れるかということがわかれば、
本当に開発コストを低減することができるのです。
・MVC(モデル、ビュー、コントローラー)による実装の効率化
・ログイン機能
・データベース関連の検索、更新、登録、削除機能
・プレゼンテーション機能
など上げればたくさんあります。
また、標準機能にない場合には、プラグインによる拡張機能があります。
たとえば、
・エクセルファイルの生成
・PDFファイルの生成
・BootstrapによるUI拡張
などたくさんあります。
こういった、先人たちの地と涙の結晶により提供されている機能を有難く利用させてもらうことで、
アプリケーションの生産性を飛躍的に上げる事が可能となるのです。
もちろん、フレームワークやプラグインでは対応できない部分は、インラインでスクラッチ開発ということも必要となるでしょう。
そういった状況も想定し、フレームワークの仕組みを細部まで理解し、必要に応じて自分に手で修正、拡張ができる程度のフレームワークの理解は必要です。
時間に追われている中で、フレームワークの理解は、最初は時間もかかりますし、覚える事多く、そういった事から、安易にフルスクラッチ開発を選択してしまう気持ちもわかります。
しかしながら、開発費が12人月のアプリケーションが、1人月で開発できるという強烈なインパクトを1度でも経験してしまうと、フレームワークを活用しないことなど考えられないのです。
最初は、1人月でアプリケーションが開発できるとか、1,000万円の開発費が1/10程度になると説明しても、経営者層には信じてもらえないかもしれません。
他社でも見積りより、1/10の開発費なんて、見積間違いだと笑われるかもしれません。
でも、並みのプログラマーが10人で開発するよりも、力量のあるプログラマーが1人で開発する方が早いのです。
これは、アプリケーションの特性や規模にもよるところですが、力量のあるプログラマーが自社に1人いるだけで、その会社の経営は本当に劇的に変化していくものと思っています。
また、そういった認識を持っている経営者も増えていることは実感しています。
もちろん、開発資金に余裕があり、1/10程度になった開発費に魅力を感じない経営者もいるかもしれません。
そういった例外を除けば、必ず話だけでも聞いてくれると思いますので、その際に、デモアプリケーションを見せて説明すると効果的です。
フレームワークを利用したデモアプリケーションであれば、数時間で出来ますので、積極的にデモアプリケーションの活用も取り入れましょう。
フレームワークを使っていない、またはあまり積極的に利用してこなかったという場合には、
ぜひ、フレームワークを利用した開発を取り入れて、アプリケーションの生産性を飛躍的に向上していただければと思います。