トップへ戻る
プライムデーセール
ik.am
gpt-ossの登場により、プライベートAIアプリでもそこそこの品質が期待できるようになりました。 改めて、Spring AIで簡単なAIアプリを作ってみましょう。利用するバージョンはSpring Boot 3.5、Spring AI 1.1です。 gpt-ossをOpenAI API互換で利用できる基盤として今回はOllamaを使います。 なお、本記事の内容はプライベートAIでなくてももちろん利用可能です。 目次 チュートリアルのゴールOllamaのインストールモデルのロードOllamaのOpenAI APIの動作確認Spring AIアプリの雛形作成ChatClientの利用Chat APIのHTTPログを確認Structured Outputの利用Chat Memoryの利用VectorStoreの利用ファイルからドキュメントをロード関連するドキュメントをChat APIのプロンプト
LocalでLLMを試すのにOllamaが人気です。Spring AIにはOllama用のChat Clientが用意されていますが、OllamaにはOpenAI API互換APIも用意されているので、OpenAIへの切り替えも想定して、OpenAI用のChat Clientを使ってOllamaにアクセスしてみます。 Warning Spring AIのOpenAI Clientは1.0.0-M1時点で、Ollama含む多くの互換APIプロバイダーが実装していないAPIを使用しています。 こちらのコミットで使用するAPIが修正されたため、本記事ではSpring AI 1.0.0-SNAPSHOTを使用しています。 目次 OllamaのインストールOllamaの起動Gemmaモデルを使用Llama3モデルの使用Spring AIでOllamaにアクセス Ollamaのインストール brew
Note 2026-01-28 Spring Secruity 7のMFAサポートを利用したバージョンを公開しました。2FAを実装したい場合は、こちらの記事ではなく、最新版を参照してください。 Spring Securityで2要素認証 (2FA) を行う方法をメモします。 今回の実装は2要素に限定しているので、ここでは多要素認証 (MFA)というより2FAと明示しておきます。 "Spring Security 2FA" でGoogle検索すると、次の2例が見つかります。 https://www.baeldung.com/spring-security-two-factor-authentication-with-soft-token https://www.javadevjournal.com/spring-security/two-factor-authentication-with-
Spring Securityでログイン時にデータベース上の保存されたエンコードされたパスワードを別のアルゴリズムで再度エンコードして保存する方法を紹介します。 変更の手順を先に説明すると、 DelegatingPasswordEncoderのidForEncodeを変える UserDetailsPasswordServiceを実装する ログインし直す です。 以下、少しずつ説明します。 目次 一般的なユーザー認証パスワードハッシュアルゴリズムの変更既存ユーザーのパスワードハッシュアルゴリズムのマイグレーションレガシーなMD5ハッシュからのマイグレーション(おまけ) OWASP推奨のPBKDF2ハッシュを使用する 一般的なユーザー認証 まずはデータベースを使った一般的なSpring Securityのユーザー認証を実装します。次のクラスを使用します。読みやすいように、意図的にシンプルにして
OrbStackは軽量・高速を謳うDocker Desktop for Macの代替です。 drop-in replacementであり、Docker Desktop for Macと同じくdockerコマンドが使えます。 https://orbstack.dev/ リソース消費が少ない & 起動が速い DockerだけでなくLinux Machineも使える Macのホストからコンテナ/Linux Machineに直接アクセスできる(!) 自分はDocker DesktopのCPU使用率の高さが嫌でした。Docker Desktopを使っていると、Laptopが熱かったです。コンテナを使わないときはわざわざDocker Desktopを終了していました。 そこで軽量なOrbStackが気になり、乗り換えてみました。Docker Desktopに比べると確かにリソース消費量が少なく、快適に
検索条件によってSQLのwhere句が変わるような動的なSQLをJdbcTemplateで扱おうとするとif文を多用してSQLのStringBuilder を組み立てる必要があります。 このようなケースではMyBatisやjOOQのような別のSQLマッパーを使うのが一般的です。 JdbcTemplateを使っていて、他のデータベースアクセスライブラリは使いたくない場合は MyBatis Thymeleaf を使用することでThymeleafテンプレートを使ってSQLを組み立てることができます。 MyBatis Thymeleafは元々はMyBatisのSQLをThymeleafテンプレートで書けるようにするプロジェクトでしたが、 バージョン1.0.2からテンプレートのレンダリングを行う SQL Generator をMyBatisに依存することなく使用できます。 Spring JDBCの
yttはスタンドアローンで使えるYAMLのテンプレートツールです。同じ領域のツールとしては Jsonnet Dhall Cue がありますが、テンプレートツールとしてのyttの特徴としては YAMLそのものを記述する(YAMLとしてvalid) YAMLのコメントとしてPython-likeなStarlark言語を記述することで動的な表現ができる 各ツールとの比較の詳細はこちら。 他のツールが専用の言語を使うのに比べ、yttはあくまでもYAML+コメントなので心理的な導入のハードルは低いかもしれません。 もちろんytt用に文法は覚える必要はありますが、言語部分もPythonを使ったことがあれば覚えやすいかもしれません。 ただし、yttはただのテンプレートツールとは異なり、overlay機能を持っています。これはYAMLの一部を書き換えたり、追加したり、削除したりできる強力な機能で、 Kub
Pivotal Application Service (Cloud Foundry)上にデプロイしたアプリケーションのメトリクスをPrometheusからScrapeしたい時の問題と2019年8月時点での解決法について説明します。 目次 問題解決法PromeregatorMetric RegistrarPrometheus RSocket Proxy解決法の比較Micrometer用Grafanaダッシュボードサンプル 問題 例えばhttps://example.apps.my-paas.example.comにルーティングされるアプリケーションに対する次のようなScrape Configを設定したとします。 scrape_configs: - job_name: example scrape_interval: 60s scrape_timeout: 10s scheme: https
KubernetesにSpring Bootアプリを置く場合はIngressを使用するなど、前段でTLS Terminationすることが多いと思うが、 アプリ側で実施したい場合のやり方を説明する。 X-Forwaded-ProtoヘッダーがLBが正しく設定してくれず、ログイン後のリダイレクトがうまく行かない(HTTPにリダイレクトされる)ことがあったのでメモ PKS + NSX-TでNSX-T Ingressを使うケースで発生。 Spring Boot 2.1.5で動作確認しているが、2.xであれば同じはず。 サンプルアプリとしてSpring Musicを使用する。 このアプリ自体はただのSpring Bootアプリであり、普通に8080番をlistenするHTTPアプリである。 docker runするとhttp://localhost:8080でアクセスできる。 docker run
目次 BuildpackとDockerfile Cloud Foundryのbuildpackは便利で、"Source Code to Container Image"を実現してくれます。 Dockerを用いてアプリケーションをデプロイする場合は、一般的に ソースコード作成/修正 Dockerfile作成/修正 Dockerイメージの作成 Dockerイメージのデプロイ Dockerイメージを使ってアプリケーション(コンテナ)をデプロイ ですが、Cloud Foundryではbuildpackを使うことにより ソースコード作成/修正 cf pushコマンドでアプリケーション(コンテナ)をデプロイ で完了します。 Dockerの場合、通常Dockerfileを作ることになりますが、これをメンテナンスするということは、アプリケーションコードのメンテナンスの他に OSイメージ(opensshの脆
YAVIというJava用ValidatorライブラリのYAVIを作っています。 Yet Another Validation for Javaの略で"ヤヴァイ"と呼びます。 この記事では何でYAVIを作っているのか、何が面白いのかを紹介します。 目次 動機コンセプト基本的な使い方Either APIの導入エラーメッセージ補間文字長チェックサロゲートペア結合文字IVSEmojiコードポイント集合3rd Partyライブラリとの連携 動機 Javaには一応、標準のBean Validationがあり、 実装としてはHibernate Validatorが一般的に使われています。 Spring Bootでもデフォルトで含まれるので、多くの人はこれを使っていますし、これで事足りることが多いです。 YAVIを作ったのはBean Validationが嫌いだからではありません。なので、Bean Val
メモ 次の設定がある前提。 management.metrics.distribution.percentiles-histogram.http.server.requests=true management.metrics.distribution.sla.http.server.requests=100ms, 400ms, 500ms, 2000ms management.metrics.distribution.percentiles.http.server.requests=0.5, 0.9, 0.95, 0.99, 0.999 Prometheusの場合、Client-side Percentilesの計算(management.metrics.distribution.percentiles)は不要であるが、 サーバーで計算するより速いし、ぱっと見るのに便利なので設定しておく。
SpringのTaskSchedulerのうち、もっともよく使われるorg.springframework.scheduling.concurrent.ThreadPoolTaskExecutorの設定ミスが多いです。 corePoolSize maxPoolSize queueCapacity が設定項目としてあります。 これだけ見ると、このExecutorがTheadを作る順としては corePoolSizeをThreadを最初に作る corePoolSizeが一杯になるとmaxPoolSizeまでThreadを増やす maxPoolSizeを越えると、queueCapacityまでキューイングする queueCapacityを越えるとrejectされる と思いがちです。 しかし、これは誤解です。 正しくは corePoolSizeまでThreadを作る corePoolSizeが一杯
riffはPivotalが開発中のk8s nativeなFaaS (Function as a Service)です。 現在のバージョンは0.0.3です。 Function、TopicというKubernetesのCustom Resourceが用意されています。 各種言語で関数コードを書き、Dockerイメージとしてパッケージングします。 Functionリソースと入り口となるTopicリソースをk8sにデプロイします。 この段階でPodはできません。 Topicに対してHTTP Gatewayにリクエストを送ると、そのTopicをinputとしているFunctionに設定されているコンテナがFunction Controller経由で 作成され、Podができます。Podはサイドカーを持ち、関数を実行するためのいくつかのプロトコルをサポートします。現時点では HTTP stdio gRPC
KeycloakとSpring Bootを連携するために、RedHatよりorg.keycloak:keycloak-spring-boot-starterというSpring Boot用のStarterライブラリが提供されていますが、これはKeycloakのAPIを使っています。Spring BootとKeycloakを合わせて検索するとだいたいこのライブラリが使われています。 KeycloakをOpenID Connectという標準仕様を使ってアクセスするのに、ベンダ提供ライブラリを使うとアプリケーションのポータビリティが損なわれるので、この記事ではSpringのOAuth2/OpenID Connect機能のみを使った連携方法を紹介します。 keycloak-spring-boot-starterに関しては、RedHatのブログが参考になります。 目次 クライアントの定義Spring
Synology DiskStation DS718+を買いました。 NASとしてだけではなく、SysLogサーバー、LDAPサーバーとしても使えて便利です。 このNASにMinioをインストールしてS3サーバーにもしてみました。 Package CenterにMinioは用意されていないのですが、Docker経由でインストール可能です。sshでログインしてminioコマンドを直接実行してもいいですが、Docker経由の方がGUIベースで管理できて、Synology NAS的には楽です。 https://docs.minio.io/docs/minio-docker-quickstart-guide の内容をGUIで行います。 以下、作業メモです。自分が買ったのはDS718+ですが、他のモデルでも同じだと思います。 目次 Dockerのインストール "Package Center" =>
目次 Concourse 3.3で追加されたCredential Management(Vault対応)を試す。 今まで、平文で管理されていた機密情報はようやくVaultサーバーで管理することができる。 今回は外部Vaultサーバーとして、Cloud FoundryにデプロイしたVaultを利用する。Pivotal Web Servicesでは月100円以下(無料期間あり)で管理できるのでおすすめ。 以下はこのVaultにログインした状態で始める。 "Concourse"という呼び方が正しいが、タイトルではググラビリティ向上のために"Concourse CI"と書いている。 Vaultの設定 Vaultとの連携方式は AppRole TLS Token が用意されているが、今回はAppRoleを使用する。Tokenの方が設定が楽だけれど、AppRoleの方が推奨っぽい。 AppRoleもT
目次 やりたいことMySQLサービスインスタンスの作成Pivotal Web Servicesの場合Pivotal Cloud Foundryの場合VaultのデプロイVaultのダウンロード起動スクリプトの作成manifest.ymlの作成Vaultの初期化初期化Unsealログイン再起動時の自動Unsealまとめ やりたいこと 機密情報管理に便利なHashicorp Vault。 Spring VaultやSpring Cloud ConfigのVault Backend、Cloud Foundry Vault Service Brokerなど、Vault関連のプロジェクトが増えていき、色々試したいが、実際にアプリケーションをデプロイした時にも接続できる場所にVaultを置いておきたい。 Cloud Foundryにできれば運用が楽になるので、cf pushでVaultをデプロイしてみ
はじめてのSpring WebFlux (その1 - Spring WebFluxを試す)ではSpring Boot 2.0を使用してSpring WebFluxアプリケーションを作成しましたが、今回は番外編としてSpring WebFluxをマニュアルでBootstrapしてみます。 方法はドキュメントに書かれています。 アノテーションベースの@Controllerモデルでも関数型ベースのRouter Functionsモデルでもorg.springframework.http.server.reactive.HttpHandlerに変換するところがポイントです。 HttpHandlerに変換した後は各種ランタイムのアダプタに渡して、ランタイムを実行する流れになります。 本記事ではRouter FunctionsモデルでReactor Nettyランタイムを使う方法のみ紹介します。 目次
この記事の内容はSpring 5.0.0.RC1時点でのものです。5.0.0.RELEASE時での動作保証はありません。またSNAPSHOTを使っているため、このままでは動作しないこともあります。 目次 はじめにプロジェクト作成@ControllerモデルHello World無限StreamPOSTの例Router FunctionsモデルHello World無限StreamPOSTの例次回予告 はじめに Spring WebFluxはSpring 5から追加された、ノンブロッキングなランタイム上でリアクティブプログラミングできる新しいWebフレームワークです。 上の図が示す通り、これまでのSpring MVCの横に位置するコンポーネントです。 これまでのSpring MVCがサーブレットコンテナ上でServlet APIをベースにしてきたフレームワークであったのに対し、 Spring
RxJavaリアクティブプログラミング (CodeZine BOOKS)を読んでいる。 RxJava 2が対象になっており、コードのほとんどでFlowableが使われている。Reactive StreamsやBackpressureに関する説明も豊富で、これまでAndroidなどクライアントサイドでRxJavaを使っていた人が読む本というより、サーバーサイドで使いたいって人の方が合っている気がする。 また、Flowableは同じくReactive Streams準拠でSpring Framework 5に同梱されるReactorのFlux / Monoとほとんど同じなので、Reactorを学ぶという意味でも十分使える。 RxJava2のメイン開発者であるDavid KarnokはReactorにもcontributeしているし、Reactorのメイン開発者であるStephane Maldi
Spring 5でフレームワークのコア部分でKotlin対応が入る。 KotlinサポートのポイントはExtension FunctionsとReified type parameters。 Spring 5での対応がどのようなものを見る前に、この二つのKotlinの言語仕様を知っておくと理解しやすい。 次のJavaコードを例に簡単に説明する。 package com.example; public class Foo { public <T> T create(Class<T> clazz) { try { return clazz.newInstance(); } catch (Exception e) { throw new IllegalStateException(e); } } } この機能をJavaで使うと Foo foo = new Foo(); Bar bar = foo
次のページ
このページを最初にブックマークしてみませんか?
『SpringのCache Abstractionについて』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く
サクサク読めて、アプリ限定の機能も多数!