革命のブログ革命のブログフレボワークスの社員がブログを通じて情報発信します。2024-07-30夏季休業のお知らせ弊社は、夏季休業を勝手ながら、以下の通りとさせて頂きます。休業期間中でのお問い合わせ等は、終了後、順次させて頂きますので、ご迷惑をお掛けしますが、宜しくお願い申し上げます。自:2024年8月13日(火)至:2024年8月16日(金)また、その他、土日祝際日はお休みとなります。-当社は、誠に勝手ながら、2023年12月30日(土)~2024年1月4日(木)まで、年末年始休業とさせていただきます。ご不便をおかけしますが、何卒、ご理解頂きますようお願い致します。来年も、皆様のご多幸を、お祈り申し上げます。09:58もっと読むコメントを書く2023-11-27結局、JPAがいいという話どうも、小野です。API)の特徴、そしてメリット、デメリットについてご紹介します。本記事ではJPAの詳しい使い方は説明しません。JPAは仕様、つまりインターフェースのみ定義されており、実装自体は「Hibernate」や「EclipseLink」などを利用することになります。HibernateとEclipseLinkはJPAの仕様に従って実装はされていますが、それぞれ独自実装もあったりするので、どちらがいいかは公式リファレンスを参照したり、実際に使ってみることをお勧めします。https://hibernate.org/https://eclipse.dev/eclipselink/JPAの特徴SQLを意識せずに、Javaオブジェクトでデータを操作することが可能です。全てJavaオブジェクトで完結することはなく、SQLを書くことはあります。JPAでDB操作する際にはいくつか方法があります。APISQL今まで使ってきたSQLです。これは説明する必要がありませんね。SQLは、Javaクラス内にも書けるし、外部ファイル(xml)にも書けるので、プロジェクトのルールに従って柔軟に対応が可能です。JPQLSQLに似ているJPA独自の言語です。以下のようなSQLがあったとします。uJPQLで表現するにはデータをマッピングするクラスが必要になります。email;}@Entityはマッピングする際に最低限必要です。JPQLで表現すると以下のようになります。uFROM句で指定されているのはテーブル名ではなく、クラス名になります。SELECT句にはクラス名のエイリアスを指定すると、全カラムを取得するようになります。取得する列を指定したい場合は、SQLの時と同じ形で指定します。u別にSQLで書けるならJPQL覚える必要ないと思いますが、テーブル結合のマッピングなど実現が難しいことがあるため習得は必須です。APIJavaプログラムでSQLを構築、実行するためのAPIです。APIを使って書いてみます。Userクラスはそのまま利用します。entityManagerは予めインスタンスを生成しておく必要がありますが、ここでは割愛します。APIのメリットはタイプセーフであることです。APIの場合、実装時にエラーを検知することが可能です。あとは、動的SQLを書く際に利用することが多いです。MybatisのようにSQL内に制御構文を書けないので、SQLやJPQLで書く際はプログラム内で文字列結合や制御構文を駆使する必要が出てきます。メリット実装の削減SQLやマッピングの実装を極力なくすことにより、生産性向上やバグを減らすことが期待できます。INSERT、UPADTE、DELETEはほぼ書く必要がなく、EntityManagerとエンティティクラスでの操作が可能です。"1");entityManager.remove(user);※前提としてトランザクション内での操作になります。複雑なSQLを書く場合にひと手間が必要になることがあります。APIで書こうとすると、実現が難しいかできても可読性が悪いコードになってしまいがちです。そのため、チューニングが必要なものは生のSQLで書く必要があります。生のSQLの場合、N対1や1対Nなどのテーブル結合のマッピングができないので、自分でマッピング処理を実装することになります。SQLの実行結果を保持するクラスを用意し、データ取得後、各テーブルに対応したクラスへマッピングを行います。APIを利用する場合、頭の中でこんなSQLが実行されるだろうなと思っていても実際は全く違うSQLが実行されていることも少なくありません。想定外のSQL実行を回避するために開発時は実行されたSQLをログに出力するようにしてください。上記でも触れた1対Nのテーブル結合のあるクエリを実行した際に、N+1問題にぶつかることがあります。それによりシステムのパフォーマンスが落ちたり、最悪の場合停止することも考えられます。N+1問題については、以下のサイトを参考にしてください。qiita.comさいごにJPAは学習コストが高いと言われています。実際使ってみた私からみてもやはりそのように感じます。書き方が3つもあり、実際に実行されるSQLを意識してないと痛い目見ますので。CriteriaAPIだけ覚えればJPQLは覚えなくても問題ありません。基本的にJPQLにできてCriteriaAPIにできないことはないです。個人的には3パターンの実装手段があることで、ケースに応じて使い分けることができるのがメリットかなと思います。この記事が選定時のネタとして参考になれば幸いです。09:05もっと読むコメントを書く2023-10-13ビデオ会議の記録に『tl;dv』を使ってみたどうも、小野です。最近、ビデオ会議に使える便利なツールを見つけたので紹介します。そのツールは『tl;dv』というものです。以下、公式サイトです。tldv.io簡単に説明すると以下のような特徴があります。GoogleMeet、Zoomによるビデオ会議の録画ができる。作成された動画に対して、主要トピックを抜き出し時間指定リンクを自動作成。上記にもある通り、現在はGoogleMeetとZOOMにしか対応していないので、Teamsなど他のアプリで利用できません。実際に画像を見せた方がどのくらい便利なのかわかると思います。※実際に仕事で録画したものなので、中身はぼかしてます。次に利用手順を説明してきます。Meetを前提にしています)(1)tl;dvのサイトでサインアップを行ってください。(2)以下のChrome拡張機能をインストールします。Meetを開始し、録画を開始します。Meetを終了します。準備から録画するまでの手順は以上になります。今回は情報漏洩等を避けるためにぼかし箇所が多くわかりづらかったかもしれません。無料で利用可能なので試しに使ってみてください。「ChatGPT」をご存知でしょうか?openai.com一応、知らない方のために簡単に説明させていただきます。普段LINEを利用している方はほとんどだと思いますが、公式LINE等で質問すると自動で返答する機能を利用したことがあると思います。これは通称ボットと呼ばれるもので、予め想定される質問に対する回答が用意されています。そのため、想定外の質問に対しては、「わかりません」となるわけです。ChatGPTもボットと同様に質問をすると、自動で返答してくれるわけですが、回答内容はすべてAIがWeb上にあらゆるコンテンツを解析し返してくれます。ボットは人が回答内容を用意していたのに対し、ChatGPTはAIが行ってくれています。結局何が違うのと思われている方もいると思うので、実際に使ってみます。緑のアイコンがChatGPTによる回答です。私のほうで続きをお願いしたら、2度目の前回の回答の続きから回答してくれているところです。そこで思いつきました。したら、開発もお願いできるのではと。実際に試してみました。今回作成していただくのは、JavaとSpringBootを使ったTODOアプリです。ChatGPTに「Java、SpringBootを使って、TODOアプリの開発をお願いします。」とお願いをした結果がこちらです。最初の質問に対する回答としては具体的なコードではなく、開発環境の構築手順やアプリの仕様についてでした。2回目の質問でタスク追加のコードもお願いしたところ、実際のコードが出てきました。これからはChatGPTが情報を見つけてきてくれるわけです。ちなみにChatGPTはOpenAIという会社が開発しています。マイクロソフト製品にChatGPTのようなAIの強化が期待できます。AIが支配する世界(シンギュラリティ)が近い将来訪れるのではないかと危惧しています。登録申請を完了しました。サイトでもご確認いただけます。15:23もっと読むコメントを書く2022-05-10簡単3ステップで完了!効率的なWebAPI仕様書作成を導入する方法はじめにどうも小野です。WebAPI仕様書の作成はどのようにしていますか?今回紹介するツール等がない時代はExcelを当たり前のように使っていたかもしれません。Excelの場合、ファイルのバージョン管理に苦労することが多いため、効率がいいとは言えません。そこで、今回はタイトルにもある通り、簡単3ステップでWebAPI仕様書を作成する方法をご紹介します。Githubセットアップリポジトリを新規作成します。NetlifyセットアップNetlifyは静的サイトを公開できるホスティングサービスです。ここでは公開するサイトを新規作成します。仕様書作成ステップ1で作成したリポジトリからソースをダウンロードし、初期設定を行います。変換してくれるツールで、Netlifyで公開するために必要です。