ゆるふわキャンパー

ゆるふわキャンパー

このブログは読むと思わずキャンプに行ってみたくなってしまう楽しいキャンプノウハウをわかりやすく紹介するわけではなく、技術ネタ中心でたまに酒と釣りの話をします。

Gmail メッセージを全部取得して集計する
gmail

Gmail メッセージを全部取得して集計する

Gmail にメールがたくさん溜まっているので多い順に削除すれば結構容量空くんじゃないか?と思い全メールアドレスを集計しようと思いました、が、Gmail にそのような機能 (受信数多い順に集計する等) はなかったので Gmail API で自前で集計してみました。 最初は Google Apps Script でやろうとしたのですが、スクリプトの実行時間 6 分という制限があり、数万件のメールを集計するのは不可能だったので、最終的には Python でスクリプトを作成しました。 Gmail API を使用する準備 事前に GCP にログインして、 Gmail API の有効化、OAuth 同意画面の作成、認証情報の作成を行う必要があります。 認証情報の作成時に credentials.json が取得できるのでこれを使用してトークンを取得し、トークンを使用して Gmail API を呼び出す、という流れになります。 この辺の流れは以下のクイックスタートを実行するだけです。 Python のクイックスタート | Gmail | Google for
4 min read
無料で ChatGPT に URL を渡して内容を読んでもらう
chatgpt

無料で ChatGPT に URL を渡して内容を読んでもらう

以前書いた通り、家族の LINE グループから ChatGPT を利用できるようにしています。 ChatGPT API を使って LINE ボットを作成した少し前ですが ChatGPT API が公開されました。 以前から ChatGPT をいい感じに使いたいな〜と思っていて、ちょうど実家に帰った際に最近の AI は凄いぜ!的な話をしており、LINE の家族グループに「ボットくん」として参加させてみることを思い立ったというのがやってみた経緯です。 大まかな構成 使用する主要な各サービスは以下です。 * LINE Messaging API * API Gateway * Lambda * DynamoDB * ChatGPT API ざっくりとした図ではこんな感じ。 LINE の Messaging API を使用すること…ゆるふわキャンパーLorentzca 今回、このボットに URL を渡すと内容を読んでくれる機能を追加しました。 なるべく課金しない方法を探す ChatGPT
3 min read
ChatGPT API を使った Alexa Skill を作成した
chatgpt

ChatGPT API を使った Alexa Skill を作成した

我が家には Amazon Echo が 4 台あり、主に家電の操作と音楽の再生、天気予報の確認、Amazon で注文した荷物の確認に使用しています。 あと地味に便利なのがタイマー機能で、「ラーメンタイマー 3 分開始して」「卵タイマー 9 分開始して」のように並行して複数のタイマーに名前をつけて使用できるので、料理のお供に使用しています。 それ以外だとたまーに「今日は何の日?」みたいに暇つぶしで呼びかけるくらい。でもあまり自由な会話はできないのですぐ飽きちゃうんですよね…。いや十分便利なのでいいんですが…。 そこで、以前 LINE 経由で使えるチャットボットを作成した時と同じように、Echo でも使えたら便利かもしれないと思い、やってみました。 ChatGPT API を使って LINE ボットを作成した少し前ですが ChatGPT API が公開されました。 以前から ChatGPT をいい感じに使いたいな〜と思っていて、ちょうど実家に帰った際に最近の AI は凄いぜ!的な話をしており、LINE の家族グループに「ボットくん」
9 min read
RawLow Mountain Works の Nuts Pack と連結できるウエストベルトを自作した
myog

RawLow Mountain Works の Nuts Pack と連結できるウエストベルトを自作した

子供が生まれてから、土日に自分や妻の実家へ泊まりで出かけることが多いです。そんな小旅行に非常に使いやすいバックパックとして ULA の Dragonfly を愛用しています。 Robic DragonflyThe ULA Robic Dragonfly is a pack that will take you flying through your travels! Designed with a quick weekend getaway in mind, this front-loadingULA EquipmentStephen Boyd このバックパックをとても気に入っていて、以下の動画の紹介がわかりやすいので貼っておきます。 この Dragonfly はウエストベルトは付属していないのですが、後からつけられるようにループが付いています。今回はこの Dragonfly にウエストベルトを自作してみたという話です。 が、タイトルの通り、ちょっとしたギミックのあるウエストベルトにしてみます。 RawLow Mountain Works
4 min read
COFO Chair Premium を買った
wfh-environment

COFO Chair Premium を買った

ここ数年家で仕事をすることがほとんどであったにも関わらず、思い返してみるとあまり在宅ワーク環境に費用を掛けてきませんでした。 モニターは大学生の頃に買った 21.5 インチの安いやつだし、モニターアームも前職時代に職場用に買ったもの、机は実家から引っ越した時に買った IKEA の棚と一体化できるやつです。 KALLAX カラックス / LAGKAPTEN ラグカプテン デスクコンビネーション, ホワイト/ホワイトステインオーク調, 77x159x147 cm - IKEAKALLAX カラックス / LAGKAPTEN ラグカプテン デスクコンビネーション, ホワイト/ホワイトステインオーク調, 77x159x147 cmIKEAIKEA 椅子に至っては実家から引っ越してからしばらくは IKEA のダイニングテーブル付属の椅子を使っていました。 JOKKMOKK ヨックモック テーブル&チェア4脚, アンティークステイン - IKEAJOKKMOKK ヨックモック テーブル&チェア4脚, アンティークステイン. シンプルで丈夫なダイニングセットは、軽く食事をするコーナーやこじん
5 min read
Mackerel に部屋の温湿度を記録する
mackerel

Mackerel に部屋の温湿度を記録する

Amazon プライムデーだぜ!ということで SwitchBot の温湿度計を買いました。 https://www.amazon.co.jp/gp/product/B07L4QNZVF とりあえず仕事部屋に置いているのですが、いい感じです。寝室用にも欲しい。買い足そうかな…。 ただ置くだけでも温湿度が見れて便利なのですが、スマートホーム的な観点でメトリクスをとっていきたい。一年を通した記録を見ることで除湿・加湿器を買う際のスペックの参考にもなりそうですし、体調との関連性とかも見れたら面白そう。特に妻は頭痛持ちなので何か法則とか見出せたら役立ちそう (おそらく気圧が主な影響ぽいですが)。 構成 主な構成は以下です。 * Amazon EventBridge Scheduler * AWS Lambda * SwitchBot API v1.1 * Mackerel サービスメトリック 図だと以下。 EventBridge Scheduler で定期的に Lambda 関数を実行し、Lambda 関数で SwitchBot の API を呼び出し、取得した結果を
5 min read
ChatGPT API を使って LINE ボットを作成した
chatgpt

ChatGPT API を使って LINE ボットを作成した

少し前ですが ChatGPT API が公開されました。 以前から ChatGPT をいい感じに使いたいな〜と思っていて、ちょうど実家に帰った際に最近の AI は凄いぜ!的な話をしており、LINE の家族グループに「ボットくん」として参加させてみることを思い立ったというのがやってみた経緯です。 大まかな構成 使用する主要な各サービスは以下です。 * LINE Messaging API * API Gateway * Lambda * DynamoDB * ChatGPT API ざっくりとした図ではこんな感じ。 LINE の Messaging API を使用することでユーザーとボットの双方向のやり取りが可能になります。Messaging API は Webhook を有効化することで、ユーザーが友だち追加したりメッセージを送信した際、指定した URL に対してイベントを送信できます。 今回は API Gateway の HTTP API で作成した API
5 min read
SAYAMA works の Ω Tote 2G をカスタマイズする
gear

SAYAMA works の Ω Tote 2G をカスタマイズする

最近 SAYAMA works の Ω Tote 2G を購入しました。 これはトートバッグにもバックパックにもなり、またポケッタブルなので本体のポケットを裏返す形で、本体ごと納めることができます。つまり収納袋なしでコンパクトに持ち運べる形に変態できるということです。 他にもバックパック用のショルダーベルトが取り外し自由だったり、サイドのメッシュを絞るゴムがペットボトルを固定するためのループと兼用されていたり、細かい部分がよく考えられていて非常に使い勝手が良いです。詳細は Ω Tote 2G のページを見てね!!ギミックの説明は見るだけで面白い…。 自分の場合、主に子供と出かける際や近所へのピクニック、ちょっと買い出しに行く際に使用しています。外側のメッシュポケットに、使うシーンの多い子供用の携帯便座や飲み物、予備の着替えや上着など、子供関連のものを雑に放りこめて便利。いずれはサイクリングやキャンプ時のサブのバッグとして持っていったり、電車での釣行に使ったりする予定。 特に釣りは移動時はバックパック、釣り中はトートとして使える (ボックスやプライヤーなどの小道具をすぐ取り出せる
3 min read
恐面 (カイメン) ルアーを追う
fishing

恐面 (カイメン) ルアーを追う

恐面 (カイメン) という今は亡きインディーズのトップウォータールアーブランドがあり、昔から気になっていました。 先日その恐面のルアーをたまたまセカンドストリートで発見し、しかも値引きされていたので購入…!(ヤフオクにも一件あるのですが、ちょっと高い。) 恐面のルアーは上のように朝日をモチーフにしたカラーや、夜空や夕焼けといったカラーがあり大変良いです。風流!動きも良いみたいです (まだ投げに行けてない…)。 恐面との出会い 2002 年、自分が中学生の頃、バス釣り専門雑誌「バスワールド」で水面遊戯という連載がありました。これはその名の通り水面に浮くルアーしか使わない人たち、通称「トッパー」を取材する連載でした。 バスワールドを毎号買っていたわけではなかったので、自分が読んだ水面遊戯は 11 回目 (最終回) のみ。この回では埼玉県で「スクリーム」というトップウォーター専門店を営んでいた菊池良男さんの回で、いくつかピックアップされていた氏のおすすめルアーの中に恐面のルアー「バッズ」がありました。全部魅力的なルアーですが、明け方の空のような柄の「バッズ」が特に気になっていた記
6 min read
Manage jobs from Nomad UI
nomad

Manage jobs from Nomad UI

このブログは Ghost というブログプラットフォームを使用し Nomad クラスター上で動作しています。 Nomad クラスター上で Ghost ブログを動作させるこのブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetes の流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 * Nomad クラスターを作成する 今回はこの Nomad クラスター上で Ghost を動かすところまでをまとめます。 構成 以下の通り、DigitalOcean のマネー…ゆるふわキャンパーLorentzca 色々悩んだ結果、Docker イメージ上にブログのコンテンツを全て収めており、これを Nomad ジョブとして動かす形で運用しています。 これはメリットもあるのですが、一番大きなデメリットとして更新が面倒と
4 min read
Replace road bike handlebars with gravel handlebars
roadbike

Replace road bike handlebars with gravel handlebars

完成車 (Trek 1.2 2014) のハンドル (Bontrager Race VR-C) から日東の M137SSB に変えてみました。 速度よりは長距離を快適に走りたいのと、キャンプ時に荷物を積載しても安定して走りやすいように幅が広いグラベル用ハンドルが気になっていて、変えてみました。本当は Trek 車なので Bontrager の Bontrager GR Elite Road Handlebar にしたかったのですが在庫が無さすぎてボツ。日東は気になるメーカーだったのもあり今回は日東を選択してみました。 M137SSB はグラベルロード向けのハンドルで、フレアハンドル。 サイズ選びに迷ったのでメモ。 現状の確認 Bontrager Race VR-C Road Handlebar の 440mm を使用。ロードバイク用の普通のハンドルなので、上ハンドルも下ハンドルも幅は変わらず 440mm。 この幅については特に不満は無い&舗装路がメインなので上ハンドルについてはこれ以上広げる必要も今のところは無く、上ハンドル 440mm のもので合わせたい。 M137
3 min read
Installing wood fishing grip to blank
fishing

Installing wood fishing grip to blank

フィッシュテールグリップというグリップがあり、これに一目惚れ…。あまりにも良い。 View this post on Instagram A post shared by E-No.Products/AkihiroEnomoto (@e_no_p) E-No.Products という、メインはアクセサリーを制作されているショップから。代表の榎本さん自身が釣り人で元々自分用に作ったのがきっかけらしい。うーん良い。 このフィッシュテールグリップはサイズがオリジナルとナローの 2 種類あり、ナローの方がコンパクト。トップ用にダイレクトリールを使っている自分にはナローが合いそう。ダイレクトリールもコンパクトなので。 それで、このグリップは上の Instagram にあるようにハンドルとして完成品も売っているけど、グリップ単体としても売っている。私はグラスアイのハンドルを好んで使っているので、ハンドルブランクは、グラスアイのエルゴノハンドルと合わせたい。 エルゴノハンドル | バス釣り、トップウォーター【Glass Eye】ルアーやハンドル、ロッドなどの通販ルアー&クラフト【グラス
5 min read
Road bike winter clothing
roadbike

Road bike winter clothing

真冬にサイクリングする際の服装が固まってきたのでメモ。 真冬にサイクリングするようになる前から真冬ハイキング (低山) は行っていたので、初めはそのまま服装を流用していたのですが厳しい部分があったのでその部分だけサイクリング用に買い足した。 0 度くらいまでなら結構快適な服装です。0 度未満になると足先が寒くなってくる感じ。足先以外はまだいける。あと休憩時等、動かないと寒い。動いていれば全然平気という服装になります。 足 * 真冬のハイキング用の靴下: 厚手なので保温してくれる。ハイキング用のものを流用。 * SPD シューズ: 普通の SPD シューズ。 * シューズカバー: 靴の上から被せる防寒カバー。最初これの存在自体知らなかったのですが、真冬に走るとつま先が痛みを感じるほど寒くなることがわかったのでみんなどうしてるのかググったらカバーの存在を知って購入。ただし 0 度を下回るとカバーをつけてもだんだん寒くなってくる。 脚 * 真冬用のサイクリングタイツ: 初めは冬ハイキング用のトレッキングパンツとメリノウールタイツを履いていたのですが、ロードバイクのチェ
3 min read
Replaced wheels and tires on a road bike (Trek 1.2 2014)
roadbike

Replaced wheels and tires on a road bike (Trek 1.2 2014)

一昨年に現在住んでいる町田市 (と相模原市の境界) に引っ越してきて以来、自転車熱が再燃しております。 小学生時代から MTB (もちろんルック車 (= パーツ等が街乗り用の自転車と同じな見た目だけの MTB) でしたが…) に乗って釣りに行くことが趣味だったのもあり自転車はずっと好きで、高校生になってからはルック車ではない MTB (SPECIALIZED の HR CX) を購入し釣りやキャンプ、河川敷の未舗装路を走ったり、社会人になってからは佐渡島を一周するためにロードバイクを購入。その後あまり出番がない状況だったのですが、アウトドア大国の相模原付近に引っ越し都内のロードバイク乗りの間では有名な尾根幹も超近所ということで、ロードバイクにハマり直した形です。 現在使用しているロードバイク Trek の 1.2 (2014 年版) に乗っています。もう廃盤のエントリー向けロードバイクです。 * 1.2 → 製品紹介ページ * 1.2 H2 Compact → 旧モデルのアーカイブ アルミフレームでフォークはカーボン、コンポーネントは SORA の 3500 番 で 9
6 min read
Make your own ultralight windscreen
gear

Make your own ultralight windscreen

前回に引き続きクッカーネタです。 Snow Peak トレック 900最近ブログを書けてなくてモヤモヤしているのでリハビリにクッカーの話でも…。 トレック 900 と素材日本のキャンプ用品メーカー、Snow Peak からは色々な種類のクッカー (調理器具) が出ていますが、今手元にあるのがトレック 900 です。重量は 265g。 * トレック 900 [https://ec.snowpeak.co.jp/snowpeak/ja/%E3%82%AD%E3%83%A3%E3%83%B3%E3%83%97/%E8%AA%BF%E7%90%86%E5%99%A8%E5%85%
5 min read
Trek 900 Review
gear

Trek 900 Review

最近ブログを書けてなくてモヤモヤしているのでリハビリにクッカーの話でも…。 トレック 900 と素材 日本のキャンプ用品メーカー、Snow Peak からは色々な種類のクッカー (調理器具) が出ていますが、今手元にあるのがトレック 900 です。重量は 265 g。 * トレック 900 トレック 900 には↑のアルミ版と、チタン版がありますが、私はアルミ版を使用しています。理由はお米を炊きたいから。 どういうことかというと、アルミとチタンの熱伝導率の違いによってお米の炊きやすさが異なるからです。以下の通りアルミはチタンに比べて熱伝導率が非常に高いです。つまり、アルミは火が当たっている場所以外にも熱が伝わりやすい、ということになります。 以下は美味しいご飯の炊き方が書いてあるページですが、強火から弱火に移行するフェーズがあります。 * 奇跡の炊飯法 チタンの場合、この弱火のフェーズで火が当たっている場所のみ熱せられ、全体が高温にならないため、クッカーの下部と上部で温度の差が発生し、これによりうまく炊飯できない状態になっている気がします (ちゃんと温度を計ったこ
2 min read
Monitor the broadband speed with the Mackerel
mackerel

Monitor the broadband speed with the Mackerel

最近気持ちが忙しくてブログ更新久しぶりな気がする。。タイトルの通りネットワーク回線の速度を監視し始めたのでメモ。 モチベーション SNS の方で呟いてましたが引越しすることになりました。 引っ越すからベッド分解した´д` ; — †深淵の覚醒者† (@lorentzca) July 5, 2020 我々インターネットで生活している者たちにとって引越しで一番気になるのは回線の速度ですよね。次のおうちでも光回線が通っているのはもちろん確認済みなのですが、速度や安定性が気になるところです。 そこで回線速度を監視し、引越し後どれくらいの違いが出るか確認することにしました。 結果は以下。Wi-Fi での数値です。有線だと数倍早かった…。 有線、無線両方監視しようと思いましたが次のおうちは実質無線がメインになりそうなので、無線だけ監視してます。 方法 最近 Raspberry Pi と Greengrass の組み合わせを試してます。 * AWS IoT Greengrass とは - AWS IoT Greengrass Greengrass ではデバイス
4 min read
Use Container Storage Interface (CSI) with Nomad
nomad

Use Container Storage Interface (CSI) with Nomad

今まで Nomad で DB 等のステートフルなワークロードを実行したい場合、以下のような選択肢がありました。 * host_volume スタンザを使用し、ホストのボリュームを使用する。 * Docker を使用したタスクの場合は volumes パラメータを使用し同様にホストのボリュームをマウントして使用する。 しかし、上記の方法はホスト間でのデータを同期しないため、例えばタスクが終了後他のノードでタスクが再起動された場合にデータを保持することができません。 また、ephemeral_disk スタンザというものがあります。こちらの migrate パラメータを有効にすると、タスクを元のノードに配置できない場合にデータをホストを越えて移行することができます。しかし、以下の制約があります。 * データの移行はベストエフォートで行われるため、データは失われる可能性がある。 * 大きいサイズのデータには適していない。 * そもそも想定された使い方はホスト間でのデータの共有ではなく、その名前の通りグループ内で一時的な共有スペースを持つことである。 従って永続的
9 min read
Get data from Vault with Nomad task
vault

Get data from Vault with Nomad task

最近 Vault クラスターの作成と Nomad と Vault の統合を行いました。 Vault を HA モードで使うこのブログの SSL/TLS 証明書を Vault [https://www.vaultproject.io/] で管理しようと考えています。 * Let’s Encrypt のクライアントを Nomad ジョブとして実行し SSL 証明書を取得してみた [https://blog.lorentzca.me/run-letsencrypt-client-with-nomad-job/] 現在サーバーは 3 台でクラスターを組んでおり、 Nomad [https://www.nomadproject.io/…ゆるふわキャンパーLorentzcaNomad と Vault を統合する現在 Nomad [https://www.nomadproject.io/
3 min read
Script to manage blog
ghost

Script to manage blog

現在このブログを Nomad のタスクとして Docker で動かしています。 Nomad クラスター上で Ghost ブログを動作させるこのブログは数年間単一のサーバーで稼働していました。 学習も兼ねてわざわざ自前でサーバーを運用していたのですが、最近新しい構成に移したくなり、Kubernetesの流行もあってクラスターやマイクロサービスといった時代の流れに乗るべく、Nomad クラスターへの移行を行いました。 Nomad クラスターの作成までは下記記事にまとめています (インフラやクラスターの設定等はここからさらに変更しています)。 * Nomad クラスターを作成する [https://blog.lorentzca.me/create-nomad-cluster-on-digitalocean/] 今回は…ゆるふわキャンパーLorentzca が、現在の構成だとブログの更新が面倒…。ローカルに Docker イメージを持ってきてブログを更新、docker commit, docker push する必要があります。push 後サーバーにログインし Nomad タスクを書き換え
2 min read
Updated to ghost 3!
ghost

Updated to ghost 3!

このブログは Ghost で動いています。 * ghost - ゆるふわキャンパー 去年の 10/22 に Ghost の新しいメジャーバージョンが公開されました。これでバージョン 3.x に突入! * Ghost 3.0 3.0 のリリースはこれまでで最も規模の大きいリリースだったようです。 アップデート方法 (独自 Dockerfile 使用) と言っても私の場合以下の通り公式の Dockerfile を改造して使っているので普通の方法では無いです…。 * Nomad クラスター上で Ghost ブログを動作させる 改造 Dockerfile は GitHub に公開しており手順もメモしてあります。 * stateful-ghost-image/README.md at 524a1261038e381997b5e9b3078c301fc52f684e · lorentzca/stateful-ghost-image · GitHub 新機能 3.0 から追加された新機能は公式ブログで紹介されているものを眺めてみると以下があるよ
5 min read
Integrate Nomad and Vault
nomad

Integrate Nomad and Vault

現在 Nomad と Consul を使用してこのブログを動かしています。 * nomad - ゆるふわキャンパー * consul - ゆるふわキャンパー 例えば DB のパスワード等の機密情報を Nomad のジョブで扱いたい場合があります。Nomad は環境変数から機密情報を取得することもできますが、Vault と連携することで Vault の暗号化された KVS から機密情報を取得することが可能になります。 * Vault Integration | Nomad by HashiCorp 今回、Nomad と Vault の統合を設定してみたのでメモします。 Nomad の設定 Nomad の設定としては以下のように vault スタンザを追加するだけです。 ※今回、簡単のため Vault 側で TLS の設定を無効にしていますが TLS を有効にしている場合は以下に証明書等の設定が追加されます。 vault { enabled
5 min read
Use Vault with HA mode
vault

Use Vault with HA mode

このブログの SSL/TLS 証明書を Vault で管理しようと考えています。 * Let's Encrypt のクライアントを Nomad ジョブとして実行し SSL 証明書を取得してみた 現在サーバーは 3 台でクラスターを組んでおり、 Nomad と Consul でアプリケーションを管理しています。ここに Vault を追加しました。 Vault の HA 構成 1 台で Vault を運用するのは心許ないので、 3 台でクラスターを組み可用性を高めてみます。Vault は high availability (HA) モードで動かすことができます。HA モードでの Vault はアクティブとスタンバイの状態があります。Vault クラスターは 1 台のアクティブノードと複数のスタンバイモードから構成されます。それぞれの役割は以下です。 * アクティブノード: 読み取りと書き取りの全てを処理する。
4 min read
Provide dependencies to between Nomad tasks with lifecycle stanza
nomad

Provide dependencies to between Nomad tasks with lifecycle stanza

Nomad のタスク間に依存関係を持たせるには何らかの工夫が必要でした。 * Nomad ジョブのタスク間の依存関係をどのように実現するか考える が、 v0.11 beta で依存関係を持たせることのできる機能が追加されました! 🎉 * Announcing HashiCorp Nomad 0.11 Beta Key highlights of this release: ・Container Storage Interface (CSI): Deploy stateful applications on Nomad using storage volumes from any third-party provider of choice. Read more here. ・Autoscaling: Dynamically scale application instances based on real-time load
2 min read
Generate bolt targets from Terraform state
bolt

Generate bolt targets from Terraform state

現在個人サーバーの管理を Terraform で、サーバーのプロビジョニングを Bolt で行なっています。 * terraform - ゆるふわキャンパー * bolt - ゆるふわキャンパー Bolt ではインベントリファイルを使用してターゲットとなるサーバーを指定できます。インベントリファイルは例えば以下のような内容です。 groups: - name: production targets: - web.example.com - db.example.com - app.example.com config: ssh: host-key-check: false user: centos private-key: ~/.ssh/id_rsa run-as: root ↑のようにターゲットのサーバーを指定できるのですが、ドメイン名ではなく Terraform で作成し動的に変化、増減する IP
2 min read