🔴

Javaを使った新しい言語【Juno】を開発している話

に公開

はじめ

みなさん久しぶりです。投稿をサボりすぎてなかなか記事を書く気になれませんでしたがようやく記事を書く気になって今書いています。(最終投稿日が4月1日だということは黙っておこう...)
そろそろ定期的に投稿していこうかなと思っています。でも、モチベやらなんやらを保つためにZennを開く毎日。でも書く気になれない...でも書きたい!
そしてちょうどその頃、自作言語に興味を持って色々調べるうちに「自分でもJavaで新しい自作言語作れるかな?」という疑問と好奇心で作ってみることにしました。
前置きが長くなりましたが、今回はJavaベースの言語である「Juno」についてお話しさせてください。

そもそもJunoってなんぞや?

ある程度、スクラップでまとめています。

https://zenn.dev/link/comments/ac5e29fcb944af

さらにスクラップにはありませんが、オープンソースとして公開する予定です。現在は、作成中のためリポジトリなどは伏せますが一応ソースは公開しています。 現在リポジトリを公開しています。[1]

https://github.com/rii125/Juno

Junoの作成経緯について

みなさんは、Javaの文法・書き方に満足していますか?少なくとも僕は満足していません。なぜって、コンソールにHello World.と表示するのにpublic class Main {...}と書くんです。[2]

Main.java
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World.");
    }
}

ですが、JavaScriptやPythonなどはHello World.を簡単に書けます。

main.js
console.log('Hello World.')
main.py
print('Hello World.')

一行でHello World.をかけますよね。関数を使ったHello World.を書くと...

Main.java
public class Main {
    public static void main(String[] args) {
        public static void hello(String msg) {
            System.out.println(msg);            
        }
        hello("Hello World.");
    }
}
main.py
def hello(msg):
    print(msg)

hello('Hello World.');
main.js
'use strict';

function hello(msg) {
    console.log(msg)
}

hello('Hello World.')

圧倒的にJavaがクッソ長いです。もちろんこれだけでなくいろんな部分では冗長にコードを書く部分が多いですよね。もちろんコードの安全性やJVMの仕様などいろんなことがあるかと思いますがやっぱり長いですよね。
そこで、冗長なコードを書かずにかつJava本来の仕様なども生かせるような言語を探すのも良かったのですがせっかくなので自作してみよう!ということがJunoの開発経緯になります。

Junoの文法

今の所次のようなコードでHello world.を書けます。

main.jn
public static main() {
    print("Hello World.");
}

はい。あんなに長かったコードがスッキリしましたね。一応現時点(2025/11/28)ではこれでいこうかなと思っています。どうですかJavaのような文法でもありながらJavaとは別のような書き方である言語。
これがJunoです。

「え、これだけ?」って思った方。すみませんまだ開発したばかりでそんなにボリュームのある言語になっていません。一応、変数宣言や関数、オブジェクト指向などなど仕様をじゃんじゃん決めていく予定ですので...

まとめ

  • Javaベースの言語Junoを開発中!
  • 自作言語を作っています
  • Javaの仕様を生かしながらJuno独自の文法もある
  • 共同開発をしてくれる方を募集しています!

また、気になることがあればコメントにてお願いします。

脚注
  1. ぜひ、共同で開発している人を募集しています!!! ↩︎

  2. Java21からmainメソッドの省略記法が採用されています。JEP 445: Unnamed Classes and Instance Main Methods | Javaのpublic static void main、今度こそ本当になくなるってよ。 - Qiita ↩︎

広報ブログ

Discussion