[3Dプリント] トヨタスマートキー小型化ケース刷新、IGLA2キーフォブ一体型もあるよ!

車のスマートキーってなんであんなにデカいんですかね?あらゆるものが技術進歩で小型化する中、自動車のスマートキーはちっとも進化しないというかなんなら大型化しています。イモビライザーに要求されるセキュリティ機能が高度化する中で仕方ないことなのかも知れませんが。また昨今はスマホを使ったデジタルキーなども搭載が進んでいますが、特にバックグラウンド動作に厳しいiOS(iPhone)では実用上まだまだ難アリだと思います。せめてBluetooth機器のように複数の車両とペアリングできれば良いのですがそれすら実現する気配もなく、複数台の車を所有している場合はこのデカいのをいくつもぶら下げるはめになります。

■スマートキーの構造について

ところで、皆さんはスマートキーの電池交換などでケースを開けたことはありますでしょうか?ディーラーやカー用品店でやってもらうという人もいるでしょうし、意外と中を見たことがないという方もいると思うので、写真を貼ってみます。

スマートキーの中身

写真の赤枠部分がメインの基板(電池含む)です。そして青枠は非常用のメカニカルキー(物理鍵)です。電池切れの時などに引き抜いてドアの鍵穴に刺して昔ながらの開け方をするものです。このようにメカニカルキーが外周に格納されているため一回り大きくなっています。その他、衝撃吸収とか浸水のマージンとか色々設計上の都合はあると思いますが、実際の動作に必要な基板は思いの外小さいということです。

以前このブログでは、30プリウス(ZVW30)のスマートキーを小型化する試みをしました。

メカキーを廃して基板ギリギリサイズのケースを3Dプリンターで自作したのです。今回はメイン車両である新型クラウン用のものについても改めてチャレンジしてみた、という記事になります。先の写真のスマートキーはトヨタの現行車種の多くでも使われているタイプです(ハリアー、カローラシリーズ、ヤリスシリーズなど、電動ハッチバック非搭載車は2ボタン)。

■新たにクラウンなど現行車種用も製作

今回の進化ポイントは、

  • 従来格納できなくなっていたメカキーに鞘状のカバーを製作し、一緒に鍵束にぶら下げられるようにした
  • レーザー刻印機を導入したので、ボタンのアイコンなどをフィラメント交換式に比べより精緻に入れられるようになった
  • カーボン模様転写ビルドプレートを使い、表面と背面にカーボン柄(微細な凹凸)を入れてみた
  • 動作LED部分は薄く造形して透かしていたのから、透明レジンによるクリアパーツ化で視認性アップ

という辺り。現状の仕上がりはこんな感じ。

現行スマートキーの基板は長方形ではないので、それに沿わせて凹凸のある外形になっています。メカキーのカバーを作るというのはある方にいただいたアイデアなんですが、やはりメカキーも携帯しないと不安だという方や、鍵束にぶら下げないまでも周りに傷をつけない形でバッグの底などに入れておきたいという方にも刺さるんじゃないかなと思います。ついでに同じ製法でプリウス用もリニューアルしてみました(レジンパーツと鞘ケースは除く)。

IGLA2のキーフォブも一体化

我が家のクラウンクロスオーバーにはAUTHOR ALARM社のカーセキュリティIGLA2+を搭載しています。乗車時の自動セキュリティ解除のために、小さなタグ(キーフォブ)を携帯しておく必要があるのですが、これも樹脂カバーを外すと電池と小さな基板で構成されていますので、ついでとばかりに本ケースの底に搭載できるようなバージョンも作成しました。

基板が二階建て構造になり電波干渉が起きないか不安で、アルミ板をシールドとして挟むことも検討しましたが、現時点では特になにもせずとも動作は良好な気がしています。

二階建てになった分、厚みは少し増していますが、それでもポケットの中での収まりは良いんじゃないかなと思います。

こちらがメカキーを収める鞘ケースです。とりあえず凝ったロック機構などは設けず、穴のキツさだけで固定しています。滅多に使用するものではないので、結構固めで不意に外れないことを優先。

■現状の課題

夜間の視認性がイマイチ

レーザー刻印によるマーキングは明るいところでみるとかなりクッキリしていて綺麗なのですが、真っ暗に近いところだと反射面積が少なくてやや見づらいかなと感じています。カーボン柄の反射に埋もれがちなのもあるかも知れません。基本的にここのボタンを操作するのはたまにバックドアを手動で開けたい時くらいなので致命的とまでは行かないですが、素材カラーや刻印のデザイン、サイズ、太さなどで改善できるならしたいなというところです。

白字に黒は見やすいが、レーザー刻印では難しく研究が必要

形状での判別しづらさ

似たような話ですが、ポケットに手を入れて操作しようとした時に、向きや裏表の判別を手触りだけでするのがやや難しいなと思います。向きは鍵束のリングの付き方などでまだなんとかわかりますが、裏表に関してはどちらも全くのフラットなのでちょっと困ります。これまた使用頻度が低いのでどこまで突き詰めるかは思案中。

3Dプリントなので自由に凹凸をつければいいんですが、3Dプリンターの構造上、やはり一番綺麗に面が作れるのはビルドプレートに押しつける底面なんですよね。ここの凹凸をつけるということは、その面を上にして造形するとか、下にサポート材という捨て部分を作ることになり、結果的に表面の滑らかさが犠牲になります。そうするとレーザー刻印も綺麗に出なくなったりとデメリットも多いのです。表面のフラットさをキープしつつ、上手く裏表が判別できる形状を考えたいと思います。

  • 裏面だけにモールドをつける
  • 側面の形状を工夫する
  • 後から凸部品を貼り付ける
  • 初期プリウス用みたいにボタンパーツを別体化する
オリジナルのボタンパーツを流用した例

スナップフィット(パチ組み)の強度

プリウス版では外側に爪を4箇所生やしてパチっとロックする機構でしたが、今回はそれを内側に隠蔽する構造を採っています。当初6箇所にしていましたが、小さい突起なので何度か開け閉めしていると折れてしまうことがありました。3Dプリンターの積層方向の関係でどうしても剥がれやすい向きでもあります。

スナップフィット部分の拡大図(初期版)。3Dプリンターが造形する層毎の筋で割れやすい

現在は爪から全周囲む形にして強化を図っていますが、いずれにせよ

  • 意図せずパカっと開かないこと
  • 電池交換時には労せず開くこと(純正スマートキー同様、メカキーでこじって開くスリットを設置)
  • 繰り返し開け閉めしても破損しないこと
  • 落下などの衝撃でも破損しないこと

などが要件となり、まだまだ検証が必要そうです。

防水性

純正スマートキーではボタン部分をカバーするシリコンシートが挟まっていますが、本品ではボタン部品がなく、表面のたわみだけで内部スイッチを押す構造なのでシリコンシートは流用していません。ただキャスト(金型に溶けた樹脂を流し込んで作る方法)と違って、3Dプリント品な層と層の間に微細な隙間が空きがちなので、どうしても完全に水分を遮断するのは難しいです。層の厚さや温度(溶かし具合)で改善はできるのですが、他の造形上の都合との両立も難しかったりします。

トヨタのスマートキーは「飛沫は平気だけど洗濯したらアウト」というスタンスのようで完全防水とはなっていません。現状はそれに準じるくらいの防滴性能くらいが目標かなと思います。

3Dプリントで造形する以外の方法での防水も考えています。

  • 防水スプレーなどでコーティングする(表面は摩耗するので内側?)
  • 内部基板をリモコンなどを水滴から保護する熱収縮フィルムで保護?
    • ドライヤーやヒートガンで基板を炙ることにリスクもあり

技適問題

前記事でも触れましたが、電波を出す製品は検査を受けて技適(技術基準適合証明マーク)を取得して販売されます。これを改造することは基本的にできません。ただ調べた限りスマートキーの技適番号は内部の基板に刻印されています。つまり基板単位で認証をとっており、外装ケースは認定に含まれていないのでは?という指摘があります。事実トヨタの異なる形状のスマートキーで内部基板と技適番号は共通だった、というパターンが存在するようです。ただまぁこれについてはなにもみても誰に聞いても「大丈夫です!」というお墨付きは得られにくく、どこまでもグレーだと思います。あくまで樹脂ケースだけ頒布して組み付ける(改造する)のは自己責任でヨロ、という逃げも可能かもは知れませんが、まぁあまり大っぴらにはできず、個人で使うだけに留めるのが無難かなぁと。なのでショップには陳列しないかもです。

■まとめ

メカニカルキーを一体化して携行できないという点を犠牲にすることで、よりコンパクトなキーカバー(シェル)を自作してみました。常時2つ持ち歩く私としてはポケットの中が劇的に”スマート”になった気がします。また今回は外したメカニカルキーにも鞘をつけることで一緒に鍵束にぶら下げたり、バッグの中などに入れておくことができるようにもなりました。

大手を振って販売できると喜ぶ人も少なくないとは思いますが、法律的なところ誰か詳しい方教えてください。

3Dプリントフィラメントの残量をきっちり測る

3Dプリンターで造形する時、スプールに残ったフィラメントで足りるかどうかは常に気になります。造形途中でフィラメントが切れると面倒くさい一方、できるだけ無駄なく使い切りたい。

MakerWorldにこの手のスケールが多数公開されており、写真のように当てるだけでおおまかな残量を調べることができるのですが、さすがに「おおまか」すぎるのと、そもそもスプールの横幅がブランドによって違うので、より正確に測るにはブランド毎にこれを用意して使い分ける必要があり、なかなか厳しいなと思いました。

Bambu Studioでスライすると画面のように使用フィラメント量の予想が距離と重さで表示されるので、足りるか微妙~って時はやはりこれを活用して重量できっちり判定をしたいという考えに至りました(距離で測るのは難しい)。

ブランド毎の空スプールの重量はまちまちですが、少なくとも一度使い切って空スプールができたブランドは重量データを残しておけば、次からそれを引き算して正確なフィラメント残量を調べることができよう、という話です。せっかくなので、ここにも順次記載していきたいと思います。

Bambu純正(通常)248g
Bambu純正(高温)
(樹脂スプールの場合、紙芯を含む)

我が家の場合、フィラメント先端を固定するクリップも取り付けている場合があるので、参考値だとお考えください。

デジタルスケールを買い換える

普段、事務用として作業場にある測りは郵便物くらいにしか使わないので10年以上前に買ったアナログ針式のものしかなかったので、この機会にデジタルスケールに買い換えることにしました。デジタルだと数値が読みやすい他、現在の計量値を引き算できる「風袋(ふうたい)引き」という機能がボタンひとつで使えるのがポイントです。アナログ式だとダイヤルをグルグル回して0g位置に針を合わせるのが地味に面倒。

フィラメントスプールは基本1kg単位なので、スプール重量を加味して1kg強が測れる必要があります。他の用途も考えると2kg~5kgまでは測れるのが良いでしょう。逆に0.1g単位まで測れる必要はあまりない。それよりはデスク周りに置くのにできるだけコンパクトなものがいいです。まとめると今回の用途だと、

  • デジタル表示
  • 2kg以上計測できる
  • 1g単位で充分
  • 風袋引き機能マスト
  • 大きなものを載せた時に画面が隠れにくい、またはホールド機能搭載
  • スリムでそれなりにオシャレな外観(今回の置き場所だと黒が理想)

といった要件定義になりました。

選んだのはこちら。

  • 3kgまで測れる
  • 国産で法規にもきちんと準拠

といったところで信頼性も高そう。ちなみに裏返したところのシールにはKINGJIM L-3010という記載があります。キングジムのOEM品のようですね。商品ページにはないですが説明書をみるとPCS機能、つまりネジなどの小さい部品をジャラジャラっと載せて数を調べる機能もついていました。逆にホールド機能はないですが、表示部と計測台には段差があるので覗き込めばなんとかなるかと妥協。後述の治具も作って対応しました。

最後まで悩んだ候補はこちら。滅茶苦茶小さいのが魅力であると同時に、フィラメントスプールを載せるのにはさすがに小さすぎるかなと思って外しました。

「コーヒースケール」というカテゴリで探すと黒色でコンパクトでオシャレなデジタルスケールがたくさんあるんですが、タイマー機能など今回の用途では不要な機能が色々あって逆に使いづらそうなのと、値段も高い傾向があるので断念。USB充電式だったり、ガジェットとしてはかなりそそるんですけど。

実際のフィラメントを図ってみる

スプールは寝かせると画面が隠れて見えないし、立てると転がって行きやすい形状なので、写真のような固定台を作ってみました。

本機は都度風袋引きの「T」ボタンを押さなくても、電源投入時の重さを0gとしてくれるので、これを載せてから電源を入れれば、この固定台の重さは無視できます。

実際に冒頭の残り僅かなスプールを図ってみると294.5gとなりました。

空スプールが248gなので、残量はあと6.5g程度だな、という計算ができます。常に空スプールが手元にあれば、まずそれを載せて「T」ボタンで風体引きしてさっと測りたいスプールに載せ替えれば実際の残量が直接表示されますが、そのために空スプールを全種用意しておくのがちょっと現実的ではないかな。あらかじめ引き算する値をメモリしておけるようなインテリジェントな量りがあると理想ですね。

IKEAの多孔ボードSkadis用のマウンターも作成

各種ツールをIKEAのSkadis(スコーディス)に壁面収納してるので、これも一緒に入れておけるように専用ホルダーも作ってみました。

まとめ

フィラメントの残量を計測するのに必要充分な精度と基準をもったデジタルスケールが1千円ちょっとで買えて満足です。

唯一ホールド機能がないので、定型外郵便物の計量などで大きい封筒や段ボールを測る時は少し不便かなとも思いましたが、色々バランスを考慮して妥協しました。是非次期モデルではホールド機能を搭載してほしいものです。

macOSでギガぞうWi-Fiにつながらない時の信じられない馬鹿馬鹿しい解決方法

最近、ファミレスノマドをする機会が増えてきたので久しぶりに公衆Wi-Fiサービスである「ギガぞうWi-Fi」を契約しました。ファミレスに無料Wi-Fiがあったりしますが、1時間で認証が切れてしまうので、ターミナル作業とかしてると非常に煩わしいんですよね。「ギガぞうWi-Fi」は昔からをWi2系列の新サービスのようです。

しかし複数店舗で試してもMacBook Proから接続ができず、電波状況以外の原因で問題があることが確定したので、色々試行錯誤してようやくつながった方法をメモしておきます。結論だけみたい方はスクロールしてすっ飛ばしてください。

本来のステップ

ギガぞうWi-FiはWebページの接続説明がかなり乏しいし、トラブルシューティングのFAQも全く役立たずです。その替わりというか正規の方法としては「専用ツールで設定するだけでOK」というスタンス。が、そのツールでやってもつながらない→役立つヘルプ情報がない、というスパイラルです。

macOSの場合ツールといってもアプリをインストールする方式ではなく、ブラウザで構成プロファイル作成ページにアクセスして、そこでログイン情報を入力すると、たぶんそれを埋め込んだ構成プロファイルが生成されダウンロードできます。これをMacBookにインストールするとWi2eapというSSIDのWi-Fi設定がシステムに追加されます。本来はこれで都度認証する必要がなくなるはずなんですが、なぜか毎回IDとパスワード入力ダイアログが出ます。

公式FAQに「Wi-Fi接続時に、Wi2のログイン画面が表示されてしまう場合について」といエントリがあり、そこには

これは、SSIDに接続後、OSがインターネット接続状態を確認したときに、アプリでのユーザー認証が完了していない場合に起こります。
この場合でも、バックグラウンドではアプリによる認証処理は続いているため、ユーザー認証が完了次第、インターネットがご利用可能になります。

電波状態や通信速度によっては、ユーザー認証が完了するまでに最大15秒程度かかる場合がございます。
ログイン画面が表示されたとしても、ID/パスワードを入力せず、しばらく待っていただくと、自動認証処理が完了してインターネットがご利用できる状態となります。

と書かれています。が、待てど暮らせどインターネットに接続されることはありません

追加で試したこと(解決せず)

  • マイページからMacBookのMACアドレスを登録
    • もちろんmacOSのダミーMACアドレス機能はオフにし、ハードウェア本来のMACアドレスを登録しました
  • ログインIDは「(Aではじまるお客様ID)@gigazo@wi2」形式、パスワードはマイページにログインできることを確認した正しいもの、の組み合わせで認証

最終的に接続成功した方法(要iPhoneアプリ)

では、以下に私が成功した方法を説明します。なおOS環境はmacOS Tahoe(26.0.1)です。

1. macOS用のプロファイルを導入しておく

こちらで正規の手順で構成プロファイルを作ってインストールは済ませておきます。

正常に完了していれば、「設定」アプリで「プロファイル」と検索すると「構成プロファイルをインストール/表示/削除」という項目がヒットし、選択すると右側に「Wi2 high security profile」という項目が表示されるはずです。

これをすることでWi2eapというWi-Fiへの接続設定がシステムに登録されるようになります。ただしこれだけだとWi-Fiにはつながるんですが利用認証のID/PWが通らないのでインターネットに接続できません(何度もID/PWを聞かれる)。

2. iPhoneにiOS向けの「ギガぞうWi-Fi」アプリをインストール

こちらをインストールします。たぶんiPadからでもいけます。Androidでは試せていません。

アプリを起動するとログインを求められるので、マイページに入る時のお客様IDとパスワードでログインします。正常に設定を済ませるとこちらは普通にWi2eapというWi-Fiに接続できるようになるはずです。

その状態でiOSの「設定」アプリを開き、Wi-Fi設定画面にいくと「Wi2eap」という設定ができてると思うので、右側「i」ボタンをタップします。

すると詳細画面が開きます。ここにユーザー名、パスワード欄があり、タップするとFaceID/TouchIDで認証された後、「お客様IDとは似ても似付かない文字列に@gigazo@wi2がついたID」と「見たこともない長いパスワード」が表示されます。これをMac側で表示されているID/PWとして入力するとあら不思議、すんなり接続/認証できました。

IDもPWも長いですがタッチするとコピーできるので、ユニバーサルクリップボード連携ができていれば、iPhoneでコピー、MacBookでペーストができると思います。認証ダイアログに直接ペーストしてもいいですが、自分は念のためMacBook側のテキストエディタにペーストして内容を視認してから使いました。

考察

ようするにギガぞうWi-Fi公式ツール(構成プロファイル生成Webアプリ)が壊れている、もしくは最新のmacOSに対応しないまま放置されているんじゃないかと思います。

構成プロファイル(.mobileconfig)はApple ConfiguratorというApple純正ツールで中身を確認できますが、普通に生成時に入力したIDに「@gigazo@wi2」を付加したIDが登録されていました。パスワードはマスクされていて見えませんが、ようするに手入力した場合と同じ内容が送信されるよう組まれているわけです。手入力で通らないものは構成プロファイルでも通るわけがありません。

プロファイルを作成する時に、上記の方法でiPhoneから取得したID/PWを使ってやれば、きちんと動作するものができるんじゃね?と思ったんですが、単に生成プロファイルに埋め込むだけでなく一旦認証もしているようで、残念ながらID/PWが間違っているといわれて生成に進めませんでした。

またApple Comfiguratorで編集して正しく機能するプロファイルに更新しようとも思ったんですが、プロファイルが電子署名されているため書き換えNGでした。

結局のとろこ、上記の手順で

  • SSID「Wi2eap」の認証鍵はは構成プロファイルの情報でパスする
  • ID/PW認証はiPhoneから取得し、OSのWi-Fi設定に保存する

の二段階を踏む必要がありそうです。

一度設定してしまえば次からはなにもせずとも自動接続してくれるので実害はないですが、ともあれ公式手順やFAQをいくら眺めても辿り着けない方法が必要だったので共有しておこうと思います。

3Dプリント品(ASA-CF)にレーザー彫刻を施してユーザビリティを向上させた

ウチの3Dプリント品ショップでたぶん一番買われているのがこちらのクラウン/ハリアー用のスイッチサイズ変換アダプタです。

こちらで注文できます

TOYOTA新型クラウン/80ハリアー向けスペアホール→タイプDスイッチアダプター

TOYOTA新型クラウン/80ハリアー向けスペアホール→タイプDスイッチアダプター

参考価格: ¥1,800(別途消費税、送料がかかります)

在庫: あり

それがなにかはリンク先を読んでいただくとして、これに念願のレーザー刻印を入れましたという話になります。

本品は特に説明書などもつけていないので、最低限、

  • 向きがわかるようにサイドに▲マークをモールド
  • ゴミ分別や接着剤の適不適などの判断用n材質名
  • 問い合わせがあった時のために世代(バージョン)

を刻印してきました。特にサイズなどの微調整をよくするアイテムなので、バージョン管理はしっかりしておきたい。で、今までは3Dモデル自体に文字を刻印してたんですが、あまり解像度があげられません。

造形の向きやレイヤー高を工夫すればマシになできますが、それらはプロダクトの性能のために最適化しているので、刻印のためだけにいじりたくはないし、AMSでフィラメント自体の色を切り替えて文字やイラストを描く方法は造形時間がとんでもなく伸びるしフィラメントの無駄が出るしで、いずれにせよコスパやタイパが悪化します。

またいつか購入した当人以外の誰かがこれを目にした時に「なんじゃこりゃ?」ってなるかも知れないので、出自がわかるようURL入りのQRコードで詳細を調べられるようにしておきたいというのもありました。例えば今後これを装着した中古車が売買される機会も触れるでしょうし。しかしこのサイズでQRコードを3Dプリントするのは現実的ではありません。なので、テプラの強粘着テープを使って貼るようにしてみたんですが、ASA-CF(炭素繊維入りASA)だと表面がザラっとしてたり粉っぽかったりであっという間に剥がれてしまいました。

で、前々から関心のあったレーザー彫刻機(加工機)を使えば、こういうのにかなり小さい文字高でも刻めるんだろうなぁというところで、「3Dプリント品にロゴやユーザビリティ向上のための表示、サポート情報のQRコードなど入れる」というのがレーザー彫刻機を導入するモチベーションの1つとなりました。

当初、黒材料にレーザー刻印(焼いて焦がす)って文字も黒くなるから視認性低いんじゃ?とも思ったんですが、ChatGPTさんとかに聞いて「赤外線レーザーを使って白化とか発泡化を起こすから白くなる」ということがわかり、買うならIR機だなとも決めたりしました。実際に導入してみると、むしろ白を黒く焼くほうが大変ということなんかもわかってきましたが、これはまた別途検証して記事にします。

やってみたらスゴかった

で、まずはこの売れ筋かつ向きやサポートURLなどの情報が重要な「TOYOTA新型クラウン/80ハリアー向けスペアホール→タイプDスイッチアダプター」から着手。素材はASA-CFです。炭素繊維入りで、表面が少しザラっとしているというか凹凸があります。

写真はPLAですが、こんな感じのマトリクスをテストプレートに刻印して、どのくらいのパワーと速度で、どれくらいの色が付くかを調べます。右の4列がIRレーザー、左の6列がブルーレーザーです。

写真のPLA PROだとパワー60%、速度300mm/sが一番綺麗でしたが、ASA-CFだと80%、400mm/sが一番はっきり色が出る。60℃で溶けるPLAと違ってASA-CFは120℃とかなので強めにしないとってことでしょう。ただそれでもいまひとつハッキリ出ない。特にザラザラの凹み部分に色がついていない感じ。100%にしてもかわらず。色々試した結果、まぁまぁ強めの出力80%にしつつ、あまり焦げないようスピードを速めの1,500mm/sにする、これを3回繰り返す(3パス)というのがいい感じでした。

そして出来上がったのがこちら。

色は白というより黄色というかゴールドっぽい色味になります。むしろ映える。多少「Ver.6」の文字の左端が擦れる傾向がりますがまぁ一旦OKとしました。

小さなフォントもクッキリ出るので、情報量も増やせました。▲だけだとわかりづらかったので「UP」の文字も入れ、さらには前後わかるよう「▲DRIVER」という文字も追加(FRONTだと車両前方か運転席視点での前方(=車両後方)か多義的なので)。また「V5」といれていたバージョン番号もわかりやすく「Ver.6」にできました。SFメカのマーキングみたいでカッコ良いので写真も気合いいれて撮ってしましました。

さすがに残りのスペースにQRコードを入れるとかなり小さくてザラザラでドットがつぶれてしまうのと見た目にもゴチャつくので、そちらは反対側に入れることにしました。

いちど組み付けてしまえば全く目にしない場所ではあるのですが、施工時の作業性が上がったり、部品の由来を辿りたい人が出た時のガイドになればと思います。

■まとめ

大枚はたいて導入したレーザー刻印機ですが、まずは一番にやりたかったことができてひと安心です。

色はなぜか白にはなりませんが。こと黒フィラメントに限っていえばゴールドっぽくて生えるのでアリかなと思っています。

今後、他のフィラメント種類、色で最適値を見つけていって、他の製品にも適応していきたいと思います。さし当たって白材料が鬼門で、色々と裏技が必要ということがわかってきたので、次はそれについて書きたいと思います。

WooCommerceの商品情報をREST APIで取り出す

WordPress + WooCommerceプラグインでECショップを構築しました。このブログで紹介したオリジナル3Dプリント品を販売するサイトなので、こちらのブログ記事にもショップの当該アイテムページにリンクを貼りたい、それも画像入りカード形式でカッコ良くしたい、というのがゴール。

通常はWordPress同士ならoEmbedというOGPのようなヘッダー情報があり、WordPressのGutenbergエディタにURLをペーストするだけでカード形式になってくれます。しかしなぜか今回の2サイト間では上手くいかない。

こんな感じで「このコンテンツを埋め込めませんでした。」と出てカードに展開されません。

ChatGPTに言われたとおりにApacheの設定かえたり子テーマにPHPコード書いたり二日くらい格闘しましたが解決せず。JSONのエンドポイントをブラウザで開くとレスポンスコードが200できちんと表示されるのに、curlだと401になったり。

あきらめて前から活用しているPZLinkカードというプラグインを使うことも考えたのですが、こちらでも403になって取得できない。

次にEmbedlyというWebサービスベースのプラグインを入れて無事サムネ、タイトル、概要などは出るようになったんですが、iframeで描画されるのでCSSで詳細がカスタムできない。無料プランだとサービスロゴが表示されたりというのもやや気になります。

Geminiにプラグイン書いてもらう

ChatGPTの助言も堂々巡りで疲れ切っていた時、ふと「もう同じサーバー上にあるので、MariaDB(MySQL)のID/PWを使ってPHPで直接データ取得してカードをレンダリングするプラグインを自前で作ったれ、と閃きました。するとChatGPTもセカンドオピニオンとして聞いたGeminiも技術的に可能だと返答。加えてGeminiが「それもいいけど、WordPress(というかWooCommerce)にはREST APIで記事(商品情報)のメタデータを取得する機能がるから、そっち使うのも手だよ」と提案してきました。なるほど、そんないいものが。それなら(まずないけど)将来的にサーバーを分離しても取得できます。やりたいことを読み取って最適な別解も提示してくれるGeminiさん強い

ということで、そこからは主にGeminiを使ってショートコードプラグインを作ってみたので、ざっくり手順を記録しておきます。

利用イメージは、Gutenbergエディターのショートコードブロックに「[shop id="123"]」のように入れることでカード展開されるというスタイルです。「[shop id="123,124"]」と複数のIDを入れるとカードが連続で並ぶところまで改良してもらいました。

APIにアクセスする認証キーを発行する

まずは読み出される側(ソース)のWordPressの管理画面を開き、WooCommerceプラグインの設定画面から「高度な設定」→「REST API」を開いて、「キーを追加」で発行します。今回は商品情報を参照するのみなので、権限を「Read」にしておけば万一キーが漏洩しても情報を書き換えられないのでお勧めです。

最終的に、Consumer KeyとConsumer Secretという2つの文字列が生成されるので、どこかにコピペしてメモっておきます(再表示できません)。

curlコマンドで動作チェック

商品IDを調べる

特定の商品を参照するID番号を調べます。WooCommerceの商品一覧で赤丸の箇所に表示されるのが商品IDです。

WindowsやMacの黒画面から以下を叩きます。

123が商品ID、cunsumer_keyとconsumer_secretはさきほど作成したものに置き換えてください。

StatusCode:200とかJSONデータが返ってくれば成功です。黒画面だと途中までしか見られませんが、ちゃんと価格や在庫情報なども含まれています。これを読み込んでカードHTMLをレンダリングするプラグインを作っていきます。

認証キーを安全な場所(wp-config.php)に記述

プラグインのソースコードにREST API認証キーを直書きするのはセキュリティ的に危険なので、通常Web経由でアクセスできない場所にあるwp-config.php内に定義して、それをプラグインから読み出すようにします。具体的には以下の形式で記述。

wp-config.phpはたぶんWordPress上からは読み書きできないので、シェルでサーバーにログインするか、FTP/SFPTで一旦ダウンロードして編集します。書き込み権限も削ってあると思うので、一時的にchmod +wする必要もあるでしょう。編集が終わったら-wも忘れずに。

WC_EXTERNAL_API_HOSTNAMEは便宜上ホスト名としていますが、もしWordPressがサブディレクトリにインストールされていたら、そのパスも書く必要があると思います。

プラグインのフォルダとファイルを作成

/wp-content/plugin/フォルダ下にshop-item-linkというフォルダを作ります。これがプラグイン名になります。さらに同じ名前でphpファイルshop-item-link.phpという名前で以下のコードをコピペして保存します。

HTMLレンダリングブロックは適宜書き換えてください。

編集ポイント

6行目のAuthorは適当に自分の名前に書き換えます。

17行目の第一引数の「shop」が実際に使用するショートコードになります。

46~48行目がwp-config.phpに定義した認証キーとホストネーム情報を読み込むところです。大文字部分を1字たりとも相違なくあちらと揃える必要があります。

66行目でカードよりも前に1回だけ出力したいHTML(この場合は見出し)を定義しています。

151~170行目あたりがカードのHTMLです。面倒くさいのでスタイルシートも直書きしてますが、カードを繰り返したくさん出力するならきちんとCSSファイルで定義するべきでしょう。

また元々Geminiが生成したコードでは取得内容を1時間キャッシュする仕様だったんですが、ウチの場合は必要ないし、むしろ価格や在庫はリアルタイムに反映してほしいので無効化してあります。ところどころにその残骸があるかも。

ともあれ、これで、[shop id="998,999"]などと書くだけで、

こちらで注文できます

TOYOTA新型クラウン/80ハリアー向けスペアホール→タイプDスイッチアダプター

TOYOTA新型クラウン/80ハリアー向けスペアホール→タイプDスイッチアダプター

参考価格: ¥1,800(別途消費税、送料がかかります)

在庫: あり

セキュリティカメラAnker Eufy SoloCam S340用雨樋/ポールマウント

セキュリティカメラAnker Eufy SoloCam S340用雨樋/ポールマウント

参考価格: ¥2,273(別途消費税、送料がかかります)

在庫: あり

が出るようになりました。