2025年10月16日木曜日

ラブブを定価で買う方法

ラブブを定価で買う方法

ちゃんと正規のお店に行って買うのが一番です
一応買えたのでメモ
買い方が複雑すぎる、、

結論

  • LivePocket で抽選を受けて当選したら現地に行って購入する

お店に入るには抽選を受ける必要がある

  • ここで定期的に抽選しているのでまずはこれに応募し当選する
  • 1人1店舗しか応募できない
  • 平日の方が当選しやすいとかあるのだろうか
  • 普通にお店にいってもラブブのぬいぐるみのやつは買えない?
  • 確証はないが抽選のない通常営業日に朝から並べば買えたりするのかも (確証はない

そして抽選に当選しても買える保証がない

  • 自分はマカロンとエネジーというシリーズがほしかったが売り切れだった (しかも眼の前で
  • 購入制限はあるが売り切れることがある
  • ブラインドボックスなるガチャ箱が人気らしくそれが1人複数個買えるらしいので自分の番になる前に売り切れる可能性がある
  • 単品物(写真でいうところの紫のやつ)も人気のやつがあるらしいがこっちは比較的購入しやすそう

抽選の倍率は

  • 不明
  • とにかく抽選し続けるしかない
  • 店舗によっても変わりそう
  • 1ヶ月に1回程度なのでそもそも倍率は高くなりそう

購入制限について

  • ぬいぐるみ系は基本制限あり
  • ブラインドボックスは2種類までで個数は1ボックスに入ってる数まで
    • 例えばマカロンとエネジーでマカロン2個とエネジー3個とか
    • マカロンもエナジーもボックスは6個入っているので6個まで買えるということ
  • 単品系はそれぞれ1個まで買える
  • 事前に現在の売り切れ情報を教えてくれる
  • が自分はそうだったが入店後にエナジーが売り切れたのでこの段階で商品の在庫があるかどうか保証するものではない
  • また以下の商品が購入制限のある商品だったがこれらは店内になくレジで直接伝えて購入するのでこれらだけがほしい場合は手ぶらでレジに直行でOK
  • ただこれも説明があると思うが1人1会計のみなので店内に陳列してある商品もほしい場合はそれらを手に取ってからレジに並ばなければならない

当選番号もかなり重要

  • 自分は240番だったがその番号だと人気シリーズ(というかほしかったマカロンとエナジー)は売り切れ状態だった
  • 前にも書いたが購入制限はあるものの前の方々が上限いっぱいまで書い続ければそれだけ売り切れの可能性が増えるので若い番号のほうがいい
  • 100番内ならほぼほしいやつが買えるかもしれない
  • 当日並んだときもところどころ空き番号があったので常連は当選しても番号次第ではお目当てのものは買えないとわかっているので来ないのかもしれない

当日購入までの流れ

  • 当選したチケットの確認
  • 身分証明書を持参する
  • 当選番号で入れる時間が決まるのでその時間の確認
  • 時間の15分前に整列が始まるのでそれくらいに現地に到着すること
  • 整列
  • チケットのQRコードと身分証明書の確認
  • 購入制限の説明と現在の在庫状況の説明
  • 時間まで整列しながら待機
  • 入店
  • レジ直行
  • ほしいやつ伝えて購入
  • そく退店

という感じです
お店によりますが待機列が外の場合があるので冬は防寒対策も必須です

お店に行くとオリジナルの紙袋(40円)も購入できるのでファンには嬉しいのかも

ネットで買えるのか

  • PopMart の公式オンラインストアはある
  • がラブブ系はほぼ在庫切れ
  • 商品が入荷したら通知が来るようにできるが通知がきてすぐに行ってもほぼ売り切れ
  • 予約注文が可能になることがあるのでそのときに予約注文して届くのを待つのはあり
  • ただ箱1個とかはほぼなくボックス売りの予約注文がほぼ
  • 合計10,000万円以下の送料は660円
  • 箱1個だけの購入とかはほぼ不可能に近い印象

転売は未だに高い

  • 各種フリマサイトやショッピングサイト系を見ると未だに高い印象
  • 一時期よりかはだいぶ安くなったイメージもある?
    • エナジー定価 2,250円
    • 転売現状 5,000 - 6,000円
    • 転売少し前 10,000円

最後に

人気があるコンテンツなので仕方ないですが面倒だったので忘れないようにメモしました
入店の抽選方式は転売対策とは言えないかもですがそれでも長蛇の列を作らない、入店時のパニックなどを回避する手段としては有効かなと思いました

マカロンとエナジーは買えませんでしたがそれでも子どもたちがよろこんでくれたのでよかったです

昔のハイパーヨーヨーとかたまごっちみたいな一時的に爆発的に人気になるコンテンツは今も昔も変わらずあるんだろうなと感じた、、

2025年10月9日木曜日

Sinatra4.2.0にアップデートしたらホームページが動かなくなったので対応した

Sinatra4.2.0にアップデートしたらホームページが動かなくなったので対応した

私のホームページはSinatraでできています

背景

Sinatra が 4.2.0 になり PATH_INFO の扱いが変わりました https://github.com/sinatra/sinatra/compare/v4.1.1...f53a68482f3d5a1a868320f5da3ca7e14bfd8fdf

それに伴いルーティングの定義を仕方も変わったのでそれに対応しました

結論

ちゃんと get '/' do ... end を使いましょう

仕組み

自分のホームページは各ページをクラスとして定義しています
例えば /about を管理するページは以下のようにクラス化されています

# frozen_string_literal: true

require './libs/ogp'
require './controllers/base_page'

# 自己紹介ページのルーティングを定義するクラス
class AboutPage < BasePage
  def initialize
    @path = '/' # config.ru 側でパスを指定するのでここはすべて / になる
    @real_path = '/about' # sitemap 生成用のパス
    @tpl_name = :about
    @title = 'About @kakakikikeke'
    @description = '興味のある分野、職歴、資格について紹介しています'
    @image = OGP::DEFAULT_IMAGE
    @sitemap = { priority: 0.8 }
    super(@real_path, @sitemap)
    routing
  end

  def routing
    AboutPage.get @path do
      @ogp = OGP.new(@title, @description, @path, @image)
      erb @tpl_name
    end
  end
end

でこのクラスを config.ru で Rack::URLMap を使って読み込み

# frozen_string_literal: true

require './libs/routing'

run Rack::URLMap.new(Routing.definition)

展開しています

# frozen_string_literal: true

Dir[File.expand_path('../controllers', __dir__) << '/*.rb'].sort.each do |file|
  require file
end

# ルーティングを定義するモジュール、ちゃんとメニューの順番と同じになるようにrouting.jsonを定義すること
# また動的に生成するページは各Pageクラス内で定義すること
module Routing
  def self.definition
    JSON.parse(File.read('./routing.json'))['routing'].map do |info|
      [info['path'], Module.const_get(info['class']).new]
    end.to_h
  end
end

今回の現象

上記のように展開すると本来は 200 が返るのですがなぜか 404 になるようになってしまいました

対応策

で結果的に対応策は以下のようになりました
各ページで定義しているルーティング情報をメソッド内で呼び出すのではなくちゃんとクラス配下に定義してあげるようにしています

# frozen_string_literal: true

require './libs/ogp'
require './controllers/base_page'

# 自己紹介ページのルーティングを定義するクラス
class AboutPage < BasePage
  PATH = '' # config.ru 側でパスを指定するのでここはすべて空になる

  def initialize
    @real_path = '/about' # sitemap 生成用のパス
    @tpl_name = :about
    @title = 'About @kakakikikeke'
    @description = '興味のある分野、職歴、資格について紹介しています'
    @image = OGP::DEFAULT_IMAGE
    @sitemap = { priority: 0.8 }
    super(@real_path, @sitemap)
  end

  AboutPage.get PATH do
    @ogp = OGP.new(@title, @description, PATH, @image)
    erb @tpl_name
  end
end
  • @path を PATH として定数にする
  • かつ PATH は必ず空にする
  • routing メソッドを削除し get を直接クラス配下に定義する

これで一応動作するようになりました

おまけ: Rack::Lint::LintError: uppercase character in header name: Content-Security-Policy (Rack::Lint::LintError)

CSP ヘッダなどをミドルウェアで定義する場合は大文字を使ってはいけないようです

# frozen_string_literal: true

require './libs/routing'

# 静的ファイルに対するヘッダーを設定するミドルウェア
class StaticHeadersMiddleware
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, body = @app.call(env)

    path = env['PATH_INFO']
    if path =~ %r{^/(robots\.txt|favicon\.ico|img/|js/|css/|ipa/)}
      headers['content-security-policy'] ||= "default-src 'self';"
      headers['cross-origin-embedder-policy'] ||= 'require-corp'
      headers['cross-origin-opener-policy'] ||= 'same-origin'
      headers['cross-origin-resource-policy'] ||= 'same-origin'
      headers['permissions-policy'] = 'camera=(), microphone=(), geolocation=(), fullscreen=(self)'
    end

    [status, headers, body]
  end
end

use StaticHeadersMiddleware

run Rack::URLMap.new(Routing.definition)

最後に

メソッド内で get などを定義すると実際にアクセスされた際にルーティングの定義が見つからずエラーになるようです

2025年10月1日水曜日

ボットは絵も動画もブログも作成できるようになった

ボットは絵も動画もブログも作成できるようになった

人生とはボットを育てることなのかもしれない

これまで

https://blog.kakakikikeke.com/2025/04/kakakikikeke-die-twice.html

自分のツイートを学習させて自分っぽいツイートができるようになりました

アカウント

https://x.com/kakakikikekebot

現在のボットにできること

2025/09/26 現在ボットは成長し以下ができるようになりました

  • ツイートをする
  • ブログを書く
  • 絵を書く
  • ショート動画を作る

以下それぞれの仕組みを詳細に説明します

共通点

  • 動作マシンはローカルの M2 Pro mac mini
  • バックエンドでは「CPU50%のマイニング」「Ollamaサーバの起動」「SD-webui」が稼働している
  • 生成時は MPS にすべて対応しているものを採用
  • Python で実装
  • 生成時間は動画以外数分で完了 (絵、文章系)

ツイートをする

Twitter API + Ollama API (gemma3)

  • 自分のツイートを500件準備、そこから20件をプロンプトのコンテキストとして与える
  • ツイートを生成してもらうようなプロンプトを入力
  • レスポンスをパース、サニタイズなど調整してからツイート
  • ハッシュタグやリンクなどは含めないようにしている
  • プロンプトは以下
def build_prompt(past_tweets, sample_size=20):
    examples = "\n".join(random.sample(past_tweets, sample_size))
    return f"""以下は過去のツイートです:

----ここから過去のツイート----
{examples}
----ここまで過去のツイート----

これらの文体や話題を参考にして、あなたらしい新しいツイートを1つ生成してください。
日本語でかつ文章の意味がわかるような自然なツイートにしてください。
ツイートに「https://」から始まるようなURLは絶対に含めないでください。
ツイートの長さは50文字以内にしてください。
ツイートを作成した理由などは説明しないください、ツイートのみ生成してください。
"""

ブログを書く

Twitter API + Blogger API + Ollama (gemma3)

  • テーマを与えてそのテーマに基づいたブログ記事を書いてもらう
  • 出力は必ずHTMLになるようにプロンプトで調整、デフォルトがMarkdownっぽいので可能な限りMarkdownにならないようにする
  • テーマはランダムで100件保持、100件分のテーマを消費すると停止する
  • テーマはChatGPTに生成してもらっている
  • プロンプトは以下
def build_prompt_for_blog_post(theme):
    return f"""以下はブログ記事のテーマです。

----ここからテーマ----
{theme}
----ここまでテーマ----

このテーマを参考にして、あなたらしい新しいブログ記事を1つ生成してください。
ブログ記事内では Markdown 記法は使えません、Markdown 記法は自動で HTML に変換されません。絶対に Markdown 記法を使わないでください。
ブログ記事は Markdown 記法を使わずに生成してください。
ブログ記事内では HTML タグが使えます。
コードなどシンタックスハイライトが必要な場合は HTML タグを使ってください。
ブログ記事に画像は含めないでください。
ブログ記事内に StyleSheet や CSS の記述を含めることは可能ですがブログ本体の StyleSheet や CSS に影響を与えないようにしてください。
ブログ記事を作成した理由などは説明しないください、ブログ記事の内容のみ生成してください。
"""

絵を書く

Twitter API + Stable Diffusion WebUI API (model はランダム)

  • SD-Web UI を API モードで起動してそれをコールする
  • SD-Web UI の命令はそのまま JSON のペイロードとして API に送信できるので楽
  • 生成された画像のサイズは896x1152
  • モデルは固定ではなく10個ほど保持しておりそれを順番に使用していくように Python 側で制御
  • プロンプトもランダムになるようにしておりベース、性別、向き、服装、背景など要素ごとに毎回ランダムで生成するようにしている
def generate_prompt():
    # プロンプトの定義
    base = "masterpiece, best quality, ultra-detailed, 8k, cinematic lighting"
    gender = "".join(
        ("1 beautiful japanese young women, fair skin, light makeup, realistic face")
    )
    viewpoint = get_random_viewpoint()
    posing = get_random_posing()
    hair_cut = get_random_hair_cut()
    hair_color = get_random_hair_color()
    hair = f"{hair_color} {hair_cut}"
    face = get_random_face()
    background = get_random_backend()
    tops = get_random_tops()
    bottoms = get_random_bottoms()
    clothes = f"{tops}, {bottoms}"
    return "".join(
        f"{base}, {gender}, {viewpoint}, {posing}, {hair}, {face}, {background}, {clothes}",
    )

ショート動画を作る

Twitter API + Stable Diffusion WebUI API + LTX-Video (txv-2b-0.9.8-distilled)

  • text-to-video ではなく image-to-video の手法
  • 先に SD-WebUI を使って画像を作成してもらう
  • その画像を使って LTX-Video で動画にする
  • 256x384の4秒動画を作成 (num_frames=121、frame_rate=30)
  • 4秒以上の動画を生成する場合は192x256にすれば生成できる
  • 本当は896x1152で生成したいがリソースが足りない
  • 動画の生成はほぼマシンリソースをすべて使うので生成前にマイニングおよび ollama の runner を停止している
  • 各種プロセスを停止しないとメモリが枯渇してほぼ100%クラッシュする
  • 1動画生成するのに20-60分ほどかかる
  • 生成時間にムラがありおそらく入力している画像の影響だと思われるが安定しない
  • LTX-Video をサブプロセスとしてコールしているのでその作りが微妙
def convert_image_to_video(
    img_filename: str, width: int, height: int, prompt: str = ""
) -> Optional[str]:
    # 環境変数からパスを取得、設定がなければデフォルト値を使用
    work_dir = os.getenv("LTX_WORK_DIR", "/Users/kakakikikeke/Documents/work/LTX-Video")
    img_dir = os.getenv("LTX_IMG_DIR", "/Users/kakakikikeke/data/repo/videobot")

    # 仮想環境の Python を直接指定
    venv_python = os.path.join(work_dir, "env", "bin", "python")

    # 実行コマンド
    command = f"""
    cd {work_dir} && \
    PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0 \
    {venv_python} inference.py \
    --prompt "{prompt}" \
    --conditioning_media_paths {img_dir}/{img_filename} \
    --conditioning_start_frames 0 \
    --height {height} \
    --width {width} \
    --pipeline_config configs/ltxv-2b-0.9.8-distilled.yaml
    """

今後追加したい機能

  • 音楽の作成
    • AudioGen
    • RVC
  • 長めの動画
    • 今のマシンだと画像サイズを落としてフレーム数を上げるしかない
    • もっと軽量なモデルを探す
    • 本当はWan2.2やVeo3レベルの動画を生成したい
  • 俳句
    • gemma3 でプロントプト換えるだけ
  • 音楽+動画
    • 上記で生成した音楽と動画を何かしらで組み合わせる
    • 最終形はこれなのかもしれない
  • 昔の写真や自分で書いた絵を動画にしたい
    • 過去の復元
    • 手書きの絵 -> アニメ化 -> 動画化
  • NanoBanana 連携
    • 有料だとかなり強力
    • というかお金を使う前提ならローカルで全部動かさないで Google AI Studo API や Colab でガンガン動かして高品質、高画質、長尺コンテンツを作りまくれる
    • ただマネタイズ考えないと大変なことなりそう
    • 動画にするだけならVeo3でもいける

課題

  • Twitter API Free プランの上限
    • 500ツイート/1日にほぼ当たっている
    • 有料プランにすれば解決するがどうするか
    • コンテキスト(メディア系、テキスト系)にアカウントを分割するか、管理は面倒になる
  • Ollama で動作させるモデル
    • gemma3 はだいぶ軽量なので動作する
    • gpt-oss のような大規模LLMは動作しない (動作はするがスワップだらけでかなり遅くなる)
    • openhermes など試したがハッシュタグや無駄に絵文字を使うのでやめたりした
    • いいモデルを探すのが難しい
  • プロンプトだけで制御するのには限界がある
    • 含めないでと命令しても含めてくる
    • モデルに合ったプロンプトを調整しなければいけないのが辛いのでなんとかしたい (プロンプト最適化など)
  • プロンプトのパターン追加
    • テーマなど手動の部分があるので自動化したい
    • 絵を描く際のプロンプトのランダム抽出の候補を追加する
    • そもそも完全ランダムにする方法を考える
  • 絶望的にマシンスペックが足りない
    • やはり AppleSilliocn だとかなり辛い
    • 基本は RTX などの CUDA が使えるグラボがあることが前提 (xformers動作など)
    • 動画生成は特に VRAM を消費するので VRAM モリモリのグラボがないと厳しい (Wan2.2など)
  • ディスクも足りない
    • ローカルにモデルを置きまくっているのでディスクが枯渇する

最後に

多少の知識はいるが生成系は本当に楽な時代になった

2025年9月10日水曜日

NanoBanana の API を試す

NanoBanana の API を試す

ちゃんとこういうテック記事も投稿しないとダメだなと思い試しました
Python を使っています

環境

  • macOS 15.6.1
  • Python 3.12.11
    • google-genai==1.35.0
    • pillow==11.3.0

準備

必要なライブラリをインストールします

  • pipenv install google-genai
  • pipenv install pillow

google-generativeai は Deprecated なので注意してください
google-genai を使いましょう

API キーの取得

Google AI Studio (ここ)から生成しましょう

サンプルコード

比較的新しめの技術に関しては AI 先生に聞いても教えてくれないから公式ドキュメントを見るのが一番なんですよね

ファイルをアップロードして変換してもらうだけの簡単なスクリプトなのでリファクタなどはしていません

xxx の部分は上記で取得した API キーを入力してください

from io import BytesIO

from google import genai
from PIL import Image

client = genai.Client(api_key="xxx")

prompt = """
  背景を宇宙に変更してください。
"""
image = Image.open("reforg.jpeg")

# チャットクライアントの作成
chat = client.chats.create(model="gemini-2.5-flash-image-preview")
# イメージとプロンプトの送信
response = chat.send_message([prompt, image])

# 結果(テキストと画像)の取得、一応 pyright のエラーも対応
if response.candidates is None:
    raise

if response.candidates[0].content is None:
    raise

parts = response.candidates[0].content.parts
if parts is not None:
    for i, part in enumerate(parts):
        if part.text is not None:
            print(part.text)
        elif part.inline_data is not None and part.inline_data.data is not None:
            image = Image.open(BytesIO(part.inline_data.data))
            image.save(f"generated_image_{i}.png")

で入力した画像がこれで

出力された画像が以下です

すばらしい
特にレスポンスの速さがすばらしい

最後に

Google AI Studio の UI からだと制限があったりしてうまく画像が生成されないことがあるようなのでそんな場合は API を使いましょう

ただこれだとチャットというよりかは一問一答の会話なのでチャット的な感じでインタラクティブな感じにしたいのであればもう少し手を加える筆意ようがありそうです

それでもこれが無料で使えるのは本当に素晴らしいことだと思います

参考サイト

2025年9月9日火曜日

Nano Banana 試す

Nano Banana 試す

噂の NanoBanana を試してみました

元の画像の特徴を維持しながら自然言語でいろいろ変更を加えられるツールという印象です

画像の変換の経緯に意図はありません
顔ももっと細かく指定すれば表情などもいろいろ変えられそうです

元画像

この画像にいろいろ指示を与えて新しい画像を生成していきます

質問1: この絵をドット絵風にしてください

できた絵はこちら

質問2: 目がないのですが目を追加してイケモン風にしてください。髪型はシースルーマッシュにしてください

できた絵はこちら

質問3: 更にここから金髪でショートヘアにしてみてください

できた絵はこちら

質問4: 今度は服を変更してください、シンプルな白のTシャツにしてください

できた絵がこちら

質問5: Tシャツを脱いでムキムキマッチョにしてください

できた絵はこちら

質問6: 背景を追加したいです。トレーニングをするようなジムにいる背景にしてください

できた絵がこちら

質問7: アニメのように吹き出しでセリフを追加したいです。トレーニング後なので「いい汗かいたな」というセリフを追加してください

できた絵はこちら

最後に

これだけ元画像を変更しましたが無料でかつ1つのチャットのトークンの上限 32768 まではまだ達していませんでした (13218/32768)
まだまだ画像にいろいろな修正を加えられそうです

ちなみに Google Drive 連携していないとチャットは一時チャットとなり次回アクセス時にはチャットの履歴ごと画像も削除されているので保存したい場合は Google Drive 連携しましょう

自分は画像の変換しか試していませんが簡単なラフスケッチに与えた画像を元に絵を描いてもらうこともできるようです

https://note.com/konho/n/n651a24c2180b

控えめに言ってすごいです

ちなみに Exif には特に NanoBanana 固有の情報は含まれていませんでした

2025年8月28日木曜日

胃カメラメモ

胃カメラメモ

会社の健康診断のバリウム検査で慢性胃炎と診断されたので人生初の胃カメラ検査をしてきました
感想をメモします

料金

  • 4870円

やり方

  • 麻酔ありの口からにしました

処置時間

  • 準備から完了まで含めて3時間ほどかかりました
  • 鎮静剤の効果も自分は帰る頃にはなくなっていました

流れ

  • 処置室に行く前に準備室的なところに連れて行かれる
  • 胃をきれいにする?薬をコップ1杯分飲まされる
  • 点滴開始
  • ここでいろいろと説明される
    • 鎮静剤は処置室に行ってからいれる
    • 喉の麻酔もする
    • 喉の麻酔をすると唾液が飲み込めないので全部吐き出す
    • 鎮静剤を打つとしばらくフラフラになるので自転車とか車の運転はダメ
    • などなど
  • しばらくすると処置室に移動
  • 処置室で喉の麻酔スプレーをする
  • マウスピース装着
  • 鎮静剤投与
  • すっと眠り処置開始
    • 処置中はほぼ辛くはなかったが自分は多少意識がありカメラいれるときと抜くときはガッツリえづいた

結果

  • 軽度逆流性食道炎
  • 表層性胃炎

だそうです
ピロリ菌はいませんでした
どちらも生活習慣で治るため薬などの処方や再検査の必要性はなかったです (よかった)

その他メモ

  • 最初に飲んだ胃の薬のせいでしばらくおならがでます
  • 初回だったので自分はかなり緊張しましたが慣れれば楽勝かもです
  • 鎮静剤なしでやっている人は相当すごいと思います
  • 4,5人の看護師さんとお医者さんで処置してくれたのでだいぶ大掛かりな感じはしましたが安心感もありました

最後に

体は資本だね

2025年8月24日日曜日

アイリスオーヤマのドラム式洗濯機がぶっ壊れて少し大変になった話

アイリスオーヤマのドラム式洗濯機がぶっ壊れて少し大変になった話

洗濯機が壊れると日常のリズムがとんでもなく狂っちゃうのね

壊れたドラム式

三年前に購入したアイリスオーヤマのドラム式洗濯機が壊れました
具体的な症状は以下です

  • エラーコードLEが何をしても必ず出る
  • ドラムが回らない

(写真でアースや給水ホースが抜けているのは Amazon が回収する予定日だったためです、後述)

過去にメンテナンス方法を紹介しましたがこのメンテナンスを日常的に行っていました
使用頻度としては 2回/1日で朝と夜に洗濯します
また洗濯時は必ず乾燥も使っていました

この状況でほぼ3年で完全終了しました

とりあえず修理問い合わせ

https://www.irisohyama.co.jp/support/repair-fee-sim-large/washing-machine

最初に気づいておくべきでしたが問い合わせてから修理が完了するまでに2週間は見たほうがいいです
このときは即日で連絡が来て対応してくれるかなと思っていました

真夏のコインランドリーの往復

とりあえず問い合わせは完了したので洗濯できなかった洗濯物をコインランドリーに持っていて洗濯しました
ちかくのコインランドリーは洗濯のみの洗濯機が4.5kgしかなく2台使って洗濯しました

料金は1台200円で毎回400円使いました
料金は特に気にならなかったのですがとにかく真夏の炎天下のなかコインランドリーを往復するのが辛かったです
だいたい30分で洗濯は完了するので30分後に洗濯物を取りに行き帰ってきたら干し夕方に乾いたら取り込んでたたむという作業がとにかく辛かったです

このときは本当に乾燥機能付き洗濯機のありがたみが身にしみてわかりました

買い替えを決断しAmazonで購入

修理の問い合わせをしてもすぐに連絡が来ずコインランドリーの往復に疲弊していたのでもう購入を決断しました
購入したのはほぼ同サイズの縦型の日立の洗濯機でサイズ的にも同じレベルだったので購入しました
しかも Amazon なので配達は翌々日で「あーようやくコインランドリー地獄から抜け出せる」と安堵しました

搬入に備えて搬入経路を確保(いろいろと家具を移動)しあとは待つだけになりました

が、しかしなぜか搬入できず

うきうきで待っていた搬入日当日業者さんと対面して開口一番言われたのは「搬入できないです」でした

過去にドラム式やそれよりも大きい冷蔵庫も搬入してもらったのになぜか搬入できないの一点張りでした

言うに

  • 壁を傷つけて賠償くらいたくない
  • 我々は下請けなのでそのルールの元搬入できない

とのこと一応説得は試みたのですが全く折れる気配がなく時間の無駄だと判断して早々に退散してもらいました

おそらく Amazon で大型家電を購入すると配送する業者はランダム?的に決定しヤマトや佐川など引っ越し専門業者であれば保証があるため搬入してくれるっぽいです (詳細は不明)

で今回は完全にハズレの業者だっため搬入不可となってしまいました

確実な方法

そのとき搬入業者も言っていたのですが確実に大型家電を購入から搬入までしてほしいのであれば家電量販店で買うのが一番だと言っていました

おそらく家電量販店は搬入時のトラブルの保証がついている搬入業者と提携しておりもし搬入時に壁がぶっ壊れても保証してくれる保険があるからなのではと思いました

単純に感じるのは「全く同じ商品なのに Amazon だと搬入できないが家電量販店だと搬入できるのはなぜなのだろう」という思いなのですが自分たちの知らない裏の仕組みがありそのなぞのチカラによって搬入ができないのだと自分を納得させました

アイリスオーヤマの修理窓口から連絡

搬入できずに泣いていたところ数日前にメールで修理依頼した件が電話で折り返してきました
電話では

  • エラーLEの表示されている写真がほしい
  • 搬入経路のサイズを図って事前に送ってほしい

とのことでした
ドラム式の場合ドラムを回すモーターがダメになると完全交換らしく搬入できるかの確認のため事前に通路の幅などを測って送ってほしいとのことでした

でモーターがダメで交換になった場合は49500円かかるらしく新品購入よりも安く済むためこの電話が来たタイミングで修理を選択することにしました

当然ですが当日すぐに訪問修理の人が来てくれるわけではなく日程調整などで約そこから一週間かかると言われました
ただ訪問修理日に確実に直してくれるらしく Amazon からコノザマを食らった直後もあったのでその言葉を信じ一週間のコインランドリー往復マラソンを決断しました

訪問修理

結局訪問修理が来たのは電話が来た日からちょうど一週間後でした
この日まで Amazon に泣かされコインランドリーマラソンを頑張った自分にとってこの日は本当に待ち遠しい日になっていました

で結論から言うと

無事修理(交換)が完了しまたドラム式が使えるようになりました
今回は修理ではなく完全に別物に交換となりました
本当によかったです
料金も予定通り49500円でした
保証に入っていればもう少し安く済んだのかもしれませんがそもそも保証なしだったので仕方なしです

また当日はアイリスオーヤマの担当者ではなく配達の方だけだったので技術的な質問はできませんでした (設置箇所が希望箇所じゃなくて移動お願いしようとしたんだけどさすがに大変そうだったのであきらめました)
三年毎に50000円ほどかかるとなるとやはり次回壊れたときには別の洗濯機を購入したほうがいいかなと思いました

電話口で後日壊れた原因を教えていただけるかも聞いてみたのですが「ダメです」と言われました
原因がわかれば次回からは対策もしやすいと思ったのですがダメなようです

交換時に来た製品は FLK842-W というやつでした

今回の学び

ということでまとめると

  • Amazon で大型家電は購入しないほうが良い
    • 特に緊急時は
    • 搬入できるかできないかのガチャがあるため
  • 洗濯機の修理までには問い合わせから完了まで最低でも二週間は見たほうが良い
    • その間の代替策(コインランドリーなど)は把握しておいたほういい
    • 今回は一週間ほどだったのでかなりラッキーだったかなと思います
  • 洗濯機が壊れると日常のルーチンがだいぶおかしくなる
    • ストレスがとんでもなくたまる
    • 洗濯機の偉大さを感じることができた

最後に

Amazon で大型家電は搬入ガチャできるのだろうか、、
今回購入は当然キャンセルされたがまた同じ商品を購入したら別の業者が来て搬入してくれる的なことはあるのだろうか

2025年8月5日火曜日

Switch2 版ドラゴンクエストビルダーズ2プレイメモ

Switch2 版ドラゴンクエストビルダーズ2プレイメモ

とにかくカメラ視点をリセットできる機能がほしかった

価格

  • 2,739円

プレイ時間

  • 約70時間
  • シドーを倒しヤミヤミとマガマガのクリアまで

プレイメモ

  • 起動時のロードが長い
    • 新規マップ読み込み時のロードは長め
    • 一度読み込めばそこまで長くはない
  • マイクラではないがドラクエでもない
    • 始まっていきなり自由というわけではない
    • ドラクエのようにストーリーを進めていかないとできることや行けるところは広がらない
  • 龍が如く極のようにゲームが頻繁に落ちることはなかった
    • 一部ラグっぽい処理はあった
  • ラグくなるとき
    • ゆうしゃのはたを遠くから振ったとき
    • 仲間と引き連れてスターキメラに乗って高く飛んだとき
  • 操作が難しい
    • コントローラでやるのできつい
    • 主要4ボタンをすべて駆使しないといけないのが辛い
    • 基本はキーマウ操作を前提にしていそう
    • A に割り当てられている役割が多すぎて誤爆しまくる
  • ボスは弱い
    • 基本攻撃連打で勝てる
  • ストーリーも簡単
    • どこに行けばいいかだいたい教えてくれる
    • 風のマントが便利すぎ出しだいぶ序盤に手に入るのはありがたい
    • 他の人が建築してくれる
    • メインとなる島を3つ巡ってそれを中央の島に反映して終わり
    • メインででっかい建造物を作ってボスを倒せば次の島という感じのほぼ一本道
  • 船移動がだるい
    • ロードがある
    • 一度本島に戻らないと他の島にいけない
  • 素材島面倒
    • 素直に攻略サイトを見るのが吉
    • ザブザブ島の赤石鉱脈はそもそもマップ上にない場合があるのでやまびこの笛で反応しない場合は一度からっぽの島に戻ってからまたザブザブ島に戻ると反応する
  • NPC が優秀
    • ガンガン建築してくれる
    • だがうまく使いこなさないといけない
    • みみずんが耕してくれる条件は「土を敷く」「柵で囲う」「かかしを置く」
    • あと他の作業(特にかいたく)しているときはそっちの作業を優先するのか耕してくれない
  • 経過時間
    • モンゾーラクリア 18時間経過
    • オッカルムクリア 30時間経過
    • ムーンブルククリア 50時間経過
    • 破壊天体シドー 60時間経過
  • クリア後

最後に

マイクラのように建築をしたい人がやるにはオススメできるがドラクエをやりたい人にはオススメできない

シドーがものづくりできるようになるところは少し感動しました

2025年6月17日火曜日

Switch2で龍が如く極をプレイ

Switch2で龍が如く極をプレイ

虎落としゲーでした

値段

  • 2235円(25%オフ)

マシン

  • Switch2

以下感想やら攻略ネタやら

  • 1週目は30時間弱で攻略
    • ノーマルでクリア
    • 経験値はカンスト
    • 真島はS到達
    • サブストーリー、目録あたりは半分ほど
    • クリア後、亜門丈クリアまでは追加で20時間(合計50時間)かかりました
    • クリアデータを使ってハード、EXハードをクリアしたときは2時間くらいでクリア
  • サブストーリーが辛い
    • お買い物競争
    • やれば経験値やアイテムがもらえるが正直メインストーリーを攻略するうえではいらない
    • あくまでもやり込み要素
    • 4章から急に行動範囲が広がるので4章からサブストーリー頑張ると辛くなる
  • ボスが強い
    • 特に前半は辛い (島野とか)
    • 基本はヒットアンドアウェイ or 相手の攻撃をスウェイで避けてからのカウンター
    • 雑魚敵のようにXを使って攻撃はほぼできない
    • 壊し屋+ヒートゲージ
    • そもそも操作が難しい
    • 中盤から後半はサブストーリーや真島を倒していれば勝手に強くなるからそこまで辛くない
    • 自分は10章の段階でレベルMAXになった
    • ちなみに亜門までやると余裕でカンスト+経験値のあまりが9999に自然となるので過度なレベル上げとかは不要
  • 一番強いスタイルはおそらく壊し屋
    • チンピラとラッシュはDPSが弱すぎる
    • 自分が一番好きなスタイルはラッシュ、スウェイが強すぎる
    • 壊し屋は極み技が出しやすいのでラッシュでゲージ溜めて壊し屋で極み技も強い
    • ただし堂島の龍がLv48になれば堂島の龍が最強
  • 金欠になりがち
    • 恵比寿の足袋は必須かもしれない
    • 簡単にお金稼ぎできる要素がない
    • 基本は素手で武器などを使わなければ金欠にはならない
    • 武器の購入と修復(弾の補充など)にめちゃくちゃ金がかかる
  • よく落ちる
    • Switch2 だと結構落ちます
    • オートセーブはありますがセーブはこまめにしておきましょう
  • やり込み要素
    • D ロッカー
    • D ポケサーパーツ
    • D メスキング
    • C サブストーリー、ひたすら買い物競争が辛いが経験値にはなる
    • C 達成目録
    • B 難易度EXハード
    • B どこでも真島の兄貴SS、ミニゲームもあるので注意
    • A 全能力強化
    • A 闘技場
    • S 達成目録
    • S 亜門丈 (ここまでくれば上記はすべてできている状態)
    • SS 究極闘技 (途中までやった)
  • ポケサータクマくん攻略時装備 (コスト42)
    • クールストライカー
    • 極・ローハイトタイヤ
    • 極・スピードフィン
    • 韋駄天モーター
    • ウルトラ神速ギア
    • タフネスバッテリー
    • ベビーサスペンション
    • ニューバンバープレート
    • ステーはなし
  • 亜門丈の倒し方
    • 第二形態のナイフ強すぎ
    • とにかく虎落としのみで勝負
    • アイテムは全部タフネスインフィニティ
    • 武器とかはセットとかで逆に効率悪く操作ミスするのでいらない、とにかく虎落とし狙い
    • 第一形態はタイミング取りやすいが第二形態の虎落としはかなりタイミングがとりずらい
    • 狙い目は「回転攻撃からの最後の一撃に合わせる」「走っている最中にあてる」「距離取りながらの足払い」
    • 体力は半分になったら回復する、半分から一気に削られる可能性あり
    • 基本CPUは超反応+超高速動作なのでこっちがこういう動きをしたらCPUはこう動くだろうと予測して虎落としを当てていく
    • 普通の攻撃はまず当たらないと思っていい
  • 究極闘技
    • 試練闘技その一 -> 銃持ちがいない反対側に行って戦う、基本はラッシュでダメージを受けてもスウェイでダウンしないようにする、ゲージが溜まったら堂島の龍の張りてで一人ずつ確実に倒す、できれば最初にチェーンソーをやる、最後に爆弾と銃を慎重に倒す

2025年4月25日金曜日

これでボクがいなくなってもボクっぽいツイートは生き続けるでしょう

これでボクがいなくなってもボクっぽいツイートは生き続けるでしょう

便利な時代になったもんだ

アカウント

現在は1日1回ツイートするようにしています

仕組み

ローカルの M2 Mac で動かしています
開発当初は Fine-Tuning方式 (LoRA) にしようかなと思ったのですが面倒なのと精度も微妙なのでやめました
たぶん ollama が動作すればいいのでスペックはそこまで必要ではないかもしれません

概要

仕組みは非常に簡単で過去の自分のツイートを LLM にコンテキストとして与えてそれを元に新しいツイートを生成してもらっているだけです

前処理も含めて流れの全体は以下です

  1. ツイートのアーカイブ (tweets.js) からランダムに500件抽出
  2. 500 件のうち 20 件をランダムに抽出し LLM のコンテキストとして与える
  3. ツイートを生成してもらう
  4. ツイートする

というかなり簡単な流れになっています

LLM モデル

特に理由はないですが日本語に対応していて可能な限り軽量な LLM を採用しています

これを ollama で起動して API をコールしてツイートを生成しています

  • ollama run openhermes

ツイートを抽出するスクリプト

さすがに全ツイートを食わせるのは無理なので先に何件か抽出します
とりあえず今は500件抽出しています
ここの抽出条件をもっと自分っぽいツイートだけに絞ったら文章も良くなるのかもしれないです

ここで生成されたツイートを LLM に食わせます

import json
import random

with open(
    "/path/to/twitter_archive/tweets.js",
    "r",
    encoding="utf-8",
) as f:
    raw = f.read()
    # 最初の JavaScript 部分を除去
    json_data = json.loads(raw.replace("window.YTD.tweets.part0 = ", ""))
    # "http://" または "https://" を含まないツイートだけに絞る
    filtered_tweets = [
        t["tweet"]["full_text"]
        for t in json_data
        if "http://" not in t["tweet"]["full_text"]
        and "https://" not in t["tweet"]["full_text"]
    ]
    tweets = random.sample(filtered_tweets, min(500, len(filtered_tweets)))

with open("tweets_500.json", "w", encoding="utf-8") as f:
    json.dump(tweets, f, ensure_ascii=False, indent=2)

LLM によるツイート生成

先ほど作成したツイートファイルを展開しプロンプトを作成します

ここのプロンプトを変えるだけで生成されるツイートが大きく変わります (これが世に言う「プロンプト最適化」)

以下が現状使っているプロンプトですが Openhermes だと「URL 含めないで」と言っても平気で含めてくるので別途正規表現で削除する処理を追加しています

Twitter の API は v2 でないとダメなのでご注意ください

import json
import os
import random
import re

import requests
import tweepy

# 過去ツイートの読み込み
with open("tweets_500.json", "r", encoding="utf-8") as f:
    past_tweets = json.load(f)

# プロンプト作成
# openhermes の場合は可能な限り質問を具体的にしないと自然な文章にならない
# chatgpt はだいぶ自然なツイートを作成してくれるから本当は OpenAI API を使いたい
examples = "\n".join(random.sample(past_tweets, 20))
prompt = f"""以下は過去のツイートです:

----ここから過去のツイート----
{examples}
----ここまで過去のツイート----

これらの文体や話題を参考にして、あなたらしい新しいツイートを1つ生成してください。
日本語でかつ文章の意味がわかるような自然なツイートにしてください。
ツイートに「https://」から始まるようなURLは絶対に含めないでください。
ツイートの長さは50文字以内にしてください。
ツイートを作成した理由などは説明しないください、ツイートのみ生成してください。
"""

# Ollama API にリクエストを送信
# stream: false にしないと一文字ずつ処理しないといけないので false にする
response = requests.post(
    "http://localhost:11434/api/generate",
    json={"model": "openhermes", "prompt": prompt, "stream": False},
)

# 出力を整える
tweet = response.json().get("response", "(ツイート生成失敗)").strip()
# URL が含まれる場合があるのでここで削除、ドメインが追加されたら随時対応
tweet = re.sub(r"(https?://\S+|pic\.twitter\.com/\S+|t\.co/\S+)", "", tweet).strip()
print("自動生成されたツイート:")
print(tweet)

# Twitter (X) にツイート投稿
# 各種キーとトークン(環境変数などから取得するのが安全)
# OAuth 2.0 User Context 用クレデンシャル(環境変数から取得)
bearer_token = os.getenv("TWITTER_BEARER_TOKEN")
consumer_key = os.getenv("TWITTER_CONSUMER_KEY")
consumer_secret = os.getenv("TWITTER_CONSUMER_SECRET")
access_token = os.getenv("TWITTER_ACCESS_TOKEN")
access_token_secret = os.getenv("TWITTER_ACCESS_SECRET")

if all(
    [bearer_token, consumer_key, consumer_secret, access_token, access_token_secret]
):
    client = tweepy.Client(
        bearer_token=bearer_token,
        consumer_key=consumer_key,
        consumer_secret=consumer_secret,
        access_token=access_token,
        access_token_secret=access_token_secret,
    )
    try:
        response = client.create_tweet(text=tweet)
        print("ツイートを投稿しました")
        print(f"ツイートURL: https://twitter.com/user/status/{response.data['id']}")
    except Exception as e:
        print(f"ツイート投稿に失敗しました: {e}")
else:
    print("Twitter API キーが設定されていません。環境変数を確認してください。")

定期実行

Mac なので launchctl で行っています

生成されるツイートについて

詳細はアカウントを直接見てください
結果としては50点くらいです

課題

以下で改善点を上げます

文章が自然ではない

  • モデルが悪いかも
    • 日本語特化なモデル (Elyza や LLM-jp など) に変更すると良くなるかも
    • 試した中で一番自然だったのは OpenAI API だったので本当はそれがベスト
  • プロンプトが悪いかも
    • URL はいらないと命令しても URL が含まれたりする
    • 説明はいらないと命令しても説明が含まれたりする
    • プロンプトを構造的にして質問したほうがいいのかもしれない
  • そもそもコンテキストとして渡しているツイート自体が自然な文章ではないのが原因の可能性はある
    • つぶやきは文章ではない
    • そこから意図や感情を読み取るのは LLM でも難しいのかも
    • 渡すツイート情報を変更するのはあり
    • そもそもツイートを渡すのではなく「こういうツイートをして」とかにしたほうがいいのかも
    • そうなると自分がどういうツイートをしているのかを分析する必要があるが
  • コンテキストとして渡すツイートの精査をする
    • ランダムではなく「それっぽい」ツイートだけを抽出するようにする
    • その抽出作業自体を LLM に任せればいいのかも

なぞのURLとハッシュタグを含んでしまう

  • URL は正規表現で別途対応
  • ハッシュタグは含まないように命令したほうがいいのかも

リファクタリング

  • しません

定期実行が止まったらわからない

  • 通知機能をつけてもいいかも
  • あとはローカル実行ではなく適当なクラウドサーバに移行してもいいかも
  • Twitter の API が v2 から v3 になったり非互換になったりトークンが期限切れになった止まる

変なツイートしないか心配

  • Fワード系
  • 個人情報系
  • 急に誰かにメンションするとか

その他思うこと

LLM について思うことをつらつら書いていきます
ちなみに過去に思ったことはこちらです

Fine-tuning やら RAG やら MCP やらあるが正直オーバーエンジニアリングな気はする

  • LLM 自体がかなり賢くなっている
  • トークンの制限さえなくなれば「プロンプト最適化」が一強になるはず

AI を使うために AI を使う開発をするのは今後必然になる気がするが本末転倒な気がしなくもない

  • 例えば dspy や LangChain、MCP Server といったツールを使って LLM を操作する技術は今後必須になってくる
  • しかし結構大変なイメージ
  • 特に Fine-tuning や RAG や MCP は作るのも大変 (それすら AI 先生に助けてもらえるが)
  • やりたいことは AI のための開発ではなくあくまでもプロダクトの開発
  • そしてせっかく作ったものが必ずしも開発の役に立つ、手助けしてくれるレベルになるとは限らない

完全に AI のみで済むような世界観は実はまだまだ先の未来なのかもしれない

  • とは言え開発に LLM がないという状況は今後考えにくい
  • LLM はあくまでも「お手伝いロボット」で生成してくれたコードなどは結局自分たちでテスト、検証しなければならない
  • 本当はそこまで全部やってほしい
  • 極論「新機能でこういう機能がほしいから実装しておいて」とか「既存のコードでここにバグがあるから直しておいて」と言えば全部勝手にやってくるのが最高だがその未来は遠そう
    • Agent など実現するためのツールは揃っているがそれらを使って実現するスキルが自分には足りない
    • 結局「生成してもらう」->「コピペ」->「テスト」のループを繰り返すのが一番効率がいいのかもしれない

エージェントについて

  • 本当にいるのだろうかと思っている
  • もちろん自分の分身レベルでエージェントが勝手に動いてくれるならほしい
  • でもそこまでのエージェントを作るのはかなりの労力と技術がいると思っている
  • 現状のエージェントはいわゆる「作業の自動化」でそれは別にエージェントを使わなくても問題ない
  • これまで通りやっていた自動化を LLM を使って実現すればいいだけの話になる
  • つまりエージェントレベルではいらない (それをエージェントと呼ぶのであれば話は別だが)
  • 強化学習でいうところのエージェント+LLM の世界観
  • エージェントには意思があると思う

最後に

AI 先生は中身がブラックボックスすぎて何をしているのかわからなさすぎて怖いです
だがそれがいい

2025年4月12日土曜日

ほりほりドリルプレイメモ

ほりほりドリルプレイメモ

一応やったのでメモ
すべてアンロックはしてないです

価格

  • 376円 (steam版)

環境

  • Steam 1743554648
  • macOS 15.4

プレイ時間

  • 42時間

進捗

  • ステージ1クリア
  • ステージ2 遺跡Lv6までクリア
  • アイテム関連は全部開放 (しているはず)
    • アクセサリー、はにわ、加護の器、トーテム
  • ドリル改造
    • 基本全部MAX、採掘力は +1558

好きなビルド

ばくはとかいしん
かいしんはどんどん進みたい場合に使いばくはは鉱石集めのときに便利です
木箱と鉱石爆破をつけておけば袋がパンパンになって掘れないときでも木箱 or 鉱石を見つけて一個掘ればどんどん爆破して次に進めるので帰らずに鉱石集めができます

動画はこちら

一回目クリア時

13時間かかりました

2回目以降

3回目からは数分でクリアできるようになりました

操作に関して

  • 全部 WASD で操作できるのがいい
  • 現在のマイセットが表示されるといい

ステージ1

  • 会心ライトが強いというか便利
    • かなり探索しやすくなる
    • たいまつをバンバン置いてくれるので鉱石や宝箱に最短で移動できる
    • 後半、強化や好きなドリルを作れるようになったらいらないかもだけどそれまでは重宝しそう
    • 全体的に「会心」ビルドは強い印象
  • 爆発ビルドも結構やばい
    • 動画参照
  • 300-400くらい掘り進まないと制作でぴったりボーナスをもらうのは難しい
    • 序盤は3つ鉱石を使えればOKくらいの感覚
    • ペリドットが採掘できるあたりからぴったりができるようになる
  • 2つ目のドリルについて
    • 1つ目でがんがん掘ることを考えて2つ目はスピード重視で移動/帰還用にするなど
    • 2つ目は幸運重視で鉱石大量ゲット系など
  • 強化は装備数を増やすのを優先したほうが良さそう
    • 特に3,5個は早めに取りたい、ドリル1つ目を早々に3つ目まで拡張できるとかなり効率よくなる
  • 効率よく掘る方法
    • とりあえず次のエリアまで一直線に下に掘る
    • その後左右に別れてブランチマイニング的な感じで掘っていく
    • 帰還するときも楽になる
  • ドリルは極力捨てない方がいい
    • 後半でドリル強化というドリル同士を合成できる機能が追加されるのでそこで使うため
  • 鉱石も極力売らないほうがいい
    • 後半はドリル生成ばかりするので結構なくなる
    • 特に便利な形の鉱石はよく使う (三角L字、正方形、棒など)
  • 歯車強化が全部終わればステージ1は終了
  • 歯車稼ぎ
    • 999 に速攻で到達できるなら到達 -> 地面再生成を繰り返すだけ
  • 鉱石稼ぎ
    • (これも早く掘れるようになってからのほうが楽だが) 好きな階層に直行してそこで採掘し再度地面再作成するだけ

ステージ2

  • はにわとお金があるので爆発系は避けたほうがいい
    • 爆発ブロックも壊さないようにしないといけないのでたいまつ系が必須
    • ドリルが速すぎて壊さないように注意が必要
  • はにわとトーテムはドリルのバフ的な位置づけ
  • のろいはあまり気にしなくてもいいかも
    • ドリルが強ければ

ステージ2クリア後

  • アクセサリー加護の器あたりまで開放できらばほぼ全部のコンテンツを開放したことになる
  • 会心ライト+へんかのトーテムが強い
    • 遺跡Lvが上がっても結構サクサクほれるようになる
  • 貫通のトーテムが強い
    • れんさも強い
    • 鉱石の木で紫の鉱石をささげると貫通の効果がアップする
    • 紫の鉱石は遺跡の400-500に生息するので遺跡Lv1で集めるといい
  • 鉱石集め
    • 爆破がたぶん一番簡単
    • 参考動画は以下

やり込み要素

  • RTA
  • 遺跡LVMAX
  • 歯車育成MAX
  • はにわ育成MAX
  • アクセサリー収集
  • トーテム収集
  • 鉱石の木のささげるLvMAX
  • 好きなドリル作成

最後に

楽しかったです