ソフトウェアエンジニアの雑記

日々思ったことをまとめます

JJUG CCC 2025 Springの参加レポート

ccc2025spring.java-users.jp に参加してきました。簡単にですが、感想とその後をまとめます。

セッション一覧はこちら。https://sessionize.com/api/v2/s2ztutnz/view/Sessions

クレディセゾンの内製開発事例:ユーザー部門と共にSMS送信システムを開発した話

スポンサーセッションで、セゾンの中の開発体制や組織体制の話が中心で、非エンジニアとのコミュニケーションの取り方や、環境構築の試行錯誤などの絶賛組織拡大中なお話でした。

docswell.com

シンプルは作れる! - 実験からも見えてきたイミュータブルデータモデルの効果

自分のここ10年くらいの設計は、実は名前がついていたということに気づいたセッションだった。この考え方はあんまり受け入れてもらえないときが続いたけど、同じようなことを考えていた人がいたという安心感とこの灯火を消してはいけないという思いも自分の中に芽生えたと思う。(自分はこの設計や考え方を変える気はさらさらないけど)

この設計を行うために、環境やツールなどを揃えているので今後広められると良いなと思う。

docs.google.com

scrapbox.io

単一Gitリポジトリから独立しました

LINEヤフーさんのセッション。モノレポに寄せたけど、組織的な課題や権限問題で分離したっていう話。個人的にマルチリポにする方法でも違うやり方しているからぜひLINEヤフーさんと色々ディスカッションして、理解を深めたいところ。

speakerdeck.com

Javaスクリプト言語だ ― JBangが変えるJava開発の未来

今回、一番業務に取り入れてみようと思った内容だった。以前、Groovyにも@Grabっていうのがあって、コード上で依存関係を解消できる機能があったんだけど、あんまりうまく動かせないのとIDEの支援がそんなになかったので断念してしまったが、JBangはCLIとして提供されており、そこが画期的だった。

コマンド 説明
init 雛型の作成
build コンパイルコマンド。jarファイルおよびGraalVMがあればネィティブコマンドにもなる
edit 編集コマンド(IDEVScodeなどが選べる)
export Mavan/Gradle/fatjar/などいろいろな出力プロジェクトに変換が可能
wrapper GradleWrapperのように、JBangがインストールされていなくても実行時にインストールする仕組みを提供
template テンプレートの作成や既存テンプレートの呼び出しが可能

検証やモック開発、MVPをサクっとつくったり、CLIなどをサクッとつくるのに便利なコマンド群がすでに揃っている。検証やモック開発、MVPを作り終わったら、ある程度見慣れたJavaの実用的なプロジェクトに変換してくれるというかゆいところに手が届きまくっているツールだった。

ちなみに、下記ソースコードでSpringBootがサクっと立ち上がります。

package rest;
///usr/bin/env jbang "$0" "$@" ; exit $?

//DEPS org.springframework.boot:spring-boot-dependencies:3.4.6@pom
//DEPS org.springframework.boot:spring-boot-starter-web

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

/**
 * Spring Boot版のREST実装。
 * Spring Bootはパッケージがないと
 * クラススキャンが動かない。
 */
@SpringBootApplication
@RestController

public class RestSampleApp {
    /**
     * Spring Bootではmainメソッドが必要。
     */
    public static void main(String... args) {
        SpringApplication.run(RestSampleApp.class, args);
    }

    @GetMapping("/hello")
    public String hello() {

        return "Hello, World!";
    }

    @GetMapping("/hello/{name}")
    public String helloArgs(@PathVariable String name) {
        return "Hello, " + name + "!";
    }
}

github.com

Feature Flag 開発を標準化し、加速させる Open Feature を導入する

OpenFeatureをSpringBootでの使い方と守った方がいいことの発表は参考になった。濫用はしない方がいいし、使われなくなったFeatureFlagはちゃんと回収して、削除するなり処理をした方がいい。ここまでは当たり前のことなんだけど、LLMでやると良い感じにうまくいくという話があって、良い使い方かもと思って、個人的にも深ぼってみる予定。なお、OpenFeatureはまだExperimentalが多いようで、FF4JやSpringConfigで自前実装している部分は、そのままでいいかなと思った。

speakerdeck.com

Java 30周年記念! Javaの30年をふりかえる

Java30年+Javaになる前5年の歴史を振り返りです。政治的な思惑や予算的な観点など、あまり語られない裏話的なものがたくさんあり、Java前史〜興隆期〜停滞期〜再興期と色々なものを乗り越えてきたJavaとそれを30年以上見守ってきた桜庭さんのとてもいい話でした。ロングバージョンでぜひ聞きたいです。

speakerdeck.com

まとめ

Javaが始まってから30年経つのに開発の勢いが衰えてないどころか増しておりついていくのが割と大変ではあるが、後方互換性もある程度ちゃんとしているので安心しては使えるかなと。(JDK9 jigsawは例外)次回はぜひ登壇したいので、色々ネタを探してストックしておくとともに発信もしていこうかなと。