ポタージュを垂れ流す。

マイペースこうしん(主に旅行)

計算機代数

3回生後期に志望にあぶれてやらされることになってやった話をどうせ他で使わないのでまとめておこうと思う.ちょっと雑かもしれないけれど.

以下では,体 $k$ の元を係数にもつ $x_1,\ldots,x_n$ の多項式の集合を $k[x_1,\ldots,x_n]$ とかく.

多変数多項式の割り算

まずは1変数の場合について考えてみると,以下のように割り算ができる.

$k[x]$ における割り算 2つの1変数多項式 $f,g\in k[x]$ があったとき, $f$ を $g$ で割ることができる: $$ \begin{align} f=qg+r \end{align} $$ この関係をみたす $\deg r<\deg g$ をみたす商 $q$ と余り $r$ が一意的に存在する.

例えば, $f=2x^2+3x-4$ , $g=x+1$ のときは $q=2x+1$ , $r=-5$ となる.

では,1変数ではなく $n$ 変数多項式の場合はどうなるのか?ということなのだが,変数に対して順序を定めれば割り算を定めることができる(ただし, $n=1$ の場合でも整合性のある順序であるようなものが採用されるべき).

単項式順序 $k[x_1,\ldots,x_n]$ 上の単項式順序とは, $k[x_1,\ldots.x_n]$ の単項式 $x^\alpha$ ( $\alpha\in\mathbb{Z}_{\geq 0}^n$ )の集合上の関係 $>$ で次の3つを満たすものである:
  • $>$ は全順序関係である.
  • $>$ は $k[x_1,\ldots,x_n]$ は乗法と両立する.すなわち $x^\alpha>x^\beta$ のとき,任意の単項式 $x^\gamma$ について $x^\alpha x^\gamma=x^{\alpha+\gamma}>x^{\beta+\gamma}=x^\beta x^\gamma$ が成り立つ.
  • $>$ は整列順序である.つまり,空でない任意の単項式の集合は $>$ に関する最小元をもつ.

一般化して書いているのでわかりにくいかもしれないが,1行目で $x^\alpha$ と書いているものは,上で $n=3$ , $\alpha=(2,1,3)$ とすれば, $x^\alpha=x_1^2 x_2^1 x_3^3$ といったものである.

なお,上の定義には $x_1,\ldots,x_n$ の順序についての言及がないことにも注意.

この単項式順序と呼ばれる順序 $>$ は,これまで慣れ親しんできた$k[x]$の単項式元で考えてみれば $1<x<x^2<x^3<\cdots$ のようになっており,これまで1変数多項式の場合に(高校などで自然に)考えていた順序も単項式順序の性質をもつことがわかる.

単項式順序の性質をもつ順序は複数ある.具体例の1つとして辞書式順序を挙げておく.

定義(辞書式順序 $>_{\mathrm{lex}}$ ) $x^\alpha,x^\beta\in k[x_1,\ldots,x_n]$ について,差 $\alpha-\beta\in\mathbb{Z}^n$ の最も左にある $0$ でない成分が正であるとき, $x^\alpha>_{\mathrm{lex}}x^\beta$ であると定義する.

多変数多項式の割り算を行うのに導入しておくと便利な記号として主項というものがあるのでここで導入する.なお,主係数,主単項式という概念もあるのであわせて紹介することにする.

定義(主項,主係数,主単項式) $k[x_1,\ldots,k_n]$ 上の任意の単項式順序 $>$ を固定し, $f=\sum_\alpha x_\alpha x^\alpha$ の項を考える.いま, $x^\alpha$ が $f$ に現れる順序 $>$ に関する最大の単項式であるとする.このとき $f$ の $>$ に関する主項とは,積 $c_\alpha x^\alpha$ のことであり,主係数とは $c_\alpha$ ,主単項式とは $x^\alpha$ のことである.記号としては以下を用いる:
  • 主項 $\textrm{LT}(f)=c_\alpha x^\alpha$
  • 主係数 $\textrm{LC}(f)=c_\alpha $
  • 主単項式 $\textrm{LM}(f)=x^\alpha$

単項式順序と主項の記号を導入したので,多変数多項式の割り算のアルゴリズムを紹介することができる.

$k[x_1,\ldots,x_n]$ における多項式の割り算 $k[x_1,\ldots,x_n]$ の任意の単項式順序を固定し, $F=(f_1,\ldots,f_s)$を$k[x_1,\ldots,x_n]$ の順序づけられた$s$個の多項式の組とする.このとき,任意の多項式 $f\in k[x_1,\ldots,x_n]$ は次のような表示をもつ: $$ \begin{align} f=a_1f_1+\cdots+a_sf_s+r \end{align} $$ ただし各文字は以下をみたす:
  • $a_i,r\in k[x_1,\ldots,x_n]$ ( $i=1,\ldots,s$ )
  • $a_if_i=0$ か $\mathrm{LT}_{>}(f)\geq\mathrm{LT}_{>}(a_if_i)$ ( $i=1,\ldots,s$ )
  • $r$は$0$ か $\mathrm{LT}_{>}(f_1),\ldots,\mathrm{LT}_{>}(f_s)$ のいずれでも割り切れないような単項式の線型結合
この $r$ を $f$ の $F$ による余りと呼び $$ \begin{align} r=\overline{f}^{F} \end{align} $$ と表す.

例として, $f=x^2y^6$ , $F=(x^2y^2-x^4,xy^3-y^4)$ を考えてみる.今回は単項式順序として $>_{\mathrm{lex}}$ を採用する.

  1. $x$ と $y$ の順序を $x>y$ として割り算を実行してみる.
    • $\mathrm{LT}_{>_\mathrm{lex}} (x^2y^2-x^4) =-x^4$
    • $\mathrm{LT}_{>_\mathrm{lex}} (xy^3-y^4)=xy^3$
    • $\mathrm{LT}_{>_\mathrm{lex}} (x^2y^2-x^4) >_\mathrm{lex} \mathrm{LT}_{>_\mathrm{lex}} (f)$ なので, $f$ を $x^2y^2-x^4$ で割ることはできない.
    • 一方, $\mathrm{LT}_{>_\mathrm{lex}}(f) >_\mathrm{lex} \mathrm{LT}_{>_\mathrm{lex}}(xy^3-y^4)$ なので, $f$ を $xy^3-y^4$ で割ることができる.
    • よって $$ \begin{align} f=0\cdot(x^2y^2-x^4)+(xy^3+y^4)(xy^3-y^4)+y^8 \end{align} $$ となる.
  2. $x$ と $y$ の順序を $x < y$ として割り算を実行してみる.
    • $\mathrm{LT}_{>_\mathrm{lex}} (x^2y^2-x^4)=-x^2y^2$
    • $\mathrm{LT}_{>_\mathrm{lex}} (xy^3-y^4)=y^4$
    • $\mathrm{LT}_{>_\mathrm{lex}} (f) >_\mathrm{lex} \mathrm{LT}_{>_\mathrm{lex}} (x^2y^2-x^4)$ なので, $f$ を $x^2y^2-x^4$ で割ることができる.
    • $\mathrm{LT}_{>_\mathrm{lex}} (f) >_\mathrm{lex} \mathrm{LT}_{>_\mathrm{lex}} (xy^3-y^4)$ なので, $f$ を $xy^3-y^4$ で割ることができる.
    • よって,どっちから割っても割り算が成立するので,割る順番を考慮することになる.
      • 先に $x^2y^2-x^4$ で割ると $$ \begin{align} f=(y^4+x^2y^2+x^4)(x^2y^2-x^4)+0\cdot(xy^3-y^4)+x^8 \end{align} $$
      • 先に $xy^3-y^4$ で割ると $$ \begin{align} f=(xy^3+y^4)(xy^3-y^4)-x^4(xy^3-y^4)+x^7y \end{align} $$
      となって,2通りの表示が得られる.

グレブナー基底を利用して連立方程式を解く

記号の定義

グレブナー基底を利用して連立方程式を解く方法を説明するのに必要な定義だけ並べる.

定義(多項式で生成される空間) 多項式$f\in k[x_1,\ldots,x_n]$に対して,$\langle f_1,\ldots,f_s\rangle$を
$$ \langle f_1,\ldots,f_s\rangle=\{p_1f_1+\cdots+p_sf_s:p_i\in k[x_1,\ldots,x_n],i=1,\ldots,s\} $$
とする.
定義(イデアル 空でない部分集合 $I\subset k[x_1,\ldots,x_n]$ がイデアルとは,以下が成り立つときにいう:
  • $f,g\in I\,\Rightarrow\, f+g\in I$
  • $f\in I\,\Rightarrow\, \forall p\in k[x_1,\ldots,x_n],pf\in I$
定義(消去イデアル $I\subset k[x_1,\ldots,x_n]$ をイデアルとするとき,第 $l$ 消去イデアル(または $l$ 次の消去イデアル)とは以下で定まる$I_l$のこと:
$$ I_l=I\cap k[x_{l+1},\ldots,x_n] $$

$I=\langle f_1,\ldots,f_s\rangle$ として $I_l=I\cap k[x_{l+1},\ldots,x_n]$ は連立方程式 $f_1=\cdots=f_s=0$ から変数 $x_1,\ldots,x_l$ を消去して得られる多項式全体である.

定義(アフィン多様体 $k$ を体, $f_1,\ldots,f_s\in k[x_1,\ldots,x_n]$ とする.アフィン多様体とは,連立方程式
$$ \begin{align} f_1(x_1,\ldots,x_n)&=0 \\ f_2(x_1,\ldots,x_n)&=0 \\ &\vdots \\ f_s(x_1,\ldots,x_n)&=0 \\ \end{align} $$
の解$(a_1,\ldots,a_n)\in k^n$全体の集合のことで,$\mathbf{V}(f_1,\ldots,f_s)$と表す.すなわち
$$ \mathbf{V}(f_1,\ldots,f_s)=\{(a_1,\ldots,a_n)\in k^n : f_i(a_1,\ldots,a_n)=0,i=1,\ldots,s\} $$
である.

なお,$I=\langle f_1,\ldots,f_s\rangle$のようになっている時,$f_1=\ldots=f_s=0$の解全体の集合を$\mathbf{V}(I)$のように略記する.

定義(グレブナー基底 $k[x_1,\ldots,x_n]$ 上の単項式順序 $>$ を固定, $I\subset k[x_1,\ldots,x_n]$ をイデアルとする.このとき, $I$ の $>$ に関するグレブナー基底とは,多項式の有限集合 $G=\{g_1,\ldots,g_t\}\subset I$ であって, $0$ でない任意の $f\in I$ について, $\mathrm{LT}(f)$ がある $\mathrm{LT}(g_i)$ で割り切れるようなものである.

グレブナー基底の構成法が気になるところだが,最も初歩的なものとしてはブッフベルガーのアルゴリズムと呼ばれているものがある.wikipedia等を参照してほしい.見て貰えばわかるが,ものすごく遅そうなアルゴリズムである.実際遅いらしい.これの改良版として,最近ではF4とかF5とかいうアルゴリズムが知られている.

グレブナー基底を利用して連立方程式を解く

グレブナー基底を利用した連立方程式の解き方 連立方程式
$$ \begin{align} f_1(x_1,\ldots,x_n)&=0 \\ f_2(x_1,\ldots,x_n)&=0 \\ &\vdots \\ f_s(x_1,\ldots,x_n)&=0 \end{align} $$
を解くことを考える.グレブナー基底を用いると以下のような手順で解くことができる.
  1. $I=\langle f_1,\ldots,f_s\rangle$のグレブナー基底$G=\{g_1,\ldots,g_t\}$を求める.
  2. $1\leq l\leq n$について第$l$消去イデアル$I_l$(のグレブナー基底$G_l$)を求める.
  3. $I_n$のグレブナー基底$G_n=\{g\}$について$g=0$を解き$\mathbf{V}(I_n)$を求める.
  4. $(a_{l +1},\cdots,a_n) \in \mathbf{V}(I_l)$とし,$I_{l -1}$ のグレブナー基底 $G_{l -1}$ から $G_l$ を取り除いた多項式たち $G_{l -1}\backslash G_l=\{g_{l -1,1},\ldots,g_{l -1,u}\}$ について$g_{l -1,1}(x_l,a_{l +1},\cdots,a_n)=\cdots=g_{l -1,u}(x_l,a_{ l +1},\cdots,a_n)=0$ とおいた式を(すべての $\mathbf{V}(I_l)$ の元について)解いて $\mathbf{V}(I_{l -1})$ を求める.これを繰り返す.
4.を$I_0=I$まで行えば,$\mathbf{V}(I)$,すなわち求めたかった解が求まっている.

手続き的に書いているのでわかりにくいかもしれないが,グレブナー基底を求め,変数の数が最も少ない$g_i\in G$を選んで解を求め,前段階で求めた解を順次代入していけば解が求められるということである.

例を挙げる.以下の連立方程式

$$ \begin{align} x^2+y^2+z^2&=4 \\ x^2+2y^2&=5 \\ xz&=1 \end{align} $$

グレブナー基底を用いて解く.

  1. グレブナー基底を計算すると,
    $$ G=\{2z^3-3z+x,-1+y^2-z^2,1+2z^4-3z^2\} $$
    となる.グレブナー基底を求めるには,例えばwolfram alpha
    GroebnerBasis[{x2 + y2 + z2 − 4, x2 + 2y2 − 5, xz − 1}, {x, y, z}]
    と打ち込んでやれば求めてくれる.
    GroebnerBasis[{x2 + y2 + z2 − 4, x2 + 2y2 − 5, xz − 1}, {x, y, z}] - Wolfram|Alpha
  2. $I_1=I\cap k[y,z]=\langle -1+y^2-z^2,1+2z^4-3z^2 \rangle$ , $I_2=I\cap k[z]=\langle 1+2z^4-3z^2 \rangle$ となる.($I=\langle G\rangle$であることを利用している.)
  3. $1+2z^4-3z^2=0$ をとく. $1+2z^4-3z^2=(z-1)(z+1)(2z^2-1)=0$ から $z=\pm 1,\pm 1/\sqrt{2}$ と求められる.
  4. $-1+y^2-z^2=0$に3.で求められた$z=\pm 1,\pm 1/\sqrt{2}$を代入して計算する.
    • $z=\pm 1$ の場合: $y^2-2=0$ をといて $y=\pm\sqrt{2}$ .
    • $z=\pm 1/\sqrt{2}$ の場合: $y^2-3/2=0$ をといて $y=\pm \sqrt{6}/2$ .
    次に$2z^3-3z+x=0$へ上で求められた$z=\pm 1,\pm 1/\sqrt{2}$を代入する.
    • $z=1$ の場合: $-1+x=0$ をといて $x=1$ .
    • $z=-1$の場合:$1+x=0$ をといて $x=-1$ .
    • $z=1/\sqrt{2}$ の場合: $-\sqrt{2}+x=0$ をといて $x=\sqrt{2}$ .
    • $z=- 1/\sqrt{2}$ の場合: $\sqrt{2}+x=0$ をといて $x=-\sqrt{2}$ .

以上より,解は $(x,y,z)=(1,\pm\sqrt{2},1),(-1,\pm\sqrt{2},-1),(\sqrt{2},\pm\sqrt{6}/2,1/\sqrt{2}),(-\sqrt{2},\pm\sqrt{6}/2,-1/\sqrt{2})$ となる.

ちなみに,wolfram alphaにGroebnerBasis以下を打ち込んでやると,それらの根まで求めてくれる.その値はこれに一致している.

これで求められる理由

イデアル $I$ とそのグレブナー基底 $G$ って関係なくない?って思われるかもしれないが,以下の関係があることが示せる.

イデアル $I$ とそのグレブナー基底 $G$ の関係 イデアル$I$のグレブナー基底$G=\{g_1,\ldots,g_t\}$とするとき,$I=\langle g_1,\ldots,g_t\rangle$である.

さらに,以下の関係もある.

多項式が張る空間と連立多項式の根の関係 $k[x_1,\ldots,x_n]$ において $\langle f_1,\ldots,f_s\rangle=\langle g_1,\ldots,g_t\rangle$ ならば $\mathbf{V}(f_1,\ldots,f_s)=\mathbf{V}(g_1,\ldots,g_t)$ である.

これによって,$I=\langle f_1,\ldots,f_s\rangle$の代わりにそのグレブナー基底$G={ g_1,\ldots,g_t}$をを使い,$g_1=\cdots=g_t=0$を考えても,元の$f_1=\cdots=f_s=0$の解と同じものが得られることがわかる.

下に紹介する消去定理と拡張定理が,グレブナー基底を使って順次解を求めていくという方法がうまくいくことを保証してくれているものになっている.

消去定理 $I\subset k[x_1,\ldots,x_n]$ をイデアルとし, $G$ を $I$ のlex順序 $x_1>x_2>\cdots>x_n$ に関するグレブナー基底とすれば,
$$ G_l=G\cap k[x_{l+1},\ldots,x_n] $$
は第 $l$ 消去イデアル $I_l$ のグレブナー基底である.
拡張定理 代数的閉体 $k$ について,部分解 $(a_{l+1},\ldots,a_n)\in\mathbf{V}(I_l)$ は, $I_{l -1}$ のlex順序 $ x_1 > x_2 > \cdots > x_n$ に関するグレブナー基底の元 $f$ で, $\mathrm{LC}_{x_l}(f)(a_{l +1},\ldots,a_n)\neq 0$ をみたすものが存在するならば, $(a_{l},a_{l+1},\ldots,a_n)\in\mathbf{V}(I_{l -1})$ に拡張できる.

消去定理によって $I_l=\langle G_l\rangle$ と書けることわかるので, $G_l=\{ g_{ l,1 },\ldots,g_{ l,u } \}$ としたとき$g_{ l,1 }=\cdots=g_{ l,u }=0$ を解くことで $V(I_l)$ の元を求められる.

その後,拡張定理を用いて$V(I_l)$を$V(I_{l -1})$に拡張する.拡張定理の仮定を満たさないものは解にならない可能性がある.この操作を進める時に,拡張定理から主係数が$0$でない場合は解が存在していることが保証される.これを繰り返して$V(I)$を求める.

このように順番に解いていけるのはグレブナー基底の性質のおかげである.イデアル $I$ が $x_n$ だけからなる多項式を元として持てば,辞書式順序 $x_1>x_2>\cdots>x_n$ によるグレブナー基底は $x_n$ だけからなる多項式を含む.すなわち,グレブナー基底の定義より,イデアル $I$ のグレブナー基底 $G={ g_1,\ldots,g_t } $ について,任意に $f\in I$ を取ってくると $\mathrm{LT}(f)$ はある $\mathrm{LT}(g_i)$ ( $g_i\in G$ )で割ることができる.したがって $f\in I$ が $\mathrm{LT}(f)= x_n^k $ であれば, $\mathrm{LT}(g_i)= x_n^l $ ( $ l \leq m $ )となっているはずである.

終結式(判別式の拡張)

多項式同士が共通因子を持つか判定する方法.

1変数多項式終結

2つの$k[x]$上の1変数多項式を考える:

$$ \begin{align} f&=a_0x^l+\cdots+a_l \quad (a_0\neq 0,l>0) \\ g&=b_0 x^m+\cdots+b_m \quad (b_0\neq 0,m>0) \end{align} $$

この $f,g$ が共通因子を持つか,つまり連立方程式$f=g=0$が解を持つか判定してくれる表式が次の終結式と呼ばれるものである.

定義(終結式) $f,g$ の終結式 $\mathrm{Res}(f,g)$ とは,$(l+m)\times (l+m)$ 行列式
$$ \begin{align} \mathrm{Res}(f,g)=\det \begin{pmatrix} a_0 & & & & b_0 & & & \\ a_1 & a_0 & & & b_1 & b_0 & & \\ a_2 & a_1 & \ddots & & b_2 & b_1 & \ddots & \\ \vdots & a_2 & \ddots & a_0 & \vdots & b_2 & \ddots & b_0 \\ a_l & \vdots & \ddots & a_1 & b_m & \vdots & \ddots & b_1 \\ & a_l & & a_2 & & b_m & & b_2 \\ & & \ddots & \vdots & & & \ddots & \vdots \\ & & & a_l & & & & b_m \end{pmatrix} \end{align} $$
のこと.$a$ 側は $ m $ 列,$b$ 側は $l$ 列.空白は $0$ .$x$ に依存していることを強調するときは $\mathrm{Res}(f,g,x)$ とかく場合もある.

なお,これはシルベスターの行列式といわれるものと同じ形をしている.

終結式には以下の3つの性質がある(証明はせず紹介にとどめる).

終結式の3つの性質
  • 多項式性: $\mathrm{Res}(f,g)$ は $f,g$ の係数についての整数係数の多項式である.
  • 共通因子性: $\mathrm{Res}(f,g)=0\,\Leftrightarrow\,$ $f,g$ が $k[x]$ において共通因子をもつこと.
  • 消去性: $Af+Bg=\mathrm{Res}(f,g)$ を満たす多項式$A,B\in k[x]$が存在する. $A,B$ の係数は $f,g$ の係数についての整数係数多項式
  • 多項式性が意味しているのは,ある多項式 $\mathrm{Res}_{l,m}\in\mathbb{Z}[u_0,\ldots,u_l,v_0,\ldots,v_m]$であって, $\mathrm{Res}(f,g)=\mathrm{Res}_{l,m}(a_0,\ldots,a_l,b_0,\ldots,b_m)$となるものがあるということ.
  • 共通因子性については,共通因子をもつということは, $f=g=0$ が共通の解を持つということである.
  • 消去性は,消去理論(消去定理)との対応がある.

上では定義としてシルベスターの行列式を利用したが,他の表式もある.

終結式のかきかえ $f,g\in k[x]$ の根を $ \alpha_1 , \ldots , \alpha_l , \beta_1 , \ldots , \beta_m $ とする(これらの根は$k$より大きな体にあるかもしれない).このとき終結式は
$$ \begin{align} \mathrm{Res}(f,g)&=a_0^mb_0^l\prod_{i=1}^l\prod_{j=1}^m(\alpha_i-\beta_j)\\ &=a_0^m\prod_{i=1}^l g(\alpha_i)\\ &=(-1)^{lm}b_0^l\prod_{j=1}^m f(\beta_j) \end{align} $$
と表示できる.

このことから, $ \mathrm{Res}(f_1f_2,g)=\mathrm{Res}(f_1,g)\mathrm{Res}(f_2,g) $ であることがわかる.

例を挙げる.

$ f =x^2-4x+3 $,$ g =2x-4 $とする.このとき

$$ \begin{align} \mathrm{Res}(f,g)=\det \begin{pmatrix} 1 & 2 & 0 \\ -4 & -4 & 2 \\ 3 & 0 & -4 \end{pmatrix} \end{align}=-4 $$

となって,共通根をもたないと判定できる.実際,$f=0$をとくと$x=1,3$,$g=0$をとくと$x=2$であり,共通根をもたない.

$f=(x-1)(x-3)$であることに注意すれば,$f_1=x-1,f_2=x-3$とみれば

$$ \begin{align} \mathrm{Res}(f_1,g)\mathrm{Res}(f_2,g)=\det \begin{pmatrix} 2 & 1 \\ -4 & -1 \end{pmatrix} \det\begin{pmatrix} 2 & 1 \\ -4 & -3 \end{pmatrix} \end{align}=2\cdot (-2)=-4 $$

となるので,$ \mathrm{Res}(f,g)=\mathrm{Res}(f_1,g)\mathrm{Res}(f_2,g) $が成立していることが確認できる.

なお,今回$g=f'$となっているが,一般に判別式 $D$ との関係として $\mathrm{Res}(f,f')=(-1)^{\deg f (\deg f -1)/2}\mathrm{LC}(f)D$ の関係があることが知られている.確かめてみると,$\deg f=2$,$\mathrm{LC}(f)=1$,$D=(-4)^2-4\cdot 3 = 4 $であることから,成立が確認できる.

2変数多項式終結

2つの$k[x,y]$上の2変数多項式を考える:

$$ \begin{align} F&=a_0x^l+ a_1 x^{ l - 1} y +\cdots+a_l y^l \quad (a_0\neq 0,l>0) \\ G&=b_0 x^m+ b_1 x^{ m - 1 } y +\cdots+b_m y^m \quad (b_0\neq 0,m>0) \end{align} $$

これに対する終結式$\mathrm{Res}(F,G)$は次で定義される.1変数の場合のものと同じである.

定義(終結式) $F,G$ の終結式 $\mathrm{Res}(F,G)$ とは,以下で定義される$(l+m)\times (l+m)$ 行列式である:
$$ \begin{align} \mathrm{Res}(F,G)=\det \begin{pmatrix} a_0 & & & & b_0 & & & \\ a_1 & a_0 & & & b_1 & b_0 & & \\ a_2 & a_1 & \ddots & & b_2 & b_1 & \ddots & \\ \vdots & a_2 & \ddots & a_0 & \vdots & b_2 & \ddots & b_0 \\ a_l & \vdots & \ddots & a_1 & b_m & \vdots & \ddots & b_1 \\ & a_l & & a_2 & & b_m & & b_2 \\ & & \ddots & \vdots & & & \ddots & \vdots \\ & & & a_l & & & & b_m \end{pmatrix} \end{align} $$

1変数の場合の性質が2変数の場合には以下のように言い換えられる(整多項式性と共通因子性).

なお, $F,G$ の形から, $y=1$ とすれば $f,g$ と一致するので1変数の場合を特殊な場合として含むことがわかる.

終結式の性質
  • $F,G$に対して,ある $\mathrm{Res}_{l,m}\in\mathbb{Z}[u_0,\ldots,u_l,v_0,\ldots,v_m]$ であって, $\mathrm{Res}(F,G)=\mathrm{Res}_{l,m}(a_0,\ldots,a_l,b_0,\ldots,b_m)$ となる多項式が存在する.
  • $\mathbb{C}$ 上で $\mathrm{Res}(F,G)=0\,\Leftrightarrow\,$$F=G=0$ が $\mathbb{C}^2/(0,0)$ に解をもつ.
    (この解を非自明解:nontrivial solutionという)

また,シルベスターの行列式の対角成分に注目することで,次のこともすぐにわかる.

終結式の性質
  • $\mathrm{Res}(x^l,y^m)=1$

多重多項式終結

このセクションの内容は日本語の文献がない.さらに,英語の文献もほとんどない気がする.し,ガチの証明をしようとすると微分幾何が必要になったりする.

多重多項式終結式とは,上で2つ紹介してきたものの一般化.

「変数 $x_0,\ldots,x_n$の$n+1$ 個の斉次多項式 $F_0,\ldots,F_n$ の終結式」について考える.

仮定として,各$F_i$は正の全次数をもち,$\mathbb{C}$上で考えることにする.

$n+1$ 個の斉次多項式 $F_0,\ldots,F_n \in \mathbb{C} [x_0,\ldots,x_n] $があったとき,方程式系$F_0=\cdots=F_n=0$が非自明解を持つためには,$F_0,\ldots,F_n$の係数はどのような条件を満たさなければならないだろうか.

以下,記号として$P(F_1,\ldots,F_n)$のようなものを使うことがある.これは,$P \in \mathbb{C}[u_{i,\alpha}] $があったとき,$P$の各変数$u_{i,\alpha}$を対応する$F_i$の係数 $c_{i,\alpha}$ に取り替えることで得られる数(このような$P$を$F_i$の係数の多項式という)である.以下では $P$ に $\mathrm{Res}$ があてはまって使われることが多い.

定理 正の次数$d_0,\ldots,d_n$を固定する.このとき,次の性質をもつ唯一の多項式$\mathrm{Res}\in\mathbb{Z}[u_{i,\alpha}]$が存在する:
  1. $F_0,\ldots,F_n\in\mathbb{C}[x_0,\ldots,x_n]$が次数$d_0,\ldots,d_n$の斉次多項式ならば,$F_0(x_0,\ldots,x_n)=\cdots=F_n(x_0,\ldots,x_n)=0$が$\mathbb{C}$上の非自明解を持つための必要十分条件は$\mathrm{Res}(F_0,\ldots,F_n)=0$
  2. $\mathrm{Res}(x_0^{d_0},\ldots,x_n^{d_n})=1$
  3. $\mathrm{Res}$は($\mathbb{C}[u_{i,d}]$の多項式としても)既約.
定義(終結式) 上の定理をみたす$\mathrm{Res}(F_0,\ldots,F_n)$を$F_0,\ldots,F_n$の終結という.(次数を明示して$\mathrm{Res}$を$\mathrm{Res}_{d_0,\ldots,d_n}$と書くこともある.)

このように定義された終結式は,2変数多項式終結式とも矛盾ないことが確認できる(既約かどうかは確認できないが...きっと既約なんだと思う).

例(n+1変数,n+1個の線形多項式

終結式の例として,$n+1$ 個の変数 $x_0,\ldots,x_n$,$n+1$ 個の線形多項式 $F_0,\ldots,F_n$ の終結式,すなわち各々が $F_i=\sum_{j=0}^n c_{ij}x_j$ のように書かれているものを考えてみる( $c_{ij}$ が定数で $x_j$ が変数).

このとき,

$$ \mathrm{Res}_{1,\ldots,1}(F_0,\ldots,F_n)=\det(c_{ij}) $$

となる.定理の内容を確認してみる.

  1. 方程式系
    $$ \begin{align} F_0&=c_{00}x_0+\cdots+c_{0n}x_n=0 \\ & \vdots \\ F_n&=c_{n0}x_0+\cdots+c_{nn}x_n=0 \end{align} $$
    が非自明解をもつことの必要十分条件は $\det(c_{ij})=0$.
  2. $F_i=x_i$ なので,$c_{ij}=\delta_{ij}$.つまり$\det(c_{ij})=\det(\delta_{ij})=\det I=1$.

例(3変数,3元2次式)

他の例として,

$$ \begin{align} F_0&=c_{01}x^2+c_{02}y^2+c_{03}z^2+c_{04}xy+c_{05}xz+c_{06}yz \\ F_1&=c_{11}x^2+c_{12}y^2+c_{13}z^2+c_{14}xy+c_{15}xz+c_{16}yz \\ F_2&=c_{21}x^2+c_{22}y^2+c_{23}z^2+c_{24}xy+c_{25}xz+c_{26}yz \end{align} $$

終結式を考えてみると,これは

$$ \mathrm{Res}_{2,2,2}(F_0,F_1,F_2)=-\frac{1}{512}\det \begin{pmatrix} c_{01} & c_{02} & c_{03} & c_{04} & c_{05} & c_{06} \\ c_{11} & c_{12} & c_{13} & c_{14} & c_{15} & c_{16} \\ c_{21} & c_{22} & c_{23} & c_{24} & c_{25} & c_{26} \\ b_{01} & b_{02} & b_{03} & b_{04} & b_{05} & b_{06} \\ b_{11} & b_{12} & b_{13} & b_{14} & b_{15} & b_{16} \\ b_{21} & b_{22} & b_{23} & b_{24} & b_{25} & b_{26} \end{pmatrix} $$

の形で表される.

なお,一般の終結式の構成法はこれに似ているらしい(ちゃんと見ていないが).

この$6\times 6$で表された行列式を展開すると21894個の項を持ち,とても書き下すことは難しい...

そこで,括弧式を使って簡略化をしようという考えがあったりする(次のセクション).

終結式の性質

終結式の次数

定理(終結式の次数) 固定した$j$($0\leq j\leq n$)について,$\mathrm{Res}$は$u_{j,\alpha}$($|\alpha|=d_j$)を変数とする次数$d_0\cdots d_{j-1}d_{j+1}\cdots d_n$の斉次多項式である.すなわち,
$$ \mathrm{Res}(F_0,\ldots,\lambda F_j,\ldots,F_n)=\lambda^{d_0\cdots d_{j-1}d_{j+1}\cdots d_n}\mathrm{Res}(F_0,\ldots,F_n) $$
である.さらに,$\mathrm{Res}$の全次数は$\sum_{j=0}^n d_0\cdots d_{j-1}d_{j+1}\cdots d_n$である.

ポアソンの公式

定理(ポアソンの公式) 終結式 $\mathrm{Res}(\overline{F}_0,\ldots,\overline{F}_{n-1})$ が $\mathrm{Res}(\overline{F}_0,\ldots,\overline{F}_{n-1})\neq 0$ を満たすならば,商環 $A=\mathbb{C}[x_0,\ldots,x_{n-1}]/\langle f_0,\ldots,f_{n-1}\rangle$は$\mathbb{C}$ 上のベクトル空間として $d_0\cdots d_{n-1}$ 次元であって,さらに
$$ \mathrm{Res} (F_0,\ldots,F_n)=\mathrm{Res} (\overline{F}_0,\ldots,\overline{F}_{n-1})^{d_n}\det (m_{f_n}:A\to A) $$
である.ただし, $m_{f_n}:A\to A$ は $f_n$ による乗法で定義される線形写像

証明には微分幾何の知識が必要なので省略.

終結式の対称性と積

定理(終結式の対称性と積)
  1. 多項式 $F_j=F_j'F_j''$ を,次数がそれぞれ $d_j',d_j''$ の斉次多項式の積とするとき,
    $$ \mathrm{Res}(F_0,\ldots,F_j,\ldots,F_n)=\mathrm{Res} (F_0,\ldots,F_j',\ldots,F_n)\cdot \mathrm{Res} (F_0,\ldots,F_j'',\ldots,F_n) $$
    である.ただし,右辺の終結式は $d_0,\ldots,d_j',\ldots,d_n$ と $d_0,\ldots,d_j'',\ldots,d_n$ の斉次多項式についての終結式.
  2. $i < j$ のとき,
    $$ \mathrm{Res}(F_0,\ldots,F_i,\ldots,F_j,\ldots,F_n)=(-1)^{d_0\cdots d_n}\mathrm{Res}(F_0,\ldots,F_j,\ldots,F_i,\ldots,F_n) $$
    である.ただし,右辺の終結式は次数が$d_0\ldots,d_j,\ldots,d_i,\ldots,d_n$である斉次多項式についての終結式.

その他

定理(多項式の線形結合,括弧での略記)
  1. $F_j$ が全次数 $d$ の斉次多項式であって, $G_i=\sum_{j=0}^n a_{ij}F_j$ (ただし, $A=(a_{ij})$ は $\mathbb{C}$ の元を成分とする可逆行列)であるとき,
    $$ \mathrm{Res}(G_0,\ldots,G_n)=(\det A)^{d^n}\mathrm{Res}(F_0,\ldots,F_n) $$
    が成り立つ.
  2. 全次数$d$の単項式全体を$x^{\alpha(1)},\ldots,x^{\alpha(N)}$とし,$n+1$個の異なる添字 $1\leq i_0 < \cdots < i_n\leq N $ について括弧$[i_0\ldots i_n]$を行列式を用いて以下のように定義する:
    $$ [i_0\ldots i_n]=\det(u_{i,\alpha(i_j)})\in\mathbb{Z}[u_{i,\alpha(j)}] $$
    このとき,$\mathrm{Res}$は括弧$[i_0\ldots i_n]$の多項式である.

再び前のセクションで考えていた3個の3元2次式

$$ \begin{align} F_0&=c_{01}x^2+c_{02}y^2+c_{03}z^2+c_{04}xy+c_{05}xz+c_{06}yz \\ F_1&=c_{11}x^2+c_{12}y^2+c_{13}z^2+c_{14}xy+c_{15}xz+c_{16}yz \\ F_2&=c_{21}x^2+c_{22}y^2+c_{23}z^2+c_{24}xy+c_{25}xz+c_{26}yz \end{align} $$

終結式を考えてみると,これは

$$ \mathrm{Res}_{2,2,2}(F_0,F_1,F_2)=-\frac{1}{512}\det \begin{pmatrix} c_{01} & c_{02} & c_{03} & c_{04} & c_{05} & c_{06} \\ c_{11} & c_{12} & c_{13} & c_{14} & c_{15} & c_{16} \\ c_{21} & c_{22} & c_{23} & c_{24} & c_{25} & c_{26} \\ b_{01} & b_{02} & b_{03} & b_{04} & b_{05} & b_{06} \\ b_{11} & b_{12} & b_{13} & b_{14} & b_{15} & b_{16} \\ b_{21} & b_{22} & b_{23} & b_{24} & b_{25} & b_{26} \end{pmatrix} $$

の形で表されるのだった.

全次数2の6個の単項式を$x^2,y^2,z^2,xy,xz,yz$と並べると括弧$[i_0i_1i_2]$は

$$ [i_0i_1i_2]=\det\begin{pmatrix} c_{0i_0} & c_{0i_1} & c_{0i_2} \\ c_{1i_0} & c_{1i_1} & c_{1i_2} \\ c_{2i_0} & c_{2i_1} & c_{2i_2} \end{pmatrix} $$

と表せる.これを用いると$\mathrm{Res}_{2,2,2}(F_0,F_1,F_2)$は

$$ \begin{align} \mathrm{Res}_{2,2,2}(F_0,F_1,F_2) = & \,[145][246][356][456] − [146][156][246][356] − [145][245][256][356] \\ & − [145][246][346][345] + [125][126][356][456] − 2[124][156][256][356] \\ & − [134][136][246][456] − 2[135][146][346][246] + [235][234][145][456] \\ & − 2[236][345][245][145] − [126]^2[156][356] − [125]2[256][356] \\ & − [134]^2[246][346] − [136]^2[146][246] − [145][245][235]^2 \\ & − [145][345][234]^2 + 2[123][124][356][456] − [123][125][346][456] \\ & − [123][134][256][456] + 2[123][135][246][456] − 2[123][145][246][356] \\ & − [124]^2[356]^2 + 2[124][125][346][356] − 2[124][134][256][356] \\ & − 3[124][135][236][456] − 4[124][135][246][356] − [125]^2[346]^2 \\ & + 2[125][135][246][346] − [134]2[256]2 + 2[134][135][246][256] \\ & − 2[135]^2[246]^2 − [123][126][136][456] + 2[123][126][146][356] \\ & − 2[124][136]2[256] − 2[125][126][136][346] + [123][125][235][456] \\ & − 2[123][125][245][356] − 2[124][235]2[156] − 2[126][125][235][345] \\ & − [123][234][134][456] + 2[123][234][346][145] − 2[236][134]^2[245] \\ & − 2[235][234][134][146] + 3[136][125][235][126] − 3[126][135][236][125] \\ & − [136][125]^2[236] − [126]^2[135][235] − 3[134][136][126][234] \\ & + 3[124][134][136][236] + [134]^2[126][236] + [124][136]^2[234] \\ & − 3[124][135][234][235] + 3[134][234][235][125] − [135][234]^2[125] \\ & − [124][235]^2[134] − [136]^2[126]^2 − [125]^2[235]^2 \\ & − [134]^2[234]^2 + 3[123][124][135][236] + [123][134][235][126] \\ & + [123][135][126][234] + [123][134][236][125] + [123][136][125][234] \\ & + [123][124][235][136] − 2[123]^2[126][136] + 2[123]^2[125][235] \\ & − 2[123]^2[134][234] − [123]^4 \end{align} $$

と書き表せる.$\mathrm{Res}_{2,2,2}$は$c_{ij}$について全次数が12,各括弧の全次数は3なので,$\mathrm{Res}_{2,2,2}$は括弧の全次数4の多項式とみなせる.上の式はかなり複雑だが,$c_{ij}$の多項式で表現した場合は21894個の項だったものが括弧を使うと68個の項で表現できているので,$c_{ij}$での表示と比較すると括弧での表示はかなり単純化されているといえる.

参考文献

[1] D. Cox, J. Little and D. O’Shea. Using Algebraic Geometry, 2nd edition, Springer-Verlag, 2005.

[2] I.R.Shafarevich. Basic Algebric Geometry 1. (Third Edition). Springer-Verlag, 2013.

[3] J.Jouanolou. Le formalisme du résultant, Advances in Math. 90 (1991), 117-263.

[4] B. Sturmfels. Algorithms in Invariant Theory, Springer-Verlag, 1993.

[5] D. Cox, J. Little and D. O’Shea. Ideals, Varieties, and Algorithms, 2nd edition, Springer-Verlag, 1996.

[6] 伊理 正夫,岩波講座応用数学1 基礎1 線形代数1, 岩波書店, 1993.

[7] 計算機代数ゼミ発表資料 - konn-san.com

POODLE攻撃

例によってリレーブログの時間です!前の僕の記事はこれ、前回の方のブログはこちらになります。

potaxyz.hatenablog.jp

amame.hateblo.jp

今回僕に与えられたテーマはPOODLE攻撃になります。かなりざっくりまとめます。(せっかくなら実装して検証したり...とかやろうと思っていたのですが全然時間が取れなかったのでまたいつか...!)

POODLE攻撃とは

POODLEとは、Padding Oracle On Downgraded Legacy Encryptionの略で、SSL3.0というインターネット上でデータを暗号化して送受信する仕組み(=プロトコル)を用いた中間者攻撃を実行するために悪用されうるセキュリティ上の欠陥です。

新しい暗号化方式の通信に対応しているサーバーであっても、サーバーが対応している古い暗号化方式の通信プロトコルに切り替え(=ダウングレード)、古い方式に有効なPadding Oracle攻撃を行うというものです。

Padding Oracle

暗号方式にも様々ありますが、その中でもブロック暗号方式では、特定のサイズ単位でデータを暗号化します。しかし、暗号化したい平文は必ずしも特定のサイズ単位になっているとは限りません。そこで、前回の僕の記事のように、特定のサイズ単位になるようにダミーデータを詰めてやる、ということをします。

例を出すと、64bit単位でデータを暗号化する方式だったとすると、平文が54bitであれば、残りの10bitはダミーデータで埋め(埋める=padding)、規格に合うようにします。

クライアントからサーバーに暗号文を送ると、暗号文を解析した結果をクライアントに返すときに、暗号文が正しく復号できたかどうかのみならず、パディングの一致不一致などをお知らせする場合があります(パディングのオラクル、オラクルは神託という意味)。

このPadding Oracleを攻撃者は利用して、例えば、正しいパディングを変えながら送信しまくって調べ、正しいパディングがわかれば暗号化途中の中間値が解析でき、と、これを繰り返せば最終的に暗号化前の平文を解析することができてしまうのです!

対策

対策としては、SSL3.0を無効にすること、と、いたってわかりやすいものになっています。現在ではSSLは使用が禁止されており、TLSというプロトコルが使われています。

実は、この脆弱性SSLだけでなくTLSの初期バージョン(1.0/1.1)にも存在することが報告されています。このため、2021年3月には、TLS1.0/1.1の使用禁止が求められています。なので、TLSTLSでもバージョン1.2以上のものを使うようにすればよいということになります。

参考文献

次の記事はこちらです。

qwerty11.hatenablog.com

KLab Server Side Camp(第2回)に参加しました

KLab(クラブ)さんの KLab Server Side Camp(第2回)に参加してきました。

このインターンに参加するまで失礼ながら知らなかったのですが、KLabさんは、スクフェスラブライブ)とか、最近だとラピライ(ラピスリライツ)とかのゲームを作ってる会社、というとイメージが湧きやすいのかなと思います。ICPCのスポンサーもやられているのは知らなかった...

人生初のインターンだったので、個人的にはとてもいい経験になったと思います。そんな参加記です。

告知

参加記に入る前に宣伝です。

<サマーインターン、エントリー受付中>

■「KLab Server Side Camp」(第3回)

https://klab-hr.snar.jp/jobboard/detail.aspx?id=Or4L6WIHlTI

日程:9/1(木)~7(水)※平日5日間

第1次応募締切:3/31(木)23:59まで

  • オリジナルの音ゲーを題材とした「サーバサイド」開発体験インターン

  • メンターは自社エンジニアのPythonコアコミッターが務めます

#KLabServerSideCamp

#サーバサイドキャンプ

リンク先で興味を持たれた方や、以下の参加記で興味を持たれた方は是非エントリーしてみてはどうでしょうか...

参加のきっかけ

twitter経由で第1回の参加記を読んだからです。この記事読んだんだと思います。

qiita.com

単純に面白そうだな〜ってなったのと、自分が趣味として使ってた技術(FastAPIもSQLこれで触ったことは一応あった)がどうやって実際のアプリケーションに使われているんだろうと興味があったというのが一番の理由でしょうか。pythonを使って、というのもあまり聞かない気もしたので(実際の開発でもpythonを使っているようです)。

あとは、こういうインターンに参加しないと、春休みコーディングしないだろうなあというのもありました。

ちなみに、僕がこのインターンの存在を知ったタイミングは第2次応募締め切りの直前くらいで、2次はお祈り確率が高くなっていたとのことなので、運が良かったようです。何事も早めにやるのが大事ですね。

スケジュールイメージ

3月の10,11,14,15,16日の5日間で開催されました。

ちなみに、12,13は土日でしっかり休んでね〜とのことでしたが、その土日は僕は東京に行っていました

なお、今回の製作物はこちらになっています(コードとして直すべきところはタイミングを見て直したいですね)。

github.com

1日目(3/10(木))

各参加者の自己紹介から始まり、環境構築、MySQLを触ってみる、SQLAlchemyを使ってpythonからSQLを実行してみる、音ゲーで遊んでみる、といったことをしていました(講義と実習)。

開発環境にはgithub codespacesというものを使っていて、僕自身はそれに初めて触れたので、こんな便利なものもあるんや〜と少し感動していました。

音ゲーはパソコン上で動くもので、6つのキーでやるものでした。弐寺beatmania IIDX)みたいな感じでしょうか。僕はipadでdeemoとかデレマスとかそういうタイプのキーを使わない音ゲーばかりやっていたのでなかなか苦戦していました。ちなみに、KLabさんのゲームはひとつもやったことがありませんでした...

さすがにSQLなど触った経験があるだけあって特に引っかかることもなくこなせたので、大部分の時間を音ゲーのプレイに費やしていました。

2日目(3/11(金))

1日目に最低限のSQLなどの知識を確認したので、FastAPIとかpydanticとかを触ってみようという感じになりました。まずはチュートリアル的な感じでuserのAPIを完成させてみて触り方を学習します。ここまでで以後実装に必要な知識は一応得られたことになります。

午後からは本キャンプの本題となるroom APIの実装に入ります。マルチプレイをするのにバックエンド側で必要な機能を実装していきます。具体的には、対戦部屋の作成、部屋の一覧表示、部屋への入室、開始待ち、ゲーム開始、結果の送信、結果の表示、途中退室、の機能の順です。マークダウンで書かれた仕様書があり、それを基づいてやっていきます。

2日目にはたしか、部屋への入室までは実装できていた気がします。部屋が満室だと入れないようにするとか、考慮することがいろいろあって、部屋への入室機能の実装には苦労しました。

3日目(3/14(月))

土日を挟みましたが、先週からの続きをやっていきます。以後は、実習のヒントとか、ポイントの解説的な講義はありましたが、基本はもくもくと実装です。

もくもくと実装したおかげか、一応目標としていた機能は全て実装できていたはずです。皆さんかなりもくもくと作業していたので、社員さんが寂しそうでした(笑)

4日目(3/15(火))

この日は他の参加者の方々と実際にマルチプレイをし合ってデバッグ作業でした。幸いなことに?僕の書いたプログラムは特に問題なく動いてくれました。

デバッグし合っていると、自分の実装で忘れていた点などが浮かび上がってきて、ちゃんと動いてくれてはいるけど問題があるなあといったところを修正できたり、機能の追加をすることができたりしました。

また、デバッグ作業をしていたら、マルチプレイではポーズ操作ができないはずなのにできてしまい、プレイ中にやめられない想定なのにプレイがやめられてしまうという、クライアントサイドのバグを思わぬところで見つけてしまったりもしました。

(これの何が問題かというと、退室した人がプレイ中のままと誤認されて、他の退室してないプレイヤーがプレイ終了しても、いつまでたってもリザルトの画面に辿り着けないということが起きてしまいます)

また、途中でエンジニアさんの座談会の時間が設けられていました。技術ってどうやって仕入れてますとか、リモートワークこんな感じですとか、色々話していただきました。

5日目(3/16(水))

この日は最終日ということで、成果発表資料の作成と簡単なコードの修正と、それから昨日見つけてしまったクライアントサイドのバグをサーバーサイド側でなんとかしてみるか〜ということで機能を追加していました(その機能の実装はできましたが、個人的にあまり納得いくコードの書き方ではありませんでした、成果発表会の時にこの点についてコメントをいただけることができたのでよかった)。

自分の成果発表会の後には、メンターさんからコメントがいただけて、全部実装できてていいですねとか、この作りだとデッドロックが起きてしまうかもしれないだとか、こういう実装はしなくて普段はこうしてるかなとか、関数の分け方がいいだとか、色々言っていただけで、学びもありました。

もちろん、他の方の成果発表からも得られるものがありました。UML図やER図書いてる方だとか、セキュリティ意識高くSHA256をかましていたりとか、データベースの正規形意識してる方だとかがいて、すげーとなっていました。

成果発表会後は懇親会ということで、昨日の座談会の続き(?)という面もありましたが、それよりはゆるい感じで、就活の話からそうでない話まで、こちらも色々と楽しい話が聞けました。深夜ラジオみたいな感じでした。

感想

技術面

メンターの方々のhelpがかなり手厚いと感じました。質問対応が早くてなおかつ親切です。自分はあまり質問することはありませんでしたが、他人の質問を見て勉強になるなあと感じたこともありました。ちなみに、メインメンターの方はpythonのコアコミッターの方ですごいと思う。

最終日に自分の書いたコードに対してコメントをいただけたのは本当にためになったと感じます。

課題は普通に難しいんだと思います。サブメンターのエンジニアさんがそうおっしゃっていました。僕は特につまずくことなく実装できてしまいましたが、それでも悩んだ部分はあります。参加者全員が最後まで実装できたわけではないです。仕様書があるとはいえ、逐一説明されているわけではなく、データベースのテーブルの設計から始めるため、なかなか自由度が高い課題になっているかなと思います。

他の参加者の方々について

みんながみんな情報系というわけではなく、例えば化学系の方もいました。また、情報系の中でも低レイヤーが専門という方や、普段はpythonじゃなくてgo書いてますとか様々でした。

サーバーサイドの経験があってバリバリやな〜って方もいれば、ない方もいました。僕は一応あるっぽいです(そういうことを意識せずに開発していました)。

志望理由もさまざまで、僕は(真剣な方にちょっと申し訳ないなと思いつつ)気になる〜って軽いノリで参加していて、似たような志望動機の方もいましたが、就活の一環で成長したいからという方もいらっしゃいました。

参加者11名中、バ美肉している参加者が2人もいらっしゃいました。

参加者の方々を見ていると、pythonが書けて(数値計算などでも可)、gitが使えれば参加のチャンスはあるのかなと思います。

雰囲気について

雰囲気はとても良く、エンジニアさんとも、他の参加者の方とも、ワイワイやることができました。本筋に関係ない雑談もできました。エンジニアを大切にしてくれる社風なんだなと感じました。会社の雰囲気を知れたというのは大きな収穫の1つだと思います。

ゲームについて

なんとこのインターンのためだけに作っていただいたようなのですが、普通にクオリティが高く驚きです。暇な時に遊ぼうと思います。ゲームのクライアントサイド自体はunityで作られているようです。

開発用(?)というだけあって、普通にプレイもできるのですが、オートプレイモードや、一瞬でリザルトに移行するモード等も用意されています。

f:id:potaxyz:20220318185250p:plain
楽曲・難易度選択画面

f:id:potaxyz:20220318185010p:plain
プレイ画面 キャラクターがかわいい

f:id:potaxyz:20220318185530p:plain
ゲーム開始画面 通常・オート・一瞬モードとシングル・マルチプレイの切替が可能

楽曲の例:

ノベルティなど

参加証をいただきました。ちなみに、twitterでもこのアイコン使ってますが、どっかからパクってきてるわけではなくて、自分で描いたものです。ホワイトボードに描いたやつを写真撮ってます。

f:id:potaxyz:20220318185917j:plain
参加証

5日間のお供にということで、段ボール1箱分のお菓子と、自己研鑽用の本などをいただきました。

f:id:potaxyz:20220318190028j:plain
お菓子や本や扇子など

また、懇親会用にということで、お酒やおつまみ類もいただきました。成城石井のいいおつまみでした。

f:id:potaxyz:20220318190108j:plain
お酒とおつまみ

最後には修了証もいただきました。

たくさんのノベルティ等本当にありがとうございます。まだたくさん残ってるのでゆっくりいただきます。

さいごに

自分自身、あまり企業のことや就職のことに興味を持てずにいたので、このような経験ができたのはとてもよかったと感じています。

KLabさん、5日間ありがとうございました。とても楽しかったです。

続 セキュリティ・キャンプフォーラム2022に登壇しました

前回の記事の続きです。が、フォーラムは関係なくただの旅行記です。

potaxyz.hatenablog.jp


久しぶりの東京ということで今回の旅行はかなり楽しみにしていました。

フォーラムの前日の夜から移動を開始。まずは東京とは逆方面の大阪に向かいます。

わざわざ大阪に出向いたのは...そうです、サンライズに乗りたかったからです!

6年前程にも一度出雲市→東京で乗車したことはありましたが、今回は途中大阪からの利用です。寝台特急って憧れますよね〜

前回はおそらくシングルだったと思うんですが、今回は席が空いていなかったというのもあって、B寝台の1人用個室としては一番高いシングルツインを利用。2人で使うこともできるので、2人用の準備がしてあります。

1階部分はイスと机に組み替えることもできます。

1人で使うには広いので贅沢に空間を使うことができました。起きたら発表の本番なので早く寝ます。


おはようございます。

肌寒くてなかなか布団から出られませんでした。気づいたら函南トンネルを抜けて熱海にいました。この辺で起き上がったと思う。

歯磨きなどを済ませて部屋に戻ります。

横浜駅停車中

PCR検査をしました。ちゃんと陰性でした。実際にはPCR検査に失敗していて、というのもあるはずのパーツが足りませんでした。フォーラム会場で雑談でこの話したらパーツ持ってる人がいたのでそこでやっと判定ができました。

歯磨き後とか食事後30分は検査ちゃんとできないかもって書かれてたから結局パンはここでは食べれず東京駅の外で食べることに...

パーツなくてPCR検査できなくね?ってなって困惑していたら東京駅に到着してしまいました。別のパーツに本体を押し込むみたいに書いてあったので、なんとかならないかと一生懸命外の石畳に検査キットを打ち付けていましたが、検査結果は出てくれませんでした。

suicaがメインのエリアではなかったので入れていなかったのですがここで入れてみました。都区内パスを買っていますが結局ほとんど使っておらず金をドブに捨てる結果に...

フォーラムまで時間を潰します。

スタバの都道府県埋めも兼ねて会場のビルの1階に入ってたスタバに入ります。スターバックスリザーブとかいうのやっててかなりいい店舗らしいですね。

会場 丸の内オアゾ でかい

パソコンを開いて発表スライドの確認(喋ることを決める)、別件でtexでせこせこと数式を書いてpdfを作ってメールを投げたりしていました。

そんなこんなしてたら昼ご飯を食べた方がいい時間になってきました。google mapで自分が目つけたご飯屋として打鋲してたのが一箇所しかなかったのでそこに行くため秋葉原へ。30分後には会場にいないといけないみたいでちょっとシビアだな、と思いつつ行ってみたら普通に並んでたので諦めてそのまま戻ってきました。仕方ないのでnewdaysでおにぎり2つ買って会場で食べました。

スカイツリーがよく見える

発表した話は前の記事の通りです。

焼肉会も解散し、ホテルへ向かいます。

夜の東京駅

皇居周辺を歩きましたが、大都会の夜景を久しぶりに見たなあという気持ちに。

twitterで見かけて泊まってみたいなあと思ったところです。説明はツイートの通りです。

チェックインして部屋にあったチラシ?読んだらチェックイン時刻とされている21時は普通に過ぎててちょっと申し訳なくなりました。一応門限(ホテルなのに門限って何だ)とされている24時より前に来たからセーフなのかな。

おやすみ


朝食を食べます。

洋朝食

和食も選べましたが洋食の方がそれっぽいと思ってそうしてみました。卵料理もスクランブルエッグと目玉焼きとオムレツで選べますが、一番それっぽいオムレツにしました。他の宿泊客の方もオムレツばかり選んでいたようで、料理してる方とか案内してくださった方からの今日はオムレツしか出ませんね、という会話が聞こえてきました。

飲み物が2つ並んでいるが、飲み物もいくつか提示されて、そこから好きなだけ選べるようになっていました。リッチだね。

朝食の後は館内を軽く探検しました。3階ではウエディングフェアやってたりとか、4階には読書室があったりしました。学士会会員専用の囲碁将棋部屋とかもあったし、旧帝大の七大学紹介コーナーとかもあった。さすがだと思う。更衣室ってどう使うんだろう。

チェックアウトをして、いくつかやりたいと思っていたタスクを遂行していきます。

麹町にあるセブンイレブンに来ました。本社が近いためか、かなり設備も充実してたし、商品がバカみたいに品揃えよくて驚きました。

クリック感なくてアレかなあとか思ってたんですが、意外と違和感なかった気がしました。普及するんでしょうかねえ...

ネットミームの巡礼

こんなの売ってるんですね

お茶の水でクラシックCDを漁りました。思い立った時にたまにやっています。今回はショパンエチュード集とシューマン子供の情景クライスレリアーナが入ってるやつを買ってみました。サブスクでも聞けるけど。

秋葉原で麺を食べました。おいしかったです。

チームラボボーダレスに行こうとしていたのですが、思った時間に予約を取るのに失敗してかなり時間を無駄にします。

仕方ないので東京駅に戻って先んじてお土産を集めておきます。が、丸の内側と八重洲側を間違えたりしてここでもかなり時間を無駄にして、乗る電車ギリギリとなっていました。京葉線ホーム遠すぎやねん。

ちなみに買ったお土産は東京カンパネラのバウムバーと、東京ひよこの紅茶ひよこ3個入りです。個人的に好きなので東京行くといつも東京カンパネラと東京ひよこの商品を買ってしまいます。

無事時間内に到着できました。

写真をバシャバシャ撮りまくっていました。デジタル感ある空間に没入できるのは楽しいですね。光とか鏡とかがこれでもかというほど配置されています。

個人的には最後の2枚の空間が好きです。

京都でチームラボがなんかやってるといつもこのタマゴが置いてあるイメージがあります。

1階は見て没入して楽しむ感じでしたが、2階は子供たちが遊んだりとか、カップルとか友人複数人向きな感じだったかなと思います。

技術好き人間としては裏でどうやって制御してるのかとか、プロジェクターの使い方とかが気になったりしました。物体動かしてそこにマッピングしてる光移動させたりとかしてるのに何使ってんだろう。

なんだかんだ2時間いかないくらいはうろうろしていたと思います。満喫したので京都にこれで帰ってもいいですが、今期は北海道に行くことができずフラストレーションが溜まっているので、ここで北海道を作ろうと思います。

新宿に向かいました。ウェルシアではセイコーマート商品をいくらか扱ってくれているのですが、関東ではその扱っている商品数が多く、パスタやヨーグルト等を扱ってくれているので、新宿大ガード近くのところでそれらを購入しました。

ついでに駅弁の深川めしを買っておきました。

池袋にどさんこプラザがあるので、そこでジュース等を購入します。

ここの導線はかなり反省しているのですが、実はわざわざ新宿と池袋に寄る必要はなく、東京駅に戻ればよかったです。東京駅付近でもセコマパスタを扱っているウェルシアはあるし、どさんこプラザは有楽町にもあります。ここでもかなりの時間をロスしました。

なんだか名残惜しいので山手線を時計回りに半周して時間をかけて東京駅に戻ります。

タスクリスト

途中で思いついたことやったりとかもしましたが、ある程度タスクは遂行できたかな?とはいえ、定休日だったりとか、友人が体調崩してしまっていたりとかでどうしようもないものもありましたが...

羽田空港は単純に遠いので次回に持ち越しです。

また行きます。

おいしかったです。東京で買ってみたい駅弁はいくつかあるのですが、今度はチキン弁当を買ってみようと思います。

新幹線に乗る機会も少ないだろうと思ったので、シンカンセンスゴイカタイアイスを買ってみました。スプーン全く刺さりませんね。

あっという間に京都に帰ってきてしまいました。

楽しい週末でした。

ちなみにですが、この土日の前後は別件で体験型インターンをしています。その記事も近いうちに書こうと思います。

セキュリティ・キャンプフォーラム2022に登壇しました

セキュリティ・キャンプフォーラム2022に登壇してきました。

www.ipa.go.jp

本名と顔を開示 下ネタも呟くtwitterアカウントとも結びついてオワリです

ちなみに親にはバズったツイートのせいで既にバレてるのでそこは問題ないです

話したこと

セキュリティキャンプフォーラムは、一番上のリンクにある通りですが、修了生の立場でいえば今どんなことしてますとか交流したりするような場です。初めはそんなのもあるんだ〜くらいでしたが、主にリレーブログをするのに連絡し合ったりとか活動しているdiscordチャンネル上に、セキュリティキャンプの運営側の方から発表してみませんか?というお誘いの投稿がされ、現地で登壇したい発表者は交通費を出してくれるようだったので、せっかくなら東京に行きたい!ということで、現地で発表することにしました。旅行オタクは旅費が出るというのならば手段は選びません。なお、フォーラム自体はオンラインで、発表者は現地に行くことも可能という形式でした。

内容なんですが、僕のブログを読んでくれている方なら度々見ているかもしれない『例によってリレーブログの時間です!』で始めてる一連のリレーブログについての話をしてきました。ちなみに、僕の前の記事はこれになります。記事のメインの内容の下につけたこれまでの記事一覧のところに飛ぶようになっていると思います。

セキュリティキャンプのグループワークってどういう企画?ってところから始めて、リレーブログをするに至った経緯、リレーブログしていてよかったことと、簡単に記事の紹介をしました。

リレーブログって気づいたら更新が止まってしまうことがよくありがちなイメージなんですが、我々のグループはなんだかんだもう半年近くも続いており、記事の数も2022/3/14現在で24個もあります。正直自分もここまで続くことになるとは思っていませんでした...。

しかも、セキュリティキャンプでのグループワークの中で継続しているチームが我々だけっぽい(もちろん、グループワークをきっかけに個々としては活動を継続しているような方もいるとは思いますが)。

なんでこんなに続けられているのか、って考えられる要因としては、「前の人に次の人のテーマを指定して、それに従った内容の記事を書く」という縛りがちょうどいい感じの縛りになってるのかなあとは思います。皆さんそれなりに知識欲的なものもあるので、何かしら調べて記事を書き上げてくださいますし、僕もそうしています。知らないテーマが振られがちではありますが、高度なことを書くのをコンセプトにしてるわけでもないし、自分が元から興味があるような分野でないと高度な記事を書くのが難しいので、そこそこ気楽に書けるっていうのもあるのかもしれないです。

正直なところ、内容がないようってやつだったので、こんなもので発表して大丈夫だったかな、と思っていたのですが、雰囲気的に大丈夫そうでした。安心安心。

パネルディスカッション

修了生講演以外にも、パネルディスカッションの企画があって、それがなかなか面白かったです。

『プログラミングの教育者になるとしたら、何から教えるか』というテーマでした。パネリストの方々はさまざまなバックグラウンドをお持ち(競プロやってる人、エンジニアリングできる法律家、実際に高校で情報教えたりしてる院生、など)だったので、そういう考え方もあるんだ、とか、話聞いてて思いついたことをtwitterハッシュタグつけて呟いてたら拾っていただいたりとかして(会場にいるけどパソコン開いてツイートするスタイルだった)楽しかったですね。

ちなみに僕はプログラミングはものづくりのための道具だと思ってるので、初めの言語は簡単なもので、調べれば作りたいものが大抵作れるようなpythonがいいかなーと思っています。

と書いたこの一文にも色々突っ込みどころはあって、ググったり調べる方法を初めに教えるべきでは、とかpythonよりjavascriptとかperlの方がいいんじゃない、とか、バイナリエディタ初めに触らせようぜ、とか。小中高校生全員に教育することを考えると、ものづくりをしようと思わない人にプログラミングを教える意味とは何か?とか。こんな感じのことを議論していました。

交流

会場にいたセキュリティキャンプ修了生は十数名程度。久しぶりのオフラインでの交流ということもあってか、技術的な話から世間話まで色々と話ができました。僕は他の方に比べると技術的な知識(セキュリティキャンプは低レイヤーが強い人が多いが、僕は正直さっぱりわからん)がないので、そんなのもあるんだーとなっており面白かったです。

フォーラムの後に、別企画として交流会が完全オンライン開催でありました。LT大会の中で気になった話はdolphin attack(超音波領域の音でボイスコマンドを入力して実行させる)の話です。僕もdolphin attack使って家のAlexaで遊びたい。ちなみにその発表してたの一緒にリレーブログやってるとぅくしさんなんですが。現地会場に来てた人たちも交流会のLT大会はパソコンに向かって話を聞いていましたが、そっちで討論やってる時間は現地組は現地組で雑談していました。とぅくしさんはオンラインの方で忙しく、現地組の雑談に混ざる暇がなくて寂しかったようですが...

父親が気合い入れてオシャレな名刺を作ってくれたので配りました。QRコードのリンク先に飛ぶと、名刺にかざすとARでtwitterとかのリンクとかに飛べるような感じにはしてるので貰った方は遊んでみてください。といっても即席で作ったのでリンクが並んで浮いてるだけで面白くないと思いますが...

焼肉おいしかったです。大人数でやるのはアレなので、4人ずつぐらいに分けられて配慮はなされていました。

あと、twitterで9年前からつながってる人がお互い知ることなく(相手は最近は別垢でよく活動していたため)ここでエンカすることになって、これが一番の衝撃でした。


機会があればまた登壇してみたいし、こういう交流の機会があればまた行きたいなあと感じられる週末でした。

続きます。

potaxyz.hatenablog.jp

3回生後期の振り返り

書き忘れていたので今更だが、雛形だけ作成しておく。

これに基づいてそのうち書きたい。

セミナーとか特に、かなりしんどかったし...。

新潟・山形・宮城(6泊7日)

新潟できんモザ展をやるということだったので新潟スタートで仙台方面に抜ける感じで旅行しようと立案。全然東北は攻めれていなかったのでとても良い体験ができた。特に山形はいいところだと思った。(なお、今回も非常に長い記事となっており、画像とかのせいで重くなっていると思います)

3/1(火)

いつものようにギリギリに自宅を出発。関西空港駅に向かう。

経験上飛行機出発予定時刻の45分前に駅に到着できれば飛行機に搭乗することが可能だが、乗った電車がまさにそのちょうどギリギリの電車。

10:14に関西空港駅に到着。第二ターミナル連絡バスに乗る。前までこの時間帯は7分間隔で連絡バスが出てたはずなのだが、知らぬ間に10分間隔になっていた。時刻表を見る感じ9時台は55分発が最後で、それ以降が何分間隔、って書き方になっていて、9:55を基準に10分間隔でバスが出ているってことなんだと思う。

チェックイン期限3分前にターミナルに到着、チェックインを済ませる。

保安検査を通過し、飛行機に搭乗。いざ新潟へ。

新潟が近づくと上空からは雪化粧をした市街(長岡など)が見られた。

f:id:potaxyz:20220310174733j:plain
上空より

新潟空港に到着。

f:id:potaxyz:20220310174452j:plain
新潟空港

写真奥に見えている、新潟駅までの連絡バスに乗ってとりあえず新潟駅の方まで出る。

時刻は13時ごろ。お昼ご飯を食べたいところ。何も思いつかなかったので、とりあえず万代バスセンターのカレーを食べる

何も考えずに大盛りにしたらかなり量があって苦しんだ...

本当はホテルのチェックインをしたいがまだ時間があったので、近くにあったスタバで明日以降の旅程を立てることに。

別にスタバ入らなくてもいいんだけど、都道府県スタンプラリーがついてることを知ってしまったので、スタンプラリーを埋めなくてはならない!

f:id:potaxyz:20220310194751j:plain
スタバスタンプ埋め

15時ごろになったので、ホテルにチェックイン。アパなんだけど、できたばかりらしく安く宿泊できた。

荷物を置いて、今回の目的であったきんいろモザイクThank you!!展へ。新潟市マンガ・アニメ情報館自体は前回に引き続き2度目の訪問(前回→新潟に行った - ポタージュを垂れ流す。)。

京都から新潟は遠いが、きんいろモザイクと青春を共に生きてきたので見る以外の選択肢はなかったのです。

f:id:potaxyz:20220310175524j:plain
きんいろモザイクThank you!!展

制作の裏側の資料を見ることができて大満足な展覧会だった。

受注生産品を購入してしまい金が飛んだ。

出ると時刻は17時過ぎ。夕食にはまだ若干早いかな〜っていうのとお店を決めかねていたので古町商店街を散策。以前も来たことあるけど中心街は歩いていなかったんだなあとなった。思ったよりでかい。小雨が降っていたけれどアーケードだったので少し助かった。

新潟市マンガの家に寄って原悠衣先生のサインを見に行った。ついでにマンガコーナーで、そこでオススメされていたマンガを一冊読んだ。

f:id:potaxyz:20220310175747j:plain
サイン

時刻は19時ごろ。ここまで歩いた道でよさげなお店はあまりなかったので、調べて目星をつけたお店に行ってみたが臨時休業になっていた...仕方なく、無難だが前から目をつけていた回転寿司のお店へ。

佐渡産のエビが美味かった(何故それの写真を撮っていない?)。

明日は異常に早いので、適当に朝食を買い入れ、絶起したら困るので切符も購入しておく。新潟から坂町までの片道切符と、きらきら日本海パスを購入しておく。

f:id:potaxyz:20220310201737j:plain
新潟駅前にあるBE KOBEの亜種

ホテルに戻る。大浴場がついているらしいので入る。

ホテルについている大浴場としては良かったが、露天風呂といいつつ外気に触れられるだけで特に景色が見渡せるわけではなかったり、サウナが付属していなかった点はいただけなかった。

ちなみに、プールがついていたり、フィットネスルームがついていたりする。ホテル&リゾーツって言ってるだけあって設備はかなり良い。1階にはホテルにくっついて良い感じの飲食店とかコンビニも入っている。

さっさと寝ましょう、といいつつ日付をまたいでから就寝。

3/2(水)

4時起床。重い体を起こして準備をする。

4時45分ごろ?にホテルを出発。かなりギリギリ。駅へ走る。新潟駅万代口の下に着いたのが列車が出る3分前。ホームまで遠いのを完全に忘れていた。

発車20秒前くらいでギリギリ滑り込む。なんとか今日の旅程を遂行できそうだ。

新潟市街を過ぎるとあまり除雪されていないのかそこそこ雪景色を見ることになる。とはいえ日の出前真っ暗でほとんど何も見えないが。

途中村上駅で乗り換える。

新潟市周辺はかなり良い感じ?の電車だが、ここからは田舎にありがちなワンマンカーとなる(ただし最近新造されたやつで古い感じはない)。

鶴岡まで乗車。新潟から山形の海岸を望みながら北上。景色が良い。笹川流れとか鼠ヶ関とかいつかちゃんと行ってみたい。7時台になり鶴岡が近づいてくると地元の高校生も列車に乗ってくる。

鶴岡駅でバスに乗り換え、加茂水族館へ。開館より前に到着してしまうので、時間を潰す。近くに灯台があったのでそこでしばらく待機。と言っても、海からの風が強く、かなり寒い。

開館時刻になったのでいざ水族館へ。開館凸するやつなんていないだろう、と思っていたが、意外と家族連れか何かだと思われるものが2組程度おり、クラゲ水族館としての人気を窺わせる。

f:id:potaxyz:20220310180426j:plain
加茂水族館 右奥には荒埼灯台も見える

館内はあまり広くないので、なにかショーとかイベント的なものを見るわけではないなら1時間もあれば十分だろう。疫病や改修工事のおかげで、イベントは行われていないようだったが。一応クラゲの解説会?みたいなのが10時から〜みたいな感じになっていたが、時間もないので断念。

半分くらいは普通の水族館(?)のような感じだが、半分くらいはクラゲが展示されている。色々なクラゲを見ることができ、かなり面白い。

f:id:potaxyz:20220310180218j:plain
シロクラゲ

発光していた。

f:id:potaxyz:20220310180248j:plain
オワンクラゲ

どうでもいいが、放射線測定器の名前がアカクラゲだったな、と思った(居たけど写真なし)。

バスの本数も多くないので、10:15に出るバスに乗って鶴岡駅周辺まで戻ることにする。鶴岡市役所前で下車。

バスを降りる時に足を引き摺るような感覚に襲われたので、なんだと思ったら靴底が剥がれていた。このタイミングでなるのはかなり困った...

どうやらコンビニで瞬間接着剤が買える場合もあるらしいということで、雪残る道を足を引き摺りつつ一番近かったコンビニへ(10分近く歩行することになった)。

f:id:potaxyz:20220310195051j:plain
剥がれる靴底

完全に足攣った人の歩き方をして入店し、アロンアルファを購入。外で一生懸命くっつける。お陰様で左手はベタベタである。

www.amazon.co.jp

なんとかくっついたようなので、近くの鶴岡公園を歩いてみる。雪が多く歩きづらいが、ちゃんと接着されているようだ。

コンビニにアロンアルファが売っていて、それで靴底剥がれてもなんとかできるという知見はけっこうデカいと思う。

f:id:potaxyz:20220310180918j:plain
公園内にある荘内神社

神主さん?に春が来ましたねえ〜と挨拶された。

市街のどこか施設に行ってもいいが、あまり気も進まず、適当に街を散策していた。

f:id:potaxyz:20220310181208j:plain
大寶館
こんな感じの洋風の建築が点在している。

お昼も終わろうとしており、良さそうなお店も見つからなかったので、アロンアルファを購入したコンビニでおにぎりを購入。目的のバス停の前で昼食を済ませる。それにしても人気の少ないシャッター街である(車は通るとはいえ...)。

バスに乗り羽黒山方面へ。雪山道を路線バスが登って行き、終点の羽黒山頂に到着。降りたのは僕1人だった。

鳥居がすぐ見えるだろうと思っていたが、雪が積もりすぎていたせいか見えなかった。歩くべき方向がわからなかったがおそらくこっちだろうという方向に向かうと、出羽三山神社の鳥居が見えた。

f:id:potaxyz:20220310181324j:plain
出羽三山神社 鳥居

冬季は雪に閉ざされるため外から参拝することはできず、建物内からの参拝となる。祈祷受付所とか看板がついてて(祈祷するわけじゃないけど...)となるので若干躊躇するが、入ればよさそう。

f:id:potaxyz:20220310181440j:plain
雪がすごい

建物入って右に行くと廃仏毀釈で捨てられてしまっていた仏像などをがんばって集めたコレクションのある部屋などが見れる。メインの三神合祭殿は左。建物内にもかかわらず手水舎がありちょっと面白い。一番奥に出羽三山の神が祀ってあり、ここで参拝すれば三山すべてに参ったことになるという(それでいいのか...)。これまで色々見てきた中でもかなりイイ感じだった。

バスで行く場合、効率よく同じバスで戻ろうとすると見れる時間が22分か32分だが、22分だと少し短そう。今回は32分で散策をした。

f:id:potaxyz:20220310181550j:plain
路線バス

先ほど登ってきた、今度は始発となったバスに再び乗り、羽黒随神門で下車。羽黒山五重塔を見に行く。無料貸出してるから長靴とスノーストック借りて行きなさいみたいな看板が立ってて少しビビり、あっち側から歩いてきたおばちゃんに、雪靴だけで行けそうですか?と聞いたが、若い男ならなんとかなるっしょと言われたのでそのまま歩いて行くことに。

随神門をくぐったすぐのところに、階段があったはずだが完全に雪に埋もれてしまっている下り坂がある。ここさえ越えればなんとかなった。当然滑る。

五重塔が見えた。時間帯も良かったのか、良い感じに日が当たり、かなり神々しい感じに。すごく美しかった。マジで何十分でも見ていられる。

f:id:potaxyz:20220310181744j:plain
羽黒山五重塔

来た道を戻る。途中で入り口の激坂で滑りまくって諦めるか迷っていたJD(?)2人組がいたので、坂ここだけだから頑張って〜と声をかける不審者となっていた。実際そこまでしても見て欲しいくらい素晴らしかった。

帰りのバスが来るまで、いでは文化記念館でパンフレットを読んだりして待っていた。五重塔でゆっくりしすぎて展示物を見れる時間は終了していた。

バスに乗車し、鶴岡駅に戻ってきた。本日の最終目的地である山形に到達するにあたって、別に急ぐ必要はなかったが、ここで特急課金して余目駅に移動しておく。

余目駅に到着。わざわざ特急に課金したのは温泉に入りたかったからである。

f:id:potaxyz:20220310182144j:plain
庄内町ギャラリー温泉 町湯

デザインのいい温泉。サウナもできた。黙浴との張り紙がされつつも喋ってる2人組がいたが、その2人から山形弁の会話を聞くことができた。

サッパリした〜、あっ、柚子酢ドリンクだ〜飲んじゃお〜、いま何時かな〜と時間を見ると、次の列車まで10分。どうやら温泉でのんびりしすぎたようだ。

走って余目駅に戻る。

ここから陸羽西線で新庄まで抜ける。

太陽も沈み切ってしまっており残念ながら景色は見れなかったが、これからトンネル工事かなにかでしばらく陸羽西線は運休になるので、この機会に乗れたのはよかったと思う。田舎特有のワンマンカー。

新庄駅で山形行きに乗り換える。きらきら日本海パスは陸羽西線の途中駅である古口までしか有効ではないので、車内で車掌さんに古口から山形までの乗車券を発行してもらう。

なお、今回きらきら日本海パスを使用したが、JRに加えてバスも利用でき、鶴岡でのバス利用だけで元が取れているので非常にお得な切符だった。

www.jreast.co.jp

山形駅に到着。そのままホテルに向かってもいいが、駅から直結している霞城セントラルに展望室があるようなので行ってみた。山形市街が一望できた。てか、もしかして山形市ってけっこうデカい?

f:id:potaxyz:20220310182415j:plain
夜景 室内が映り込んでいる

展望室には今日卒業式だったのかもしれない高校生らしきグループが3組と、そして僕という感じでアウェー感があった。

ホテルにチェックイン。1日中動き回って疲れたのでそのへんのコンビニでカップ麺を購入。それだけ食べて22時ごろには就寝。

3/3(木)

おはようございます。泥のように眠っていたが9時起床。

とりあえずチェックアウト。市内どう動くか決めていなかったが、スタバのスタンプを埋めないといけないので駅のスタバに入って旅程を立てる。

目処が立ったので動く。

どうやら山形は辛味噌ラーメンが有名らしい。よく名前が出る?ところは車とか借りないとキツそう?ということで、街中のお店で食べることに。

美味しかった。

博物館にきた。なんと入館料70円で激安だったので中に入る。学校教育の変遷が細かく解説されている。かなり面白かった。学ランとか昔と全く変わっていないなあ〜とか思った。

時間的に中を見る時間はなかったが、文翔館へ。卒業式シーズンだからか、花束を持って卒業生を待ち構える在校生?みたいな人がたくさんいた。横の湯殿山神社も訪問した。

f:id:potaxyz:20220310182918j:plain
文翔館(山形県旧県庁舎及び県会議事堂)を外から

f:id:potaxyz:20220310183121j:plain
湯殿山神社

最後に山形城跡もとい霞城公園へ。発掘調査と復原工事中で、しかも本丸のところは冬季閉鎖中という...

f:id:potaxyz:20220310183221j:plain
霞城公園 橋とその先には入れない...

山形駅に戻り、いざ蔵王温泉へ。バスで1000円。

山を登っていき、蔵王温泉バスターミナルに到着。

旅館にチェックイン。そこの女将さんの話で蔵王樹氷の存在を知った。明日の予定に樹氷ウォッチングが追加された。

ちなみに、gotoキャンペーンがない間は現金特価で4000円!みたいなキャンペーンで泊まったが、普通に泊まろうとするとそこそこするお宿である。

とりあえず旅館についてる温泉に入ってちょっとのんびり。

チェックインのときに隣にバルがあるよ〜って教えてもらったところがオシャレだったので行ってみることに。ジュースだけ飲むつもりだったがご飯も食べちゃうかということで夕食の時間に。

ごちそうさま。共同浴場巡りへ。

上湯、下湯、河原湯共同浴場の順に巡った。上湯は4人くらいいてなんだか混んでいた。が、下湯、河原湯は誰も人がおらず、独り占めできた。

強酸性pH1.7程度のお湯。舐めると酸っぱい。入った後、体から湯気が出てる気がしたけど気のせいだろうか?でもかなり体の芯から温まった。

個人的には河原湯が好きかな〜 他の場所と違って下がすのこみたいになってて、そこからお湯が抜けていくような感じになっていた。

最後に酢川温泉神社に行ってみよう、と思ったが参道にあまりに雪が積もりすぎていて断念。またいつか行きましょう。

旅館に戻る。お部屋の中でゆっくり...とはいかずスライドを作りつつ、明日の予定を立てる。

ネットがめっちゃ速かった。ワーケーションロングステイするのはありかもね。

おやすみなさい。

3/4(金)

9時に起床。本当はもう少し早く起きてどこか温泉に入るつもりだったが...

チェックアウトを済ませ、樹氷を見に行くことに。

ロープウェイで蔵王山頂まで。往復3000円はけっこう高いがそんなものか...。

頂上に到着。何も見えない...風もめちゃくちゃ強いし寒い...(-10℃程度らしい)

とりあえず玉こんにゃく食べてのんびりするか...

帰る前にもう一回展望台に行ってみるとちょうど晴れてくれた。樹氷スゲー

f:id:potaxyz:20220310184230j:plain
樹氷高原

ロープウェイで戻る。ロープウェイからも綺麗な樹氷をみることができた。

時間を気にしていなかったが、降りてきたらけっこうギリギリな時間になっていた。稲花餅を買い込み、バスに乗る。

昼食の時間が取れなかったので、蔵王温泉に唯一存在するコンビニ(ローソン)で、朝食のつもりで買っておいていたあんパンを口に入れる。

山形駅に戻ってきた。山頂はかなり寒かったが、降りてくると暖かい。

お土産を選びつつ、スマホから情報処理学会のzoomに接続して友人の発表を見た。僕も準同型暗号アプリケーション作りたい。

改札に入り、仙山線に乗って仙台方面へ。

山寺駅で下車。

これの手前に日枝神社の参道の石段があるが、そっちを登っても結局登山道?と合流することになる。

f:id:potaxyz:20220310185543j:plain
山寺日枝神社

寺なのに神社なんですね

立石寺へ。

後の下山のツイートの画像にあるとこが入山の受付になっており、そこで制限時間を伝えられた。

ひたすら石段を登る。

五大堂に到着。水墨画の世界とか言われているようだが、実際そんな感じで、非常に綺麗だった。

f:id:potaxyz:20220310184724j:plain
五大堂からの眺望

奥之院に到達。雪に埋まっていた。

f:id:potaxyz:20220310184828j:plain
奥之院

少し横道にそれて三重小塔をみる。洞穴の中に塔があるというのは不思議な感じだ。

f:id:potaxyz:20220310184958j:plain
三重小塔

もう一度五大堂行ってもよかったけど、まあ降りるか、ということで下山。

猿ゥ!

f:id:potaxyz:20220310185349j:plain

駅から往復所要時間130分とか書いてあったけど一般人向けなのだろう。異常旅行者であれば90分程度で完了でき、そこまでかからないと思う。が、どうせ電車は1時間に1本しか来ないので急ぐ必要もない。

雪靴はちゃんと履きましょう。

山寺駅みどりの窓口仙台まるごとパスを購入。今日明日はこれだけでJRも地下鉄も、そして一部バスも使えて動き回れる。

電車に乗り仙台駅に到着。

ホテルにチェックインを済ませ、荷物を置いて牛タンの店へ。

めちゃウマで幸せになった。また来たいし、他の牛タンのお店とも比べてみたいと思った。ちなみに、サカナクションの山口一郎のサインが置いてあったりとかして、芸能人にも人気のようだった。

地下鉄南北線東西線(東側)の乗り潰しを敢行。

ホテルに戻る。寝る前に蔵王で買っていた稲花餅を食べておこう。

おやすみなさい。

3/5(土)

おはようございます。10時にチェックアウト。

次の電車まで時間があったので、地下鉄東西線の残り西側の乗り潰しをした。ら、逆に時間がなくなってしまった。

ずんだシェイクを購入。実は大阪梅田でも購入できる。

あおば通駅から松島海岸へ。

導線を全く考えていなかったので駅でパンフレットかなんかもらう気だったが、置いてなかった(僕が見つけられなかっただけ?事前情報としては、島がいくつかあって、遊覧船があって、お寺があって、カキが美味しい)。

駅を出ると遊覧船のチケット売り場があるが、ネット予約をすると安くなった気がしたのでスルーし、とりあえず瑞巌寺へ。

中の金箔の屏風絵が良かった。一応宝物館にも入ったが、歴史に詳しくなさすぎて流し見で終わってしまった。

お隣の円通院へ。こういう庭園が楽しいところは好きです。ここも小堀遠州作庭なのか...

こうやって散策している間にスマホで遊覧船乗船券を予約。遊覧船乗船券売り場へ。ネット予約のおかげで1000円のところ900円で購入できた(仁王丸就航記念でそもそも1500円が1000円になってるのにさらに割引されるとは...)。

お昼ご飯に焼き牡蠣を食べる。当然美味しい。

遊覧船に乗る。いっぱい島があるんだなあ。

f:id:potaxyz:20220310191649j:plain
しまのひとつ

戻ってきた。

松島博物館に立ち寄った。この日は松島海岸駅のバリアフリー化記念で入場無料になっていた。

展示物を見てそうなんだ〜と薄い感想を抱きつつ、目的の雄島を散策。

f:id:potaxyz:20220310191922j:plain
雄島

道の途中で東日本大震災津波がこの高さまで来ましたみたいなステッカーを見たりとか、津波を意識したような看板が多く見かけられたのも、この地方ならではだなと思ったりした。

福浦島へ。こちらも松島海岸駅のバリアフリー化記念で橋の通行料が無料になっていた。

島内を散策。

松島海岸駅へ戻り、仙台方面に帰る。

時間調整も兼ねて東北大学の見学と、ついでに仙台第二高等学校(大学の友人の出身校)も見学。

仙台駅に戻る。この日は東北大の友人に泊めてもらうことになっており、夕食も一緒に食べようとのことで、待ち合わせ。久しぶりに会ったが変わっていなかった。

せり鍋が仙台名物らしい、ということで、何件か回るがどこも満席...しょうがないので(?)キャッチに頼る。あんまりキャッチにいいイメージがないが、悪くない値段のお店を教えてもらった。その友人によると、仙台のキャッチは優しい人が多いらしく、あの人もお世話になったし、その人もよく見る、とか言っていた。

鴨肉、せり根が美味しい。めっちゃ歓迎していただいて、毎回友人がよそってくれた。

量としては足りない(酒を入れているわけではない)ので、ラーメンを食べることに。友人オススメのお店へ。

しゃれおつ。ビールも提供しているらしい。

友人の車で仙台城址へ。友人曰く、昼行ってもなんもないから、夜来た方がいいとのこと。

友人宅へ。山形土産をあげたり、シャワー浴びたり、喋ったりして就寝。

3/6(日)

7時ごろ起床。友人はヨット部で、今日も朝から部活とのこと(昨日は海でヨットの調整をしていたらしい、今日は8時からオンラインでなんかやるとか)。準備を済ませ、お礼をして外出。お世話になりました。

大崎八幡宮へ。仙台は至る所で伊達政宗の名前を見かけるので、その影響を垣間見ることができるなあと感じた。

歩いていたら二郎系の店があって、並んでるなあって横目にみつつ、三居沢発電所へ。日本最初の水力発電所。隣に記念館みたいなのがあったが、時間の都合上みることはできなかった。

めっちゃ風強くて寒かったので退散。

朝昼兼用で何か食べるか、ってことでさっきの並んでた二郎の店に行くことにした。どうやら一昨日開店らしい。

立席スタイルの店は初めてだった。ごちそうさまでした。

店を後にし、フェリーまでのバスの時間を調べたらかなりギリギリだった。

大崎八幡宮前からバスに乗り、あおば通駅前へ。

ここで宮城県のスタバスタンプラリーを押せていなかったので、バスの中でスマホで注文しておいたコーヒーを受け取りに行く。乗り換え時間は5分もなかったが、なんとかなった。

フェリーターミナル行きのバスに乗る。バス停の名前は仙台駅前だが、JRのあおば通駅前からが出ている。そもそも地下鉄の仙台駅はJRのあおば通駅の方が近いのだが。

フェリーターミナルに到着。

チケットを受け取る。

いざ乗船、出航。

福島第一原発を視認

昼寝をしていたら、夕食バイキングの時間に。

あるやつ全部載せようとするから汚くなってしまったが...ごちそうさま。お風呂に入る。

TENET見れて良かった。

シアタールーム的なところを出ると23:30になっていた。おやすみ。

3/7(月)

おはよう。9時くらいまで寝てたから日の出は見られなかった。朝食もバイキングにしてもよかったが、少し節約しようと思い、レストランではない売店でモーニングセットを注文。

下船の準備で荷物をまとめる。

名古屋港が近づいてきた。名港トリトンをくぐる。

名古屋フェリーターミナルに到着。帰ってきちゃったなあ。

特に理由もなく平針ミスドに寄る。

京都に帰りましょう。帰りの途中でニット帽なくして凹んだ。

おしまい。

行程表(だいたい)

3/1(火)

3/2(水)

3/3(木)

3/4(金)

3/5(土)

  • JR仙石線 普通 石巻行き あおば通 11:20 - 12:00 松島海岸
  • 松島観光
    • 瑞巌寺 12:20頃
    • 円通院 12:50頃
    • 昼食 13:20頃
    • 五大堂 13:45頃
    • 松島観光遊覧船仁王丸 14:00 - 14:50
    • 観瀾亭・松島博物館 15:00頃
    • 雄島 15:30頃
    • 福浦島 16:00頃から約50分
  • JR仙石線 普通 あおば通行き 松島海岸 17:12 - 17:53 あおば通
  • 地下鉄で仙台第二高等学校、東北大学川内キャンパスの訪問
  • 仙台駅 19:00頃
  • せり鍋、ラーメン(だし廊-Nibo-)
  • 仙台城址 22:10頃

3/6(日)

3/7(月)