LoginSignup
9
11

More than 1 year has passed since last update.

駆け出しJava(3年)からNode.js(4年)。そしてJavaに戻ってきた感想

Last updated at Posted at 2018-06-16

タイトルの通り、Javaに戻ってきました。

見える世界がまるで違う。強くなって初めて分かるぜ。Javaってこんな仕組みだったのか!?てきな。

ウェブアプリケーション開発に新言語を採用したときにインフラで考えたこと

仕組みというのは↑的な意味です。

駆け出し時と今の違い


僕の駆け出しのときの状況ですが、

  • Java
  • プロジェクトのプログラミングルールを覚える
  • tomcat
  • IDEの使い方
  • DBとの接続ツールの使い方
  • Gitの使い方
  • SQL
  • リリースなどのオペレーション
  • 障害対応
  • 社内用語
  • 先輩との付き合い方
  • チャットツールとの付き合い方
  • HTTPとかWeb全般の知識
  • クロスサイトスクリプティングとかセキュリティ関連の話
  • HTML
  • JavaScript
  • Websocket
  • 認証方式
  • LinuxOS
  • サーバーマシンのスペックによる上限値の意識

などなど、覚えることが多く正直深く理解せずに、コントローラとサービス書くしかない状況でした。
(今思えば、ペアプログラミングでベテランが引っ張ってくれたら、高速道路理論が使えて成長速度が違ったと思います。)

一応、昼休みに技術書読むなど頑張ってました。

しかし、今思えばずいぶんとレベルが低かったなぁと思います。
(駆け出しなので当たり前かと思いますが。。)

現状では、記述したものはだいたい分かっている状況となっています。

その状態で改めて見たJavaの良いとこ、悪いとこをNode.jsとの比較も交えて書いていきます。

環境


  • Java8
  • Nginx
  • Tomcat7系
  • Spring4系
  • MongoDB3.0系
  • MongoDB3.6系
  • MariaDB5.5系
  • RabbitMQ
  • Redis3.0
  • Redis4.0
  • メインのインフラはDCにあるベアメタルサーバ
  • Websocket(WSS)

良いところ


  • Node.jsと違って非同期のイベント駆動では無いのでコードが追いやすい
  • 型があるのでコンパイルさえ通れば割と動くという安心感がある
  • Javaは使われているし、枯れてもいるので安心感がある
  • やろうと思えば非同期処理も書ける
  • ググれば色々と情報が出てくる(量が多すぎて逆にノイジーでもある)
  • MongoDBがスキーマレスなので、Java側で型を使ってスキーマ定義できるのは非常に良い

悪いところ


  • コンパイルに時間が掛かる
    • 回避方法はあると思うが、プロジェクトの現状では2分30秒掛かる
  • IntelliJ IDEA(統合開発環境)が無いと開発できない(なんとかしたい。。)
    • Node.jsの場合、VimとかVisualStudioCodeとか自由だった
  • テスト(JUnit)が、Node.jsのMochaと比べて書きづらい
    • 事前処理とか事後処理を明示的に書きたいが、テスト内にごちゃっと書くしか無い。
  • Springのせいで実装がしづらい(バッチ処理もまともに書けない状況)
    • SpringもDIがほしいだけなら、Google Guiceとかもある
    • SparkJavaとかシンプルだと思う
  • 同期型のせいか?わからないが、全然パフォーマンスが出ていない
    • これに関しては、現在のプロジェクトの実装の仕方がまずい可能性も高い。
  • 生存期間の短いオブジェクトでもクラスを作る
    • 1リクエストパスでしか使わないようなVOクラスは、ListとMapで良いと思う。
    • Node.jsではListとMapしか使ってないようなもので、それでも運用できていた。
    • コーディング速度優先のテスト駆動開発さえできれば、ListとMapでも行けると思う。
  • Getter, Setter要らなくないですか?
  • Mavenのせいかもしれないが、ディレクトリ構成が不格好
  • アノテーションのせいで動作の仕組みがわからずに苦労することがある
    • メソッド前に動くのか?メソッド後に動くのか?とか実装見ないとわからん
    • アノテーションは仕組みがぱっと見でわからんのでダメだと思う
    • Lombok程度なら良いと思います

まとめ


なんか悪い点に書いたものって、実装次第で全然変えられると思う。

Javaの今までの慣習が邪魔なだけな気がする。

Node.js風のJava開発とかをやってみたら面白いのでは?と思う。
(そういえば、CyberAgentに居るときにPlayFrameworkを使ってNode.js風の開発をしていた人が居た気がする。)

僕としては早く帰るには、速く実装する必要があるので、それが出来る環境にしたいです。

9
11
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11