🦙

結局、ローコードとは

2021/05/09に公開

TL;DR

Django + Nuxt.js も立派なローコード開発環境だと思う。

ローコードとは

定義的なことは色々なサイトを見ていただければ良いとして、結局ノーコードとか、ローコードとかというのは相対的な話ではないかと思います。

例えば、個人的に素晴らしいと思っている(最近使っていませんが、さらに進化してますね)
Glide App
は、十分にノーコードだと思いますが、ちょっとデータ構造が複雑になってくると、データ間の結合情報をスプレッドシートに記載する必要が出てきて、プログラミングの素養なしに作れるかというと微妙かと思います。

そして、これも個人の感想ですが、最高のローコード開発ツールは MS Access だと思っていますが、ACCESSの場合、コードを書かなくてもかなりのアプリが作れ、さらにコードを書けばまあ、なんでもできるわけです(もちろん、端末にACCESSをインストールしなければならないというのが、厳しい制限になることが多いわけですが)。

で、ここに、なんとなくビジュアル要素が含まれているように感じるのですが、今回、Django + Nuxt.js の開発をやってみて(やってる途中ですが)、ビジュアル要素なしでもローコードと言えるのでは、と思って、今これを書いてます。

Django + Nuxt.js の開発

Django(今回は Django REST Framework ですが)をほぼ初めて使ってみましたが、考えることはほとんどModel 定義のみではないか、それで画面生成まで手順に従って進めていくだけ、というのにちょっと驚きました。

また、Nuxt.js についても、今回、Repository パターンというものを意識して作ってみましたが(軌道に乗るまでは泣きそうでしたが)、こちらも決まった手順でRepositoryを追加していくことでAPI連携部分ができ、コンポーネントでそれを使用するところまで流れ作業になりました。

具体的には、下記のようなメモを作っておいて、これを見ながら、コンポーネントを追加していく、という手順です。

## CouncilMember
### API
poli-link-api/polilink_api/models.py

ここでマイグレーション
docker exec -it poli-link-api /bin/bash
以下code#
python manage.py showmigrations
python manage.py makemigrations
python manage.py migrate

poli-link-api/polilink_api/admin.py
これで、Django 管理サイトに追加される
poli-link-api/polilink_api/serializer.py
poli-link-api/polilink_api/views.py
poli-link-api/polilink_api/urls.py

### CouncilMemberList
poli-link-web/poli-link/components/council/CouncilMemberList.vue
のために
poli-link-web/poli-link/types/index.ts
poli-link-web/poli-link/api/xxxRepository.ts
poli-link-web/poli-link/api/index.ts
poli-link-web/poli-link/api/createRepository.ts
poli-link-web/poli-link/compositions/useXxx.ts
poli-link-web/poli-link/compositions/index.ts

最初にmodels.pyに新しいデータ構成を追加します。
https://github.com/JQinglong/poli-link/commit/c896ef4ada09bfe36e515a514fef0920bfd8ecb5#diff-736567d8322d3c55f0f17175bd4079396cefd5d3b7c54afe7c530e06f8e797d9
ここは頭を使いますが、これは、ツールがEXCELであれ、DBの管理ツールであれ、
項目名を決めて、項目長を決めて、制約を決めて・・・
などは同じですから、それをテキストファイルとして書くことはコーディングのうちに入らないのではないかと思います。

確かに、どういう型があるか、などは調べないといけないので、そこは例えばプルダウンで選べたら良いかな、そのためのシートを作った方が良いかな、と思いましたが、ただ、フルスペックで対応できるシートを作ろうと思ったら複雑になるでしょう。
それよりは、テキストのコピペで作れる、というのは逆にお手軽で良いようにも思えます。

その後の、serializer.py、views.py、urls.py もコピーして名前を変えていく、というレベルですね。
https://github.com/JQinglong/poli-link/commit/c896ef4ada09bfe36e515a514fef0920bfd8ecb5
この辺は、本当に機械作業的なので、何か改善策はありそうですが、言いたいことは、コーディングのうちにならないのでは、ということです。

Nuxt側も同様です。
まず、types/index.ts にデータ型を定義します。
これは既に models.py で定義した内容に基づいて書くだけですね。
そしてリポジトリを作るのも、既存のファイルをコピーして名前変更、それを index と、 createRepository に追加、
リポジトリ経由でCRUDを行ってStateとして提供するuseファイルもコピペして名前変更、index に追加、
コンポーネントもある程度パタンを作っておけば、コピペして、呼び出すuseの変更等を行えばそれなりになるでしょう。

ビジュアル的な何かはなく、ひたすらコードを書いているのではありますが、ロジック的な何かを書くことはほとんどなく、ある意味設定をテキストで書いている、という感覚でした。

理想のローコードとは

上のように書きましたが、ある程度コードが整った後の話であるのは事実です。
そして、最初のとっかかりが重要だというのも確かだと思います。
なので、例えば、ビジュアルなインストーラで、テンプレートまで作ってしまえると良いかなと思います。
そして、この手のツールの歯痒いところは、用意された道からは外れることができない、あるいは極度に難度が上がることかと思います。
いや、コード書いた方が早いよ、みたいな。

そいう意味でも、Django のような形がもっと洗練されていくといいなと。超いまさらですが!

Discussion