株式会社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 が最初のプログラムとして選ばれるのか
- 最小限のコードで動作確認ができる — 環境構築が正しいかを確認する最速の方法
- 言語の「文法の骨格」が見える — エントリーポイント、出力関数、文字列リテラルの書き方が一目でわかる
- 心理的ハードルが低い — 「動いた!」という成功体験を最速で得られる
この記事の楽しみ方
- 年代順に読む — プログラミング言語 70年の進化を追体験
- カテゴリ別に比較 — コンパイル型 vs インタプリタ型、手続き型 vs 関数型の違いを Hello World で実感
- 難解言語で遊ぶ — 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 の特徴は「英語の文章のように読める」ことを目指した構文です。
DIVISIONやSECTIONで構造化されます。先頭の空白はエリア 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 の方言として設計されました。
[...]内のテキストを出力します。
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 strictとuse 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 class、public static void main、System.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=KTHXBYE= "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 を実際に動かしてみてください。
参考
- The C Programming Language (K&R) — Wikipedia
- Hello, World! program — Wikipedia
- Fortran — 公式サイト
- Common Lisp — HyperSpec
- COBOL — GnuCOBOL
- C — cppreference.com
- C++ — cppreference.com
- Java — Oracle 公式ドキュメント
- Python — 公式ドキュメント
- Ruby — 公式サイト
- JavaScript — MDN Web Docs
- Go — 公式サイト
- Rust — 公式サイト
- Swift — 公式ドキュメント
- Kotlin — 公式サイト
- TypeScript — 公式サイト
- Haskell — 公式サイト
- Erlang — 公式サイト
- Elixir — 公式サイト
- Scala — 公式サイト
- Dart — 公式サイト
- Julia — 公式サイト
- Zig — 公式サイト
- Gleam — 公式サイト
- Roc — 公式サイト
- Mojo — Modular 公式サイト
- V — 公式サイト
- Crystal — 公式サイト
- D — 公式サイト
- F# — Microsoft Docs
- Clojure — 公式サイト
- Esolang Wiki — 難解言語百科事典
- COW — 公式サイト
- Chef — Esolang Wiki
- Shakespeare Programming Language
@kotaro_ai_lab
AI活用や開発効率化について発信しています。フォローお気軽にどうぞ!