- Javaの起動コード
public static void main(String[] args)が、パソコン(実行エンジン)の中で世界共通のスタートボタンとして機能する仕組みをProcessingのキャンバス上に視覚化する。
どうも上達の研究家のワタタクです。
前回の記事(Javaの呪文「public static void main(String[] args)」ってなに?5つの単語の目的をPCの仕様で徹底解体!)では、なぜ何も指示しなくていいはずの最初にわざわざあの長い呪文を書くのかを、5つの単語の「目的」とPCのメモリ仕様から紐解きました。
今回はLinked Logカテゴリーとして、「まだ誰も new(実体化)していない静かなメモリ空間に、staticの電流が走り、mainというスタートボタンが押されてJavaの世界が美しく目覚める瞬間」をProcessingのコードで表現してみました!
暗記するだけだったあの1行が、一気に躍動感のあるシステムとして脳にマッピングされるコードと設計図を共有します。
この記事を書いた人


上達の研究家 / アーティスト
「才能」ではなく「発見」で描く。文系・36歳からの上達ハック。
- ゼロから独学でクリエイティブコーディングに挑戦し、以下の実績を達成
- 開始1年8ヶ月目までに公募6つに挑戦し、3つ入選(勝率50%)
- KITTE大阪の18メートルあるAxCROSS大型スクリーン
- 虎ノ門ヒルズステーションタワーB2F TOKYO NODE エントランスサイネージで展示
- UN:O(東京大手町)にある会員限定のサテライトオフィスにて2作品常設展示
- 開始1年8ヶ月目までに公募6つに挑戦し、3つ入選(勝率50%)
- 開始1年9ヶ月目に、虎ノ門ヒルズ49階、地上250mのインフィニティプールへ作品提供・展示
- 実際の展示作品と動画、音楽やSEOでの実績はポートフォリオに載せております→https://my-portfolio-blue-three-63.vercel.app/works
脳内をビジュアライズするための設計思想
Javaの起動システムをグラフィックに翻訳するため、以下の3つのギミックを仕込みました。
1. 「インスタンス化(new)される前」の静かなメモリ空間
画面全体を深い電子の闇(ダークネイビー)にし、上部にPCの実行エンジン(JVM)の走査ラインを配置。まだオブジェクトが何も生成されていない、プログラム起動直前の緊迫感を表現しました。
2. 「static」の電流と巨大なスタートボタン
画面中央に、世界共通の起動規格である MAIN START ボタンをドーンと配置しました。ボタンの周囲には、インスタンスを作らなくても最初から脳内にロードされているエリアを象徴する、激しい光のパルス(static の電流エフェクト)が循環しています。
3. ボタンが押されて飛び出す主役(main)と粒子(args)
起動ボタンが作動した瞬間、中央から一気にエネルギーが解放され、画面全体に美しい「Particle(粒子)」が飛び散り始めます。これによって、「ここからすべての処理が動き出すんだ!」という最初の一歩を直感的にビジュアル化しました。
Processing実装コード(Javaモード)
実行すると、Javaの世界が目覚める起動エフェクトが立ち上がります。画面のどこかをクリックすると、あなたのデスクトップに実行結果(画像)が自動で保存されるおまけ機能付きです。
// ==========================================
// 知識を視覚化する:Javaの「世界共通のスタートボタン(mainメソッド)」
// ==========================================
PFont jpFont;
float angle = 0;
int particleCount = 60;
float[] px = new float[particleCount];
float[] py = new float[particleCount];
float[] pSpeedX = new float[particleCount];
float[] pSpeedY = new float[particleCount];
color[] pColor = new color[particleCount];
void setup() {
size(1200, 600);
// 【修正①】フォントの読み込みはsetupで1回だけに最適化
jpFont = createFont("Meiryo", 24, true);
textFont(jpFont);
// 起動と同時に飛び出すParticleの初期化
for (int i = 0; i < particleCount; i++) {
px[i] = width / 2;
py[i] = height / 2 + 20;
float pAngle = random(TWO_PI);
float speed = random(2, 7);
pSpeedX[i] = cos(pAngle) * speed;
pSpeedY[i] = sin(pAngle) * speed;
if (random(1) > 0.5) {
pColor[i] = color(52, 152, 219, 200); // publicの青
} else {
pColor[i] = color(46, 204, 113, 200); // mainの緑
}
}
}
void draw() {
// 【修正②】描画の一番最初で背景を塗る(これで上に描くものが消えない)
background(15, 18, 26); // 電子の闇(メモリ空間)
angle += 0.03; // 電流アニメーション用
// タイトル共通設定
textSize(24);
textAlign(CENTER, TOP);
fill(240);
text("【スタートボタン(mainメソッド)の世界】\nPCが迷わず最初の一歩を踏み出すための、世界共通の起動システム", width / 2, 30);
// 背景エフェクト:JVMによる高速スキャン
stroke(52, 152, 219, 30);
strokeWeight(1);
float scanY = (sin(angle * 0.5) + 1) * 0.5 * height;
line(0, scanY, width, scanY);
// 中央:静的メモリ(static)に浮かび上がる巨大なスタートボタン
pushMatrix();
translate(width / 2, height / 2 + 20);
// staticの電流パルス(ボタンの周囲を流れるネオン光)
noFill();
for (int i = 4; i > 0; i--) {
stroke(155, 89, 182, 60 - i*10); // 【調整】紫の透明度を少し上げて見えやすく
strokeWeight(i * 4);
ellipse(0, 0, 240 + sin(angle + i)*15, 240 + sin(angle + i)*15);
}
// 起動ボタン本体
stroke(46, 204, 113); // mainの緑枠
strokeWeight(3);
fill(25, 30, 45, 230);
ellipse(0, 0, 200, 200);
// ボタン内部のネオンデザイン
noFill();
stroke(46, 204, 113, 100);
ellipse(0, 0, 180, 180);
// スタートマーク(三角アイコン)
fill(46, 204, 113, 200);
noStroke();
triangle(-20, -30, -20, 30, 35, 0);
// 文字:MAIN START
fill(255);
textSize(16);
textAlign(CENTER, CENTER);
text("PUBLIC STATIC VOID", 0, -50);
textSize(22);
fill(46, 204, 113);
text("MAIN()", 0, 55);
popMatrix();
// 起動によって解き放たれた主役(Particle)たちのアニメーション
for (int i = 0; i < particleCount; i++) {
px[i] += pSpeedX[i];
py[i] += pSpeedY[i];
if (px[i] < 0 || px[i] > width) pSpeedX[i] *= -1;
if (py[i] < 120 || py[i] > height - 80) pSpeedY[i] *= -1;
noStroke();
fill(pColor[i]);
ellipse(px[i], py[i], 12, 12);
fill(pColor[i], 50);
ellipse(px[i], py[i], 24, 24);
}
// 下部:単語の目的を固定表示
textSize(13);
textAlign(CENTER, TOP);
fill(52, 152, 219);
text("① public: 外部(PC)から制限なしで見える公開設定", width / 4, height - 70);
fill(155, 89, 182);
text("② static: new(実体化)する前からメモリに常駐する領域", width / 2, height - 70);
fill(46, 204, 113);
text("③ main: PCが最初の一歩として自動検索する共通規格の名前", width * 3 / 4, height - 70);
fill(100);
textSize(11);
textAlign(CENTER, BOTTOM);
text("💡 画面をクリックすると、デスクトップに実行結果が画像で保存されます", width / 2, height - 10);
}
void mousePressed() {
String desktopPath = System.getProperty("user.home") + "/Desktop/";
String timestamp = nf(hour(), 2) + nf(minute(), 2) + nf(second(), 2);
String fileName = "main_method_start_" + timestamp + ".png";
save(desktopPath + fileName);
println("デスクトップに保存しました: " + fileName);
}コード表現に落とし込んでみて気づいたこと
Javaの public static void main(String[] args) という1行を、ただの「おまじない」としてコピペしていた頃とは、コードの見え方が180度変わりました。
実際にProcessingで「まだ何も new されていない空っぽの暗闇」の中に、常時スタンバイしている巨大なボタンを描き、そこからエネルギー(Particle)を解放するコードを組むことで、「あぁ、この1行があるからこそ、パソコンは迷わずにJavaの世界を起動させることができるんだな」とシステムの本質が腑に落ちました。
皆さんもぜひ、手元でこの世界共通のスタートボタンを起動させて、Javaの歴史的な大原則を体感してみてください!
それでは今日もレッツワクワクコーディング。
関連記事



