ローコード/ノーコードとIaC、どちらを優先するべきか
目次
はじめに
AWS Step Functions等を用いたローコード/ノーコードなアプリケーション作成や、TerraformやAWS CDK等を用いたIaCは流行りです。
しかし、コードを用いない、または最小限に抑えるローコード/ノーコードな開発と、コードで環境を定義するIaCは相反するもので、どちらにも利点があります。
ローコード / ノーコード
ローコードやノーコードとは、コードの記述を最小限に抑える、または全く用いずにアプリを構築する開発手法です。AWS Step FunctionsやGoogle AppSheetを用いた開発などがそうだといえます。
UnrealEngineのBluePrintや子供にターゲットを据えたScratchなどは、文字でプログラムを書くことはないですが、性質からしてノーコードに含められるかというと微妙です。やっていることは普通のプログラミングであるためです。
特にBluePrintでは、その根底にガチガチなオブジェクト指向があるため、複雑なロジックは普通のプログラミングスキルが無いと大変なことになります。
つまり、普通のプログラミングをノーコード/ローコード化したものは、処理の流れをグラフを使ってグラフィカルに表現します。各ノードには、その開発ツールで用意された操作(例えばDBから何かを取得する、など)を用いて流れを組むだけです。
また、あらかじめアプリの基礎部分が組まれていて、後は設定を組み合わせるだけのものも数多くあります。
Webサイトの場合は、見た目そのままに作れる、つまりWYSIWYGエディターなどが代表的です。
ローコード開発の場合、細かい制御や用意されていない操作のために、コードを書く必要がある場合があります。AWS Step Functionsを用いた開発で、一部にAWS Lambdaを用いるようなものがその例です。
メリット
ノーコード / ローコードな開発のメリットは
- プログラミングが不要
- 少ないステップで実用的なアプリケーションが作成できる
- 視覚的にわかりやすい
が挙げられます。処理を記述するタイプのものであれば、処理の流れがグラフで表現されるため、視覚的にわかりやすいです。フローチャートを作ればそのままそれが動くイメージですね。
デメリット
ノーコード / ローコードな開発のデメリットは
- ノーコードの場合、作れるものが限定される
- Gitなどのバージョン管理ツールと相性が悪い
- ロジックをまとめるのが難しい
が挙げられます。ローコードであれば用意されていないロジックも、普通にコードを書くことでなんとかできる場合が多くあります。
しかし、2点目のバージョン管理ツールとの相性が悪いという点が致命的です。Gitでのバージョン管理ができないということは、アプリの管理場所が散乱する、バージョンの比較ができない、ブランチを使って並列での開発ができない、など、開発における多くのデメリットが生まれます。
そのため、少人数での開発、エンジニア不在の開発などで向いています。
IaC (Infrastructure as Code)
IaC (Infrastructure as Code)は、アプリの環境をコードで管理するという方法です。AWS CDKやAWS CloudFormationを用いたAWSの環境の定義、Terraformを用いた環境の定義などが挙げられます。
つまり、今まで管理画面などから手動で行ってきたインフラの定義を、コードで管理するようにするということです。
メリット
IaCのメリットは、
コマンド1つ、ないし数個で、誰もが同じ環境を構築できる
同様に、環境の削除もできる
Gitなどのバージョン管理ツールで管理できる
CI/CDと相性が良い
が挙げられます。
コマンド1つで誰もが同じ環境を構築できるのは革命的です。今までは開発環境を構築するため、GUI上でポチポチと長ったらしい操作が必要でした。当然ミスも起こりえます。しかし、そのような作業を不要にし、簡単に環境を立ち上げられるようになりました。環境の削除も簡単にいつでも行なえます。
3点目も革命的です。いつどのような変更がどのような理由で行われたか、以前とどのように構成が異なるのかを、バージョン管理ツールを用いて簡単に知ることができます。GitHubなどを使用できるため、その変更のレビューも確実に行えます。
また、それと関連してCI/CDとの相性も良いです。特定のブランチに変更が加わったら自動でデプロイされ、コードに書かれている通りの環境が”自動で”立ち上がる、または更新されます。プロダクション環境もステージング環境の構築も全て自動です。
デメリット
IaCのデメリットは、
エンジニアでないと構成を変えづらい
という程度です。もちろん環境構築後にGUIに反映されたものを見るのは誰でもできるのですが、環境を変更するにはコードを触る必要があります。
ローコード / ノーコードとIaC
コードを極限まで用いないローコード / ノーコード、コードですべてを管理するIaCの2つは相反するものであることがわかりました。ではどちらを選べばよいのでしょうか。
ローコード/ノーコード | IaC | |
---|---|---|
大人数の開発 | X | O |
開発環境構築の楽さ | X | O |
手軽さ | O | X |
ロジックのわかりやすさ | O | – |
過去の構成との比較しやすさ | X | O |
学習コスト | O | X |
つまり、エンジニアが普通に開発するなら、無理にローコード / ノーコードの構成で構築するよりも、普通にコードで管理した方が楽と思われます。
だからといってノーコードを使ってはならないというわけではありません。明らかに使いたいサービスと相性が良い、1人ですぐに作れる、そもそもバージョン管理の必要性が低いなど、メリットが大きいなら使用していくべきです。
まとめ
ローコード / ノーコードとIaCは相反するものです。どちらか一方に絞るのではなく、チームの構成や作りたい物に応じてどちらを採用するかを都度選択するべきです。
