Slide 1

Slide 1 text

AngularとBootstrapを使った 業務システムの設計と実装 2019.3.28

Slide 2

Slide 2 text

自己紹介 ふるてつ@tetsufuru19681 https://tetsufuru.hatenablog.com/ 福岡のエンジニア 客先常駐するタイプ COBOL→VB6.0→VB.net→ Spring BootなIT人生。 他 jQuery→AngularJS→Angular 夢は定年後に個人IT発明家になること (年金をもらいながら) ちょくちょく参加するコミュニティ 最近ハマっているもの

Slide 3

Slide 3 text

わたしが業務システムにもとめるもの 観点 もとめるもの もとめる 度合い 説明 ユーザ視点 デザイン性 △ 画面の複雑さ △ 遷移の複雑さ △ その他 メニュー ○ 業務システムにはほぼ必要 ユーザ権限でメニュー切替 ○ 製造視点 作りやすさ(早く作れること) ○ 担当PGによるばらつきがないコード ○ 安定したライブラリ・フレームワーク ○ サポート終了は大きなリスク。 Bootstrapは長く続きそう。

Slide 4

Slide 4 text

Bootstrapを使用した画面構成の案(1年前の構想) SignInComponent 通信に中にエラーが発生しました ErrMessageComponent InformationComponent SigniInService InformationService ErrMessageService DB Rest API Rest API AppComponent

Slide 5

Slide 5 text

Bootstrapを使用した画面構成の案(1年前の構想) PagenationComponent HeaderComponent FooterComponent Router xxSearchComponent AppComponent HeaderService Rest API DB xxSearchService Rest API

Slide 6

Slide 6 text

実現したかった内容 No 内容 詳細 できているか? 1 コンポーネントを分けた実装 Angular4くらいの時に1画面作ったことがあり、 その時はAppComponentに全部書きました! 〇 2 Bootstrapを使ってレスポンシブに 人がやっているのを見て、ちょっとかっこいいなと思い ○ 3 Angular Routingを使いたい 前回チャレンジした時よくわからなかったので ○ 4 多言語化 多言語化はしておきたい ○ 5 ページング 前回チャレンジしなかった。 (サーバで件数を絞る感じにしたい) × 途中 6 バリデーション 前回チャレンジしたがもう一度 ○ 7 セッション管理 Sessionとかtokenとかcsrfとか苦手なので × 8 ユーザの権限でメニュー管理 一般と管理者でメニューを分けたい × 9 ログインせずに直リンクを防ぐ Guardというのを使う? ×

Slide 7

Slide 7 text

Bootstrapについて 使い方 備考 今回 使用 1 ng-bootstrap Angularを使用してBootstrapを再構築 ○ 2 ngx-bootstrap ng-bootstrapと似たもの (開発プロジェクトが異なる、Boostrapのバージョンも) 3 素のBootstrapを使う npm install --save @ng-bootstrap/ng-bootstrap npm install --save bootstrap npm install --save jquery popper.js npm install --save @ng-bootstrap/ng-bootstrap 参考)Angular6でBootstrap4を使ってみる。 https://dev.classmethod.jp/client-side/angular6-bootstrap4/ Node.jsのコマンドでインストールできます。

Slide 8

Slide 8 text

コンポーネント作成時に使用したAngular CLIコマンド ng new MyApp npm install --save @ng-bootstrap/ng-bootstrap 参考)Angular公式リファレンスの CLI Command Reference https://angular.jp/cli ・Project作成 ng generate component ./component/common/header ng generate component ./component/common/footer ng generate component ./component/common/pagenation ng generate component ./component/pages/signIn ng generate module app-routing --flat --module=app ・Component追加 ・Router作成 ng generate service service/common/header ng generate service service/sign-in/signIn ・その他 Service追加

Slide 9

Slide 9 text

それぞれのソース Bootstrapの navbar 業務画面 Router

Slide 10

Slide 10 text

バリデーションについて 使い方 備考 今回 使用 1 テンプレート駆動フォーム 割と簡単にできる方 (htmlにrequiredなどを書く感じ) 2 リアクティブフォーム ちょっと難しい方。 こちらの方が柔軟にできるらしい。 ○ npm install --save @ng-bootstrap/ng-bootstrap

Slide 11

Slide 11 text

バリデーションについて リアクティブ・フォームにしました(ちょっと難しい方)

Slide 12

Slide 12 text

多言語化 使い方 備考 今回 使用 1 Angular純正 2 ngx-translate 勤務先で他の方が実装していて簡単そうだったから ○ npm install @ngx-translate/core --save npm install @ngx-translate/http-loader --save npm install --save @ng-bootstrap/ng-bootstrap 参考)リポジトリのReadMeを参考にしました。 https://github.com/ngx-translate/core Node.jsのコマンドでインストールできます。

Slide 13

Slide 13 text

多言語のソース AppModule SignInComponent

Slide 14

Slide 14 text

1年やってみて困ったこと・課題 npm install --save @ng-bootstrap/ng-bootstrap Node.jsのコマンドでインストールできます。 No 困ったこと・課題 対策など 1 Bootstrapを使いこなせない。 1~2か月ほどBootstrapの勉強が必要でした。 cssの書き方も勉強しました。 2 コンポーネントをどう分けていいか、やっぱり良くわからなくて手探りになった。 よく考えてみた。 3 前に勉強していた時とhttpのデータ取得のやり方が違っていた。最初勉強し た時はpromise。いまはObservableになってる。 もう1回勉強中。 4 http通信でデータを取得した後に .map とか .pipe がでてくると途端に分か らなくなる。(JavaのStreamっぽい感じの) 5 いざコードを書くと自分の思ったようにかけない(サービス内のメソッドなど) ・メソッド内でインスタンスを new したいけどできそうにない。 ・httpで取得した値を別のインスタンスに複製したい⇒.map?を使う 公式ドキュメントを見る 6 迷うことが多い 日本語化もどちらが良いか迷った。 バリデーションもどちらが良いか迷った。 Bootstrapも ネットで調べた。 あと人の話を聞いた。 7 やりだすとサーバも作りたくなり、Angularとは別のことまで手を出し始めて 時間が足りなくなってきた。

Slide 15

Slide 15 text

今後、知りたいこと No 知りたい内容 備考 1 Angular(SPA)でのセキュリティ対策はどうしたらいいですか? Session、csrf、tokenとか苦手で… どこかにベストプラクティス的なものが掲載 されていれば教えてください。 2 ページングのコンポーネントを作ろうとして なんだかめんどくさくなってきました。 ゴリゴリ書くしかないですか? 3 ユーザの権限でメニュー管理をしたい。 これもDBから権限を取得して書くしかないですか? Bootstrapのnavbarを書くのがめんどくさくなって… 4 ログインした後に、ログインユーザの情報(氏名、ユーザID、管理者 権限の有無)などをどこかに保持したいのですが、 適当な保持場所はどこですか? (ユーザーが故意に変更できない場所が良いのですが) どこかにベストプラクティス的なものが掲載 されていれば教えてください。 ↓sessionService的なクラスを作るので しょうか? https://qiita.com/Yamamoto0525/items/efc0e5 617c7427fea86a

Slide 16

Slide 16 text

まとめ No 結果 備考 1 1年たった割にはやりたかったことができていません。 困ったこと・課題がいっぱいあったから… 2 Bootstrapを使うとデザイン性は高くはないが、 楽に画面を作ることができる。 ※cssは知ってないといけません。 しかし他の人がやっているAngular Materialはきれいだし使いやすそうだった。 3 Bootstrapを使うと業務画面の開発者をロジックに大分集中させら れると思います。 (HtmlのデザインはBootstrapのclassを指定するだけ) 4 複雑な画面、画面遷移は設計時に避けた方が良いかと。 画面遷移はメニュー(navbar)中心にしたほうが後で苦労しないと 思います。 5 業務系はバリデーションはリアクティブフォームが良いかと思います。 6 日本語しか使わなくとも、多言語化はしておいて損はないと思いま す。

Slide 17

Slide 17 text

以上、ありがとうございました。