EPISODE 02

モバイルワークを試行錯誤するブログ

仮想通貨の取引をAWS Lambda,DynamoDB,CloudWatchで自動化し100日経過した結果

何年か前に仮想通貨取引が流行っていたけど、当時は興味もなくYouTubeに表示される仮想通貨の広告が鬱陶しいし、投資なのか投機なのかもよくわからないしギャンブル?程度の認識だったので特に調べることもしていなかった。そんな訳でネット上で話題になっても、特に深追いすることなく過ごしてきたのだけど、今さらに同僚から仮想通貨の自動取引は面白いよ、とプレゼンされたので、少しだけ遊んでみることにした。

ざっと調べてみたところ取引自動化には欠かせないのが取引所が公開しているAPI。取引に必要なデータをAPIで取得してPCやサーバで処理して注文処理するという処理を自動化する。そこで、今回はAPIが使える取引所のひとつBitbankの口座を開設した。当初資金の10万円を入金したのが2018年末。

年末年始の空いた時間を使って、まずは仮想通貨の値動きと取引ロジックを考えた。

数日相場を数日観察してみると1時間で数%が値動きすることもあれば、反面まったく値動きしない時間帯もある。これでは適当に買ったり売ったりしたらあっという間に資金がなくなってしまう。株式などと異なり24時間365日の取引が前提になるので、人の手でPCやスマートフォンを使って取引するようなものではなさそう。

自動取引とAPI

取引自動化の基本はAPIを使う。そこでまずはBitbankのAPIドキュメントGithubのサンプルコードを眺めてみる。 ドキュメントの量はそれほど多くないというより、思ったよりあっさりしている。これだけ?って印象を受けるが、複数言語に対応したライブラリも提供されていたり、サンプルコードもアップされていたりと、普通に取り引きをするのであれば過不足はなさそう。

ざっくり言えば、

1)PCにプログラミング言語とBitbankが提供するライブラリをクライアントにインストール

2)Bitbankが提供するAPIを叩いて必要な情報を取得

3)クライアントで取引条件を指定して「買い」、「売り」注文のAPIを叩く

というシンプルな仕様。RESTful APIの利用経験があるなら数時間で概要は理解できるはず。

利用した言語

Bitbankからは取引に必要なライブラリがnode.js Java Python Rubyで提供されている。それぞれの言語でできることに違いはないので、好きな言語を選べばいい。どれを選ぶか悩んだけど今回はBitbankのサンプルコードがPythonで書かれていたPythonを選択した。

コインを選ぶ

Bitbankにはいくつかのコインの売買ができる。この辺は好みだと思うけど、日本円で売買でき、かつ取引量が多いコインを選んだ方が自動取引はしやすい気がする。値動きが少ないコインだとコンピュータを使った自動売買のメリットが活かせないというのもある。いくつかのコインで試してみたけど値動があること、取引量がそれなりに多いことからXRPというコインを選んだ。

目的

自動取引を開始する目的は以下の通り。あくまでも少額資金での自動取引の検証という前提。

・仮想通貨の自動取引で利益を出すことが現実的に可能なのか

・人の手は一切使わないで、取引の全てを自動化する

目標

入金した資金を100倍、200倍にするような想定はないが、何も目標を立てないとロジックの作りようもないので、2019年中に入金した資金の2倍にあたる20万円にすることを目標にした。いらぬ心配かもしれないけど、あまり利益を出しすぎると税金の手続きも必要になることも考慮しなければならないので、このくらいの目標がちょうどいいという判断。いちにちあたりにすると10万円÷365日≒274円の利益を上げ続ければ達成できるという試算で。

開発環境

Pythonの開発環境は手元にあるMac、Windows PCでも構築できるけど、今回はクラウドベースのエディタ、AWS Cloud 9を利用する。AWSのアカウントさえあれば数分で環境を作れるし、デフォルトでPythonも使える。開発環境を整える煩雑さもないし、ブラウザさえ使えれば場所と時間、デバイスを選ばず同じ環境でコードが書ける。

Cloud 9はAWSが提供するサービスなので時間当たりの費用は掛かるけど、毎月90時間起動しても200円程度と無視できる範囲。参考までに、実際にコードを書いた時間は20時間程度だったので、AWSからは数十円の請求で済んだ。

取引ロジック

ここが最も頭を悩ませたところ。仮想通貨は株と同じく安く買って高く売り、その利ザヤを利益とするのが基本的な取引方法。信用取引やレバレッジを掛けたりできる取引所もあるようだけど、口座開設したBitbankは現物取引だけを取り扱っている。仮想通貨に現物もなにも無いような気がするが、それは言葉の問題でとにかく入金した日本円で仮想通貨を安く購入し、高く売るというのが大前提。

ロジックを検討するための前提としてコンピュータが得意なことを考える

・人間の手ではできないような高速な計算と処理、

・人間と違って絶対にサボらない・ミスらない定期的な処理、

・無感情、無関心

逆にコンピュータにできないことは、

・急な相場の変化に対応

・未来を予測して売買する

といったところか。可能な限りこの特徴をを活かすような処理を考える。過去のデータからの機械学習も検討したけど結局のところ上がるか下がるかで言えば確率は50%に近づくはずなので、あまり意味がなさそう。

高速な処理、つまり1分間に数百回、数千回の取引をすることはプログラム上は可能。有無をいわせず高速でスクリプトを回し続ければいいだけ。 ただ実際にクライアント側で高速でスクリプトを回せたとしても、サーバ側のAPIが処理に追いつかないことや、オーダー可能な注文数が30個以内に限られること、などの制限から早々に現実的ではないことに気が付く。頑張っても60回/分の取引が限界に近いという感触。

次に検討したのは定期的な処理。一時間に一度、一分間に一度など一定時間で売買処理を繰り返す。これであれば、サーバへの負荷も少なく、オーダー数も厳密に管理する必要もなくなる。まずはは高速処理よりも定期的な処理を採用した方が現実的だと考えた。

とは言えこちらは仮想通貨どころか相場、投資の素人。なにか取っ掛かりはないものかと、仮想通貨、自動取引でざっと検索してみるが、残念なことに情報商材とかアフェリエイトスパムみたいなノイズ情報ばかりで、ほとんど役に立たない。取引ツールを数万~数十万円で販売しているのもよくヒットしたけど、他人の書いたツールを使うのは気持ち悪いしいずれ嵌め込まれるだけだろう。

仮想通貨の自動取引でインターネット上からヒントを得るのは難しそうなので、株式の取引ロジックを取り入れることを検討した。株取引の方が仮想通貨より歴史も長くノウハウも豊富なせいか、ネット上にも参考になる情報は多い印象。

いくつか仮想通貨の自動取引に採用できそうな取引方法があったけど、今回はその中でもドルコスト平均法を採用してみることにした。

Wikipediaより。 ドル・コスト平均法(英: dollar cost averaging)とは、

株式や投資信託などの金融商品の投資手法の一つ。定額購入法ともいう。金融商品を購入する場合、一度に購入せず、資金を分割して均等額ずつ定期的に継続して投資する。例えば「予定資金を12分割して、月末ごとに資金の1/12を投入し、一年かけて全量を買う」という手法。 高値掴みのリスクを避けるための時間分散の一種であるが、数量を等分するのではなく、金額を等分する点が単なる分散と異なる。価格が高い時は購入数量が少なく、安い時には多いため、単純な数量分割に比べ平均値の点で有利になるとされる。価格が下がった場合のみならず、上がったときにも買う点で難平買いとは異なる。 長期投資でリスクを抑制し、安定した収益を得たい場合に使われる手法である。上げ相場でドル・コスト平均法を行うと平均購入単価がかえって高くなり、収益を減少させてしまう欠点もある。タイミングを精密に測れないため、値動きの早い商品で、ハイリターンを目指す投資には向かない。

株式では毎月決まった日に一定額を購入するのが基本。ただしこのまま採用しても値動きの激しい仮想通貨ではリスクが高すぎるし、そもそも月に一度ならAPIなど利用せず手作業で十分だろう。

そこで、毎月ではなく時間を短縮して購入間隔を1分間に設定し、ある程度利益が出た時点で売るというロジックにしてみる。これであれば、大勝はできないけど大負けもなさそう。急激な価格の変動にも影響を受けにくいはず。購入するのは一定「数量」ではなく一定「額」というのがポイント。1回あたりの購入金額は結構悩んだけど最終的に100円/分とした。

毎分100円を買い、投資前の総資産から200円上がったら全て売り、という処理を永遠に繰り返す。一回当たりの購入金額に根拠が見つけられなかったけど、投資金額10万円の1%という切りのいい数字にしておけば後から計算がしやすいかなといった割と雑な理由。つまり1~2回/日売り注文が確定すれば、目標金額の274円/日の利益は確保できるという試算。

リスクはないとはいえ、それなりの値動きはあるので、急落に備えて「損切」もロジックに入れておく。一定額以上総資産が下がったら売りを入れるというのは自動取引を成立させるのには絶対に必要になるはずだ。

取引のフロー

上記ロジックをコードに書いた。

1.APIが正常であることを確認する

2.現在の資産が前回取引から+200円以上であれば全量売り注文を入れ、20%以上含み損が出れば損切り

3.日本円残高を確認し100円以下であれば以降の処理を中止する

4.仮想通貨の現在値を取得する

5.100円を現在値で割って購入数量を算出する

6.注文数量が30個溜まっていたら最も古い注文をキャンセルする

7.5で算出した数量の買い注文を入れる

8.取引履歴をデータベースに記録する

困ったのはBitbankにはテスト環境やデモ環境がないこと。そのため自分でテストコードを書くか、本番環境でテストするしかない。さすがにテスト用のコードを書くのは怠すぎるので、危険を承知で本番環境でテストする。テストをする度に数円から数十円の資金が減ったり増えたりするのがアレだけど仕方ない。

数週間資金を増やしたり減らしたりしながらテストして、ようやくそれなりに動くようになったのが2019年の1月中旬くらいだった。

本番環境

極端な話、取引の環境は手元のPCでも構築できるけど、当然24時間PCを稼働していなければならない。さすがに24時間365日自宅のPCを起動しておくには、管理の面で面倒なので、クラウドサーバを使っての構築を検討した。

当初は手軽にAWSのEC2がいいかなと思ったけど、やはり気になるのは費用面。一番安価なEC2インスタンスを借りたとしても、数千円/月の費用が発生してしまう。10万円しか原資がない中で、確実に毎月数千円の費用が発生してしまうとサーバ費用だけで、赤字になってしまう可能性が高い。無料で使えそうなHerokuとか格安VPSも考えたけど、費用を抑えると今度は運用時の制限が厳しくなってしまう。

そこで最近勉強し始めたAWS Lambdaで動かしてみることにした。LambdaはEC2のように固定の月額費用は発生せず、課金の対象はコードを実行した時間と回数分だけ。なおLambdaには無料枠があるため、その範囲で使えば費用が発生することはない。

Lambda無料枠

月間 1,000,000 件のリクエスト 月間 400,000 GB-秒

Lamdaはインフラの管理もサーバの管理も不要。管理自体は全部AWSの中の人がよろしくやってくれるので、書いたコードをアップロードすれば動き出す。いくつかの言語をサポートしていて、Python含まれるので、開発環境で使ったコードをほぼそのまま流用できた Cloud 9で書いたコードをLambdaへdeployするのもほんの数クリックするだけで、AWSが上手いことやってくれるので、Cloud 9を使ったのはローカルPCで開発するより結果的に効率的だった。

デメリットというか、Lambdaの仕組み上データの永続化はできないので、別途データベースは用意する必要はある。そこを踏まえて今回は以下の構成にした。

Cloud Watch > Lambda > DynamoDB f:id:bcorp:20190518112045p:plain

1.Cloud Watchで1分に1度Lambdaをキック

2.LambdaでBitbank APIへのアクセスと取引処理

3.取引した売買データはDynamoDBに保存

Cloud WatchとDynamoDBもAWSがサービスとして提供していて、Lambda同様、LinuxやWindowsサーバなどを立てる必要はない。ある程度利用すると料金が発生するけど、どちらも余裕すぎる無料枠。

実際、4月のAWSのlambdaとDynamoDBの利用量は以下の通りだった。かなり無茶しても無料枠を超えることはなさそう。

Lambda f:id:bcorp:20190518112141p:plain

DynamoDB f:id:bcorp:20190518112200p:plain

100日経過後の資産額

取引履歴は一時間に一度Twitterに自動Tweetした。Bitbankのアプリで資産を見てもいいけど、頻繁に見たとしても手作業で売買できないし、途中から面倒になってきたのでたまにTwitterを見てたまに確認するだけにした。 全てのTweetは公開しているので、取引の推移は誰でも見ることができる。

最初のTweet

この記事を書いた時のTweet

結果は以下の通り。

総資産:141,200円
取引回数:約12万回
一日当たりの平均利益額:412円
AWS利用料:0円
利益:41,200円

グラフ

f:id:bcorp:20190518112430j:plain

資産額の単位は日本円で、途中数値が減っているのはバグを修正したのと、XRPの送金を試して遊んでしまったから。

2019年の1-3月のチャートは基本的には下げ相場だったけど、順調に資産は増えていき、100日で約4万円(40%)程度の利益が出ている。

f:id:bcorp:20190518112509j:plain

その日の値動きが大きいと利益が出やすく逆に小さな値動きだと利益が出にくいロジックなことがわかる。このまま上手いこと自動取引が動いてくれれば、年末には目標値の10万円という利益は達成できそうな見込み。倍々ゲームなので、10年後には1億円超が見えてくるかも(笑)

気が付いたこと、注意すべきこと

レイテンシ

あまり気にしすぎることはないけど、取引所のAPIとクライアントのレイテンシが大きいと注文を入れるまでの時間が増えるため、注文が通りにくくなる可能性も考慮しておく。試しにAPIまでのレイテンシを計測してみると自宅からAPIエンドポイントまでの到達時間が40-200ms、AWS Lambdaからだと6ms以内だった。BitbankのAPIはAWS内にあるようなので、同じRegionにあるLambdaを利用すれば、応答速度が速くなるのではないかと思う。

セキュリティ

APIキーが漏れると第三者に簡単にアクセスされてしまうのでキーはLambdaの環境変数に記述してプログラムにはハードコーディングしない。 同様にGitHubなどのリポジトリにコードを上げる際も注意することくらいか。

損切り

念のため、日本円が底をつきかつ総資産が前回売り注文後から20%減ったら損切りするという処理を入れておいたが、結局1度も発動しなかったので、損切ポイントをより厳密にすれば資金の回転は良くなったのかもしれない。

AWS費用

EC2仮想サーバの月額費用は少し高いような気がするけど、今回のようにサービス系のみを組み合わせて使えばほぼ無料枠の範囲で収まると思う。おそらく無料枠を使い切るような設計にするには、複数の取引所を開設してそれぞれの口座に数千万円単位で入れなければ届かないような感触。

データベースへの記録

取引所のAPIから取得できるデータと取引に使うデータを考慮する必要がある。取引所から取得できるデータと重複して保存しても費用が嵩むだけなので、ある程度割り切って記録した方がいい。

購入金額を動的にする

ドルコスト平均法は一定額を購入し続ける手法だけど、ある程度資金が増えてきたら一回に購入する金額と、売り注文を入れるときの金額は増やした方が資金の回りは良くなる。今回は当初資金が10万円だったので一度の購入額を100円としたけど、15万円になったら150円、20万円を超えたら200円などと持っている資金によって変化させるとより利益がでやすくなるはず。

取引手数料を考慮する

Bitbankは今年の1月4日まで売買手数料が無料で取引できたが、5日以降は手数料が発生するようになった。この辺は上手く計算しておかないと、マイナスになる可能性もある。手数料の体系はコロコロ変わるような感じなので、全自動とはいえ取引所からのお知らせメールくらいはチェックしておく必要はある。

見ない、触らない

コンピュータで取引する利点のひとつに感情が入り込まないというのがある。日々チャートを見たり、経過を見たりすると「もう少し上がるかも、もっと下がるかも」みないに余計なことを考えてしまい、スクリプトを止めたり、手作業で売買したりする可能性がある。そのためエラーが起きないことを確認出来たらチャートは見ない、アプリは触らない、BitobankのWebサイトにログインしないというのは重要。人の手を介在した瞬間に負けるのは自明なので。

まとめ

結果として目標以上の利益は出たけど、100日間という短期間なのででたまたま運が良かっただけなのかもしれないし、完璧な勝ちパターンを手に入れた可能性も否定できない。ただ言えるのは手作業でチャート分析したり、ファンダメンタルズ分析するようなことを時間や労力を掛けて実行するよりは、放置しておくだけなので楽だし精神的にも気楽だ。もう少し長い時間検証して増えていくようであれば資金を増やして億万長者を目指してみようかな。

AWS ソリューションアーキテクトアソシエイトを受験した

10連休のゴールデンウイーク明け、ぼーっとした頭でメール処理をしているとAWSからのメールに気が付いた。AWSのWebトレーニングを受けた上で、認定試験に合格すると1,000円分のAmazonギフト券がもらえるというもの。休んでいる期間が長すぎてあやうく5月病になりかけたこともあり、頭を働かせるために受けてみることにした。あまり時間をかけて学習する気もなかったので、試験日を1週間後の5月13日に設定する。

学習した内容と順序

試験範囲は以下に記載されているので(かなり抽象的だが)範囲だけは理解して取り組む。当初は本を買って学習しようと思ったけど、分厚い本を手にしたらやる気を失いそうだったので本は購入せず以下の3つで学習することに。

  1. AWS Black Belt AWS サービス別資料 PDF 
  2. AWS Black Belt AWS サービス別資料 YouTube
  3. 模擬試験

aws.amazon.com

特に役立ったのはAWS Black Belt AWS サービス別資料のYouTube版。全てのサービスが動画になっているわけではないけど、重要なところはほぼ網羅している。


【AWS Black Belt Online Seminar】Amazon VPC

AWSの中の人が懇切丁寧にサービス内容を説明してくれるので、通勤中や、自宅のソファーに横になりながらiPhoneで動画を見て気になったところはPDF版にiPhoneでマーキングしていき、アウトプットはiPhoneのメモアプリにメモしていくという流れ。

結局最後まで受験勉強のように紙とノートを使うことはなく、模擬試験を除いては全てiPhoneで完結させた。模擬試験は有料(2,000円)を支払う必要はあるけど、本番試験のインターフェイス同様だし、雰囲気もわかるので、受けておいて損はない。

模擬試験は試験3日前に受けてみたけど結果は80%と思っていたよりいい結果ではなかった。普段使っているサービスや製品は簡単に解けるけど、サービスの内容は知っているけど使ったことがないものや、一度設定してしまえば後は自動化していて普段は意識していないのようなものに誤りや勘違いが多いことがわかった。

もう少しフルマネージドサービスの範囲が多いような想定で受けたけど、実際はEC2を中心としたサービス群との連携ユースケースを中心に問われる。意外にコンサバティブというか、レガシーというか。ということで、試験二日前の週末で、AWS Black BeltのYouTubeとPDFでEC2、VPC、Auto Scaling、ELB、EBS、S3当たりを再学習。

学習時間

YouTubeでの学習時間を含めると20時間程度かと思う。ちゃんと計測したわけではないし、隙間時間を使った割合が多いので感覚値で。

試験当日

試験は11時から新宿のテストセンターで受験した。早めに家を出て試験会場近くにあったマックでコーヒーを飲みながら再度iPhoneのメモを見直しし30分ほど前に会場入り。免許証とクレジットカードを提示して本人確認が終了すると顔写真を撮影されて試験が開始される。11時開始だけど10:40分くらいから試験開始。

試験自体は模擬試験と同様PCに向かってポチポチと選択肢の中から回答していくスタイル。が、模擬試験に比べてかなり難易度が高いという第一印象。最初は模擬試験とのギャップに動揺したけど、回答を進めていくうちに設問が難しいというより回答に迷う言い回しの選択肢が多いということがわかってきた。質問の意図を汲み取るようにして、じっくり読み込めば時間はかかるけど、正確な回答が見えてくる問題が多いかな。

65問終了した後の感触は以下の通りだった。

絶対の自信がある回答:40問

回答に迷ったけどまあ大丈夫だろうと感じた回答:10問

まったくわからず適当に回答:5問

結果は合格。結果は試験終了後すぐに画面で表示されるけど結構小さいフォントだったので気が付かないところだった。試験時間はかなりゆっくり取り組んだけど見直し含め110分くらいで終了した。

試験結果

f:id:bcorp:20190514180632j:plain

翌日試験結果がサイトで確認できるようになっていて、スコアは895/1000だった。まあこんなものか。試験問題についての詳細をここに書くわけにはいかないけど、質問の数で一番多いなと思った順番は以下の通り。

1.ストレージ、特にS3に関する内容

2.VPC、Auto Scaling、ELBなどのネットワーク関連

3.DB、CloudWatch、IAMなど

知識が曖昧だとかなり選択肢に迷うので、ストレージに関してはEBS、EFS、S3の特徴とユースケースを、VPCに関しては可用性と、回復性を重点に問われていたので、Route53、ELB、Auto Scalingを抑えておくとかなり楽に得点できると思う。サーバーレス関係やWorkspaces、IoT、機械学習など比較的新しめのサービスを使うことが多いけど、その辺の出題はなかったのでそこは残念だった。

ハンズオンは必要か

学習する上で一番役に立ったのは「AWS Black Belt」とAWSの「よくある質問」だった。逆に言えばそこに書いていないことは出題されないといってもいい。AWSのサービス自体を広く浅く理解して、ユースケースが想定できるようであれば、それほど難易度は高くなさそう。ハンズオンについては個別にコンソールで設定して検証するようなことはしなかったので、試験のためにあえてコンソールを触る必要はないと思うけど、触ったことがある方が各サービスのイメージはしやすいはず。

まとめ

この資格を持っていても実業務でAWSがいうところのベストプラクティスを使ったクラウド設計ができるようになるかというとそんなことはないだろうと。5月病の怠さから抜けられたという目標は達成できたのでそこは良かったと思う。

ThinkPad X1 Carbon 2018

2年ほど前に購入したHPのラップトップEliteBook Folio G1 だけど、バッテリーが2時間くらいしか持たなくなってしまったので、買い替えを検討していた。最近PCやスマートフォンの買い替えるタイミングってスペックに不満が出てきたというより、バッテリーが持たなくなったという理由が大きい気がする。

HPのラップトップは結構使い勝手が良かったので、後継機でいいかなとHPのWebサイトを見てみると、Folio G2とかG3といった機種は発売されていない。仕方がないのでいくつかのメーカのWindows 10ラップトップを見てみるけど、ピンとくるのがない。条件としては、

ディスプレイサイズが13インチ前後、

液晶は非光沢フルHD以上の解像度、

まともなキーボードを搭載、

1㎏前後の重量、

と、あまり贅沢を言っているつもりはないのだけど条件を絞っていくとほんの数機種になってしまう。国内メーカも海外メーカも、光沢液晶だったり、入力が疲れそうなキーボードだったりと所謂レガシーなラップトップは流行っていないのか。用途はエディタでコードを書くこと、ブラウジング、オフィスアプリの編集程度で、動画とか写真の編集をしたりゲームをしたりという使い方はしない。

最終的にDELLのXPS 13とlenovoのThinkpad X1 carbon、X280に絞り込んで実機を確認し、最もキーボードが好みだったThinkPad X1 carbonを選択。直販サイトで約17万円と想定した予算より安めに収まった。購入前に次期X1 carbonも発表されていたけどスペックに大きな変化もなさそうで、発売日も未定なので現行世代を購入した。

f:id:bcorp:20190309165633j:plain

発注したスペックは以下の通り。

● インテル Core i5-8250U プロセッサー (1.60GHz, 6MB)

● Windows 10 Pro 64bit

● 8GB LPDDR3 2133MHz Soldered

● 256GBソリッドステートドライブ (M.2 2280, NVMe) OPAL対応

● 14.0型WQHD液晶 (2560x1440 IPS 300nit) 光沢なし

● 指紋センサーあり

● 日本語キーボード (バックライト、指紋センサー) ブラック

● WWAN対応 Fibocom L850-GL

● WLAN+WWANアンテナ

● インテル UHD グラフィックス 620

価格、納期

購入したのはLenovoの直販サイト。納期や購入金額が毎日変化するので買うタイミングが難しい。あれこれ悩むといつまでも買えなくなるので購入を決めたときに買ってしまうのがベストかもしれない。

納期は国内の米沢生産モデルと中国生産モデルがあったけど、今回のCTOでは中国生産モデルで、決済完了後12日で到着した。1か月くらいを想定していたので以外に早く届いたかなといった印象。

インプレッション

CPU

CPUは第8世代のCore i5-8250U、4コア、8スレッドと必要十分どころかオーバースペックな気がするけど、選択肢の中では最低のスペックだったのでこれを選んだ。実際に使ってみてもCPUリソースが不足する場面は見られなかった。バッテリの節約機能をONにして使ってもパフォーマンスに不足を感じることはないので、4K動画の編集やRAW写真編集、ゲームをしないようであれば不満を感じることはなさそう。

メモリ

メモリは16GBに変更するか迷ったけど、今使っているラップトップで8GBを使い切るようなことはなかったので、8GBを選択した。たまにタスクマネージャで使用量を確認してみても最大で6GB程度しか使っていないので、メモリ不足は心配していない。

ストレージ

ストレージ容量は256GBのM.2 2280, NVMeを選んだ。当初は128GBにして不足した時点で換装することも検討したけど作業が面倒な気がしたので、256にした。256GB以上であればNVMeを選択できるので書き込み、読み込みとも高速になる。

f:id:bcorp:20190309165546j:plain
ベンチマーク

モニタ

モニタはFHDとWQHDが選択可能だったので欲張ってWQHDを。非光沢を選択したので、ギラギラした感じがないし、映り込みも少ないので、作業に集中できる。光沢液晶はスマートフォンやタブレットで使うのが向いている気がする。

解像度についてはWindows10のスケーリングも実用的になってきているので、普段使うアプリケーションで、レイアウトが乱れるようなことはない。スケールは125%で使っているけど、エディタでフォントが印刷物のように見えるのは本当に気持ちが良い。ブラウザのフォントはデフォルトではアレなので、Noto Sans JPに変えるとMacやスマートフォンのように美しいフォントで表示されるので、是非変更しておきたい。

LTE

ThinkPad X1 CarbonはLTEモデムをconfigurationできるので、移動が多いのであれば選択しておくと、PCの使い勝手は大きく向上する。スマートフォンでは当たり前だけど、場所を問わずOSが立ち上がった瞬間からインターネット接続されているのは、快適そのもの。以前にもSurfece3のLTEモデルを使っていたけど、モデムが不安定だったため、快適というよりむしろイライラすることが多かったが、X1 carbonのモデムは非常に安定しているので、接続できなかったり切断されたりということはない。

SIMはmicroSIMなので、iPad Proで利用していたソフトバンクのSIMを入れて使っている。電車や新幹線の中でも安定して使えているし、テザリングでスマートフォンのバッテリーを消耗したりWi-Fi難民になるようなこともない。当然SIMフリーなので海外でも現地のSIMさえ調達できれば国内と同じように常時接続で利用できるはず。

筐体

本体サイズは13インチ相当なのだけど、今はやりの狭額縁なのでディスプレイサイズは14インチ。今まで使っていたHPは12.5インチだったのでフットプリントは若干大きくなるため、新幹線や飛行機の普通席、狭いカフェなどでは窮屈に感じることもある。 外観はThinkPadのそれ。特別薄さをアピールするようなデザインでもなくMacBookのようにスタイリッシュという印象はないけど、なぜか古臭さも感じない。悪目立ちせず完全に実用性に振り切ったデザインなので、出先で使うのに躊躇うようなこともなさそう。ThinkPadのiの文字が赤色のLEDで転倒するのが唯一のポイントか。

f:id:bcorp:20190309165549j:plain

カーボンかつ黒のボディのせいで指紋や手の脂が目立つのが気になるところ。使い終わったら軽くメガネ拭きで拭き取れば消えるので、小まめに清掃している。

拡張性

今時のラップトップはUSB Type-Cのポートだけというのが主流っぽいけど、X1 CarbonはUSB Type-Cが2ポートの他にフルサイズのHDMIポート、USB-Aポートが左右に1つずつとレガシーなポートも搭載されている。自宅でもオフィスでもUSB-Cのアダプタ経由で各中編機器に接続しているので恩恵は少ないけど、会議室などのプロジェクタとかモニタは意外にType-Cの普及が進んでいないので、ドングル持ち歩くことがなくなったのはありがたい。電源を入れていないときでもType-AポートからiPhoneの充電できるので、PCをモバイルバッテリー的に使うこともできる。

f:id:bcorp:20190309165604j:plain

キーボード

ThinkPadを購入するのは初めてだけど、想像していたより遥かに打ちやすいキーボードだった。

f:id:bcorp:20190309165653j:plain

ThinkPadは少し前までごちゃごちゃしたキーボードという印象だったけど、X1 Carbonはすっきりしている。MacBook、MacBook Proのキーボードはいつまで経っても慣れないけど、このキーボードは一瞬で慣れた、というか昔の打鍵間を取り戻した感じ。久しぶりに剛性感のあるラップトップキーボードに出会えた。静音性もかなり高いレベルで設計されていて、会議中や静かなオフィスでも全く気にすることなく使えると思う。バックライトも搭載されているのでホテルや飛行機など薄暗い場所でも快適に使えるはず。

打鍵感を求めていくつかの外付けキーボードも使っているけど、場所によってキーボードを変更すると自分のコンテクストスイッチも切り替えるなければいけないので、そのコストを考えるならばすべての作業をこのキーボードで行ったほうが良さそう。今は外付けディスプレイを使っている時でも外付けのキーボードを使うことはなくなった。

トラックパッド、トラックポイント

f:id:bcorp:20190309165707j:plain

WindowsラップトップのトラックパッドはMacBookに比べて小さいし精度も良くないので今まで積極的に使ってこなかったけど、X1 Carbonはかなり実用的。サラサラしてて触れた感じも嫌じゃない。もうマウスは持ち歩かなくてもいい。

トラックポイントについては真剣に使うのは初めてだけど、まだ全然慣れない。本当はもう少し活用できるかと思っていたけど、トラックパッドの使い心地が良いのでついついトラックパッドを使ってしまっている。とはいえせっかくThinkPadを購入したのでトラックポイントは是が非でも自分のものにしたいところ。

f:id:bcorp:20190309165723j:plain

バッテリー

カタログスペック上は11時間とかうたわれているけど、実際にはそんなに持たない。Lenovo Vantageというアプリでバッテリーの管理ができて、80%に抑えるような設定ができるので常時80%を上限としてバッテリーを充電している。そのまま外出してLTEに接続し続けている状態でおおむね5時間~6時間程度か。液晶輝度を60%以下にしてバッテリー節約機能をONにすると7時間くらい使える。

試しに先月発売された窒化ガリウム採用のAnker PowerPort Atom PD 1でも充電したところ、給電はできた。出力が30Wとあまり大きくないけどAirPodsと変わらないサイズ、本体とケーブルを合わせても60g台。緊急用と割り切ってこれをカバンに放り込んでおいてもいいかもしれない。

f:id:bcorp:20190309165733j:plain

普段の充電は付属のACアダプタは取り回しが面倒っぽかったので、化粧箱からも出していない。代わりにPD対応の汎用ACアダプタを使ってType-Cポートから充電しているけど、特に問題なく認識して充電もできているので、この辺はPowerDeliveryのメリットか。さらにモバイルバッテリーによっては、給電も出きるっぽいけど、あまりにも重いので一緒に持ち運ぶようなことはしていない。ただ災害時や電源ポートがない国際線飛行機に搭乗するような時に、非常手段として使えるというのは認識しておいて損はないと思う。

Windows Hello

生体認証として顔認証と指紋認証が選択できるけど今回は指紋認証を選択した。ログイン時の反応に不満を持つような速度ではなく、一般的なスマートフォンと同じくらいの精度で認識してくれる。

f:id:bcorp:20190309170227j:plain

Apple Watch + MacBookのログインが最も理想的だと思うけど、指紋認証でも十分快適。iPhoneやスマートフォンと違って再起動時にも指紋認証でログインできるのは結構便利。

重量

1.1kgは13インチクラスのラップトップとしてはごく普通のレベル。700g~800g台といったラップトップもあるけど、搭載される拡張ポートの数が少なかったり、バッテリー容量が少なかったり、ドングルやマウスを持ち運ぶことを考えれば、X1 Carbonは同じくらいの重量かそれ以下になり、結果としてカバンに入れる物の数と重量が減る。

設定

最近は旧PCでバックアップして新しいPCで復元といった作業もなくほとんどクラウド経由となるので、移行作業は効率的。ブラウザとOfficeアプリのインストール、SIMのAP、VPNの設定、会社のセキュリティ設定をしたくらいか。余計なプリインストールアプリもなかったので、アンインストール作業は不要だった。結局2時間もかからず環境は戻せた。

キーボード関連の細かい設定はCapsLockをCtrlに、無変換キーをIME OFF、変換キーをIME ONEにした。IMEも以前はGoogle IMEを使っていたけどMicrosoft IMEでも不自由なさそうなので今後はこっちを使っていく予定。できるだけデフォルトのまま使った方が後々まで快適に使えるはず。

ファン

X1 Carbonはファンレスではない。普段はほとんど気にすることはないけどCPUが高負荷になったときに急に動き出す。

f:id:bcorp:20190309165620j:plain

音はあまり気にならないけど、熱風が本体右側から結構な勢いで出てくるので、マウスを右手で使うと気になるかもしれない。

スリーブ

今まで使っていた13インチ用のスリーブにはギリギリ入らなかったので、とりあえずAmazonベーシックの14インチスリーブを使っている。これはこれで若干大きい気はするけど、軽量、700円と格安だったのでしばらく使って様子を見ることにする。

全体

久しぶりにWindowsラップトップを購入したけど、全体的に満足できるPCだと思う。特に快適なキーボード、高解像度のディスプレイ、SIMフリーのLTE接続、持ち運ぶのに重過ぎない重量、拡張性の高さなど派手さはないけど、実用性を重視するには最高のPCではないだろうか。

普通にお店に行って持って帰ってくるとか、購入金額が変動するのでいつ買えばいいのかよくわからないのは、不安だったりするけど、特にトラブルもなく到着しているので結果として杞憂に終わった。結局使い始めてしまえばそんなことは忘れてしまうので。