2018年7月13日金曜日

nifcloud-python-sdk で MagicMock を使う方法

概要

結構手こずったのでメモ
ポイントはどのモジュールに @patch を当てるのかとメソッドをモック化するときは return_value が必要な点かなと

環境

  • macOS 10.13.5
  • Python 3.6.5

テスト対象のコード

  • vim nif.py
from nifcloud import session

class Nif(object):
    def __init__(self):
        self.cli = session.get_session().create_client(
            "computing",
            region_name="jp-east-1",
            aws_access_key_id="xxxx",
            aws_secret_access_key="xxxx"
        )

    def desc(self):
        return self.cli.describe_security_groups()

これをテストします

普通にテストすると

  • vim test_nif.py
import unittest
from nif import Nif


class TestNifClass(unittest.TestCase):

    def test_desc(self):
        n = Nif()
        res = n.desc()
        print(res)


if __name__ == '__main__':
    unittest.main()
  • python3 -m unittest test_nif.py

で普通に describe_security_groups がコールされます

モック化してみる

先ほどのテストをモック化して describe_security_groups を呼ばないようにしてモックがレスポンスを返却するようにしてみます

import unittest
from nif import Nif
from unittest.mock import patch, MagicMock


class TestNifClass(unittest.TestCase):

    # @patch('nif.session.get_session')
    @patch('nifcloud.session.get_session')
    def test_get(self, mock):
        mock_res = MagicMock(return_value={'RequestId': 'xxxxxxx'})
        mock.return_value.create_client.return_value.describe_security_groups = mock_res
        n = Nif()
        res = n.desc()
        print(res)


if __name__ == '__main__':
    unittest.main()

ポイントは 2 つでパッチを当てるのは @patch('nifcloud.session.get_session') というのと describe_security_groups のレスポンスをモックから返却させるために mock.return_value.create_client.return_value.describe_security_groups = mock_res をしている点です

前者は @patch('nif.session.get_session') でも動作します
後者はメソッドに対してモックを割り当てるため return_value が必要です
get_sessioncreate_client もメソッドになります

とりあえずこれでテストするとレスポンスが以下のようにモックからのレスポンスに変わります

  • pipenv run python3 -m unittest test_nif.py
{'RequestId': 'xxxxxxx'}
.
----------------------------------------------------------------------
Ran 1 test in 0.001s

OK

最後に

Python3 の unittest.Mock は非常に便利なモックライブラリかなと思います
メソッドだけでなく属性やクラス全体をモック化することもできます
ただ、使い方が結構複雑なのでマスタするまでに多少の学習が必要かなと思います

2018年7月8日日曜日

メルカリさんをちょろっと使ってみた感想

概要

タイトル通りなんですがちょろっと使ってみたので感想書きます
使い方などの説明はないです
長文です

価格帯の事前調査が必要

出品するにあたって価格を自分で決められるのが特徴なのですが、この価格の設定が重要な気がします
単純に高すぎると売れません、逆に安すぎると少し損をした気分になります (売れればそもそも損ではないですが)
いわゆる商品の「相場」を知りたいわけです
個人的には他に同じものを出品している人の価格や過去に購入された金額を参考にしています

時期によって価格が変動するものもあると思います
いわゆる「プレミア」になったものは価格が上がります
逆に旬が去ったものは過去の価格では絶対売れないので、安く設定しなければなりません
こんな感じで出品時期に応じて価格には適正があるかなと思いました

別に適正な価格を付けることは強制ではありません
少し深く考えすぎな気もするので単純に「自分が売りたい価格」を設定すれば良いと思います
ただ、その辺りの価格の相場を調べてその時期の適切な価格を設定しないとずっと売れ残ってしまうケースもあるかなと思います

値段交渉

メルカリ上でのやり取りでよくあるのは値段交渉です
購入者からコメントで「xxx 円でどうですか?」みたいなコメントはよくあります

オークション形式の出品と大きく違うのはこの値段交渉で、メルカリの場合は値段を下げていくのですがオークション形式の場合は値段が上がっていきます
出品時に自分が設定した価格以上では絶対に売れません (さすがにメルカリで値段を釣り上げる人は自分は見たことがないです、もしかしたらいるかもしれないですが)

要するに何が言いたいかというと設定した値段以下でしか売れないということを頭に入れておいたほうがいいかなと思います
一度値下げしてしまうと再度価格を上げるのは難しい気がします (そっと戻すのは全然可能ですが)
どうしても売りたくて値段交渉の結果売れるという可能性があるのであれば下げざるを得ないかなと思います
ただ、値段を下げたからといって必ず売れるとも限りません
その辺の購入者との探り合いというか駆け引きがあるのかなーと思いました

まぁこれも深く考えすぎな気がしますが

梱包が面倒

売れたあとに必ずしなければいけないのが梱包と発送です
特に梱包が個人的に面倒だなと感じました

これはフリマ系のアプリでは必須なのでメルカリに限った話ではないのですが毎回面倒だなと思います
慣れればそこまで面倒でもないのかもしれませんが、そもそも梱包のための道具を揃えなければいけなかったりするのでそれも面倒です

自分の場合はプチプチやハサミ、テープなどをホームセンターで揃えました
ここにもコストがかかっているので、できれば無料で手に入れられるタイミングでストックしておいてそれを使い回すなどしたほうが良いかなと思います
ただそれをストックしておく場所も必要になるのでそれも個人的には微妙かなと思っています

また梱包の仕方ですがこれまたいろいろと面倒で適当に梱包して送ったりすると配送の途中で箱が凹んだりしてクレームになったりします (自分は今までないですが)
評価にもつながる点かなと思っていて梱包が悪かったりすると低評価になることがあると思います
低評価は結局商品が売れるかにつながってくるのでできれば低評価はつけてほしくないところです

とかとかいろいろ考えると結局ある程度の梱包技術が必要になり、これもやり方を調べたり道具が増えたりと結構たいへんなことになります

発送は楽ちんなのですが、この梱包に関しても楽ちんな仕組みを作っていただけると助かるかなーと思いました

らくらくメルカリ便について

自分は配送に関してはらくらくメルカリ便しか使ったことがありません
超ざっくりとらくらくメルカリ便について説明すると

  • 購入後、QR コードが発行される
  • ファミマに行ってファミポートで QR コードをスキャン
  • レシートが発行されるのでレジに持っていく
  • 発送する商品にラベルなどを張って終了、あとは商品をコンビニに渡す

という流れになります
配送に必要な料金は自動的に購入金額から差し引かれます
サイズに応じて料金が変わるので詳細は公式を見てください

個人的にこれが良いと思う点は

  • コンビニから発送できる
  • 配送料金を支払う必要がない

かなと思います
郵便局を使ってゆうパックなどで発送することもできるのですが近くに郵便局がない場合に役に立ちます
また郵便局の場合はその場で発送料金を精算する必要があります
コンビニは 24 時間やっているので、発送受付自体も 24 時間受け付けてくれるのも助かる点かなと思います

定形外郵便などに比べると少し値段が高いですが手間を考えると、らくらくメルカリ便を使うほうが良いかなと思います
また宅急便として送るのであれば、配送日指定も可能です

売れ残りになってしまう

急に話が変わりますが、商品を出品してから 1, 2 週間以上売れないケースは結構あります
売れない商品は大抵「いいね」も「コメント」も付きません

自分は売れ残りになってしまった場合は一応値下げをします
しかしそれでも売れず、一向に「いいね」や「コメント」が付かない場合もあります
要するに「需要」がない商品なんだと思います

別にメルカリで出品し続けておくこと自体、維持費はかからないのでいつか売れればいいやという人は永遠に出し続けておけば良いと思いますが、自分は売ろうと思ったものがずっと家に放置されているのが嫌なので何とか売ろうとします

いろいろ試行錯誤してそれでもダメな場合は自分は潔く出品を取り下げて売るのを諦めます
だいたい諦めるのは 2 週間くらい音沙汰がないときかなと思います

個人的な最終手段

では、諦めた商品はどうするかというと別の手段で売ります
自分の場合「買取王子」を使ってしまいます

正直、買取王子は高く売れません
というかものすごい安い値段でしか買い取ってくれません
なので、本当に最終手段として使っています
金額で言うとメルカリで売ろうとした金額の 1/100 くらいかなと思います

ただ、買取王子の良いところは売りたいものを梱包して集荷さえすれば、あとは特に何もしなくて良い点です
しかも梱包に必要なダンボールや集荷の際の料金などは無料です
なので梱包や配送などにかかるコストや作業は全く必要ありません

その変わりと言っては何ですが買い取り価格が激安です
なので、もう絶対売れない、需要が全くない、そして自分でも使わない、必要ない商品であれば使っても良いかなと思います
商品の査定結果を確認してから実際に売るかどうか決めることはできますが、その場合は当然商品が返ってきます

自分はもう手放す気まんまんで使うので査定結果を確認せずに売ってしまいます
またお金には変えず多少なりと売上金額が上がる Amazon ギフト券にしています

API があれば

メルカリは基本的にスマホを使って操作することを想定しています
Web 版もありますが操作が限定されたりしています (自分は Mac で普段作業をしているので Web 版しか使ったことないですが)

スマホと Web 版があれば、取り引きや出品などの操作は十分なのですが、もし API があれば、いろいろ自動化できておもしろいんじゃないかなーと思いました

出品などもそうですが、価格の再設定や停止など何かをトリガーにしてできると楽になるかなーと思いました
発送はさすがに自動がするのは難しいかなと思いますが QR コードの取得などが API でできると更に楽になるかなと思いました

最後に

メルカリを使ってみた感想を思うがままに記載してみました
深く考えすぎな気もしますがメモとして残しておきたかったので書きました
みなさんも良いメルカリライフを

2018年7月6日金曜日

ゲームを辞めたら全然スマホを使わなくなった

概要

タイトルの通りです
スマホゲームをやめたら全くスマホを使っていないことに気が付きました
気がついたので思うところを書き留めてみました

冷静に考えるとゲームしかやっていなかったと思う

今や家庭用ゲーム機でゲームをするよりもスマホでゲームをする人のほうが多いんじゃないかなと思います
AR もできますしヘッドセットはいりますが VR もできます
またハードウェアスペックもパソコンと同等のレベルになりつつあり、3D グラフィックも簡単に動きます

単純にスマホのゲームのほうがおもしろい時代になったのではないでしょうか
自分もスマホを使っていろいろとゲームしてました

最近のスマホゲームはリワードの仕組みがえぐいです
「毎日ログインすると報酬 1 個」「今週 xxx を達成すると報酬 10 個」「イベントをクリアすると報酬 10 個」などユーザが継続してゲームするための仕組みがたくさんあります
そんな自分もこの仕組にまんまと嵌りゲームを続けていました

そんなある日、作業的にゲームを続けている自分に気が付きました
ゲームの楽しみ方は人それぞれなので何とも言えませんが自分は惰性でゲームを続けているのが虚しくなりました
朝起きてとりあえずログインして報酬をもらって、、、みたいな生活を何十、何百日と続けているじゃないかと

と思って辞めようと思ったが辞められない、、、
なぜか、それは簡単でせっかくここまで続けたのにここで辞めちゃうのかという「未練」みたいなものがあるのかなと思います
たぶんこれがスマホゲームを依存させる要因の 1 つなのかなと思いました
自分はあっさり辞めちゃいましたが

スマホでゲームをしていると暇さえあれば、アプリを開いていた気がします
たぶんゲームの特性にもよるのですが最近のゲームアプリはリアルタイム連動しており、ある時間にしか発生しないイベントなどを逃してしまう可能性があるからだと思います

本当に最近のスマホゲームはユーザの心理をよく考えたものになっていると思います

パソコンがある人はパソコンを使う

いきなりつらつら書きましたがスマホはゲーム以外のことも当然できます
が、パソコンがある人はパソコンでもできるケースがほとんどです

例えば Slack などはスマホ版もありますが Mac 用のクライアントも用意されています
Google ドライブや Evernote など最近のメジャーどころのアプリは必ずと言っていいほどパソコン版のクライアントも用意されています

なのでスマホがなくてもパソコンがあれば代用できます
むしろメインがパソコンでの操作でスマホはちょろっと確認したいときなどに使う感じかなと思います

なので、その辺のユーティリティアプリに関してはパソコンがあれば十分というかパソコンで使うのがメインになります

要するにスマホがなくてもスマホと同じ (もしくはそれ以上) の内容をパソコンで確認、操作できるのでスマホが不要ということになります

じゃあいつ使うのか、何に使うのか

基本的にはパソコンがある場合はパソコンを使います
なのでスマホは外出時にしか使いませんが、スマホでしかできないこともあるのでその辺り何に使っているのか紹介します

カメラ

最近のスマホのカメラはデジカメレベルのものが多いです
パソコンで代用は厳しいのでカメラは使います

監視カメラ

スマホのアプリで監視カメラアプリが最近はたくさんあります
カメラとして常駐させるアプリとそのカメラの画面を確認するビューワのアプリに分かれているケースがほとんどです
自分の場合、使わなくなってスマホを監視カメラにしています
これはパソコンでは厳しいのでスマホを使っています

開発機

主に iPhone ですが実機でビルドする際にスマホを使っています
使っていますというか使わざるを得ません

Kindle

本を読む際に Kindle アプリを入れて電子書籍で読んでいます
もしかするとゲームを辞めてからはこれが一番開いているアプリかもしれません
Kindle アプリを使うようになってからは電子書籍でしか本を読まなくなりました
当然パソコン版のクライアントもあるので外出時とパソコンがあるときで使い分けています

動画鑑賞

テレビが使えない、モニタが使えない、パソコンすら使えないという場合にスマホで見ています
長時間見る用途ではなく単発で見る用途で使っています

電話

実はスマホのメインの機能である電話ですが最近はほとんど使いません
が、これもスマホでしかできないのでたまーに使っています

連絡を取る

いわゆるメッセージアプリ系で使っています
主に LINE と Slack ですがどちらもパソコン版のクライアントがあるので、これも外出時にしか使いません

その他

あとは SNS やニュースなど情報収集で使っていますが、これらも正直パソコンがあれば事足りるのでスマホを使って確認するケースはほとんどないです

ゲームを辞めてどうなったか

一番はゲームをしている時間がなくなったのが大きいかなと思います
その時間を別の趣味にあてたりしています
毎朝ログインしていた謎の作業もなくなりました

あとはゲームに関する情報収集もしなくなりました
これも今となって考えると結構時間を割いていたんだなーと思います
スマホゲームは日々変化するので最新情報にアンテナを張っていた気がします

最後に

今回のケースが当てはまるのは大前提として「パソコンを常時使っている人」かなと思います
そうでない人は結局スマホ必須になると思います

今回のケースのようにスマホをほとんど使わない人で MVMO にしていない方はすぐにキャリア変更することをオススメします、、、
使わないのに毎月 3,000 円くらい支払うのはもったいないですからね

みなさんも実はゲームを辞めたらスマホいらなくなるかも
スマホを使わなくてもパソコン使ってたらそんなに変わらないんですけどね、、、