質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

3177閲覧

FWの選定とAngularのバージョンアップのスピードについて

yoppy0066

総合スコア293

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/02/13 07:42

編集2019/02/13 16:03

Angularを少し調べたところ、半年に1度メジャーバージョンのリリースを行い、サポート期間が18ヶ月という記述がありました。使い捨てのシステムならともかく使い続けるシステムの場合、定期的にバージョンアップの対応を行うしかないのでしょうか?

また、React、Vueについては詳しくないのですがこれらのフレームワークも同様のスタンスでバージョンアップが行われているのでしょうか?

フレームワークの選定に悩んでいます

※追記
編集依頼というかコメントがありましたので追記させていただきます。
漠然と質問させて頂いたつもりはなかったのですが申し訳ございません。

今回質問させて頂いた経緯としては、私は基本的に受託開発を行っているのですが作っておしまいというシステムではなくその後も継続的にメンテをしていくことを想定しています。

例えばangular1で開発したシステムをangular2にリプレースするとなると規模によってはかなりの時間とお金がかかると思います。質問させて頂いた例ですと、Angularを採用した場合、かなりのペースでバージョンアップが行われ、サポート対象外となるのであれば基本的にはAngularのバージョンアップ対応は金銭的にも見据える必要があると思いました。

通常の保守+機能追加+1年半周期でリプレース開発費となるとかなりのお金になると思います(納得していただけるお客さんだけではないと思います)

そう考えるとこのような受託開発でAngularを使うのは正しいのかという疑問が生まれ質問させていただきました。また、他のFWを使ったとしても同様の問題が発生するのかという疑問の元質問させていただきました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi-sun

2019/02/14 05:48

下記の意味のマイナス評価です。 > Angularを使うのは正しいのか そもそも技術というのは使わないで済むなら使わないのが一番です。 Angularに限らずJSフレームワーク全般も同様です。 どうして苦労して時間掛けてJSフレームワークの思想やルールを習得する必要あるんですか? 使いもしないものを勉強しても時間の無駄ではないか?と思わなかったのですか? 午前中穴掘って、午後に穴を埋める刑罰と何か違うんですか? だから何故使うのか、使わざるをえないのかが重要です。 いや普通に疑問に思うはずですよ。 jQueryではなく、JSフレームワークを採用すべき理由はなんだろう?って…… Q&Aサイトで聞けば良いやじゃありません。 自分で考える頭がひっついてない奴は聞いても無駄です。 疑問に気付く努力、自問自答する努力をしない奴は回答しても無駄です。 で?自問自答はしましたか? こっちは言い訳が聞きたいんじゃないんですよ。 > React、Vueについては詳しくないのですが そういう立場なら普通調べますよね? GitHubで公開されてリポジトリを覗いて、タグ打ちの間隔をちら見するだけの作業ですよ。 なので普通のエンジニアである私から見れば「あ〜きになるわ〜、これじゃ採用できないわ〜」と言ってるだけの「でもでもだってちゃん」に映ります。
guest

回答1

0

ベストアンサー

JSフレームワークに至っては一番乗りのAngularJSの1系登場が2012年。
Googleのフレームワークだから安心かと思っていたら2015年には既に下火という有様です。

後続のReact.jsはメジャーバージョンが1を越えた(いきなりv15だけど)のが2016年8月、既に最新のリリースがv16.8です。
Vue.jsも1系最終版が2016年9月、2系に以降してから既にv2.6.6とマイナーバージョンが6度更新されています。

このように各ライブラリのリポジトリをちら見すればわかりますが、
移り変わりが超激しいのがフロントエンドです。

受託なら枯れた技術を採用したいという主張も理解は出来ます。
なので採用しない理由がデカいので、
採用したいならしっかり理由を詰めて論理武装してください。


さて、JSフレームワークを使う意味です。
Angular単品で見るよりここを抑える方がはるかに重要です。
質問文書いてる時点で薄々思ってるでしょうけど、Angularはあくまで選択肢の一つだからです。

これは正直エンジニアの数だけ回答があるでしょう。
散々考えて分からないなら、勉強会などへ参加して使ってる人に聞いてみては?

私の答えは、「冪等性」と「宣言型」です。


これを現行のjQueryでの開発を例に解説していきます

jQueryはDOMを簡単に扱えるライブラリです。
昔は足並みの揃わない愚鈍なブラウザ達の足並みを揃えるクロスブラウザ的な側面も強かったのですが、
今では軒並みES5やES6が完全動作するのでメソッドチェーンを駆使して書けるライブラリ以上の意味合いはありません。

しかし、jQueryの限界は「AをBに変更しろ!」にあります。
こういう風にAをBに変更することでDOMを制御するのを命令型といいます。

この命令型は冪等性の担保が難しいことに問題があります。
既にDOMの状態がBになっているものに、「Bに変更しろ」という命令を下したらどうなるんでしょうね?

クラスの付け外しみたいなしょぼいものならば別に問題にはなりませんが、
要素をドラスティックに操作、
例えばtableの任意の項目でソートしましょうみたいな事になれば工数がアホみたいに跳ね上がります。

これの整合性を保つ為にエンジニア達は日夜残業して目視でテスト項目を埋めることになります。

また、jQueryはJSの変数世界と、DOMの二重管理を強いられます。
右上のメニューからモーダルの設定項目が表示されて、変更すると画面の内容が切り替わるみたいな処理だと、
更新処理を2重に書く必要がでてきます。
このようにあっちこっちに同じ事を書けば、横並び項目の修正漏れでレイアウトが崩れます。

これがjQueryの限界、命令してるってことは相手は指示待ち人間なわけですよ。
ネイティブJSも同様で命令型でやっている限り一生この問題がつきまといます。

当たり前過ぎて中々気が付きませんが、
当たり前じゃないんですよね。
JSフレームワークがこの概念を崩してくれました。


JSフレームワークというのは宣言的にDOMを構築するものです。

JSフレームワークにテンプレート的存在なHTMLを読み込ませて、
JS世界の値をJSフレームワークのルールに従って変更すると、
テンプレートが再読込され、自動的にあるべき最新のDOMツリーに置き換わります。

この自動的に「あるべき状態」に変化するってのが冪等性。
2回リフレッシュ処理を走らせたら?
別になにも起こりません、2回あるべき状態のDOMが構築されるだけです。

宣言としてこうであるべきを書く事で修正漏れも最小限になり冪等性も保たれます。
冪等性が保たれるなら、A処理を変更したことで他の処理が壊れる事に震えながら過ごす必要はありません。
つまりテストの工数も減りますね。

またJSの変数世界が常に正で、DOMは瞬時に最新のあるべき姿に置き換わります。
つまり開発者は変数を監視すれば良い。
不具合が圧倒的に減るので、結果としてテストの工数も減りますね。

これが流行り廃りが激しいフロントエンドの世界で、
明日サービスがポシャってるかもしれないJSフレームワークを採用する理由です。
これを学習コストにぶつけてどちらが良いかを判断するのが意思決定者の仕事です。


画像のビューワーやアコーディオンのような変数無しでも表現出来るしょぼいものならともかく、
それ以上のものはJSフレームワークの思想で宣言的かつ冪等性に処理すべきです。
見えないDOMの変化でレイアウト崩れする不安に怯えながら、
必死にExcelで作った目視のテスト項目潰していく作業は嫌でしょ?

なので大規模なフロントエンドのWebアプリを作るなら、
なんでもいいからJSフレームワークでやらせろが基準です。
何を使うかは半ば博打です。

例えばPHPの中身のエンジンはZend製であり、その会社が出したZend Engineが間違いないと評判になりましたが……あっという間に廃れましたね。
同じくAngularはバックがGoogleと一見強いですが、既にDartやAngular2系で盛大にやらかしてますし、Google自体がポシャったらすぐ逃げる集団なのでそういった意味では信頼性はイマイチです。

まぁ、JSフレームワークの根本である冪等性を保つ為に、
「テンプレート」とJS変数世界の値に従うというルールや思想は長く残るでしょうし、
中身のロジックはネイティブJSの関数ですよね。
例えJSフレームワークが古くなって捨てられるような事になっても、そんなに工数はかかりません。

移行時の工数やテストで死ぬかもしれませんが、
最初からjQueryで作って完成にこぎつけるまでで死は免れません。
同じ死ぬにしても未来のある方に足掻いて死にたいですね。

この考えに賛同出来るなら、怖くてもJSフレームワークを採用すれば良いですし、
賛同しないなら採用しなければ良いだけの話です。

投稿2019/02/14 06:08

編集2019/02/14 06:16
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問