のらぬこの日常を描く

ノージャンルのお役立ち情報やアニメとゲームの話、ソフトウェア開発に関する話などを中心としたブログです。

【mac】2017年版:世界一軽量な(推定)シャッフル専用音楽プレーヤー

どうものらぬこです

今日は、とても軽くて、メモリーもほとんど食わないmacで使える音楽プレーヤ(?)の紹介の話です。

数週間前に購入した mac mini にもようやく慣れてきました。

ビデオキャプチャーボード挿してなんかやりたいだとか、テレビ録画したいからPT3挿したいとか、心はいつまでも高@生の如くエ口ゲープレイを続けたいとか、そういう願望がないのであれば、Windowsmacも変わんないですね。

さて今回は、macで使える「世界で一番軽いかもしれないシャッフル専用音楽プレーヤー」を紹介してみます。

f:id:noranuk0:20170524222935p:plain

macには、iTuneという音楽再生以外にも色々できるソフトウェアが最初から付いていますが、ライブラリに曲が何も登録されていない状態でも100Mb近くのメモリーを消費しているようです。しかし、今回紹介する音楽プレーヤーは数千曲のmp3ファイルをシャッフル再生中でも消費メモリーは5Mbほどです。

また、Windowsにしろmacにしろ、音楽ライブラリーと称してid3タグの情報をDB化して管理してくれる系のアプリが最近の流行りのようです。

でも、そんなのいらないからフォルダ指定したらそのフォルダ以下(サブフォルダ含めて)の曲を順番or適当に再生してくれればそれでいいという人もきっと多いと思います。

今回紹介するのは、そういった人向けのとっっても軽い音楽プレーヤーです。

ただし、以下のような事はできません

  • ユーザインタフェースがありません。
    • プレイヤーのウィンドウもないし、メニューのステータス領域に常駐もしません。terminalを立ち上げておく必要もありません。
    • スキップや一時停止など、再生と停止以外の操作はできません。
  • 再生中の曲情報(タイトル、アルバム名、作曲者等)は表示できません。
  • もちろんアルバムアートも表示できません。
  • イコライザとかそんな高級機能ありません。
    • でも、音はそこそこいいと思います。
  • アプリダウンロードして実行するだけ、という訳にはいきません。
    • 自分で作ります。シェルスクリプトを書くところからはじめます。
      • 難しいことを知らなくても使えるように、この記事では(ほぼ)コピペでできるように手順を一つ一つ説明しています。

曲をBGMとして再生できればそれでいいよっていう方で、もし興味ありましたらこの先を読んでみてもよろしいかと思います。

逆に、シンプルでも見た目がきれいな普通の音楽プレーヤーをお探しの場合、この記事はちょっとお役に立てないと思います。

最初にネタばらし

そこそこなんか色々知っている人向けに先にタネ明かしをしてしまうと、中身は .app化した afplayer です。

ただし、afplayer は「曲を1回だけ再生する」という機能しか備わっていないません。シャッフル再生を実現するために、対象音楽ファイルのパス一覧が記載されたプレイリストファイルをランダムソートして、1曲毎にafplayer を起動する方法を取っています。

以下、手順と原理を簡単に説明します。細かい手順は次項で説明します。

  1. 再生したいmp3ファイル一覧が1行1ファイルの形で書かれたプレイリストファイルを作成します。
  2. 音楽プレーヤーの正体は「afplayer」というCUI(ターミナル上で動く)アプリです。
  3. afplayerには、複数の曲を再生する機能が備わっていないため、ランダム再生や曲リストの再生機能は、シェルスクリプト等で補ってやります。
  4. terminalからそのまま起動するとシェルを1つ専有して邪魔なので nohup ~~~ >/dev/null 2>&1 & で括ってプロセスをshellから切り離します。
  5. 音楽聞いてる時にスリープされると悲しいので、「caffeinate」というコマンドを利用して、再生中のスリープを抑制しておきます。
  6. 曲を止めたいときは killで止めちゃいます。
  7. 毎回コマンド叩くのめんどくさいので、音楽再生中なら停止、再生してなかったら再生開始するシェルスクリプトを作ります。
  8. terminal立ち上げるのもめんどくさいのでアプリ化して、ついでにいい感じのアイコンもつけてあげます。
  9. これをdockに載せて完成。アプリアイコン突っつくたびにシャッフル再生開始>停止 を繰り返します。

作ってみる

アプリを作る

アプリを作るといっても、別にプログラム書いたり開発ツール入れたりとかはいらないです。 なんかうまく動かなかったときのために、多少前提知識はあったほうがいいですが、多分コピペで動くように作ってあります。

というわけで、実作業を開始します。

作業は、ターミナルウィンドウ上でコマンドを叩きながら行うので、取り合えずターミナルを起動してください。

最初にプレイリストファイルを作成します。

諸般の事情により、プレイリストは ~/Music/playlist.txt という名前で用意します。

場所を変えたい方は、このあとで出て来る playlist.txt を参照している箇所をなんかいい感じに読み替えたり置き換えたりしてください。

$ cd ~/Music
$ find ~/mnt/share/MUSIC -name *.mp3 > ./playlist.txt
$ find ~/mnt/share/MUSIC -name *.flac >> ./playlist.txt
$ find ~/mnt/share/download -name *.mp3 >> ./playlist.txt

音楽ファイルの保存場所に合わせて、パスの指定は適切に変更してください。

いったんホームディレクトリに戻り、適当な作業ディレクトリを作ります。

$ cd ~
$ mkdir work
$ cd work

作成するアプリの雛形を作ります。

$ mkdir shufflePlay.app
$ cd shufflePlay.app
$ mkdir Contents
$ cd Contents
$ mkdir MacOS
$ mkdir Resources

大文字と小文字、全角と半角の区別に注意してください。

次に、./Contents/MacOS 内に以下の内容の shellscript を作成し、更に実行権限も与えます。

$ cd MacOS
$ pwd
$ vi play.sh
#!/bin/sh

cd ~/Music

kill `pgrep -lf /play.sh|awk '{print $1}'`
IS_KILLED=$?
pkill afplay

if [ "$IS_KILLED" -ne 0 ]
then
  echo play start
  nohup cat playlist.txt | while read x; do echo -e "$RANDOM\t$x"; done | caffeinate -i sort -k1,1n | cut -f 2- | while read x; do afplay -q 1 $x; done >/dev/null 2>&1 &
else
  echo play stoped
fi
$ chmod +x play.sh

なお、hdmiなどで接続したディスプレイの内蔵スピーカーから音を出している方は、「caffeinate -i … 」の部分を「caffeinate -id … 」としてください。

ここまでの作業まで完了すれば、作成したshell script を実行することで曲の再生が始まり、もう一度実行すれば曲の再生が停止するはずです。

$ ./play.sh

うまく動かない場合、これまでの手順の見直しや、スピーカー音量の確認などを行ってください。

アプリの挙動を記載した Info.plist というファイルを ./Contents 以下に作成します。

アプリが起動した時に、先ほど作成したシェルスクリプトを動作させるようにしています。

また、アプリのアイコンの指定もこの中で行っています。

$ cd ..
$ vi Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>CFBundleExecutable</key>
    <string>play.sh</string>
    <key>CFBundleIconFile</key>
    <string>play.icns</string>
  </dict>
</plist>

最後に、アプリアイコンを作ります。

めんどくさかったらこの手順はスキップしても良いのですが、せっかくなのでアプリのアイコンもそれっぽやつを作りましょう。

絵心がある方は自分で描いてもいいですし、そういうのは先人の資産を活用したいという方は「音楽プレーヤ アイコン」などの検索ワードで検索すれば色々と出てきます。著作権には気をつけつつ、その辺利用するのも一つの手とお思います。

画像の形式は、png が使えればいいのですが、.icns というファイル形式にする必要があります。

下記のサイトを利用すれば、webブラウザで、png 形式の画像を icns ファイルに変換することができます。

Convert PNG to ICO and ICNS icons online - iConvert Icons

作成した.icns ファイルは、./Contents/Resources/ ディレクトリに play.icns という名前で保存します。

ここまでの作業で、shufflePlay.app ディレクトリの中はこんな感じになっているはずです

.
└── Contents
    ├── Info.plist
    ├── MacOS
    │   ├── nohup.out
    │   └── play.sh
    └── Resources
        └── play.icns

以上で完成です、作ったアプリを Finderなどでアプリケーションディレクトリに移動すれば LaunchPadにアプリが現れるはずです。もちろん アプリをdockにドラッグ&ドロップすれば、dockにも追加することもできます。

試しに、アプリを機動すると、音楽再生が始まります。もう一度起動すると停止します。

以後、アプリを起動するたびに、曲の再生開始>停止>再生開始>停止 が繰り返されるはずです。

参考サイト

今回、参考にさせていただいたサイト様です。

うまく動かない、ということがあれば、こちらのサイトも参考にしてみてください。

caffeinate - Macのスリープを抑制できる純正コマンド

技術/MacOSX/シェルスクリプトを".app"("Bundle")化する - Glamenv-Septzen.net

徹底的にソフトウェアで豊かな音を奏でてみよう - ザリガニが見ていた...。

テキストをランダムにソートする - 揮発性のメモ

というわけで、今回の記事はここまでです。

この記事が、皆様の音楽ライフの一助となれば幸いです。

ちなみに、僕が使っているPC用のスピーカーがこちらです。若干低音強めですがいい音で鳴らしてくれます。

最後までお読みいただいてありがとうございました。

macのwebブラウザがなんか重い、それはマウスの仕業かも?

どうも、のらぬこです。

今回は、mac minimac book、iMacなどをUSB接続のWindowsホイールマウスで使っていて、なんかブラウザのスクロールがもたつくなーっと感じていたら、それはmacの性能が低いからではなく、macOSがダメなせいです。マウスを変えるか対策アプリを入れれば改善できるよって言うお話です。

mac mini、ブラウザがなんか重い・・・

さて、前回記事の話題となった先日購入したmac miniですが、、、

Windows機と比べると、

  • 標準のファイラー*1が使いづらい
  • samba接続がやたら不安定
  • フロントにUSBが1つもないのはどうなの

などなど、色々物申したいことはあるのですが*2iPhoneアプリ開発というかswiftの勉強目的で毎日頑張って使っております。

さらに、使用開始してからなんとなく感じていたのですが、Webブラウザの動きがなんか重いのです。

ページロードが遅いとか、レンダリングが遅いとか、javascriptが遅いというか、なんかスクロールするとすごいもたつく感じです。

しかも、タブの数、ページによらず常にもったり。

前職で使ってた core i5 i.6Ghzの macbook air でもそんなことはなかったのになー、と思いつつ、しばらく使っていて、なんとなく原因がわかってきました。

マウスのホイールをゆっくり回すと全くスクロールしない!

Windowsユーザからすると、早く回そうがゆっくり回そうが「マウスホイール一目盛=3行分スクロール」*3が常識なのですが、macの場合はどうやら違うようでした。

macの場合、ホイールにも加速の仕組みがあるようで、早く回すと高速スクロール(ひと目盛りあたりたくさんスクロール)、ゆっくり回すとゆっくりスクロール(ひと目盛りあたりちょっとだけスクロール)、そして超ゆっくり回すと全くスクロールしないようにできているのだとか。

更に、高速回転、低速回転、超低速回転の判断がつかないマウスホイール最初のひと目盛りでは全くスクロールしないようになっています。

初動が遅れるので当然動きがもったりした感じになる。

もうね、アホかと。お前ら実装し終わってテストして本当にこれでいいと思ったのか、小一時間ほど問い詰めたい気分になりました*4

解決方法

どうもこの現象、USB接続のホイールマウスのみで発生するようです。

嘘でした、Bluetoothマウスでももったりした動きします。

なので、(あれば)Bluetoothマウスmagic mouse(2)、magic trackpadなど、USB接続ホイールマウス以外のデバイスを使えば、改善するのだと思います(未確認)。

なお、普通のホイールマウスを使いたい場合、USB接続のマウスであれば、USB overdrive というアプリを使うと ホイールの動きをWindowsと同じような感じに変更することができるようになります。

まずは、以下のサイトから usb overdrive をダウンロードし、インストールしてください。有料アプリですが、無料でも使い続けることはできるようです。 ©1999-2016 Alessandro Levi Montalcini

インストール後、再起動を求められたら素直に再起動しましょう。

再起動後、画面左上のりんごアイコンなどから「システム環境設定」を開くと、USB overdrive という項目が増えているのでそいつを選択します。

f:id:noranuk0:20170518010540p:plain

設定画面が表示されるまで、10秒ほど待たされます。画面が表示されてから10秒後、真ん中の「Register Later」 というボタンが押せるようになります。

なお、「Buy Online」からお金を支払って登録コードを受け取ればこの制限はなくなると思います。

f:id:noranuk0:20170518010526p:plain

設定画面が表示されたら、[Wheel up]、[Wheel down]を以下のように設定してください。

f:id:noranuk0:20170518010556p:plain

Direction(方向)は、Windows風なら up => UP down => DOWN で、mac風ならその逆です。 このアプリを入れると、「システム環境設定」→「マウス」のスクロール方向の設定はこのアプリの設定で上書きされます。

speedは、Windowsだと3Lineですが、体感で5Lineくらいがちょうどよいと感じました。お好みで微調整してください。

また、画面左下のSpeed(こちらはポインタ移動速度です)、Acceleration(加速度)の設定も、チェックの有無にかかわらず「システム環境設定」「マウス」の設定は無視されます。標準の設定から変更している場合、こちらで設定し直してください。

それと、一点ほど注意点があります。

多分アプリのバグだと思うのですが、マウスポインタの表示サイズを手動で変更している場合、このアプリを使用しているとスリープから復帰したときに標準サイズに戻ってしまうようです。

USBマウス+USB overdrive で頑張る場合、そこは我慢するか、不具合修正に期待するしかなさそうです。

macホイールマウスで使っていて、なんかブラウザの動きが重いって常々感じている方がおられましたら一度お試しください。

今回の話は以上となります。

お読みいただいてありがとうございました。

*1:Windowsで言うエクスプローラmacで言うFinder

*2:というか、Windows機とmac機、普段使いとしてどちらか一台しか選べないとしたらmacを選ぶ理由は何もないと思うくらいには好きじゃないです。mac

*3:設定で変えられたかも

*4:僕は、magic mouse買わせたいからわざとそうしたんじゃないかと疑ってます

Windowsユーザ向け、mac miniをWindowsっぽく快適に使う小技集

前職で1年ほどmac book使ってましたが、それまではほぼWindows、そして仕事とか自宅鯖とかなんとなくお試し程度にLinuxも使ってたのらぬこ(@noranuk0)です。

そんな僕が、先日 mac mini を買いました。

公式販売価格は88000円(税抜き)なので、約35%引きと割りとお得な買い物だった気がしております。

起動して S.M.A.R.T情報を眺めると通電時間は約800時間、それなりには使われていたと思いますがSSD劣化などの心配は全くなさそうです。

ちなみに、モニター、キーボード*1、マウス*2は自宅で余っていたものを使いまわしております。

さて、ここ1週間は自宅ではほぼほぼmac使いになっているわけなのですが、操作がやっぱりwindowsとはかなり違っているわけでして、やっぱりどうにも使いづらいところが多々出てくるわけで。

仕事ではWindowsマシーンを使っている都合上、特にキーボード、マウスの操作性はできるだけWindowsと同じにしたいと思うわけで。

そんなわけで、色々調べつつ、設定変更やカスタマイズ系アプリを入れるなど行い、結果、Windowsと大体おなじような操作性を手に入れることができました。

今回はそのあたりを紹介したいと思います。

前提条件

僕のmac mini環境はこんな感じです。

  • mac OS sierra
  • キーボード Windows用 日本語キーボード(無線)
  • マウス Windows用 2ボタン+ホイールマウス(無線) OSのバージョン、入力デバイスの種類によっては、今回の記事に書かれていることがうまく実現できないかもしれません。

僕もmacには詳しくないので、もしうまく動かないような場合には、すみませんがお力に離れないと思います。

ちなみに、僕が使ってるキーボード&マウスはこちらです。

USBに受信機を挿すタイプの無線キーボード&マウスです。一応ロジクール製で、受信機1つで、キーボードとマウス両方使えるのもおすすめです。

早速カスタマイズをする

ここからは、「僕がうまくやったやり方」を説明していきます。

マウスホイールのスクロール方向をWindowsと同じ感じに

購入したてのmacは、マウスホイールでのスクロール方向がWindowsと逆向きです。

Windowsと同じ向きにするには設定が必要です。

  1. 画面上のメニューバーの左端のりんごアイコンから「システム環境設定」を選びます。
  2. マウス という項目を探して選択します。
  3. スクロールの方向:ナチュラルのチェックを外します。
  4. マウスの移動速度(軌跡の速さ)、スクロール速度なども変更できるので、ついでにお好みで変更しても良いかと思います。

日本語入力の切り替えを [半角全角] キーで行う

これ、割と一筋縄では行きません。

入力ソースの切り替えに使用するショートカットキーは、はシステム環境設定のキーボードから変更ができるのですが、日本語Windowsキーボードをmacにつなぐと、半角全角キーが「`」に割り当てられてしまい、このキー単体をショートカットキーとして設定することはできないようになっています。

標準機能だけでなんとかするのはおそらく不可能で、これを実現するにはアプリの力が必要です。

今回は、「Karabiner-Elements」という、キーコードをかなり自由にカスタマイズできるアプリを使います。

ちなみに、僕はmac標準の日本語入力システムの「ことえり」は好きになれない*3ので、「google日本語入力」を使っています。このあとの説明も google日本語入力の場合の説明になっています。色々察して適宜読み替えるなりgoogle日本語入力も合わせて導入するなりしてください。

ちょっと話がそれましたが、本題の実現方法を大まかに言うと以下のようになります

  • 「Karabiner-Elements」を使って「全角半角」キーを「F15」とか割りとどうでもいいキーのキーコードに割り当てる。
  • システム環境設定で「入力ソースの切り替え」のショートカットキーに「F15」を割り当てる。

ということで、早速やっていきます。

まずはアプリをダウンロード&インストールします。

  1. Karabiner-Elements アクセスします。
  2. ページを開いて1画面ほど下にスクロールすると「Project Status」という見出しの下に You can download … みたいな英語が書かれています。
  3. そこに、dmg ファイルへのリンクが貼られていると思うので、それをダウンロード&インストールします。 なお、インストール後にPCの再起動が必要になります。

f:id:noranuk0:20170510233241p:plain

ダウンロード&インストールが完了したら、LaunchPadなどからアプリを起動します。

アプリを起動したら、Virtual Keyboard というタブを開き、Keyboard Typeから JIS を選択します。

f:id:noranuk0:20170510233523p:plain

次に、Simple Modifications タブを開き、 grave_accent_and_tilde(`) *4を f15 に割り当てます。ほか、お好みでキーコードを変更したいキーを自由に追加しても構いません。

f:id:noranuk0:20170510233628p:plain

僕は、「無変換」を「英数」に、「変換」「カタカナひらがな」を「かな」キーに割り当てる設定も追加しています。

ここまでの作業で、「全角半角」キーを押すと、f15が押されたと macOSさんは認識してくれるようになりました。

今度は、f15キーが押されたら、日本語み↔英語の入力切替を行う設定を行います。

「システム環境設定」を開き、「キーボード」の設定画面を開きます。

「入力ソース」タブを選び入力ソース一覧から「ひらがな(google)」「英数(google)」以外を削除します*5

f:id:noranuk0:20170510235057p:plain

「ショートカット」タブを選び、「入力ソース」カテゴリーの「入力ソースの次のソースを選択」のショートカットに F15を割り当てます。

f:id:noranuk0:20170510235212p:plain

とりあえずこれで、「全角半角」キーで日本語↔英語入力の切り替えが実現できました。

なお、かな→カナ変換とか、そういうのは知らんです。Windowsでも使っていなかったので実現できるのかとかすでにあるのかとかは不明でございます。

キーボード文字エリアの右上にある「¥」で「/(バックスラッシュ)」を入力する

UniCodeとかそういうの知らんですわ。「\」を「¥」として表示してるのはなんかもう暗黙の了解っていうかなんていうか。

google日本語入力使っている方はLaunchPadの中に「config dialog」っていう「ひらがなの「あ」」のアイコンあるので、そこから設定できます。

ことえり」な方は「システム環境設定」の「キーボード」の中辺りから設定できたと思います。

もう少しネタはあるのですが、そろそろ力尽きてきたので、今回はこのへんで、ということで。

お読みいただいてありがとうございました。

mac 関連のその他の記事

noranuk0.hatenablog.com

noranuk0.hatenablog.com

*1:Windows用日本語キー配列

*2:2ボタン+ホイールマウス

*3:変換候補が明朝体っていうのがまずありえない

*4:全角半角キー

*5:全角英数?知らんがな

androidアプリのCI環境(自動ビルドとテスト版自動配信)を全部無料で整える 其の弐

どうものらぬこです。

今回の話は、開発中androidアプリのソースをgitリポジトリにpushした瞬間、自動テスト(書いていれば)、自動ビルドが走り、成果物(apk)を自動でテスト配信するというお話の第二弾です。

前回記事では、bitriseというモバイル・アプリ向けのCIサービスを利用して、自動ビルド&自動テストするところまでを紹介しました。

noranuk0.hatenablog.com

今回は、fabricというサービスの一つであるcrashlyticsに含まれるbeta版アプリの配信機能を利用して、開発中アプリを随時テスト端末へ自動配信する方法を紹介します。

fabricは、アプリの収益化、利用者の増加にまつわる様々な問題を分析、解決するようなWeb上のプラットフォームです。

アプリユーザ数、アクティブユーザ率などの集計、クラッシュレポートの収集、そして今回利用するテスト版の配信機能などを備えています。

もともとTwitter社が運営していたのですが、今年の1月にgoogleに売却されたようです。

ただ、アナリティクス的な機能や、クラッシュレポートの収集機能であれば、firebaseというプラットフォームもありますし、機能的にかぶるところも多いです。

fabricのサービスが今後どうなるのかは、正直なところちょっと未知数かもしれません。

とはいえ、手軽にテスト版アプリの自動配信が行えるプラットフォームとしては、現時点ではとても使いやすいと感じているので、当面はこちらを利用していきたいと考えています。

アカウント登録

利用するにはアカウント登録が必要です。

というわけで、まずはfabricのアカウントを取得します。

アカウントの取得は、Fabric - App Development Platform for teams の右上にある、[GET FABRIC]ボタンから行うことができます。

f:id:noranuk0:20170501230403p:plain

登録は、画面右上の [GET FABRIC] と書かれたボタンから行います。

f:id:noranuk0:20170507161209p:plain

fabricのダッシュボードにアプリを追加する

アカウント登録が完了したら、fabricのダッシュボードに自動配信を行いたいアプリを登録します。

ダッシュボードへの登録は、対象アプリにfabricのSDKを組み込み、それをいったん起動することで自動的に行われます。

SDKの組み込みは build.gradleやandroidmanifest.xmlへのコード埋め込みのみなので比較的簡単に行えます。

しかし、APIkeyの取得が、現状android studio の pluginから行うしか方法がなさそうです。したがって、SDKの組み込みを行うにはandroid studio へのプラグイン導入が必須な感じとなっております。

Web上に導入手順が細かく書かれているfirebaseと比べるとやっぱりちょっと適当な印象を持ってしまします。いずれはなんとかしていただきたいものです。。

まあ、ここで言っても仕方がないので、ここはめげずに android studio にfabric pluginを導入します。

プラグインの導入は、[File] - [Settings…] メニューを選択して表示されるSettingsダイアログ内の plugins から行うことができます。

f:id:noranuk0:20170507170108p:plain

インストール完了後、android studio を再起動すると、ツールボタンンに fabricプラグイン起動ボタンが追加されています。

f:id:noranuk0:20170507171609p:plain

プラグインを起動すると、ログイン画面が表示されるので、先ほど登録したログイン情報を入力してログインします。

fabricで使えるすべての機能が一覧表示されるので、その中から crashlytics を選択します。

crashlyticsは本来は、クラッシュログの収集用のツールですが、テスト版(開発中)のアプリをテスト端末に自動配信する機能も持っています。 今回はそれを了する形になります。

crashlyticsを選択すると、埋め込み用のコードが表示されるので、そのままapplyボタンを押せば、オープン中のプロジェクトにコードが追加されます。

テスト端末などでアプリをデバッグ起動すれば、自動的に fabricのダッシュボードにアプリが追加されます。

fabricにwebからログインすると、確かにダッシュボードにアプリが登録されています。

自動配信を設定する

まずはテスターの方をfabricのプロジェクトメンバーに登録します。

テスター=本人のみというボッチ系開発者の方も、まずは自分をメンバーとして登録する必要があります。

ダッシュボードのサイドメニューから Beta を選択し、Add Testers というボタンを押します。

f:id:noranuk0:20170507174944p:plain

メールアドレスを聞かれるので、メアドを入力します。

すぐに下記のようなメールが来るので、
テスト対象のアンドロイド端末でメールを開き、本文内の [Let me in] ボタンを押します。

f:id:noranuk0:20170507174950p:plain

配信管理用アプリのダウンロード&インストールが始まるので、指示に従い配信用アプリをインストールしてください。

Beta というアプリがインストールされるはずです。

以後は、fabricに登録したテストアプリを更新するたびにこのアプリに通知が飛ぶようになっています。

テスターを何人か抱えたチーム開発を行うような場合だけではなく、個人開発中、数台のテスト端末に開発中アプリをまとめて配信したいような場合にも活用できるかと思います。

また、過去のバージョンも保存されているため、一旦旧バージョンに戻して確認するといったことも簡単に行うことができるようになっています。

fabricのアプリを更新する

android版の場合、gradeleコマンドを利用すればfabric経由で簡単に更新版を配信することができます。

$ ./gradlew assembleDebug crashlyticsUploadDistributionDebug
  • リリース版の場合
$ ./gradlew assembleRelease crashlyticsUploadDistributionRelease

これを自動ビルドを行ってくれるCI環境に組み込めば、developブランチへのpushでdebug版のテスト配信、masterブランチへのpushでrelease版のテスト配信を行うといったことが可能になります。

前回紹介した bitriseの記事でも、そのような設定を行っています。

以上、2回に分けて、androidアプリのCI環境の話と、テスト版自動配信の話をさせていただきました。

お読みいただいてありがとうございました。

androidアプリのCI環境(自動ビルドとテスト版自動配信)を全部無料で整える 其の壱

どうも、のらぬこです。

今回の話は、個人開発しているandroidアプリのソース管理(gitホスティングサービス)、自動ビルド、自動テスト配信環境を全部無料で整えたというお話の第一弾(前半)になっております。

この記事では、これらのことをどのように実現したかという観点で、ソース管理の話から自動ビルド環境を構築したところまでの話をします。

利用したサービスは以下の3つです。

  • BitBucket
  • Bitrise
    • モバイルアプリに特化したCIサービスです。androidiOSアプリ、Unityに対応しており、無料プランでも結構使えます。
  • fabric(crashlytics beta配信)
    • リリース済アプリのクラッシュ情報を自動で収集、報告してくれる等のサービスが提供されています。
    • 今回は、その中の一つ、テスト版をチームメンバーに自動配信するようなサービスを利用します。

なお、今回の話は、Bitbucketアカウント登録から、Bitriseを利用した自動ビルド環境構築までの話になります。

さて、僕はandroidの個人開発を始めた当初から、gitホスティングサービスとしてマイクロソフトが提供しているVisual Studio Team Serviceを利用していました。

ちなみに、Visual Studio Team Serviceはソース管理(gitとMS製のバージョン管理システムに対応)と自動ビルド&デプロイ、Issue管理をひとまとめにしたようなWeb上のサービスになります。

5人以上のチームで使用する場合には有償になりますが、メンバーがそれ未満の場合にはサービス利用は基本無料となり、例えば、プライベートgitリポジトリなども数や容量の制限なく自由にいくつでも作成することができる(逆に、パブリックなリポジトリは作成できない)等、ちょっとほかには見られないような特徴も持っています。

また、.net系のアプリやwebサービスはもちろん、nodejsなwebアプリ、mavenやgradle管理のJVM系言語、androidxcodeにも対応したCI環境も用意されており、さらにazureへの自動デプロイもできたりして*1、お金はかけたくないけどいろいろ使ってみたい等、用途によってはとても良いサービスだと思います。

Visual Studio Team Serviceについては、以前紹介記事も書いているので、ご興味ありましたら合わせてごらんください。 noranuk0.hatenablog.com

ももともとはgitリポジトリホスティングサービスとしてしか活用していなかったのですが、開発中Androidアプリの自動ビルドもそのうちやりたいなーとは思っていました。

が、Visual Studio Team Serviceで用意されていたAndroidの自動ビルド環境は割と残念な出来栄えで、自動ビルドには成功しませんでした。

どの辺が残念かというと、環境がかなり古く、例えば用意されているsdkバージョンに未だにandroid-19が使われていました。

しかもおそらくアクセス権限関係?でSDKのアップデートもできない状態で、どうにも使用するには堪えないような代物だったんです。

半ばあきらめていたのですが、gitリポジトリにはBitbucketを使い、リポジトリへのpushをトリガーとした自動ビルドにはbitriseを、ビルド済apkの自動配信にはfabricを使えば、僕のやりたいことは全部無料で実現できそうだと分かり、早速試してみました。

結果、自動ビルド&自動配信まで無事に行うことができるようになりました。

前置きが長くなってしまいましたが、これから手順等の紹介をします。

gitリポジトリの移行

まずは、BitBucketのアカウントを作ります。

bitbucket.org

BitBucketもVSTSと同様に少人数チームであればプライベートリポジトリも割と無制限に作れるようです。

Bitbucketのアカウント作成と他のリポジトリからのソースのインポートについては特に説明の必要ないかと思います。

どうしても何かを見ながらやりたい方はこの辺(↓)でよさげなページを探してください。
bitbucket アカウント作成 - Google 検索

gitはtortoiseGitかSourceTree経由で使っててコマンドとかよく解んないっていう僕みたいな人は、Bitbucketには他のgitホスティングサービスのリポジトリを丸ごとインポートできるUIを持っているので、そいつを使えば移行も簡単です。

ただしその場合、移行後にローカルリポジトリのoriginの向き先を変えるなり、BitBucketからcloneし直すなりしないと後でちょっと残念な気持ちになるかもしれません。

Bitriseで自動ビルド環境を準備する

Bitriseは、iOS, android, unityプロジェクトのCI環境を提供しているモバイルアプリに特化したCIサービスです。

bitrise.io

CIによる自動ビルドも、月に200ビルドまでは無料で利用することができるため、個人利用であれば無料枠内で十分に活用できると思います。もちろん、ちゃんとテストを書いていれば、時間制限はあると思いますが、androidエミュレータを利用した自動テストも当然可能です。

ソースコードは、対応するgitホスティングサービスと連携し、そこから取得ことになります。

対応しているgitホスティングサービスは、GitHub, BitBucket, GitLabの3つです。。

実は、この記事を書いていて気が付いたのですが、任意のgitリポジトリを指定することもできたようです*2

f:id:noranuk0:20170420001358p:plain

ビルド手順は、workflowと呼ばれるWeb上のツールで設定します。

なお、基本的なテンプレートは最初から用意されており、ソース取得元のgitリポジトリを指定すれば、中身をみてAndroidiOS、Unityの設定を自動生成してくれるため、特にカスタマイズが必要なければそのまますぐに使えます。

f:id:noranuk0:20170420001510p:plain

ただし、ビルド結果やビルド済みファイルのダウンロードURLが記入されたメールの配信などは、デフォルトでは行ってくれません。

ビルド結果とダウンロードURLが書かれたメール通知やSlack通知、今回僕が行ったようなfabricを利用したテスト版配信等をやりたい場合は、多少の設定追加、変更などのカスタマイズが必要です。

なお、カスタマイズする場合も、難しいことをする必要は全然ありません。

例えば、特定のURLからファイルをダウンロードしたり、ビルド結果をslackに通知するためのひな型は最初から用意されており、使いたいコンポネントを選択し、URLやAPIキーなどの情報を入力するだけで使えるようになっています。

f:id:noranuk0:20170423164530p:plain

アプリの署名については、少し注意が必要です。

androidアプリの場合、apkを署名するための鍵が必要になります。

デバッグ用の鍵はbitrise側で用意されているため、特に意識せずともデバッグ用に署名されたapkをビルドしてくれます。しかし、どうも毎回必ず同じ鍵が使用されるわけではないようで、更新版のインストールに失敗してしまうことがありました。

したがって、デバッグビルド用の鍵も自分で用意したほうが良いかもしれません。

独自の(自分で用意した)鍵を使いたい場合も、bitriseが鍵の保存場所を提供してくれているため、別途サーバを用意して鍵をWebからダウンロードできるようにしておく必要も、gitリポジトリに鍵をコミットしておく必要もありません。

僕の場合、ローカル開発環境で使用している鍵と同じものを使いたかったので、bitriseが用意してくれたアップロード場所に、普段開発PCで使用している鍵を登録しています。 qiita.com

無論、リリース向けの鍵についても、同様にbitriseのサーバにアップロードして、リリース版ビルド時にその鍵を参照するように設定しておけば、独自の鍵管理の仕組みを考える必要がなくなります。

ところで、自動ビルドの実行タイミングについてですが、初期設定では全てのブランチへのpush、プルリクをトリガーとして、すべて同じ手順でビルドが実行されるようになっています。

例えば、developへのpush時はdebug版、masterへのpushでリリース版のapkをビルドするような場合には、ワークフローを複数作成し、エディター画面の「trigger pattern」と書かれたリンクから、トリガーの種類と使用するワークフローを関連付けする必要があります。

f:id:noranuk0:20170423173414p:plain

トリガーには、特定ブランチへのpush時、特定ブランチへのプルリク時、特定パターンのタグがpushされた時を指定することができるようになっています。

f:id:noranuk0:20170423173720p:plain

これらの設定内容は最終的にはymlに落ちますが、ymlでしか書けないような設定は(おそらく)ありません。

全てGUIツールで設定が可能になっています。

自分が使っているymlの設定はこんな感じです。 developへのpushでデバッグ版、masterへのpushでリリース版がビルドされ、ビルド成功時にはfabric betaへの自動配信までやってくれます。

---
format_version: 1.3.1
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
trigger_map:
- push_branch: master
  workflow: master
- push_branch: develop
  workflow: develop
workflows:
  master:
    steps:
    - activate-ssh-key@3.1.1:
        run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
    - git-clone: {}
    - script@1.1.3:
        title: Do anything with Script step
    - install-missing-android-tools@1.0.1: {}
    - gradle-runner:
        inputs:
        - gradle_task: "$GRADLE_TASK_PREFIX$POSTFIX_RELEASE $CRASHLYTICS_UPLOAD_DISTRIBUTION_PREFIX$POSTFIX_RELEASE"
    - deploy-to-bitrise-io@1.2.9:
        inputs:
        - notify_user_groups: none
        - notify_email_list: "$EMAIL_NOTIFICATION"
    envs:
    - KEY: ''
      opts:
        is_expand: true
  develop:
    steps:
    - activate-ssh-key@3.1.1:
        is_always_run: true
        run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
    - git-clone:
        is_always_run: true
    - file-downloader@0.9.1:
        is_always_run: true
        inputs:
        - source: "$BITRISEIO_MYSYNCER_DEBUG_YMEWHJSL_URL"
        - destination: app/signingConfigs/debug.keystore
    - script@1.1.3:
        title: Do anything with Script step
        is_always_run: true
    - install-missing-android-tools@1.0.1:
        is_always_run: true
    - gradle-runner:
        is_always_run: true
        inputs:
        - gradle_task: "$GRADLE_TASK_PREFIX$POSTFIX_DEBUG $CRASHLYTICS_UPLOAD_DISTRIBUTION_PREFIX$POSTFIX_DEBUG"
    - deploy-to-bitrise-io@1.2.9:
        inputs:
        - notify_email_list: "$EMAIL_NOTIFICATION"
app:
  envs:
  - opts:
      is_expand: false
    GRADLE_BUILD_FILE_PATH: build.gradle
  - opts:
      is_expand: false
    GRADLE_TASK_PREFIX: assemble
  - opts:
      is_expand: false
    GRADLEW_PATH: "./gradlew"
  - opts:
      is_expand: true
    CRASHLYTICS_UPLOAD_DISTRIBUTION_PREFIX: crashlyticsUploadDistribution
  - opts:
      is_expand: true
    POSTFIX_DEBUG: Debug
  - opts:
      is_expand: true
    POSTFIX_RELEASE: RELEASE
  - opts:
      is_expand: true
    EMAIL_NOTIFICATION: ********@gmail.com

fabricbeta配信の話まで書こうと思っていたのですが、そろそろ眠くなってきたので続きはまた今度、ということで。

ちょっと中途半端で終わっていますが、お読みいただいてありがとうございました。

PVがあろうがなかろうが、続編も近日中に公開予定です。

*1:ビルド時の制限はある

*2:VSTSnoからBitBucketに移行する必要実はなかった

予想以上の便利さを提供してくれたドラム式洗濯機 ~メリットと注意点を語ってみる~

僕がドラム式洗濯機を選んだ訳

掃除、洗濯、料理、食後の後片付けという家事の中で、最も苦行なのは洗濯だと思っています。

洗濯機に洗濯物を入れてスイッチを入れた時点で、「1時間後に洗濯が終わった洗濯物を干さなければならない」という行動的制制約が課せられます。特に、外出が禁止される(洗濯が終わるタイミングで在宅していなければならない)というのが個人的には一番の心理的負担です。

さらには、干した後も夕方or翌朝に干した洗濯物を取り込むという行動を頭の片隅に残しておく必要があります。

万が一取り込みを忘れた場合、晴れ続きであればいいのですが、そのまま仕事に出かけて昼から雨ったりするととてもとても残念な気持ちになります。

そんな悩みを軽減してくれるかもしれないドラム式洗濯機、前々からほしかったのですが、価格が20万とかするのがネックでなかなか手を出せずにいました。

今年のお正月、三が日の最後の日、お正月特価セールに期待して、ヨドバシAkibaに足を運んでみました。すると、予定通りというかなんというか、家電売り場の各種家電も結構な値引き価格で売られておりました。しかも、ドラム式洗濯機に至っては、お正月特価で通常価格よりも3万~5万ほどのお値引き価格で販売れています。

「迷っている理由が値段なら買え、買う理由が値段ならやめろ」っていう格言もありますが、あるといろいろ捗りそうではあるし、時間的制約から生まれるストレスが20万円で解消されるというのはメリットとしては十分と思うし、今使っている縦型の洗濯機もまとめ洗いするにはちょっと小さいし、小一時間ほどうろうろしつつ悩んだのですが、買い替える決断を致しました。

選ぶ時の注意点

ドラム式洗濯機使用中の友人に、選び方のコツを聞いてみたところ「設置サイズ」「搬入サイズ」「メンテナンス(フィルター掃除)のやりやすさ」かなー、というご神託をいただきました。

ドラム式洗濯機は、現在「日立」「パナ」「東芝」「シャープ」の4社から販売されています。

この中から選んでいくわけですが、まず搬入サイズに関しては、戸建て住まいなので廊下を通過できるサイズであれば無問題。

設置サイズについては、排水溝が奥の壁から65センチの位置にあるのがネックでしたが、最悪高さをかさ上げすればどうにかなると思ってたのであまり気にしていませんでした。ただ、ランドリースペースの既存の収納家具の都合上、幅が60cm以上のものを選んでしまうと収納家具の買い直しをしないとどうにもならない感じだったので、幅60cm以下は割と重要ポイントでした。

メンテナンス性については、どのメーカーも下に排水用ゴミ取り装置のの糸くずカゴ、上に乾燥機排気ダクト用の吸排気フィルタがあるというのは大体一緒だったので、こちらに関してもどれも似たり寄ったりでした。

さて、ドラム式洗濯機なのですが、狭いスペースにも収まるコンパクトなものと、ファミリー向けの標準サイズの2タイプが存在します。

コンパクトサイズのドラム式洗濯機ははパナソニックやシャープから出ていて、幅、奥行きそれぞれ60cmとなっています。

標準サイズのものは、幅、奥行きのいずれかが75cm、もう一方が60cm前後のものが多いです。

ちなみに、スペック上の容量は、コンパクトサイズの場合は洗濯容量6kg前後、標準サイズの物では洗濯容量10kg前後、どちらのサイズも乾燥容量はだいたいその半分、といったところでどのメーカもあまり差はありません。

結局、値段とメーカーの好みと見た目で選びました。

独り住まいなのでコンパクトサイズのものも一応検討しました。

しかし、コンパクトといっても、奥行きが15cmほど小さいだけでしたし、何より乾燥容量が3kgほどしかなく、これでは今の縦型よりも小さくなってしまうため候補からは外しました。

結局、購入したのは、最近いろいろ(悪い意味で)話題の絶えない東芝さんの最新型モデルです。

実物はこんな感じです。

f:id:noranuk0:20170304225213j:plain

操作パネルがなんか未来チックなのがかっこよくて割と気に入っております。

ちなみに、僕が購入したときは、17万3000円+10%ポイント還元ほどでしたが、価格コムなどで探すと、現在の最安価格はもう少し安くなっているようです。

ドラム式洗濯機を買ってよかったこと

洗濯物を放り込んでスイッチを押せばあとは乾燥まで全部やってくれるというのは思っていた以上に心理的に楽です。

別に洗濯マニアではないので、仕上がりがどうだとか、しわがどうだとか、そういうのはよくわかりませんが、とりあえずきれいにはなっています。また、今のところ生乾きだったこともありません。

セミダブルサイズの毛布も洗ってみましたが、洗ってもフカフカのまま、もちろんちゃんと綺麗になりました。

ドラム式洗濯機の注意点

乾燥機用のダクトのエアフィルター、排水用の糸くずかご(排水用の水にまざってる糸くずなどのごみを回収するための部品)ですが、とにかく毎回結構な量のほこりがたまります。

まず、乾燥機用のダクトフィルターには、毎回厚さ数ミリのレベルで綿埃がみっちり付着しています。
乾燥始めて半分くらい時間たったタイミングで、一時停止&フィルタ掃除をしたほうが若干効率が上がるんじゃないかって思うほどです*1

ただし、掃除といっても、古い歯ブラシなどで軽くこすってあげれば、綿埃の塊がごそっと取れるので、めんどくさいということは全くありません。

f:id:noranuk0:20170327215847j:plain

むしろ、乾燥用のダクトが埃で詰まって乾燥しても生乾きだったり、最悪故障したりという事例も検索するとたくさん出てくるので、毎回のフィルタ掃除は超重要と感じます。

ドラム式洗濯機 乾燥できない - Google 検索

次に排水用の糸くずかごなのですが、こちらも結構な糸くずがたまります。やはり毎回掃除したほうがよさそうです。

ただ、縦型洗濯機の槽内側についているような糸くず回収袋に比べると目が粗いです。細かい糸くずなどは水流でそのまま排水溝に流れて行ってしまうんじゃないかっていうくらいには粗いです。

排水溝が詰まった場合、なんだかとてもめんどくさいことになりそうなので、対策をいくつかとっています。

1つ目は、糸くずかごの中にくっつけるゴミ取りフィルターです。 洗濯機内蔵の糸くずかごよりも目が細かいため、小さな糸くずもしっかりキャッチできるようになるはずです。

f:id:noranuk0:20170327215928j:plain

2つ目は、洗濯機の排水パイプと排水溝の間に挟むタイプの糸くずフィルターボックスです。洗濯機の糸くずフィルターで取れなかったごみをここで再回収するために使っています。 紹介した商品は東芝製ですが、排水溝の口径に合わせて作られているため、おそらく他のメーカーの洗濯機でも使えると思います。なお、日立やパナからも類似品が出ているようです。

糸くずフィルターボックスにも量は少ないですが糸くずや髪の毛などのゴミがたまります。2、3回の洗濯で一つまみというくらいです。

細かいゴミなら水流にのってそのまま流れてしまいそうではありますが、まあ、一応気休め程度といったところでしょうか。

まとめ

ドラム式洗濯機、縦型洗濯機と比べると値段も高いし、メンテナンスに若干気を使う必要が出てくることも確かですが、天気の心配と自分のタイムスケジュールを拘束する要因を1つ取り払ってくれるという意味で、費用に見合ったメリットがあると思います。

今後、洗濯のために費やす時間を軽減するための投資と考えれば、確かに多少お高いですが、購入する価値は十分にあると思います。

この記事が、ドラム式洗濯機ほしいなーと思っている方、すでにお使いの方のご参考になれば幸いです。

次は家事の中でも2番目に嫌いな食後の後片付けを楽にしてくれるかもしれない食洗器を導入したいなぁ。と思う今日この頃です。お金があれば。ですが。。。。

お読みいただいてありがとうございました。

*1:そんなめんどくさいことやらないけど

イオシスさんで買った中古タブレットがプチ初期不良、でもその後の対応には好感が持てた

こんにちは。のらぬこです。

先日、中古PC、中古モバイル端末などを取り扱っているイオシスというお店で、Xperia Z4 tabletを買いました。

iosys.co.jp

購入したのはいわゆる海外モデル、LTE+WiFiに対応ているものです。

イオシスさんの中古商品はAランクからCランクまでのグレードがあります。

  • Aランク:
    • ほぼ新品
  • Bランク:
    • 経年劣化による使用感はあるけど目立つ傷や破損などは無い商品
  • Cランク:
    • 経年劣化以上の目立つ傷、ひび割れ破損、付属品欠品などがある商品

参考)商品ランクとは? | 中古パソコンと白ロムとアウトレットのイオシス

僕は使用感とかはあまり気にしないのですが、目立たなくても液晶面に傷があったら嫌だったので、新品個人輸入と値段あまり変わりませんでしたが(それでももろもろ手数料とか考えると1万円近く安い)、Aランクのものを購入しました。

注文後3日程度で届いたと思います。

梱包については「もうちょっと緩衝材多めに入れてもいいんじゃないかな」と個人的には思ったりもしたのですが、商品は、外箱、付属品、本体ともにとても奇麗でした。

取り敢えず、起動&初回セットアップを済ませ、しばらく触ってみたのですが、とあることに気づいてしまいました。

画面通知領域の右上に表示されている「NFC」のアイコンが点滅してる?

どうも、NFCモジュールを起動しようとして失敗して再起動、を繰り返しているように見えます。

試しに、NFC対応BTヘッドホンとか手持ちの携帯電話をNFCでつなごうとしてもうまくいきません。

こういうことがないようにAランク選んだんだけどな(´・ω・`)

取り敢えず、端末再リセットなどあれこれ試しても直る気配がありません。

NFCってぶっちゃけ使わない。でも、電池持ちとかには影響出てそうだなー。

海外モデルって、日本ソニーは修理受付してくれないんだよなー。

ダメだったらまあしょうがないかと思いつつ、一応イオシスさんに対応可能か質問してみました。

以下、送ったメール全文です。

株式会社イオシス 通信販売課 ご担当者様


○○と申します

先日、そちらのショップから
[中古Aランク] Sony Xperia Z4 Tablet SGP771  LTE  [White 32GB 海外版 SIMフリー]
を購入いたしました。

注文番号は ほげほげほにゃらら です。

御送付頂きましたタブレット端末を、早速つかってみたのですが、
端末機能のうち、NFCが正常に動作しない現象が発生しております。

現象としては、

・画面右上のNFCアイコンが点滅を繰り返す。
・設定>その他の設定>NFCのオプションが正常に動作していない
 (NFC機能の有効化、無効化を切り替えるオプションです)
・設定>タブレット情報>機器診断>テストタブ で表示される
 NFCのテストを実行するとテストに失敗した旨が表示されます。
・NFC対応の他の機器とつないでみましたが接続に失敗します。

端末のリセットなど確認してみたのですが、現象は変わらないようです。

ネットなどで、類似の不具合に遭遇されている方がいないかも確認してみましたが、
情報はないようで、初期不良の可能性を考えております。

商品に貼られていた保護フィルムを剥がしてしまったのですが、
初期不良のご確認、ご対応いただくことは可能でしょうか?

箱、その他付属品は購入時のまま保管されており、タブレット本体にも傷、汚れなどはつけておりません。


ご回答いただければ幸いです。

どうぞよろしくお願いいたします。

改めて読み返してみると、なんか面倒臭そうな奴だなー、とか思われた気がします。

中古品に対して、「初期」不良という言い方もなんか変な気もしたのですが、イオシスさんも「中古品の初期不良は~」みたいな書き方をされていたので、そこは気にしないことにしました。

昼にメールを送ったら、夕方前には返信が来まして、お詫びの文面と一緒に「同一商品の在庫確認します。在庫あれば交換、在庫なければ返金対応」という趣旨の返信がありました。

その後18時半ごろに、在庫確認できたから交換対応しますよ、とメールが来ました。

遅くまでご苦労様ですm(__)m

翌日、届いた商品を返送して、その3日後くらいに交換品の発送完了のメールが届きました。

その翌日には交換品を受け取ることができ、交換していただいた商品は全機能問題なく使えております。

初期(?)不良を引き当ててしまってちょっとひと手間掛かることになってしまったのは若干残念ではありますが、ショップさんの対応は丁寧で非常に好感が持てました。

後、配送に、佐川ではなくヤマトを使っていたのもポイント高いです*1

また何かあったら利用したいと思ったショップさんのお話でした。

今回の話は以上となります。

お読みいただいてありがとうございました。

*1:佐川は荷物の扱いが酷いからっていう以外にも、ヤマトの場合、配送先を後からコンビニに変更できるので地味に便利なのです