2020年4月5日日曜日

SIM フリーモバイルルーターを購入してギガトラ Wifi を使ってみた

概要

無事どんなときもWifiを解約できたので次の Wifi を何にしようか考えたところ SIM フリーなモバイルルータを購入して SIM を自由に選べたほうが今後のことを考えると良いかなと思い SIM フリールータを購入しました
SIM もいろいろ悩んだのですがとりあえず繋ぎということもあり安さとコロナの影響を鑑みてギガトラWifiの 100GB プランにしました
ルータの購入方法、SIM の購入方法から実際にルータに SIM を挿入して設定する方法まで紹介します

環境

購入した SIM フリーモバイルルーター

ac785
NETGEAR WiFi LTE モバイルルーター SIMフリー 802.11 a/b/g/n グローバル対応 AirCard AC785-100JPS

執筆時点では 9864 円でした
これを購入し翌日届きました

ギガトラWifi 申し込み

必要なのはクレジットカードと免許証の電子データになります
ここから申し込みを行います
クーポンコードはネットで適当に探しました
その時々でいろいろなクーポンがあるので一番良さそうなのを選択しましょう
自分は初期費用が 1000 円になる+月額費用が 2990 円 (3289 円) になるクーポンを使いました
ただしこのクーポンは SIM のみを申し込む場合にのみ有効なようです

あとは登録者情報とクレジットカード情報、免許証の電子データをアップロードして申し込み完了です

あとでメールが来るので確認しましょう
メールに記載のマイページですぐにログインすることができます

ギガトラバリアとウイルスセキュリティを解約する

不要な方は解約しましょう
解約は直接連絡するしかないようです
マイページから問い合わせフォームが使えるのでそこから連絡すれば OK です

到着まで

  • 2020/04/02 ルータ注文
  • 2020/04/02 申し込み
  • 2020/04/03 ルータ到着
  • 2020/04/04 メールにて発送連絡あり
  • 2020/04/05 SIM 到着

ポストに投函で届きました

中身は SIM のみです

ルータセットアップ

では SIM とルータを使ってセットアップしましょう

まずは開封します
同梱物は以下の通りでした
バッテリーは外れた状態で送られてくるので取り付けます

こんな感じで取り付けます
へこみがあるので表裏や向きで間違えることはないと思います

電源を ON にしましょう
画面の右側が電源ボタンになります
3 秒ほど長押しすると電源 ON になります

電源が付くとデフォルトの SSID/PW が表示されます
PW は平文なので多少注意が必要です

APN 設定

電源が ON になったらデフォルトの SSID の「NTGR-xxx」で始まる Wifi にアクセスします
すると以下のような管理画面 (http://192.168.1.1/index.html) が開くのでここでギガトラ Wifi の APN を設定していきます
まずはサインインします
「password」という安直なパスワードで管理画面にサインインできるのでサインインします

そして「設定」->「ネットワーク」->「APN」に移動します
APN の追加画面になったら入力する内容は以下の通りです

  • 名前・・・Gigatora
  • APN・・・plus.4g
  • ユーザ名・・・plus
  • パスワード・・・4g
  • 認証・・・PAP or CHAP
  • PDP・・・IPv4
  • PDPローミング・・・無し

入力したら右にある「+」ボタンを必ず押しましょう
そうしないと APN プロファイルが追加されません

更に追加しただけだとダメでプロファイルを選択しなければいけません
チェックボックスを新規で追加したプロファイルに変更して OK です

SIM 取り付け

APN が設定できたら一度電源を OFF にして SIM を取り付けます
電源 OFF は ON のとき同様に長押しで OK です

SIM は「microSIM」のサイズになるのでそのサイズになるように外します
ちなみに SIM と SIM の変換サポートは返却必須なので捨てずに取っておきましょう

再度バッテリーを外すと SIM が取り付けられます
これが少し難しかったのですが横からスライドさせるように挿入します

ちゃんと入ると以下のようになります

SIM が入ったら電源を再度入れましょう
すると SIM を認識して再起動が促されるので電源ボタンの右隣のボタンを押して再起動しましょう

再起動が完了して右上のキャリア表示が Softbank になれば OK です
うまく接続できない場合は APN の設定を再度確認するか SIM の向きが間違っているので確認しましょう

SSID を変更する

左メニューの WIfi から設定変更可能です
念の為変更しておくことをおすすめします

あとは管理者パスワードなども変更しておくと良いかなと思います

最後に

NETGEAR の SIM フリーモバイルルータ+ギガトラ SIM を使って 100GB のモバイルルータをセットアップしてみました

APN の設定が少し大変ですがそれ以外は特に難しくないかなと思います
SIM フリールータなので容量が足りなければ別の Wifi サービスと契約すればいいので便利かなと思います
もしくは 100GB でも更に安いプランが見つかればそちらに移動するのも簡単にできるかなと思います

契約するときに「SIM のみ」にするのを忘れないようにしましょう

2020年4月4日土曜日

どんなときもWifi を解約しました

概要

9 ヶ月ほど使ったどんなときもWifi を解約しました
解約のやり方や解約にかかった費用など紹介します

環境

  • どんなときもWifi d1 ルータ

辞めた理由

2020/02 から発生した障害が 2020/04 になっても続き全く使えない状態になってしまったので解約しました
どうやら一部のユーザに対して 4/1 より 60kbps の帯域制限をかけているようです
SIM は掴むものの帯域制限により全く使えない状況になったというわけです

補償プランについて

4/3 にメールで連絡が来ました

通信制限をかけている利用者に以下の措置が取られるようです
要約すると以下の通りかなと思います

  • 25GB 制限しか使えない
  • 2 年縛りの更新月まで「無料」
  • 25GB 以上使ってしまい他のサービスを使わざるを得ない場合は 1 万円まで補償 (1 度だけ)

メールの内容が複雑すぎてよくわからない点もあったので間違っていたらすいません
上記のようなウソがマコトかよくわからない補償プランの連絡が来ました
補償プランの適用は 4/4 13 時からのようです

「無料」で 25GB 使えるルータがもらえたと思えば儲けもののような気がしますがこれまでの経緯などを踏まえて急に補償プランが変更される可能性もゼロではないと考えると不安しかないので自分はすっぱり解約しました

違約金は

本来であればどんなときもWifi は 2 年縛りです
しかし先程紹介した障害の影響で 4/4 に設置されたフォームから解約依頼をすれば違約金なしで解約することができました
ただしこのフォームはメールが送られた制限対象者でなければ使えないようです

(そもそもいつ解約しても違約金が出ないのが自然なのですが)

なので今回は違約金 0円 で解約しています
また 3, 4 月分の料金も無料になるようです (執筆時点では管理画面ではまだ反映されていなかったので未確認、後日カードの請求を見て確認予定)

d1 ルータを返却

過去に一度壊れて送った方法と同じやり方です
宅急便をスマホで送るやり方であれば追跡番号もあり安価で済みます

所感

一応書き留めておきます
今回は事情が事情なので執筆時点とは状況が異なっている可能性があるのでご注意ください

  • クラウドSIM 系のサービスはおそらくユーザが増えれば増えるほど今回のような障害に必ずぶち当たると思う
  • 無制限をうたってはいるが実際に無制限な Wifi サービスは存在しない、必ず速度制限などが入り使いづらくなる
  • d1 (u2s) というルータがとにかく使いづらかった
    • 最大接続台数が 5 台しかない
    • 管理画面からルータの再起動ができない

正直 Good な点はほとんどありませんでした
契約当時は本当に制限なく使えていたのでそれくらいかなと

最後に

どんなときもWifi を解約しました
次は固定回線 (Nuro光) を引く予定なので工事など完了して引けたらその方法も紹介したいと思います

2020年4月2日木曜日

terraform graph を使って tfstate からサーバ構成図を出力してみた

概要

terraform には graph というサブコマンドがありこれを使うとインフラの構成を図にすることができます
今回は AWS 上にインスタンスを作成してそれを terraform graph で構成図にしてみました

環境

  • macOS 10.15.4
  • terraform 0.12.9
  • aws provider 2.55.0

AWS に適当にインスタンスを作成

過去に紹介した記事と同様に aws に 1 台インスタンスを作成しましょう

graphviz のインストール

  • brew install graphviz

terraform graph で構成図を出力してみる

  • terraform graph | dot -Tpng > graph.png
  • open graph.png

でこんな感じの構成図が出力できました

meta.count-boundary なんちゃらみたいなやつは表示されてしまうようです
https://github.com/hashicorp/terraform/issues/20063

brast-radius も良さそう

更にビジュアライズできるツールとして blast-radius というツールもあるようです
こちらは色も付くので更に見やすくなりそうです
https://github.com/28mm/blast-radius

最後に

terraform graph を試してみました
tfstate があれば graphviz を使って簡単に構成図を出力できるのは嬉しい点かなと思います

2020年4月1日水曜日

rbvmomi を使って CloneVM_Task 時に VM をカスタマイズする方法

概要

VM をクローンするときにカスタマイズ機能を使うと VM 内のホスト名や IP の固定化ができます
今回は rbvmomi を使って CloneVM_Task でホスト名をカスタマイズする方法を紹介します

環境

  • vSphere vCenter 6.5.0 9451637
  • CentOS 7.7.1908
  • Ruby 2.5.5p157
  • rbvmomi 2.3.1

とりあえず CloneVM_Task してみる

まずは普通に CloneVM_Task する方法を確認してみます
ちなみに今回、クローン元の VM は Ubuntu16.04 を使用しています

require 'rbvmomi'

vim = RbVmomi::VIM.connect(
  host: '192.168.100.10',
  user: 'administrator@vsphere.local',
  password: 'xxxxxxxxxxxx',
  insecure: 'true',
  rev: '6.7.1'
)

dc = vim.serviceInstance.find_datacenter('dc') || fail('datacenter not found')
vm = dc.find_vm('u16') || fail('VM not found')

# Create config spec and relocate spec
config_spec = RbVmomi::VIM.VirtualMachineConfigSpec(
  :annotation => 'vm clone'
)
relocate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec

# Create clone spec
spec = RbVmomi::VIM.VirtualMachineCloneSpec(
  :config => config_spec,
  :location => relocate_spec,
  :powerOn => false,
  :template => false
)

# Start clone vm
vm.CloneVM_Task(
  :folder => vm.parent,
  :name => 'clone',
  :spec => spec
).wait_for_completion

ポイント

CloneVM_Task する際には VirtualMachineCloneSpec というパラメータが必要になります
また VirtualMachineCloneSpec には更にいろいろな spec を設定することができそれによりクローンする VM のネットワークやストレージの構成、サマリ情報などを変更することができます
今回はとりあえず同じスペックの VM で名前が異なる VM をクローンします
クローン先は vm.parent を指定しておりこうすることでクローン元と同じディレクトリにクローンすることができます

カスタマイズを利用して CloneVM_Task 時に hostname を変更する

次に本題であるカスタマイズ機能を作ってみたいと思います

require 'rbvmomi'

vim = RbVmomi::VIM.connect(
  host: '192.168.100.10',
  user: 'administrator@vsphere.local',
  password: 'xxxxxxxxxxxx',
  insecure: 'true',
  rev: '6.7.1'
)

dc = vim.serviceInstance.find_datacenter('dc') || fail('datacenter not found')
vm = dc.find_vm('u16') || fail('VM not found')

config_spec = RbVmomi::VIM.VirtualMachineConfigSpec(
  :annotation => 'vm clone'
)
# Create nic spec
nic_setting = RbVmomi::VIM.CustomizationAdapterMapping(
  :adapter => RbVmomi::VIM.CustomizationIPSettings(
    :ip => RbVmomi::VIM.CustomizationDhcpIpGenerator
  )
)
# Create LinuxPrep
linux_prep = RbVmomi::VIM.CustomizationLinuxPrep(
  :domain => 'localdomain',
  :hostName => RbVmomi::VIM.CustomizationFixedName(
    :name => 'clone'
  )
)
# Create ip setting with nic spec and LinuxPrep
ip_settings = RbVmomi::VIM.CustomizationGlobalIPSettings
customization_spec = RbVmomi::VIM.CustomizationSpec(
  :globalIPSettings => ip_settings,
  :identity => linux_prep,
  :nicSettingMap => [nic_setting]
)
relocate_spec = RbVmomi::VIM.VirtualMachineRelocateSpec

# Create clone spec customizing mode
spec = RbVmomi::VIM.VirtualMachineCloneSpec(
  :config => config_spec,
  :customization => customization_spec,
  :location => relocate_spec,
  :powerOn => true,
  :template => false
)

# Start clone
vm.CloneVM_Task(
  :folder => vm.parent,
  :name => 'clone',
  :spec => spec
).wait_for_completion

ポイント

VirtualMachineCloneSpec に先程設定しなかった :customization を設定します
:customization には CustomizationSpec を設定します
そして CustomizationSpec にホスト名とネットワークをカスタマイズするためのスペックを設定します
今回はネットワークに関しては特に何も設定しないので情報は CustomizationGlobalIPSettingsCustomizationAdapterMapping はとりあえず作っているだけという感じです
ホスト名を変更するためには CustomizationLinuxPrep を使います
:hostName のフィールドに CustomizationFixedName を使うことで VM 内のホスト名を変更することができます

動作確認

実行して VM が起動するとホスト名の部分が指定したものに変更されているのが確認できると思います
実際にコンソールや ssh で確認してもホスト名が変更されているのが確認できると思います

最後に

rbvmomi を使って CloneVM_Task のカスタマイズ機能を使ってみました
Hashicorp 社の terraform で使われている terraform-provider-vsphere などでこの機能は使われいるようです
また VM のカスタマイズは実際は perl スクリプト (Customize.pl ?) が実行されているようです
カスタマイズ後に削除されてしまうようですが中身がどんなものか実際に見てみていものです

参考サイト

2020年3月31日火曜日

ffmpeg で mkv ファイルを連結する方法

環境

  • macOS 10.15.4
  • ffmpeg 4.0.2

連絡する mvk ファイルが記載されているリストファイル作成

  • vim list.txt
file '/Volumes/buffalo/dir/title00.mkv'
file '/Volumes/buffalo/dir/title01.mkv'
file '/Volumes/buffalo/dir/title02.mkv'
file '/Volumes/buffalo/dir/title03.mkv'
file '/Volumes/buffalo/dir/title04.mkv'
file '/Volumes/buffalo/dir/title05.mkv'
file '/Volumes/buffalo/dir/title06.mkv'
file '/Volumes/buffalo/dir/title07.mkv'
file '/Volumes/buffalo/dir/title08.mkv'
file '/Volumes/buffalo/dir/title09.mkv'
file '/Volumes/buffalo/dir/title10.mkv'
file '/Volumes/buffalo/dir/title11.mkv'
file '/Volumes/buffalo/dir/title12.mkv'

連結

  • ffmpeg -f concat -safe 0 -i list.txt -c copy titles.mkv

2020年3月24日火曜日

PA-API5.0 を Ruby の vacuum というライブラリを使ってコールしてみた

概要

Product Advertising API 5.0 (PA-API5.0) を vacuum で試してみました
ちなみに amazon-ecs では 5.0 に対応しておらずコールすると HTTP Response: 503 Service Unavailable - AWS Access Key ID: AKIxxxxxxxxxxxxxxxxx. You are submitting requests too quickly. Please retry your requests at a slower rate. になってしまいます

環境

  • macOS 10.15.3
  • Ruby 2.6.2p47
  • vacuum 3.3.0

初期化する

まずは初期化します
初期化するには最低 3 つの認証情報が必要で「アクセスキー」「シークレットキー」「パートナーID」が必要になります
「パートナーID」はいろいろな値を設定できますが個人で使う分にはトラッキング ID を指定すれば OK です

require 'vacuum'

request = Vacuum.new(
  marketplace: 'jp',
  access_key: 'AKIxxxxxxxxxxxxxxxxxx',
  secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  partner_tag: 'store-99'
)

こんな感じで OK です
また marketplace は検索する国を選択できます
指定可能な国はこちらを参照してください

とりあえず検索してみる

初期化できたら検索してみましょう
search_items メソッドが簡単です

require 'vacuum'
require 'json'

request = Vacuum.new(
  marketplace: 'jp',
  access_key: 'AKIxxxxxxxxxxxxxxxxxx',
  secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  partner_tag: 'store-99'
)

response = request.search_items(title: '3Dプリンタ')
puts response.to_h.to_json

その名の通り title: を指定するとキーワードが含まれるタイトルの商品を取得します
結果はハッシュにすると扱いやすいです

単語で検索する

次に複数のキーワードで検索してみます
また API で取得する情報も指定したいと思います

require 'vacuum'
require 'json'

request = Vacuum.new(
  marketplace: 'jp',
  access_key: 'AKIxxxxxxxxxxxxxxxxxx',
  secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  partner_tag: 'store-99'
)

response = request.search_items(
  keywords: '3Dプリンタ',
  resources: %w[Images.Primary.Medium ItemInfo.Title]
)
puts response.to_h.to_json

複数のキーワードを指定する場合は keywords: を指定します
タイトル以外も検索対象になります
API でほしい情報を増やしたい場合は resources: を指定します
search_items メソッドで指定可能なリソースはこちらを参考にしてください

これで結果を取得すると画像 (Images) やタイトルの情報 (ItemInfo) が追加されています

{
  "SearchResult": {
    "Items": [
      {
        "ASIN": "B07KT611TM",
        "DetailPageURL": "https://www.amazon.co.jp/dp/B07KT611TM?tag=store-99&linkCode=osi&th=1&psc=1",
        "Images": {
          "Primary": {
            "Medium": {
              "Height": 160,
              "URL": "https://m.media-amazon.com/images/I/413w1hy-yIL._SL160_.jpg",
              "Width": 160
            }
          }
        },
        "ItemInfo": {
          "Title": {
            "DisplayValue": "3Dプリンタ 本体 完成品 小型 家庭用 3Dプリンター 組立て済み 軽量 コンパクト PLAフィラメント 造形サイズ
11×11×12.5cm 日本語マニュアル&日本語メニュー 初心者 (薄い青)",
            "Label": "Title",
            "Locale": "ja_JP"
          }
        }
      }
      ・・・

Items の長さは

どうやら一回の検索で上位 10 個まで取得できるようです

  • bundle exec ruby app.rb | jq . > log
  • cat log | jq '.SearchResult.Items|length'

=> 10

最大で 10 個のようで 1 から 10 までは変更可能ですが 10 以上は指定できないようです (ItemCount)

ソートしてみる

sort_by: を使います
指定可能なパラメータはこちらを参照してください

require 'vacuum'
require 'json'

request = Vacuum.new(
  marketplace: 'jp',
  access_key: 'AKIxxxxxxxxxxxxxxxxxx',
  secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  partner_tag: 'store-99'
)

response = request.search_items(
  keywords: '3Dプリンタ',
  resources: %w[Images.Primary.Medium ItemInfo.Title],
  sort_by: 'AvgCustomerReviews'
)
puts response.to_h.to_json

指定しない場合は Marketplace (jp) と SearchIndex (All) との組み合わせでいい感じに返してくれるようです
Featured などはランクが高い商品で並べ替えできるので使えそうです
というか何も指定しないと Featured と同じ挙動っぽいです

カテゴリを指定する

キーワード+カテゴリ検索はよく使うと思います
カテゴリを指定するには search_index: を使います
が指定する値を取得するには一旦 resources:SearchRefinements を指定して指定可能なカテゴリの一覧を取得する必要がありそうです

require 'vacuum'
require 'json'

request = Vacuum.new(
  marketplace: 'jp',
  access_key: 'AKIxxxxxxxxxxxxxxxxxx',
  secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  partner_tag: 'store-99'
)

response = request.search_items(
  keywords: '3Dプリンタ',
  resources: %w[Images.Primary.Medium ItemInfo.Title SearchRefinements],
)
puts response.to_h.to_json

すると以下のように検索対象だったカテゴリの一覧が取得できます

"SearchRefinements": {
  "SearchIndex": {
    "Bins": [
      {
        "DisplayName": "産業・研究開発用品",
        "Id": "Industrial"
      },
      {
        "DisplayName": "本",
        "Id": "Books"
      },
      {
        "DisplayName": "Kindleストア ",
        "Id": "KindleStore"
      },
      {
        "DisplayName": "パソコン・周辺機器",
        "Id": "Computers"
      },
      {
        "DisplayName": "ホーム&キッチン",
        "Id": "HomeAndKitchen"
      },
      {
        "DisplayName": "DIY・工具・ガーデン",
        "Id": "ToolsAndHomeImprovement"
      },
      {
        "DisplayName": "洋書",
        "Id": "ForeignBooks"
      },
      {
        "DisplayName": "家電&カメラ",
        "Id": "Electronics"
      },
      {
        "DisplayName": "文房具・オフィス用品",
        "Id": "OfficeProducts"
      },
      {
        "DisplayName": "おもちゃ",
        "Id": "Toys"
      },
      {
        "DisplayName": "ホビー",
        "Id": "Hobbies"
      },
      {
        "DisplayName": "Android アプリ",
        "Id": "MobileApps"
      },
      {
        "DisplayName": "その他すべて",
        "Id": "EverythingElse"
      },
      {
        "DisplayName": "ビューティー",
        "Id": "Beauty"
      },
      {
        "DisplayName": "服&ファッション小物",
        "Id": "Apparel"
      },
      {
        "DisplayName": "ドラッグストア",
        "Id": "HealthPersonalCare"
      },
      {
        "DisplayName": "車&バイク",
        "Id": "Automotive"
      },
      {
        "DisplayName": "大型家電",
        "Id": "Appliances"
      },
      {
        "DisplayName": "スポーツ&アウトドア",
        "Id": "SportsAndOutdoors"
      },
      {
        "DisplayName": "ベビー&マタニティ",
        "Id": "Baby"
      },
      {
        "DisplayName": "シューズ&バッグ",
        "Id": "Shoes"
      },
      {
        "DisplayName": "ジュエリー",
        "Id": "Jewelry"
      },
      {
        "DisplayName": "ペット用品",
        "Id": "PetSupplies"
      },
      {
        "DisplayName": "デジタルミュージック",
        "Id": "DigitalMusic"
      },
      {
        "DisplayName": "TVゲーム",
        "Id": "VideoGames"
      },
      {
        "DisplayName": "楽器",
        "Id": "MusicalInstruments"
      },
      {
        "DisplayName": "PCソフト",
        "Id": "Software"
      }
    ],
    "DisplayName": "カテゴリー",
    "Id": "SearchIndex"
  }
}

これで取得できた Id の部分を指定することで検索時にカテゴリを指定することができます

require 'vacuum'
require 'json'

request = Vacuum.new(
  marketplace: 'jp',
  access_key: 'AKIxxxxxxxxxxxxxxxxxx',
  secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  partner_tag: 'store-99'
)

response = request.search_items(
  keywords: '3Dプリンタ',
  resources: %w[Images.Primary.Medium ItemInfo.Title SearchRefinements],
  search_index: 'Industrial'
)
puts response.to_h.to_json

2 ページ目を取得する

1 - 10 件目がデフォルトで取得できますが 11 - 20 件目は item_page: を指定します

require 'vacuum'
require 'json'

request = Vacuum.new(
  marketplace: 'jp',
  access_key: 'AKIxxxxxxxxxxxxxxxxxx',
  secret_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
  partner_tag: 'store-99'
)

response = request.search_items(
  keywords: '3Dプリンタ',
  resources: %w[Images.Primary.Medium ItemInfo.Title],
  item_page: 2
)
puts response.to_h.to_json

最後に

vacuum というライブラリを使って PA-API5.0 をコールしてみました
4.0 は完全に使えなくなり 5.0 になっているので 503 エラーが出る人は 5.0 に移行できているか確認しましょう
また 5.0 からいろいろと仕様が変更されており Amazon Product Advertising API は Amazon アフィリエイトで売上がある程度あるアカウントでないと使えなくなっているようです
細かい仕様はわかりませんが単純に登録してすぐは API が使えないようです

まぁ確かに売り上げがないアカウントに API を提供しても効果はなさそうなので間違っていない気はしますが、、
一応問い合わせすることができるのでコール時にエラーになる人は問い合わせてみるのも手かもしれません

参考サイト

2020年3月21日土曜日

PLA で印刷ミスした部分をハンダゴテで修復してみた

概要

3D プリンタで印刷した場合にオーバハングや反り返り、細かい印刷などによりフィラメントがグチャグチャになることがあると思います
過去に紹介した記事ではそうならないように上手に印刷する方法を紹介しました
それでも印刷ミスすることはあります
そんな場合にどうやったら簡単に修正できないかなと思いいろいろ調べると Retouch3D という商品を見つけました
これが手に入れば一番なのですが価格も結構高くまた海外製品なので到着まで時間がかかったりします
よく見ると構造としては熱で溶かして再形成しているっぽくそれではハンダゴテはどうだろうと思い試してみました

この記事では試した結果とハンダゴテを使って PLA の印刷ミスを修正する際のポイントなどについて紹介したいと思います

使用するハンダゴテ

手元にあった白光REDを使います
またコテ先は完全にハンダ用としては使えなくなるので注意してください
自分は変えのコテ先が 1 つあったので 1 つを完全に 3D プリンタ用として使うようにしました

コテ先についているハンダをスポンジや金網で落としましょう
だいたい落ちれば大丈夫です
コゲが残っている場合は PLA を修復した場合にコゲが PLA 側に付着して印刷物が汚くなる可能性があります
事前にヤスリなどでコゲを落としておくと良いかなと思います
あとで紹介しますが自分はそれに気づかず最初に PLA を修復した際にコゲが結構付着してしまいました、、

修復するプリント物

大きさ的には 10cm ほどのレールになります
前後の部分がオーバハングでほつれているのが確認できます
これを修復してみたいと思います

作業中は要換気

先に記載しておきます
作業中は PLA を溶かすため PLA 特有にニオイが発生します
また多少の煙も出るので換気しながら行いましょう
また長時間の作業は気分が悪くなるかもしれないので適度に休憩しながら行ってください

いざ修復

どきどきですがやるしかないのでやっていきます
白光レッドは 300度あたりまで温度が上昇するので PLA はあっという間に溶けてしまいます
なので押し付ける感じではなく「撫でる」ように修復するのがポイントです

ちょっとやってみた感じ

更に気になるところを修復した感じ
このあたりで気づきましたがコゲがだいぶ付着しています、、

反対側もやっていきます
元々こんな感じだったのが

こんな感じになりました
この写真で見るとコゲのせいでひどくなっている感じもしますがほつれの部分はなくなりつるつるになっています

とりあえず 1 つ完成

まずは 1 つやってみました
コゲが気になりますがほつれはほぼなくなりました

修正後はどうやらテカテカになるようです
元のプラスチックっぽい感じではなく溶けて固まったブラスチックのようになります
もしかすると 3Dプリントのように急冷しながらやれば元の質感になるかもしれません

自分はファンを使って冷やしました

修復中は PLA がぶよぶよの状態になります
すぐに固めたい場合はファンなどを使うと簡単に固まります

ハンダゴテの温度にもよりますが先程紹介したように急冷しながらやるとキレイに仕上がるかもしれません

はみ出した部分はカッターやハサミでカットすると良い

これも経験からの判断ですが修復は PLA を溶かして平らにしているためはみ出すことがあります
はみ出した部分を元の部分にまた戻そうとすると更に溶けて今度は印刷物の本体に多大な影響をもたらすことがあります
なのではみ出した部分はもう触れずにあとでカッターやハサミでカットするほうが最終的にはキレイな仕上がりになる印象です

ちなみにカッター方式にして再度修正したら以下のようになりました

他の 3 つもやってみた

同じように失敗したレールが 3 つほどあったので同じ用に修復してみました
結果は以下の通りです

最初の修復に比べてだいぶコゲがなくなっているのが確認できます
修復中にコテ先のコゲがなくなり後でやった印刷物の修復はキレイに仕上がるようです

ブヨブヨ中は簡単に変形できる

コテでいろいろと温めていると修復部分全体がブヨブヨな状態になってきます
その間は正直手でも形を変形することができます (当然熱いですが)
その間はハサミでチョキチョキ切ることもできたので形を整えやすい気もしました
なので敢えてブヨブヨの状態を作ってハサミで一気に整形するのも手段としてはありかなと思いました

もうちょっとすごい手段としてレンジなので全体を温めて一気に整形するのもありなのかもしれません
ただドロドロになったら終わりなのであまりオススメはしませんが

修復すると造形物は小さくなる

当然ですが溶かす -> カットという流れになるので元の造形物よりは小さくなります
ジョイント部分などミリ単位で設計していた造形物の場合は修復しすぎて小さくなりすぎないように注意する必要があります

サポートや失敗したフィラメントは取っておく価値がでてきた

作業中に気がついたのですがインフィルが大きい場合にはすぐに空洞部分が出現してしまいます
そうなった場合に周りのフィラメントを再度溶かして持ってこようとすると修復範囲も広がってしまい元の造形物を更に痛めてしまう可能性が出てきてしまいます

なのでそういった場合にはサポートでいらなくなったフィラメントや失敗した造形物のフィラメントを使いましょう
具体的には穴を埋めたい部分くらいにフィラメントをカットしその上から軽くハンダゴテを押し当てて穴を埋めるようにしましょう
こうすることで元の造形物の大きさを小さくすることなく穴を埋めることが可能です

またこれが嬉しいのは失敗したフィラメントを再利用できることかなと思います
せっかく消費したフィラメントを捨てるのがもったいなと思っていたので

コテ先をカッター上のものに変更すると更にキレイに仕上がると感じた

ハンダゴテのコテ先はいろいろな形状に変更できることが多いです
例えばヒートナイフ (参考 (Zacro 6 in 1電子はんだごて セット 半田 温度調節可能(200~450℃)5個交換コテ先付き 60W 110V)) のようなものを使えば更にキレイにカットや平にできるかなと思います
自分は調べてないですが 100円ショップでもこういったコテ先が買えるかもしれません

最後に

PLA で印刷ミスした部分をハンダゴテを使って修復する方法を紹介しました
前は削って対応していましたが削るよりも簡単かつキレイにできるかもしれません
ただ修復後の質感がテカテカになってしまうのでそこは注意が必要かもしれません

機会があればコテ先を変えたり急冷しながらやってみた結果も紹介できればなと思っています
せっかく頑張って作った造形物なのでキレイにしてあげたいですね