Javaの概念「インポート」の本質である、遠くのプログラムを手元に引き寄せて省略名で呼ぶ仕組みをProcessingのキャンバス上に視覚化する。
どうも、上達の研究家のワタタクです。
前回の記事(【超カンタン】Javaの「インポート(import)」ってなに?長いコードを省略する魔法の呪文を徹底解説!)では、インポートの本質が「毎回長いフルネーム(完全修飾クラス名)を書く手間を省くための、魔法の短縮ダイヤル設定」であることを解説しました。
今回はLinked Logカテゴリーとして、「遠くのパッケージにあるプログラムが、importの呪文によって手元のステージへとシュッと引き寄せられ、名前がスッキリ省略名に変化する世界」をProcessingのコードで表現してみました!
言葉の概念をグラフィックに翻訳した設計図とコードを共有します。
この記事を書いた人


上達の研究家 / アーティスト
「才能」ではなく「発見」で描く。文系・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の import com.google.search.Particle; という仕組みを視覚化するため、以下の3つのこだわりを持って設計しました。
1. 遠くの部屋と「手元のステージ」の距離感
画面の左上に「遠くのパッケージ(com.google.search)」という隔離された部屋を配置し、画面の中央下部に「あなたのプログラム(手元のステージ)」を大きく配置。インポートという「輸入・持ち込み」の距離感を表現しました。
2. 光のラインによる「引き寄せ(ワープ)」の表現
遠くの部屋から手元のステージに向かって、ネオン調のグラデーションラインを伸ばしました。インポートの呪文が唱えられた瞬間、プログラムがこの光のルートを通って手元にシュッとワープしてくるような躍動感をビジュアルにしています。
3. ステージ上で「名前がスッキリ変化する」魔法
遠くの部屋にいるときは「com.google.search.Particle」という長いフルネームで呼ばれていたつぶつぶが、手元のステージに引き寄せられた瞬間、名札の表示が短い「Particle」にスッキリ変化するデザインにしました。
Processing実装コード(Javaモード)
実行すると、インポートの引き寄せ構造がサイバー調のグラフィックとして立ち上がります。
実行結果。
// ==========================================
// 知識を視覚化する:Javaの「インポート(引き寄せ魔法)」
// (マウスクリックでデスクトップに自動保存機能付き)
// ==========================================
PFont jpFont;
float angle = 0;
void setup() {
size(1200, 600);
}
void draw() {
// 文字化け・画面更新対策
jpFont = createFont("Meiryo", 24, true);
textFont(jpFont);
background(24, 28, 40); // ダークサイバー背景
// タイトル共通設定
textSize(24);
textAlign(CENTER, TOP);
fill(240);
text("【インポート(import)の世界】\n魔法の呪文で遠くのプログラムを引き寄せ、名前をスッキリ省略する", width / 2, 30);
angle += 0.02; // 光のエフェクト用
// -------------------------------------------------------------
// 左上:遠くのパッケージ(com.google.search)
// -------------------------------------------------------------
stroke(52, 152, 219, 120);
strokeWeight(2);
noFill();
rect(100, 130, 320, 120, 10);
fill(52, 152, 219);
textSize(13);
textAlign(LEFT, TOP);
text(" 📦 遠くのパッケージ: com.google.search", 110, 140);
// 遠くの部屋にいるときの長い名前のParticle
drawParticleGraphic(260, 195, "com.google.search.Particle", color(52, 152, 219, 180), 11);
// -------------------------------------------------------------
// 中央:import文という「魔法のトンネル」
// -------------------------------------------------------------
strokeWeight(4);
// グラデーション風に光るライン
for(int i = 0; i < 3; i++) {
stroke(155, 89, 182, 50 - i*15); // 紫の残光
strokeWeight(4 + i*4);
line(260, 245, 600, 380);
}
stroke(155, 89, 182); // コアライン
strokeWeight(2);
line(260, 245, 600, 380);
// ライン上の光の粒(引き寄せられている最中の演出)
float t = (sin(angle) + 1) / 2; // 0から1を往復
float lx = lerp(260, 600, t);
float ly = lerp(245, 380, t);
fill(255, 200, 255);
noStroke();
ellipse(lx, ly, 10, 10);
// import文の表示
fill(155, 89, 182);
textSize(16);
textAlign(CENTER, CENTER);
text("✨ import com.google.search.Particle; ✨", 460, 290);
// -------------------------------------------------------------
// 中央下部:手元のメインステージ(あなたのプログラム)
// -------------------------------------------------------------
stroke(241, 196, 15, 150); // ゴールドの枠線
strokeWeight(2);
fill(32, 38, 55);
rect(350, 380, 500, 150, 10);
fill(241, 196, 15);
textSize(14);
textAlign(LEFT, TOP);
text(" 💻 あなたのプログラム: net.watataku.art", 365, 395);
// 引き寄せられた結果、ステージ上で名前がスッキリ短くなったParticle
drawParticleGraphic(600, 460, "Particle", color(241, 196, 15), 14);
fill(241, 196, 15);
textSize(13);
textAlign(CENTER, TOP);
text("👉 インポートしたから、もう長い住所を書かずに「名前だけ」で呼び出せる!", width / 2, 545);
// 操作案内表示
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 = "import_magic_" + timestamp + ".png";
save(desktopPath + fileName);
println("デスクトップに保存しました: " + fileName);
}
// 粒子(Particle)を描画するカスタム関数
void drawParticleGraphic(float x, float y, String displayName, color c, int tSize) {
pushMatrix();
translate(x, y);
// ネオンエフェクト
noFill();
for(int i = 4; i > 0; i--) {
stroke(red(c), green(c), blue(c), 40);
strokeWeight(i * 3);
ellipse(0, -15, 20, 20);
}
fill(255);
noStroke();
ellipse(0, -15, 10, 10);
// 名札ラベル
float labelWidth = textWidth(displayName) + 20;
fill(25, 30, 45, 220);
stroke(c);
strokeWeight(1);
rect(-labelWidth / 2, 10, labelWidth, 24, 4);
fill(240);
textSize(tSize);
textAlign(CENTER, CENTER);
text(displayName, 0, 20);
popMatrix();
}コード表現に落とし込んでみて気づいたこと
Javaのインポートを単なる「入力の手間省き」として捉えるのではなく、Processingのキャンバス上で「遠くのものを手元にワープさせ、名前をスッキリ変化させる」という演出に落とし込むことで、インポート文が持つ真のありがたみが深く理解できました。
遠くの部屋では文字サイズを少し小さめ(11)にして長いフルネームの窮屈さを表現し、手元のゴールドに輝くメインステージに引き寄せられたら文字サイズを大きく(14)して「主役として堂々と名前だけで動いている」という対比をコード表現。
光の粒子(lerp())がライン上を往復するアニメーションを見ていると、まさに自分のプログラムの中に別パッケージの知恵が「輸入(インポート)」されてくる躍動感が伝わってきて、Linked Logらしい最高にワクワクする作品になりました。
皆さんもぜひ、このインポートの引き寄せ魔法をデスクトップで動かしてみてください!
それでは今日もレッツワクワクコーディング。


関連記事



