クワインとは、プログラミングにおいて自分自身を出力するコードのことです。ここでは、各言語でのクワインを10言語、一覧で表記していきます。
また、すぐに実行する方法も解説していきます。
クワインとは?
クワイン(Quine)とは、自分自身のソースコードを出力するプログラムのことです。
つまり、実行すると自分のプログラムそのものが表示される、ちょっと不思議で面白いコードです。
コーディングの技術を使った遊びの一つでもあります。
プログラミング言語の仕組みや文字列処理の理解にも役立ちます。
クワインの試し方
クワインは各言語の開発環境がなくても、ブラウザだけですぐに試すことができます。
paiza.ioなど、ブラウザ上で様々なコーディングができるツールで実行して試すことができます。
やり方は、各言語のコードをそのまま貼り付けて、実行ボタンを押すだけです。
ブラウザ上で動かせるので、すぐに確認可能です。

上図はPythonのクワインを実行してみた実例です。ソースコードがそのまま出力されているのがわかります。
各言語でのクワイン
ここでは代表的な5言語に加えて、様々な言語でのクワイン例を紹介します。
基本的な構造は、文字列を変数に入れ、それを呼び出すことで自己出力を実現しています。
1. C言語
#include <stdio.h>
char *s = "#include <stdio.h>%cchar *s=%c%s%c;%cint main(){printf(s,10,34,s,34,10);return 0;}";
int main() {
printf(s,10,34,s,34,10);
return 0;
}
解説
sに自分のコードを文字列として格納printfで%sとして表示- 特殊文字(改行
10、ダブルクオート34)を使って構文を維持
2. Python
s='s=%r\nprint(s%%s)'
print(s%s)
解説
%rを使って文字列をエスケープ付きで出力s % sで文字列自身を出力
3. Java
public class Quine {
public static void main(String[] args) {
String s = "public class Quine {%n public static void main(String[] args) {%n String s = %c%s%c;%n System.out.printf(s,10,34,s,34);%n }%n}";
System.out.printf(s,10,34,s,34);
}
}
解説
System.out.printfで書式付き出力- 改行
%nとダブルクオート%cを組み合わせて文字列を出力
4. HTML + JavaScript
<!DOCTYPE html>
<html>
<body>
<script>
var s = '<script>var s=%s;document.write(s.replace(/%s/,JSON.stringify(s)))<\/script>';
document.write(s.replace(/%s/,JSON.stringify(s)))
</script>
</body>
</html>
解説
- JavaScript の文字列にソースコードを格納
JSON.stringifyで特殊文字をエスケープdocument.writeでHTML上に表示
5. Ruby
s='s=%p;puts s%%s';puts s%s
解説
%pでエスケープ済み文字列を出力s % sで自分自身を表示
6. JavaScript(Node.js向け)
s="s=%o;console.log(s,s)";console.log(s,s)
解説
%oでオブジェクト(文字列)を出力console.log(s,s)で自己出力
7. PHP
<?php
$s='<?php $s=%s; printf($s, var_export($s,true)); ?>';
printf($s, var_export($s,true));
?>
解説
var_exportで文字列をエスケープして表示printfで自己出力
8. Perl
$_='$_=%q|%s|;printf $_,$_';printf $_,$_
解説
%q|…|で文字列リテラル化printfで文字列自身を出力
9. Go
package main
import "fmt"
func main() {
s:="package main\nimport \"fmt\"\nfunc main() {\n\ts:=%q\n\tfmt.Printf(s,s)\n}"
fmt.Printf(s,s)
}
解説
%qでGo用文字列としてエスケープfmt.Printfで出力
10. Swift
let s = "let s = %c%@%c\nprint(String(format: s, 34, s, 34))"
print(String(format: s, 34, s, 34))
解説
%@で文字列を挿入- 34 はダブルクオートの ASCII コード
String(format:)で自己出力
クワインの仕組み
ほとんどの言語で、基本構造は次の通りです:
- 文字列にソースコードを格納
- その文字列を出力
- 必要に応じて 文字列の中に文字列を入れる(エスケープ処理)
これにより、実行すると自分のコードそのものが表示されるという現象が起こります。
まとめ
- クワインは「自己出力プログラム」で、どの言語でも作ることが可能
- 基本は文字列を扱うテクニックがポイント
- 学習や遊びとして、複数言語で書き比べると理解が深まる
ぜひ、上記の10言語の例を実際に試して、自分のクワインを作ってみましょう!
プログラミングの奥深さを感じられる楽しいチャレンジです。


