0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【完全図鑑】プログラミング言語の歴史をHello Worldで辿る — 1950年代〜2020年代、50言語以上のHello World大全

0
Posted at

株式会社Good Labでエンジニアをしている コータロー です。
日々、Java・SQL・Gitなどの技術情報や、新人エンジニア向けの学習ノウハウ、
AI活用についての情報を発信しています。

Good Labについて気になった方は、コーポレートサイトもぜひご覧ください。
コーポレートサイト

本記事はClaude(Anthropic)を活用してまとめた内容です。各言語のコード例や歴史的事実は可能な限り検証していますが、誤りがあればコメントでご指摘ください。

はじめに

プログラミングを始めると、最初に書くのは決まって "Hello, World!" を画面に表示するプログラムです。

この伝統は 1978年 にさかのぼります。Brian Kernighan と Dennis Ritchie が著した名著 "The C Programming Language" の中で、C言語の最初のサンプルとして Hello, World! を出力するプログラムが掲載されました。それ以降、Hello World は「その言語の雰囲気を最も手軽に体験できるプログラム」として、世界中のプログラマに愛されています。

実は Kernighan は 1974年の Bell Labs 内部文書 "Programming in C: A Tutorial" の中で既に Hello World を使用しており、さらに遡ると 1972年の "A Tutorial Introduction to the Language B" にも同様の記述があります。

なぜ Hello World が最初のプログラムとして選ばれるのか

  • 最小限のコードで動作確認ができる — 環境構築が正しいかを確認する最速の方法
  • 言語の「文法の骨格」が見える — エントリーポイント、出力関数、文字列リテラルの書き方が一目でわかる
  • 心理的ハードルが低い — 「動いた!」という成功体験を最速で得られる

この記事の楽しみ方

  1. 年代順に読む — プログラミング言語 70年の進化を追体験
  2. カテゴリ別に比較 — コンパイル型 vs インタプリタ型、手続き型 vs 関数型の違いを Hello World で実感
  3. 難解言語で遊ぶ — Brainfuck、COW、Shakespeare... 「なぜこうなった」を楽しむ

1950年代 — コンピュータの夜明け

この時代のプログラミングは、パンチカードや紙テープを使った作業でした。高水準言語という概念そのものが革命的だった時代です。

Fortran (1957)

項目 内容
設計者 John Backus(IBM)
登場年 1957年
一言 科学技術計算の始祖。 世界初の高水準言語。名前は "FORmula TRANslation" の略
program hello
    print *, 'Hello, World!'
end program hello

* は「書式自由(list-directed formatting)」を意味します。コンパイラが適切な出力書式を自動判断します。


LISP (1958)

項目 内容
設計者 John McCarthy(MIT)
登場年 1958年
一言 AI研究の礎、括弧の海。 現存する言語の中で2番目に古い高水準言語
(format t "Hello, World!")

format 関数の第1引数 t は標準出力を指定します。Common Lisp の記法です。


COBOL (1959)

項目 内容
設計者 Grace Hopper ら(CODASYL)
登場年 1959年
一言 ビジネスの共通言語。 銀行・保険・政府機関の基幹システムで今なお現役
       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO-WORLD.
       PROCEDURE DIVISION.
           DISPLAY "Hello, World!".
           STOP RUN.

COBOL の特徴は「英語の文章のように読める」ことを目指した構文です。DIVISIONSECTION で構造化されます。先頭の空白はエリア A/B の区分で、COBOL の伝統的な書式です。


1960年代 — 構造化への模索

コンピュータが大学や研究機関に広まり、「誰でもプログラミングできるべきだ」という理想が芽生えた時代です。

BASIC (1964)

項目 内容
設計者 John G. Kemeny, Thomas E. Kurtz(ダートマス大学)
登場年 1964年
一言 プログラミング教育の革命。 "Beginner's All-purpose Symbolic Instruction Code" の略
10 PRINT "Hello, World!"

行番号付きの記法は初期の BASIC の特徴です。Microsoft の Bill Gates が最初に商用化した言語でもあります。


Logo (1967)

項目 内容
設計者 Wally Feurzeig, Seymour Papert, Cynthia Solomon
登場年 1967年
一言 子ども向けプログラミングの先駆け。 タートルグラフィックスで有名
print [Hello, World!]

Logo は LISP の方言として設計されました。print コマンドでリスト [...] 内のテキストを出力します。


1970年代 — 構造化プログラミングの確立

「goto 有害論」が広まり、構造化プログラミングが主流になった時代。Unix と C 言語が誕生し、コンピュータの歴史を大きく変えました。

C (1972)

項目 内容
設計者 Dennis Ritchie(Bell Labs)
登場年 1972年
一言 Hello World の「聖地」。 Unix の母であり、現代の多くの言語の祖先
#include <stdio.h>

int main(void) {
    printf("Hello, World!\n");
    return 0;
}

これが 全ての Hello World の原点 です。Kernighan & Ritchie の "K&R" 本で世界に広まりました。


Smalltalk (1972)

項目 内容
設計者 Alan Kay, Dan Ingalls ら(Xerox PARC)
登場年 1972年(Smalltalk-72)、1980年(Smalltalk-80)
一言 オブジェクト指向の原点。 「全てはオブジェクト」の思想を確立
Transcript show: 'Hello, World!'.

Transcript はコンソール出力用のオブジェクト。show: はメッセージ(メソッド呼び出し)です。Smalltalk では全ての操作が「オブジェクトにメッセージを送る」形で表現されます。


SQL (1974)

項目 内容
設計者 Donald D. Chamberlin, Raymond F. Boyce(IBM)
登場年 1974年
一言 データベース言語の標準。 厳密にはプログラミング言語ではなくデータ操作言語(DML)
SELECT 'Hello, World!';

SQL は宣言型言語です。「何を取得するか」を書き、「どう取得するか」はデータベースエンジンに任せます。


Shell Script / Bash (1977 / 1989)

項目 内容
設計者 Stephen Bourne (sh) / Brian Fox (Bash)
登場年 1977年 (sh) / 1989年 (Bash)
一言 Unix の自動化。 システム管理者の必須ツール
#!/bin/bash
echo "Hello, World!"

#!/bin/bash はシバン(shebang)と呼ばれ、このスクリプトを実行するインタプリタを指定します。


1980年代 — オブジェクト指向の台頭

GUI の登場とともに、プログラムの複雑さが増大。オブジェクト指向プログラミングが「銀の弾丸」として注目された時代です。

Objective-C (1984)

項目 内容
設計者 Brad Cox, Tom Love
登場年 1984年
一言 macOS/iOS の基盤。 C に Smalltalk 風のメッセージパッシングを追加
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSLog(@"Hello, World!");
    }
    return 0;
}

@"..." は NSString リテラル、NSLog はコンソール出力関数です。@autoreleasepool はメモリ管理のためのブロックです。


C++ (1985)

項目 内容
設計者 Bjarne Stroustrup(Bell Labs)
登場年 1985年
一言 C の進化形。 オブジェクト指向を取り入れた「C with Classes」
#include <iostream>

int main() {
    std::cout << "Hello, World!" << std::endl;
    return 0;
}

<< は出力ストリーム演算子。C の printf とは異なり、型安全な入出力を提供します。


Erlang (1986)

項目 内容
設計者 Joe Armstrong ら(Ericsson)
登場年 1986年
一言 並行処理の先駆者。 電話交換機のために設計された。「99.9999999%」の稼働率を実現
-module(hello).
-export([hello_world/0]).

hello_world() -> io:fwrite("Hello, World!\n").

Erlang のモジュールシステムは明示的なエクスポートが必要です。io:fwrite は書式付き出力関数です。


Perl (1987)

項目 内容
設計者 Larry Wall
登場年 1987年
一言 テキスト処理の魔術師。 「やり方は一つじゃない(TMTOWTDI)」の哲学
#!/usr/bin/perl
use strict;
use warnings;

print "Hello, World!\n";

use strictuse warnings は現代の Perl では必須のプラグマです。初期の Perl では print "Hello, World!\n"; だけで動作しました。


1990年代 — インターネット時代

World Wide Web の誕生とともに、Web 開発言語が爆発的に増えた時代。現在の主流言語の多くがこの10年に生まれました。

Haskell (1990)

項目 内容
設計者 Simon Peyton Jones, Paul Hudak, Philip Wadler ら(委員会設計)
登場年 1990年
一言 純粋関数型言語の代表。 「副作用のない」プログラミングを追求
main :: IO ()
main = putStrLn "Hello, World!"

main :: IO () は型シグネチャで「main は IO アクションを返す」という意味。Haskell では入出力すら純粋関数の枠組みで扱います。


Python (1991)

項目 内容
設計者 Guido van Rossum
登場年 1991年
一言 読みやすさの哲学。 "There should be one obvious way to do it"
print("Hello, World!")

Python の Hello World は全言語中でも最もシンプルな部類に入ります。この「読みやすさ」こそが Python の設計哲学です。


Lua (1993)

項目 内容
設計者 Roberto Ierusalimschy ら(PUC-Rio)
登場年 1993年
一言 軽量組み込みスクリプト言語。 ゲームエンジン(Roblox、WoW等)に広く採用
print("Hello, World!")

Lua はブラジル生まれの言語で、ポルトガル語で「月」を意味します。


R (1993)

項目 内容
設計者 Ross Ihaka, Robert Gentleman(オークランド大学)
登場年 1993年
一言 統計とデータ分析。 データサイエンティストの標準ツール
cat("Hello, World!\n")

cat は文字列を連結して出力する関数です。print("Hello, World!") でも動作しますが、cat の方が純粋な文字列出力に適しています。


Java (1995)

項目 内容
設計者 James Gosling(Sun Microsystems)
登場年 1995年
一言 Write Once, Run Anywhere. JVM 上で動くクロスプラットフォーム言語
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Java の Hello World は「なぜこんなに長いのか」と初学者が必ず感じるプログラムです。public classpublic static void mainSystem.out.println — 全てに意味があります。


JavaScript (1995)

項目 内容
設計者 Brendan Eich(Netscape)
登場年 1995年
一言 Web の共通言語。 わずか10日間で設計されたにもかかわらず、世界で最も使われている言語の一つ
console.log("Hello, World!");

ブラウザ環境では alert("Hello, World!") も古典的ですが、現代では console.log が標準です。


Ruby (1995)

項目 内容
設計者 まつもとゆきひろ(Matz)
登場年 1995年
一言 プログラマの幸福。 日本生まれ、「楽しくプログラミングできる」ことを最優先に設計
puts "Hello, World!"

puts は "put string" の略。改行を自動で付加します。Ruby on Rails フレームワークの登場で世界的に普及しました。


PHP (1995)

項目 内容
設計者 Rasmus Lerdorf
登場年 1995年
一言 Web の動的ページ。 WordPress、Wikipedia など多くの巨大サービスの基盤
<?php
echo "Hello, World!\n";

<?php はPHPの開始タグ。もともとは "Personal Home Page" の略でしたが、現在は "PHP: Hypertext Preprocessor" の再帰的頭字語です。


2000年代 — モダン言語の登場

既存言語の課題を解決する「次世代言語」が続々と登場。JVM や .NET といったランタイム上で動く言語も増えました。

C# (2000)

項目 内容
設計者 Anders Hejlsberg(Microsoft)
登場年 2000年
一言 Microsoft の回答。 Java に対抗して生まれた .NET の主力言語
using System;

class Hello {
    static void Main() {
        Console.WriteLine("Hello, World!");
    }
}

C# 9 以降では「トップレベルステートメント」により Console.WriteLine("Hello, World!"); だけで動作します。上記はクラシックな書き方です。


D (2001)

項目 内容
設計者 Walter Bright(Digital Mars)
登場年 2001年
一言 C++ の「やり直し」。 C/C++ の互換性を保ちつつ、モダンな機能を取り入れた
import std.stdio;

void main() {
    writeln("Hello, World!");
}

D 言語は C のヘッダファイルを直接インポートでき、C/C++ との相互運用が容易です。


Groovy (2003)

項目 内容
設計者 James Strachan
登場年 2003年
一言 JVM 上の動的言語。 Java との互換性を保ちつつ、スクリプト言語の手軽さを実現
println "Hello, World!"

Groovy は Java のコードをそのまま実行でき、さらに簡潔な記法も提供します。Gradle ビルドツールの設定言語としても広く使われています。


Scala (2004)

項目 内容
設計者 Martin Odersky(EPFL)
登場年 2004年
一言 JVM 上の関数型+OOP。 "Scalable Language" の略。Apache Spark の実装言語
@main def hello(): Unit =
  println("Hello, World!")

Scala 3(Dotty)の記法です。Scala 2 では object Hello extends App { println("Hello, World!") } が一般的でした。


F# (2005)

項目 内容
設計者 Don Syme(Microsoft Research)
登場年 2005年
一言 .NET の関数型言語。 OCaml の影響を強く受けた ML 系言語
printfn "Hello, World!"

printfn は改行付きの書式出力関数。F# は関数型プログラミングを .NET エコシステムに持ち込みました。


Clojure (2007)

項目 内容
設計者 Rich Hickey
登場年 2007年
一言 モダン LISP。 JVM 上で動く実用的な LISP 方言。不変データ構造を重視
(println "Hello, World!")

LISP の括弧は健在ですが、Clojure は JVM のライブラリをそのまま使えるため、実用性が高いのが特徴です。


2010年代 — 安全性と生産性の追求

既存言語の「痛み」を解消するために、安全性・並行性・開発体験を重視した言語が続々と誕生しました。

Go (2009 / 2012年正式リリース)

項目 内容
設計者 Robert Griesemer, Rob Pike, Ken Thompson(Google)
登場年 2009年(発表)/ 2012年(1.0リリース)
一言 Google の並行処理言語。 シンプルさと高速なコンパイルを両立。Docker、Kubernetes の実装言語
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

Go は使われていない import があるとコンパイルエラーになります。この「厳格さ」が Go の設計思想を象徴しています。


Rust (2010 / 2015年正式リリース)

項目 内容
設計者 Graydon Hoare(Mozilla)
登場年 2010年(発表)/ 2015年(1.0リリース)
一言 メモリ安全性の革命。 ガベージコレクタなしでメモリ安全を保証する「所有権システム」
fn main() {
    println!("Hello, World!");
}

println!! はマクロ呼び出しを意味します。Rust では関数とマクロを明確に区別します。


Dart (2011)

項目 内容
設計者 Lars Bak, Kasper Lund(Google)
登場年 2011年
一言 Flutter の言語。 モバイル・Web・デスクトップのクロスプラットフォーム開発
void main() {
    print('Hello, World!');
}

Dart は Flutter フレームワークの普及とともに急速にユーザーを拡大しました。


Elixir (2011)

項目 内容
設計者 Jose Valim
登場年 2011年
一言 Erlang VM 上のモダン言語。 Ruby 風の文法で Erlang の並行処理能力を活用
IO.puts("Hello, World!")

Elixir は Erlang の BEAM VM 上で動作し、Erlang の全ライブラリをそのまま使えます。Phoenix フレームワークが有名です。


Kotlin (2011 / 2016年正式リリース)

項目 内容
設計者 JetBrains
登場年 2011年(発表)/ 2016年(1.0リリース)
一言 Android の公式言語。 Java の冗長さを排除し、Null 安全を組み込み
fun main() {
    println("Hello, World!")
}

Java と比べてどれだけ簡潔か一目瞭然です。2019年に Google が Android の推奨言語に指定しました。


TypeScript (2012)

項目 内容
設計者 Anders Hejlsberg(Microsoft)
登場年 2012年
一言 JavaScript + 型安全。 大規模開発での JavaScript の課題を解決
const message: string = "Hello, World!";
console.log(message);

TypeScript は JavaScript のスーパーセットです。型注釈を追加しても、コンパイル後は通常の JavaScript になります。


Julia (2012)

項目 内容
設計者 Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman(MIT)
登場年 2012年
一言 科学計算の新星。 Python の使いやすさと C の速度を両立する野心的な言語
println("Hello, World!")

Julia はジャストインタイム(JIT)コンパイルにより、C に匹敵する実行速度を実現します。


Swift (2014)

項目 内容
設計者 Chris Lattner(Apple)
登場年 2014年
一言 Apple のモダン iOS 言語。 Objective-C の後継として、安全性と表現力を両立
print("Hello, World!")

Swift は main 関数の宣言すら不要です。ファイルのトップレベルに書いたコードがそのまま実行されます。


Crystal (2014)

項目 内容
設計者 Ary Borenszweig, Juan Wajnerman(Manas Technology Solutions)
登場年 2014年
一言 Ruby の速度。 Ruby 風の文法でネイティブコンパイルされる高速言語
puts "Hello, World!"

Ruby プログラマなら違和感なく書けます。しかし内部では LLVM を使ってネイティブコードにコンパイルされます。


2020年代 — 最新世代

既存言語の根本的な課題に挑戦する、次世代の言語たちです。

Zig (2015 / 2020年代に普及)

項目 内容
設計者 Andrew Kelley
登場年 2015年(開発開始)/ 2020年代に注目を集める
一言 C の後継候補。 C との完全な相互運用性を持ち、隠れた制御フローを排除
const std = @import("std");

pub fn main() void {
    std.debug.print("Hello, {s}!\n", .{"World"});
}

@import はコンパイル時に評価される組み込み関数。Zig は「隠れたアロケーション」を一切行わない設計です。


V (2019 / 2020年代)

項目 内容
設計者 Alexander Medvednikov
登場年 2019年
一言 シンプルさを追求。 Go・Rust・Swift から影響を受けた、高速コンパイル言語
fn main() {
    println('Hello, World!')
}

V は単一ファイルプログラムでは fn main() の宣言を省略し、println('Hello, World!') だけでも動作します。


Mojo (2023)

項目 内容
設計者 Chris Lattner ら(Modular)
登場年 2023年
一言 Python のスーパーセットで AI 向け。 Python の使いやすさと C++ 級のパフォーマンスを両立
fn main():
    print("Hello, World!")

Mojo は Python の文法をそのまま使えますが、fn キーワードで型チェックの厳格な関数を定義できます。Swift の設計者 Chris Lattner が手がけている点でも注目されています。


Gleam (2024年 v1.0)

項目 内容
設計者 Louis Pilfold
登場年 2024年(v1.0リリース)
一言 BEAM VM 上の型安全言語。 Erlang/Elixir のエコシステムで型安全を実現
import gleam/io

pub fn main() {
  io.println("Hello, World!")
}

Gleam は Erlang VM(BEAM)上で動作し、JavaScript にもコンパイル可能です。


Roc (2020年代開発中)

項目 内容
設計者 Richard Feldman
登場年 2020年代(開発中)
一言 関数型の新星。 Elm の思想を汎用言語に拡張。速度と使いやすさを両立
app [main!] {
    cli: platform "https://github.com/roc-lang/basic-cli/...",
}

import cli.Stdout

main! = |_args|
    Stdout.line!("Hello, World!")

Roc はプラットフォームという概念を持ち、アプリケーションコードとランタイムを分離する独自のアーキテクチャです。


難解言語(Esolang)特集

ここからがこの記事のハイライトです。実用性は皆無ですが、コンピュータサイエンスの本質を突く(あるいは完全にふざけた)言語たちを紹介します。

全て「チューリング完全」です。 つまり理論上は、これらの言語でどんなプログラムでも書けます。


Brainfuck (1993)

項目 内容
設計者 Urban Muller
登場年 1993年
設計思想 最小の命令セットでチューリング完全を実現する

たった8つの命令(> < + - . , [ ])だけで構成される言語です。

命令 意味
> ポインタを右に移動
< ポインタを左に移動
+ 現在のセルの値を+1
- 現在のセルの値を-1
. 現在のセルの値を文字として出力
, 入力を現在のセルに格納
[ セルの値が0なら対応する]へジャンプ
] セルの値が0でなければ対応する[へ戻る
++++++++++[>+++++++>++++++++++>+++>+<<<<-]
>++.>+.+++++++..+++.>++.<<+++++++++++++++.
>.+++.------.--------.>+.>.

このコードの出力は Hello World!(カンマなし)です。カンマ付きの Hello, World! を出力するにはさらにコードが長くなります。最初に10のループカウンタを設定し、各セルに H(72), e(101), l(108), o(111) などの ASCII 値を効率的に生成しています。


Befunge (1993)

項目 内容
設計者 Chris Pressey
登場年 1993年
設計思想 2次元のコード空間を上下左右に移動しながら実行する
0"!dlroW ,olleH">:#,_@

コードの実行方向が変わるのが Befunge の最大の特徴です。"!dlroW ,olleH" は文字列を逆順にスタックにプッシュし、>:#,_ のループで1文字ずつ出力します。@ でプログラム終了です。


Malbolge (1998)

項目 内容
設計者 Ben Olmstead
登場年 1998年
設計思想 「史上最悪のプログラミング言語」を目指して設計された
('&%:9]!~}|z2Vxwv-,POqponl$Hjihf|B@@>,=<M:9&6uXVV2TSn.Oe*c;(I&%$#"mCBA?zxxv:Pb8`qo42mZF.DIy*@dD'<;_?!\}}|z2VxSSQ

Malbolge の名前はダンテの「神曲」に登場する地獄の第8圏に由来します。この Hello World プログラムは人間が書いたものではなく、2000年に Andrew Cooke が開発したビームサーチアルゴリズムによって発見されました。最初のプログラムが見つかるまで、言語の公開から約2年かかりました。


HQ9+ (2001)

項目 内容
設計者 Cliff L. Biffle
登場年 2001年
設計思想 よくあるプログラミングタスクを1文字で解決する
H

たった1文字。H を入力すると Hello, World! が出力されます。他の命令は Q(クワイン:自分自身のソースコードを出力)、9("99 Bottles of Beer" の歌詞を出力)、+(アキュムレータをインクリメント)の3つだけです。


Ook! (2001)

項目 内容
設計者 David Morgan-Mar
登場年 2001年
設計思想 オランウータンでも書けるプログラミング言語

Ook. Ook! Ook? の3種類のトークンのペアだけで構成される Brainfuck の亜種です。

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.

テリー・プラチェットの「ディスクワールド」シリーズに登場する図書館司書のオランウータンが着想の元です。


Shakespeare (2001)

項目 内容
設計者 Jon Åslund, Karl Wiberg
登場年 2001年
設計思想 シェイクスピア劇の台本形式でプログラムを書く
Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.

                    Act I: Hamlet's insults and flattery.

                    Scene I: The insulting of Romeo.

[Enter Hamlet and Romeo]

Hamlet:
 You lying stupid fatherless big smelly half-witted coward!
 You are as stupid as the difference between a handsome rich brave
 hero and thyself! Speak your mind!

 You are as brave as the sum of your fat little stuffed misused dusty
 old rotten codpiece and a beautiful fair warm peaceful sunny summer's
 day. You are as healthy as the difference between the sum of the
 sweetest reddest rose and my father and yourself! Speak your mind!

 You are as cowardly as the sum of yourself and the difference
 between a big mighty proud kingdom and a horse. Speak your mind.
 Speak your mind!

[Exit Romeo]

                    Scene II: The praising of Juliet.

[Enter Juliet]

Hamlet:
 Thou art as sweet as the sum of the sum of Romeo and his horse and his
 black cat! Speak thy mind!

[Exit Juliet]

                    Scene III: The praising of Ophelia.

[Enter Ophelia]

Hamlet:
 Thou art as lovely as the product of a large rural town and my amazing
 bottomless embroidered purse. Speak thy mind!
 Thou art as loving as the product of the bluest clearest sweetest sky
 and the sum of a squirrel and a white horse. Thou art as beautiful as
 the difference between Juliet and thyself. Speak thy mind!

[Exeunt Ophelia and Hamlet]

                    Act II: Behind Hamlet's back.

                    Scene I: Romeo and Juliet's conversation.

[Enter Romeo and Juliet]

Romeo:
 Speak your mind. You are as worried as the sum of yourself and the
 difference between my small smooth hamster and my nose. Speak your
 mind!

Juliet:
 Speak YOUR mind! You are as bad as Hamlet! You are as small as the
 difference between the square of the difference between my little pony
 and your big hairy hound and the cube of your sorry little
 codpiece. Speak your mind!

[Exit Romeo]

                    Scene II: Juliet and Ophelia's conversation.

[Enter Ophelia]

Juliet:
 Thou art as good as the quotient between Romeo and the sum of a small
 furry animal and a leech. Speak your mind!

Ophelia:
 Thou art as disgusting as the quotient between Romeo and twice the
 difference between a mistletoe and an oozing infected blister! Speak
 your mind!

[Exeunt]

変数は「登場人物」、代入は「侮辱や賛辞を述べること」で行います。Speak your mind! が出力命令です。肯定的な名詞は +1、否定的な名詞は -1 として計算され、形容詞は値を2倍にします。


Chef (2002)

項目 内容
設計者 David Morgan-Mar
登場年 2002年
設計思想 料理のレシピ形式でプログラムを書く
Hello World Souffle.

Ingredients.
72 g haricot beans.
101 eggs.
108 g lard.
111 cups oil.
32 zucchinis.
119 ml water.
114 g red salmon.
100 g dijon mustard.
33 potatoes.

Method.
Put potatoes into the mixing bowl.
Put dijon mustard into the mixing bowl.
Put lard into the mixing bowl.
Put red salmon into the mixing bowl.
Put oil into the mixing bowl.
Put water into the mixing bowl.
Put zucchinis into the mixing bowl.
Put oil into the mixing bowl.
Put lard into the mixing bowl.
Put lard into the mixing bowl.
Put eggs into the mixing bowl.
Put haricot beans into the mixing bowl.
Liquefy contents of the mixing bowl.
Pour contents of the mixing bowl into the baking dish.

Serves 1.

材料の数値が ASCII コードに対応しています(72=H, 101=e, 108=l ...)。スタック(mixing bowl)に逆順に積んで、最後に出力(baking dish)します。Liquefy は数値を文字として扱う命令です。


Piet (2002)

項目 内容
設計者 David Morgan-Mar
登場年 2002年
設計思想 画像(抽象画)がそのままプログラムになる
【画像で表現される言語のため、テキストでのコード例はありません】

画家ピエト・モンドリアンに由来する名前の通り、色のブロックで構成された画像がプログラムです。色相と明度の変化が命令に対応し、実行ポインタが画像上を移動しながら処理を行います。Hello World を出力する Piet プログラムは、カラフルなドット絵として存在します。


Whitespace (2003)

項目 内容
設計者 Edwin Brady, Chris Morris
登場年 2003年
設計思想 空白文字(スペース・タブ・改行)だけで書く言語
(可視文字が存在しないため、コードを表示できません)

空白(Space)、タブ(Tab)、改行(LF)の3種類の文字だけが命令であり、その他の可視文字は全て無視されます。つまり、通常のプログラムの中に Whitespace プログラムを「隠す」ことができます。数値は Space=0、Tab=1 の2進数で表現し、各文字の ASCII 値をスタックにプッシュして出力します。


COW (2003)

項目 内容
設計者 Sean Heber
登場年 2003年
設計思想 牛の鳴き声でプログラミングする

12種類の命令が全て moo の大文字・小文字の組み合わせで構成されています。

コード 意味
moo 対応する MOO を逆方向に検索してジャンプ
mOo メモリポインタを1つ戻す
moO メモリポインタを1つ進める
mOO 現在のメモリの値を命令として実行
Moo 値が0なら入力、0以外なら ASCII 文字として出力
MOo 現在のメモリの値を-1
MoO 現在のメモリの値を+1
MOO 値が0なら次の命令をスキップ、0以外なら続行
OOO 現在のメモリの値を0にリセット
MMM レジスタとの値のコピー/ペースト
OOM 現在のメモリの値を数値として出力
oom 標準入力から整数を読み込み
MoO MoO MoO MoO MoO MoO MoO MoO MOO moO MoO MoO MoO MoO MoO moO MoO
MoO MoO MoO moO MoO MoO MoO MoO moO MoO MoO MoO MoO MoO MoO MoO MoO
MoO moO MoO MoO MoO MoO mOo mOo mOo mOo mOo MOo moo moO moO moO moO
Moo moO MOO mOo MoO moO MOo moo mOo MOo MOo MOo Moo MoO MoO MoO MoO
MoO MoO MoO Moo Moo MoO MoO MoO Moo MMM mOo mOo mOo MoO MoO MoO MoO
Moo moO Moo MOO moO moO MOo mOo mOo MOo moo moO moO MoO MoO MoO MoO
MoO MoO MoO MoO Moo MMM MMM Moo MoO MoO MoO Moo MMM MOo MOo MOo Moo
MOo MOo MOo MOo MOo MOo MOo MOo Moo mOo MoO Moo

ループとレジスタを活用した短縮版です。Brainfuck の亜種ですが、4つの追加命令(OOO, MMM, OOM, oom)により、わずかに書きやすくなっています。


LOLCODE (2007)

項目 内容
設計者 Adam Lindsay
登場年 2007年
設計思想 インターネットミーム「LOLcats」をベースにした言語
HAI 1.2
  VISIBLE "Hello, World!"
KTHXBYE

HAI = "Hi"(プログラム開始)、VISIBLE = printKTHXBYE = "OK, thanks, bye"(プログラム終了)。インターネット文化を言語設計に持ち込んだ象徴的な存在です。


カテゴリ別まとめ表

実行方式別

カテゴリ 言語
コンパイル型 Fortran, C, C++, Objective-C, Rust, Go, Swift, Crystal, Zig, V, D, Mojo
インタプリタ型 Python, Ruby, Perl, PHP, JavaScript, Lua, R, Logo, BASIC, Bash
JVM 系 Java, Kotlin, Scala, Groovy, Clojure
.NET 系 C#, F#
BEAM VM 系 Erlang, Elixir, Gleam
トランスパイル型 TypeScript(→JavaScript)

パラダイム別

カテゴリ 言語
手続き型 C, Fortran, COBOL, BASIC, Bash
オブジェクト指向 Java, C++, C#, Objective-C, Smalltalk
関数型 Haskell, F#, Clojure, Elixir, Gleam, Roc
マルチパラダイム Python, Ruby, Kotlin, Swift, Rust, Scala, Go, TypeScript, Julia, Dart, D, Erlang, Perl, Lua, R, Crystal, Zig, V, Mojo

Hello World の行数比較

言語 行数 言語 行数
HQ9+ 1 Python 1
Ruby 1 Lua 1
Julia 1 Crystal 1
Perl 1* Swift 1
PHP 2 Bash 2
Kotlin 3 Dart 3
Elixir 1 Groovy 1
F# 1 LOLCODE 3
Go 7 Rust 3
C 6 C++ 6
Java 5 C# 7
COBOL 5 Fortran 3
Erlang 4 Objective-C 7
Shakespeare 60+ Chef 18

* use strict; use warnings; を省いた最小構成の場合。


「最短 Hello World」ランキング

文字数が最も少ない言語トップ10です。

順位 言語 コード 文字数
1 HQ9+ H 1
2 Ruby puts "Hello, World!" 20
2 Crystal puts "Hello, World!" 20
4 Python print("Hello, World!") 22
4 Lua print("Hello, World!") 22
4 Swift print("Hello, World!") 22
7 Groovy println "Hello, World!" 23
7 F# printfn "Hello, World!" 23
9 Julia println("Hello, World!") 24
9 Elixir IO.puts("Hello, World!") 24

HQ9+ は「Hello World を出力する」ための専用命令 H を持っているため、1文字で完了します。言語設計としてはチートですが、ルール上は間違いなく最短です。


「最長 Hello World」ランキング

行数・文字数が最も多い言語トップ10です(難解言語を含む)。

順位 言語 概算行数 特徴
1 Shakespeare 60行以上 演劇の台本を書く必要がある
2 COW(力任せ版) 30行以上 全文字のASCII値を1つずつインクリメント
3 Ook! 18行 Brainfuck の亜種だが、トークンが長い
4 Chef 18行 料理のレシピ形式
5 Malbolge 2行 文字数は100以上だが行数は少ない
6 Brainfuck 3行 短いが可読性は絶望的
7 COBOL 5行 DIVISIONの構造が冗長
8 Objective-C 7行 @autoreleasepool 等のボイラープレート
9 C# 7行 クラスとメソッドの定義が必要
10 Go 7行 package, import の宣言が必要

まとめ

Hello World から見える言語設計の思想

Hello World はたった1行〜数行のプログラムですが、その中に言語設計者の哲学が凝縮されています。

  • Python の print("Hello, World!") — 「読みやすさが全て」という Guido van Rossum の信念
  • Java の 5行構造 — 「全てはクラスに属する」という一貫したオブジェクト指向の設計
  • Rust の println! — マクロ記号 ! で「これはコンパイル時に展開される」ことを明示する透明性
  • Go の import 宣言 — 使わないものは書かせない、という厳格さ
  • Brainfuck の記号列 — 最小限の命令セットでチューリング完全を証明する、計算理論への挑戦

「最初の1行」が語る言語の性格

Hello World を見れば、その言語が以下のどれを重視しているかがわかります。

重視する価値 言語例
簡潔さ Python, Ruby, Julia
型安全性 Rust, TypeScript, Gleam
構造の明示 Java, C#, Go
関数型の純粋さ Haskell, F#, Roc
後方互換性 Fortran, COBOL
ユーモア LOLCODE, Chef, Shakespeare

おすすめの「次に学ぶ言語」

この記事を読んで興味を持った方へ、目的別のおすすめを紹介します。

目的 おすすめ言語 理由
Web 開発を始めたい JavaScript / TypeScript Web のフロントエンドもバックエンドも書ける
AI・データ分析がしたい Python ライブラリの豊富さが圧倒的
モバイルアプリを作りたい Swift (iOS) / Kotlin (Android) 各プラットフォームの公式言語
システムプログラミングに挑戦 Rust メモリ安全性を学びながら低レベルを理解できる
関数型の考え方を学びたい Haskell / Elixir 純粋関数型の思考法が身につく
とにかく楽しみたい Brainfuck / LOLCODE プログラミングの本質を笑いながら学べる

Hello World は「始まり」です。どの言語を選んでも、最初の Hello, World! を画面に表示した瞬間の感動は同じです。

ぜひ気になった言語の Hello World を実際に動かしてみてください。


参考


@kotaro_ai_lab
AI活用や開発効率化について発信しています。フォローお気軽にどうぞ!

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?