カオス・フラクタル 講義ノート #11
担当 : 井上 純一 (情報科学研究科棟 8-13)
URL : http://chaosweb.complex.eng.hokudai.ac.jp/˜j inoue/index.html

平成 23 年 7 月 12 日

目次
14 複素力学系
14.1 ロジスティック写像の複素数への拡張 . . . . . . . . . . . . . . . . . . . . . . . . .

94
94

14.2 マンデルブロ集合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

95

15 確率的フラクタル

9615.1 シェルピンスキー・ガスケット . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15.2 菌糸成長の計算機シミュレーション . . . . . . . . . . . . . . . . . . . . . . . . . .

97
99

15.2.1 準備 : 2 次元ランダムウォーク . . . . . . . . . . . . . . . . . . . . . . . . 99
15.2.2 菌糸成長のアルゴリズム . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
15.3 フラクタル次元とその計算方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
16 カオス編の演習

107

課題 10 の解答例
まずは復習を兼ねて前回 (7/5) のレポート課題についてみていく.
我々がここで考える写像は

{
xn+1

=

3xn
−3xn + 3(x ≤ 0.5)(x > 0.5)(224)である. この写像の形を見て直ぐにわかるのは, x = 0 は固定点であり, x はずっと x = x0 = 0に居座り続けることである. また, x0 = 1/3 も 1 回目の反復で x1 = 1 となり, 2 回目の反復で

x2 = −3 · 1 − 3 = 0 となり, 以降ずっと x = 0 である. しかし, 例えば x0 = 1/2 に選ぶと, 反復を繰り返すごとに x の値はマイナス方向に大きくなっていき, −∞ に至ることになる. 従って, この写像の初期値の選び方によっては x の行き先が負の無限大に至るものと, ゼロに至るものの 2 通りが存在するのではないかという示唆を与える. 実際に計算機を使っていくつかの初期値に対し,写像のはじめの数ステップをプロットしたものを図 53(左) に載せよう. この図からわかるように,

x0 = 1/3, 1/9 の場合, 数ステップの後に x の値はゼロとなる. 一方, x0 = 1/2, 1/5 の場合にはス
テップ数の増加とともに, x の値は負の無限大へ行くように見える. そこで, x0 の値を 0 から細か

93

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

2

1

0
0.8
-2

-4

0.6

x

x0 = 1/3
x0 = 1/9
x0 = 1/2
x0 = 1/5

-6

-8

0.4

-10
0.2
-12

-14

0

0.5

1

1.5

n

2

2.5

3

0

0

0.2

0.4

x0

0.6

0.8

1

図 54: 写像力学系のゼロへ収束する初期値の集合がカントール集合を与える例. 左図はいくつかの初期値に対する写像(224) の数ステップの様子. 右図はゼロに収束する初期値の集合 (図では見やすいように「バーコード」で描いている). こ
れはカントール集合となる.

く刻んで行って, x の絶対値がゼロに収束するもののみをプロットすると図 53(右) のようになる.
これは前回の講義で学んだカントール集合に他ならない.
この課題でみたように, 非線形写像の振る舞いを決める初期値条件の集合が自己相似な図形を与える場合がある. 今回はそのような写像を複素数に拡張した場合, 同様な自己相似図形が得られるかをみていく. 講義での解説を聞いているだけではなかなか感じがつかめないと思うので, 各自が計算機を用いて実験されることを強く勧める.

今回の講義はこの講義ノート中に現れる課題に関して説明していく.

14

複素力学系

既に [カオス編] で学んだ一次元写像を複素数に拡張した場合を考えてみよう.

14.1

ロジスティック写像の複素数への拡張

既に [カオス編] で学んだロジスティック写像を思い出してみよう.

xn+1= axn (1 − xn )(225)

写像 (漸化式)(225) に含まれるパラメータ a を変えていくと x0 → x1 → x2 → · · · → xn · · · という時系列は「固定点」「周期軌道」「カオス」というような様々な振る舞いを見せた. また, a の変化に対してその周期軌道の分岐構造がどうであるかは図 54 のようになったことも確かめた. そこでは写像の変数 x を実数であるとしたが, これを複素数 z に拡張した場合に得られる複素数版のロジスティック写像からは何がわかるのかを調べてみよう. 複素数 z の実部を x, 虚部を y で表せば, z
は z = x + iy と書けるので, これをロジスティック写像の式 : zn+1 = azn (1 − zn ) に代入すれば

xn+1 + iyn+1= a(xn + iyn )(1 − xn − iyn )= a(xn − x2n + yn2 ) + iayn (1 − 2xn )(226)
ここは 94 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0

1

1.5

2

2.5

3

3.5

4

図 55: ロジスティック写像の分岐図が得られる. ここでパラメータ a は a = aR + iaI として複素数に選ぶこともできるが, まずは簡単のため実数であるとして話を進めよう.
さて, (226) 式の両辺の実部, 虚部をそれぞれ等しいと置くことにより

xn+1= a(xn − x2n + yn2 )

(227)

yn+1

= ayn (1 − 2xn )(228)が得られる. この連立漸化式 (227)(228) をある初期条件 x0 ≡ (x0 , y0 ) からスタートさせると, この初期条件の選び方が良ければ連立漸化式は複素平面 x-y 内のある点へと収束するか, 有限範囲内での周期軌道へと収束していく. しかし, 一方で初期条件の選び方がうまくなければこの連立漸化√
2 → ∞ のように発散してしまう. 従って, 全ての可能な初期条件
式は収束せず, |x∞ | ≡ x2∞ + y∞はその初期条件から出発した軌道が [発散してしまうもの] と [有限に留まるもの] との 2 種類に分類されることがわかる. つまり, 初期条件の作る集合 : {x0 } は{x0 }∞≡ {x0 | |x∞ | → ∞}{x0 }finite≡ {x0 | |x∞ | < ∞}でそれぞれが定義される部分集合 {x0 }∞ と {x0 }finite に分類される.
連立漸化式 (227)(228) を数値的に解き, 複素平面 x-y 内にこの {x0 }finite をプロットしてできる
図は, その作り方が上述のように極めて単純なのにも関わらず非常に複雑な形状を持つ. それを図55 に示そう. この集合 {x0 }finite のことをジュリア集合と呼ぶ. 図 55 では a = 3.3 に選んだが, この場合に得られるジュリア集合は自己相似性を有する. もちろん, a の値をいろいろ変ええれば様々なジュリア集合が得られる (各自がいろいろ試してみると楽しいと思う). 図 56 にその中から数例
を載せる.

14.2

マンデルブロ集合

前節ではロジスティック写像をコントロールするパラメータ a を実数として扱ったが, 先に述べたようにこれをも複素数に拡張することができる. a = aR + iaI として (226) 式に代入し, 実部とここは 95 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

0.25
0.2

a = 3.3

0.15
0.1
0.05
0
-0.05
-0.1
-0.15
-0.2
-0.25

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

図 56: ジュリア集合. a = 3.3
0.25

0.2

0.2

a = 3.1

0.2

0.15

0.15
0.1

0.1

0.05

0.05

0.1
0.05
0
-0.05

0

0

-0.05

-0.05

-0.1

a = 3.6

0.15

a = 3.5

-0.1

-0.1

-0.15

-0.15

-0.15
-0.2
-0.25

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

-0.2

1

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

-0.2

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

図 57: 左から a = 3.1, 3.5, 及び, a = 3.6 に対するジュリア集合.
虚部にわけた反復式を書き出してみると

xn+1= aR (xn − x2n + yn2 ) − aI yn (1 − 2xn )

(229)

yn+1

aR yn (1 − 2xn ) + aI (xn − x2n + yn2 )

(230)

=

が得られる. ジュリア集合を求めたときには, a の値を固定し, 反復式 (229)(230) が有限の値に収まるような初期条件の集合を複素平面内にプロットした. ここでは逆に, 初期条件 {x0 , y0 } が一つ与えられた場合, aR , aI の値を様々変えたときに, 反復式 (229)(230) の解が有限の値を持つような集合 {aR , aI } を x-y 平面にプロットしたならばどのような図形が得られるのかを考えてみたい. 図

57 に x0 = 0.5, y = 0 を初期条件に選んだ場合の結果を載せる. このような図形のことをマンデル
ブロ集合と呼ぶ.

15

確率的フラクタル

ここからは確率モデルを用いたフラクタルについて見ていく.

ここは 96 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

1.5

1

0.5

0

-0.5

-1

-1.5

1

1.5

2

2.5

3

3.5

4

図 58: マンデルブロ集合. x0 = 0.5, y0 = 0 と初期条件を選んである.

15.1

シェルピンスキー・ガスケット

図 58 は前回学んだシェルピンスキー・ガスケットであり, これは典型的なフラクタル図形の一つである1 . この図形は次に示すような非常に簡単なルールを用いて生成させることができる.

(1) 図 59 のように頂点を (X1 , Y1 ) = (0, 0) (点 O), (X2 , Y2 ) = (2l, 0) (点 A), (X3 , Y3 ) = (l,(点 B) とする正三角形を考える.

√

3l)(2) この正三角形内部の任意の点 P(0) = (x0 , y0 ) を選ぶ.
(3) 数 0,1,2 をランダムに選び• 0 ⇒ O と P(0) を結ぶ線分の中点に点 P(1) = (x1 , y1 ) を置く.
• 1 ⇒ A と P(0) を結ぶ線分の中点に点 P(1) = (x1 , y1 ) を置く.
• 2 ⇒ B と P(0) を結ぶ線分の中点に点 P(1) = (x1 , y1 ) を置く.
(4) プロセス (3) を十分多数回繰り返す．

上記のアルゴリズムにより, 点列

P(0) (x0 , y0 ) → P(1) (x1 , y1 ) → · · ·P(n) (xn , yn ) → · · ·を 2 次元平面内にプロットする. 具体的には

x0 y0
x1 y1
x2 y2
x3 y3
...........
1

ガスケット (gasket) とは「詰め物」の意味である.

ここは 97 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

図 59: シェルピンスキー・ガスケット.

B

P
O

(1)

P (0)

A

図 60: O が選ばれた場合には P(0) と O の中点に P(1) をおく.

ここは 98 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一という形式でデータファイル (例えば gasket.dat) に格納する.


課題 1
上記 (1) から (4) のプロセスをコーディングし, シェルピンスキー・ガスケットを描け.
(注) : 実際の作図には gnuplot を用いよ.

15.2

菌糸成長の計算機シミュレーション

前節で見たシェルピンスキーガスケットは確率的なメカニズムがその生成過程に含まれているとはいえ, コンピュータ上に人工的に作られたフラクタル図形であった. しかし, この他にも自然界に目を向ければ, 木, 海岸線など, 数多くのフラクタル構造を持つものが実在する. また, はじめに我々が見たジュリア集合のフラクタル図形はその作り方から明らかなように, 点列 : P (0) (x0 , y0 ) →P (1) (x1 , y1 ) → · · · → P (n) (xn , yn ) → · · · は決定論的な規則2 に従ってグラフ上に点が打ち込まれることにより, 全体がフラクタルとなった.
一方で, 自然界に見られる多くのフラクタル図形の形成メカニズムには確率的要素が重要になってくるものも少なくない. ここでは, その中でも菌糸の成長過程, つまり, 核の周りをある確率に従って動き回る粒子が次々と核に吸着していくことにより複雑な図形が出来上がるプロセスをコン
ピュータ上にシミュレートし, 出来上がる図形がフラクタルであることを確認する.
t = 10000000

t = 1000000
t = 100000

図 61: 菌糸の成長過程. 時間は左から右に流れている.
図 60 は中央に置かれた菌糸の「種」に周りからランダムウォーク (酔歩) しながらやってくる菌が次々と付着してゆくことによって, この菌糸が成長していく様子をあらわしている. この過程の作図を始める前に, まずは 2 次元格子上のランダムウォークを考えてみよう.

15.2.1

準備 : 2 次元ランダムウォーク

我々の最終目標である「菌糸の成長」をシミュレートするためには 2 次元格子上のランダムウォー
クのプログラムを用意する必要がある. そこで, ここでは準備としてそれを見てゆくことにする. ラ
ンダムウォークは任意の点 (例えば原点 (0, 0)) から出発して, 2 次元正方格子上 (格子の形は何で2

これを作図プログラムには乱数の入る余地がない. この意味で確率を用いない決定論的規則である.

ここは 99 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

1/4
1/4

P

1/4

1/4

図 62: 点 P から菌は隣接する 4 つの格子点に等確率でジャンプする.
もよいが, ここでは正方格子とする) で, 等確率で 4 つの方向の中から 1 つをランダムに選択し (図61 参照), 移動してゆくものである.

課題 22 次元正方格子上ランダムウォークの軌跡を描け. 例を図 62 載せる.
80
70

t=10000

60
50
40
30
20
10
0
-10
-20
-30

-20

-10

0

10

20

30

40

50

60

70

図 63: 2 次元正方格子上のランダムウォークの例.

15.2.2菌糸成長のアルゴリズム

以上をふまえて具体的な菌糸成長のアルゴリズムを以下で説明する.

ここは 100 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一(1) 菌 (粒子) の可動範囲は縦 × 横 = lmax × lmax の正方格子上とする. (lmax は偶数). この中央
S(lmax /2, lmax /2) に「種」を置き, 菌糸を取り囲む最小半径 rmax を rmax = 1 にセットする(図 63 参照).

l max

S

l max

図 64: 菌の可動範囲. 中央に「種」を置く.

(2) S を中心とする半径 rs (= rmax + 2.0) の円周上の任意の一点 P(rx, ry) をスタート地点に選
ぶ. ただしrx = rs cosφry

= rs sinφとし, φ は φ ∈ [0, 2π] の乱数として選ぶ (図 64 参照).

Prs
S

図 65: ランダムウォークの初期地点を半径が rs の円周上に選ぶ.

(3) この点 P をスタート地点に選び, 課題 2 で行った 2 次元正方格子上のランダムウォークをさせる.

(4) r ≡√
(rx)2 + (ry)2 の大小関係により, 次のように処理を分岐させる.

(k) r が rk (この値は自分で適当に決める.) を超えたら, P を置き直す. そして (2) へ戻る.

ここは 101 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

O2

S

rs
r

図 66: 半径 (r − rs ) の円 O2 上にジャンプする.

(c) もし, rk > rd > rs なる rd (= rmax + 5.0) に対し, r ≥ rd ならば次のようなジャンプをさせる. 図 65 のように, 中心が半径 r の円周上, 半径が (r − rs ) の円を考え, この円 O2上の任意の点にランダムにジャンプさせる．つまり,rx =rx + (r − rs )cosθ

ryry + (r − rs )sinθ

=とし，θ を θ ∈ [0, 2π] の乱数として選ぶ.

(a) もし, 粒子の現在地 (rx + lmax /2, ry + lmax /2) に隣接する 4 つの格子点 (rx + lmax /2 +1, ry + lmax /2), (rx + lmax /2, ry + lmax /2 + 1), (rx + lmax /2 − 1, ry + lmax /2), (rx +lmax /2, ry + lmax /2 − 1) に粒子が存在すれば (rx + lmax /2, ry + lmax /2) に粒子を置き,rmax を
rmax[]√= max rmax , (rx)2 + (ry)2の規則で更新させる. つまり, 1 ステップ前の rmax と比べて大きい方に取り替える．そして (2) へ戻る.

(j) (k),(c),(a) のいずれでもなければ (3) へ.


課題 3

上のアルゴリズムを具体的にプログラミングして菌糸成長を描いてみよ.
[プログラム作成上のヒント]
以下に main 関数のサンプルを載せる. この中にある, check(), int(), occupy(), jump(), aggregate(),longjump(); 等の関数を各自考え，プログラムを完成させるとよい. (もちろん, これを使わないでここは 102 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

もよい)/***********************************************************//*
菌糸成長のシミュレーション (main 関数のみ)*//***********************************************************/#include<stdlib.h>#include<stdio.h>#include<math.h>#define lmax 620#define rs (rmax+2.0)#define rd (rmax+5.0)#define rkill (5*rmax)#define PI 3.14159265/**********************************************/
/*
乱数の種
*/
/**********************************************/#define SEED1 131#define SEED2 233#define SEED3 151/* (rx,ry) に粒子がいるかどうかを決める配列．いれば xf[rx][ry]=1, いなけりゃxf[rx][ry]=0. */int xf[lmax][lmax];
int rx, ry;
double rmax;
main(){FILE *ptr;
long i,k;rmax=10;init();
occupy();jump();/* 中央に種を置く関数 *//* スタート地点 P を選ぶ関数 *//* 任意の点で 4 つの隣接格子点のいずれかにジャンプさせる関数 */for(i = 0; i <= 1000000; i++){switch(check()) {case ’k’:
occupy();/* check() は (4) での分岐条件の k,a,j,c のいずれかを返す関数 */jump();
break;

ここは 103 ページ目

カオス・フラクタル 2011 #11

case ’a’:aggregate();担当: 大学院情報科学研究科 井上 純一/* r_max を算出する関数 */if((ptr=fopen("test.dat","at")) != NULL){
fprintf(ptr, "%d %d \n", rx, ry); /* 粒子を位置 (rx,ry) に置く */}fclose(ptr);
occupy();jump();
break;
case ’j’:jump();
break;
case ’c’:
longjump();break;/* 半径 (r-r_s) の円周上へジャンプ. (c) の作業に相当する関数 */

}
}
}

15.3

フラクタル次元とその計算方法

前節まででいくつかのフラクタル図形に関して学び, 実際にそれらを作図してきた. ところで, フラクタル図形をスケールを変えてみても同じ図形に見えるものとして定義したが, もう少し定量的にフラクタル図形とその他の図形を区別するための指標はないであろうか ?
ところで「次元」というものに関し, 我々は経験上, 直線は 1 次元, 正方形は 2 次元, 立方体は 3次元であると認識している. ここでは各図形に関する次元の決め方を我々の経験則とも一致するよ
うな形で定義することにより, フラクタル図形の次元 — フラクタル次元 — を考えてみることにする.
一辺が l の図形の中に含まれる格子点の数を m(l) とする. もし, 格子点が全て同じ重さを持っていたとすればこれは一辺が l の長さの図形の質量を表している (図 66 参). さて, l を 1 から徐々に増加させてみると, 正方形の場合, m(1) = 4, m(2) = 9, · · ·, m(l) = (l + 1)2 となる．従って, l が十分大きいときにはm(l) = A l2となることはわかるであろう. ここで, A は比例係数である. 同様にして考えると立方体の場合はm(l) = A l3となっていることがわかるであろう.
従って, これを拡張し, 対象とする図形を基本ユニットに分け, その中に含まれる点の数を対象図形

ここは 104 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

図 67: 正方形と立方体 (書くまでもないが，念のため).
１辺の長さ l の関数 m(l) として表したとき, l と m の間にm(l) =

A ldf

なる関係があったとき, この df を次元と定義することにしょう. ここで, 既に見たように, このような次元の定義は，我々の経験則, つまり, 正方形は 2 次元, 立方体は 3 次元, ....... に反しないことに注意されたい.
さて, 我々は常識的に次元というものは整数であると思い込んでいる. しかし, 我々が既に作図した 2 つの図形, シェルピンスキーガスケット, 菌糸の成長図は非整数次元をもつ. このような df をフラクタル次元 (ボックスカウント次元) と呼んでいる. フラクタル次元はフラクタル図形を特徴付ける最も基本的な量である. 逆にフラクタル次元が非整数値を持つような図形をフラクタル図形と呼ぶ.
以下の課題で, それぞれの図形のフラクタル次元を具体的に求めてみよう.

ここは 105 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

'
課題 4

$

課題 1 で作図したシェルピンスキー・ガスケットにおいてLl

長さ l の正三角形に含まれる点の数を N とし, l を 1 から L = lmax までいくつか変化させ(上図), l と N (l) を求める. 次いで，縦軸に log N ，横軸に log l をプロットし, その傾きか
らフラクタル次元 df を求めよ (例えば下図のように).
1110log(N)

9

8

7

6

5

&

2

2.5

3

3.5

log(l)

4

4.5

5

5.5

%

ここは 106 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

カオス編の演習

16

上記の課題 1 〜 課題 4 とは別に, 既に終了している [カオス編] の演習課題 5 課題 6 をやっても
らう.

'
課題 5

$

カオスの基本モデルとして次のエノン写像:

xn+1= 1 − ax2n + yn

(231)

yn+1

= bxn

(232)

が知られている. このエノン写像に対し(1) a = 1.6, b = 0.2 と選んだ場合に対し, xn , yn をプロットし, 初期値鋭敏性を調べよ.
時間があれば, パラメータ (a, b) の値を変え, 結果を考察せよ.
(2) x-y 曲線をプロットし, アトラクタを描画せよ (描画例として図 67 を参照). また,
gnuplot などの描画ソフトの描画領域を変化させることで, アトラクタの自己相似性を確認せよ.

(3) 相関次元を求めよ. その際, 時間遅れ τ , 標本点の次元 m の組み (τ, m) をいくつか選
び, 相関次元の計算結果を比較せよ.
&

%
0.25

a = 1.6, b = 0.2

0.2
0.15
0.1
0.05

y

0
-0.05
-0.1
-0.15
-0.2
-0.25
-1.5

-1

-0.5

0

x

0.5

1

1.5

図 68: エノン写像のアトラクタの描画例.

ここは 107 ページ目

カオス・フラクタル 2011 #11

担当: 大学院情報科学研究科 井上 純一

'
課題 6

$

ロジスティック写像:

xn+1 = 4xn (1 − xn )(233)

を適当な初期値からスタートさせ, 次の時間平均値を計算せよ.
T −1

x =

1 ∑
xn
T n=0

(234)

ただし, T がは十分大きな数であり, 各自が設定せよ.
一方, 写像を十分繰り返した後, ヒストグラムを計算することで, ロジスティック写像は次の不変測度を持つことをみた.

P (x) =11√
π x(1 − x)(235)

この「密度関数」に対し, 次の「平均値」を計算することもできる.

∫ 1
hxi =

∫ 1
xP (x) =

0

0

1
xdx
√
π x(1 − x)(236)

この積分を解析的, もしくは数値的に計算することで, x = hxi が成立するか否かを調べよ.

&

%

注意:
課題レポートの提出期限は 8/12(金) 午後 5 時 (厳守), 提出先は情報科学研究科棟 8-13 のポストまで. 全てのコードおよび, 結果のグラフ/図などを全て提出. また, 各課題に関し, 独自の考察などを含めても良い.

[カオス・フラクタル] 今後数回の予定:• 7 月 19 日: 通常講義. 「マルチ・フラクタル」について• 7 月 26 日: 最終回. 本講義に関連する研究紹介 (1 時間程度を予定).

なお, 後期開講の「情報工学演習 II」では, 本講義では扱うことのできなかった, 臨界現象に関するフラクタル図形とその特徴付けについて学習することになります. 本講義はこの演習とのセット
で, カオスとフラクタルについての基本的な知識が得られるように設計しました.

ここは 108 ページ目