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

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

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

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

Q&A

解決済

4回答

1130閲覧

次期開発言語の選定について

tokotoko2020

総合スコア3

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

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

1グッド

3クリップ

投稿2020/05/28 13:49

編集2020/05/29 02:35

会社で使用している飲食店の管理画面が
フレームワーク等利用せず、HTMLとPHP及Perlが混在した状態で平均1ファイル3000行程度になるため、
どのコードがどこに影響しているかなど全く把握できず、機能追加等が全くできなくなってしまったため、
作り替えを考えております。

そこで次期開発言語の選定が決まらないため、参考にご意見いただけたらと思っています。

サーバー情報
CPU Xeon E3-1260L v5
メモリ32GB
ストレージ 1TB HDD

現在の開発言語
PHP5.4、Perl(バージョン不明)、MySQL

システムの内容

  • 日替わりメニューとしてカレンダー表示
  • メニューリスト(およそ300件)
  • 会員様へのメッセージ機能
  • 会員様の来店回数、金額集計
  • 会員情報
  • 売上集計(日、曜日、月、年)
  • 各商品売上統計
  • POSシステム
  • メニューページアクセス集計
  • アンケート
  • ポイントシステム
  • 予約(来店及びメニュー)システム

等、10店舗分とそこそこのボリュームとなります。

今現在、メニュー一覧表示100件程度ループが1秒、売上集計は月単位で2秒から3秒かかっており、
なるべく今の状況よりもパフォーマンスを落とさないようにしたいと思っています。

上がっている言語及び、フレームワークはスクリプト言語で以下のものになります。

其の1:PHP + Laravel(当方経験者)
今までPHPでやっていたので、PHP自体の学習期間は掛からない。
ただ、オブジェクト指向を理解していない人がいるため、
その部分では学習コストがかかってしまう。
また、1メソッドに数百行とか書かれてしまいそうな危険性もある。

其の2:Python + Django(当方経験者)
今後、AIを活用する可能性も0じゃないため、将来性があるのかなと思っています。
こちらも、オブジェクト指向理解していない人がいますが、関数ベースのコントローラ(View)もあるため、
そちらでもできるのかなと思っています。
あと。PHPで書かれるよりは見通しが良くなるのかと。。。

其の3:nodejs + Express (経験無し)
JSが苦手なため、あまり気乗りはしませんが、少数の人数で行っている現状があり、
フロント周りのJSも担当するため、1言語で統一できることが魅力であると思っています。
また、今後未経験の新人に教育する際にもフロント、バックエンド問わず教育しやすいのかなと思っています。
そして、パフォーマンスに優れる点、UI、UXにも強くなれる点も良いと思っています。
JSは少なからず皆が経験しているため、全くわからないということはないと思います。
ただ、計算に弱いような記事もみたことがあり、実際どうなんだろうと思っております。

個人としてはPython+Djangoでやりたいと思っていますが、限られたサーバーリソースのなかで比較した場合
どれがいいのかなと迷っています。
また、今後若い人たちの人材確保の面でもいいものをと思っています。

あまり文章が上手ではないため、わかりにくいところがあるかもしれませんが、よろしくお願いします。

追記

ご指摘いただきましたので、
追記という形で記載させていただきます。

そもそもの話ではありますが、現状のシステムはおよそ15年前にperlで作成されており、
そこにPHPで機能を追加させていっているものになります。
php5になったのもここ最近だという事です。

スタッフの言語のレベルにつきましては
phpは十分に使えるレベルですが、フレームワークやオブジェクト指向については分かる人は自分だけです。
pythonは自分以外は使える人はおらず、自分は3年近くDjangoでwebアプリケーションを作成していました。
jsはJqueryをメインにMDNのサイトを見ながら素のjsを書く程度で、nodejsについては知っている人はいません。

現在の会社については、15年前から何も変わっていない為、
人材は集まるけど、ソースを見て数年で辞めていくという状況が続いております。
※私もその一人でしたが、作り直しの話が出たため再度参加する事になりました。

結果残るのは、多少お年を召した方や、特にプログラムにこだわりが無い方となってしまってます。

miyabi_pudding👍を押しています

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

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

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

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

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

hentaiman

2020/05/28 16:09

分かりにくいところ・・・ 文章からだとレベルが分からないんですがphpは使える、pythonは知っている程度(ほぼ知らない使えない)、nodejsは知らないけどjsは使えるというレベルですか? 質問文からすると、開発メンバーの能力と将来を考えつつ多少の技術的な将来考えればnodejsが一番良さそうだと判断しているように感じますが・・・なのでnodejsがいいのでは 1と2に関しては具体的に何人規模で利用するどんなシステムを開発した経験があるかと書いてもらえたらまたお勧めは変わるかと思いますし、それも踏まえて回答してくれる人も出てくるのでは
tokotoko2020

2020/05/29 01:55

ご指摘ありがとうございます。 後ほど追記させていただきます。
guest

回答4

0

回答

また、1メソッドに数百行とか書かれてしまいそうな危険性もある。

駄目な人を野放しにする前提だとどれも厳しいでしょうね。
どの選択肢にするにしても、学習コストの中に1メソッドに数百行とか書く様な事はダメなんだよと教えるコストを見込まないと難しいと思います。

逆に言うと、それを含めて教育出来るか、コードレビューで機械的にはじけるようなルールを整備出来ればどの選択肢でも大差ないので、決定権者の好みで選択しちゃっても良いと思います。
強いて言うなら、ルールを作りやすい慣れた言語が良いかもしれません。

アーキテクチャや規約でなんとかする方向性

教育とは別の方向性としては、アーキテクチャや規約で何とかする方向性もあります。

どの方法にもデメリットはありますが、例えば、

  • マイクロアーキテクチャ的な作りにして、強制的に機能の独立性を担保して(問題のあるコードが)飛び火しないようにする
  • ユニットテストのカバレッジ目標を100%にして(100%にするのはデメリットも大きいですが)テストの作りやすいコードを強制することで、結果としてクソ長いコードを却下する

と言った感じで問題コードの生産を抑制する方法を模索し、その方法が実行しやすいかどうかという観点で言語選択をする。
(それで数百行のコードを書く人のメンタルがやられたりすることもあるので、とっても難しい問題ではあります。)

気になった点

限られたサーバーリソースのなかで比較した場合

サーバスペックは(質問から想像する限りですが)規模に比べてかなり潤沢に思いますので、
言語選択とは関係無いものと考えて良いです。
(それで速度が遅いのはDBにインデックスが正しく貼られていないとか正規化出来てないとかそういうレベルな気がするのですが、その辺ってどうなんでしょうか。)

その構成でボトルネックになり得るのは1TBのHDD(恐らくSASでは無くSATA?)くらいでしょうから、これをSSDに変えるくらいは考えても良いかもしれませんね。

教育コストに比べればはるかに安い投資で変更 or 追加出来るので、検討すると皆が幸せになれるかもしれません。(保守契約とかの関係で超高くなる場合もあるとは思いますが。)

投稿2020/05/28 14:18

編集2020/05/29 03:47
tanat

総合スコア18727

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

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

tokotoko2020

2020/05/29 02:17

回答ありがとうございます アーキテクチャや規約で何とかするというのはその通りだと思います。 精神的に潰れないような方法を考えていきたいと思っています。 インデックスについては、大体15年も前にperlのみで作られたものを使用しており、 DBではなくdatファイル保存でスタートしたみたいですので、 そこに機能追加で半分DB半分ファイル保存という状態なっており全く効いていないと思います。 この辺りは新たに設計し直すことで改善できそうだということで、 参考にさせて頂きます。 ありがとうございました。
tanat

2020/05/29 03:36

> 現在の会社については、15年前から何も変わっていない為、 > 人材は集まるけど、ソースを見て数年で辞めていくという状況が続いております。 > ※私もその一人でしたが、作り直しの話が出たため再度参加する事になりました。 > 結果残るのは、多少お年を召した方や、特にプログラムにこだわりが無い方となってしまってます。 この辺はあるあるとは言えなかなかハードですね。 正直、人事権とセットでやらないと超大変そうです。 今残っている人を残さないといけない方針なのであれば、 - 誰でもYes/Noで適合判断出来るルールを作って、それは絶対であることを経営者からトップダウンで落とさせる - 年配者が納得感の出るルール決定プロセスにする - 外部の人に現在のアプリケーションの作りの問題をレポートしてもらう とか、そういうガバナンス的なところを先にしないとルールが簡単に崩壊したり、作っても技術的に守れなくて一部の出来る人に負担が集中して辞めてしまうということが発生しますね。 CTOや経営者、チームリーダー向きの書籍等を読んでみると良いかもしれません。 その上で、(すでにされているとは思いますが)責任者に相談/交渉して必要な手当てを引き出すところがスタート地点になってしまうと言う印象です。
guest

0

1ファイル3000行

仕様書書いてライブラリ化してないのでしょうか?
もしそうなら何を選んでもスパゲッティーコードから抜け出せないと思いますが・・

投稿2020/05/28 13:55

yambejp

総合スコア116724

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

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

tokotoko2020

2020/05/28 14:15

回答ありがとうございます。 仕様書の類いは全くありませんしライブラリにもなっていません。 クラスや関数にまとめる事すらできない状態です。 今は画面の動きを見ながら、管理者にヒアリングして新規画面デザインを作成。必要な機能の割り出しと仕様書を作成している段階になります。 0から作っていくことになります。
guest

0

ベストアンサー

今後、AIを活用する可能性も0じゃないた

考慮する必要無いです。必要になった時にpythonで実装する必要があるならその時点で学べばいいです。それどころかpythonのモジュールを使う必要が無いならpythonである必要すらありません。
出来る事は限られるけど、https://www.tensorflow.org/js/guide?hl=ja

其の1:PHP + Laravel(当方経験者)
其の2:Python + Django(当方経験者)

phpで書かれるよりは見易いという点だけは同意です。
ただし開発メンバーが質問者以外全員初心者レベルである場合に、技術や設計など全ての疑問に対してひとりで対応しきれるかを考えるとphpで良いかなと。もし自身ですべてを教えるのならpythonで良いですがm各々の調査能力に任せる事が多そうなら情報量の差でphpが圧倒的に優位です。
これはAIにおいては逆の事が言えます。python、R以外での実装自体が珍しいので当然ですが。

其の3:nodejs + Express (経験無し)

主観になりますが習得難度に関してはpythonと比較すればかなりハードル下がるかと思います(素のphpよりは断然難しいが)
また、素のphpやpythonでwebアプリ作れてもlaravelやdjangoになると全く書けないという事はありえますが、nodejs書けるのにexpressだと書けないという事はまずないと思います。
著名なsocket.io等ありますし、pythonと比べればwebに便利なものが集まってるので機能拡張の可能性が広がります。

スタッフの言語のレベルにつきましては

phpは十分に使えるレベルですがフレームワークやオブジェクト指向については分かる人は自分だけです。

本当にその程度ならphpも使えないレベルと考えて良いですね。ほんの微かな習得済みの技術を活かすためだけにphpを選ぶのは愚かです。それだけが理由ならphpを選ぶ必要はありません。
タラレバですが、もしも質問者以外にlaravel使える人が1名いるとしたらその時点でlaravel一択です。
もしかしたら才能ある人が隠れてるかもしれないので、試しにlaravelを独学させてみて早く習得できる人がいるかを確認してみるのはどうでしょうか?一人以上発掘出来ればlaravel確定で良いと思います。

人材を外から集めても良い場合
phpが良いでしょう。理由は他の言語と比べて最安値で人を集められるからです。php以外の能力を有する人でもphpの価格で雇えるなら雇ってphp使わせればいいですし。
数年で辞めてしまうのは作業内容に対して報酬が余りにも安すぎるからだと思うので、そこは会社内で相談する事かと。
しかし今回は1からシステム作り直すとの事なので、perlを解読しながらphpへ変換なり連携なりする等の作業は無くなり手間が減るはずです。そうなればこれまでと同じ報酬でも辞められる確率は下がるのでは無いでしょうか。

色々書きましたがnodejsお勧めします。webアプリ制作に際しての情報収集がし易いです。
考え方については他の回答者がたくさん回答しているので特に無し。

投稿2020/05/29 03:35

hentaiman

総合スコア6426

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

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

tokotoko2020

2020/06/01 03:05

回答遅れまして申し訳ありません。 詳しく教えて頂きありがとうございます。 nodojs少し触ってみましたが、なるほど簡単に動かすことができました。 もう少し触って運用の事まで考えていきたいと思っています。 設計、仕様書等の資料とルール作りをっ徹底して、 Express、laravelで検討していきたいと思います。 ありがとうございました。 他の方も詳しく教えて頂きとても参考になりました。 選ぶのは難しいですが、 言語まで踏み込んで意見を頂けたhentaimanさんを ベストアンサーとさせていただきます。
guest

0

言語やフレームワークは単に道具でしかないので、開発ルールの策定と遵守(教育)からだと思います。
コードのレビューも必ずすること。
でないとどんな環境を選んだところで大きな改善は見込めないのではと。

開発のルールを策定するのもアーキテクトの役割かとは思いますが、なるべくプログラマーの自由を奪うこと、考えたルールにすると良いと思います。

命名規則はもちろん、1メソッドの推奨行数、変数の使い方、データアクセスの仕方、などなど。
フレームワークを採用した上で更にフレームワークを作ることにはなりますが、品質の担保やメンテナンス性、コードレビューの画一化、新メンバーの立ち上げの迅速化などを加味すると、基盤部分にしっかりとかけておいたほうが全体のコストパフォーマンスもよくなります。

設計についても同じですね。
設計者の自由をなるべく許さないように、誰が書いても同じような品質になるようなルールとフォーマットを作り、適宜見直しをかけていくこと。

そうすればどのような言語やフレームワークを選定しても大きくぶれることはないと思います。

投稿2020/05/28 21:00

m.ts10806

総合スコア80875

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

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

tokotoko2020

2020/05/29 02:00

回答いただきありがとうございます。 やはり厳格にルールを決めておくべきですね。 現状がルール無しで進めてきた結果だという事は、 恐らく全員が気づいていると思いますので。 まず、開発ルールを決めることから進めていきたいと思います。 ありがとうございました。
m.ts10806

2020/05/29 02:30

はい。システムやアプリケーションは作って終わりではありませんし、ずっと同じメンバーが保守メンテナンスに関わっていく保証はありません。 場合により外注に入ってもらって対応してもらうこともあるでしょう。 そうなったときに初期コストを如何に抑えられるか、を考えることは重要です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問