日頃の行い

個人的な日頃の行いをつらつら書いてます\\\\ ٩( 'ω' )و ////

2023年にiettyで物件探してサカイ引越センターのスタンダードプランで全部丸投げで引っ越しした話

タイトル通りiettyというサービスを使って物件を探して決めてサカイ引越センターで引っ越ししました。
実施したのは5月終盤で、それほど繁忙期ではない時期かなとは思います。
その時の備忘録をメモがてら書いておこうという気持ちです。

iettyで物件探し

iettyを使った理由としては会社がietty bizという福利厚生を利用していたのでそれを使いました。
ietty BIZ | イエッティ[オンライン接客型不動産]の提供する福利厚生プログラム

ietty bizを使うと何が良いかと言うと仲介手数料が90%OFFになります。
値切ることもなく90%オフは便利でした。この恩恵は支払いのときに現実とともに強く感じました。
条件があるんですけど、電話を受けるだけなので人と会話絶対したくないとかなければまあ許容できるかなと思います。
許容できなくても70%OFFにはなるので20%分が見合うかを天秤に測ると良いでしょう。

チャットである程度条件に合うものをBotで出してくれます。
使い始めた当時は東京23区か神奈川県の川崎市横浜市しかなかったんですが、
今は千葉、埼玉の一部も扱ってるようです。
https://ietty.me/area_view

条件の設定は最低限くらいしかなくて、あまり詳細な検索は出来なかった印象があります。
何度かチャットしていると、電話で不動産ポータルサイトを見ながらアドバイザーと直接相談する時間を取れたりしないか聞かれます。
このときはその予約を行い相談することにしました。

電話での相談

電話がかかってくるので、iPhoneのスピーカー状態にして妻と一緒に話を聞きました。
iettyの人と画面共有を行いつつ物件情報を見せてもらうので、PCかタブレットが必要になります。
自分はPC上でベルフェイスというサービスを使って画面共有を行って物件情報を見せてもらいました。

【公式】ベルフェイス - 金融シェアNo.1 電話面談システム

内見

運が悪かったのかどうかわからないですが、だいぶ内見にまでいけませんでした。
良さそうな物件を見つけても内見待ちしてる間に先に他の人が内見せずに契約してきたり、
2番手で内見待ちしてたけど、1番手の人が内見してそのまま決定してしまったりという感じで、
いいなぁと思う物件はなかなか内見できませんでした。
内見せずに契約を出来るタイミングもあったんですが、今回は必ず内見してから決めると心に決めていたので、その選択肢は取りませんでした。
中々内見にも行けず、担当の人もちょっと申し訳無さを感じてる様子が伺えたりしました。
根気強く付き添ってくれた担当の人には感謝です。
最終的には今の物件に決めて満足しています。

契約まで

契約がGWを挟む形になって色々ありました・・・
最悪だったのがこのタイミングで内見まで担当してくれた人が異動になってしまい、後から来た担当の人が正直微妙で、とてもつらい思いをしました。
当たり外れがあるなととても感じました()

具体的には、契約前に一応内見もう一つ行きたいと言っていたがその連絡がなかったり、
契約時に家賃引き落としの設定のために銀行に登録している銀行印が必要と言われたのがGW直前で、どうしてもっと早く言わなかったの?とかなったりしました。
そう感じてからは事細かくやって欲しいことを伝えたり、電話で話したことを議事録的にチャットに送ったりと仕事感満載の動きをしてとてもつらかったです。

引っ越し業者検討

とりあえずどこか投げてみようかなと思って、見つけたサカイ引越センターに投げてみるなどしました。
投げてから昔一人暮らしのところで使ったのもサカイ引越センターだったなぁなど思い出すなどしました。
最終的に、相見積りとか取る体力がなかったり、そもそも予算感的に問題なかったり、スタンダードプランという全部やってくれるプランがマジで何もしなくても良さそうだからこれでよくねって気持ちがめちゃくちゃわいてきたり、担当の人がスプラ3やっててちょっと話が盛り上がったりしたので、結局サカイ引越センターに決めました。

仕事しながらやる引越し業は一生仕事している感じしかなく、デッドラインが決まっている中でやる決断する作業を極限まで減らさないと脳内リソースが終わってて疲労で死にそうだったので、金でできる限り解決しようという気持ちが強かったのが割りと本当の理由ではあります。

サカイ引越センター スタンダードプラン

スタンダードプランは、引っ越しが午後なら当日の朝、午前なら前日に荷造りをすべてやってくれるプランで、
この時は荷造りを自分でやるエコノミープランに+50,000円でした。
引越し後の荷ほどきもやってくれるフルサービスプランも存在するんですが、そこは自分でやることにしました。
フルサービスプランでなくても、机やベッドの組み立てまでやってくれるので、後は自分でやるかという気持ちになり、そうしました。
フルサービスじゃなくても引っ越しが終わってしまえばダラダラ荷ほどきすればええやろという気持ちからそこにお金はかけませんでした。

www.hikkoshi-sakai.co.jp

引っ越し

事前準備

当日までほぼなにもしてないです。
「ほぼ」というのはいらないものは捨てていたのでほぼと言っています。
サカイ引越センターのスタンダードプランの件で、当日は朝9:00に女性の方が2人が来て箱に詰め続けてくれます。
その間座ってるだけです。お金を払って発揮してもらうプロの力を感じました。
ただ、PCやディスプレイについてるケーブル等は自身で外すようにと書かれていたのでとりあえず自分はケーブルを外し続けました。
最終的には13時前には終わりました。

実施

14時頃到着して、めちゃくちゃ手際良く持って行ってくれました。
机やベッドは解体して持ってって先で組み立ててくれるので本当にありがたかったです。
これやるのまじでやりたくねぇって気持ちで引っ越しが億劫だったりしたので・・・
最終的には14畳くらいの大きさの賃貸2人暮らしで、1時間半くらいで終わりました。

引越し先での荷ほどき

荷物を詰めた後の移動は自分でする必要があるので多分これくらいにつくと思うんだけどと伝えた上で電車で行きました。
結構予測のギリギリになってしまい、「すみません遅くなりました」って言ったら、明らかに先についてたのにリーダー的な人に「今ついたところです」って言われて、めちゃくちゃ気配りしてくれる優しい・・・とか思うなどしました。
その後はとりあえず突っ込んでもらいました。明らかに自分の部屋に荷物が多くて大変でした。
組み立てが必要だった机やベッドは元通り組み立ててもらいました。これがマジでありがたすぎて泣きました。

その他住所変更に伴ってしたこと

他にもあった気がするけどとりあえずメモると・・・

  • 電気ガス水道の手続き
    • 全部Webでやれて便利でした
    • 東京から神奈川に行くので、水道だけ手続きが別のサイトだった
  • 郵便物のe転居
    • これ名前間違ってしまって近くの郵便局で対応してって言われて行ったら紙で同じの書いてって言われてじゃあWebで同じのやれば良くない?とか行っても紙で書けしか言われなくてクソだった
      • 間違えた自分が悪いんだけど・・・
      • ちなみにその後Webで再度出したら問題なく転送されてきたので紙は書かなくても大丈夫だった
  • 転入届・転出届
  • 免許やマイナンバーカードの更新
    • マイナンバーカードは転入届を役所に出しに行った際に更新した
    • 運良く免許も隣に警察署があって更新した
  • 様々なサービスの住所変更
    • 銀行や証券口座やクレジットカードやショッピング系のサービスなど

まとめ

  • ietty bizだと仲介手数料値切ることもなく90%オフで便利
  • ウェブで物件見れるの楽で良い
  • サカイ引越センターのスタンダードプラン超絶便利
    • 前日まで普通に何もせず生活してられるのですごく良い

そんなこんなで少し距離のある引っ越しは初めてだったんですが、無事終わった良かったです。
またいつかあるかもしれないですが、その時も何も考えずサカイ引越センターのスタンダードプランに任せそうだなって気持ちになりました。
今は猫が飼える物件に来て猫がいる生活をしていてとても満足度が高いです。

数年前、突発性難聴にかかった時の話

この記事は難聴Advent Calendar 2022の14日の記事です。
なんか会社のチームメイトが作ったので昔自分が突発性難聴になったときの話を備忘録的に書こうかなと思いました。
adventar.org

もし今耳の調子が悪くてまだ病院行っていない人がこの記事を見ている場合、まずこのブラウザで近くの耳鼻科をググり、いち早く受診しましょう。
何もなかったらそれはそれで良かったという話なので、違和感がある場合、まず受診して突発性難聴でないことを確認しましょう。

参考 nlab.itmedia.co.jp

発症時の思い出

時は2017年1月15日片耳の聞こえ方がおかしいことに気づく、

次の日、起きたら問題なく聞こえるようになっていた。
しかし、そのまた2日後の18日の朝おかしいと感じたため、すぐ行きつけの耳鼻科に行きました。
そして無事(?)突発性難聴と診断されました。\(^o^)/

病院の思い出 ~ 音を顔で感じる聴力検査 ~

とりあえず家の近くの行きつけの耳鼻科に向かったところ、聴力検査をしてもらいました。
あー健康診断でやってるやつねって思ったけど、それの5倍くらい長めの検査でした。
これやってから健康診断のやつ本当に軽めなんだなってなりました。
また、健康診断でやってるやつの後に骨伝導版(なのかな?)の検査も行いました。
聞こえない方はまじで聞こえなくて、骨伝導版のとき、一生聞こえないなと思ったら振動がやばくて顔がブルブル震えて気がついたのを覚えています。

薬の思い出 ~ ゼリーは不味い ~

そのまま検査が終わり、結果のグラフで明らかに片耳が聞こえていないことがわかる様子を見せてもらいました。
そして突発性難聴と診断され、薬を確か一ヶ月分ほど処方されました。
この日は平日だったので、とりあえず薬をもらってそのまま出社しよ〜とか思ってたんですが、ゼリーの薬が大量すぎて持てるわけ無いやろみたいな量来たため、やむなく帰ったのを覚えています。
もしかしたらゼリーが処方されるんだ、ええやんとか思うかもしれませんがめっちゃまずくて最悪でした。

ゼリーが美味しすぎて()泣いてる様子

その後約1ヶ月間の生活の思い出

耳鳴りと睡眠

結構しんどかったのが耳鳴りの症状でした。
なんかクーラーの音とかがなんか音楽に聞こえたりとかして一生気になり続けたり、
耳の内部の方で冷蔵庫とかのじーーーーーって音が一生してて眠れず気が狂いそうでした。
当時知らなかったのですが、音楽に聞こえるというのは「音楽幻聴」という症状があるみたいですね。

アルコール

薬を飲んでいるので基本的にアルコールは飲まないようにしてました。
飲まないように・・・してたんですけど・・・最終的にはビールの誘惑に負けました・・・

運動

振り返ってみて運動大丈夫なんか?って思ったけどバスケの大会に出たらしいです。

今ググって見ると気圧の変化とかで耳に負担がかかるようなやつはやめといた方が良さそうだけど、完全に運動禁止ってほどではなさそうなので安心しました。
気になる人はお医者さんに聞いてみましょう。

完治

1ヶ月ほどたった後、病院に行ったところ聴力が回復していることがわかり、どうにか治ったようでした。
周りには、病院に行くのが遅れたことでまだ治っていない友人もいるので、運がよかったなと思います。
まじでスピードが命みたいなので、もし何か耳に違和感がある場合は、全てを投げ出して病院に行きましょう。

食べ物からふるさと納税まで2022年買ってよかったもの振り返り

今年結構色々買ったなぁと思ったので何買ったかを振り返って、
来年も買いたい物は買おうという気持ちから振り返ることにしました。

せっかくなのでアドベントカレンダーにしました。
adventar.org

食べ物たち

ベースブレッド

チョコレート味ならレンチンすると普通に食べれるなって感じなので朝食べるのに良かった。
中に入ってる脱酸素剤を取り除いて500Wのレンジで20秒とかなので、レンチンも簡単。

Amazon | BASE BREAD ベースブレッド チョコレート 完全食 完全栄養食 食物繊維 16袋セット | ベースフード | パン 通販

小粒のみかん

甘くて美味しいので既に3回ほどリピートしてる。
とりあえずなんか小腹空いたら食べれてしまうのでとても便利。(だが太る)

Amazon | みかん 訳あり 8kg 小粒 S 2S 3S サイズ混合 和歌山県産 有田 伊藤農園 柑橘 甘い 家庭用 小玉 御歳暮 みかん 減農薬 ノーワックス | 伊藤農園 | みかん・柑橘類 通販

チリトマトの低糖質版

普通のチリトマトと違いを自分は感じ取れないほどに美味しいのでおすすめ。
昼飯めんどくさいときにとりあえず食べれるので良い。

Amazon | 日清食品 カップヌードルPRO 高たんぱく&低糖質 チリトマトヌードル [1日分の食物繊維入り] 79g×12個 | カップヌードル | ラーメン 通販

ブタメンカレー

カレー味美味しい。ちょっと小腹が空いたときに食べるように箱買いしてる。

Amazon | おやつカンパニー カップブタメンカレー 37g×15個 | ブタメン | 食品・飲料・お酒 通販

ラベルレスの炭酸水

ウイスキーを割るのに使ったり、家で酒を飲むのを減らそうと炭酸水を買ったやつ。
間違いなく酒の量が減ったので良かった。
Amazon | [Amazon限定ブランド] アサヒ飲料 MS+B ウィルキンソン タンサン ラベルレスボトル 500ml×24本 [炭酸水] | MS+B(エムエスプラスビー) | 炭酸水 通販

ウイスキー碧 Ao

今年の初めにウイスキーに目覚めて炭酸で割ってハイボールで飲んでる。
飲みやすくて好きなので一生リピートしてる。
Amazon.co.jp: サントリー ワールド ウイスキー 碧 Ao [日本 ウイスキー 700ml お酒] : 食品・飲料・お酒

アスパラガス「さぬきのめざめ」

香川県ふるさと納税でアスパラやったらすごい良くてAmazonでも見つけて買ったやつ。
Amazon | アスパラガス「さぬきのめざめ」1kgセット | 網元大将 | アスパラガス 通販

むきえび ブラックタイガー

よく奥さんの料理にえびが出るのでなんか良い感じのやつを買ってみようって買った。
Amazon | ますよね ブラックタイガー使用!特大 むきえび 1kg (背ワタなし 海老 エビ)【巣ごもり応援】 | 越前かに問屋ますよね | エビ 通販

福岡有明のりのボトルのり

ここの塩のりボトルと味のりボトルが美味しくてよかった。
初めはボトル3本セットで買って試した後に、味のりと塩のりをまとめて買ってる。
白米と一緒に食べることが多かったので焼のりは他に比べたら別にという感じになってしまった。

nori.fukuoka-ariake.com

日用品というかガジェットというかみたいな物

腹巻き

お腹の冷え対策をしたくて買ってみたやつ。
寝るときにお腹出してても大丈夫(そういう問題じゃない)なので便利。
外が寒い時もたまに着てる。

Amazon | [グンゼ] 腹巻 Haramaki 体にフィット ストレッチ 男女兼用 MK1001 チャコールグレー 日本F (FREEサイズ) | インナーウェア 通販

ワイヤレス充電器

iPhoneSE使ってて机の上とベッドの横らへんに置けるようにしてる。
とりあえず置けばいいのはやはり楽。

Amazon.co.jp: Anker PowerWave 10 Stand ワイヤレス充電器 Qi認証 iPhone 14シリーズ / 13シリーズ Galaxy 各種対応 最大10W出力 (ブラック) : 家電&カメラ

ティファール 電気圧力鍋(炊飯器)

一人暮らし時期からずっと使ってた炊飯器を引退させてタイムセールのときに買った。
こいつのせいでご飯が美味しくなって太った。

Amazon | ティファール 電気圧力鍋 3L 2~4人用 1台10役 独自の煮込み鍋 「ラクラ・クッカー コンパクト」 時短 レシピブック付き(50種類) ブラック CY3508JP | ティファール(T-fal) | ホーム&キッチン

マジック結束バンド

家にHDMIとか充電ケーブルとか様々なケーブルがあってそれを整理したくて買った。
使わずにしまうやつは8の字巻きにしてこのバンドで止めて袋なりに突っ込んで整理できたのでとても良い。

Amazon | CableMGT マジック結束バンド はさみは必要ありません 調節可能な長さ 結束テープ 面ファスナー 配線整理 ケーブル/コード等収納 (幅15mm x 長さ5m x 2巻) 合計10m | 配線アクセサリー | 文房具・オフィス用品

ダンボーの折りたたみコンテナ

ものを整理したくて買った。
多めに買っておいても折りたたんで置けるのでとても便利。
それなりに物も入るしなにより可愛いので良い。

Amazon | 【Amazon.co.jp限定】TRUSCO(トラスコ) ダンボー 薄型折りたたみコンテナ 50L ロックフタ付 TR-C50B-A-DNB | 物流コンテナ

PCゲーム用にxboxのコントローラー

前から気になっていたのでゲームするように買ってみた。
普段はPS4のコントローラーをPCにつなげてやっていたが、こいつは遅延が少なく感じるので良かった。
最近DbDができていないのでまたやりたい・・・

Amazon | Xbox ワイヤレス コントローラー (カーボン ブラック) | ゲーム

フォーウェイ・サラダスピナー

会社のチームメイトが昔のチームメイトにおすすめされた物をおすすめされて買ったやつ(複雑)。
奥さんとサラダスピナー場所取りそうなので買いたくないなーって話してたんだけど、
こいつはサラダスピナーだけじゃなく、ザルやボウルにも使えるので便利じゃんとなり買った。

www.keyuca.com

バスタオルも干せる伸縮式ハンガー

なんかテレビでカインズの紹介があって、タオル干せて便利じゃんってなったので買った。

www.cainz.com

漫画

普段ebookjapanの電子書籍で買ってるんだけど、奥さんもハマっていて何回も見返したくなるやつは物理で買って本棚に置こうと決めたので物理本でも買うようにしたやつ。

薫る花は凛と咲く

とても平和で優しい気持ちになるので全人類見て欲しい。
薫る花は凛と咲く(5) (講談社コミックス) | 三香見 サカ |本 | 通販 | Amazon

葬送のフリーレン

たびたび時間の経過を感じる描写が好きすぎるので全人類見て欲しい。
葬送のフリーレン (9) (少年サンデーコミックス) | 山田 鐘人, アベ ツカサ |本 | 通販 | Amazon

ふるさと納税

アスパラガス「さぬきのめざめ」

これを試してみてよかったのでAmazonでも買った。

www.satofull.jp www.satofull.jp

種無しスイカブラックジャック

去年も買ったスイカ
種がないのでマジでいい。

www.satofull.jp

ブロッコリー

美味しいブロッコリー
5000円で軽く試せるので良かった。

www.satofull.jp

ホワイトコーン

あまーいとうもろこしだった。
とても良いのでまた買いたい。

www.satofull.jp

Rustのgoogle/arghライブラリで引数をstructにbindする

GWにRustを触り始めたら楽しくなってきました。
新しい言語を触るのはやはり楽しいです。
今回はなんやかんやするコマンドを作ろうと思って、
引数をいい感じにしてくれるライブラリないかなと思って調べてたら、
googleのarghというライブラリがあったのでそれを触った備忘録です。

google/arghはこちら

github.com

基本的に使用するCargo.tomlはinitして、dependenciesにarghを追加した下記のようなのものでした。

Cargo.toml

[package]
name = "argh_opt"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
argh = "0.1.7"

目次

1.1 --hoge fugaのようなオプションを設定する

よくある ./bin/foo --hoge fuga みたいなやつですね。
これを実装してみましょう。

src/main.rs

use argh::FromArgs;

#[derive(FromArgs, Debug)]
/// 
struct FooArg {
    /// hoge
    #[argh(option)]
    hoge: String,
}

fn main() {
    let a: FooArg = argh::from_env();
    println!("{:?}", a);
    println!("{:?}", a.hoge);
}

/// があるのは、descriptionを書くのが必須のようで、エラーになってしまうからこうしました。
argh(description= "...")とも書けるようですが、ドキュメンテーションコメントで書いても拾ってくれるみたいでした。
これを実行してみるとこんな感じになります。

$cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.22s
     Running `target/debug/argh_opt`
Required options not provided:
    --hoge

$cargo run -- --hoge fuga
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/argh_opt --hoge fuga`
FooArg { hoge: "fuga" }
"fuga"

これで--hogeが必須のオプションになりました。
--hogeを必須ではなく任意にしたい場合は下記のように型を Option[String] にするといいようです。

struct FooArg {
    /// hoge
    #[argh(option)]
    hoge: Option[String],
}

1.2 数字やbool値を引数に渡す

次は ./bin/foo --hoge bar -- fuga --piyo 100 みたいなものを目指します。
数字は型に数字系のデータ型を指定し、
boolはoptionではなくswitchを指定することで使えるようでした。

use argh::FromArgs;

#[derive(FromArgs, Debug)]
/// 
struct FooArg {
    /// hoge
    #[argh(option)]
    hoge: String,

    /// fuga
    #[argh(switch)]
    fuga: bool,

    /// piyo
    #[argh(option)]
    piyo: i32,
}

fn main() {
    let a: FooArg = argh::from_env();
    println!("{:?}", a);
    println!("{:?} {:?} {:?}", a.hoge, a.fuga, a.piyo);
}
$cargo run -- --hoge foo --fuga --piyo 10
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/argh_opt --hoge foo --fuga --piyo 10`
FooArg { hoge: "foo", fuga: true, piyo: 10 }
"foo" true 10

# 数字の部分に文字列を渡したらエラーにしてくれました
$cargo run -- --hoge foo --fuga --piyo bar
    Finished dev [unoptimized + debuginfo] target(s) in 0.35s
     Running `target/debug/argh_opt --hoge foo --fuga --piyo bar`
Error parsing option '--piyo' with value 'bar': invalid digit found in string

zsh: exit 1     cargo run -- --hoge foo --fuga --piyo bar

1.3 デフォルト値を設定する

default = "関数名"で指定してあげると良さそうでした。
ダブルクオートの中に文字列で関数を指定するのどことなく不思議な感じがしますね。

use argh::FromArgs;

#[derive(FromArgs, Debug)]
/// 
struct FooArg {
    /// a
    #[argh(option, default = "String::from(\"hoge1\")")]
    hoge1: String,
    /// a
    #[argh(option, default = "default_hoge()")]
    hoge2: String,
    /// a
    #[argh(option, default = "\"hoge\".to_string()")]
    hoge3: String,
}

fn main() {
    let a: FooArg = argh::from_env();
    println!("{:?}", a);
    println!("{:?} {:?} {:}", a.hoge1, a.hoge2, a.hoge3);
}

fn default_hoge() -> String {
    return "hoge2".to_string();
}

なお、関数の型があっていないときはコンパイルエラーになりました。
例えば上記のdefault_hogeをi32が返るように変更し、
コンパイルするとエラーになった様子です。

fn default_hoge() -> i32 {
    return 100;
}
error[E0308]: mismatched types
  --> src/main.rs:10:30
   |
10 |     #[argh(option, default = "default_hoge()")]
   |                              ^^^^^^^^^^^^^^^^- help: try using a conversion method: `.to_string()`
   |                              |
   |                              expected struct `String`, found `i32`

便利ですね〜

1.4 from_str_fnを使って文字列をstructに変換する

なんらかのフォーマットのデータを入力時に変換してもらおうと思います。
例えば 14:15 のような時間のフォーマットを変換します。
./bin/foo --time 14:15 みたいなコマンドのイメージです。
from_str_fnに、 &strを受け取りResult<T, String>を返す関数を渡すといい感じに変換してくれるみたいでした。

use argh::FromArgs;

#[derive(FromArgs, Debug)]
/// 
struct FooArg {
    /// a
    #[argh(option, from_str_fn(str_to_time))]
    time: Time,
}

#[derive(Debug)]
struct Time {
    _h: u32,
    _m: u32,
}

fn str_to_time(v: &str) -> Result<Time, String> {
    let x: Vec<&str> = v.split(":").collect();
    let h = match x[0].parse::<u32>() {
        Ok(x) => x,
        Err(e) => return Err(e.to_string())
    };
    let m = match x[1].parse::<u32>() {
        Ok(x) => x,
        Err(e) => return Err(e.to_string())
    };

    if h >= 24 {
        Err(format!("{} is too large", h))
    } else if  m >= 60 {
        Err(format!("{} is too large", m))
    } else {
        Ok(Time { _h: h, _m: m })
    }
}

fn main() {
    let a: FooArg = argh::from_env();
    println!("{:?}", a);
    println!("{:?}", a.time);
}

実行してみると

$cargo run -- --time 14:15
    Finished dev [unoptimized + debuginfo] target(s) in 0.05s
     Running `target/debug/argh_opt --time '14:15'`
FooArg { time: Time { _h: 14, _m: 15 } }
Time { _h: 14, _m: 15 }

# ResultのErr側に渡したStringをメッセージとして出してくれるようですね
$cargo run -- --time hoge
   Compiling argh_opt v0.1.0 (/Users/arata/Documents/Workspace/rust/argh_opt)
    Finished dev [unoptimized + debuginfo] target(s) in 0.52s
     Running `target/debug/argh_opt --time hoge`
Error parsing option '--time' with value 'hoge': invalid digit found in string

みたいな感じでした。

2.1 sub commandを使う

次はサブコマンドを実装してみます。
./bin/foo hoge./bin/foo fuga みたいなやつです。
これを実装してみます。
enumでコマンドを作成し、
それぞれarghのマクロにsubcommandと渡してあげれば良さそうでした。  

use argh::FromArgs;

#[derive(FromArgs, Debug)]
/// 
struct FooArg {
    #[argh(subcommand)]
    _command: SubCommand,
}

#[derive(FromArgs, Debug)]
#[argh(subcommand)]
enum SubCommand {
    Hoge(HogeCommand),
    Fuga(FugaCommand),
}

#[derive(FromArgs, Debug)]
/// h
#[argh(subcommand, name = "hoge")]
struct HogeCommand {}

#[derive(FromArgs, Debug)]
/// h
#[argh(subcommand, name = "fuga")]
struct FugaCommand {}


fn main() {
    let a: FooArg = argh::from_env();
    println!("{:?}", a);
}

実行してみるとこんな感じ

$cargo run -- hoge
    Finished dev [unoptimized + debuginfo] target(s) in 0.06s
     Running `target/debug/argh_subcommand hoge`
FooArg { _command: Hoge(HogeCommand) }

$cargo run -- fuga
    Finished dev [unoptimized + debuginfo] target(s) in 0.02s
     Running `target/debug/argh_subcommand fuga`
FooArg { _command: Fuga(FugaCommand) }

$cargo run -- piyo
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/argh_subcommand piyo`
Unrecognized argument: piyo

2.2 sub command内でオプションを使う

サブコマンドにオプションをつけるのは、
サブコマンドのstructに、1.xでやったようにオプションを追加するだけでよかったです。
試しにhogeコマンドにpiyoというオプションを追加してみます。

use argh::FromArgs;

#[derive(FromArgs, Debug)]
/// 
struct FooArg {
    #[argh(subcommand)]
    command: SubCommand,
}

#[derive(FromArgs, Debug)]
#[argh(subcommand)]
enum SubCommand {
    Hoge(HogeCommand),
    Fuga(FugaCommand),
}

#[derive(FromArgs, Debug)]
/// h
#[argh(subcommand, name = "hoge")]
struct HogeCommand {
    /// piyo
    #[argh(option)]
    piyo: String,
}

#[derive(FromArgs, Debug)]
/// h
#[argh(subcommand, name = "fuga")]
struct FugaCommand {}

fn main() {
    let a: FooArg = argh::from_env();
    println!("{:?}", a);
    match a.command  {
        SubCommand::Hoge(x) => println!("{}", x.piyo),
        SubCommand::Fuga(_) => (),
    }
}

実行してみるとこんな感じ

cargo run -- hoge --piyo fooooo
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target/debug/argh_subcommand hoge --piyo fooooo`
FooArg { command: Hoge(HogeCommand { piyo: "fooooo" }) }
fooooo

感想

  • とりあえずこれ使っておけばやりたいことはできそうだなーと思った
  • google製だから安心かなと思ったけどREADMEの最後に↓って書いてあって少し不安になったw
    • NOTE: This is not an officially supported Google product.

  • Rust楽しい