【今日からできるビットコインつみたて方法3つ】自動で簡単、手動でお得、プログラムで自動でお得
価格の盛り上がりもあってか、それともYoutube動画で放った「資産100%ビットコイン」というフレーズ、あるいはそのシーンを切り取られた画像がTwitterで目に入ってか、最近友人から「自分もビットコインの積み立てを始めてみようと思うけど、どうしたらいいか」と質問をもらうようになりました。
そこで、ビットコインの積立を始める人に伝えるべきことを一度まとめておこうと思います。
積み立て方法は
- 積立サービスを使う(手間がかからないがちょっとコストが高い)
- 手動でお得に積み立てる(コストが低いが手間がかかる)
- プログラムを使って自動でお得に積み立てる(知識がいるが手間いらず、低コスト)
の3つの方法を紹介したいと思います。
多少プログラムの知識がある方のために、今回は基本コピペすれば動くサンプルコードを掲載します。Google Apps ScriptというGoogleアカウント(Gmail)があれば誰でも無料でプログラムを動かせる環境で利用できます。最初に設定だけ行えば、あとは手間がかかりません。
難易度的には、出来合いのJavaScriptプログラムに書かれた変数のパラメータをカスタマイズしたことがある、ぐらいの方からご利用いただけると思うので、是非使ってみてください。
あなたも(?)資産100%ビットコイン!
2017年からビットコインをコツコツ積み立てて、資産100%ビットコインのniwatakoです。
2017年から、業務スーパーのレトルトカレー生活で食費を節約し、シェアハウスに引っ越し家賃を圧縮し、バブルの中でも、暴落後のどん底の中でも、心を無にして老後の積み立てだと思ってビットコインを買ってきました。
2020年に至るまでの間には色々な失敗(余計なトレードをしてしまうこと)もありましたが、だんだん学んで、相場の動きに動揺せず、ビットコインを握り締められるようになってきました。2020年末から2021年頭にかけての価格高騰でようやくこれまでの積み立て(と、失った勉強代)が報われつつあります。
ボラティリティの高いビットコインの価格に振り回されないためには、積立をして普段は価格を忘れているのが自分には一番でした。
心の準備
なお、私はもともと貯金がなかった故に資産100%ビットコインなので(エンジニアとして最新のiPhone端末やAppleWatchを手に入れるためや、関西から東京の勉強会に通う交通費にクレジットカードのリボ払いを使っていた)、資産100%ビットコインを推奨するわけではないです。
20代で現に安定した職と収入があり、近い将来大きな出費の予定がなく、ビットコインの価格が0になってもやり直せるのであれば資産100%ビットコインにしてみてもいいと思いますが(リスクを負ってでも今後の値上がりを信じる/法定通貨の価値を信じていないなら)、定年が迫っていたりすでに老後であれば慎重になったほうがいいと思います。
一方、「ビットコインはリスク」で「法定通貨(円やドルなどの貯金)は安全」なのか?といえば、コロナで過去ありえないほどの金融緩和がされていたり(中央銀行がお金を新たに発行して流通させれば、そのぶん通貨の価値は薄まります)、MMT(国は国債をいくら発行しても自国通貨を新たに発行して返済すれば良いので財政破綻しない、という理論)とか言われ始めている中、法定通貨の価値をヘッジしないのもそれはそれでリスクという気もします。
というわけで、100%を目指すにせよ、資産のうちの何%かをインフレヘッジのためにビットコインにするにせよ、買ってみようという方は、一定間隔で一定額を積み立て続ける、ドルコスト平均法で積み立ててみてはいかがでしょうか。
ドルコスト平均法で定期的に同じ金額を出して買い続けると、高いときには少量買え、安いときにはたくさん買えます。平均すると、全体的に安い価格で買えたことになります。
ドル・コスト平均法とは?上手に利用するための2つのポイント | みずほ銀行
ビットコイン価格がだいたい4年おきぐらいに大きく上がっているので、長くて4〜5年ぐらいの覚悟で、価格が下がっても焦らずコツコツ積み立て続けられるような額でやってみましょう。
Bitcoin Stock to Flow Model - S2F Live Chart (PlanB) (※価格の実績とそれにフィットするモデル理論の例。対数グラフなので、1目盛り上がるごとに価格はなんと10倍になっている/なる予想)
もちろん、これまでの傾向通りにならない可能性もあります。そして、向こう数年は稀であろうけれども、顕在化した場合に最悪の事態となるのは、暗号の危殆化などに伴うビットコインシステムそのものの崩壊です。最悪、なくなっても自分や家族の命に関わらない額にとどめましょう。
買う以上は、ある程度仕組みを理解しておくのが、最悪の事態を回避したり、嘘の情報や不安を煽る情報に惑わされて慌てて売ったり買ったりしないために大切です。ちょっと小難しいですが、毎日1ページずつでも、マスタリングビットコインを読んで仕組みを理解しておくのがおすすめです。
最初は「ソシャゲをやっているつもりでビットコインに課金する」「ソシャゲと比べれば、0円以上で返ってくるのでお得な趣味」ぐらいの感覚でした。ビットコインを買ってみたいけど、迷いや恐れもある、という人は「ソシャゲに課金できない額はビットコインに課金しない」というルールはいかがでしょう。
ビットコインの買い方
積み立て方法の説明の前に、そもそもビットコインをどうやって買うのか説明します。
交換業者を選ぶ
日本でビットコインを買うには、暗号資産交換業者を使います。株を買うなら証券会社に口座を開設するように、ビットコインなどの暗号資産を買うには暗号資産交換業者に口座を開設します。
どんな暗号資産交換業者が存在するかは、金融庁が登録した暗号資産交換業者の一覧や、JVCEAという業界自主規制団体の会員一覧から確認することができます。
私は主にbitFlyerを使っています。
理由は、知人のエンジニアが在籍していたから(完全に個人的な信頼関係)、アプリから取引所機能が使える、Webの取引所機能(Lightning)が使いやすかったからです。取引高も大きいです。
アプリ(iOS / Android)をインストールすればオンラインで完結する本人確認手続き(eKYC)で、郵送手続き無しで口座を開設できます。
1社契約すればいいのか
最初は1社でいいと思います。
1社に資産が集中していてリスク分散が必要になったり、ビットコイン以外の暗号資産を取引してみたくなったら、必要に応じて契約する暗号資産交換業者を増やすことを検討するといいと思います。
一社に集中するリスク
資産は一社にあずけていると、ハッキングなどが起きた際に長期間取り出せなくなる恐れがあります。
ただし、法改正や規制強化で、流出して資産が失われるリスクに対しては、かなり対策が進んできています。
とはいえ、資産が失われる可能性は低くても、事故が起きれば長期に渡ってサービスが停止する可能性はあるので、資産は何社かに分散して置いておいたほうが良いでしょう。また、あなたのアカウントがハッキングされてしまう場合もあるかもしれません。資産が1箇所に集中するのはリスクです。
資産が多くなってきたら、ハードウェアウォレット等で自身で管理するか、何社かに分散して管理したりしましょう。
(※2020年の資金決済法の改正で、顧客の暗号資産は業者がオフラインで管理することが義務付けられました。2018年から2019年頃には国内の暗号資産交換業者からの流出事件が何件かありましたが、現在、暗号資産交換業者から暗号資産が流出して顧客資産が失われる可能性は、日本の交換所に限ればかなり低くなってきています。また、交換業者が破綻した場合も、暗号資産は分別管理されており、他の債権者より優先してまず顧客の暗号資産が弁済される仕組みです。)
販売所と取引所の違い
ある暗号資産交換業者と契約して、暗号資産を手に入れる方法には、2通りあります。
交換業者があなたに直接売ってくれる「販売所」から購入する方法と、他のユーザーと暗号資産を交換できる取引所で取引する方法です。どちらか片方しかない場合もあります。契約する前に要確認です。
bitFlyerを例に見てみます。
アプリ上に販売所、取引所(、Lightning=プロ向けインターフェースの取引所)のタブがあります。
販売所と取引所でどのような違いがあるのか説明します。
販売所
販売所では、暗号資産交換業者が相手になって暗号資産の売買に応じてくれます(対して、後で説明する取引所では、取引の相手はあなたと同じほかの取引所のユーザーになります)。
あなたが買う暗号資産を、暗号資産交換業者が仕入れてきたり、あなたが売る暗号資産を、暗号資産交換業者が売りさばく必要があるため、そのコストやそこから得る利益が上乗せされた価格が提示されます。あなたは、買うときはちょっと高く、売るときはちょっと安く売らなくてはいけません。
また、ビットコイン価格は刻一刻と変動していますが、販売所では、一定の時間は同じ価格が提示され続けています。もし、急激に高騰したときに、すこし前の安い価格であなたが買う注文をすると、業者は損をしてしまいます。なので、そのような価格変動リスクも織り込んだ価格が提示されます。
買ってすぐ売ると、ちょっと高めに買って、ちょっと安めに売ることになるので、5〜10%、場合によってはそれ以上、資産が減ってしまいます。
そんな、取引コストが高めの販売所ですが、良いところは、操作しやすいところ、わかりやすいところだと言えます。
販売所の売却画面には、いくらで売れるかという価格だけが表示されています。購入画面には、いくらで買えるかという価格だけが表示されています。
一方、次に紹介する取引所は取引コストは安いのですが、1つの画面にいろいろな価格が表示されて、刻一刻と変化していきます。1つの画面から売り注文も買い注文も出すので、注文を間違えることもあります。そのため、ある程度、各表示項目の意味や、操作方法を理解する必要があります(とはいえ、かんたんに慣れることができるレベルだと思いますよ!)。
というわけで、取引所と比べると、販売所は操作がとてもわかりやすく、取引に慣れていない人でも使いやすいのが特徴です。
取引所
取引所では、取引の相手はあなたと同じ立場である、ほかのユーザーになります。暗号資産交換業者はその2人の取引をマッチングさせる役割になります。
取引所の画面は、「この価格で売りたい」「この価格で買いたい」というユーザーたちの希望を一覧表示しています。
たとえば、すでに存在する「この価格で売りたい」という注文と同じ価格で「買いたい」という注文が入った時、2人の注文が成立し、2人の間で暗号資産とお金の交換が行われます。
あなたが、図の上の方の売り注文の中にある数量・金額の範囲で買い注文を出せば、今すぐ買えます。もし、一番安い売り注文よりももっと安い価格で買い注文を出したら、すぐに取引は成立せずに、あなたの注文は下の買い注文の一覧の中に加わって、だれかがその価格で売ってくれる時を待つことになります。
取引所で売買が成立した時、ほんの少しだけ、取引手数料がかかります。bitFlyerでは0.14%程度です。数%のスプレッドがあった販売所と比べればずっと安いです。
2021/01/24 23:30頃、一番高い売り注文は3,353,321円、一番安い買い注文は3,352,007円です。差額は0.04%程度。もし買って、すぐに売って、手数料が往復でかかっても、1%も減らないと思います。いま販売所は、購入価格と売却価格の差は6%程度。販売所と比べると取引所がだいぶお得です。
取引所の画面の見方がわかり、使い方が理解できた方は、取引所を使うとお得です。
なお、取引所は、販売所よりも大きな単位でないと売買できません。販売所では1円でもビットコインを買えますが、取引所では最低でも0.001BTC買わないといけません。2021/01/24現在、1BTCは340万円程度ですから、最低でも0.001BTC買うために、3,400円程度は必要です。
ビットコインを積み立てるには?
それでは3つの積み立て方法を紹介していきます。
- 販売所の積立サービスを使う(手間がかからないがちょっとコストが高い)
- 取引所で手動でお得に積み立てる(コストが低いが手間がかかる)
- プログラムを使って取引所で自動でお得に積み立てる(知識がいるが手間いらず、低コスト)
販売所の積立サービスを使う
まずは、暗号資産交換所が提供している積立サービスを使う方法です。
これは一番お手軽です。多くの場合、銀行口座引き落としで、自動でビットコインを積み立てることができます。一度設定したら、毎月お給料を稼いで、あとは寝ているだけです。
- かんたん積立 | 仮想通貨ビットコイン(Bitcoin)の購入/販売所/取引所【bitFlyer(ビットフライヤー)】
- Coincheckつみたて | 仮想通貨取引所のCoincheck(コインチェック)
- つみたて暗号資産 | ビットコイン・暗号資産(仮想通貨)ならGMOコイン
- Zaifコイン積立 - Zaif(ザイフ)
デメリットは、積立サービスで購入する際の価格は、「販売所」の価格になるため、数%のスプレッドを取られることです。
とはいえビットコイン価格は1日で10%、20%と動くことも珍しくないですし、年間では100%以上の値動きがあることもあります。長期保有を前提としているなら、あまり気にならないコストかもしれません。
続いて、手動で取引所を使って積み立てる方法と、自動でプログラムから取引所を使って積み立てる方法を紹介しますが、手動で積み立てるのは忘れてしまう、プログラムなんて触れない、という方は、販売所の価格を受け入れて、積立サービスを使ってみると良いかもしれません。
取引所で手動でお得に積み立てる
先程、取引所がお得であることを説明しました。
もし、取引所を使って「定期的に同じ額で買い続ける」ことを自分の手でやり続けることができるなら、販売所価格で自動購入される積立サービスよりは、取引所を使って定期的に自分で買うほうが、少しお得です。
取引所で手動で積み立てる場合のデメリットは、「初めての人には取引所の操作方法がわからない(かもしれない)」ということと、「最低取引量が販売所より大きい」ということ(bitFlyerの取引所の場合0.001BTC以上から注文できる)、そして「積み立て作業を手動で行わなくてはならない(やり忘れる、値動きを見て気の迷いが生じる)」ことです。
スマホの操作やアプリを使いこなすのが難しい、取引所の仕組みが理解できない、自分で継続的に買うことができない、という場合は、販売所のコストをケチらずに、積み立てサービスを利用して、何も考えずに、何も操作せずに積み立てが実行される方が良いでしょう(まずは積み立てサービスでスタートし、あとから取引所を使うように切り替えても良いです)。
積み立て頻度と積み立て額の注意
取引所の最低取引量が販売所より大きい点についてですが、これは積み立ての頻度を落として1回で買う額を大きくすることで対応します。
ドルコスト平均法では一定額を一定周期で買い続けるのがポイントになります。「毎月給料日にX万円」「毎週Y曜日にZ千円」など、購入頻度と価格を決めます。
その際に、ビットコイン価格が多少上がっても買い続けられる頻度・価格にしましょう。
たとえば、ビットコイン価格が3倍になると1000万円強になります。そうすると0.001BTCは1万円ほどになります。例えば年間の予算が12万円なら、購入頻度は月1回で、その1回での購入額は1万円という計画にしておくのが良さそうです。
※この例では、もし嬉しいことにビットコイン価格が1000万円を超えてしまったら、2ヶ月に1回に頻度を落として、1回で2万円分買いましょう。1年で投じている額は12万円のままで、頻度を減らすことで購入額を増やして対応するということです。
※あまりにもビットコインの価格が上がりすぎたら、取引所が最低取引量を下げる対応も期待できます。
プログラムを使って自動でお得に積み立てる
多くの取引所にはAPIが用意されています。プログラムを使ってAPIを利用すれば、人間が手動で操作をしなくても取引所に注文を出してビットコインを買うことができます。
次のコードはbitFlyerのAPIを使ってビットコインとイーサリアムを指定の金額分購入するGoogle Apps Scriptのコードです。Google Apps ScriptはGoogleアカウント(Gmailアドレス)を持っていれば誰でも一定程度無料で実行できます(昔、毎日動かしてましたが課金されたことはないです)。
Google Apps Scriptは、「トリガー」を設定することで、決まったタイミングに自動で実行することができます。トリガーを使って、毎月、毎週など、決めた頻度で自動で購入するようにしましょう。
// サンプルコードです。
// このコードを実行したこと、参考にしたことによって被るあらゆる損害について責任を負いかねます。
// 期待された動作をすることを保証しません。
// 自己責任でご利用ください。
// https://twitter.com/niwatako
/* ------------------------------
買付金額の設定
------------------------------ */
// 1回の買付でBTC、ETHをそれぞれ日本円でいくら分購入するか数値で指定します。
// 0を指定すると注文を行いません。
// 最小取引数量がBTCは0.001、ETHは0.01であるため、ドルコスト平均法で、一定間隔で一定額で書い続けるには、
// 1回あたりの買付額は単価が数倍になっても買い続けられる額にするのが良いと思います。
// 指定した買付額では最小取引数量に届かなくなった場合、エラーが発生し注文が失敗します。
// 例: 現在BTCが300万円で、積立を毎日3,000円で行うと、価格が少しでも上昇すれば3000円では0.001BTC買えなくなる。
// 頻度を7日に1回(1週間毎)に落とし、1回の積立を7倍の21,000円にすれば、価格が7倍になるまで買い続けられる。
var JPY_AMOUNT_TO_BUY_BTC = 0;
var JPY_AMOUNT_TO_BUY_ETH = 0;
/* ------------------------------
利用者情報
------------------------------ */
// bitFlyer
// https://lightning.bitflyer.jp/developer より API Key と API Secret を取得
// 「新規注文を出す」権限をつけてください
// 他の権限はつけないほうが安全です。
// また、このスクリプトを管理するGoogleアカウントのセキュリティに注意してください。
var API_KEY = "";
var API_SECRET = "";
// 通知時の名前
// メールではタイトル。SlackではBotの名前になる。
var NOTIFICATION_NAME = "bitFlyer Bot";
// 実行結果のレポート先メールアドレス
// メール通知を利用する場合、通知先メールアドレスを指定し
// function sendMessage() の sendEmail(message) をコメントインする。
var EMAIL_ADDRESS = "";
// 以下を設定し、function sendMessage() の sendToSlack() をコメントインすることで、Slackへの通知も可能です
// var WEBHOOK_URL = "";
// var CHANNEL = "#general"; // Incoming webhooks have a default channel, but it can be overridden in your JSON payload.
// var USER_ID_TO_NOTICE = ""; // メンションするには <@MEMBER_ID> 形式でMember IDを記入。 Profile > More > Copy member ID
/* ------------------------------
実行結果通知方法のカスタマイズ
------------------------------ */
function sendMessage(message) {
// メールで通知する
sendEmail(message)
// // Slackで通知する
// sendToSlack(USER_ID_TO_NOTICE + message);
};
/* ------------------------------
bitFlyer 定義情報
以下はbitFlyerの仕様変更があれば反映
(最小取引単位等)
------------------------------ */
// APIルート
var HOST_BITFLYER = "https://api.bitflyer.com";
// 発注エンドポイント
var PATH_SEND_CHILD_ORDER = "/v1/me/sendchildorder";
// 価格取得エンドポイント
var PATH_TICKER = "/v1/getticker"; // params: product_code (https://api.bitflyer.com/v1/getmarkets)
var PRODUCT_CODE_BTC_JPY = "BTC_JPY";
// BTCの最小取引数量
var MINIMUM_ORDER_SIZE_BTC_JPY = 0.001;
// BTC取引時の小数点以下の桁数
var DECIMAL_DIGITS_BTC = 8;
var PRODUCT_CODE_ETH_JPY = "ETH_JPY";
// ETHの再商取引数量
var MINIMUM_ORDER_SIZE_ETH_JPY = 0.01
// ETH取引時の小数点以下の桁数
var DECIMAL_DIGITS_ETH = 7;
/* ------------------------------
以下プログラム
------------------------------ */
// この関数を定期実行するようにトリガーを設定してください
function main() {
if (0 < JPY_AMOUNT_TO_BUY_BTC) {
buy(JPY_AMOUNT_TO_BUY_BTC, PRODUCT_CODE_BTC_JPY, MINIMUM_ORDER_SIZE_BTC_JPY, DECIMAL_DIGITS_BTC);
}
// 例: ETHを2000円分購入
if (0 < JPY_AMOUNT_TO_BUY_ETH) {
buy(JPY_AMOUNT_TO_BUY_ETH, PRODUCT_CODE_ETH_JPY, MINIMUM_ORDER_SIZE_ETH_JPY, DECIMAL_DIGITS_ETH);
}
}
function buy(jpyAmount, product_code, minimum_oder_size, decimal_digits) {
// 「日本円建てでいくら分購入する」という買い方ができない。
// 「何BTC購入するか」を指定するため、現在価格を取得し予算に合致する数量を求める。
// 現在の最も高い売り注文の価格を取得
try {
var bestAsk = getBestAsk(product_code);
} catch (ex) {
sendMessage( product_code + "の価格の取得に失敗しました。\n" + ex.message);
return;
}
// 予算で買えるBTCの数量を求め、小数点以下の桁数が最小単位に収まるように四捨五入します。
var size = (jpyAmount / bestAsk).toFixed(decimal_digits);
var orderMessage = product_code + "に" + jpyAmount + "円分(数量: " + size + " 予想単価: " + bestAsk + "円)注文";
if (size < minimum_oder_size) {
// 最小・最大注文数量 https://bitflyer.com/ja-jp/faq/4-27
sendMessage(orderMessage + "しようとしましたが、最小注文数量を下回っています。\r\n最小購入数量は" + minimum_oder_size + "です。");
return;
}
var data = {
product_code: product_code,
child_order_type: 'MARKET',
side: 'BUY',
size: size,
};
try {
var childOrderAcceptanceId = postOrder(data);
sendMessage(orderMessage + "しました。\r\n" + "child_order_acceptance_id: " + childOrderAcceptanceId);
} catch (ex) {
sendMessage(orderMessage + "を試みましたが、注文に失敗しました。\r\n" + ex.message);
}
}
function getBestAsk(product_code) {
var url = HOST_BITFLYER + PATH_TICKER + "?product_code=" + product_code;
var response = UrlFetchApp.fetch(url);
if (response.getResponseCode() !== 200) throw new Error("価格の取得に失敗しまいた。 status Code: " + response.getResponseCode());
var data = JSON.parse(response.getContentText());
if (data.best_ask === undefined && data.best_ask > 0) throw new Error("価格の取得に失敗しまいた。 best_ask is undefined");
return data.best_ask;
}
function postOrder(data) {
var path = PATH_SEND_CHILD_ORDER;
var url = HOST_BITFLYER + path;
var method = "POST";
var payload = JSON.stringify(data);
var timestamp = Date.now().toString();
var sign = hmacSha256Hex(timestamp + method + path + payload);
var options = {
"method" : method,
"contentType" : "application/json",
"payload" : payload,
headers: {
'ACCESS-KEY': API_KEY,
'ACCESS-TIMESTAMP': timestamp,
'ACCESS-SIGN': sign,
'Content-Type': 'application/json',
}
};
var response = UrlFetchApp.fetch(url, options);
var responseCode = response.getResponseCode();
var contentText = response.getContentText();
var contentData = JSON.parse(contentText);
if (responseCode === 200) {
return contentData.child_order_acceptance_id;
} else {
throw new Error("status Code: " + responseCode + "\r\n" + contentText);
}
}
function hmacSha256Hex(string) {
var signature = Utilities.computeHmacSha256Signature(string, API_SECRET);
var hexString = signature.reduce(function(str,chr){
chr = (chr < 0 ? chr + 256 : chr).toString(16);
return str + (chr.length==1?'0':'') + chr;
},'');
return hexString;
}
function sendEmail(message) {
GmailApp.sendEmail(EMAIL_ADDRESS, NOTIFICATION_NAME, message);
}
function sendToSlack(message) {
var url = WEBHOOK_URL;
var data = {
"channel" : CHANNEL,
"username" : NOTIFICATION_NAME,
"text" : message,
};
var payload = JSON.stringify(data);
var options = {
"method" : "POST",
"contentType" : "application/json",
"payload" : payload,
};
return UrlFetchApp.fetch(url, options);
}
プログラムの準備
Google Apps Scriptのダッシュボードで新しいプロジェクトを作成します。
上記コードをコピペします。
そして、数字が0になっている買付金額や、空文字列「""」になっている利用者情報の部分を記入していきます。それぞれ詳しく以下に説明します。
買付金額
JPY_AMOUNT_TO_BUY_BTC、JPY_AMOUNT_TO_BUY_ETHは日本円の金額を設定します。
BTCを1回で10,000円購入するなら「var JPY_AMOUNT_TO_BUY_BTC = 10000;」です。
0を指定すると、スキップします。「var JPY_AMOUNT_TO_BUY_ETH = 0;」のままにしておけば、ETHは積み立てません。
利用者情報
https://lightning.bitflyer.jp/developer にアクセスして新しいAPIアクセスキーを発行します。
発行するAPIキーに与える権限を選択できます。今回のコードで利用するのは「新規注文を出す」だけのはずです。ほかはチェックを外すのが良いです。
APIキーが発行できたら「var API_KEY = "発行されたKey";」「var API_SECRET = "発行されたSecret";」という形でコードに記入しましょう。
次に、通知先のメールアドレス(または、Slackも指定できます。コード中のコメントをよんで指示に従ってください。)を設定します。
この通知先には、「いくらの価格で何BTC買った」とか、「買おうとしたけど最低取引単位に足りないので発注できない」「発注したけどエラーが起きた」などの報告が届きます。
API Key, Secretの管理 - セキュリティ対策について
API Key, Secretの管理について補足です。
発行したKeyとSecretがあればあなたのアカウントをAPIで操作できるようになります。このKeyとSecretは厳重に取り扱わなければなりません。
セキュリティ対策としては、
- API Key、Secretそのものが流出しないようにする
- API Key、Secretが流出した場合の被害を最小限にする
という2つのアプローチがあります。両方に取り組むことで、攻撃者があなたを狙いにくくし、万が一の場合にも被害を最小限に食い止めることができます。
あなたのGoogleアカウントに第三者がログインし、Google Apps Scriptのコードを覗かれてAPI KeyとSecretが流出するといけないので、このGoogle Apps Scriptを管理するGoogleアカウントのセキュリティには気をつける必要があります。
Google Apps Scriptを管理するGoogleアカウントのログインパスワードには十分に長く、記号や大文字小文字、数字を混ぜた、使い回しのないパスワードを設定し、2段階認証を設定するなど、第三者に不正にログインされることがないように対策を行ってください。
また、APIキーを作成する際に権限を「新規注文を出す」だけにしておくのは、万一KeyとSecretが流出したときに勝手にビットコインを送金されたりしないためです。必要以上の権限を付与しないようにしておくのもセキュリティ対策の一貫です。
動作確認と自動実行設定
設定を終えたら、一度保存しましょう。
保存したら、関数を選んで実行できるようになります。「function main()」 を実行すればビットコイン、イーサリアムが購入されます。
なお、初回にメール送信やSlackへの通知に権限を付与する必要があります。自分で作ったコードだと、Googleに確認されていないので、権限付与の確認の際にこのような画面が表示されます。
驚かずに「詳細」をクリックして、「(安全ではないページ)に移動」をクリックすると権限付与確認画面に遷移します。
メール通知のために「Gmailのすべてのメール閲覧、作成、送信、完全な削除」権限、bitFlyerのAPI及びSlackへのWebHookのために「外部サービスへの接続」を許可します。
権限を許可し、実行して注文が行われ、実際に購入できることを確認しましょう。
動作が確認できれば、あとは自動で定期実行するためにトリガーを設定します。
毎週火曜日の午後5時から6時ごろに実行するトリガーの設定例です。
保存すれば、あとは指定したタイミングで自動実行され、bitFlyerの口座に日本円の残高があれば無事発注されるはずです。
おまけ:bitFlyerへの日本円振り込みを自動化する
積み立てサービスは口座引き落としをしてくれますが、手動、またはプログラムで購入する場合は毎月給料をもらった後に自分でbitFlyerの口座に入金しなければいけません。
まず、入金を手動でやる場合のおすすめは「インターネットバンキング」欄からの入金で「住信SBIネット銀行」を選択することです。住信SBIネット銀行の口座が必要ですが、このルートで入金すれば手数料が無料です。休日でもすぐに入金が反映されます。
次に、自動でやる場合ですが、これも住信SBIネット銀行がおすすめです。
住信SBIネット銀行には「定額自動入金サービス」があり、他の銀行の口座から無料で毎月引き落としができます。毎月お金が入ってくる給与口座が住信SBIネット銀行になくても、「他行の給与口座から、毎月XXX円をSBIネット銀行に入金する」ということが自動でできます。
そして、SBIネット銀行には「定額自動振込サービス」があり、bitFlyerの入金口座あてに毎月定額自動で振り込むことができます。
これらを組み合わせると「毎月、給与口座から一定額をbitFlyerに入金する」ことができます。bitFlyerの入金口座あての振り込みには振り込み手数料がかかってしまいますが、SBIネット銀行の利用状況によって、毎月何回か無料で振り込むことができます。
スマプロランクについて | スマートプログラム | NEOBANK 住信SBIネット銀行 ※最低でも1回は無料(ランク1の場合)
なお、振り込み時に名義人は自分の名前をそのままではなく、bitFlyerに指定される番号付きの名義で振り込む必要があります。入力し忘れないように注意してください。
(もし入力し忘れた場合、画面に記載のある通り、bitFlyerのお問い合わせから問い合わせて記録と照合してもらうことで残高が付与されるので、焦らなくて良いです。)
プログラムの自動実行と、定額自動入金サービス、定額自動振込サービスを組み合わせれば、完全に自動でビットコインの積み立てができますね!
おめでとうございます👏
感想お待ちしています
無事、自分にあったビットコイン積立の方法を見つけられたでしょうか。
これから始めたくなった知人にいつでも紹介できるメモとして作成したので、特に初心者の方から、「ここわかりにくい」「動かない、つまずいた」「ここの説明を詳しく」「このステップのスクショをくれ!」「資産100%ビットコインになりました」などのフィードバックをお待ちしています。