Javaの概念「パッケージ」の正体である、フォルダの入れ子構造(階層)をProcessingのキャンバス上に視覚化する。
どうも、上達の研究家のワタタクです。
前回の記事、【超カンタン】Javaの「パッケージ」ってなに?名前空間やFQCNとの繋がりもフォルダの例えでスッキリ解決!では、パッケージの本質がパソコンの「フォルダ分け」であること、そして「名前空間」「完全修飾クラス名(FQCN)」との三位一体の関係性を解説しました。
今回は「ドット(.)で区切るごとにフォルダの奥深くへと潜り、大切なプログラムが綺麗に守られている世界」をProcessingのコードで表現してみました!
言葉の概念をグラフィックに翻訳した設計図とコードを共有します。
脳内をビジュアライズするための設計思想
Javaのパッケージ「net.watataku.art.Particle」という構造をグラフィックに落とし込むため、以下の3つがポイント。
1. 物理的な「入れ子(ネスト)構造」の3D表現
ドットで繋がれた net ➔ watataku ➔ art という階層を、サイバー感のある立体的な「3重の四角い箱」として表現しました。外側の箱(フォルダ)を開けると、中にさらに箱が入っている様子が直感的に伝わります。
2. 最深部で優雅に光るプログラム
一番奥の art パッケージ(箱)の中心には、美しく明滅する「Particle」を配置しました。「パッケージによって、大切なプログラムが外の世界の大混乱から綺麗に守られ、隔離されている」という安心感をビジュアルにしています。
3. 動的なパッケージパスの強調
ただ箱を描くだけでなく、現在どの階層を見ているのかが分かるように、パスのテキスト(net. ➔ watataku. ➔ art.)が中央に向かって綺麗にステップを踏んで配置されるレイアウトにしました。
Processing実装コード(Javaモード)
実行すると、パッケージの階層構造がサイバー調のグラフィックとして立ち上がります。
// ==========================================
// 知識を視覚化する:Javaの「パッケージ(フォルダ階層)」
// (マウスクリックでデスクトップに自動保存機能付き)
// ==========================================
PFont jpFont;
float angle = 0; // アニメーション用の変数
void setup() {
size(1200, 600);
}
void draw() {
// 文字化け・画面更新対策
jpFont = createFont("Meiryo", 24, true);
textFont(jpFont);
background(20, 24, 35); // 深みのあるサイバーダーク背景
// タイトル共通設定
textSize(24);
textAlign(CENTER, TOP);
fill(240);
text("【パッケージ(package)の世界】\nドット(.)でフォルダの奥深くへ潜り、プログラムを美しく保護する", width / 2, 30);
angle += 0.01; // 輝きを動かすためのカウンタ
// -------------------------------------------------------------
// パッケージの「入れ子(ネスト)構造」グラフィック
// -------------------------------------------------------------
pushMatrix();
translate(width / 2, height / 2 + 30); // 画面中央を基準に
// 1階層目のフォルダ: net
stroke(52, 152, 219, 150); // 青
strokeWeight(3);
noFill();
rect(-250, -180, 500, 320, 15);
fill(52, 152, 219);
textSize(18);
textAlign(LEFT, TOP);
text("📁 net /", -235, -165);
// 2階層目のフォルダ: watataku
stroke(155, 89, 182, 180); // 紫
strokeWeight(2.5);
noFill();
rect(-180, -110, 360, 220, 12);
fill(155, 89, 182);
text("📁 watataku /", -165, -95);
// 3階層目のフォルダ: art (最深部)
stroke(46, 204, 113, 220); // 緑
strokeWeight(2);
noFill();
rect(-110, -40, 220, 120, 10);
fill(46, 204, 113);
text("📁 art /", -95, -25);
// -------------------------------------------------------------
// 最深部に格納されたクラス: Particle
// -------------------------------------------------------------
// 粒子のコアな輝き(ネオンエフェクト)
float pulse = sin(angle * 2) * 10; // 明滅アニメーション
noStroke();
for(int i = 6; i > 0; i--) {
fill(46, 204, 113, 30);
ellipse(0, 20, i * (12 + pulse), i * (12 + pulse));
}
fill(255);
ellipse(0, 20, 15, 15);
// クラス名ラベル
fill(255, 255, 255, 230);
stroke(46, 204, 113);
strokeWeight(1.5);
rect(-60, 45, 120, 22, 5);
fill(30);
textSize(12);
textAlign(CENTER, CENTER);
text("Particle.java", 0, 54);
popMatrix();
// -------------------------------------------------------------
// 下部:完全修飾クラス名(FQCN)との繋がり表示
// -------------------------------------------------------------
textSize(16);
textAlign(CENTER, TOP);
fill(180);
text("このフォルダ階層をドットで繋いだ住所が、完全修飾クラス名(FQCN)", width / 2, height - 90);
textSize(20);
fill(255);
text("net . watataku . art . Particle", width / 2, height - 60);
// 操作案内表示
fill(100);
textSize(11);
textAlign(CENTER, BOTTOM);
}
コード表現に落とし込んでみて気づいたこと
Javaのパッケージという言葉をただ「フォルダ分けのこと」と文字で暗記するだけでは、ここまでの愛着や深い納得感は得られなかったと思います。
Processingのコードで、外側から内側へと rect()(四角形)を入れ子状に重ねていき、一番守られた中心地(最深部)に大切な Particle のファイルを配置する。この実装プロセスを踏むことで、「あぁ、パッケージっていうのは、世界中の膨大なコードの荒波から自分の大切な作品を守るための『頑丈なセキュリティルーム(階層)』なんだな」と肌感覚で理解できました。
グラフィックの背景を少しダークなサイバー調にしてみたのですが、パッケージが持つ「整然とした管理システム」の格好よさが引き立ってますね。
皆さんもぜひ、手元でこの3重のボックスを動かして、Javaの整理整頓の美しさを体感してみてください!
それでは今日もレッツワクワクコーディング。
関連記事



