Murga

個人的に言いたいコト・主張・気持ち。

少なくとも社内業務システムはデザインやフロントエンドを頑張らなくて良いと思う

業務システムのほとんどって、どういうデータにせよ「一覧表示・検索」「登録」「参照・編集」「削除」が行えれば良くて、そのための入力フォームと入力チェック機能があれば十分だ。

今時 Windows ネイティブなアプリを作るのも汎用性低いからブラウザベースのアプリになるし、最近だと現場からのデータ入力はスマホやタブレットで行いたかったりする。そうするとフロントエンドはレスポンシブデザインでフォームを用意しておいて、様々なデバイスで同一のシステム・画面が利用できるようにしたい。

このぐらいの話であれば、Rails の Scaffold で生成できる HTML フォームのレベルで良いはずだ。変に画面デザインを凝る必要もなくて、入れたいデータが入れられればよく、そんなのは Bootstrap で組めば画一的なデザインにできる。複雑なギミックやアニメーションも業務システムなら要らないから、素の Bootstrap で十分。

スマホからカメラが使いたいとか言っても、input type="file" を配置すれば画像の撮影とアップロードは実現できるし、通知機能も ServiceWorker がかなり実用段階に近付いているから、Web アプリのページを見せれば大体の業務システムは事足りると思う。リモートプッシュ通知とか QR コード読み取りとか、ちょっと凝ったことを1アプリの中でやりたくなったとしても、Cordova なんかでネイティブアプリ化してしまえばサクッと実現できる。Cordova を使用しない環境向けにはブラウザ用のフォールバックを用意すれば、フロントエンドのコードは様々なデバイスに対して使い回せる。

Windows や Mac のネイティブアプリとしてフロントエンドをビルドしたい需要はそんなにないかもしれないが、それも Electron で実現できる。

こうした開発基盤は一回用意しておけば、ネイティブ部分に対しては Cordova や Electron が緩衝材となり、ライブラリ側でうまいことバージョンアップ対応なんかもしてくれる。運用保守も楽だ。

フロントエンドは Angular CLI で立ち上げるのが良いと思う。React や Vue と違ってフルスタックで用意されているところが強みだ。殆どは Component と Service を作って組み合わせていけばよく、TypeScript によって Java チックに書けることから、JavaScript に苦手意識を持つレガシーな Java エンジニアでも大丈夫だろう。

サーバサイド、データの永続化については、RESTful な API サーバを立ち上げつつ、リソースと DB のエンティティとをマッピングしてくれるライブラリもいくらでもあるので、自分で実装するところはだいぶ少なく出来ると思う。

コレを各プラットフォームに合わせてスクラッチ開発してしまうと、各プラットフォーム向けの開発言語を覚え直すコストもかかるし、それぞれのプラットフォームに対してあまり学のないニホンノエスイーたちが思想のないオレオレフレームワークを構築してスパゲッティが出来上がる。

どうせ Web アプリを作る以上、HTML でフォームを作って、JavaScript でちょっとした動的な処理や入力チェックを書いて、CSS でレイアウト調整、というところは書くことになるワケで、コレにさらに Swift だ Java だと開発言語を増やしていくくらいなら、JavaScript にもう少し力を入れて、TypeScript を覚えて Angular を使えば良いし、Bootstrap をベースにすれば自分で CSS を書くことはほとんどなくなる。アニメーションもギミックも業務アプリには要らないのだから、シンプルに、似たような画面構成で作っていけば、本来ニーズは満たせるはずだ。

社内業務システムに関しては、そんなワケで、

  • Bootstrap みたいな有名な CSS フレームワークで最低限のレイアウトだけして、
  • Angular みたいなフルスタックなフロントエンドフレームワークに頼ってどんなシステムも同じように実装して、
  • プラットフォーム別対応したい時は Cordova や Electron を利用すれば1コードでマルチプラットフォームに対応できるからサクッと取り入れて、
  • サーバサイドも RESTful API と DB とのマッピングを自動生成してくれるライブラリに頼れば、

結局やりたいところである「入力データの規則化 (入力チェック)」「CRUD 操作」はさっさとできるはずだ。

業務システムなんだ、変に凝るところをなくそう。