{"id":672647,"date":"2026-01-09T03:52:41","date_gmt":"2026-01-09T02:52:41","guid":{"rendered":"https:\/\/blog.jetbrains.com\/kotlin\/2025\/11\/growing-kotlin-adoption-in-your-company-2\/"},"modified":"2026-01-19T06:18:23","modified_gmt":"2026-01-19T05:18:23","slug":"growing-kotlin-adoption-in-your-company","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/ja\/kotlin\/2026\/01\/growing-kotlin-adoption-in-your-company\/","title":{"rendered":"\u4f01\u696d\u306b\u304a\u3051\u308b Kotlin \u5c0e\u5165\u30fb\u6d3b\u7528\u306e\u63a8\u9032"},"content":{"rendered":"<p><em><a href=\"https:\/\/www.linkedin.com\/in\/urs-peter-70a2882\/\" target=\"_blank\" rel=\"noreferrer noopener\" data-type=\"link\" data-id=\"https:\/\/bit.ly\/urs-peter-linked-in\">Urs Peter<\/a>\uff08\u30b7\u30cb\u30a2\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30a8\u30f3\u30b8\u30cb\u30a2\u3001JetBrains \u8a8d\u5b9a Kotlin \u30c8\u30ec\u30fc\u30ca\u30fc\uff09\u306b\u3088\u308b\u30b2\u30b9\u30c8\u6295\u7a3f\u3067\u3059\u3002 Urs \u306f\u3001\u3088\u308a\u4f53\u7cfb\u7684\u306a Kotlin \u30b9\u30ad\u30eb\u306e\u69cb\u7bc9\u3092\u5e0c\u671b\u3059\u308b\u958b\u767a\u8005\u3092\u5bfe\u8c61\u3068\u3059\u308b <\/em><a href=\"https:\/\/academy.xebia.com\/upskilling\/kotlin-academy\/\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Kotlin Upskill Program<\/em><\/a>\uff08Kotlin \u30b9\u30ad\u30eb\u30a2\u30c3\u30d7\u30d7\u30ed\u30b0\u30e9\u30e0\uff09\u3082 <em>Xebia Academy \u3067<\/em>\u958b\u8b1b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><em>\u3053\u306e\u8a18\u4e8b\u306f\u3001\u5b9f\u969b\u306e\u30c1\u30fc\u30e0\u3067\u3042\u308b\u958b\u767a\u8005\u306e\u597d\u5947\u5fc3\u3092\u304d\u3063\u304b\u3051\u306b\u4f1a\u793e\u5168\u4f53\u304c\u5909\u9769\u3059\u308b\u307e\u3067\u306e Kotlin \u306e\u5c0e\u5165\u7d4c\u7def\u3092\u8ffd\u3063\u305f\u300c<\/em><strong><em>Java \u4e3b\u4f53\u306e\u74b0\u5883\u3067 Kotlin \u306e\u5c0e\u5165\u3092\u6210\u529f\u3055\u305b\u308b\u305f\u3081\u306e\u7a76\u6975\u30ac\u30a4\u30c9<\/em><\/strong><em>\u300d\u9023\u8f09\u8a18\u4e8b\u306e\u7b2c 3 \u56de\u3067\u3059\u3002<\/em><\/p>\n<p><strong>\u3053\u306e\u9023\u8f09\u306b\u542b\u307e\u308c\u308b\u5404\u56de\u306e\u30bf\u30a4\u30c8\u30eb:<\/strong><\/p>\n<ol>\n<li><a href=\"https:\/\/blog.jetbrains.com\/ja\/kotlin\/2025\/12\/getting-started-with-kotlin-for-java-developers\/\" target=\"_blank\" rel=\"noreferrer noopener\">Java \u958b\u767a\u8005\u5411\u3051 Kotlin \u306e\u57fa\u790e<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/ja\/kotlin\/2026\/01\/evaluating-kotlin-in-real-projects\/\" target=\"_blank\" rel=\"noreferrer noopener\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/ja\/kotlin\/2026\/01\/evaluating-kotlin-in-real-projects\/\">\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3051\u308b Kotlin \u306e\u8a55\u4fa1\u624b\u6cd5<\/a><\/li>\n<li><a href=\"https:\/\/blog.jetbrains.com\/ja\/kotlin\/2026\/01\/growing-kotlin-adoption-in-your-company\/\" target=\"_blank\" rel=\"noreferrer noopener\">\u4f01\u696d\u306b\u304a\u3051\u308b Kotlin \u5c0e\u5165\u30fb\u6d3b\u7528\u306e\u63a8\u9032<\/a><\/li>\n<\/ol>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\" \/>\n<h2 class=\"wp-block-heading\"><strong>\u5468\u77e5\u6d3b\u52d5: \u5468\u308a\u306e\u958b\u767a\u8005\u306e\u5fc3\u3068\u652f\u6301\u3092\u52dd\u3061\u53d6\u308b<\/strong><\/h2>\n<p>\u3053\u308c\u307e\u3067\u306e\u53d6\u308a\u7d44\u307f\u306b\u3088\u308a\u3001\u4e3b\u529b\u30c1\u30fc\u30e0\u306b Kotlin \u306e\u30e1\u30ea\u30c3\u30c8\u3092\u5341\u5206\u306b\u7406\u89e3\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002 \u6b21\u306f\u5c0e\u5165\u3092\u62e1\u5927\u3059\u308b\u305f\u3081\u306e\u91cd\u8981\u306a\u6bb5\u968e\u306b\u9032\u307f\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u6bb5\u968e\u3067\u306f\u3001\u61d0\u7591\u7684\u306a Java \u958b\u767a\u8005\u306e\u5fc3\u3068\u652f\u6301\u3092\u52dd\u3061\u53d6\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002 \u3053\u3053\u3067\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30cf\u30fc\u30c9\u9762\u3068\u30bd\u30d5\u30c8\u9762\u304c\u7d50\u679c\u3092\u5de6\u53f3\u3057\u307e\u3059\u3002<\/p>\n<p>\u30cf\u30fc\u30c9\u9762: \u30b3\u30fc\u30c9<\/p>\n<ul>\n<li>\u30b3\u30fc\u30c9\u3067\u9b45\u529b\u3092\u4f1d\u3048\u308b<\/li>\n<\/ul>\n<p>\u30bd\u30d5\u30c8\u9762: \u958b\u767a\u8005\u3092\u652f\u63f4\u3057\u3066\u3064\u306a\u304c\u308a\u3092\u7bc9\u304f<\/p>\n<ul>\n<li>\u30aa\u30f3\u30dc\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u5bb9\u6613\u306b\u3059\u308b<\/li>\n<li>\u72ec\u5b66\u306e\u8cc7\u6599\u3092\u63d0\u4f9b\u3059\u308b<\/li>\n<li>\u793e\u5185\u306b Kotlin \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u4f5c\u308b<\/li>\n<li>\u7126\u308a\u306f\u7981\u7269\u2026<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><strong>\u30b3\u30fc\u30c9\u3067\u9b45\u529b\u3092\u4f1d\u3048\u308b<\/strong><\/h3>\n<p>Kotlin \u3067\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\uff08\u518d\uff09\u4f5c\u6210\u3057\u3066\u5f97\u305f\u7d4c\u9a13\u3092\u6df1\u6398\u308a\u3057\u3001\u305d\u306e\u30e1\u30ea\u30c3\u30c8\u3092\u5177\u4f53\u7684\u306b\u5206\u304b\u308a\u3084\u3059\u304f\u793a\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<ul>\n<li><strong>\u8aac\u660e\u3059\u308b\u3088\u308a\u5b9f\u7269\u3092\u898b\u305b\u308b<\/strong>: Java \u3092 Kotlin \u306e\u30b9\u30cb\u30da\u30c3\u30c8\u3068\u6bd4\u8f03\u3059\u308b\u3053\u3068\u3067\u3001Kotlin \u304c\u3082\u305f\u3089\u3059\u7c21\u6f54\u3055\u3092\u793a\u3057\u307e\u3059\u3002<\/li>\n<li><strong>\u5168\u4f53\u7684\u306a\u8996\u70b9\u3067\u652f\u914d\u7684\u30d1\u30e9\u30c0\u30a4\u30e0\u306b\u6ce8\u76ee\u3059\u308b<\/strong>: Kotlin \u306f\u5358\u306b Java \u3068<em>\u7570\u306a\u3063\u3066\u3044\u308b<\/em>\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002Kotlin \u306f\u5b89\u5168\u6027\u3001\u6700\u5927\u9650\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u3092\u53ef\u80fd\u306b\u3059\u308b\u7c21\u6f54\u3055\u3001\u7b2c\u4e00\u7d1a\u5e02\u6c11\u3068\u3057\u3066\u306e\u95a2\u6570\u3001\u304a\u3088\u3073\u62e1\u5f35\u6027\u3092\u57fa\u790e\u3068\u3057\u3066\u304a\u308a\u3001\u3053\u308c\u3089\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067 Java \u306e\u6839\u672c\u7684\u306a\u6b20\u70b9\u3092\u89e3\u6d88\u3057\u306a\u304c\u3089\u3001Java \u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u3068\u306e\u5b8c\u5168\u306a\u76f8\u4e92\u904b\u7528\u6027\u3082\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ul>\n<p>\u4ee5\u4e0b\u306b\u3044\u304f\u3064\u304b\u5177\u4f53\u7684\u306a\u4f8b\u3092\u6319\u3052\u307e\u3059\u3002<\/p>\n<p><strong>1. null \u5b89\u5168\u6027: \u591a\u5927\u306a\u640d\u5931\u3092\u751f\u3080\u30df\u30b9\u304c\u306a\u304f\u306a\u308b\u00a0<\/strong><\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/This is why we have the billion-dollar mistake (not only in Java\u2026)\nBooking booking = null; \/\/\ud83e\udd28 This is allowed but causes:\nbooking.destination; \/\/Runtime error \ud83d\ude31\n\nOptional booking = null; \/\/Optionals aren\u2019t safe from null either: \ud83e\udd28\nbooking.map(Destination::destination); \/\/Runtime error \ud83d\ude31<\/pre>\n<p>Java \u306b\u306f Optional \u3084\u30a2\u30ce\u30c6\u30fc\u30b7\u30e7\u30f3\uff08<code>@NotNull<\/code> \u306a\u3069\uff09\u306e\u3088\u3046\u306a null \u5b89\u5168\u6027\u6a5f\u80fd\u304c\u8ffd\u52a0\u3055\u308c\u3066\u304d\u307e\u3057\u305f\u304c\u3001\u3053\u306e\u6839\u672c\u7684\u306a\u554f\u984c\u306f\u89e3\u6c7a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 \u307e\u305f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 <a href=\"https:\/\/openjdk.org\/projects\/valhalla\/\" target=\"_blank\" rel=\"noreferrer noopener\">Valhalla<\/a>\uff08null \u975e\u8a31\u5bb9\u578b\u3068 null \u8a31\u5bb9\u578b\uff09\u306f Java \u306b null \u5b89\u5168\u6027\u3092\u5c0e\u5165\u3059\u308b\u3082\u306e\u3068\u3044\u3046\u3088\u308a\u3082\u3001\u3088\u308a\u591a\u304f\u306e\u9078\u629e\u80a2\u3092\u63d0\u4f9b\u3059\u308b\u3082\u306e\u3067\u3059\u3002<\/p>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/Important to realize that null is very restricted in Kotlin:\nval booking:Booking? = null \/\/\u2026null can only be assigned to Nullable types \u2705\u00a0\nval booking:Booking = null \/\/null assigned to a Non-nullable types yields a Compilation error \ud83d\ude03\u00a0\n\nbooking.destination \/\/unsafely accessing a nullable type directly causes a Compilation error \ud83d\ude03\nbooking?.destination \/\/only safe access is possible\u00a0 \u2705<\/pre>\n<p>Kotlin \u306e null \u5b89\u5168\u6027\u304c\u7d20\u6674\u3089\u3057\u3044\u306e\u306f\u3001\u5b89\u5168\u3067\u3042\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u4f7f\u3044\u52dd\u624b\u306b\u3082\u512a\u308c\u3066\u3044\u308b\u3053\u3068\u3067\u3059\u3002 \u4ee5\u4e0b\u306f\u77db\u76fe\u3059\u308b\u3053\u3068\u3092\u540c\u6642\u306b\u5b9f\u73fe\u3055\u305b\u3088\u3046\u3068\u3057\u3066\u3044\u308b\u5178\u578b\u7684\u306a\u4f8b\u3067\u3059\u3002<\/p>\n<p>\u6b21\u306e\u30c9\u30e1\u30a4\u30f3\u304c\u3042\u308b\u3068\u3057\u307e\u3059\u3002<\/p>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">data class Booking(val destination:Destination? = null)\ndata class Destination(val hotel:Hotel? = null)\ndata class Hotel(val name:String, val stars:Int? = null)<\/pre>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public record Booking(Optional destination) {\n\n\u00a0\u00a0\u00a0public Booking() { this(Optional.empty()); }\n\n\u00a0\u00a0\u00a0public Booking(Destination destination) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this(Optional.ofNullable(destination));\n\u00a0\u00a0\u00a0}\n}\n\npublic record Destination(Optional hotel) {\n\n\u00a0\u00a0\u00a0public Destination() { this(Optional.empty()); }\n\n\u00a0\u00a0\u00a0public Destination(Hotel hotel) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this(Optional.ofNullable(hotel));\n\u00a0\u00a0\u00a0}\n}\n\npublic record Hotel(String name, Optional stars) {\n\n\u00a0\u00a0\u00a0public Hotel(String name) {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this(name, Optional.empty());\n\n\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0public Hotel(String name, Integer stars) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0this(name, Optional.ofNullable(stars));\n\u00a0\u00a0\u00a0}\n}<\/pre>\n<p><strong>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u69cb\u7bc9<\/strong><\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/Because Optional is a wrapper, the number of nested objects grows, which doesn\u2019t help readability\nfinal Optional booking = Optional.of(new Booking(\n      Optional.of(new Destination(Optional.of(\n            new Hotel(\"Sunset Paradise\", 5))))));<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/Since nullability is part of the type system, no wrapper is needed: The required type or null can be used.\u00a0\nval booking:Booking? = Booking(Destination(Hotel(\"Sunset Paradise\", 5)))<\/pre>\n<p><strong>\u30cd\u30b9\u30c8\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5168\u63a2\u7d22<\/strong><\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/traversing a graph of Optionals requires extensive unwrapping\nfinal var stars = \"*\".repeat(booking\n\u00a0\u00a0                        .flatMap(Booking::getDestination)\n                          .flatMap(Destination::getHotel)\n                          .map(Hotel::getStars).orElse(0)); \/\/-&gt; \"*****\"<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/Easily traverse a graph of nullable types with: \u2018?\u2019, use\u00a0 ?: for the \u2018else\u2019 case.\nval stars = \"*\".repeat(booking?.destination?.hotel?.stars ?: 0) \/\/-&gt; \"*****\"<\/pre>\n<p><strong>\u30cd\u30b9\u30c8\u3057\u305f\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5c55\u958b<\/strong><\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/extensive unwrapping is also needed for printing a leaf\u00a0\nbooking.getDestination()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.flatMap(Destination::getHotel)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.map(Hotel::getName)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.map(String::toUpperCase)\n\u00a0\u00a0\u00a0      .ifPresent(System.out::println);<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/In Kotlin we have two elegant options:\n\/\/1. we can again traverse the graph with \u2018?\u2019\nbooking?.destination?.hotel.?name?.uppercase()?.also(::println)\n\n\/\/2. We can make use of Kotlin\u2019s smart-cast feature\nif(booking?.destination?.hotel != null) {\n\u00a0\u00a0\u00a0\/\/The compiler has checked that all the elements in the object graph are not null, so we can access the elements as if they were non-nullable types\n\u00a0\u00a0\u00a0println(booking.destination.hotel.uppercase())\n}<\/pre>\n<p>Java \u3067 null \u5b89\u5168\u6027\u304c\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044\u3053\u3068\u306f\u958b\u767a\u8005\u306e\u5927\u304d\u306a\u60a9\u307f\u306e\u7a2e\u3067\u3042\u308a\u3001\u9632\u5fa1\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3084\u8907\u6570\u306e\u7570\u306a\u308b null \u8a31\u5bb9\u6027\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30c8\u306e\u6df7\u5728\uff08\u3042\u308b\u3044\u306f\u305d\u306e\u3088\u306a\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30c8\u306e\u4e0d\u5728\uff09\u3092\u62db\u304d\u3001\u5197\u9577\u3055\u304c\u5897\u3059\u539f\u56e0\u306b\u306a\u308a\u307e\u3059\u3002 \u3055\u3089\u306b\u3001NullPointerExceptions \u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u30af\u30e9\u30c3\u30b7\u30e5\u3059\u308b\u539f\u56e0\u306e\u7d04 3 \u5206\u306e 1 \u3092\u5360\u3081\u3066\u3044\u307e\u3059\uff08<a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2020\/11\/productive-server-side-development-with-kotlin-stories\/\" target=\"_blank\" rel=\"noreferrer noopener\">JetBrains \u30d6\u30ed\u30b0<\/a>\uff09\u3002 \u3053\u306e\u3088\u3046\u306a\u5b9f\u884c\u6642\u306e\u969c\u5bb3\u306f\u3001Kotlin \u306e\u30b3\u30f3\u30d1\u30a4\u30eb\u6642 null \u30c1\u30a7\u30c3\u30af\u306b\u3088\u3063\u3066\u5b8c\u5168\u306b\u9632\u3052\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u4eca\u3067\u3082 <strong>null \u5b89\u5168\u6027\u306f Kotlin \u306b\u79fb\u884c\u3059\u308b\u4e3b\u306a\u52d5\u6a5f<\/strong>\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>2. \u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306f\u6575\u3067\u306f\u306a\u304f\u5473\u65b9\u3067\u3042\u308b<\/strong><\/p>\n<p>Spring \u306e\u4f5c\u8005\u3067\u3042\u308b Rod Johnson \u6c0f\u306f\u3001Kotlin \u3092\u8a66\u3059\u304d\u3063\u304b\u3051\u3068\u306a\u3063\u305f\u306e\u306f null \u8a31\u5bb9\u578b\u3067\u306f\u306a\u304f\u3001\u8907\u96d1\u3059\u304e\u308b Java Streams API \u3060\u3063\u305f\u3068\u6700\u8fd1\u306e\u30a4\u30f3\u30bf\u30d3\u30e5\u30fc\u300c<a href=\"https:\/\/youtu.be\/Rx3XZoqbi78?t=1018\" target=\"_blank\" rel=\"noreferrer noopener\">Creator of Spring: No desire to write Java<\/a>\u300d\uff08Spring \u306e\u4f5c\u8005: Java \u3092\u66f8\u304f\u6c17\u306f\u306a\u3044\uff09\u3067\u8ff0\u3079\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u4f8b\u306f\u3001Java Sreams API \u304c\u3072\u3069\u304f\u8907\u96d1\u306b\u306a\u3063\u3066\u3044\u308b\u5404\u7a2e\u306e\u539f\u56e0\u3068 Kotlin \u304c\u3069\u306e\u3088\u3046\u306b\u3059\u3079\u3066\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3057\u3066\u3044\u308b\u306e\u304b\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public record Product(String name, int... ratings){}\nList products = List.of(\n\u00a0\u00a0new Product(\"gadget\", 9, 8, 7),\u00a0\n\u00a0\u00a0new Product(\"goody\", 10, 9)\n);\n\nMap&lt;String, Integer&gt; maxRatingsPerProduct =\n\n\u00a0\u00a0\u00a0\/\/\ud83e\udd28 1. Stream introduces indirection\n\u00a0\u00a0\u00a0products.stream()\n\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\ud83e\udd28 1. Always to and from Stream conversion\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.collect(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\ud83e\udd28 2. Lacks extension methods, so wrappers are required\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Collectors.groupingBy(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Product::name,\n\u00a0 \u00a0         \/\/\ud83e\udd28 2. Again\u2026\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Collectors.mapping( groupedProducts -&gt;\n\u00a0               \/\/\ud83e\udd28 3. (too) low-level types, arrays, and primitives cause extra complexity\n\u00a0               \/\/\ud83e\udd28 4. No API on Array, always wrap in stream\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Arrays.stream(groupedProducts.ratings())\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 .max()\n                      \/\/\ud83e\udd28 5. Extra verbosity due to Optional\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0         .orElse(0.0),\n\u00a0              \/\/\ud83e\udd28 6. No named arguments: what does this do?\n\u00a0               Collectors.reducing(0, Integer::max)\n              )\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ));<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/\ud83d\ude03 rich and uniform Collection API - even on Java collections - due to extension methods\nval maxRatingsPerProduct = products.\n      .groupBy { it.name }\n      .mapValues { (_, groupedProducts) -&gt; \/\/\ud83d\ude03 destructuring for semantic precision\n            \/\/\ud83d\ude03 built-in nullability support, and the same API for\u00a0\n            \/\/arrays like other Collections\n            groupedProducts.flatMap { it.ratings }\n                  .maxOrNull() ?: 0\u00a0\n            }\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/pre>\n<p>Kotlin \u3067\u306f\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u7d71\u4e00\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u7570\u306a\u308b\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u578b\u540c\u58eb\u306e\u5909\u63db\u306f\u975e\u5e38\u306b\u7c21\u5358\u3067\u3059\u3002<br \/><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">int[] numbers = {1, 3, 3, 5, 2};\n\nSet unique = Arrays.stream(numbers).boxed().collect(Collectors.toSet());\n\nMap&lt;Integer, Boolean&gt; evenOrOdd = unique.stream()\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.collect(Collectors.toMap(\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0n -&gt; n,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0n -&gt; n % 2 == 0));<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">val numbers = arrayOf(1, 3, 3, 5, 2)\n\nval unique: Set = numbers.toSet() \/\/\ud83d\ude03 simply call to to do the conversion\n\nval evenOrOdd: Map&lt;Int, Boolean&gt; = unique.associateWith { it % 2 == 0 }<\/pre>\n<p><strong>\u6700\u7d42\u7684\u306b\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u52b9\u679c\u304c\u5f97\u3089\u308c\u307e\u3059\u3002<\/strong><\/p>\n<ul>\n<li><strong>\u6a5f\u80fd\u8c4a\u5bcc\u3067\u76f4\u611f\u7684\u306a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3 API:<\/strong> \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306f\u30cd\u30b9\u30c8\u3057\u305f\u30b3\u30ec\u30af\u30bf\u30fc\u306e\u547c\u3073\u51fa\u3057\u5185\u306b\u5b58\u5728\u305b\u305a\u3001\u82f1\u8a9e\u306e\u3088\u3046\u306b\u5de6\u304b\u3089\u53f3\u306b\u8aad\u307f\u53d6\u308c\u307e\u3059\u3002<\/li>\n<li><strong>\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u3068\u8907\u96d1\u3055\u306e\u6e1b\u5c11:<\/strong> Collectors.groupingBy\u3001Stream\u3001Optional\u3001Arrays.stream \u306e\u3044\u305a\u308c\u3082\u5b58\u5728\u3057\u307e\u305b\u3093\u3002<\/li>\n<li><strong>\u30e1\u30f3\u30bf\u30eb\u30e2\u30c7\u30eb\u306e\u7d71\u4e00\u5316:<\/strong> <code>List<\/code>\u3001<code>Set<\/code>\u3001<code>Array<\/code>\u3001\u307e\u305f\u306f\u30d7\u30ea\u30df\u30c6\u30a3\u30d6\u914d\u5217\u306e\u3069\u308c\u304b\u3089\u59cb\u3081\u3066\u3082\u3001<em>\u540c\u3058<\/em>\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u6f14\u7b97\u5b50\u306b\u5230\u9054\u3057\u307e\u3059\u3002<\/li>\n<li><strong>\u82e6\u306b\u306a\u3089\u306a\u3044\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9:<\/strong> \u30b3\u30f3\u30d1\u30a4\u30e9\u30fc\u304c\u3084\u3080\u3092\u5f97\u306a\u3044\u5834\u5408\u306b\u306e\u307f\u30dc\u30af\u30b7\u30f3\u30b0\/\u30a2\u30f3\u30dc\u30af\u30b7\u30f3\u30b0\u3092\u633f\u5165\u3059\u308b\u305f\u3081\u3001\u958b\u767a\u8005\u306f\u901a\u5e38\u306e\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<li><strong>null \u5b89\u5168\u6027\u306e\u7d44\u307f\u8fbc\u307f:<\/strong> \u30b3\u30ec\u30af\u30b7\u30e7\u30f3 API \u306f\u3001\u4e3b\u306b <code>orNull(...)<\/code> \u63a5\u5c3e\u8f9e\u3092\u6301\u3064\u5404\u7a2e\u30d8\u30eb\u30d1\u30fc\u306b\u3088\u3063\u3066 null \u8a31\u5bb9\u6027\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002<\/li>\n<li><strong>\u6163\u7528\u7684\u306a\u30e9\u30c3\u30d1\u30fc\u306b\u3088\u308b\u9055\u548c\u611f\u306e\u306a\u3044 Java \u3068\u306e\u76f8\u4e92\u904b\u7528\u6027: <\/strong>\u62e1\u5f35\u30e1\u30bd\u30c3\u30c9\u304c\u3042\u308b\u305f\u3081\u3001\u300c\u4e21\u65b9\u306e\u3044\u3044\u3068\u3053\u53d6\u308a\u300d\u304c\u3067\u304d\u307e\u3059\u3002\u3064\u307e\u308a\u3001Java \u306e\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306b\u52a0\u3048\u3066\u6a5f\u80fd\u8c4a\u5bcc\u306a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3067\u304d\u308b\u306e\u3067\u3059\u3002<\/li>\n<\/ul>\n<p>\u8981\u3059\u308b\u306b\u3001Kotlin \u306f\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3001\u30de\u30c3\u30d4\u30f3\u30b0\u3001\u30b0\u30eb\u30fc\u30d7\u5316\u3068\u3044\u3063\u305f\u65e5\u5e38\u7684\u306b\u4f7f\u7528\u3059\u308b\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u30bf\u30b9\u30af\u3092\u7b2c\u4e00\u7d1a\u306e<em>\u30b3\u30f3\u30dd\u30fc\u30b6\u30d6\u30eb<\/em>\u95a2\u6570\u306b\u683c\u4e0a\u3052\u3059\u308b\u305f\u3081\u3001\u5fc5\u8981\u306a<em>\u3053\u3068<\/em>\u3092\u305d\u306e\u5b9f\u73fe<em>\u65b9\u6cd5\u306b<\/em>\u7e1b\u3089\u308c\u308b\u3053\u3068\u306a\u304f\u8868\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><strong>3. \u30c1\u30a7\u30c3\u30af\u4f8b\u5916\u3092\u4f7f\u7528\u3057\u306a\u304f\u3066\u3082\u5b89\u5168\u6027\u306e\u9ad8\u3044 Kotlin \u30b3\u30fc\u30c9<\/strong><\/p>\n<p>Java \u306f\u30c1\u30a7\u30c3\u30af\u4f8b\u5916\u3092\u73fe\u5728\u3067\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u6570\u5c11\u306a\u3044\u8a00\u8a9e\u306e 1 \u3064\u3067\u3059\u3002 \u5143\u3005\u306f\u5b89\u5168\u6027\u3092\u4fdd\u8a3c\u3059\u308b\u6a5f\u80fd\u3068\u3057\u3066\u5b9f\u88c5\u3055\u308c\u305f\u3082\u306e\u3067\u3059\u304c\u3001\u305d\u306e\u7d04\u675f\u306f\u3044\u307e\u3060\u679c\u305f\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 \u305d\u306e\u5197\u9577\u3055\u3001\u4f55\u3082\u884c\u308f\u306a\u3044\u304b\u4f8b\u5916\u3092 <code>RuntimeException<\/code> \u3068\u3057\u3066\u518d\u30b9\u30ed\u30fc\u3059\u308b\u7121\u610f\u5473\u306a catch \u30d6\u30ed\u30c3\u30af\u3001\u30e9\u30e0\u30c0\u3068\u306e\u9023\u643a\u306e\u60aa\u3055\u306f\u30b3\u30fc\u30c9\u306e\u5b89\u5168\u6027\u3092\u9ad8\u3081\u308b\u3069\u3053\u308d\u304b\u3001\u969c\u5bb3\u3092\u3082\u305f\u3089\u3059\u3044\u304f\u3064\u304b\u306e\u8981\u56e0\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>Kotlin \u306f\u4ed6\u306e\u307b\u307c\u3059\u3079\u3066\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\uff08C#\u3001Python\u3001Scala\u3001Rust\u3001Go \u306a\u3069\uff09\u3068\u540c\u69d8\u306b\u3001\u56de\u5fa9\u4e0d\u53ef\u80fd\u306a\u72b6\u6cc1\u3067\u306e\u307f\u4f8b\u5916\u3092\u4f7f\u7528\u3059\u308b\u3068\u3044\u3046\u5b9f\u8a3c\u6e08\u307f\u306e\u30d1\u30e9\u30c0\u30a4\u30e0\u306b\u5f93\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306e\u4f8b\u306f\u30c1\u30a7\u30c3\u30af\u4f8b\u5916\u304c\u5b89\u5168\u6027\u3092\u4e00\u5207\u9ad8\u3081\u305a\u3001\u30b3\u30fc\u30c9\u306b\u3082\u305f\u3089\u3057\u3066\u3044\u308b\u969c\u5bb3\u3092\u660e\u78ba\u306b\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public String downloadAndGetLargestFile(List urls) {\n\u00a0\u00a0\u00a0List contents = urls.stream().map(urlStr -&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Optional optional;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0optional = Optional.of(new URI(urlStr).toURL());\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\ud83e\udd28 Within lambdas checked exceptions are not supported and must always be caught...\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (URISyntaxException | MalformedURLException e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0optional = Optional.empty();\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return optional;\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}).filter(Optional::isPresent) \u00a0 \u00a0 \u00a0 \/\/Quite a mouthful to get rid of the Optional...\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.map(Optional::get)\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0.map(url -&gt; {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0try (InputStream is = url.openStream()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return new String(is.readAllBytes(), StandardCharsets.UTF_8);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} catch (IOException e) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\ud83e\udd28\u2026 or re-thrown, which is annoying, I don\u2019t really care about IOE\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0throw new IllegalArgumentException(e);\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}).toList();\n\u00a0\u00a0\u00a0\/\/\ud83e\udd28 An empty List results in a NoSuchElementException, so why is it not checked? The chance that the List is empty is as high as the other two cases above...\n\u00a0\u00a0\u00a0return Collections.max(contents);\n}<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/\ud83d\ude03 safe return type\nfun downloadAndGetLargestFile(urls: List): String? =\n\u00a0\u00a0\u00a0urls.mapNotNull { \u00a0\u00a0\u00a0\/\/\ud83d\ude03 convenient utility methods to rid of null\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\ud83d\ude03 try catch is possible, yet runCatching is an elegant way to convert an exception to null\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0runCatching { URI(it).toURL() }.getOrNull()\n\u00a0\u00a0\u00a0}.maxOfOrNull{ \u00a0\/\/\ud83d\ude03 safe way to retrieve the max value\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0it.openStream().use{ it.reader().readText() } \u00a0\/\/\ud83d\ude03 convenient extension methods to make java.io streams fluent\n\u00a0\u00a0\u00a0}<\/pre>\n<p><strong>4. \u7b2c\u4e00\u7d1a\u5e02\u6c11\u3068\u3057\u3066\u306e\u95a2\u6570<\/strong><\/p>\n<p>Kotlin \u306f\u95a2\u6570\u3092\u7b2c\u4e00\u7d1a\u5e02\u6c11\u3068\u3057\u3066\u6271\u3063\u3066\u3044\u307e\u3059\u3002Java \u7d4c\u9a13\u8005\u306f\u305d\u306e\u610f\u5473\u3068\u91cd\u8981\u6027\u306b\u7591\u554f\u3092\u6301\u3064\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002<\/p>\n<p>\u4e3b\u306a\u9055\u3044\u306f Java \u306e\u9650\u5b9a\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3042\u308a\u307e\u3059\u3002Java \u306e\u6a5f\u80fd\u306f\u4e3b\u306b\u30e9\u30e0\u30c0\u3092\u4ecb\u3057\u305f\u547c\u3073\u51fa\u3057\u5074\u306b\u91cd\u70b9\u3092\u7f6e\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u5ba3\u8a00\u5074\u306f\u5197\u9577\u3067\u76f4\u611f\u6027\u306b\u52a3\u308b\u95a2\u6570\u578b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306b\u7d50\u3073\u4ed8\u3044\u305f\u307e\u307e\u3067\u3059\u3002 Kotlin \u3067\u306f\u30dc\u30a4\u30e9\u30fc\u30d7\u30ec\u30fc\u30c8\u306a\u3057\u3067\u95a2\u6570\u3092\u5b9a\u7fa9\u3001\u53d7\u3051\u6e21\u3057\u3001\u8fd4\u5374\u3001\u4f5c\u6210\u3067\u304d\u308b\u305f\u3081\u3001\u95a2\u6570\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u8868\u73fe\u529b\u304c\u3055\u3089\u306b\u5f37\u5316\u3055\u308c\u3001\u81ea\u7136\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">public void doWithImage(\n      URL url,\u00a0\n      \/\/\ud83e\udd28 Function interfaces introduce an indirection: because we don\u2019t see the signature of a Function we don\u2019t know what a\u00a0 BiConsumer does, unless we look it up\n      BiConsumer&lt;String, BufferedImage&gt; f) throws IOException {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0f.accept(url.getFile(), ImageIO.read(url));\n}\n\n\/\/\ud83e\udd28 Same here\npublic void debug(Supplier f) {\n\u00a0\u00a0\u00a0if(isDebugEnabled()) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0logger.debug(\"Debug: \" + f.get());\n\u00a0\u00a0\u00a0}\n}\n\n\/\/\ud83e\udd28 calling no-argument lambdas is verbose\ndebug(() -&gt; \"expensive concat\".repeat(1000));<\/pre>\n<p><strong>Kotlin<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">fun doWithImage(\n\u00a0\u00a0\u00a0url: URL,\n\u00a0 \/\/\ud83d\ude03 Kotlin has a syntax for declaring functions: from the signature, we see what goes in and what goes out\u00a0\n\u00a0\u00a0\u00a0f:(String, BufferedImage) -&gt; Unit) =\u00a0\n      f(url.file, ImageIO.read(url))\n\n\u00a0\u00a0\/\/\ud83d\ude03 same here: nothing goes in, a String goes out\nfun debug(msg: () -&gt; String) {\n\u00a0\u00a0\u00a0if(isDebugEnabled) {\n            logger.debug(msg())\n\u00a0\u00a0\u00a0}\n}\n\n\/\/\ud83d\ude03 convenient syntax to pass a lambda: {}\ndebug{\"expensive concat\".repeat(1000)}<\/pre>\n<p>Kotlin \u3067\u306f\u660e\u78ba\u3067\u7c21\u6f54\u306a\u69cb\u6587\u3067\u95a2\u6570\u3092\u5ba3\u8a00\u3067\u304d\u307e\u3059\u3002\u30b7\u30b0\u30cd\u30c1\u30e3\u30fc\u3060\u3051\u3067\u5165\u51fa\u529b\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u3059\u3050\u306b\u7406\u89e3\u3067\u304d\u308b\u305f\u3081\u3001\u5916\u90e8\u306e\u95a2\u6570\u578b\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u78ba\u8a8d\u3057\u306b\u884c\u304f\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p>Java \u306f\u305d\u306e\u95a2\u6570\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u6a5f\u80fd\u3092\u5197\u9577\u3067\u8907\u96d1\u306a\u30b7\u30b0\u30cd\u30c1\u30e3\u30fc\u3092\u6301\u3064\u5927\u91cf\u306e <code>java.util.function.*<\/code> \u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u4e00\u5f0f\u3092\u901a\u3057\u3066\u300c\u6d41\u51fa\u300d\u3055\u305b\u3066\u3044\u308b\u305f\u3081\u3001\u591a\u304f\u306e\u5834\u5408\u306f\u95a2\u6570\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u4f7f\u7528\u3057\u306b\u304f\u304f\u306a\u3063\u3066\u3044\u307e\u3059\u3002 \u3053\u308c\u306b\u53cd\u3057\u3066 Kotlin \u306f\u95a2\u6570\u3092\u7b2c\u4e00\u7d1a\u5e02\u6c11\u3068\u3057\u3066\u6271\u3063\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u3088\u3046\u306a\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306f\u958b\u767a\u8005\u304b\u3089\u306f\u898b\u3048\u306a\u304f\u306a\u3063\u3066\u3044\u308b\u3082\u306e\u306e\u3001Java \u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u3068\u5b8c\u5168\u306a\u76f8\u4e92\u904b\u7528\u6027\u3092\u7dad\u6301\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-655829\" style=\"aspect-ratio: 1.1355932203389831; width: 510px; height: auto;\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/11\/unnamed-16.png\" alt=\"\" width=\"804\" height=\"708\" \/><\/figure>\n<p>\u7d50\u679c\u7684\u306b Kotlin \u306e\u307b\u3046\u304c\u95a2\u6570\u3092\u306f\u308b\u304b\u306b\u5358\u7d14\u660e\u5feb\u304b\u3064\u76f4\u611f\u7684\u306b\u4f7f\u7528\u3067\u304d\u308b\u305f\u3081\u3001\u3053\u306e\u5f37\u529b\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u6982\u5ff5\u3092\u81ea\u4f5c\u306e\u30b3\u30fc\u30c9\u3067\u6d3b\u7528\u3059\u308b\u30cf\u30fc\u30c9\u30eb\u304c\u5927\u5e45\u306b\u4f4e\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><strong>5. \u624b\u9593\u306e\u3044\u3089\u306a\u3044\u30b3\u30eb\u30fc\u30c1\u30f3\u306b\u3088\u308b\u4e26\u884c\u6027<\/strong><\/p>\n<p>Java \u3067\u306f\u9ad8\u3044\u30b9\u30eb\u30fc\u30d7\u30c3\u30c8\u30011 \u3064\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5185\u3067\u306e\u4e26\u5217\u51e6\u7406\u3001\u307e\u305f\u306f\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u304c\u5fc5\u8981\u306a\u5834\u5408\u3001Spring WebFlux\u3001Vert.X\u3001Quarkus \u306a\u3069\u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u5229\u7528\u3067\u304d\u308b Reactor \u3084 RxJava \u306a\u3069\u306e\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30e9\u30a4\u30d6\u30e9\u30ea\u3057\u304b\u9078\u629e\u80a2\u304c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p>\u3053\u308c\u3089\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u8907\u96d1\u3067\u3042\u308a\u3001\u95a2\u6570\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u5f37\u3044\u3089\u308c\u308b\u3068\u3044\u3046\u554f\u984c\u304c\u3042\u308b\u3053\u3068\u304c\u77e5\u3089\u308c\u3066\u3044\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u7fd2\u5f97\u304c\u56f0\u96e3\u3067\u3042\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u8ca0\u8377\u304c\u304b\u304b\u3063\u3066\u3044\u308b\u72b6\u6cc1\u3067\u60b2\u60e8\u306a\u7d50\u679c\u3092\u62db\u304f\u53ef\u80fd\u6027\u306e\u3042\u308b\u30a8\u30e9\u30fc\u3092\u975e\u5e38\u306b\u7c21\u5358\u306b\u767a\u751f\u3055\u305b\u3066\u3057\u307e\u3044\u307e\u3059\u3002 \u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u4e3b\u6d41\u306b\u306a\u3063\u305f\u3053\u3068\u304c\u306a\u3044\u306e\u306f\u3053\u308c\u304c\u539f\u56e0\u3060\u3068\u601d\u308f\u308c\u307e\u3059\u3002<\/p>\n<div class=\"alert \">\n<p><strong>\u6ce8\u610f:<\/strong> \u4eee\u60f3\u30b9\u30ec\u30c3\u30c9\u306f\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u82e5\u5e72\u91cd\u8907\u3059\u308b\u90e8\u5206\u304c\u3042\u308a\u307e\u3059\u304c\u3001\u5f8c\u8005\u3092\u7f6e\u304d\u63db\u3048\u308b\u3082\u306e\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 \u4eee\u60f3\u30b9\u30ec\u30c3\u30c9\u306f\u30ce\u30f3\u30d6\u30ed\u30c3\u30ad\u30f3\u30b0 I\/O \u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u4e26\u884c\u51e6\u7406\u3084\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30b9\u30c8\u30ea\u30fc\u30e0\u306a\u3069\u306e\u6a5f\u80fd\u306f\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\u3002 \u4e3b\u8981\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u69cb\u9020\u5316\u4e26\u884c\u6027\u3068\u30b9\u30b3\u30fc\u30d7\u5024\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u3088\u3046\u306b\u306a\u308c\u3070\u3001\u305d\u308c\u3089\u306b\u3088\u3063\u3066\u4e26\u884c\u51e6\u7406\u3082\u53ef\u80fd\u306b\u306a\u308b\u3067\u3057\u3087\u3046\u3002 \u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30b9\u30c8\u30ea\u30fc\u30e0\u306e\u5834\u5408\u306f\u3001\u5e38\u306b\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u30e9\u30a4\u30d6\u30e9\u30ea\u306b\u983c\u308b\u3053\u3068\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<\/div>\n<p>\u3067\u306f\u3001\u3042\u306a\u305f\u304c Spring Boot \u3092\u4f7f\u7528\u3059\u308b Java \u958b\u767a\u8005\u3067\u3042\u308a\u30011 \u3064\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u5185\u3067\u4e26\u884c\u547c\u3073\u51fa\u3057\u3092\u884c\u3044\u305f\u3044\u3068\u4eee\u5b9a\u3057\u307e\u3057\u3087\u3046\u3002 \u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30fc\u30c9\u304c\u5b8c\u6210\u3057\u3066\u3044\u308b\u3082\u306e\u3068\u3057\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@PostMapping(\"\/users\")\n@ResponseBody\n@Transactional\npublic Mono storeUser(@RequestBody User user) {\n\u00a0\u00a0\u00a0Mono avatarMono = avatarService.randomAvatar();\n\u00a0\u00a0\u00a0Mono validEmailMono = emailService.verifyEmail(user.getEmail());\n\u00a0\u00a0\u00a0\/\/\ud83e\udd28 what does \u2018zip\u2019 do?\n\u00a0\u00a0\u00a0return Mono.zip(avatarMono, validEmailMono).flatMap(tuple -&gt;\u00a0\n\u00a0      if(!tuple.getT2()) \/\/what is getT2()? It\u2019s the validEmail Boolean\u2026\n\u00a0\u00a0\u00a0     \/\/\ud83e\udd28 why can I not just throw an exception?\n\u00a0\u00a0\u00a0      Mono.error(new InvalidEmailException(\"Invalid Email\"));\n\u00a0      else personDao.save(UserBuilder.from(user)\n                                          .withAvatarUrl(tuple.getT1()));\n\u00a0\u00a0\u00a0\u00a0\u00a0);\u00a0\u00a0\n\u00a0\u00a0}<\/pre>\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u306f\u5b9f\u884c\u6642\u306e\u52d5\u4f5c\u3068\u3044\u3046\u89b3\u70b9\u304b\u3089\u306f\u7533\u3057\u5206\u306a\u304f\u6a5f\u80fd\u3057\u307e\u3059\u304c\u3001\u4e88\u671f\u305b\u305a\u8907\u96d1\u6975\u307e\u308a\u306a\u3044\u4f5c\u308a\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u30b3\u30fc\u30c9\u304c\u547c\u3073\u51fa\u3057\u30c1\u30a7\u30fc\u30f3\u5168\u4f53\u306b\u308f\u305f\u3063\u3066 <code>Mono\/Flux<\/code> \u306b\u652f\u914d\u3055\u308c\u3066\u304a\u308a\u3001\u3059\u3079\u3066\u306e\u30c9\u30e1\u30a4\u30f3\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u304c\u5f37\u5236\u7684\u306b\u30e9\u30c3\u30d7\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n<li><code>zip<\/code> \u3084 <code>flatMap<\/code> \u306a\u3069\u306e\u8907\u96d1\u306a\u6f14\u7b97\u5b50\u304c\u3042\u3061\u3053\u3061\u3067\u591a\u7528\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/li>\n<li>\u4f8b\u5916\u306e\u30b9\u30ed\u30fc\u306a\u3069\u306e\u6a19\u6e96\u7684\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u69cb\u6587\u3092\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002<\/li>\n<li>\u30b3\u30fc\u30c9\u306e\u52d5\u4f5c\u306e\u610f\u56f3\u304c\u8457\u3057\u304f\u640d\u306a\u308f\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u306f <code>Monos<\/code> \u3068 <code>flatMap<\/code> \u306b\u91cd\u70b9\u3092\u7f6e\u3044\u3066\u3044\u308b\u305f\u3081\u3001\u52d5\u4f5c\u306e\u89b3\u70b9\u304b\u3089\u5b9f\u969b\u306b\u4f55\u304c\u8d77\u3053\u3063\u3066\u3044\u308b\u306e\u304b\u304c\u4e0d\u660e\u77ad\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/li>\n<\/ul>\n<p>\u5e78\u3044\u306a\u3053\u3068\u306b\u3001Kotlin \u30b3\u30eb\u30fc\u30c1\u30f3\u3068\u3044\u3046\u5f37\u529b\u306a\u89e3\u6c7a\u7b56\u304c\u3042\u308a\u307e\u3059\u3002 \u30b3\u30eb\u30fc\u30c1\u30f3\u306f\u8a00\u8a9e\u30ec\u30d9\u30eb\u3067\u306e\u30ea\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u5b9f\u88c5\u3068\u3057\u3066\u7d44\u307f\u7acb\u3066\u3089\u308c\u307e\u3059\u3002 \u3057\u305f\u304c\u3063\u3066\u3001\u4e21\u65b9\u306e\u9577\u6240\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<ul>\n<li>\u4ee5\u524d\u3068\u540c\u3058\u3088\u3046\u306b\u9010\u6b21\u7684\u306a\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<li>\u30b3\u30fc\u30c9\u306f\u5b9f\u884c\u6642\u306b\u975e\u540c\u671f\u307e\u305f\u306f\u4e26\u884c\u3057\u3066\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002<\/li>\n<\/ul>\n<p>\u4e0a\u8a18\u306e Java \u30b3\u30fc\u30c9\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306b\u30b3\u30eb\u30fc\u30c1\u30f3\u306b\u5909\u63db\u3055\u308c\u307e\u3059\u3002<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@GetMapping(\"\/users\")\n@ResponseBody\n@Transactional\nsuspend fun storeUser(@RequestBody user:User):User = coroutineScope {\n\u00a0\u00a0\u00a0val avatarUrl = async { avatarService.randomAvatar() }\n\u00a0  val validEmail = async { emailService.verifyEmail() }\n\u00a0\u00a0\u00a0if(!validEmail.await()) throw InvalidEmailException(\"Invalid email\")\n\u00a0\u00a0\u00a0personRepo.save(user.copy(avatar = avatarUrl.await()))\n}<\/pre>\n<p>Kotlin \u306e suspend \u30ad\u30fc\u30ef\u30fc\u30c9\u306b\u3088\u308a\u3001\u69cb\u9020\u5316\u3055\u308c\u305f\u30ce\u30f3\u30d6\u30ed\u30c3\u30ad\u30f3\u30b0\u5b9f\u884c\u304c\u660e\u78ba\u3067\u7c21\u6f54\u306b\u5b9f\u73fe\u3055\u308c\u3066\u3044\u307e\u3059\u3002 <code>async{}<\/code> \u3068 <code>await()<\/code> \u3068\u4f75\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u6df1\u304f\u30cd\u30b9\u30c8\u3057\u305f\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3084\u3001<code>Mono<\/code> \u3084 <code>CompletableFuture<\/code> \u3068\u3044\u3063\u305f\u8907\u96d1\u306a\u69cb\u6587\u3092\u4f7f\u7528\u3057\u306a\u304f\u3066\u3082\u4e26\u884c\u51e6\u7406\u3092\u884c\u3048\u307e\u3059\u3002<\/p>\n<p>\u305d\u306e\u305f\u3081\u3001\u8907\u96d1\u3055\u304c\u7de9\u548c\u3055\u308c\u3001\u958b\u767a\u8005\u306e\u5feb\u9069\u3055\u3068\u4fdd\u5b88\u6027\u304c\u5411\u4e0a\u3057\u3001\u5b8c\u5168\u306b\u540c\u3058\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u7279\u6027\u3092\u7dad\u6301\u3067\u304d\u307e\u3059\u3002<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-655845\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/11\/unnamed-17.png\" alt=\"\" width=\"1566\" height=\"456\" \/><\/figure>\n<p><strong>\u6ce8\u610f<\/strong>: Java \u30d9\u30fc\u30b9\u306e\u3059\u3079\u3066\u306e\u4e3b\u8981\u30a6\u30a7\u30d6\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u30b3\u30eb\u30fc\u30c1\u30f3\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 Spring \u306f\u3053\u306e\u70b9\u3067\u512a\u308c\u3066\u304a\u308a\u3001Micronaut \u3082\u540c\u69d8\u3067\u3059\u3002 Quarkus \u306b\u3088\u308b\u30b3\u30eb\u30fc\u30c1\u30f3\u306e\u30b5\u30dd\u30fc\u30c8\u306f\u73fe\u6642\u70b9\u3067\u306f\u9650\u5b9a\u7684\u3067\u3059\u3002<\/p>\n<p><strong>6. Java \u3082\u9032\u5316\u3057\u3066\u3044\u307e\u3059\uff01<\/strong><\/p>\n<p>Java \u306f\u30ec\u30b3\u30fc\u30c9\u3084\u30d1\u30bf\u30fc\u30f3\u30de\u30c3\u30c1\u30f3\u30b0\u306a\u3069\u306e\u6a5f\u80fd\u306b\u3088\u3063\u3066\u9032\u5316\u3057\u3066\u304a\u308a\u3001Amber\u3001Valhalla\u3001Loom \u306a\u3069\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3082\u4e88\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u3053\u306e\u7740\u5b9f\u306a\u9032\u5316\u306f JVM \u3092\u5f37\u5316\u3057\u3001\u30a8\u30b3\u30b7\u30b9\u30c6\u30e0\u5168\u4f53\u306b\u5229\u76ca\u3092\u3082\u305f\u3089\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u305f\u3060\u3057\u3001\u3053\u3053\u306b\u306f\u843d\u3068\u3057\u7a74\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u300c\u65b0\u3057\u3044\u300dJava \u6a5f\u80fd\u306e\u307b\u3068\u3093\u3069\u306f\u3001Kotlin \u958b\u767a\u8005\u304c\u9577\u5e74\u6d3b\u7528\u3057\u3066\u304d\u305f\u3082\u306e\u3067\u3059\u3002 null \u5b89\u5168\u6027\u3001\u5024\u30af\u30e9\u30b9\u3001\u30c8\u30c3\u30d7\u30ec\u30d9\u30eb\u95a2\u6570\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u5f15\u6570\u3001\u7c21\u6f54\u306a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3001\u304a\u3088\u3073\u7b2c\u4e00\u7d1a\u95a2\u6570\u306f\u3069\u308c\u3082 Kotlin \u306e\u8a2d\u8a08\u306b\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u3082\u306e\u3067\u3042\u308a\u3001\u3088\u308a\u7d71\u4e00\u3055\u308c\u3001\u958b\u767a\u8005\u304c\u4f7f\u3044\u3084\u3059\u3044\u3088\u3046\u306b\u63d0\u4f9b\u3055\u308c\u3066\u3044\u307e\u3059\u3002 \u305d\u306e\u305f\u3081\u3001\u591a\u304f\u306e\u5834\u5408\u306f Kotlin \u30b3\u30fc\u30c9\u306e\u307b\u3046\u304c\u30af\u30ea\u30fc\u30f3\u304b\u3064\u5b89\u5168\u3067\u3001\u306f\u308b\u304b\u306b\u751f\u7523\u6027\u304c\u9ad8\u304f\u611f\u3058\u3089\u308c\u307e\u3059\u3002<\/p>\n<p>\u3057\u304b\u3082\u305d\u308c\u3060\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002Kotlin \u306f Java \u306e\u30a4\u30ce\u30d9\u30fc\u30b7\u30e7\u30f3\u306e\u6069\u6075\u3082\u53d7\u3051\u3066\u3044\u307e\u3059\u3002 \u4eee\u60f3\u30b9\u30ec\u30c3\u30c9\u3084 Loom \u306a\u3069\u306e\u5168\u4f53\u7684\u306a JVM \u30ec\u30d9\u30eb\u306e\u9032\u6b69\u3084 Valhalla \u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5f37\u5316\u306f\u3001Kotlin \u306b\u3082\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u9069\u7528\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u8981\u3059\u308b\u306b\u3001Java \u306f\u9032\u5316\u3057\u3066\u3044\u307e\u3059\u304c\u3001Kotlin \u306f\u958b\u767a\u8005\u304c\u5fc5\u8981\u3068\u3059\u308b\u6700\u65b0\u306e\u30c4\u30fc\u30eb\u3092\u6700\u521d\u304b\u3089\u63d0\u4f9b\u3059\u308b\u3088\u3046\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u308b\u306e\u3067\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u5b89\u5168\u30fb\u30e2\u30c0\u30f3\u304b\u3064\u5c06\u6765\u3092\u898b\u636e\u3048\u305f\u9078\u629e\u80a2\u3068\u8a00\u3048\u307e\u3059\u3002<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" class=\"wp-image-655858\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/11\/kotlin-castle-1.png\" alt=\"\" width=\"1698\" height=\"1780\" \/><\/figure>\n<p><strong>7. Kotlin \u306e\u9032\u5316\u306e\u30e1\u30ea\u30c3\u30c8<\/strong><\/p>\n<p>\u53e4\u3044\u8a00\u8a9e\u3068\u30e2\u30c0\u30f3\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3068\u6bd4\u8f03\u3057\u305f\u5834\u5408\u3001\u524d\u8005\u306f\u5fc5\u7136\u7684\u306b\u53e4\u304f\u304b\u3089\u5f15\u304d\u305a\u3063\u3066\u3044\u308b\u554f\u984c\u304c\u3042\u308a\u307e\u3059\u3002 \u5927\u91cf\u306e\u65e2\u5b58\u30b3\u30fc\u30c9\u30d9\u30fc\u30b9\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u306a\u304c\u3089\u8a00\u8a9e\u3092\u66f4\u65b0\u3059\u308b\u306b\u306f\u3001\u8a00\u8a9e\u8a2d\u8a08\u8005\u306b\u56fa\u6709\u306e\u8ab2\u984c\u304c\u5f37\u3044\u3089\u308c\u307e\u3059\u3002 Kotlin \u306b\u306f\u4ee5\u4e0b\u306b\u6319\u3052\u308b 2 \u3064\u306e\u91cd\u8981\u306a\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p><strong>\u5148\u4eba\u306e\u5049\u696d\u306b\u5b66\u3076<\/strong>: Kotlin \u306e\u6700\u521d\u306e\u8a2d\u8a08\u30c1\u30fc\u30e0\u306f\u65b0\u3057\u3044\u8a00\u8a9e\u3092\u30bc\u30ed\u304b\u3089\u958b\u767a\u305b\u305a\u3001\u4e3b\u8981\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u306e\u5b9f\u8a3c\u3055\u308c\u305f\u30d1\u30e9\u30c0\u30a4\u30e0\u3092\u96c6\u7d04\u3057\u3001\u307e\u3068\u307e\u308a\u306e\u3042\u308b 1 \u3064\u306e\u8a00\u8a9e\u306b\u7d71\u4e00\u3057\u307e\u3057\u305f\u3002 \u3053\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306b\u3088\u308a\u3001\u3088\u308a\u5e83\u7bc4\u306a\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304c\u9032\u5316\u306e\u904e\u7a0b\u3067\u84c4\u7a4d\u3057\u3066\u304d\u305f\u77e5\u8b58\u3092\u6700\u5927\u5316\u3057\u307e\u3057\u305f\u3002<\/p>\n<p><strong>Java \u306e\u6b20\u70b9\u304b\u3089\u5b66\u3076<\/strong>: Kotlin \u306e\u8a2d\u8a08\u8005\u306f Java \u306e\u843d\u3068\u3057\u7a74\u3092\u89b3\u5bdf\u3057\u3001\u5805\u5b9f\u306a\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u57fa\u790e\u304b\u3089\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>Kotlin \u306e\u9032\u5316\u306b\u5bfe\u3059\u308b\u7406\u89e3\u3092\u6df1\u3081\u308b\u306b\u306f\u3001Kotlin \u306e\u6700\u521d\u306e\u8a2d\u8a08\u30c1\u30fc\u30e0\u306b\u643a\u308f\u3063\u305f Andrey Breslav \u304c\u30a2\u30e0\u30b9\u30c6\u30eb\u30c0\u30e0\u3067\u958b\u50ac\u3055\u308c\u305f KotlinDevDay \u3067\u300c<a href=\"https:\/\/www.youtube.com\/watch?v=7z_K-hTTeqI&amp;ab_channel=Xebia\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Shoulders of Giants: Languages Kotlin Learned From<\/em> \u2013 Andrey Breslav<\/a>\u300d\uff08\u5148\u4eba\u306e\u5049\u696d\u306b\u5b66\u3076: Kotlin \u306e\u77e5\u8b58\u6e90\u3068\u306a\u3063\u305f\u6570\u3005\u306e\u8a00\u8a9e \u2013 Andrey Breslav\uff09\u3068\u3044\u3046\u7d20\u6674\u3089\u3057\u3044\u8b1b\u6f14\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>\u30bd\u30d5\u30c8\u9762: \u958b\u767a\u8005\u306e Kotlin \u5c0e\u5165\u3092\u652f\u63f4\u3057\u3066\u958b\u767a\u8005\u540c\u58eb\u306e\u3064\u306a\u304c\u308a\u3092\u7bc9\u304f<\/strong><\/p>\n<h3 class=\"wp-block-heading\"><strong>1. \u30aa\u30f3\u30dc\u30fc\u30c7\u30a3\u30f3\u30b0\u3092\u5bb9\u6613\u306b\u3059\u308b<\/strong><\/h3>\n<p>\u8868\u73fe\u529b\u8c4a\u304b\u306a Java \u3068 Kotlin \u306e\u30b3\u30fc\u30c9\u30b9\u30cb\u30da\u30c3\u30c8\u3092\u6bd4\u8f03\u3059\u308b\u76ee\u7684\u306f\u3001Kotlin \u3078\u306e\u8208\u5473\u3092\u305d\u305d\u308b\u3053\u3068\u306b\u3042\u308a\u307e\u3059\u3002 \u305f\u3060\u3057\u3001\u30b3\u30fc\u30c9\u3060\u3051\u3067\u306f Java \u958b\u767a\u8005\u306e\u5fc3\u3068\u652f\u6301\u3092\u5f97\u308b\u306b\u306f\u4e0d\u5341\u5206\u3067\u3059\u3002 \u5c0e\u5165\u3092\u4fc3\u9032\u3057\u3066\u30b9\u30e0\u30fc\u30ba\u306a\u30b9\u30bf\u30fc\u30c8\u3092\u5207\u308c\u308b\u3088\u3046\u3001\u6b21\u306e\u9805\u76ee\u3092\u63d0\u4f9b\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n<ul>\n<li><strong>\u30b5\u30f3\u30d7\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong>: Java \u3068 Kotlin \u306e\u4e21\u65b9\u306e\u30b3\u30fc\u30c9\u3092\u3059\u3050\u306b\u6bd4\u8f03\u3067\u304d\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u3042\u308c\u3070\u3001\u79fb\u884c\u6642\u306b\u5f79\u7acb\u3064\u5b9f\u8df5\u7684\u306a\u53c2\u8003\u8cc7\u6599\u306b\u306a\u308a\u307e\u3059\u3002<\/li>\n<li><strong>\u7d44\u307f\u8fbc\u307f\u306e\u54c1\u8cea\u30c1\u30a7\u30c3\u30af<\/strong>: SonarQube\u3001ktlint\u3001detekt \u306a\u3069\u306e\u30c4\u30fc\u30eb\u3092\u4e8b\u524d\u306b\u69cb\u6210\u3057\u3066\u304a\u304f\u3053\u3068\u3067\u3001\u6700\u521d\u304b\u3089\u30af\u30ea\u30fc\u30f3\u3067\u4e00\u8cab\u6027\u304c\u3042\u308a\u3001\u4fdd\u5b88\u53ef\u80fd\u306a\u30b3\u30fc\u30c9\u304c\u4fc3\u9032\u3055\u308c\u307e\u3059\u3002 \u3053\u308c\u306b\u3088\u308a\u3001\u4e00\u8cab\u3057\u305f\u30ea\u30f3\u30c8\u30eb\u30fc\u30eb\u3001\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3001\u30e9\u30a4\u30d6\u30e9\u30ea\u3001\u304a\u3088\u3073 CI \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3092\u9069\u7528\u3057\u3001\u30c1\u30fc\u30e0\u5168\u4f53\u306e\u624b\u9593\u3092\u6e1b\u3089\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<li><strong>\u6307\u5c0e\u3068\u30b5\u30dd\u30fc\u30c8<\/strong>: \u958b\u767a\u306e\u65e9\u671f\u6bb5\u968e\u3067\u65b0\u3057\u3044\u30c1\u30fc\u30e0\u306e\u6307\u5c0e\u3001\u8cea\u554f\u3078\u306e\u56de\u7b54\u3001\u304a\u3088\u3073\u30cf\u30f3\u30ba\u30aa\u30f3\u5f62\u5f0f\u3067\u306e\u30a2\u30c9\u30d0\u30a4\u30b9\u3092\u63d0\u4f9b\u3067\u304d\u308b\u7d4c\u9a13\u8c4a\u5bcc\u306a Kotlin \u30a8\u30f3\u30b8\u30cb\u30a2\u3092\u914d\u5099\u3057\u307e\u3059\u3002\n<ul>\n<li>\u3053\u308c\u306f\u7279\u306b\u91cd\u8981\u3067\u3059\u3002\u305d\u306e\u3088\u3046\u306a\u6bb5\u968e\u3092\u904e\u53bb\u306b\u7d4c\u9a13\u3057\u305f\u5225\u30c1\u30fc\u30e0\u306e\u958b\u767a\u8005\u304b\u3089\u6570\u6642\u9593\u306e\u6307\u5c0e\u3092\u53d7\u3051\u308b\u3060\u3051\u3067\u3001\u591a\u304f\u306e\u640d\u5bb3\u3084\u6280\u8853\u7684\u8ca0\u50b5\u3092\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u6301\u7d9a\u7684\u306a Kotlin \u3078\u306e\u71b1\u610f\u3092\u80b2\u3080\u306b\u306f\u3001\u307b\u3093\u306e\u5c11\u3057\u306e\u30b5\u30dd\u30fc\u30c8\u3084\u6307\u5c0e\u304c\u6700\u3082\u52b9\u679c\u7684\u3067\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><strong>2. \u72ec\u5b66\u306e\u8cc7\u6599\u3092\u63d0\u4f9b\u3059\u308b<\/strong><\/h3>\n<p>\u7279\u306b Java \u304b\u3089\u79fb\u884c\u3059\u308b\u5834\u5408\u3001Kotlin \u306e\u57fa\u672c\u306f\u72ec\u5b66\u3067\u304d\u307e\u3059\u3002 \u4e8b\u524d\u306b\u30ea\u30bd\u30fc\u30b9\u3092\u63d0\u4f9b\u3057\u3066\u304a\u304f\u3053\u3068\u3067\u3001Kotlin \u3067\u751f\u7523\u6027\u304c\u5411\u4e0a\u3059\u308b\u307e\u3067\u306e\u9053\u306e\u308a\u304c\u5bb9\u6613\u306b\u306a\u308a\u3001\u6577\u5c45\u304c\u4f4e\u304f\u306a\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/getting-started.html\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>JetBrains \u306e\u300cTour of Kotlin\u300d\uff08\u5165\u9580\u30ac\u30a4\u30c9\uff09<\/strong><br \/><\/a>Kotlin \u516c\u5f0f\u30b5\u30a4\u30c8\u306b\u63b2\u8f09\u3055\u308c\u3066\u3044\u308b\u30d6\u30e9\u30a6\u30b6\u30fc\u30d9\u30fc\u30b9\u306e\u77ed\u3044\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3002<\/li>\n<li><a href=\"https:\/\/kotlinlang.org\/docs\/koans.html\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Kotlin Koans<br \/><\/strong><\/a>JetBrains \u304c\u7ba1\u7406\u3059\u308b\u7c21\u5358\u306a\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u8ab2\u984c\u96c6\u3002<\/li>\n<li><a href=\"https:\/\/www.udacity.com\/course\/kotlin-bootcamp-for-programmers--ud9011\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Udacity \u306e\u300cKotlin Bootcamp for Programmers\u300d<\/strong><br \/><\/a>Google \u3068\u306e\u63d0\u643a\u3067\u5236\u4f5c\u3055\u308c\u305f\u5b8c\u5168\u52d5\u753b\u30d9\u30fc\u30b9\u306e\u30b3\u30fc\u30b9\u3002<\/li>\n<\/ul>\n<div class=\"alert \">\n<p><strong>\u6ce8\u610f:<\/strong> \u72ec\u5b66\u306f\u57fa\u790e\u3092\u3064\u304b\u3080\u306e\u306b\u52b9\u679c\u7684\u306a\u5b66\u7fd2\u65b9\u6cd5\u3067\u306f\u3042\u308a\u307e\u3059\u304c\u3001\u3044\u304f\u3064\u304b\u306e\u6b20\u70b9\u3082\u3042\u308a\u307e\u3059\u3002 \u305d\u306e 1 \u3064\u306f\u672c\u4eba\u4efb\u305b\u3067\u3042\u308b\u3053\u3068\u3067\u3059\u3002\u65e5\u3005\u5fd9\u6bba\u3055\u308c\u3066\u3044\u308c\u3070\u3001\u72ec\u5b66\u3092\u7701\u7565\u3057\u305f\u304f\u3082\u306a\u308a\u307e\u3059\u3002 \u3055\u3089\u306b\u3001\u6163\u7528\u7684\u306a Kotlin \u3092\u6b63\u3057\u304f\u9069\u7528\u3057\u3001\u305d\u306e\u5fae\u5999\u306a\u9055\u3044\u3092\u7406\u89e3\u3057\u3066\u3044\u308b\u958b\u767a\u8005\u304b\u3089\u306e\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3092\u5f97\u308b\u3053\u3068\u3082\u3067\u304d\u307e\u305b\u3093\u3002 \u72ec\u5b66\u30b3\u30fc\u30b9\u3092\u7d42\u3048\u305f\u5f8c\u306f\u3001Java \u30e9\u30a4\u30af\u306a Kotlin \u3092\u66f8\u3044\u3066\u3057\u307e\u3046\u53ef\u80fd\u6027\u304c\u9ad8\u304f\u306a\u308a\u307e\u3059\u3002\u3053\u308c\u306f\u5e7e\u5206\u304b\u306e\u30e1\u30ea\u30c3\u30c8\u3092\u3082\u305f\u3089\u3059\u3082\u306e\u306e\u3001\u3053\u306e\u8a00\u8a9e\u306e\u80fd\u529b\u3092\u6700\u5927\u9650\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n<\/div>\n<p>\u7684\u78ba\u306a\u6307\u5c0e\u3092\u53d7\u3051\u3089\u308c\u306a\u3044\u306e\u3067\u3042\u308c\u3070\u3001\u5f93\u6765\u578b\u306e\u30b3\u30fc\u30b9\u304c\u975e\u5e38\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002 \u5f93\u6765\u578b\u306e\u30b3\u30fc\u30b9\u306e\u5834\u5408\u3001\u53c2\u52a0\u3059\u308b\u5fc5\u8981\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u540c\u30ec\u30d9\u30eb\u306e\u4ed6\u306e\u5b66\u7fd2\u8005\u3068\u3084\u308a\u53d6\u308a\u3057\u3001\u7d4c\u9a13\u8c4a\u5bcc\u306a\u958b\u767a\u8005\u304b\u3089\u8cea\u554f\u3078\u306e\u56de\u7b54\u3092\u5f97\u3089\u308c\u308b\u305f\u3081\u3001\u6700\u521d\u306b\u79fb\u884c\u3059\u308b\u6bb5\u968e\u3067\u6163\u7528\u7684\u3067\u306a\u3044 Kotlin \u306e\u4f7f\u7528\u304c\u5c11\u306a\u304f\u306a\u308a\u3001\u3088\u308a\u65e9\u304f\u8a00\u8a9e\u306b\u6163\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><strong>3. \u793e\u5185\u306b Kotlin \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u4f5c\u308b<\/strong><\/h3>\n<p>Kotlin \u306e\u5c02\u9580\u77e5\u8b58\u3092\u6700\u901f\u3067\u5168\u793e\u7684\u306b\u9ad8\u3081\u308b\u624b\u6bb5\u306e 1 \u3064\u306f\u3001\u793e\u5185\u306b\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u4f5c\u308a\u3001\u305d\u306e\u80b2\u6210\u3092\u6700\u512a\u5148\u3059\u308b\u3053\u3068\u3067\u3059\u3002<\/p>\n<ul>\n<li><strong>\u793e\u5185 Kotlin \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3092\u7acb\u3061\u4e0a\u3052\u308b<\/strong>\n<ul>\n<li>Kotlin \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u6295\u8cc7\u3059\u308b\u610f\u6b32\u306e\u3042\u308b 3\uff5e6 \u4eba\u4ee5\u4e0a\u306e\u958b\u767a\u8005\u304b\u3089\u306a\u308b\u4e2d\u6838\u30c1\u30fc\u30e0\u3092\u4f5c\u308a\u307e\u3057\u3087\u3046\u3002 \u307e\u305f\u3001\u5404\u958b\u767a\u8005\u304c\u4e0a\u53f8\u304b\u3089\u6642\u9593\u3092\u4e0e\u3048\u3089\u308c\u3001\u305d\u306e\u6d3b\u52d5\u306b\u5bfe\u3059\u308b\u8a55\u4fa1\u3092\u5f97\u3089\u308c\u308b\u3088\u3046\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<li>\u30c1\u30fc\u30e0\u304c\u7d50\u6210\u3055\u308c\u305f\u3089\u3001Kotlin \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304b\u3089\u6709\u540d\u306a\u8b1b\u6f14\u8005\u3092\u62db\u5f85\u3057\u3001\u5168\u793e\u7684\u306a\u30ad\u30c3\u30af\u30aa\u30d5\u3092\u958b\u50ac\u3057\u307e\u3057\u3087\u3046\u3002 \u3053\u308c\u306b\u3088\u308a\u3001Kotlin \u3078\u306e\u79fb\u884c\u610f\u6b32\u306b\u706b\u304c\u4ed8\u304d\u3001\u52e2\u3044\u304c\u5897\u3057\u307e\u3059\u3002<\/li>\n<li>\u6bce\u6708\u307e\u305f\u306f\u9694\u9031\u306e\u5b9a\u671f\u30df\u30fc\u30c8\u30a2\u30c3\u30d7\u3092\u8a2d\u5b9a\u3057\u3001\u52e2\u3044\u304c\u53ce\u307e\u3089\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n<li>\u8cea\u554f\u3001\u30b3\u30fc\u30c9\u30b9\u30cb\u30da\u30c3\u30c8\u3001\u30a4\u30d9\u30f3\u30c8\u30e1\u30e2\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u6b8b\u305b\u308b\u5171\u6709\u306e\u30c1\u30e3\u30c3\u30c8\u30c1\u30e3\u30f3\u30cd\u30eb\u3084 Wiki \u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n<\/ul>\n<\/li>\n<li><strong>\uff08\u5916\u90e8\uff09\u8b1b\u6f14\u8005\u3092\u62db\u5f85\u3059\u308b<\/strong>\n<ul>\n<li>Kotlin \u3092\u672c\u756a\u74b0\u5883\u306b\u51fa\u8377\u3057\u305f\u3053\u3068\u306e\u3042\u308b\u30a8\u30f3\u30b8\u30cb\u30a2\u3092\u62db\u5f85\u3057\u3001\u7387\u76f4\u306a\u73fe\u5834\u306e\u8a71\u3092\u5171\u6709\u3057\u3066\u3082\u3089\u3044\u307e\u3057\u3087\u3046\u3002<\/li>\n<li>\u6280\u8853\u9762\u3092\u6df1\u6398\u308a\u3057\u305f\u8b1b\u6f14\uff08\u30b3\u30eb\u30fc\u30c1\u30f3\u3001KMP\u3001\u95a2\u6570\u578b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\uff09\u3068\u6bd4\u8f03\u7684\u9ad8\u5ea6\u306a\u30b1\u30fc\u30b9\u30b9\u30bf\u30c7\u30a3\uff08\u79fb\u884c\u6226\u7565\u3001\u30c4\u30fc\u30eb\u306e\u30d2\u30f3\u30c8\uff09\u3092\u4ea4\u4e92\u306b\u884c\u3044\u307e\u3057\u3087\u3046\u3002<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u4ed6\u306e\u793e\u5185\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u5f97\u3089\u308c\u305f\u77e5\u8b58\u3092\u4f1d\u6388\u3059\u308b<\/strong>\n<ul>\n<li>\u6210\u529f\u3057\u305f\u3053\u3068\u3001\u5931\u6557\u3057\u305f\u3053\u3068\u3001\u5ba2\u89b3\u7684\u306b\u8a55\u4fa1\u3067\u304d\u308b\u7d50\u679c\u306a\u3069\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30ea\u30fc\u30c0\u30fc\u306b Kotlin \u306e\u77e5\u8b58\u3092\u62ab\u9732\u3057\u3066\u3082\u3089\u3044\u307e\u3057\u3087\u3046\u3002<\/li>\n<li>\u3053\u306e\u3088\u3046\u306a\u77e5\u898b\u306f\u3001\u65b0\u3057\u3044\u30c1\u30fc\u30e0\u304c\u9078\u5b9a\u3067\u304d\u308b\u300cKotlin \u6226\u7565\u96c6\u300d\u306b\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u30c1\u30fc\u30e0\u306e\u958b\u767a\u8005\u306b\u30b9\u30dd\u30c3\u30c8\u3092\u5f53\u3066\u308b<\/strong>\n<ul>\n<li>\u8ab0\u3082\u304c\u88cf\u6280\u3001\u30e9\u30a4\u30d6\u30e9\u30ea\u3001\u307e\u305f\u306f\u514b\u670d\u3057\u305f\u5931\u6557\u3092\u7d39\u4ecb\u3067\u304d\u308b 5\uff5e10 \u5206\u7a0b\u5ea6\u306e\u30e9\u30a4\u30c8\u30cb\u30f3\u30b0\u30c8\u30fc\u30af\u30bb\u30c3\u30b7\u30e7\u30f3\u3092\u958b\u50ac\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n<li>\u8ca2\u732e\u8005\u3092\u516c\u306e\u5834\u3067\u79f0\u3048\u307e\u3057\u3087\u3046\u3002\u5168\u793e\u4f1a\u8b70\u3084\u793e\u5185\u30cb\u30e5\u30fc\u30b9\u30ec\u30bf\u30fc\u3067\u58f0\u63f4\u3092\u9001\u308b\u3053\u3068\u3067\u3001\u53d6\u308a\u7d44\u307f\u3068\u77e5\u8b58\u306e\u5171\u6709\u3092\u4fc3\u9032\u3067\u304d\u307e\u3059\u3002<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u30eb\u30fc\u30d7\u3092\u53b3\u5b88\u3059\u308b<\/strong>\n<ul>\n<li>\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u7d42\u4e86\u3059\u308b\u305f\u3073\u306b\u3001\u5206\u304b\u308a\u3084\u3059\u3055\u3084\u6709\u7528\u6027\u306b\u3064\u3044\u3066\u306e\u7c21\u5358\u306a\u30a2\u30f3\u30b1\u30fc\u30c8\u3092\u53d6\u308a\u307e\u3057\u3087\u3046\u3002\u305d\u306e\u5f8c\u3001\u30a2\u30f3\u30b1\u30fc\u30c8\u306e\u7d50\u679c\u3092\u57fa\u306b\u4eca\u5f8c\u306e\u30a2\u30b8\u30a7\u30f3\u30c0\u3092\u8abf\u6574\u3057\u307e\u3059\u3002<\/li>\n<li>\u7d44\u7e54\u306e\u8077\u52d9\u3092\u30ed\u30fc\u30c6\u30fc\u30b7\u30e7\u30f3\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u304c 1 \u4eba\u306e\u30b9\u30ad\u30eb\u4fdd\u6301\u8005\u306b\u4f9d\u5b58\u3057\u306a\u3044\u3088\u3046\u306b\u3057\u3001\u9577\u671f\u7684\u306a\u67d4\u8edf\u6027\u3092\u7dad\u6301\u3057\u307e\u3057\u3087\u3046\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><strong>\u6ce8\u610f<\/strong>: \u4e0a\u8a18\u306e\u63d0\u6848\u306e\u591a\u304f\u306f\u7c21\u5358\u306a\u3088\u3046\u3067\u3059\u304c\u3001 \u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u52e2\u529b\u3092\u7dad\u6301\u3059\u308b\u305f\u3081\u306b\u5fc5\u8981\u306a\u52b4\u529b\u306f\u904e\u5c0f\u8a55\u4fa1\u3057\u3066\u306f\u306a\u308a\u307e\u305b\u3093\u3002<\/p>\n<h3 class=\"wp-block-heading\"><strong>4. \u7126\u308a\u306f\u7981\u7269\u2026<\/strong><\/h3>\n<p>\u65e2\u5b58\u6587\u5316\u3092\u5909\u3048\u308b\u306b\u306f\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002 \u81ea\u5206\u306b\u3068\u3063\u3066\u9769\u65b0\u7684\u306a\u30c4\u30fc\u30eb\u306b\u71b1\u4e2d\u3059\u308b\u3068\u3001\u6587\u5316\u3092\u62bc\u3057\u3064\u3051\u308b\u3053\u3068\u306b\u306a\u308a\u3001\u9006\u52b9\u679c\u306b\u306a\u308b\u5371\u967a\u6027\u304c\u3042\u308a\u307e\u3059\u3002 \u5192\u982d\u3067\u8ff0\u3079\u305f\u300c<em>\u8aac\u660e\u3059\u308b\u3088\u308a\u5b9f\u7269\u3092\u898b\u305b\u308b<\/em>\u300d\u3092\u5ff5\u982d\u306b\u3001\u4e0a\u8a18\u306e\u3059\u3079\u3066\u306e\u6d3b\u52d5\u306b\u3088\u3063\u3066\u5c0e\u5165\u30d7\u30ed\u30bb\u30b9\u3092\u4fc3\u9032\u3059\u308b\u306e\u304c\u52b9\u679c\u7684\u3067\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\">\u3053\u306e\u9023\u8f09\u306e\u6b21\u306e\u8a18\u4e8b<\/h3>\n<p>\u958b\u767a\u8005\u306e\u8aac\u5f97\u304b\u3089\u610f\u601d\u6c7a\u5b9a\u8005\u306e\u8aac\u5f97\u306b\u30c8\u30d4\u30c3\u30af\u3092\u79fb\u3057\u307e\u3059\u3002 \u6b21\u306e\u8a18\u4e8b\u3067\u306f\u3001Kotlin \u3092\u5c0e\u5165\u3059\u308b\u305f\u3081\u306e\u8aac\u5f97\u529b\u306e\u3042\u308b\u30d3\u30b8\u30cd\u30b9\u30b1\u30fc\u30b9\u3092\u5b9f\u969b\u306e\u30c7\u30fc\u30bf\u3068\u5ba2\u89b3\u7684\u306b\u8a55\u4fa1\u3067\u304d\u308b\u7d50\u679c\u306b\u57fa\u3065\u3044\u3066\u4f5c\u308b\u65b9\u6cd5\u3092\u3054\u7d39\u4ecb\u3057\u307e\u3059\u3002 \u958b\u767a\u8005\u306b\u3068\u3063\u3066\u306e\u30e1\u30ea\u30c3\u30c8\u3092\u7d4c\u55b6\u9663\u306e\u8b70\u8ad6\u306b\u767a\u5c55\u3055\u305b\u308b\u65b9\u6cd5\u3001\u751f\u7523\u6027\u5411\u4e0a\u3092\u30b3\u30b9\u30c8\u524a\u6e1b\u306b\u95a2\u9023\u4ed8\u3051\u308b\u65b9\u6cd5\u3001\u3055\u3089\u306b\u306f Kotlin \u304c\u5358\u306a\u308b\u6280\u8853\u6539\u826f\u3067\u306f\u306a\u304f\u3001\u30c1\u30fc\u30e0\u3068\u4f1a\u793e\u306e\u4e21\u65b9\u306b\u3068\u3063\u3066\u6226\u7565\u7684\u306a\u624b\u6bb5\u3067\u3042\u308b\u7406\u7531\u3092\u8a3c\u660e\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u5b66\u3073\u307e\u3059\u3002<\/p>\n<p><strong>\u30aa\u30ea\u30b8\u30ca\u30eb\uff08\u82f1\u8a9e\uff09\u30d6\u30ed\u30b0\u6295\u7a3f\u8a18\u4e8b\u306e\u4f5c\u8005\uff1a<\/strong><\/p>\n<div class=\"about-author \">\n<div class=\"about-author__box\">\n<div class=\"row\">\n<div class=\"about-author__box-img\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/10\/a3f7-400o400o1-QYUavRYyARnAVJLCpM1m8M.webp\" alt=\"\" \/><\/div>\n<div class=\"about-author__box-text\">\n<h4>Urs Peter<\/h4>\n<p>Urs \u306f\u7d4c\u9a13\u8c4a\u5bcc\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30a8\u30f3\u30b8\u30cb\u30a2\u3001\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u30a2\u30fc\u30ad\u30c6\u30af\u30c8\u3001\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u8b1b\u6f14\u8005\u3001\u30c8\u30ec\u30fc\u30ca\u30fc\u3067\u3042\u308a\u3001\u4e3b\u306b Kotlin \u3068 Scala \u304c\u95a2\u308f\u308b\u30ec\u30b8\u30ea\u30a8\u30f3\u30c8\u3067\u62e1\u5f35\u53ef\u80fd\u3001\u304b\u3064\u30df\u30c3\u30b7\u30e7\u30f3\u30af\u30ea\u30c6\u30a3\u30ab\u30eb\u306a\u30b7\u30b9\u30c6\u30e0\u306e\u69cb\u7bc9\u306b 20 \u5e74\u4ee5\u4e0a\u643a\u308f\u3063\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u30b3\u30f3\u30b5\u30eb\u30bf\u30f3\u30c8\u696d\u306e\u508d\u3089\u3001Kotlin \u3068 Scala \u306e\u8a00\u8a9e\u30b3\u30fc\u30b9\u304b\u3089\u30de\u30a4\u30af\u30ed\u30b5\u30fc\u30d3\u30b9\u3084\u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u578b\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u3068\u3044\u3063\u305f\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u95a2\u9023\u30c8\u30ec\u30fc\u30cb\u30f3\u30b0\u306b\u81f3\u308b\u591a\u7a2e\u591a\u69d8\u306a\u30b3\u30fc\u30b9\u306e\u30c8\u30ec\u30fc\u30ca\u30fc\u3068\u4f5c\u6210\u8005\u3068\u3057\u3066\u3082\u60c5\u71b1\u7684\u306b\u6d3b\u52d5\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u5143\u3005\u4eba\u3068\u306e\u4ea4\u6d41\u3092\u597d\u3080\u6027\u683c\u3067\u3042\u308a\u3001\u30df\u30fc\u30c8\u30a2\u30c3\u30d7\u3084\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\u3067\u4ed6\u306e\u958b\u767a\u8005\u3068\u77e5\u8b58\u3092\u5171\u6709\u3057\u3001\u523a\u6fc0\u3057\u5408\u3046\u3053\u3068\u3092\u697d\u3057\u3093\u3067\u3044\u307e\u3059\u3002 Urs \u306f JetBrains \u8a8d\u5b9a Kotlin \u30c8\u30ec\u30fc\u30ca\u30fc\u3067\u3059\u3002<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2021\/08\/photo_2021-08-03_15-27-43-200x200.jpg\" width=\"200\" height=\"200\" alt=\"Alyona Chernyaeva\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                            <h4>Alyona Chernyaeva<\/h4>\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":1394,"featured_media":672650,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/672647"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/users\/1394"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/comments?post=672647"}],"version-history":[{"count":5,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/672647\/revisions"}],"predecessor-version":[{"id":674908,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/kotlin\/672647\/revisions\/674908"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media\/672650"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/media?parent=672647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/categories?post=672647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/tags?post=672647"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ja\/wp-json\/wp\/v2\/cross-post-tag?post=672647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}