以下の内容はhttps://7rikazhexde-techlog.hatenablog.com/より取得しました。


SUUMOの物件比較をClaudeとGoogleSpreadSheetを使用して物件探しを管理する

経緯

物件探しでSUUMOを使用していたところ、お気に入りに追加をしても、物件には掲載期間があり、期限が過ぎるとアプリ上からは閲覧できなくなるので、アプリ経由ではなく、個別に管理できる方法を探していた。

方法

まず、URLのリストからサイト情報をフェッチして取得しても良いですが、上記掲載期間が終了すると見れなくなるの現実的ではないと感じていました。

理想は生成AIに丸投げですが、そもそも、サイトは個人の情報も含むのと、セキュリティ観点から直接取得できないようになっているので欲しい情報は取れませんでした。トークン消費もありますし、無暗に習得するのも非効率です。

その後、試行錯誤して色々と試す中で以下の方法が個人的には良いと思い、手順をまとめました。

  1. マイページ > お気に入りで各物件を選択コピーし、MarkDownload - Markdown Web Clipperを使用して、Slect Textを指定し、Markdownファイルで保存する。デフォルトでも最低限物件情報は取得できますが、Slect Textを指定することで選択部分の情報も取得できます。

  2. Claude(これは他の生成AIでも良い)に以下プロンプトを入力する(必要な情報を追加しても良いですし、欲しい情報別シートに作成するのもありです。)

添付のSUUMOのお気に入りに登録した物件リスト(.md)を参照して、
以下情報を列に持つ表形式ファイル(.xlsx)の作成してください。
作成するxlsxファイルはGoogleSpreadSheetで参照、編集することを前提とします。
画像の表示(取得は)GoogleSpreadSheetのIMAGE関数を使用してURLから画像を取得して作成してください。

 - 画像
 - 評価
 - 地域
 - 物件名
 - 家賃(円)
 - 管理費(円)
 - 敷金(円)
 - 礼金(円)
 - 初期費用合計(円)
 - 間取り
 - 専有面積(m²)
 - 築年数
 - 建物種別
 - 最寄り駅
 - 徒歩(分)
 - 物件URL
 - メモ

その他思うところ

と、ここまで、物件のまとめ方法を紹介しましたが、ある程度お気に入り登録したら、さっさと取り扱いのある不動産屋に連絡を取って、内見予約した方が良いですね。私は先に申込が入り内見すらできないということがありました。自分が良いなと思う物件は他の人も良いなと思うこともあるということですね。

また、本当に取り扱いがあるかはアプリに掲載があっても、不動産屋に聞いてみないとわかりません。おとり物件もあるようです。私の場合は掲載虚偽にも当たりました。時間の無駄なのでほんとにやめてもはいたいのもです。

私は最終的には良いなと思える物件を申込ができたのでよかったですが、なかなかストレスが溜まったので、百聞は一見にしかずで、直感も大事にして選ぶことが大事だなと思いました。

とはいえ、候補から探せるのがアプリの良さでもあるので、アプリも活用しつつ、自分なりに希望条件に合う物件探しのためにAIを有効活用できると良いですね。

以上です。

婚活の8ヶ月間を振り返って

はじめに

この記事は2025年12月時点の情報で、最新情報は異なる場合がありますので、参照する際はご注意ください。

本記事は普段の投稿記事とは傾向が異なりますが、個人的な経験として記録に残したいと思い記事にしました。

本記事で投稿されている内容は個人の見解であり、個人のプライバシーおよび個人情報保護の観点から、個人に関する情報については記載しておりません。

約8ヶ月間の婚活を通じて感じたこと、経験したことを個人的な記録として残すものです。

婚活を始めた経緯

昨年(2024年)頃から、結婚に対する意識が高くなり、将来を共にするパートナーと過ごしたいという思いが強くなってきました。

これまでは自分の好きなことを中心に生活してきましたが、母親のこと、自分のこと、そして93歳になる祖父が元気なうちに結婚した姿を見せたいという気持ちも芽生えていました。

仕事面では、ここ数年は仕事の忙しさもあり、過労で気持ちが向かないこともありました。ただ、2025年は婚活と仕事を両立できる状況にありました。そのような状況もあり、将来について考えることが増えていました。

実際に活動を始めると集中して取り組む必要があると考えていました。

また、30代後半という年齢に特別な焦りがあったわけではありませんが、このタイミングを逃すといつ結婚できるかわからないという思いがありました。

また、私個人については、これまでも友人からの紹介を含め出会いはありましたが、結婚の意思は強くありませんでした。交際経験はありますが、1,2回のデートで長続きはしないという状況でした。そのような状況で30代後半となり、仕事も重なり交際機会もない状況がありました。

最終的に婚活に取り組むと決めたのは、親戚の方が婚活をしているという話を聞いたことでした。他にも友人が婚活を通じて結婚したという話を聞き、GWのタイミングで自分も活動を始めようと決めました。当時の気持ちを振り返ると、「今だ!」という気持ちが強かったように思います。

婚活の準備と活動開始

婚活を始めるにあたり、まずは情報収集から始めました。

婚活に関する情報サイトを参考にしながら、IBJの紹介依頼フォームを通じて担当者と面談を行いました。

面談では自分の性格やこれまでの恋愛経験、婚活への思いなどを率直に伝えて、結婚相談所(jupiter)を紹介いただきました。実際に自分に合っているように感じられました。

担当してくださったカウンセラーの方は個人事業主として一人で活動されており、仲人としての経歴も長く、とても会員思いの方で、真摯に対応してくださいました。HPやInstagramを見ていただくと、その印象を感じるかと思います。

活動の詳細については、HPに記載がありますが、オンライン(Zoom)での面談、対面での契約後に正式に入会となり、その後すぐにプロフィール作成と写真撮影に取り掛かりました。

プロフィールはサンプルを参考にしながら作成しました。文章を書くことは苦ではなかったため、プロフィールは契約後すぐに作成しました。

今は生成AI(Claudeなど)があるため、それを活用しても良いかもしれませんが、私は機械的な文章になるのが嫌であったため、自分の文章で作成しました。カウンセラーから2回ほど修正の指摘を受け、GW前にはシステム上で公開となりました。

写真撮影は結婚相談所の紹介で恵比寿のiLuceにて撮影を外で行いました。ポージングに苦労しましたが、表情作りに気を配りながら撮影を進めました。

写真次第でプロフィールを実際に見られるかは決まると言っても良いと思います。非常に大事なものだと感じました。

IBJのシステムは登録後でしか見えないため、写真選定は非常に大事な活動でした。公開後にカウンセラーを通じて修正はできますが、再度写真を撮るのにお金もかかるため、頻繁には変えるものではないと思いました。

文章変更に関して、特定の宗教は信仰していな方を希望していたため、自分も信仰していないことを登録後に追記しました。

IBJのシステムにはカジュアル写真という機能があり、過去に撮影した写真を投稿していました。写真はお見合い時にも話題になるため、プロフィールに合うものや、その季節にある写真などを選択して更新していました。

他にもインスタグラムのような写真投稿システムがあり、それも利用していました。写真が趣味であるため、話題作りのためにも活用していました。実際にそこからお見合いに繋がったケースもありました。

実は最初のお見合い時、5月の最初のお見合いでは風邪を引いてしまい、延期の調整をしました。こういった調整は相談所間で行われるため、安心感がありました。

8ヶ月間の活動

4月末から12月末までの約8ヶ月間で、20名の方とお見合いをしました。5月は入会直後ということもあり、最もお見合いの回数が多い時期でした。

いわゆる「入会バブル」と呼ばれる時期でした。その後もコンスタントにお見合いの機会があり、申し込みが途絶えることはありませんでした。

今振り返ると、活動開始時期については考える点もありました。

昨年から二季と言われることが増え、夏の期間が長くなっていました。夏は肉体的にも辛いことがありましたが、それは女性も同じであるため、時間帯の調整などでうまく対応した記憶があります。

1月から活動できるようにした方が良かったかもしれませんが、決断のタイミングもありました。また、全員が全員そのように活動することはないと思いました。

他には、お見合いやデートの準備には時間を要しました。

事前のリサーチ、お店の選定と予約、当日の対応など、仕事の合間を縫って準備を進めていきました。

お店の選定では食べログを使用していました。あとはお相手次第ですが、大体百貨店や駅ビルのお店を選んでいました。お店のレビュー内容や星の数、雰囲気をネット情報から調べてリサーチをしました。

お店は相手の希望次第ですが、基本的には和食、洋食で3件ほど挙げていました。総じて不満はなかったと思います。

これは決して楽な作業ではありませんでしたが、カウンセラーからのアドバイスもあり、相手への関心を示すために必要な過程だと考えていました。

人と話すことや調べることは好きな性格のため、準備自体は苦ではありませんでした。しかし、活動を続ける中で疲れを感じることはありました。

それでも、これが婚活という活動であり、お互いが納得感を持ってパートナーとなるために必要な過程であったと感じました。

また、活動を通じて気づいたことがいくつかありました。

登録初月は慣れるための期間でもあり、複数のお見合いの申し込みと申し受けを受けることがありました。その場合、心理的に慣れることを優先することでお断りする傾向が強くなると感じました。

これは活動上仕方のないことでしたが、どうしようもないことだと感じました。本当に会う方と出会うこともあり得るため、あくまで個人的な感想です。1人目で運命的な出会いがあり成婚する方もいると思うのです、人それぞれ異なると思います。

また、申し込みと申し受けでは相手の気持ちが異なると感じました。全員ではありませんが、お見合いへの熱量は異なります。逆に私が申し込みをした場合、私の熱量が足りずにお断りされたこともありました。

ただ、お相手のプロフィールを読んで、お話をして、その時感じたことを大切にして、お相手と向き合い、自分が感じたことを整理すること意識して行動していました。

印象に残った出来事や気づき

振り返ると、活動全てが印象的でした。この記事では詳細は書きませんが、良いこと、悪いこと、辛いこと、悲しいこと、楽しいこと、嬉しいことが、沢山ありましたが、今までの人生経験以上に濃密な時間を過ごしました。

また、お見合いはホテルのラウンジで行われることが多いですが、個人的には横浜ベイシェラトンホテルと京王プラザホテルのラウンジは印象的で思い入れが深いです。

これらの活動を通じて、人としての成長も感じた部分もありました。

特に辛い時期には、夜遅い時間にも関わらず電話対応いただいたカウンセラーには感謝の気持ちがあります。

そこで気持ちの整理ができたと思います。これはメールやLINEなどより重要でした。最初はLINEでやり取りしていましたが、その時々の状況で、電話でのお話が活動の支えとなりました。

婚活を通じて、相手に求めるものについても考えさせられました。

当初は仕事への前向きな姿勢、経済力、共通の趣味など、明確な条件を持っていました。しかし実際にお会いする中で、交際をする中で、全て希望通りに合う人はいないということを感じる部分がありました。

どこかで希望とズレるところはありました。絶対はないとは思いますが、限られた時間の中での出会いを考えると、何を大切にするべきかが見えてきました。

最終的に真剣交際に至るにあたり、悩むこともありましたが、大事であったのは、私が大事にする思い、お互いの気持ち、そして違和感のない、苦ではないコミュニケーションが取れることでした。他にも立場や状況から考えることはありましたが、私情に関わるため割愛します。

最初からこの気持ちであったわけではありませんが、徐々に心境の変化がありました。

交際(デート)でも悩むことがありましたが、相手とのコミュニケーションは大事にしていました。

食事以外では、展望台、水族館、美術館、公園へ行きましたが、公園は開放的な雰囲気で会話ができるのでとても良かったです。

食事の席は他の方もいますし、シチュエーションは大事だと感じました。

ただ、夏は本当に暑くて外を歩くのが大変だったので、場所は注意をして決めていました。やはり、季節は、春、秋が良かったです。施設内にお店があればそこで買い物などもしていました。

最終的に相手にプロポーズもしましたが、個人的なことなので、ここでは割愛します。

最後に、パートナーは当初希望していた通りの条件の方ではありません。しかし、将来共に、生活を一緒にして、生涯を添い遂げるパートナーとして考えた時に、納得感を持って私のパートナーと言える方で、私も愛しています。

カウンセラーから出会いにはタイミングと運がある、そして最後に感情の面で気持ちの変化があるという言葉を聞いていましたが、その言葉にはとても納得感がありました。

おわりに

私は30代後半、正社員として勤務し、実家で母と祖父と暮らしてきました。父は他界しており、家族のことを考えると結婚への思いは強くなっていました。

成婚退会をした今は、率直に活動をして良かったと感じています。また、自分の気持ちを文章化し、整理し、自分の気持ちや相手のことを思い、そして愛することは、これからの人生にも大事なことだと思っています。

婚活は決して簡単なものではありません。時間もかかりますし、お金もかかります。そして、精神的にも肉体的にも堪えることも事実でした。

しかし、お見合いや交際につながるであろう相手を見つけるチャンスがあること、そして一緒に向き合ってくれるカウンセラーがいることは心強いことです。

また、婚活を通じて得たものに、「思いやり」があります。パートナー同士、お互いにその思いを感じています。

自分や他人に対して思いを持って接することは嬉しいですし、幸せです。

これからパートナーと歩んでいく思いとして、お互い同じ年齢ですが、決して若くはない年齢です。

しかし、将来的には子供も欲しいと考えており、楽しく思いやりのもった家族として過ごしていくことが希望です。

この先様々なこと、やるべきこともありますが、パートナーと共にこれからの人生を一緒に歩んでいく思いです。

約8ヶ月間の婚活は、人生における大きな経験となりました。

この記録が、いつか振り返った時に、あの時の自分の気持ちを思い出すきっかけになれば良いなと思います。

以上です。

【ShellScript】登録済みエイリアスを選択実行するシェルスクリプトについて

背景

コマンドをパイプでつなげて実行したり、短縮コマンド使用するのにaliasを使用していたのですが、毎回aliasコマンドで検索するのが手間に感じていたので、
fzf1を使用して検索実行するシェルスクリプトを作成しました。

使用例

algでキーワード検索(例:git)とalg gitのように使用できます。

検索は以下のようにalias登録したものが対象です。

# $HOME/.bashrc
alias fzfup="cd ~/.fzf && git pull && ./install && cd"

使用例(alg > git)

スクリプトについて

シェル関数(alg())をシェルスクリプト($HOME/.bash_functions.d/alias-fzf.sh)に追加し、
$HOME/.bashrc.bash_functions.dディレクトリ内のシェルスクリプトsourceコマンドで実行する設定を追加することで、現在のシェルでalg()関数を直接呼び出すようにします。

$HOME/.bash_functions.d/alias-fzf.sh
$HOME/.bashrc

まとめ

登録済みエイリアスを選択実行するシェルスクリプトについて紹介しました。
開発環境に応じて自分用のエイリアスを登録していることはあると思います。
エイリアス登録している場合は、合わせて上記スクリプトを使ってみてください。

以上です。

【ShellScript】全履歴から選択実行するシェル関数について

はじめに

Bashを使っていると、過去に実行したコマンドを再利用したい場面が頻繁にあります。Ctrl+Rで履歴を検索できますが、より直感的で柔軟な履歴検索を実現するシェル関数を作成しました。

この記事では、fzf(fuzzy finder)を活用した履歴検索関数hg()の実装について、技術的な詳細を解説します。

完全なコードはGistに投稿していますので、そちらもご確認ください。

背景と課題

Bashの履歴検索の制約

コマンドライン作業で過去のコマンドを再利用する際、Bashの標準的なCtrl+R(reverse-i-search)では以下の制約があります。

  • 1行ずつしか表示されず、全体を俯瞰できない
  • 複数の検索ワードでの絞り込みが難しい
  • 視覚的なフィードバックが限定的

fzfのkey bindings(Ctrl+R

fzf(fuzzy finder)は、Goで実装された高速なコマンドラインフィルタリングツールです。fzfインストール時にkey bindingsを有効にするとCtrl+Rの動作がfzfを使用した履歴検索を使用できるようになります。

インストール時の出力
Downloading bin/fzf ...
  - Already exists
  - Checking fzf executable ... 0.66.0
Do you want to enable fuzzy auto-completion? ([y]/n) y
Do you want to enable key bindings? ([y]/n) y #key bindingsの有効化指定

Generate $HOME/.fzf.bash ... OK

Do you want to update your shell configuration files? ([y]/n) y

Update $HOME/.bashrc:
  - [ -f ~/.fzf.bash ] && source ~/.fzf.bash
    - Already exists:
        Line 218:[ -f ~/.fzf.bash ] && source ~/.fzf.bash
    ~ Skipped

Finished. Restart your shell or reload config file.
   source ~/.bashrc  # bash

Use uninstall script to remove fzf.
比較表
機能 標準のCtrl+R fzf版Ctrl+R
表示 1行ずつ 複数行を一覧
検索 部分一致 fuzzy検索
操作 Ctrl+Rで遡る ↑↓で自由に移動
複数ワード 不可 可能

具体例は下記の通りです。

# fzf版Ctrl+R
  docker compose up -d
  docker ps -a
  docker logs container_name
> docker
  3/150
# 全履歴から"docker"を含むものを一覧表示

hg()関数について

fzfのCtrl+Rは便利ですが、さらに以下の機能が欲しいと考えました。

  • 引数で初期フィルタを指定(hg "docker"で即座に絞り込み)
  • 完全一致検索("run"で検索時、"running"を除外)
  • 選択後に即実行(Ctrl+Rはコマンドライン挿入のみ)
  • 重複の自動削除
  • カスタムカラー設定

以降は、これらを実現するhg()関数の実装について解説します。

実装の全体像

前提条件

# fzfのインストール(Ubuntu&Git)
# --allオプションにより、キーbindingsと補完機能が自動的にシェル設定ファイル(`~/.bashrc`)に追加される。
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install --all

# macOS
brew install fzf

基本構造

hg() {
    # 1. オプション解析(-p フラグの判定)
    # 2. 履歴取得とフィルタリング
    # 3. fzfによる対話的選択
    # 4. 選択されたコマンドの実行
}

技術的な実装詳細

1. オプション解析の仕組み

local partial=false
local query=""

while [[ $# -gt 0 ]]; do
    case $1 in
        -p|--partial)
            partial=true
            shift
            ;;
        *)
            query="$1"
            shift
            ;;
    esac
done

技術ポイント

  • $#: 引数の数を取得
  • shift: 引数リストを左にシフト(処理済み引数を削除)
  • case構文: パターンマッチングで-pオプションを判定

2. 履歴処理のパイプライン

各コマンドの役割

history

  • Bashの組み込みコマンド
  • ~/.bash_historyと現在のセッション履歴をマージして出力
  • 出力形式は行番号 コマンドの形式

GREP_COLORS='mt=01;36' grep --color=always -w "$query"

  • GREP_COLORS='mt=01;36'でマッチ部分を明るいシアン色(36)でハイライト
    • mtはmatch(マッチ部分)を示す
    • 01はbold属性
    • 36はシアン色のカラーコード
  • --color=alwaysでパイプ経由でも色情報を保持
  • -wで単語境界でマッチ(完全一致)
    • 例として"run"で検索時、"running"は除外される

tac

  • テキストを行単位で逆順にする(catの逆)
  • 最新のコマンドが上に来るようにする

sed 's/^[ ]*[0-9]*[ ]*//'

  • 正規表現で行番号を削除する処理
    • ^[ ]*は行頭の空白(0個以上)
    • [0-9]*は数字(0個以上)
    • [ ]*は数字後の空白(0個以上)

awk '!seen[$0]++'

  • 重複行の削除を行う
  • 動作の仕組み
  • seen[$0] = 0 (初回) → !0 = true → 出力
  • seen[$0]++ で seen[$0] = 1 に
  • seen[$0] = 1 (2回目以降) → !1 = false → 出力しない
  • 連想配列seenで各行の出現回数を管理

fzf --height 40% --reverse --exact --ansi

  • --height 40%で画面の40%の高さで表示
  • --reverseで検索バーを上部に配置(デフォルトは下部)
  • --exactで完全一致モード(fuzzy検索を無効化)
  • --ansiANSIカラーコードを解釈して色付き表示

sed 's/\x1b\[[0-9;]*m//g'

  • ANSIカラーコード(エスケープシーケンス)を削除
  • \x1bはESCキャラクタ(16進数表記)
  • \[[0-9;]*mはカラーコードのパターン
  • 実行時にカラーコードが含まれないようにする処理

3. 履歴の一覧の取得方法

完全一致モードと部分一致モードの2種類のモードで実行します。

完全一致モード(デフォルト)

hg "run"
# fzf内で "test" と入力
# → "run" AND "test" を両方含む行を表示
  • grep -w: 単語として完全一致
  • fzf --exact: 入力文字列が順番通りに連続して含まれる行のみ

部分一致モード(-pオプション)

hg -p "run"
# fzf内で "test" と入力
# → r, u, n, t, e, s, t を順番に含む行を表示
  • grep-wなし): 部分一致
  • fzf--exactなし): 文字が順番に含まれていればマッチ

4. カラーハイライトの実装

GREP_COLORSの設定

GREP_COLORS='mt=01;36'

フォーマットは次の通りです。

mt=属性;色コード

属性値の種類は以下の通りです。 - 00で通常 - 01でbold(明るい/太字) - 04で下線

色コードの種類は以下の通りです。 - 30は黒 - 31は赤 - 32は緑 - 33は黄 - 34は青 - 35はマゼンタ - 36はシアン - 37は白 - 90-97は明るいバージョン

配置の重要性

# ❌ 効かない
GREP_COLORS='mt=01;36' history | grep --color=always "run"

# ✅ 正しい
history | GREP_COLORS='mt=01;36' grep --color=always "run"

環境変数grepコマンドの直前に配置する必要があります。

使用例

基本的な使い方

引数の文字列に該当する履歴を選択肢として表示する方法

完全一致モードで実行
hg "docker"
部分一致モードで起動
hg -p "docker"

全履歴の検索に対して選択肢を表示

完全一致モードで起動する
hg
部分一致モードで起動する
hg -p

実践的なユースケース

ケース1: 特定のコマンドを探す

hg "npm run"
# → "npm run test", "npm run build" などが候補に
# → fzf内で "test" と入力して絞り込み

ケース2: プロジェクト関連のコマンドを探す

hg -p "project"
# → "cd ~/projects", "vim project.md" など
# → Fuzzy検索で柔軟に絞り込み

ケース3: 長いコマンドを再利用

hg "docker compose"
# → 複雑なdocker-composeコマンドを選択して再実行

ファイル管理のベストプラクティス

~/.bash_functionsへの分離

.bashrcが長くなるのを防ぐため、関数を別ファイルに分離します。

1. 関数ファイルの作成

# ~/.bash_functions を作成
vi ~/.bash_functions

hg()関数の全体をこのファイルに記述します。

2. .bashrcからの読み込み

# ~/.bashrc に追加
if [ -f ~/.bash_functions ]; then
    source ~/.bash_functions
fi

3. 設定の反映

source ~/.bashrc

この方法の利点

この方法には以下の利点があります。

  1. 関心の分離で設定ファイルを目的別に管理できる
  2. 可読性が向上し.bashrcがすっきりする
  3. 保守性が高く関数だけを編集・無効化しやすい
  4. 再利用性があり別のマシンに関数ファイルだけコピー可能

業界標準の構成

多くのLinuxディストリビューションUbuntu等)でも採用されている方法です。

~/.bash_aliases    # エイリアス用
~/.bash_functions  # 関数用
~/.bashrc          # メイン設定ファイル

パフォーマンスの考慮

大量の履歴がある場合

履歴が数万行ある場合、以下の最適化が有効です。

# 履歴サイズの制限
export HISTSIZE=10000
export HISTFILESIZE=10000

# 重複を記録しない
export HISTCONTROL=ignoredups:erasedups

パイプラインの効率

各コマンドは順次実行されるため、早い段階での絞り込みが重要です。

# ✅ 効率的(早めにgrepで絞る)
history | grep "docker" | tac | sed | awk | fzf

# ❌ 非効率的(大量のデータをtacに渡す)
history | tac | grep "docker" | sed | awk | fzf

トラブルシューティング

色が表示されない場合

原因1: GREP_COLORSの配置
# grepの直前に配置する
history | GREP_COLORS='mt=01;36' grep --color=always "run"
原因2: fzfの--ansiオプション不足
# --ansiオプションを必ず含める
fzf --height 40% --reverse --ansi

historyコマンドが空の場合

スクリプトファイルとして実行すると、historyコマンドは空になります。これはシェル関数としてのみ動作する制約です。

必ず.bashrcまたは~/.bash_functionsに関数として定義してください。

まとめ

このhg()関数では、以下の技術を組み合わせています。

  1. Bashの組み込み機能(history, case, 条件判定)
  2. Unix標準ツール(grep, sed, awk, tac
  3. モダンなTUI(fzfによるインタラクティブな選択)
  4. カラーリング(GREP_COLORSによる視覚的フィードバック)

history | grepによるパイプ指定やエイリアスによる登録など効率化は可能ですが、履歴の抽出から実行までをインタラクティブ操作できるようにすることで手間も減り、効率も上がるかと思います。今後処理の追加や改善などするかもしれませんが、気になれば使用してみてください。

参考リンク

以上です。

Etherscan API v2でArbitrum Oneの残高を取得する方法

概要

Arbitrum Oneネットワーク上のETHやトークン残高を取得したいと思い調査しました。
従来はEthereumメインネット(L1)でv1 APIを利用できましたが、現在はv2が公開されており、v1は非推奨となっています。
また、Arbitrum Oneの残高取得はv2 APIで可能であり、v1エンドポイントでは取得できませんでした。
この記事では、v1との違いとv2による取得方法を、実際のcurlコマンド例を交えて紹介します。

前提

  • ネットワーク: Arbitrum One (chainid=42161)
  • API: Etherscan Multichain API v2
  • 対象:
  • 前提: Etherscan APIキーを取得済み(V2およびArbitrumでも共通)

API バージョンの違い

V1 API

  • 旧形式のエンドポイント
    https://api.etherscan.io/api
  • Ethereum メインネット専用(L2には非対応)
  • module=accountaction=balance / action=tokenbalance で残高取得
  • tag=latest パラメータを使用

例:Arbitrum One トークン残高取得

curl "https://api.arbiscan.io/api?module=account&action=tokenbalance&contractaddress=<ERC-20コントラクトアドレス>&address=<ウォレットアドレス>&tag=latest&apikey=YOUR_API_KEY"
レスポンス例(V1では非対応)
{
  "status":"0",
  "message":"NOTOK",
  "result":"You are using a deprecated V1 endpoint, switch to Etherscan API V2 using https://docs.etherscan.io/v2-migration"
}

→ Arbitrum One など L2 のデータは取得不可。

V2 API

  • 新形式: https://api.etherscan.io/v2/api
  • マルチチェーン対応(chainid 指定でL2対応)
  • tag=latest 不要
  • APIキーはV1と共通利用可能
  • 一貫したJSON形式のレスポンス
  • Arbitrum One(chainid=42161)を含む50以上のチェーンに対応

例1:ETH(ネイティブ残高)

curl "https://api.etherscan.io/v2/api?chainid=42161&module=account&action=balance&address=<ウォレットアドレス>&apikey=${ETHSCAN_API_KEY}" | jq
レスポンス例
{
  "status": "1",
  "message": "OK",
  "result": "<balance_in_wei>"
}
Wei → ETH換算
echo "scale=8; <balance_in_wei> / 10^18" | bc

例2:AUSDC(トークン残高)

curl "https://api.etherscan.io/v2/api?chainid=42161&module=account&action=tokenbalance&contractaddress=<AUSDCコントラクトアドレス>&address=<ウォレットアドレス>&apikey=${ETHSCAN_API_KEY}" | jq
レスポンス例
{
  "status": "1",
  "message": "OK",
  "result": "<token_balance_raw>"
}
AUSDCトークンの最小単位(6桁) → トークン換算
echo "scale=6; <token_balance_raw> / 10^6" | bc

V1 → V2 移行ガイダンス

手順 対応内容
1 ベースURLを https://api.etherscan.io/v2/api に変更
2 L2対応の場合は chainid を追加
3 tag=latest を削除
4 ERC-20 残高取得には module=account&action=tokenbalance を利用
5 APIキーは共通利用可能(再発行不要)

詳細は公式ドキュメントも確認ください。

docs.etherscan.io

レスポンス仕様まとめ

action 対象 必須パラメータ 単位 備考
balance ネイティブ通貨 address Wei → ETH換算 ETH, ARB など
tokenbalance ERC-20トーク address, contractaddress 最小単位 → トークン換算 USDC, AUSDC など

※ ERC-721(NFT)は別エンドポイント tokennfttx を使用。

注意点

  • V1 APIはすでに非推奨(deprecated)
  • V2では tag=latest が不要
  • chainid の指定忘れで L2 が取得できない
  • tokenbalance が一部チェーンで非対応の場合あり
  • Exception"status": "0" エラーが返る場合は以下を確認
    • chainid未指定
    • contractaddressの誤り
    • APIキーのRate Limit超過

参考ドキュメント

まとめ

  • Etherscan API v2では、Arbitrum Oneを含む複数チェーンの残高取得が可能である。
  • V1はすでに非推奨となっており、L2チェーンでは利用できませんでしたが、V2でchainid パラメータを指定することで、ETHやトークンの残高を取得できます。
  • ETHの場合はWei単位(10^18換算)、トークンの場合はコントラクトの decimals に基づき単位換算が必要です。

以上です。

【Chrome拡張機能】選択したテキストをURLに連結して検索するContext Menu Searchについて

はじめに

ブラウジング中にテキストをコピーして検索する、という作業は意外と多いものです。

特に、開発においては、自社開発環境内で、オンプレサーバーやクラウド上のデータソースにアクセスするためにWeb検索することは多いです。

このような場面で選択した文字列をURLのクエリとして渡して検索できれば、僅かでも作業効率は上がります。

実際に調べると、このような用途に適したChrome拡張機能が複数公開されています。

本記事では、それらの拡張機能の内、個人的に良いなと感じた「Context Menu Search」 について紹介します。

Context Menu Searchについて

「Context Menu Search」は、右クリックメニュー(コンテキストメニュー)に任意の検索エンジンやURLテンプレートを追加できる拡張機能です。

chromewebstore.google.com

特徴は以下の通りです。

  • 選択したテキストをそのままURLに埋め込める
  • 複数の検索先を登録可能
  • 軽量でシンプル、UIも邪魔にならない

使用方法

例えば、以下のような用途を考えます。

https://hogehoge?id=bar

この場合「bar」の部分を選択したテキストに置き換えたいとします。

その場合の設定と使用手順は以下の通りです。

  1. Chrome右上の拡張機能アイコン
  2. Context Menu Search の「オプション」を開く
  3. 右クリック時にURLアクセスするための、タイトルとURLを入力します
  4. Addボタンで新規リストを追加
  5. タイトルを入力(例:Hogehoge Search
  6. URLを入力(例: https://hogehoge?id=%s
    %sが選択したテキストに置き換わります。
  7. Saveボタンで保存。
  8. Webページ上で検索したいテキストを選択(例:「issue25」)
  9. 右クリック → 「Hogehoge Search」を選択

これで、個別にコピー&ペースト、検索操作が不要で、即座に指定のURL(https://hogehoge?id=issue25)にアクセスできます。

Context Menu SearchのOption機能

まとめ

選択したテキストをURLに連結して検索する「Context Menu Search」について紹介しました。

この拡張機能はシンプルですがあると便利だと思います。

例えば、特定のサービスに文字列を渡して検索したい、社内システムのチケット番号などで直リンクしたい、といった用途に最適だと思います。

そのような用途があれば、追加して使用することをお勧めします。

以上です。

【Windows】PowerShellスクリプトを実行するショートカットを作成するスクリプトについて

経緯

ChatGPT等の生成AIにより、PowerShellスクリプトシェルスクリプトを作成する機会が増えました。一方でスクリプトの実行には、ターミナルアプリやPowerShellコマンドで実行する必要があります。

都度実行するのは手間ですが、WindowsではPowerShellスクリプトを実行するショートカットを作成できます。しかし、作成するためにはいくつか操作が必要です。

そこで、PowerShell実行用のスクリプトを簡単に作成するためのGUIツールを作成したので本記事で紹介します。

スクリプトと内部処理について

スクリプトの概要

スクリプト名は create-ps1-shortcut.ps1 で、GUIインターフェースを通じて以下の機能を提供します。

  • ファイル選択: Show-FileDialog関数を使用して.ps1ファイルを選択。
  • ショートカット作成: New-ScriptShortcut関数で、選択したスクリプトと同じディレクトリにショートカット(.lnk)を生成。
  • カスタムダイアログ: Show-CustomDialog関数で、作成完了後ガイドを表示し、保存先を開くオプションを提供。

また、スクリプトは下記GitHubにもコミットしています。

github.com

内部処理の詳細

  • PowerShell環境の検出: Get-PowerShellPath関数で、PowerShell Core(pwsh)が利用可能か確認し、なければ powershell.exeにフォールバック。
  • WScript.Shellの利用: COMオブジェクトを使用してショートカットを作成し、ターゲットパスや引数を設定。
  • WPFベースのGUI: XAMLを使用してカスタムダイアログを生成し、ボタンイベントで保存先を開く機能を実装。
  • デバッグ対応: -Debugパラメータで詳細ログを表示可能。

使用方法

create-ps1-shortcut.ps1 > 右クリック > PoweShellで実行 > ショートカットを作成したいPowerShellスクリプトを選択

なお、本スクリプト自体もショートカット化できるため、作成したショートカットを例えばタスクバーにピン留めすることで簡単に実行することもできます。

PowerShellスクリプトショートカット作成結果

まとめ

WindowsPowerShellスクリプトを実行するショートカットを作成するPowerShellスクリプトについて紹介しました。

生成AIを活用することで、アプリやスクリプトが作成しやすくなりましたが、それを効率的に実行していく方法も必要だと思います。本スクリプトがそのようなケースの一助となれば幸いです。

以上です。




以上の内容はhttps://7rikazhexde-techlog.hatenablog.com/より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14