Runner in the High

技術のことをかくこころみ

Indiegogoで2年前に購入したVoltermanがようやく届いたのでレビューしてみる

2017年の夏頃にVoltermanというスマートウォレットをIndiegogo上でバックした。スマートウォレットとはなんぞや、というと財布に盗難防止カメラ、モバイルバッテリ、Wifiホットスポットなどの機能を満載にしたスパイの道具みたいなロマン溢れる製品である。

www.indiegogo.com

もともとの予定ではこの製品はファンディングの目標を達成したら2018年末までには発送する、という予定だったのにも関わらず、なにがあったのか生産がズレにずれ込み、とうとう2019年末までの発送予定というかたちになってしまった。もちろんコレに関しては大金を払ったバッカー達から猛反発がおき、IndiegogoのコメントページやFacebookのVoltermanページは荒れに荒れた。

Voltermanのキャンペーンはscam(詐欺)だから今すぐにバッカー全員で抗議活動を起こそう、というFacebookページも作られ、自分もなんとなくそこに入って様子を見守っていた。Volterman側から細かいアップデートが繰り返しあったとはいえ、やはり製品を受け取れていないユーザーが多くいるというのは疑わしいし、やはりもう1年半も製品が来ないというのは本当に詐欺かな... と思いつつクラウドファンディングに対する思いを馳せていたところ、製品の発送を開始したよ、という旨のメールを今年8月頃に受け取り、そして今日とうとう製品を受け取ることができた。足掛け二年、とても長くはあったが。

届いたパッケージを開封する

早速届いたパッケージを開封してみる。

箱がボコボコで最悪だった、などのレビュー記事を海外のブログでみたりしたが、個人的にはさほど気にならない。

f:id:IzumiSy:20190918184555j:plain
包装された箱

f:id:IzumiSy:20190918152508j:plain
Voltermanのロゴをあしらった箱。わりとちゃんとしている。

黒いパッケージングの箱はちょっとキレイ目な感じでなかなか悪くない。

f:id:IzumiSy:20190918152726j:plain
横にスライドするようにして開ける

f:id:IzumiSy:20190918152855j:plain
パッケージの中身はこんな感じ

カードホルダ

f:id:IzumiSy:20190918195633j:plain:w500
表からみたところ

f:id:IzumiSy:20190918195705j:plain:w500
裏からみたところ

f:id:IzumiSy:20190918195317j:plain:w500
カメラ、近接センサ、LED、スピーカーがここに詰まっている

f:id:IzumiSy:20190918195817j:plain:w500
ここに専用のアダプタを接続してスマートフォンなどを充電できる

もう少し安っぽい作りになっているのかと思ったが、そこそこしっかりと作られているように見える。

しかし、最も残念な点がひとつある。それは、なんとカードをちゃんと入れることができるホルダ部分がひとつしかない(!)こと。そもそもこれをカードホルダと呼んでいいものなのかも疑わしくなってくる。なにを言っているのか分からねーと思うが、写真を見てもらえば分かる。

f:id:IzumiSy:20190918200206j:plain
カードが収まりきらないカードホルダー

見ればわかるが、非常にダサい。これはダサい。特に白いカードが顔を出している感じなんてひどい。なぜまた奥まで入らないような設計にしてしまったのか。つまり、実質上の写真を見れば分かるように青のKyashのカードの部分くらいしかまともにカードを収納できる場所はない。その上のところはせいぜい紙幣を数枚入れられるくらいか。

Voltermanアプリ

f:id:IzumiSy:20190918201012p:plain:w300
Voltermanアプリ。ここからウォレットを遠隔でいろいろと操作できる。

Volterman本体にはひとつのボタンしかついておらず、そこからはせいぜい端末の起動・シャットダウン、アラームのオン・オフくらいしかできない。殆どの操作はこちらのVoltermanアプリから行う。Power BankはVolterman本体の充電容量をチェックできるもので、あと何パーセントを他の端末へチャージできるかが確認できる。

Memoryという機能が付いているのを今回初めて知ったが、Volterman本体には64GBのSDカードが内蔵されており、VoltermanでWifiホットスポットを起動してそこに接続することでスマートフォンからデータを送受信できるらしい。果たして需要があるのかは謎だ。

Voltermanといえば盗難検知カメラ(アンチセフト・カメラ)内蔵というのをIndiegogo時代からずっと売りにしていたが、果たしてカードホルダではどういう挙動をするのだろうかとかなり気になった。折りたたみ式の財布の場合には、財布が開かれた際に開いた人の写真を撮る、というギミックらしいが、カードホルダには「開ける」という動きがない。

さてこの機能、結論から言うと、まったく思ったとおりに動かなかった。いや、正確にはよくわからないタイミングでカメラが起動して写真をとっているらしいが、タイミングが全く謎である。また、さらに致命的なのが、撮影された画像がいっこうにアプリで見れるようにならない。どうやら画像サイズが大きいので、BluetoothではなくVoltermanでWifiホットスポットを起動したタイミングでアプリがダウンロードを試みるらしいが、それもなかなか長い時間がかかるうえに、すぐに画像を見れるようにならない。

ほかにも、Volterman内蔵のSIMを使って海外どこでもローミングができるWifiホットスポットになるという機能も持っているらしいが、日本では試しようがないのでこれはいつか海外に行ったら使ってみようと思う。しかし、インターネットの声をみると非常に割高であるとのこと。

My Volterman

よく作ったなと思うが、My Voltermanという名前のiCloudのような個人用ポータルも用意されていて、Voltermanアプリの起動時にサインアップしたアカウントを使ってブラウザ上で自分の保有しているVoltermanデバイスの場所やバッテリ残量、盗難検知カメラの画像一覧などを管理できる。

f:id:IzumiSy:20190918173002p:plain
My VoltermanからGPSでカードホルダの位置を確認できる

まあ、もう買ったのもかれこれ2年前ということもあり、届いただけでもラッキー、という気持ちになっているが、ぶっちゃけまったく使いものにならない単なるオモチャだと思う。クラウドファンディングでもやはりいいものと悪いものがある、というよい勉強になったな、くらいの気持ちである。

7000円近くしたことを考えるとしょうもないものを買ってしまったなと思うが、Volterman側も大きく宣言したは良かったものの、実際に生産フェーズになると意外にうまくいかず、ダラダラと引き伸ばして購入者のほとぼりが覚めるのを待とうとしたフシもあるんではなかろうか。結果としてアンチキャンペーンの火に油を注ぐ結果になったようだが。

iHerbで手軽に買えるスマートドラッグ

スマートドラッグと聞くとなんか危なそうで飲むとバキバキに決まるようなものを想像しがちだが、実態は単なる身体にいい成分が含まれたカプセルだったりする。今年くらいから、かの有名な健康食品系ECサイトであるiHerbでちょこちょこいろんなものを買って試し始めた。

いつだか忘れたが、AV男優のしみけんがブログで「使い始めました!」と紹介していたこともあり、少しづつトレーニー界隈では日本でも有名になってきているようだ。けれども、必ずしも筋トレに関する商品だけを取り扱っている、というわけではなく、この記事で紹介するようないわゆる軽いスマドラに該当するようなものも販売しているのでおもしろい。

L-テアニン

テアニンは日本人にはお馴染みのあの緑茶に含まれるやつで、有名な文句としては「飲むとストレスを軽減できるよ」などと言われるもの。実態は単なるアミノ酸の一種で、自分は大体寝る前に飲んでいる。とはいえ、もちろん危ないドラッグではないので、飲むだけで気分がハイになったりすることはない。あくまで睡眠の質が高くなったりする程度だ。

なお、テアニンは理論上は過剰摂取の概念がなく、いくら飲んでも大丈夫とのことなので、もっとたくさん摂取したい!という人には、こちらのNow Foodsから販売されているL-テアニン ダブルストレングスをおすすめする。自分は最近はほとんどこちらを常飲しているし、会社の先輩たちも基本的にはこちらを飲んでいる。

True Focus

仕事やタスクに集中したい。けれども、どうしても集中力散漫気味になってしまう。そんなあなたにはTrue Focusがおすすめだ。なんとこちらは成分がすごい。コエンザイムQ10からDMAEまで入っている。脳みそに直接バキバキに効いてきそうな成分タップリであることがよく分かる

自分はこれを平日毎昼食後に3日ほど飲んでみたが、毎日飲んだ直後に恐ろしい眠気に襲われた。それも不思議な感覚で、脳は眠いのだが仕事としてやっていることは比較的よく分かる、というようなまさに白昼夢を見ているような、そんな感覚であった。同じタイプのレビューはiHerbの商品ページにもいくつか書かれており、人によっては僕と同じく眠気が出たり、あるいは肩こりが出たりするとのこと。当たり前だが普通に仕事が手に付かなくなったので、いまは土日か寝る前に飲んでいる。

Brain Elevate

「DMAEはちょっとなぁ」というアナタには、若干値が張るがこちらのBrain Elevateがおすすめだ。こちらもイチョウエキスやらコリン*1が含まれており、名前のとおり脳みそのレベルをエレベーションさせてくれること間違いない。なお、紹介しておいて申し訳ないがこちらは私は飲んだことがない。このスマドラの効果はぜひあなた自身の身体で確かめてみて欲しい。成分的に眠気に襲われる、ということはなさそうではあるが。

*1:卵に含まれると有名な、脳機能を向上させる栄養素

Firebase Cloud FunctionsではSparkプランだと外部ネットワークにGETリクエストすら飛ばせない。

もしかしてGETリクエストなら...と思ったけど普通に無理だった。

f:id:IzumiSy:20190917153010p:plain
Cloud Functionsのログ画面

Billing account not configured. External network is not accessible and quotas are severely limited. 
Configure billing account to remove these restrictions

課金が有効になっていないのでこのログが出ている。

外部ネットワークへのリクエスト(アウトバウンド・ネットワーキング)はFlameプランから有効だが、無料枠がないのがしんどい。なおGoogleのサービスに対しては何事もなくリクエストできる。

f:id:IzumiSy:20190917153153p:plain

個人的なアプリケーション設計のバイブル3選

自分が本格的に設計を意識するようになったのは、2015年の夏に現職であるFringe81株式会社で開催されていたサマーインターンに参加してからだ。

インターンではDDDとクリーン・アーキテクチャ*1を一から勉強してAPIサーバーに実装する、というカリキュラムであったが、いま思うと2週間という比較的長いインターンで僕が学べたことと言えば本当に微々たるものだった。つまるところ、それくらいには設計というものは奥が深い。常になんらか特定のデザイン・パターンなりアーキテクチャ・パターンを適用することでアプリケーション開発がうまくいくということはなく、それらの様々な知識から少しづつ応用されたものが最終的なアプリケーションの設計に対して真の洞察を与えてくれるものというのが、僕自身のいまの認識である。

設計はまさに Connecting the dots そのものだ。多くを知れば知るほど、アプリケーション開発において遭遇する問題に対しての適切な解決策が思いつく。知識としての設計だけでは不十分だが、知識がなければ設計はできない。そして、知識をつけるためにはこれまでの様々なソフトウェア・エンジニアが書き残してきた書物を読むことが一番だ。

オブジェクト指向設計実践ガイド

この本は現時点で僕にとってのアプリケーション設計のバイブル。具体的な実装レベルで設計を学べる本といえば、特にこれだ。

これまで僕にとってのオブジェクト指向はとても捉えどころのない概念だった。インターネットで検索をすると、大抵動物や車の例えとJavaのコード例が現れ、結局OOPがどのようなケースで有用なのか、という根本的なメリットがあまり明示されないケースが多い。

一方で、この「オブジェクト指向設計実践ガイド」はどちらかといえば大学の授業で学ぶような雰囲気を避け、アプリケーション開発とスケーラビリティを意識した実践的な内容のOOPを、Rubyという比較的とっつきやすい言語と共に紹介する。一般的なOOPのサンプルはJavaが多い印象があるが、その中でRubyを使ってOOPを学ぶこの本は圧倒的に分かりやすい。

敢えてRubyを使っているのかは分からないが、動的型付言語をサンプルコードとして使うことで、JavaGolangインターフェイスがなぜ便利なのか、という点の理解がより深まってくる。一方で、言語仕様としてのインターフェイスを持たない動的型付言語のダックタイピングの柔軟さも理解が深まる。

Clean Architecture

Clean Architecture 達人に学ぶソフトウェアの構造と設計

Clean Architecture 達人に学ぶソフトウェアの構造と設計

日本語訳が出た今でこそ、比較的膾炙し始めたクリーン・アーキテクチャであるが、この本が日本語訳されるまではインターネットにとても情報が少なかった。それだけに、ボブおじさんのこの本が日本語訳として登場したのは、とても喜ばしいことであるし、これが多くの人に読まれているというのはすごく素晴らしいことだ。

一貫してボブおじさんがこの本の中で主張しているのは、実装とインターフェイスを分離すること、そして依存の方向を統一すること、このふたつだ。奥花子が歌っていたように*2、我々はアプリケーションの中で「変わらないもの」を探さねばならない。それがすなわち我々のビジネスルールであり、外部世界と分離して守らねばならない。

この本が出版されてからというもの、Qiitaやらブログやらでクリーン・アーキテクチャで実装してみました!という記事がたくさんインターネットで見つかるが、よくよく読んでみるとドメイン層の中でHTTPだとかCSVのようなどう考えても外部世界のフレーズが出てきたり、ボブおじさんが本の中で書いている Flow of Control に則ってない実装になっていたり*3、本当にクリーン・アーキテクチャの原典を読んで実装しているのかが疑わしいものがいくつもある。

この本を手にとる各位においては、インターネットに転がるクリーン・アーキテクチャの真贋を一読した上でぜひ見極めてもらいたい。

データ指向アプリケーションデザイン

データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理

データ指向アプリケーションデザイン ―信頼性、拡張性、保守性の高い分散システム設計の原理

嘘偽りなく現代のWebアプリケーション開発に必要なことが全部書いてあるバイブル。

業務でアプリケーションを作るというのは、大規模なデータ(ビッグデータではない)やトラフィックと常に戦い続けることだ。特に自分は文系大学出身かつ学生時代はさほど大きなアプリケーションに携わる経験がなかったこともあり、この本で説明されるような知識を全く持って持ち合わせていなかった。なぜNoSQLが生まれたのか、結果整合性*4とはなにか、ACID、CAP定理、CORBA、二層コミット、などなど。ソフトウェア・エンジニアとしてこれらのフレーズを一度も聞いたことがない、というのであれば今すぐにでも読むべきだと思う。

自分はWebアプリケーション開発をRailsから始め、データベースといえばPostgresQLMySQLくらしか触ったことがなかった。ところが、世の中にはMicrosoft AzureのCosmosDBやGCPのSpanner、そしてAmazonのDynamoDB、FacebookのCassandraなど、一般的なRDBMSとは異なる特徴をもつミドルウェアがある。では、それらがなぜ生まれ、どのようなアプリケーションに向いているのかを知るためには、彼らのもつ特徴や歴史背景などを知らねばならない。アプリケーションの規模が大きくなればなるほど、ビジネスの性質に応じて適切な道具を選ぶことで、コストの削減やパフォーマンスの向上が期待できる。その取捨選択が行えるのがアーキテクトたるソフトウェア・エンジニアの姿であるし、僕が目指すものでもある。

この本を読むまで、せいぜい親しいものといえば伊藤直也氏による「大規模サービス技術入門」だったが、どちらかというとこの本は低レイヤの知識をベースにどうスケーラビリティを獲得するかについて語るものだったと言える。データ指向アプリケーションデザインはより広いユースケースをカバーしており、ステップアップとしてはとても最適な本になっている。まあ、どちらも良書なので両方読むのがベターだろう。

*1:その当時はクリーン・アーキテクチャの本は日本語訳されておらず、いまのようにクリーン・アーキテクチャと呼べるのかどうかも紛らわしいような記事がQiitaに溢れたりしていなかった

*2:https://www.youtube.com/watch?v=qzsta6KTB7A

*3:もちろん、必ずしも原典が一番ということはないが、原典に沿わないのであれば沿わないでどういうメリットが新しく享受できるのかを自分の言葉で説明してもらいたい、という気持ちはある

*4:http://izumisy-tech.hatenablog.com/entry/2018/06/11/224719

大きなリリースをするべきではない4つの理由

自戒を込めてメモ

大きなリリースはバグを増やす

大きなリリースになればなるほど、コードベースに潜むバグが増える。充分なテストがないチームでは、コードレビューにテスト相当のタスクが求められるようになり、本質的な設計の優先度は低くなる。結果として、長期的に見たコードの品質は落ち、よりバギーなコードが生まれやすくなる。

また、大きなリリースでは変更があまりに多すぎるため、バグの特定が困難になる。それどころか、見過ごされるバグが生まれ、顧客に届く価値は不完全なものになる。

大きなリリースはロールバックを難しくする

大きなリリースはロールバックも大変になる。下手するとロールバックすらできない。大きなリリースは戦艦建造のようなもの。戦艦はデカい巨体を地上で組み上げてそれをいっきに海へ浮かべる。海から地上へは戻せない。でも、ソフトウェアは戦艦の建造とは異なり、大抵の場合プログレッシブにやれる。

小さくプログレッシブに機能をリリースできるチームは挑戦的になれる。問題が起きても場合やり直しが容易であり、ひとつのリリースに多くのものを詰め込む必要がないことで余裕を持って品質の高いに開発の計画を立てられる。

大きなリリースはチームにプレッシャーをかける

リリースが少ないチームは絶対に納期を守らねばならないというプレッシャーをかけられている。なぜなら、そのリリースを逃せば次のリリースはずっと先になるから。

開発チームとしては体裁を保つためにリリースでは絶対に成果をださねばならない。先送りはできないというプレッシャーをかけられる。プレッシャーをかけられた開発チームは毎日遅くまで残業することになる

大きなリリースは仕様を不完全なものにする

大きなリリースでギリギリになって仕様の漏れが発覚しても、自分がリリースの遅れ引き起こす要因になることを恐れてメンバは仕様忘れをひた隠しにする。ドキュメントの欠落などで、もともとあるはずだったものが消え失せることもある。

度重なるリリースの遅延により、必要とされていた仕様が不要になってしまうことすらもある。その結果、顧客に届く価値は全く意味のないものになる。