某社で行われた、JHipster によるマイクロサービス開発のハンズオンを体験してきたので、アツいうちに備忘録(というか感想)を残しておきます。
はじめに
私は Java は全くの門外漢で、C言語および C#er です。
C# と Java は言語としては似ていると言われていますが、なんとなくですが文化の違い的なものを感じてはいます。文化の違いというか、コミュニティの成熟度というか・・・
勝手なイメージですが、
- Java:オープンな感じ。Mac な感じ。新しいことに寛容。いろんなフレームワークが転がっていて、良くも悪くも自由度が高い。意識高い系が多そうでコミュニティが活発。
- C#:Windows のための言語って感じ。基本的にレガシーで、伝統を重んじる。フレームワークは .NET Framework 一本で迷いなし。IDE も Visual Studio 一本。変化しないことが正義という保守層が多くて、コミュニティが少ない(というかコミュニティを作ろうという動きすらない)
C# を諌めてる感じがしますが、私は C#er なので Java に憧れているだけなのかもしれません。
ちなみに、誤解のないように一応言及しておきますが、 C# では昨今の主流は .NET Core になりつつあるので、上記のイメージは本当にただのイメージであり、実態は異なります。マルチプラットフォームだし、どんどん新しいこと取り入れるし、コミュニティも海外を中心に活発になりつつあります。
ただ、市場の認識は上記のイメージなのかなと思っています。
実際に求人情報を見ても、C# = Windows だし、.NET Framework だし、SQL Server だし。
すごく悲しいです・・・
(C# ってすごく魅力的な言語なんですよ!すごく先進的なんですよ!わかってほしい。悔しい!)
JHipster って?
本題です。
以下、Java 素人からみた話です。たぶん間違って解釈している部分も多いかと思いますが、素人なので許してください。
モダンな開発環境を自動で用意できるすごいやつ
JHipster はコマンドを打ち込むだけで、必要なコードが自動生成されます。
今流行りのマイクロサービスも Scaffolding できちゃいます。
テストや Docker のコンテナ環境、 SonarQube による静的解析の設定まで Scaffold できちゃいます。
データベースも MySQL といった RDBMS から Mongo といった NoSQL を選択できます。さらにはエンティティもサクッと作れちゃいます。
フロントエンドも Angular か ReactJs が自動で npm されちゃいますし、もちろん CRUD もばっちりです。
実際にやってみましたが、確かにこれはすごいです。
ASP.NET Core にも Scaffolding がありますが、あくまで簡素な Bootstrap のフロントエンドと、CRUD のみです。エンティティも RDBMS のみ対応で、確かデータベースファーストのみ対応だったはずです。
何よりも、Scaffolding の段階でマイクロサービスを選択できるのが凄いですね。
プレゼンターの方もおっしゃっていましたが、自動生成されたコードが「お手本」になります。
実際に Scaffold したものをプロジェクトでそのまま使わないにしても、どうやってマイクロサービスを作っていくかというお手本になります。
さわりだけ
以下、メモとっていることをさわりだけ残しておきます。
- Microservice Gateway:マイクロサービスの入り口的なもの。UI の役目を担う?
- マイクロサービスでは、UI は1つのプロジェクトが担当するってことでいいのか?プレゼンターの方に最後に確認すればよかった・・・
- Microservice Application:マイクロサービスとなるもの。これを複数作ることでマイクロサービスを形成する
特に心に残ったこと
マイクロサービスの難しいところは、サービスの切り分け単位。つまり、サービスを形成するドメインの定義。
あまりにも切り分けすぎるとスループットの低下につながるし、基本的にサービス感はリレーションが存在しない(外部キーが張れない)ので細かすぎると不整合が起きやすくなる
ちなみに・・・
私は現職でマイクロサービスっぽいのをやってますが、確かにこの切り分けは非常に難しいというか、諸刃の剣だと実感しています。
最初に区切ったサービスが実は区切らないほうが良かった・・・となることもあるし、後からサービス区切っておけば良かった・・・となることもあります。
しかし、前者の方が圧倒的に後悔が大きく、後になってからサービス同士をくっつけるなんて至難の業です。何を後悔するかって言うと、ほぼサービス間の整合性(トランザクション)を保てなくなることです。
最後に
今回は Java 環境の構築や、Java のモダンな開発にふれることができ、正直すごく刺激的でした。
Java の凄いところ(コミュニティの大きさとか!)がわかったし、逆に C# の良さも再確認できました。
あと、私は現職で C# でなんちゃってマイクロサービスのプロジェクトをやってます。
なんちゃってというのは、マイクロサービスでデファクトスタンダードの REST を使用したサービス間連携をしていないからです。サービス間のやり取りは諸事情から MQTT でやってます。
当初は「MQTT なんかでマイクロサービスやってるつもりになってて恥ずかしい」と思ってましたが、実はマイクロサービスを実践しようと試みていること自体がかなり希少だったりするのかなと思いました。そういう意味では、あまり悲観的になることもないのかなと。
あくまで「地方の中小企業では」という条件付きですが😂
コメント