Java開発フレームワークはなぜ必要とされているのか?

#開発手法
公開日:2024年03月27日(水)

序章

ソフトウェア開発において、開発フレームワークは、開発効率化、品質向上、保守性の向上を実現するための重要なツールです。本記事では、開発フレームワークの役割、ノーコード・ローコードプラットフォームとの関係、および複雑なシステム開発における開発フレームワークとプロコード開発の必要性について詳しく解説いたします。

Java開発フレームワークとは

フレームワークは「枠組み」「骨組み」を意味する言葉ですが、開発フレームワークはその名の通り、開発を行う上での枠組み・骨組みと言えます。
開発フレームワークは、共通の機能(例えば認証機能やロギング機能、画面遷移制御、トランザクション制御など)、アーキテクチャパターン(枠組み、開発する上でのプログラムの構成パターンなど)、開発ツール(SDKと呼ばれる開発のためのツール群)を提供します。

そのフレームワークの上で開発を進めることにより、開発効率化、品質向上、保守性の向上を得られます。

開発フレームワークには、さまざまな種類があり、それぞれに独自の機能と用途があります。
また、開発に利用するプログラミング言語ごとに複数の開発フレームワークと呼ばれるものが存在します。たとえば、JavaベースのWebシステム/Webサービス開発向けのフレームワークでは次のようなものが有名です。

【JavaベースのWeb開発フレームワークの例】

Spring Boot/Spring framework

軽量で生産性の高いフレームワークで、エンタープライズアプリケーションの開発に使用されます。Javaベースの開発フレームワークの中で最も利用されているものになります。

Spring framework自体は多機能で複雑ですが、それをSpring Bootを用いることにより簡単に利用できるようになっています。現在はSpring Bootベースで開発することが多いです。

Java EE/Jakarta EE

Java Enterprise Editionの仕様に基づいた、エンタープライズアプリケーション開発用フレームワークです。Java Enterprise EditionはServlet、JSP、EJB、JTA、JMSといった複数の標準仕様の集合体で、
エンタープライズクラスのシステムを構築する際に必要な機能を定義し、それらをまとめた仕様です。

このJava Enterprise Editionの仕様を実装する開発フレームワークが有償、無償含め複数のベンダ、OSSコミュニティから提供されています。Java EEは、最近Oracle社からOSS財団のEclipse Foundationに移管され、その名称がJakarta EEと変更になりました。

Play Framework

Webアプリケーション開発用のフルスタックフレームワークで、Scala言語で記述されています。Scala言語はJava VM(Javaの実行環境)上で動作可能で、関数型プログラミングが可能なJavaの代替言語(AltJava)です。Scala言語ベースのフレームワークでは一番有名なものです。

Micronaut

非常に軽量で高速なJavaフレームワークで、マイクロサービスアーキテクチャのシステムを構築する際に最適です。

マイクロサービスアーキテクチャでは、システムを複数の小さなサブシステム(サービス)に分解します。それらのサブシステム(サービス)を強制的に疎結合にすることにより、システム全体の複雑性の軽減を目指すといった考え方のアーキテクチャパターンです。

マイクロサービスアーキテクチャはシステムの論理的な複雑性(業務ロジックの複雑性)をシンプルにできる可能性がある反面、インフラの複雑性が増す可能性があります。そのインフラ面の複雑性を軽減するのにもMicronautは役立ちます。

事業企画者が押さえておくべき
ローコード開発のメリットと成功事例

また、特定の用途に特化したフレームワークもあります。たとえば、次のものがあります。

【Javaベースの特定の目的に特化した開発フレームワークの例】

JUnit

Javaアプリケーションのユニットテスト(単体テスト)用のフレームワークです。単体テストの内容をコードで記述することにより、単体テスト実行を自動化し、リグレッションテスト(システムリリースの都度実行する、同様の内容の繰り返しのテスト)を効率化します。

Hibernate

Javaアプリケーションにおいてオブジェクト/リレーショナルマッピング(ORM)を提供するフレームワークです。

Hibernateを用いれば、SQLのコーディングなど工数のかかる開発をショートカットすることが可能です。

このように、さまざまなタイプのJavaフレームワークがあり、それぞれに独自の強みと用途があります。一般的に開発フレームワークを使用することにより、以下の恩恵を得られるといわれています。

<開発効率の向上>
フレームワークは、再利用可能なコンポーネント、一般的なタスクや機能の実装を簡素化するテンプレートやライブラリを提供することで、開発コスト、時間を短縮できます。

<コード品質・保守性の向上>
フレームワークは、一貫したコードスタイルとパターンを強制することで、コードの品質と保守性を向上させます。開発チーム全体で共通のアーキテクチャとベストプラクティスを確立するのに役立ちます。

開発フレームワークの枠組み・パターンに沿ってコーディングすれば、これらの利点を得ることができます。

また開発フレームワークの多くはOSSで提供されていますので、Javaベースで開発する上では使わない理由はありません。ただ注意点として、開発フレームワークの枠組み・パターンから外れたことを実現しようとすると、それは不可能であったり、実装難易度が高くなったりするケースもあります。

ノーコード・ローコードプラットフォームも開発フレームワークの一種

ノーコード・ローコードプラットフォームは、コーディングなしでアプリケーションを作成できるプラットフォームですが、これらもある意味、開発フレームワークと言えます。ノーコード・ローコードプラットフォームはすべて開発効率の向上、コード品質・保守性の向上を目指したものです。

違いは主に次のような観点です。

<誰にとって使いやすい開発フレームワークなのか>
単純な区分けだと、ノーコード・ローコードプラットフォームはコーディングにあまり詳しくない方(シチズンディベロッパー)向け、開発フレームワークはプロの開発者向けといった区分けが思い浮かびます。

最近は開発フレームワークを使ったコーディングベースの開発を、ノーコード・ローコードと対比してプロコードと言う場合もあります。

ノーコード・ローコードプラットフォームでは、開発用画面(GUI)からドラッグ&ドロップでパーツ(画面の部品であったり、特定の準備された業務ロジック、条件分岐などのプログラム構成要素など)を組み合わせて作っていきます。

シチズンディベロッパーの方は開発用画面(GUI)から開発ができるようになったことで、コーディングせずともアプリケーションを作れ、大変開発効率が向上したように感じると思います。

ただ、プロの開発者からみると、それは必ずしも開発効率に寄与するものとはならないこともあります。

想像してみてください。
日本語の文章をワードで作成する際に、キーボードを利用した文章の入力ができず、あらかじめ用意された単語や文言をドラッグ&ドロップでつなげながら文章を作る作業を・・。それはとても効率が悪いですし、書きたい単語や文言が準備されていないかもしれません。

プロの開発者にとってはコーディングすることが一番効率の良いやり方で、望むものを作れる手段となります。

では、プロの開発者にとってノーコード・ローコードプラットフォームは必要ないものなのでしょうか。プロの開発者といってもその領域は細分化されています。

例えば次のような職種が存在します。

【開発者の職種の例】

Webデザイナー

Webデザイナーは、ウェブサイトやウェブアプリケーションのユーザーインターフェイス(UI)を作成する専門家です。
特定のノーコード・ローコードツールに制約されず、自分たちの使い慣れたツール(FigmaやAdobe XDなど)を利用しUIをデザインします。htmlやcss、JavaScriptを駆使し、使い勝手の良い、独創性のあるUIを作成し、そのディテールにこだわりたいと思っています。

ただし、業務ロジックやデータベースなどの開発は専門外で、それらは別の専門家がやってくれるものと信じています。

バックエンドエンジニア(サーバサイドエンジニア)

バックエンドエンジニアは、アプリケーションのサーバ側で動作するコンポーネントを設計、開発、保守するソフトウェアエンジニアです。

Javaなどのプログラミング言語を駆使し、複雑な業務ロジック、データ処理を実装します。やはりノーコード・ローコードツールに制約されず、自分たちの使い慣れたツール(EclipseやIntelliJなどの統合開発環境)でコーディングしたいと思っています。またそれらのツールを介してGitHub CopilotなどAIの力も借りて開発効率、品質を向上させることも可能です。

ただし、彼らの興味の中心は複雑なビジネスロジック、アルゴリズム、パフォーマンスチューニング、メンテナンス性です。画面のデザインやコンポーネントについてはそれほど興味がなく、誰かが作ってくれればよいと思っています。

フロントエンドエンジニア

フロントエンドエンジニアは、アプリケーションのユーザーが直接対話する部分(UI)の設計、開発、保守を担当するソフトウェアエンジニアです。

React、Vue.jsなど最先端のフロントエンドのUIフレームワークを活用し、インタラクティブで見栄えや操作性の良いUIを実装します。もちろんそこでノーコード・ローコードツールの制約により、彼らの使いたいReactやVue.jsが使えないといったことは論外と思っています。

ただし、サーバサイドの業務ロジックはWeb APIが提供されれば、その部分が何で実装されていてもよいと思っており、それほど興味はありません。

ベストはこれらのそれぞれの分野の専門家が集結してシステム開発が行われることです。しかし、コスト等の問題でそのような理想的なプロジェクトはなかなか組成されません。

もし、組成されたメンバーの担当外の領域でノーコード・ローコードが使えるのであれば、それはかなり魅力的な選択肢となります。プロの開発者においても専門分野以外の開発にはノーコード・ローコードを利用することにより、メリットを享受できると考えています。

<自由度の範囲の違い>
ノーコード、ローコード、プロコード(開発フレームワーク)は、開発者の自由度という点で大きく異なります。ノーコード、ローコード含めた開発フレームワークは決まった枠組み・パターンを提供しそれを強制します。

その枠組み・パターンから外れたことを実現しようとすると、それは不可能であったり、実装難易度が高くなったりします。

【手法毎の自由度の違い】

  • ノーコード
    必要最低限の自由度が提供されます。開発者は通常、あらかじめ定義されたコンポーネントとテンプレートを使用してアプリケーションを作成します。コードの記述は、ほとんど必要ありません。そのため、開発者の自由度は最も制限されます。
  • ローコード
    中程度の自由度が提供されます。ローコードプラットフォームは、ノーコードプラットフォームよりも多くの自由度を提供します。開発者は、視覚的なモデリングツールや一部コーディングによるカスタマイズで、アプリケーションのロジックと機能を定義できます。
    ただし、ローコードプラットフォームも依然として、特定の制限や制約があることが多いです。
  • プロコード
    最高の自由度が提供されます。プロコード開発では、開発者はすべてのコードを手作業で記述します。これにより、開発者に完全な自由度が与えられ、あらゆるタイプのアプリケーションを作成できます。
    ただし、プロコード開発には、高い技術スキルが必要で、そのスキルレベルが完成するコードの品質レベルに直結します。全体として、最終的により洗練されたシステムになる可能性がありますが、その逆もありえます。

ノーコード・ローコードではドラッグ&ドロップ操作や視覚的なモデリングを用いることで、プログラミング初心者でも比較的簡単にシステム開発が行えます。ただし、複雑なシステムを作ろうとする場合はプロコードでなければ要件そのものが実現できないこともあります。

業務的に複雑なロジックはローコード・ノーコードプラットフォームのビジュアルモデリングツールで作成することが可能かもしれません。しかし、マルチスレッド化やデータベースクエリーのチューニングなどの高度なパフォーマンスチューニング、複雑なトランザクション制御、よりきめ細やかなセキュリティ制御や例外処理など、システム品質を向上させるような対応をすることが難しいかもしれません。

よく利用するOSSの汎用ライブラリは、ローコード・ノーコードツールでは利用が制約されるかもしれません。多人数の開発者で開発をする場合、ローコード・ノーコードツールは、並行開発が苦手かもしれません。

ノーコード、ローコードだけでなくプロコードも場面や状況により(システムの特性、また開発者の特性に合わせて)使い分ければ、開発効率向上とシステムの満足度の両方を向上させられます。

特に、複雑なシステムを作る場合や、将来的にそのようなシステムに拡張する場合では、ノーコード、ローコード、プロコードを適切に使い分けができる開発フレームワーク(ノーコード・ローコードプラットフォーム)を採用することが重要です。

ノーコード・ローコードとプロコードで開発生産性の違いはあるのか

ノーコードでは便利で再利用可能なコンポーネントが提供されており、それらを活用することにより、プロコードよりも生産性が向上したように見えるかもしれません。

プロコードにおいても、共通で使うようなコンポーネントのコードを共通ロジックとして管理することにより、ローコード開発で提供されるような再利用コンポーネントとして繰り返しの利用が可能です。

この再利用コンポーネントが整備されている状況下においては、プロコード開発はノーコード・ローコードと同等の生産性となります。ただ、前提はあくまでこれら再利用コンポーネントが整備されている状況下の場合です。

これら再利用コンポーネントがない状況下においては、ノーコード・ローコードプラットフォームが提供する再利用コンポーネントは大変魅力的な存在となります。

ある程度複雑なシステムを構築する場合、どのようなシステムにするべきかの検討(要件定義、機能の設計、運用の設計など)、実際の開発作業、テスト(単体テスト~総合テスト)と、開発作業以外にもやらなければならないことがたくさんあります。

これらを含めたトータルの開発生産性の向上を考える場合は、単にノーコード・ローコードプラットフォームを適用するだけでは生産性の向上は難しく(寄与度が小さく)、開発プロジェクトの進め方(ウォーターフォール型、アジャイル型)、機能の取捨選択(機能自体の削除、コストをかける機能にメリハリをつける)なども十分に検討する必要があります。

また、前述しました通り、開発を行うメンバーのスキルのレベル、専門性によるところも大きな要素です。

まとめ

開発フレームワークはシステム開発において重要な要素です。ノーコード・ローコードプラットフォームも開発フレームワークの一種です。プロコード開発者がノーコード・ローコードを使うと逆に開発効率を落としてしまう可能性もあります。

ローコード開発プラットフォームを選択する際、「どこまでプロコードに近いことができるのか?」というポイントが重要な選択基準になると思っています。特に複雑なシステムを構築する場合、もしくは将来的に複雑なシステムに成長させることを考えている場合は、ますます重要な選択基準となります。

iPLAssはJavaベースのローコードプラットフォームですが、エンタープライズクラスのシステムを効率的に開発するフレームワークも提供しています。従って、プロコード開発と遜色ないレベルの開発、カスタマイズが可能です。

システム開発時の開発プラットフォーム、フレームワークの選択肢の一つとして考えていただければ幸いです。

当サイトでは、ノーコード開発ツールやローコード開発プラットフォームを利用し、業務システムの開発を効率化したいエンジニアの方や、会員サイト構築などの新規事業の目的を達成したい方へ、ダウンロード資料をご用意しております。ぜひ資料をご覧いただき、ご活用ください。