2025年を振り返る

大晦日なので振り返ってみる。

あらためて2025年始にたてた目標を思い返すと、こんな感じで2025年を締め括った。

  • 2024年の転職を機に始めた勉強会参加継続(月5回ペース)
    • 👍できた
  • これまでしてこなかった勉強会への登壇(理想は年5本)
    • 👍4回登壇、1本プロポーザル補欠採用
  • アプリリリース(理想は3つ)
    • 😭せず
  • ビッグバンドへの参加
    • 👍できた
  • 楽器毎日練習、毎週どこかしらでセッション参加
    • 😐後半は練習もセッションもサボりがち

2024年10月に現職転職するまでは、開発コミュニティに顔出すことはほぼなく、登壇なんて恐ろしくてできない、と思っていたところから、try! Swift スタッフ参加をきっかけに人とのつながりが増えて、今年後半から登壇にもチャレンジできた。

新技術である Foundation Models や visionOS を使った個人開発がはかどったのが良かった。登壇駆動開発とはよく言うが、まずは登壇にエントリーしてしまって、そこに向けて平日夜や休日も返上で学習や開発にいそしむのは案外苦ではなかった。また WWDC 後は Apple が自社主催でワークショップを開催したことも、学びに弾みがついてありがたかった。

こうした技術キャッチアップが手元のプロトタイプに閉じてしまったのは、登壇ありきだとまずはプレゼンとして形にすることが、プロダクトとしてリリースすることよりも優先度高くなったためで、実際にリリースは二の次に考えていた。が、visionOS TC での主催服部さんの言葉が、アイデアをかたちにしてデリバリすることにも意義があると捉えなおすきっかけになった。来年こそは作りっぱなしでなく他者に体験してもらえるかたちに落とし込むまでもっていきたい。

他にも、今年は仕事では Android 開発にも手を広げられたのが良かった。あと想定していなかったが、ブログ更新が習慣化して年間150本に迫る勢いで投稿できた点も自分を褒めたい。


音楽趣味は、昨年足繁く通っていた高田馬場イントロも体調不良をきっかけに足が遠のいてしまった。が、その分ビッグバンドに加入してしたり、よそのセッションには通い続けていたので、演奏機会自体は逆に増えていたかも。

さらに、ビッグバンドでは秋頃にはお褒めいただくことが増えたり、チャージありのステージで演奏する機会をいただいたり、どちらもふんわり目標にしていたことが叶えられたので。客観的にも上達の兆しを感じられた1年だった。


数年前から、こんな感じで年始に目標立てて、年末に振り返る、みたいなことをしているが、中々良い感じに回っている実感もあるので、2026年も何かしら掲げてみたい。ここまでの話とまったく関係ないが、ずっと行ってみたいと夢見ている国に来年こそは海外旅行したいなーと思っている。

ブログを習慣化するコツ

今年2025年は、記事数が150に迫るほどブログ更新できたので、そのコツについて書いてみる。

そもそも、筆者のブログをつける目的は、インプットーアウトプットのサイクルを回すためで、それ以外の承認欲求だとかマネタイズだとかはない。むしろ誰にも読まれずひっそりと書いていたいとすら思う。

誰にも読まれたくないのなら、外部公開しなくてよくない?と思われるかもしれないが、誰かに読まれるからこそ一定の品質と正確性を担保する原動力にもなるし、そのレベルで積み重ねた結果が、個人的な備忘録的価値だけでなく、他者に向けた取り組みの可視化としても、結果的に自分に返ってくると思っている。

昔つけてた Medium の記事 も今見返すと面白いテーマに取り組んでいたと思えたりする。

こうした期待値のうえでブログを継続するには、書き出し時の障壁や心理負荷をいかに軽減できるか、だと思っている。その変数になりうる要素をいくつかピックアップする。

投稿媒体

技術ブログの媒体には、Qiita や Zenn をはじめとした専用のプラットフォームや、技術ブログとして人気の高いはてなブログがある。

こうしたプラットフォームには、すべてでないにしろ新着エントリなどプラットフォーム側の機能で記事をキュレーションすることがあり、筆者はこれが苦手だ。あくまで自分のペースで記事を投稿したり編集したり削除したりしたい。そこで WordPress を使っている。

上述のサービスは書き出しのセットアップが不要で、技術ブログに不可欠なコードブロックもブログエディタに採用しているからとても使い勝手が良い。WordPress にも、デフォルトエディタ Gutenburg にコードブロック機能があったと思うし、プラグインを使えばより高度なカスタマイズが可能なので、今の所困っていない。

Highlighting Code Block の使い方 | LOOS,Inc.

文体

文体には、<ですます、である>といった文末表現や、<私、僕、筆者>に挙げられる主語の選び方が含まれると思うが、地味にこれらも自分にとってしっくりくるものを選ぶと、書き出しがスムーズでよいと思う。

筆者は上述の通り、他者に意識的に何かを伝えるというテイで書いていないので、敬体でなく常体を使っているし、僕、私といった人格をなるべく排除したいから「筆者」という仰々しい主語を選んでいる。

こうした選択は過去いくつもブログを作っては消し、を繰り返す中で収斂していったもので、学生時代につけていたはじめてのブログは全然スタイルが違う。

フォーマット

ある程度固定しておけば、書き出し時に悩まなくてよいのでおすすめ。このブログの場合、勉強会参加時のレポート(聴講メモ)や WWDC のセッション要約はほぼフォーマット固定としてるので、テンプレをコピペ改変して書けるようにしている。

勉強会といえば、参加時にフォーマットに沿ってサマリを書き綴って、帰宅してほぼほぼそのまま投稿できるようにもしているので、さらに手軽。

シリーズ化

フォーマットに似ているが、たとえばある題材を扱う時、シリーズ化して複数回に分けて投稿すると、日々続けるモチベーションにもなって良かった。最近でいえば Shader Graph についてノードごとに調べたりしていた。

インプット計画

WWDC のセッションもそうだが、シリーズ化することで明日の題材が自ずと定まるので習慣化もしやすい。そこでシリーズ化した時点で、何をどのペースでインプットするかをリスト化して書き出しておくことで、次やることに悩まなくなるので、より習慣化しやすくなると思う。

例えば、WWDC の観たいリストをこのように書き出して、毎朝ひとつずつ消化するようにしていた。

おまけ:可視化

心理負荷とは関係しないが、このブログの右ペイン(モバイルだと最下)に、月毎の投稿数やカレンダーが表示されていると思うが、これによって投稿ペースを可視化できてモチベートできる効果があったので、習慣化したい場合はおすすめ。


で、ここまでしてブログへのアウトプットを習慣化してみてどうだったかというと、いくつかメリットがあったのでやって良かったと思う。

  • ブログ投稿を軸にしたインプットーアウトプットが習慣化した
  • 学習の過程やとりくみが可視化されることで自己肯定感が向上した
  • 勉強会などで知り合った方にブログを読んでいただけ、会話のタネになった

特に3つ目は、読んでくださっている方の存在がはげみになるのだと気が付けて良かった。会話の中で、ブログで表にしている技術以外のテーマも認知いただけただけて、書いた甲斐があった。

が、こうしたアウトプット・ドリブンな方法はネガティブな側面もあった。

  • アウトプット偏重になるとインプットに時間が割けなくなる

ブログひとつサクっと書ける方ならよいが、筆者は物書きが苦手で、ひとつひとつにかなり時間を割いている(だからこそ上述のような省力が必要)。投稿数を追うと、自分で手を動かす試行錯誤がおろそかになってしまい、完全に本末転倒だった。

というわけで、個々人にあったちょうどよい投稿ペースも見定めた方が良さそう。筆者の場合は週2-3くらいだろうか。


いまのところプラスが大きいので、来年もほどほどに継続していきたい。

Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Math編)

続き:
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(2D/3D Procedural/Texture 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Adjustment 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Application 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Compositing 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Data 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Geometric 編)

Math は演算用のノードで、名前を見たら分かるものが多い。その中でも個人的にぱっと見わからないものや興味をそそられたものだけピックアップしてみる。線形代数は概念は知っていても英単語になると分からないことがわかった。

  • Atan2
  • Clamp
    • In が Low-Hight の範囲を超える場合、最小値 or 最大値それぞれの側に値を丸めて、範囲を超えないようにする
    • 概念は Adjustment 編 にも登場した
  • Magnitude
    • ベクトル長さ
  • Dot Product / Cross Product
    • 2ベクトルの内積/外積
  • Transform XXX
    • スペース間の値の射影
  • Transpose
    • 転置行列
  • Determinant
    • 行列式
  • Place 2D
    • UVテクスチャ座標系の変換、テクスチャにアフィン変換掛けたい場合に使うっぽい?(例示あり)
  • Safe Power
    • 普通の Power は X の累乗で結果の符号は乗数が偶数か奇数かによって左右されるが、Safe Power は X の符号が必ず反映される
    • Safepow(X,Y) = sign(x) * pow(abs(x), y)
  • Hyperbolic XXX
    • 双曲線関数
    • Hyperbolic Tan (tanh) は、0を中心としたsigmoid関数のようなかたちで、イージングなどに利用
    • Inverse Hyperbolic Tan は 逆双曲線関数

ここまででグループごとに ShaderNode について調べてきたが、どんな役割のノードが存在し、どんな知識が足りていないのか、おおまかにイメージが掴めたので、このシリーズはいったん終わりにする。

Apple Watch Hermès Faubourg Party クリスマスバージョン

Hermès 版の Apple Watch にはこの秋に追加された文字盤 Faubourg Party があるのだが、不意に見慣れない文字盤が表示され、クリスマス・イブであることを思い出した。

Apple Watch の画面録画はアクセシビリティ機能のひとつ「Apple Watchミラーリング」で可能。

スヌーピーにもクリスマス限定の文字盤が表示される。


Hermès Faubourg Party は、誕生日も祝ってくれた。

粋な遊び心がアップルらしい、こうした限定文字盤は登場が不意すぎて見逃してしまいそうになるし、気付けたとしても二度目は中々お目にかかれない。ただし次の法則がありそうで、繰り返し表示を再現することが可能。

  • 対象日の文字盤初表示時に現れる
    • ただし、天気などに応じた文字盤が優先されることもある
    • その時は、一度画面をオフにして(待つか、手で覆う)、画面を再点灯すれば良い
  • 文字盤を2、3度別のものに切り替えることで、対象文字盤の状態がリセットされる
    • 一度表示し終えても、2、3隣の文字盤に切り替えて、再び戻すと、上述の条件に従って再出現させることが可能

Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Geometric 編)

続き:
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(2D/3D Procedural/Texture 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Adjustment 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Application 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Compositing 編)
Reality Composer Pro の Share Graph で使えるノードを眺めてみる(Data 編)

Geometric Shader Graph group は、説明文をそのままに理解すると、GPU がグラフを適用する際に現在処理しているデータ値を取得するノード。座標や法線ベクトル、接線などが取得可能。Reflect や Refract ノードは、現在の値を元にベクトルを修正することもできる、とのこと。

つまり、モデル表面の各点ごとに取得した幾何属性から、何を描画するのか(色など)を決定できそう。


  • Normal:法線ベクトル
  • Tangent:接線ベクトル
  • Bitangent:Normal × Tangent (Normal, Tangent それぞれに直行するベクトル)

Bitangent のイメージが掴めずに調べてみると、法線はモデル表面に対して一意に決まることが分かりやすいが、Tangent は UV の U 方向、Bitangent は UV の V 方向らしい。(バイタンジェント、かと思ったら ビタンジェント と読むっぽい)

Normal、Tangent、Bitangent から得られるTBN行列を用いて、ノーマルマップをワールド空間に変換する、らしい。

UV座標系 | CG・映像の専門情報サイト | CGWORLD.jp
📐TBN行列の作り方|タンジェント空間と法線マップをGLSLで理解する|批評テレビ/文学フリマ東京42出展

そして、そのままだと平すぎるポリゴンに、詳細なでこぼこ(凹凸や傷など)を与えるのがノーマルマップ、ノーマルマップはあくまで接線空間のローカル座標なので、これをワールド座標に変換するために使うと。なんとなくイメージできた。

で、Texture Coordinates は、テクスチャのUV座標をそのまま返す。モデル表面の各点が、テクスチャ画像のどの座標に対応するかを知るためのノード。


Geometry Color は、モデルのジオメトリに埋め込まれた頂点カラーを取得するもの(マテリアル色ではない)。

Geometry Property は、ジオメトリに定義されたカスタム属性を読み取るもの。
Data グループにあった Primvar Reader に似ている気がした。

ChatGPT によると、

結論から言うと、この 2 つは 「同じものを見ているが、立ち位置と責務が違う」 です。

Primvar Reader は「primvar を読むための専用ノード」
Geometric Property は「ジオメトリ属性を“汎用的に”引くためのノード」

両方とも「ジオメトリにぶら下がったデータ」を読む点は同じですが、用途・安全性・設計思想が違います。

Primvar Reader は、読む対象が明確に USD の primvar に限定されるのに対して、Geometry Property はこれに Geomprop や Custom property を含むカスタム属性全般を読み取れる、という違いがあるらしい。


Reflect, Refract (RealityKit) は、処理中の天の法線ベクトルに対して、物理的法則に基づいた変換を加えるもの。

  • Reflect:反射方向を算出。鏡や金属、水面の表現に使用
  • Refract:屈折方向を算出。Eta が屈折率 (屈折率の比)。ガラスや水面など透明な物質の表現に使用

屈折と聞いて、ばんじゅん🍓さんのこのプレゼンを思い出した。Refract はここでは使っていなさそう?ちゃんと見てみる。

Analyzing the runtime performance of your Foundation Models app を読んだ

Foundation Models に関する新たなドキュメントが公開されたので読んだ。

Analyzing the runtime performance of your Foundation Models app | Apple Developer Documentation

Instruments によるパフォーマンス分析によって、Foundation Models を活用したアプリのレスポンシブさや、消費電力への影響について知る手がかりを得る手法の紹介。Instruments を用いて、どこに時間がかかり、トークンを消費しているかを正確に把握し、パフォーマンス改善のボトルネックを特定できる

  • システムがいつモデルアセットを読み込んでいるか
  • モデルからレスポンスを受け取り始めるまでどれだけの時間がかかっているか
  • 個々のセッションにおけるトークンの使用状況
  • アプリの提供するカスタムツールをどこで呼び出しているか

Instruments のスクリーンショット付きで、プロファイリングの操作方法が説明されている。


トークン使用について

  • モデルはプロンプトの入力テキスト文を、トークンと呼ばれる小さなセグメントに分割する(それぞれが単語や、単語の一部)
  • トークン数は、インストラクションやプロンプト、セッションインスタンスによるアウトプットを含む
  • コンテクストウィンドウを超過した場合、exceededContextWindowSize(_:) エラーが投げられる
  • アウトプットトークンが多いほど、生成時間がかかる
  • タスク種別によっても生成時間が変動する
    • 文書要約は新しい記事の生成よりも短く済む
  • テキストに文字を含むことでより多くのトークンに分割される(e.g. 電話番号)
  • トークン数に伴って、初期処理の時間や、メモリ使用量が増大する
    • 1000トークンを超えると、古いデバイスでは顕著に生成速度が低下する
    • Foundation Models instrument で トークン数を比較する

改善手法

  • モデルローディングを事前ロードする
    • モデル呼び出しの必要性がわかり次第 prewarm(promptPrefix:) を呼び出してモデルを事前ロードする(response メソッドの呼び出し1秒前には)
    • ユーザーがリクエストしそうなことを prompt prefix で与えることで、類似のリクエストにモデルが備えられるようになり、最初のトークンまでの時間を短縮できる
  • トークン消費を抑える
    • streamResponse(generating:includeSchemaInPrompt:options:prompt:)includeSchemaInPrompt パラメタで Generable の情報をリクエスト処理前にプロンプトに含めるかを指定可能
      • 含めることでアウトプット品質を高められるが、より多くのトークンが必要になる
      • すでに同様のリクエストを行ったか、system instructions で例を提供している場合は、後続のリクエストで除外できる
      • ネストされた Generable 型も多くのコンテクストを要するので、必要性を判断するべき
  • 最適化を検証する
    • 変更後は毎度アプリのプロファイリングを実施し、効果を検証する
      • アセット読み込みがリクエスト生成の前に行われていること
      • 最初のトークンがセッション開始直後に出現していること
      • Inference detail エリアが少ないトークン数を示していること
      • セッション全体やツールコーリングのレスポンス時間がユーザー体験を満たしていること

KOKOGOL Maclock が届いた

インスタか何かで見つけて、11月初旬(1ヶ月以上前)に注文した KOKOGOL の Maclock。初代 Macintosh を模した LED 時計なのだが、そのプロモーションビデオを見るとなかなか作り込みが細かく、熱いファン精神を感じ取ったので迷わず購入したのだった。

Maclock – Retro 1984 Mac Pixel Art Clock | Nostalgic Desktop Decor – KOKOGOL

それが、注文から2、3週間経ち忘れた頃に発送され、そこからさらに3週間以上かけて、先日ようやく自宅に到着した。で、届いた外箱がこれ。

ボコボコ過ぎるし手に取ると軽すぎるしで、瞬時にパチモン摑まされたかと焦ったが、開封してみるときちんと期待通りのものが入っていた。作りとしては安価な LED 時計で、中学校の技術の授業で半田付けの練習に作ったアレと機能的にはほぼ同じなので、その軽さは納得。プラスチックの手触りや、平面に置いた時のゴム足の質感が結構良い。

デコれるステッカー付き。6色アップルロゴをはじめ、Happy Mac、台紙を飾る Susan Kare デザインのアイコン、Chicago フォント(セリフ体は Apple Garamond だろうか、、?)と、目に映るすべてが全方位にアウトでしかないのだが、さすが Made in P.R.C.。その文字が一周回って誇らく映る。


自宅の Macintosh SE とツーショット。これを買う最大のきっかけは、顎下に突き出ている輝度調整用のダイアルが、Maclock でも同じ仕様で動くことだった。このギミックは、往年のアップルファンでないと思い至れないのではないだろうか?しかも、このダイアルは日付時刻合わせにも使えるので機能性としてもとてもスマート。

ちなみに、バックライトのON/OFFは、頭頂部の取手がタッチパネルになっていて、タップしてトグル切り替えすることができる。電源はバッテリー内蔵で、USB-C ポート経由で充電すればワイヤレスに使用可能。

意匠がアウトであることは疑いの余地もないが、そこに目を瞑ればオブジェとしての質感は申し分ない。また写真の画面には Happy Mac しか写せてないが、商品ページや SNS を調べればわかる通り、普通に LED バックライト付き時計やアラームとしても機能するので実用性も十分ある。

ご注意:
しばらく使ってみて、この Maclock 徐々に時刻がずれていくという発見があった(ビミョーに進みが遅いので、半月で数分ずれる)。なので時計としての信頼性が高くないことにご注意。最近やたらこの記事へのアクセスが高いので補足した。

Bambu Lab A1 mini を使ってみた

前回の続き。

箱から出してやることは、ハードウェアの組み立てと、ソフトウェアのセットアップ。使い始めるまでに40-50分程度見積もっておくと良さそう。

組み立ては説明書通り、付属のレンチでネジを締めたりパーツを取り付けたりするのだが、取り付けには若干難儀するので覚悟が必要。特に「ワイパー取り付け」ステップ②の、下からのネジ留めは難易度が高い。あらかじめ作業場をテーブルなど一定の高さに確保しておき、下からワイパーを覗き込めるよう位置をずらすなどした方が良い。あとはネジ締めの固さが不安になるが、ひと思いに締め込めばOK。

電源投入後のセットアップも直感的。言語に日本語が選択可能。パスワード入力はキーボードが小さいので誤入力は避けられない(キーの気持ち上を狙うと良い)。

キャリブレーションは放っておくとどんどん進行する。ノズルが周波数を変えながら振動するのを眺めていると、いかにも精密機械という感じでお得感が味わえる。

セットアップ完了後に OTA のソフトウェアアップデートを提案されたので試みたが、失敗した。QR 先のドキュメント通り、再起動(電源を物理的に落として再起動)後、再びアップデートを試みたら無事成功した。

3D モデルははじめからバンドルされているのですぐにプリントを試すことができるのが嬉しい(初期状態で SD カードスロットにカードが挿入されている)。それぞれに所要時間も示してくれている。短いものは10数分、長いものは10時間ほど要するようだ。SD カード容量は筆者の場合 1.6 / 29.1 GB だったので、初めから買う必要はなさそう(リーダーは必要?MakerWorld から直接転送できたら良いのだけど)。

所要時間の一番短い船を作ってみた。

完成。

ひっぱって飛ばせる懐かしのプロペラおもちゃも作った。


いくつか気がついたこと。

  • 起動時やプリント開始時のサウンドがデカくてビビる。設定の「Print Options」>「Sounds」をオフにすれば、起動時のウェイクサウンドも消える
  • 駆動音について:
    • プリント時は結構静音で、同居人がいても別室であれば夜に就寝を乱す心配はないと思われる(が、ある程度は鳴るので上のビデオを参考)
    • しかし初期セットアップののキャリブレーションでは、様々な周波数でノズルを振動させながら計測をするパートがあり、床に振動を感じることもある。集合住宅などは深夜は避けたほうが良いかも
  • 置き場について:
    • 当然滅多揺れないところに置いた方が良いと思われる
    • スペック上は、筐体自体の設置面積は正方形に近く、奥行きもコンパクトと感じがちだが、フィラメントのリールを背面に取り付ける都合上、プリンタの後方には一定の空間が必要なので注意が必要(純正品のリール直径は20cm。筆者の場合、筐体うしろから壁まで17cmで問題なし)

Bambu Lab A1 mini が届いた

ブラックフライデーセールで随分安く購入した3Dプリンタ Bambu Lab A1 mini が届いたので開封した(先週のできごと)。友人に強く勧められたのがきっかけで、それまでも何度か気にはなりつつ実用イメージが沸かずに購入には踏み切らなかった。が、ちょうどセールでフィラメント込みで(当時)3万以下で買えるなら、と勢いで注文した。

(写真ではわかりづらいが)コンパクトだし、スタイリッシュなので予想以上に生活空間に馴染める。

電源プラグが罠で、3極仕様になっており、そのままではコンセントに差さらないため、注意が必要。

Amazon でアダプタを調べると、「よく一緒に購入されている商品」に Bambu Lab が提示されたので、Bambu 勢あるあるなのかも。

何かと時間が取れずでいまだに稼働できていないが、最初に何をプリントしようか MakerWorld でぽちぽちブックマークする日々を過ごしている。

MakerWorld: Download Free 3D Models

他に、ドアノブや扇風機のスイッチなど、身近なものに潜む構造を 3D プリントで再現している YouTube チャンネルが面白い。

もえ屋 – YouTube


早くも先日のカンファレンスでは 3D プリンタの話をたくさんできたし、そうした会話を通じ、3D プリンタが身近になることで、物理的なもの=買う という従来的な思考から、ないものは作る、というパラダイムシフトが起きそうな予感がしている。


ブラックフライデーが終わったと思ったら、年末年始セールでまたお安くなっているのでチャンス。(むしろセール価格がデフォ?)

年末年始セール | Bambu Lab ストア

ブログにダークテーマを導入してみた:WP Dark Mode

夜にこのブログを開くと、背景白ベースで眩しくどうにかしたいとダークテーマの導入を検討していた。今使っている Twenty Sixteen はダークテーマに対応していない。が、気に入っていて変えたくはない、、

調べてみると、ダークテーマ非対応でもプラグインで導入できるっぽい。いくつかある中でダントツでスター数の多かった WP Dark Mode をインストールしてみた。

WP Dark Mode – Improve Accessibility with AI Powered Dark Theme – WordPress プラグイン | WordPress.org 日本語

有料オプションもあるが、最低限は無料版でまったく十分そう。いくつか配色プリセットが用意されているが、個人的には Automatic Color で自動選択されたものがもっともしっくりきた。


URL埋め込みのプレビュー(ブログカード)がライトのままでボックス背景が白かったり、Highlighting Code Block で表示したソースコードがエンボスっぽくなったりして、微妙に調整したい箇所あるが、このままでも全然満足。

This website stores cookies on your computer. These cookies are used to provide a more personalized experience and to track your whereabouts around our website in compliance with the European General Data Protection Regulation. If you decide to to opt-out of any future tracking, a cookie will be setup in your browser to remember this choice for one year.

Accept or Deny