ccc2025spring.java-users.jp に参加してきました。簡単にですが、感想とその後をまとめます。
セッション一覧はこちら。https://sessionize.com/api/v2/s2ztutnz/view/Sessions
- クレディセゾンの内製開発事例:ユーザー部門と共にSMS送信システムを開発した話
- シンプルは作れる! - 実験からも見えてきたイミュータブルデータモデルの効果
- 単一Gitリポジトリから独立しました
- Javaはスクリプト言語だ ― JBangが変えるJava開発の未来
- Feature Flag 開発を標準化し、加速させる Open Feature を導入する
- Java 30周年記念! Javaの30年をふりかえる
- まとめ
クレディセゾンの内製開発事例:ユーザー部門と共にSMS送信システムを開発した話
スポンサーセッションで、セゾンの中の開発体制や組織体制の話が中心で、非エンジニアとのコミュニケーションの取り方や、環境構築の試行錯誤などの絶賛組織拡大中なお話でした。
シンプルは作れる! - 実験からも見えてきたイミュータブルデータモデルの効果
自分のここ10年くらいの設計は、実は名前がついていたということに気づいたセッションだった。この考え方はあんまり受け入れてもらえないときが続いたけど、同じようなことを考えていた人がいたという安心感とこの灯火を消してはいけないという思いも自分の中に芽生えたと思う。(自分はこの設計や考え方を変える気はさらさらないけど)
この設計を行うために、環境やツールなどを揃えているので今後広められると良いなと思う。
単一Gitリポジトリから独立しました
LINEヤフーさんのセッション。モノレポに寄せたけど、組織的な課題や権限問題で分離したっていう話。個人的にマルチリポにする方法でも違うやり方しているからぜひLINEヤフーさんと色々ディスカッションして、理解を深めたいところ。
Javaはスクリプト言語だ ― JBangが変えるJava開発の未来
今回、一番業務に取り入れてみようと思った内容だった。以前、Groovyにも@Grab
っていうのがあって、コード上で依存関係を解消できる機能があったんだけど、あんまりうまく動かせないのとIDEの支援がそんなになかったので断念してしまったが、JBangはCLIとして提供されており、そこが画期的だった。
コマンド | 説明 |
---|---|
init | 雛型の作成 |
build | コンパイルコマンド。jarファイルおよびGraalVMがあればネィティブコマンドにもなる |
edit | 編集コマンド(IDEやVScodeなどが選べる) |
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 + "!"; } }
Feature Flag 開発を標準化し、加速させる Open Feature を導入する
OpenFeatureをSpringBootでの使い方と守った方がいいことの発表は参考になった。濫用はしない方がいいし、使われなくなったFeatureFlagはちゃんと回収して、削除するなり処理をした方がいい。ここまでは当たり前のことなんだけど、LLMでやると良い感じにうまくいくという話があって、良い使い方かもと思って、個人的にも深ぼってみる予定。なお、OpenFeatureはまだExperimentalが多いようで、FF4JやSpringConfigで自前実装している部分は、そのままでいいかなと思った。
Java 30周年記念! Javaの30年をふりかえる
Java30年+Javaになる前5年の歴史を振り返りです。政治的な思惑や予算的な観点など、あまり語られない裏話的なものがたくさんあり、Java前史〜興隆期〜停滞期〜再興期と色々なものを乗り越えてきたJavaとそれを30年以上見守ってきた桜庭さんのとてもいい話でした。ロングバージョンでぜひ聞きたいです。
まとめ
Javaが始まってから30年経つのに開発の勢いが衰えてないどころか増しておりついていくのが割と大変ではあるが、後方互換性もある程度ちゃんとしているので安心しては使えるかなと。(JDK9 jigsawは例外)次回はぜひ登壇したいので、色々ネタを探してストックしておくとともに発信もしていこうかなと。