三日坊主を防ぐ仕組みをGoogle Apps Scriptで作る
こんにちは!
タダケン(@tadaken3)です。
新しいことを始めようと意気込んでみても三日坊主になってしまったことはありませんか。
例えば、ジム通い。
通い始めた直後はモチベーションも高く意気揚々と筋トレに勤しんでいくのですが、ときには天気が悪いことを理由に、ときには仕事が忙しいことを理由に、だんだんジムに行かなくなってしまいます。
そんなことではいけない!これではムキムキマッチョになれない!
意志の力に頼らずジムに通えるようにしようと考え、三日坊主を検知したらGoogle Apps Scriptで通知する仕組みを作ってみたところ、これが自分の三日坊主を防ぐのに大いに役立ちました。
今回は三日坊主を克服するための仕組みをGoogle Apps Scriptで作る方法をご紹介します。 ジム通い以外にも、習慣化したいものに応用できるはずです。
- 三日坊主克服システムの概要
- IFTTTとGoogleスプレッドシートを連携してジムに行ったことを簡単に記録できるようにする
- Google Apps Scriptで最後にジムに行った日から何日経過したか計算する
- Google Apps ScriptでLINEに通知を送る
- 三日坊主克服システムの完成!
- まとめ
- 読者、フォロワーになってください
三日坊主克服システムの概要
三日坊主克服システムの仕組みを簡単にご説明すると
- ジムに行った履歴を残して管理する
- 最後にジムに通った日から3日経過すると通知が送られる
- ジムに行った記録はボタン一つで簡単に残せるようにする
です。
三日坊主が検知されるとこのように通知が送られます。

三日坊主克服システムはWEBサービスを組み合わせて構築しました。 もちろん無料でできます。
利用したサービス・役割は以下の通りです。
図にするとこんな感じです。

スマートフォンとスプレッドシートの連携をIFTTT、それ以外の部分をGoogle Apps Scriptが担っています。
では、さっそく作成方法をご説明します。
IFTTTとGoogleスプレッドシートを連携してジムに行ったことを簡単に記録できるようにする
IFTTTとは
まず、IFTTTとGoogleスプレッドシートを連携させてスマホで簡単に押せる「ジムに行った」ボタンを作ります。
IFTTTを簡単に説明すると「あるWebサービスとあるWebサービス間を自動的に連携する」WEBサービスです。
例えば、「もしTwitterに投稿したら、Facebookにも同じ投稿をする」といった「Applets」を簡単に作れます。詳しいことは省略しますが、IFTTTを使うとさまざまなWEBサービスを簡単に連携できるようになり、大変捗ります。
「もしスマートフォンのウィジェットにあるボタンを押したら、○○をする」というAppletsも作ることができます。
こちらを使って「もしスマートフォンのウィジェットにあるボタンを押したら、スプレッドシートに日時を記録する」というAppletsを作成します。
IFTTTをダウンロードする
まずはIFTTTのアプリが必要になりますので、アプリストアで「IFTTT」と検索するか、こちらからダウンロードしてください。1
IFTTT - Google Play の Android アプリ
アプリを起動したらアカウント作成画面が出てくると思いますので、「Googleアカウント」「Facebook」アカウントでログインするか、新たにアカウントを作成してください。
新しいアプレットを作る
アカウントの作成ができたら、トップの右下にある「My Applets」をタップします。ここに作ったAppletsが保存されます。
では、早速、新しいAppletを作成ましょう。Applet作成するには、右上の「+」をタップします。

するとこのような画面がでてきます。

IFTTTは「if this then that」の略でthisの部分に「きっかけ」(トリガー)、thatの部分に「行動」を指定することでAppletが作られます。
「this」の部分をタップして、トリガー部分を設定します。「button widget」を検索して選択します。

「Chose trigger」とトリガーを選ぶよう指示が出ますので、そのまま「Button press」を選びます。

次に「行動」部分の「that」を設定します。今度は「Goole Drive」を検索してタップしてください。

「Choose action」と促されますので「Add row to spreadsheet」(スプレッドシートに行を追加)を選択します。

続いて、スプレッドシートの設定になります。
「Spreadsheet name」の部分はお好きなスプレッドシート名を入力ください。該当するスプレッドシートがない場合は、自動で作成されるのでご安心ください。
「Formatted row」の部分は記録される行の内容になります。今回は時間だけがわかればいいのでOccurredAtだけ残してあとは削除してしまいましょう。
「Drive folder path」の部分はスプレッドシートの保存場所になりますので、こちらもお好きなところに変更してください。

完了したら「next」をタップします。
Appletが作られます。最後に「Edit title」でわかりやすい名前を設定しておきましょう。
これでボタンが作成されました。スマートフォンの設定でウィジェットにIFTTTアプリを追加すると、先ほど作成されたボタンが表示されるかと思います。

早速ボタンを押してテストしてみましょう。
このようにスプレッドシートにボタンを押した時間が記録されます。

Google Apps Scriptで最後にジムに行った日から何日経過したか計算する
IFTTTのタイムスタンプを日付に変換する
ここからはGoogle Apps Scriptを使って経過日数を計算していきます。2 まずIFTTTで記録したタイムスタンプそのままだと、日付の計算ができないので日付型に変換する関数を作ります。
//IFTTTの日付形式から通常の日付に変換 function toDateFromIFTTT(str){ str = String(str); str = str.replace(/at.*/,"")//正規表現でatより後ろの部分を削除 d = new Date(str); return d; }
日付から経過日数を計算する
IFTTTでは、ボタンを押すたびに最終行に行が追加される仕様になっています。
そこで、最終行にセットされた日付から経過日数を算出します。 経過日数を算出するために、スプレッドシートの計算式を使っています。計算式をスクリプトで埋め込む方式だとスプレッドシートを確認した際も自動で計算されるからです。
計算式をセットするスクリプトをこのように追加します。
var ss = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 var sheet = ss.getSheetByName("log"); //シートを取得 //シートの最終行に経過日を計算する式をセットする function setFormuraLastRow(){ //シートの使用範囲のうち最終行を取得 var maxRow = sheet.getDataRange().getLastRow(); //A列の最終行の値を取得 var str = sheet.getRange(maxRow,1).getValue(); //スプレッドシート用の式 var code = '=TODAY() - TO_DATE(B'+ maxRow+')'; //フォーマットした日付をセット sheet.getRange(maxRow,2).setValue(toDateFromIFTTT(str)); //式をセットする sheet.getRange(maxRow,3).setFormula(code); }
試しにsetFormuraLastRow関数を実行すると、B列に日付のデータ、C列に経過日数が表示されているかと思います。

C列では「=TODAY - TO_DATE(B1)」という式をセットして、経過日を計算しています。
Google Apps ScriptでLINEに通知を送る
LINE Notifyのアクセストークンを取得する
LINEに通知を送るには、「LINE Notify」という仕組みを使います。
まず、LINEアプリからLINE Notifyのアカウントを友達として追加します。
次にLINE NotifyのページにLINEアカウントでログインしてアクセストークンを発行します。
アクセストークンはGoogle Apps ScriptからLINEに通知するために必要になりますので、メモしておきましょう。
わからない場合はこちらの解説記事も参考にしてみてください。
Google Apps ScriptでLINE通知を実装する
では、スプレッドシートに戻って、Google Apps Scriptで通知部分を実装してきましょう。
//LINEに通知を送る関数 function sentToLine(message){ var token = "先程取得したアクセストークン"; var options = { "method" : "post", "payload" : "message=" + message, "headers" : {"Authorization" : "Bearer "+ token} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options); }
これですべての部品が整いました。
三日坊主克服システムの完成!
では、三日坊主克服システムを完成させましょう。main関数を作って、メインルーチンを実装します。スプレッドシートの値を取得して、経過日が3日もしくは7日以上であれば、LINEに通知をするようにします。
完成形のプログラムはこのようになります。
var ss = SpreadsheetApp.getActiveSpreadsheet(); //スプレッドシートを取得 var sheet = ss.getSheetByName("log"); //シートを取得 function main(){ setFormuraLastRow() var maxRow = sheet.getDataRange().getLastRow(); var passDate = sheet.getRange(maxRow,3).getValue(); var message =""; //経過日が3日もしくは7日以上だったらLINEに通知を送る if (passDate==3 || passDate>=7){ message = "最終トレーニングから"+ passDate + "日経過しました"; sentToLine(message); } } //IFTTTの日付形式から通常の日付に変換 function toDateFromIFTTT(str){ str = String(str); str = str.replace(/at.*/,"") d = new Date(str); return d; } //シートの最終行に経過日を計算する式をセットする function setFormuraLastRow(){ var maxRow = sheet.getDataRange().getLastRow(); var str = sheet.getRange(maxRow,1).getValue(); var code = '=TODAY() - TO_DATE(B'+ maxRow+')'; sheet.getRange(maxRow,2).setValue(toDateFromIFTTT(str)); sheet.getRange(maxRow,3).setFormula(code); } //LINEに通知を送る関数 function sentToLine(message){ var token = "先程取得したアクセストークン"; var options = { "method" : "post", "payload" : "message=" + message, "headers" : {"Authorization" : "Bearer "+ token} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options); }
最後にスクリプトのトリガーを設定します。main関数を通知を送りたい時間帯を選んで日タイマーでセットします。

まとめ
今回は、Google Apps Scriptで三日坊主克服システムの作り方を解説しました。
- IFTTTとスプレッドシートの連携方法
- Google Apps ScriptでIFTTTのタイムスタンプを扱う方法
- LINE Notifyで通知を送る方法
を組み合わせて仕組み化しました。
仕組み化することで意識せずに三日坊主を検知できるので、今までよりは三日坊主を克服しやすくなったと思います。
あなたが、三日坊主を克服して新しい習慣を身につけられることを祈っています。
最後に尊敬するTestosterone先輩の名言を掲載します。
三日坊主のそこの君!継続のコツを教えよう。自分に課したルールは大小や状況には関わらず徹底的に守り抜け。「今日は〜だから」「これぐらいならいいか」「今日1日だけ」とかやってるとだんだん慣れてきてルールが曖昧になり最後には消える。臨機応変ではなく頑固なまでに守り抜け。きっと継続できる
— Testosterone (@badassceo) 2015年12月6日
読者、フォロワーになってください
本ブログではPython、Google Apps Scriptの役立つテクニックを公開しています。よろしければ、本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。
【Python】チャットワークに通知を送るスクリプトをより実用的に改良する

こんにちは!
タダケン(@tadaken3)です。
先日、「いつも隣にITのお仕事」に、Pythonを使ってチャットワークに通知を送る方法について解説した記事を寄稿しました。
Requestsモジュールを使いチャットワークAPIにアクセスして、メッセージを送る方法を解説しました。「いつも隣にITのお仕事」では、プログラム初心者向けの内容にフォーカスしているため、Requestsモジュールの使い方を中心にご紹介しています。
ですが、このままだと、
- ルームIDやメッセージ内容を変更する度に、コードを変更する必要がある
- スケジュールで定期的に実行する際に実行ログが出力されない
などの課題があります。
そこで本ブログでは、チャットワークに通知を送るPythonスクリプトをより実用的なコードに改良する方法をご紹介します。1
argparseを使ってパラメータを管理する
argparseモジュールはコマンドラインのインタフェースを簡単に作成できる標準モジュールです。
Pythonプログラムを実行した際にコマンドライン引数を設定できます。メッセージ内容やルームIDをコマンドラインから指定できるようになります。
#!/usr/bin/env python import argparse def main(): # パーサの作成 psr = argparse.ArgumentParser() # -m / --message というオプションを追加.デフォルトは 'hello! ' psr.add_argument('-m', '--message', default='hello! ') # コマンドラインの引数をパースしてargsに入れる.エラーがあったらexitする args = psr.parse_args() # argsからmessageに格納された引数を取り出す print(args.message) if __name__ == '__main__': main()
実行時にコマンドラインで引数を指定しないとデフォルトの内容、引数を指定した場合は引数の内容が表示されます。
$ python sample_argparse.py hello! $ python sample_argparse.py -m 'Good Bye!' Good Bye!
loggingを使ってログを出力する
Pythonでログ出力を実装するためには標準モジュールのloggingを使います。
loggingを使うと、ログをレベル分けしたり、ログ出力のフォーマットを設定できます。loggingの詳しい使い方は以下の記事が参考になります。
ログの設定を以下のように記述します
logger = logging.getLogger(__name__) # 出力するログレベルの設定。INFO以上のログが出力されるようになる logger.setLevel('INFO') # ログのファイル出力先を設定 fh = logging.FileHandler('chatwork.log') logger.addHandler(fh) # ログのコンソール出力の設定 sh = logging.StreamHandler() logger.addHandler(sh) # ログのフォーマット設定 formatter = logging.Formatter('%(asctime)s:%(lineno)d:%(levelname)s:%(message)s') fh.setFormatter(formatter) sh.setFormatter(formatter)
ログを出力をしたい場合、ログを出力したいタイミングの箇所で以下のように記述します。
logger.info('これは正常動作です') logger.warning('実行可能だけども警告があります')
チャットワークに通知するスクリプトを改良する
では、これらを踏まえて、チャットワークへ通知するスクリプトを改良してみましょう。
main関数を作って、メインルーチンを記述しています。APIキーとルームIDのデフォルト値はご自身が使うものに変更してください。2
#!/usr/bin/env python # -*- encoding: utf-8 -*- import argparse import requests import logging def main(): # ロガーを呼び出し logger = get_logger() # 処理が開始されることをロギング logger.info('start') # コマンドライン引数からルームID、メッセージ内容を取得 psr = argparse.ArgumentParser() psr.add_argument('-a', '--apikey', default='#Your Chatwork API KEY') psr.add_argument('-r', '--roomid', default='Your Room ID') psr.add_argument('-m', '--message', default='にゃんぱすー') psr.add_argument('--version', action='version', version='%(prog)s 1.0') args = psr.parse_args() # エンドポイントの生成 ENDPOINT = 'https://api.chatwork.com/v2' post_message_url = '{}/rooms/{}/messages'.format(ENDPOINT, args.roomid) # チャットワークAPIにポストする場合のヘッダー、パラメータを設定 headers = { 'X-ChatWorkToken': args.apikey} params = { 'body': args.message } # ポストリクエストを実行 r = requests.post(post_message_url, headers=headers, params=params) # ステータスコードが200(成功)以外の場合、警告をする if r.status_code != 200: logger.warning(r.text) # 処理が終了したことをロギング logger.info('end') # ロガーの設定 def get_logger(): logger = logging.getLogger(__name__) logger.setLevel('INFO') fh = logging.FileHandler('chatwork.log') logger.addHandler(fh) sh = logging.StreamHandler() logger.addHandler(sh) formatter = logging.Formatter('%(asctime)s:%(lineno)d:%(levelname)s:%(message)s') fh.setFormatter(formatter) sh.setFormatter(formatter) return logger if __name__ == '__main__': main()
では、「chtwk.py」というファイルに保存して実行してみましょう。
コマンドラインからの入力を受け付けて、ログもきちんと出力されていますね。chatwork.logファイルにも実行した結果が記録されているはずです。
チャットワークにもコマンドラインで設定したメッセージ内容で通知が送られています。

まとめ
ちょっとしたツールでもキチンと作っておくと、再利用できるようシーンが増えます。結果的には業務の時間短縮につながったり、メンテナンスしやすくなりますので、意識しておくと良いのではないでしょうか。
今回作成したコードはGithubにもおいてありますので、ご参考に!
読者登録をお願いします
本ブログではPython、Google Apps Scriptの役立つテクニックを公開しています。よろしければ読者登録もしくはTwitterアカウントのフォローをしていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/22
- メディア: 単行本
- この商品を含むブログ (1件) を見る
-
元ネタはこちらの記事です。pythonで小さなツールを作る時のtips - Qiita↩
-
APIキーについてもコマンドラインから取れるようにしていますが、変更して使うケースが少なければ、環境変数に入れて管理する方法もあります。こちらを参考に。【Python】トークンなどの認証情報は環境変数で管理しよう - 肩の力を抜いて↩
ゼルダ開発者に学ぶチーム全体の生産性を上げる方法
こんにちは!
タダケン(@tadaken3)です。
日本最大のゲーム開発者向けカンファレンス「CEDEC 2017」が9月1日まで行われていました。ボクの好きなゲームの一つ「ゼルダの伝説 ブレス オブ ザ ワイルド」(以下、BotW)についても多くセッションが開かれてました。
今回はBotWのセッションを読んで学んだこと、感じたことをまとめてみました。
自作のバグ検知ツール「ZELDA_ERROR」で制作効率が上がった
たくさんのセッションが公開されたのですが、個人的に注目したのがこちらの記事です。
簡単にまとめると、
BotWは任天堂の歴史の中でも今までにない規模の制作規模だったそうです。制作規模が大きいため、バグも大量に発生し、面白さを検証するためのテストプレイもままならない状態でした。
QAエンジニアである大礒さんが、BotW専用のデバッグツール「ZELDA_ERROR」を作って、効率的にバグ報告をできるようにしました。
通常、ゲームのソフトの開発は制作の終盤にデバックを行なうのですが、「ZELDA_ERROR」のおかげ開発の初期からデバックを効率的に行なうことができ、その効果も制作サイクルを早く回せました。
という内容です。
道具を作ってチームの力を最大限に活かす
ボク自身もBotWは100時間以上遊びましたし、いち任天堂ファンとして、開発の裏側の話を知って単純にすごいなと思いました。
「ZELDA_ERROR」の記事を読んで一つ思い出したことがあります。
任天堂の元社長、故・岩田さんとほぼ日の糸井さんのとある対談記事です。
当時ふたりは「MOTHER2 ギーグの逆襲」というスーパーファミコンのソフトの開発を行っていました。
開発は難航し4年間たっても完成の目処が見えない状態でした。あまりにも開発が難航したため岩田さんが助っ人として、開発陣に加わったときのエピソードです。
当時の状況を二人はこのように振り返っています。
糸井
あー、もっともですね(笑)。
で、そのときに岩田さんが
なにからはじめたかというと、
まず、道具をつくりはじめたんですよね。
つまり、目の前に大きな問題がごろごろあって、
すごくたいへんだぞ、というときに、
直接は、それに取りかからなかった。
だから、離れたところから見ると、
ぜんぜん手をつけてないように見えたんです。
ところが、それは、問題を片づけていくための
道具をつくっていたんだよね
岩田
はい。
糸井
(まわりのスタッフに向かって)
おもしろいんだよ、これは。
問題を1個ずつ片づけていくかというと
そうじゃないんだ。
いったん、道具をつくっておいて、
「みんなが使える道具をつくりましたから、
これで、あなたはここをつくってください」
というふうに建て直していったんだ。
つまり、道具さえできたら、
あとはやるだけなんですっていう
やり方をしていましたよね。
HOBO NIKKAN ITOI SHINBUN - 1101.com
このとき、岩田さんが具体的に作った「道具」は、当日まだ珍しかった電子メールだそうです。システムを社員一人ひとりのPCに入れさせて、コミュニケーションを円滑化しました。
開発がうまくいってない原因として、コミュニケーションがうまくいっていないと分析したんでしょうね。今でこそメールなんか当たり前ですが、1990年代の話ですから驚きです。
他にも岩田さんは、ファイルの更新状況を管理するために、バージョン管理システムを構築して、MOTHER2の開発効率を劇的に改善しています。1
岩田さんは、いきなりソフトの開発に入らず、みんなが使えるツールを作って、チーム全体の生産性をアップしました。
結果4年間も開発が難航していたMOTHER2が、岩田さんが開発に入ってから1年で発売までこぎつけました。
任天堂の大磯さんがおこなった「ZELDA_ERROR」を作って、チームの開発力を底上げするというのも、岩田さんのやり方そのままです。
岩田さんのDNAはしっかりと任天堂の開発陣に受け継がれているんだなと感じました。
目の前の問題にすぐ取り掛かる前に
とくに忙しくて切羽詰まっているときほど、目の前の問題をすぐに解決しようと手を動かしがちです。
ボクなんかもタスクがたくさんあって消化できるかわからないときほど、不安になってすぐに目の前の課題から手を付けがちでした。
ですが、むかしに岩田さんのツールを作る方法を知ってから、
- もしまた同じような問題が起きたらまた時間がかかってしまうのではないだろうか
- そもそも何が本当に問題なのだろうか
ということを一度立ち止まって考えるようになりました。
そして、自分でも自動化したりツールを作ってみたいと思いプログラミングを学び始めました。
プログラミングを少しずつ学んで行く過程で、ちょっとずつ自分の業務を自動化していきました。
時にはそれをチームに公開して他の人も使えるようにしてきました。
もちろん岩田さんや大礒さんのようなすごいツールではありませんし、日々の問題を解決する本当にちょっとしたプログラムだったりします。
それでも、作ったツールが増えれば増えるほど、仕事はどんどん自動化され、楽になっていきました。
まとめ
みんなが使えるツールを作って、チーム全体の生産性をアップするメソッドは、チームで仕事をすすめていく上で非常に役に立つ考え方です。
プログラミングの強みは、ツールを自分で創ってしまえるところだと再認識しました。
プログラミングを学んで、個人の生産性だけでなく、チームの生産性をアップしていけるといいですね。
読者登録をお願いします
本ブログではプログラミングについての記事を公開しています。よろしければ読者登録もしくはTwitterアカウントのフォローをしていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

- 作者: ほぼ日刊イトイ新聞,100%ORANGE
- 出版社/メーカー: 株式会社ほぼ日
- 発売日: 2019/07/30
- メディア: 新書
- この商品を含むブログを見る

新装版 ほぼ日の就職論。「はたらきたい。」 (ほぼ日ブックス)
- 作者: ほぼ日刊イトイ新聞
- 出版社/メーカー: ほぼ日
- 発売日: 2013/06/05
- メディア: Kindle版
- この商品を含むブログ (2件) を見る

- 出版社/メーカー: 任天堂
- 発売日: 2017/03/03
- メディア: Video Game
- この商品を含むブログ (37件) を見る

- 出版社/メーカー: 任天堂
- 発売日: 2019/06/27
- メディア: Video Game
- この商品を含むブログを見る
【Python】トークンなどの認証情報は環境変数で管理しよう

こんにちは!
タダケン(@tadaken3)です。
今回はPythonのプログラムを書く際のちょっとした小ネタをご紹介します。 認証情報などうっかり外部に漏らしてしまうと大事になる情報を安全に取り扱う方法を解説します。
WEB APIを利用するときに認証情報をコードに記述していると、、、
WEB APIを利用をするプログラミングを作る場合、トークンなどの認証情報をコード内に記述する場合があるかと思います。
例えば、このようにGETリクエストをしてWEB APIを利用するケースです。
import requests url = 'www.samlple.co.jp/api/v1' #ダミーのURLです。 token = 'hogehogehogehoge' headers = { 'SampleToken': token } requests.get(url, headers=headers)
自分ひとりで使う場合はとくに問題なさそうです。
ですが、コード内に認証情報が埋め込まれているため、他人に共有する際に、そのまま認証情報を公開してしまうということが考えらます。(ボクも社内のWikiにコードを公開した際に、うっかり認証情報を載せてしまったことがありました、、、)
社内の場合は、それほど大きな問題にはならないですが、もしインターネット上に公開した場合、最悪アカウントが乗っ取られて悪用されるケースもあります。とくにGithubにコードをアップするときなどは要注意です。
Amazon Web Serviceのインスタンスが乗っ取られて190万円の請求がきたというような事例もあります。1
認証情報を環境変数で管理する
そのために認証情報はプログラム上に直接書かずに、読取専用のファイルなどでしっかり管理するのが安全です。
ただ、ちょっとしたコードを作るために、毎回認証情報用のファイルを作ったりするのもめんどうなので、認証情報をOSの環境変数に保存するという方法があります。
環境変数(かんきょうへんすう)はOSが提供するデータ共有機能の一つ。OS上で動作するタ>スク(プロセス)がデータを共有するための仕組みである。 環境変数 - Wikipedia
環境変数にトークンなどを保存しておき、コードを実行する際に必要な場合は、それらを呼び出して使います。
Pythonの場合、標準のosモジュールで環境変数を設定できます。
“SAMPLE_API_TOKEN"という環境変数に"hogehogehogehoge"というトークンを保存する例です。
import os # 環境変数を設定する os.environ["SAMPLE_API_TOKEN"] = "hogehogehogehoge"
環境変数は一度設定すれば、それ以降は永続的に使えます。
環境変数を読みこむには以下のように記述します。
import os # 環境変数を読み込む token = os.environ["SAMPLE_API_TOKEN"] #もしくは token = os.environ.get("SAMPLE_API_TOKEN")
一番最初に載せたサンプルのコードを書き換えるとこのようになります。
import os import requests url = 'www.samlple.co.jp/api/v1' #ダミーのURLです。 token = os.environ["SAMPLE_API_TOKEN"] headers = { 'SampleToken': token } requests.get(url, headers=headers)
まとめ
これで他人にコードを共有する際も認証情報は公開せずに管理できます。ちょっとしたことなのですが、うっかりやってしまいがちなので、セキュリティ的に認証情報は環境変数で管理することをオススメします。
読者登録をお願いします
本ブログではプログラミングについての記事を公開しています。よろしければ読者登録していただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/22
- メディア: 単行本
- この商品を含むブログ (1件) を見る
-
リンク先のケースでは、不正に利用されたため無事に請求が免除されたようです。↩
プログラミングを習得するには、とにかく写経することがオススメ

こんにちは。
タダケン(@tadaken3)です。
プログラミングを学習する方法は、たくさんあります。入門書、プログラミングのスクール、オンラインでの学習サイト、プログラミングの入門動画などなど。たくさんの方法があってどれが効果的なのか迷ってしまいますよね。
そんなあなたに取って置きの方法をお伝えします。それは写経です。ボクはプログラミングを習得するには「写経」が一番いいと考えています。
とにかく書き写す
プログラミングをはじめて学ぶ方は、まずはサンプルコードをひたすら書き写すのがオススメです。プログラミングは「言語」なので、習得するにはどうしても書いて覚える必要があります。言語なので書けば書くほどうまくなるというのが持論です。
書いているうちにその言語の特徴や文法が体に染み付いてきますし、「書いて動かす」を繰り返すことでプログラミングの勘所みたいなものが養われます。とくにプログラミング初心者にわからなくても書いて覚える写経が効果的です。
書くことでわからないところが明確になる
最初はサンプルプログラムの意味がわからないかもしれません。ですが、それは初めて学ぶことなので当たり前です。本をサラッと一回読んだだけで理解できるのであれば、誰も苦労はしないでしょう。
意味がわからないながらも、コードを自分で打ち込んでいきます。サンプルコードを打ち込んだ後、実際動くかどうか試してみます。するとたいていの場合、うまく動かなかったり、エラーコードが表示されます。
でも、決してめげないでください。
エラーメッセージが出ている場合は、エラーメッセージを読んでみましょう。もしわからなければ、Googleで検索してみます。どの辺に間違いがあるか当たりがつくかもしれません。
もしエラーメッセージを見てもわからなければ、打ち込んだコードとサンプルコードをもう一度チェックしてみましょう。以外なところでタイプミスをしていませんか。
また理解していないメソッドやキーワードがあれば、それを覚えておきましょう。今はわからなくてもあとで調べてみて理解できるかもしれません。
そうやって試行錯誤しているうちにプログラムがやっと動くようになりました!おめでとうございます。
きっと本をサラッと読んだだけでは、理解したかどうかもあやふやだったところまで、理解できたのではないでしょうか。
これが写経の効果です。実際に書いて動かすことで、プログラミングは上達します。
「ほんたった」があると写経が捗る
写経をするときは、本をたてておくブックスタンドがあるととても便利です。コレはあるのとないので大きく違うので、プログラミングを始めようと思ったら、まず買っておくべきです。
個人的には、EDISONの「ほんたった」がオススメです。「ほんたった」は折りたたみ式のブックスタンドでカバンに入れて持ち運びができるので、会社・自宅の両方で使えます。気分転換にスタバで写経したりもできます。
折りたたみができる分、通常のブックスタンドよりも若干高めですが、それでも2500円程度です。
「ほんたった」は通常のバインダーに加えて補助バインダーがついてるので、ページがめくりやすいところも気に入っています。

- 出版社/メーカー: 株式会社エジソン
- メディア: オフィス用品
- 購入: 10人 クリック: 101回
- この商品を含むブログ (6件) を見る
まとめ
写経は泥臭い方法かもしれませんが、プログラミングを習得するに、より確実な方法です。1日5分でいいので、プログラミングの写経を始めてみませんか。きっと効果が実感できるはずです。
読者登録をお願いします
本ブログではプログラミングについての記事を公開しています。よろしければ読者登録していただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。
はてなブログにコマンド一発で投稿するPythonスクリプトを作ってみた
こんにちは。
タダケン(@tadaken3)です。
はてなブログへの投稿を少しでも便利にしたいと思い、テキストファイルをはてなブログに投稿するPythonスクリプトを作成しました。使い方をご紹介します。
はてなブログは、はてなブログAtomPubというAPIを公開しています。認証形式はOauth2、WSSE、BASICに対応しています。今回のスクリプトではWSSE認証で、ブログの投稿を行っています。1
はてなブログ投稿スクリプトの使い方
事前準備
以下の環境で動作することを確認しています。Python3のスクリプトです。
- python: 3++
- system: mac OS X, windows 7
まずスクリプトをGitHubからDLします。
$git clone https://github.com/tadaken3/hatenablog_post.git
もしくはGithubのページにアクセスして、「Clone or download」ボタンを押してダウンロードします。
依存関係のあるPythonライブラリはrequestsとchardetです。requestsはHTTPライブラリ、chardetはファイルの文字コードを調べるのに利用しています。pipでインストールしましょう。
$pip install requests $pip install chardet
次に認証情報をスクリプトに埋め込みます。hatenablog_post.pyファイルの以下の部分を変更します。
username = 'username' api_key = 'API key' blogname = 'yourblogname.hatenablog.com'
usernameは、はてなのIDです。api_keyとblognameは、はてなブログの管理画面から「設定>>詳細設定」で確認することができます。AtomPubの欄に記載があります。例えば、このブログの場合は「tadaken3.hatenablog.jp」です。2

これで準備がオッケーです。
ブログを投稿してみる
hatenablog_post.pyと同じディレクトリにブログ原稿を保存します。ファイルの1行目がタイトル、2行目以降が本文になります。例えばblog.mdというファイルを作ってブログタイトルと原稿本文を書いて保存してみましょう。
作成したファイルを引数にとって、スクリプトを実行します。
$ python hatenablog_post.py blog.md
うまくいくとブログに下書きに記事が反映されます。ブラウザではてなブログにアクセスして確認してみてください。

まとめ
cotEditorという軽量のテキストエディタを使用して、ブログ原稿を書いてます。cotEditorはPythonスクリプトで機能を拡張できるようだったので、今回のスクリプトを作成しました。自分がラクをしたいので。3
今回はテキストのみですが、いずれは画像も含めて一発で投稿できるようにしたいと思っています。
参考サイト

- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/22
- メディア: 単行本
- この商品を含むブログ (2件) を見る
いまこそプログラミングを学んで自由を手に入れよう。
こんにちは。
タダケン(@tadaken3)です。
ボクはもともと経理部出身だったのですが、独学でプログラミングを勉強して、現在はデータアナリストとして仕事をしています。
プログラミングを学んだことで、ボクは人生は大きく変わりました。プログラミングは自由を手に入れる切符です。プログラミングを学ぶ人が増えるといいなと思い、この記事を書きました。
- プログラミングは時間を生み出すスキルである
- 自分のやっている仕事をひとつ自動化してみる
- 勉強することはたくさんある。それを乗り越えるメリットもたくさんある
- あなたが今持っているスキルと組み合わせれば鬼に金棒
- 読者登録をお願いします
プログラミングは時間を生み出すスキルである
プログラミングは、英語や簿記といったスキルとくらべて、特徴的なところがあります。それはプログラミング自体が時間を生み出すスキルであることです。
プログラミングを学ぶと、様々なタスクをPCにやってもらうことができます。しかも、人間が手作業で行うより、PCは高速かつ正確にタスクを処理します。手作業だと半日かかっていた集計作業が、プログラミングを学ぶことでたったの5秒で終わるといったことも珍しくありません。
もちろんプログラムを作成するのに時間がかかりますが、一度作ってしまえば、その後も集計作業は自動で処理できます。空いた時間にさらにプログラミングの技術を高めていけば、より高度なこともプログラミングできるようになります。こなせるタスクは増える一方で、それにかかる時間は減っていくという減少が発生します。
プログラミングを学ぶ→時間ができる→さらにプログラミングを学ぶ→さらに時間ができる
というサイクルが回り始めます。プログラミングを学ぶことで時間の複利効果の恩恵をうけることができるのです。
自分のやっている仕事をひとつ自動化してみる
プログラミングを学ぶ上でよくある悩みが、基本的な文法な内容を学んだあと何を作っていいのかわからないという悩みです。
まずは自分のやっている仕事をひとつ自動化するプログラムを作ってみることをおすすめします。いきなりすべてを自動化することは難し位と思いますので、ほんの少しのタスクを自動化することを考えてみるといい勉強になります。
また、プログラミング言語にはC、Java、Ruby、Python、Javascriptなどたくさんの言語があります。たくさんありすぎて迷ってしまいますね。ですが、仕事を自動化するためには何を勉強すればいいのかという観点であればおのずと学ぶべきことが見えてきます。
例えば、
- あなたが営業や事務職であれば、Evcelを自動化してみるためにVBAを学ぶ
- あなたがデザイナーであれば、Illustratorを自動化するためにJavascriptを学ぶ
などの方法があります。
勉強することはたくさんある。それを乗り越えるメリットもたくさんある
プログラミングを学ぶ始めると、学ぶべきことがたくさんがあるなと感じます。
基本的なインターネット通信の基本的な仕組み、OSの成り立ち、コードのバージョンを管理する方法といったことやきれいなコードを書く方法や実用に耐える設計手法、ソフトをテストする方法などあげればキリがありません。
ボク自身もまだまだ勉強中ですし、新たに学ぶ分野で「入門書を買ってきて、本に書かれているとおりにススメてみたけどうまく動かない」といったことはしょっちゅうあります。
ですが、わからないことをググったりしながら、エラーコードと悪闘しながら、少しずつできることを増やしています。スキルを身につけると達成感があり、もっとプログラミングについて勉強したいと思うようになりました。
学習することはたくさんありますが、それを乗り越えることでできることがどんどん増えていくというのは、ものすごい充実感があります。まるでモンハンでどんどんと強いモンスターを倒す感覚です。
あなたが今持っているスキルと組み合わせれば鬼に金棒
あなたはセールスマンでしょうか❔それともデザイナー?銀行員でしょうか?
であれば、プログラミングを学ぶことは大きなチャンスです。プログラミングを学ぶことでスキルの掛け算が発生します。 プログラミングだけが得意なエンジニアはたくさんいますが、スキルを組み合わせることで、あなたの市場価値を一気に高めることができます。
- マーケティング☓プログラミング
- デザインセンス☓プログラミング
- 金融知識☓プログラミング
また、あなたが今持っている知識を活かして、WEBサービスやアプリを作ることができるかもしれません。自分でWEBサービスを作って生活していければ、会社をやめて独立することだって可能です。
クラウド会計ソフトのfreeeを立ち上げた佐々木さんはエンジニア経験のなマーケッターだったのは、ボクを勇気づけてくれました。
読者登録をお願いします
本ブログではプログラミングについての記事を公開しています。よろしければ読者登録していただけると更新の励みになります。ぜひ一緒にプログラミングを学んで自由を手に入れましょう。

- 作者: 柴田淳
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/12/22
- メディア: 単行本
- この商品を含むブログ (2件) を見る

Google Apps Scriptでfreeeの取引データを取得してスプレッドシートに保存する方法
こんにちは。
タダケン(@tadaken3)です。
前回は、freeeのAPIを利用するためにOauth2認証にそって、アクセストークンを取得する方法を解説しました。
今回は、取得したアクセストークンを利用して、freeeの取引データをAPI経由で取得して、スプレッドシートに書き出してみます。アクセストークンさえ取得できれば、あとは簡単です。1
前回のおさらい
前回はアクセストークンを取得して、取得したアクセストークンを使って事業所のデータを取得し、ログに出力するところまで解説しました。
簡単におさらいしておくと
- alertAuthメソッドでfreeeの認証をおこなう
- getCompanyIdで認証後に取得したアクセストークンを利用し、事業所のデータを取得
という流れです。前回のコードはこちら。
//先程取得したAppID・Sceretを入力 var appId = "あなたのApp id"; var secret = "あなたのシークレット"; // 認証のエンドポイントとなるダイアログを表示します。 function alertAuth() { var service = getService(); var authorizationUrl = service.getAuthorizationUrl(); var template = HtmlService.createTemplate( '<a href="<?= authorizationUrl ?>" target="_blank">認証</a>. ' + '認証が完了したら再度操作を行ってください。'); template.authorizationUrl = authorizationUrl; var page = template.evaluate(); SpreadsheetApp.getUi().showModalDialog(page, "認証が必要です"); Logger.log("認証が切れています"); } //freeeAPIのサービスを取得 function getService() { return OAuth2.createService('freee') .setAuthorizationBaseUrl('https://secure.freee.co.jp/oauth/authorize') .setTokenUrl('https://api.freee.co.jp/oauth/token') .setClientId(appId) .setClientSecret(secret) .setCallbackFunction('authCallback') .setPropertyStore(PropertiesService.getUserProperties()) } //認証コールバック function authCallback(request) { var service = getService(); var isAuthorized = service.handleCallback(request); if (isAuthorized) { return HtmlService.createHtmlOutput('認証に成功しました。タブを閉じてください。'); } else { return HtmlService.createHtmlOutput('認証に失敗しました。タブを閉じてください。'); } } //認証後、取得したアクセストークンを元にfreeeAPIからカンパニーIDを取得する function getCompanyId() { var freeeApp = getService(); var token = freeeApp.getAccessToken(); var options = { "method" : "get", "headers" : {"Authorization" : "Bearer "+ token} }; var res = UrlFetchApp.fetch("https://api.freee.co.jp/api/1/companies",options); Logger.log(res) }
以下はレスポンスの例になります。ログにこのようなデータが出力されているはずです。
{ "company" : { "id" : 1, "name" : "freee事務所", "name_kana" : "フリージムショ", "display_name" : "freee事務所", "role" : "admin", "account_items" : [ ... ], "taxes" : [ ... ], "items" : [ ... ], "partners" : [ ... ] } }
事業所のデータからカンパニーIDを取得する
次に、この事業所のデータからカンパニーIDを取り出します。カンパニーIDはfreeeの事業所識別するIDです。取引データを取得・追加するときに必要になってきます。2
JSON形式で保存されているので、getCompanyIdメソッドを以下のように書き換えます。
APIの詳細は以下もご覧ください。
function fetchFreee(url) { var freeeApp = getService(); var token = freeeApp.getAccessToken(); var options = { "method" : "get", "headers" : {"Authorization" : "Bearer "+ token} }; var json = UrlFetchApp.fetch(url,options).getContentText(); var jsonData = JSON.parse(json); return jsonData } function getCompanyId() { var jsonData = fetchFreee("https://api.freee.co.jp/api/1/companies") var companyId = jsonData['companies']['0']['id']; return companyId }
データを取得するたびにfreeeのAPIにアクセスするため、処理を抽象化して、fetchFreeeメソッドを追加しています。fetchFreeeはエンドポイントとなるURLを渡すことでJSONを返します。
取引一覧のデータを取得する
freeeでは、取引という概念で収入と支出を管理しています。発生日、支払期日、金額、支払残額、収入か支出か、決済口座などの情報が取引データを見るとわかります。
取引の一覧を取得すること、スプレッドシート上で収支の分析ができるようなります。
取引のAPIに関する情報はこちらをご覧ください。
今回は試しに取引発生日、収支のタイプ、金額、備考欄を取得してみます。 JSONがネストしているので注意してください。また、今後スプレッドシートでやり取りしやすいように二次元配列で値を返すようにしています。
function getSalesData() { var companyId = getCompanyId(); var dealsData = fetchFreee("https://api.freee.co.jp/api/1/deals?company_id=" + companyId); //deals var dataCnt = dealsData["deals"].length; var arr = []; for(var i=0; i<dataCnt; i++){ var issue_data = dealsData["deals"][i]["issue_date"] var type = dealsData["deals"][i]["type"] var amount = dealsData["deals"][i]["amount"] var description = dealsData["deals"][i]["details"][0]["description"] arr.push([issue_data, type, amount, description]) } return arr }
取得したデータをスプレッドシートに書き出す
最後に取得したデータをスプレッドシートに書き出すメソッドを追加します。dataというシートを事前に作成しておいてください。実行すると取得したfreeeの取引のデータが出力されます。
//detaというシートに取得したデータを書き出す。 function setDataToSheet(){ var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('data'); var arr = getSalesData() var lastRow = arr.length; var column = arr[0].length; Logger.log(arr) sheet.getRange(2,1,lastRow,column).setValues(arr); }
ちょっと長くなってしまったので、すべてまとめたものはGistにおいておきます。
まとめ
今回はfreeeのAPIを使って
- カンパニーIDを取得
- 取引一覧のデータを取得
- 取得したデータをスプレッドシートに書き出す
上記の3つをおこなう方法を解説しました。freee自体で様々な指標を確認することはできるのですが、スプレッドシートに書き出すことで、自分自身で経営分析をいろいろな観点でできるようになります。
このブログについて
副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも) 読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。
スプラトゥーン2がさらに楽しくなるイカしたWebサービスとかを集めてみた

こんにちは!
ケッチャプが好きなタダケン(@tadaken3)です。
「スプラトゥーン2」が楽しすぎて、生産性がガタ落ちの毎日です。 お察しください。
スプラトゥーン2は7月21日に発売され、発売日3日で67万本を販売したニンテンドースイッチの大人気ゲームです。 ニンテンドースイッチ本体が120万台の販売台数だそうで、装着率はなんと55%。 ニンテンドスイッチユーザーのふたりにひとりがスプラトゥーン2を遊んでいる計算になります。
今回はスプラトゥーン2関連のイカしたWEBサービスをまとめました。1
ブキとギア構成を探せる「イカクロ」
「イカクロ」はスミ・ソニアンさんが公開しているスプラトゥーン2のギア構成の投稿&検索サイトです。
ブキ毎に人気のギア構成を調べることができます。自分の使っているブキでは、流行りのギア構成をチェックしてみるといいかもですね。 ちなみにボクはヒッセン・スプラマニューバをメインで使っています。
スプラユーザーを探せる「イカナカマ2」
スプラトゥーンの交流サービス「イカナカマ2 」です。Twitterアカウントで、スプラトゥーン2の仲間を見つけたり、チームを作って交流することができます。 前作のスプラトゥーンに引き続き、スプラトゥーン2にも対応されています。中の人はナカノイカ2さん。
スプラトゥーン2はリーグマッチやローカルプレイなど、みんなで遊ぶモードもより強化されてますので、イカナカマ2でイカしたナカマを見つけれると、スプラトゥーン2がより楽しめること請け合いです。
関東の企業が集まって対戦する「Splathon」
WEBサービスではありませんが、関東近郊の企業が集まって、企業対抗のスプラトゥーン大会「Splathon」が開催されています。 主催はデジタルコンサルティング・インターネットメディア事業をおこなっているspeeeです。 参加企業にはドワンゴ、CyberAgent、博報堂、シャープ、スクウェア・エニックスなど挙がっておりそうそうたるメンツです。
過去のSplathonの様子はこちら。楽しそうです。
ぜひ参加してみたいです。
Switchの在庫状況を通知する「nintendo-switch-checker」
ニンテンドースイッチはスプラトゥーン2の人気も相まって、品薄でなかなか手に入らない状況です。 スプラトゥーン2を遊びたいんだけど、ニンテンドースイッチ本体を手に入れるのに苦労しているあなた。 「nintendo-switch-checker」を使ってみてはいかがでしょうか。
nintendo-switch-checkerはニンテンドーSwitchの在庫状況を通知してくれるGolangで書かれたアプリです。 作者ははやぶささん。
仕組みは、Google App Engine上で動かして、ニンテンドーストア、各家電サイトをクロールして、在庫情報を通知してくれるというものです。 通知はSlackとLINE Notifyに対応している模様。
まだSwitchをゲットできてない方はこちらを活用してみると、Switchがゲットできるかもしれません。
まとめ
スプラトゥーン2はまだまだ始まったばかり。アップデートは1年間。フェスは2年間にわたり開催予定と公式に発表されています。 イカしたWEBサービスを活用して、スプラトゥーン2をよりエンジョイできるといいですね。
ボクはガチマッチのウデマエS+を目指して頑張りたいと思います!
今回の記事はいかがでしたか?
副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも) 読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。

- 作者: 電撃ゲーム書籍編集部
- 出版社/メーカー: KADOKAWA
- 発売日: 2017/08/04
- メディア: 単行本
- この商品を含むブログを見る
-
ご紹介しているサービスは、すべて非公式のものになります。任天堂株式会社とは一切関係のないサービスです。↩
Google Apps Scriptでfreee APIのアクセストークンを取得する

こんにちは!
タダケン(@tadaken3)です。
前回はクラウド会計ソフトfreeeの概要とプログラマにfreeeをオススメする理由をご説明しました。 freeeはクラウド会計ソフトの中でもっともAPIが充実しているのがオススメの理由でした。
今回は実際に、Google Apps ScriptでfreeeのAPIを利用する方法をお伝えします。今回は最初の一歩としてAPIを操作するために必要なアクセストークンの取得方法を解説します。
freeeのAPIを利用するには、法人プランの場合、ライト、ビジネス、エンタープライズ。個人プランの場合はスターター、スタンダード、プレミアムのいずれかを利用している必要があります。
- freeeのAPIを利用するには
- Google Apps ScriptでOauth2ライブラリを利用する
- freeeにアプリの登録をする
- Google Apps Scriptをスプレッドシートに作成する
- Google Apps Scriptを動かしてみる
- まとめ
- 今回の記事はいかがでしたか?
freeeのAPIを利用するには
freeeのAPIはOAuth2.0というプロトコルに対応しています。オーオースと読みます。GoogleスプレッドシートからfreeeのAPIを利用するには、Google Apps Scriptを利用します。Google Apps ScriptでOAuth2.0の形式にのっとって、アクセストークンの発行を行ないます。
本記事ではOAuth2.0自体の詳しい説明はしませんが、ご興味がある方は以下の記事が参考になります。
Google Apps ScriptでOauth2ライブラリを利用する
Google Apps ScriptでOauth2を利用するには、「apps-script-oauth2」ライブラリを利用します。 「apps-script-oauth2」はGoogleのエンジニアが作成したライブラリです。
https://github.com/googlesamples/apps-script-oauth2
ライブラリを利用するには、ツールバーの[リソース]->[ライブラリ]を選択して以下のIDを入力します。

最新のバージョンを選択して保存してください。本記事執筆時点ではバージョン21が最新です。
また、freee側にGoogle Apps Scriptをアプリとして登録する必要があります。その際にスクリプトIDが必要になるのでメモをしておきます。
スクリプトIDはスクリプトエディターのツールーバーの[ファイル]->[プロジェクトのプロパティ]から確認できます。

freeeにアプリの登録をする
freee APIを利用するアプリケーションをfreeeのWEBサイトから登録します。
登録により、アプリケーションのIDとSecretが発行されます。登録するためには会計freeeにログイン後、以下のサイトにアクセスします。
https://secure.freee.co.jp/oauth/applications
アプリケーション名、コールバックURIを入力し保存します。(入力内容は登録後にも編集できます)
アプリケーション名はお好きな名前を入力ください。サンプルでは「スプレッドシート」としています。
コールバックURIは先程取得したスクリプトIDを利用します。スクリプトIDの部分を変更して以下のURLを登録します。

保存を押すと登録が完了し、App IDとSecretが発行されました。こちらをメモしておきます。これで準備はすべてが整いました。

Google Apps Scriptをスプレッドシートに作成する
実際のスプレッドシートで動かすGoogle Apps Scriptのコードを作成していきます。以下のコードをスプレッドシートのスクリプトエディタに入力します。
//先程取得したAppID・Sceretを入力 var appId = "あなたのApp id"; var secret = "あなたのシークレット"; // 認証のエンドポイントとなるダイアログを表示します。 function alertAuth() { var service = getService(); var authorizationUrl = service.getAuthorizationUrl(); var template = HtmlService.createTemplate( '<a href="<?= authorizationUrl ?>" target="_blank">認証</a>. ' + '認証が完了したら再度操作を行ってください。'); template.authorizationUrl = authorizationUrl; var page = template.evaluate(); SpreadsheetApp.getUi().showModalDialog(page, "認証が必要です"); Logger.log("認証が切れています"); } //freeeAPIのサービスを取得 function getService() { return OAuth2.createService('freee') .setAuthorizationBaseUrl('https://secure.freee.co.jp/oauth/authorize') .setTokenUrl('https://api.freee.co.jp/oauth/token') .setClientId(appId) .setClientSecret(secret) .setCallbackFunction('authCallback') .setPropertyStore(PropertiesService.getUserProperties()) } //認証コールバック function authCallback(request) { var service = getService(); var isAuthorized = service.handleCallback(request); if (isAuthorized) { return HtmlService.createHtmlOutput('認証に成功しました。タブを閉じてください。'); } else { return HtmlService.createHtmlOutput('認証に失敗しました。タブを閉じてください。'); } } //認証後、取得したアクセストークンを元にfreeeAPIからカンパニーIDを取得する function getCompanyId() { var freeeApp = getService(); var token = freeeApp.getAccessToken(); var options = { "method" : "get", "headers" : {"Authorization" : "Bearer "+ token} }; var res = UrlFetchApp.fetch("https://api.freee.co.jp/api/1/companies",options); Logger.log(res) }
Google Apps Scriptを動かしてみる
まずはalertAuthメソッドで認証をおこないます。alertAuthメソッドを実行するとスプレッドシートに画像にあるダイアログが出てきます。「認証」をクリックし、そのままfreeeのアカウントで許可をしてください。

許可するとアクセストークンが取得できるので、取得したアクセストークンを使ってfreeeのAPIを操作します。 サービスオブジェクトに対して、getAccessTokenメソッドを実行することでトークンが取得できます。
var token = freeeApp.getAccessToken();
サンプルでは取得したトークンをもとにAPI経由でカンパニーIDを取得しています。 getCompanyIdメソッドを実行するとカンパニーIDがログに出力されます。
まとめ
今回は、Google Apps Scriptでfreeeのアクセストークンを取得する方法をお伝えしました。 まとめると
- Oauth2ライブラリの利用方法
- freeeのアプリ登録方法
- Google Apps Scriptでのアクセストークン取得方法
になります。
これでGoogle Apps Scriptでfreee APIを操作する準備が整いました。次回もGoogle Apps ScriptでfreeeのAPIを操作するテクニックをお伝えしていきますね。どうぞ、お楽しみに!
今回の記事はいかがでしたか?
副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも) 読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。
フリーランスエンジニアにオススメの会計ソフト「Freee」で決まり!
こんにちは。
タダケン(@tadaken3)です。
クラウド会計ソフトはフリーランスや副業をしている方にとっても強い味方です。今回はクラウド会計ソフトの概要とオススメのサービスについてまとめました。
クラウド会計を利用して経理・決算業務をラクしちゃいましょう!
クラウド会計ソフトとは?
フリーランスや副業をする上で避けては通れない経理作業と確定申告。私たち日本人には納税の義務が課せられていますから、所得があるならば納税をしなければいけません。
事業に関係する日々出ていくお金と入ってくるお金を、会計的なルールに則って全て記録しておく必要があります。
そして年が明けますと年末までの記録を元にあれこれ計算をして確定申告書類を作成して税務署に提出をします。これが結構、大仕事です、
本来の仕事で忙しいのに、皆さんのための協力な味方がクラウド会計ソフトです。クラウド会計ソフトを使えば、煩雑な経理・確定申告業務が大幅に効率化できます。
クラウド会計ソフトのメリット
クラウド会計ソフトのメリットを具体的にご紹介します。
OS、端末を選ばない
従来型インストール型の会計ソフトの多くはWindowsにしか対応してなかったりします。ただエンジニア・デザイナーとして仕事している方のMacを使っている方も多いと思います。
一方でクラウド会計ソフトはネット上のサービスですので、OSや端末を選びません。ブラウザさえ使えれば、Windows以外のPCやタブレットなどからも利用することができます。
ネットバンクやクレジットカードのデータを自動で取得できる
ネットバンクやクレジットカードのデータを自動で取り込むことができます。細かい設定などは必要ですが、最初に登録しておけば、多くの取引を自動で処理することができます。
税法改正などにあわせて常に最新のバージョンが利用できる
従来型のインストール会計ソフトですと税法の快晴などに合わせて、最新版を購入し直さなければなりません。バージョンアップするたびに費用がかかります。平成31年10月には消費税法改正(8%→10%)も控えています。しかし、クラウド会計ソフトの場合は、月額またな年額の課金制ですので、常に最新版が利用できます。これは大きな魅力です。
クラウド会計ソフトはたくさんあるけど、結局どれがいいの?
「Freee」と「MFクラウド会計」「やよい会計オンライン」など多くの種類があります。とくに有名なのはクラウド会計ソフトの元祖「Freee」とマネーフォワードが提供する「MFクラウド会計」の2つです。「Freee」と「MFクラウド会計」を比較している記事はネット上でもたくさん見つかります。基本料金、使いやすさ、サポートの充実度を比較されています。
ただ、もしあなたが「プログラミングができる」もしくは「プログラミングに興味がある」というのであれば、ボクは「Freee」を圧倒的にオススメします。
Freeeは圧倒的にAPIが充実している
正直なところ、基本的なサービスは「Freee」も「MFクラウド会計」もそれほど大きな違いはありません。少なくとも経理処理をして、決算をすることは確実にできます。
では、なぜ「Freee」をおすすめするのでしょうか。
それはFreeeはWebAPIが非常に充実しているからです。
APIが充実しているのでプログラミングができれば、経理処理を自動化できます。例えば、エクセルやスプレッドシートで、細かい経費の管理をしているとします。Freeeであれば、VBAやGooogle Apps Scriptを使って、ボタン一発でFreeeに登録することができたりします。今のところ、仕訳データの記録や取得ができるのはFreeeだけです。(MFクラウド会計は請求書のみAPIが提供されています)
ほかにも、日々の売上データを取得してダッシュボードを作成し、経営分析を行なったりすることもできます。
Freeeが提供しているサービス以外の部分も、自動化したり機能を拡張していくことができるのです。開発者コミュニティも用意されていて、わからないことはFreeeの開発者に問い合わせることも可です。
また、APIが充実しているので、今後Freeeのデータを活用したサービスもたくさん生まれてくると予想されます。すでにAIでの経営分析のサービスを提供する会社もでてきました。
まとめ
今回はクラウド会計ソフトの概要とFreeeをなぜオススメするのかについてまとめました。 もし、あなたがエンジニア・デザイナーであれば、クラウド会計ソフトは「Freee」を利用されることを強くオススメします。
またこのブログでGoogle Apps Srciptとスプレッドシートを使って、Freeeを操作するテクニックをまとめていく予定です。
どうぞ、お楽しみに!
今回の記事はいかがでしたか?
副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも)読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。
「新版 ひとり社長の経理の基本」を読めば経費の落とし方から決算・申告まで全部わかる
こんにちは。
タダケン(@tadaken3)です。
「新版 ひとり社長の経理の基本」は名前の通り、ひとり社長・フリーランスの方向けに書かれた経理・決算処理の本です。この本を読めば、経費の落とし方から決算・申告まで一通りすべてがわかります。
経理処理・決算・申告はどんな会社・就業スタイルでも避けては通れないので、一冊手元に置いておくと心強いでしょう。ボクはKindle版を購入し、常に持ち歩けるようにしました。
図解も豊富でとてもわかり易く、他の類書にはない特徴があります。
ITによる経理の効率
本書が他の経理・決算・申告の本と大きく異なるポイントは、日々の経費処理の時間をできるだけ短縮できるようITを徹底的に活用しているところです。 EXCELや会計ソフト、ネットバンクやWEBサービスの具体例が豊富です。
例えば、ネット上で手続きをして、請求書を郵送できる「Misoca」などを具体的なサービス名を上げなら、効率化のテクニックが紹介されており、経費処理の時間を大きく削減できます。Misocaはボクも利用しています。
経理業務の本質は?
本書では、経理処理の時間を削減して経理の本質的なことに時間を割くことが大事であると述べられています。
経理の本質とは何なのでしょうか?
本書の中で「経理」以下のように定義されています。
経理とは、「経営管理」の略称であり、経営の舵取りを手助けするものであり、決して、作業などではありません。
経理は決して単調な作業ではなく、経営の舵取りを手助けするものとしています。経理を理解することで、
- 資金繰りの不安を減らし、早めに対応できる
- 業績管理ができ、経営の次の一手やコスト削減を考えられる
のようなメリットが出てきます。経営分析をする際のポイントも解説されています。
経理の観点からも好きなことを仕事にしよう
本書の中で、こんな一文があります。
好きな仕事をしていれば、好きなものを経費に落とせます。IT好きなひとり社長がいらっしゃるのですが、ITに関する仕事をされ、それに関する経費を落とすことができています(私も好きな分野の本を好きなだけ買っていますし、好きな分野のセミナーにも行っていますし、好きなIT機器を買っています。)
この考え方は節税にもつながりますし、事業を拡大するヒントにもなり、とても素敵な視点だと感じました。
たとえば、著者の井ノ上さんは趣味でトライアスロンをされているのですが、レース出場や機材購入の費用は、仕事とは関係ない趣味なので、もちろん経費にはできません。
しかし、トライアスロンの本を書いた場合は事情が変わります。趣味であったトライアスロンが仕事となり、それらは経費になる可能性があるのです。好きなことを仕事にしたことで、結果、収入の幅が広がり、節税にもつながる。ひとり社長ならではできる事業拡大の手法だなと思いました。
ボクも早速プログラミングやブログ運営に関わる費用は経費として処理するようにしました。
著者の井ノ上さんご自身もひとり社長の税理士さん
著者の井ノ上さんは税理士として、独立されており、井ノ上さんご自身もまさにひとり社長です。井ノ上さんはブログ「EX-IT|雇われない雇わない生き方」の運営もされていて、このブログからの仕事の受注も多いそうです。
ひとり社長の経験がある井ノ上さんだからこそ、ひとり社長・フリーランサーが悩んでいるであろう将来の不安や健康管理についても、井ノ上さんの経験を踏まえて、本書ではズバッと解決策が提示されています。
他にも参考になる考え方や視点が多々あります。IT機器を購入記録なども!
著者の雰囲気が知りたい方はブログをご覧になるのもいいかと思います。
まとめ
経理処理・決算・申告の仕事はどんな会社や就業パターンでも必ず必要であり、経費精算から決算・申告までの経理のパターンはおおよそ決まっています。この本を読んで一度身につければ、長きに渡って使える知識となるはずです。それは副業でも変わりありません。
本書で紹介されている事例がそのまんますべて当てはまるわけではないかもしれませんが、基本的な考え方は副業フリーランサーの方にも通じるところが多いです。
ぜひ、本書を読んで、経理作業を経営管理にギアチェンジしていきましょう!

- 作者: 井ノ上陽一
- 出版社/メーカー: ダイヤモンド社
- 発売日: 2016/08/05
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
今回の記事はいかがでしたか?
副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも)
読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。

『Google流資料作成術』はデータを使ってビジネスを改善したい人の必読書です
こんにちは!
タダケン(@tadaken3)です。
今回はデータ分析に関するとてもためになる本を見つけたのでご紹介します。
本のタイトルは「Google流資料作成術」です。
データ分析の本ではあるのですが、「Excel」や「Googleスプレッドシート」といった表計算ソフトや統計処理の手法は一切載っていません。一体なぜなんでしょうか。それはこの本が「データを使って、いかに人を動かすか」について書かれた本だからです。
ちなみに、原題は「Storytelling with data」です。日本語のタイトルだと、「データ分析」関連の本かどうかわかりにくいですね。ちょっと日本語のタイトルで損している本だと思います。
何のためにデータを分析するのか
普段、本ブログではプログラミングや副業についてのブログを書いているのですが、本業はデータアナリストとして仕事をしています。
突然ですがデータ分析の価値ってなんだと思います?
そもそも何のためにデータを分析するのでしょうか?
- 上司に言われたから?
- データがあるからとりあえず?
- 難しい統計手法を使ってみたいから?今だとディープラーニングとか流行ってますね。
僕はどれも違うと思います。「データ分析から知見を得て、ビジネスや仕事をよりよい方向に改善していく」ことが分析の価値だと考えています。
レポートを作ること自体が目的化してしまって、レポートを作って「はい終わり」とならないよう「データ分析は相手に伝わって、アクションを変えてこそ価値がある」ということは常に意識しています。これはブログも同じですね。(まだまだ完璧にできているわけではないので日々精進です)
とはいえ、データやグラフに苦手意識を持っている人も少なくないのが事実です。僕も、データ分析はしたけど、結果につながらないことも多々経験しました。
データ分析の中には、データを美しく可視化するデータビジュアライゼーションという分野もあり、データ可視化専用のソフトまであったりします。グラフをただ美しくオシャレにすればいいわけではなく、やはり伝えることが重要であることはかわりありません。
データからアクションにつなげる。相手にわかってもらう資料を作る
この本で書かれているのは、データやグラフに対して苦手意識がある人にも抵抗なく、データで伝えたいことを理解してもらえうにはどうすべきかという一点です。この一点を達成するためのテクニックが、これでもかと紹介されています。
いかに読み手の負担を減らすか、一瞬でわかってもらえるにはどうすればいいのか、そのことを突き詰めた考えが載っていてとても参考になります。
本を読む前の資料
ひとつ例を紹介します。顧客セグメントの分布のデータがあるとします。普通に作るとこういう感じの資料になるのではないでしょうか。

これはこれで特に違和感はないのですが、突き詰めて考えると、このデータで言いたいことは、「自社の顧客はセグメントC・D・Eが50%を占める」に集約されるのではないでしょうか。
本を読んだ後の資料
そこで本で紹介されているエッセンスを応用して、グラフを作り直すとこうなります。

いかがでしょうか。どちらのグラフもExcelで作成しているのですが、本の内容を参考にしたグラフのほうが、だいぶわかりやすくいと感じられるのではないでしょうか。
この本のエッセンスを学べば、今あげた例のように「あなたの上司に一瞬で理解してもらえるレポート」を作れるようになります。具体的な内容については、ぜひ本を手にとって確認してみてください!
まとめ
この本にかかれているのは
- データによって何を伝えたいのかきちんと考える
- データからわかったことをわかりやすく伝えるにはどうすればいいのか
です。言われてみれば当たり前のことになります。ただ当たり前のことですが、筆者はものすごい熱量で考えていますし、それが著書からひしひしと伝わってきます。
筆者は5年間Googleに在籍し、「ビジュアライゼーション」の講座を担当していた方で、「ひどいパワーポイントを世界からなくすために」この本を書いたそうです。
本書を読めば、きっと資料作成のレベルが一段アップすること間違えないです。そして、きっと資料作りが楽しくなります。ぜひ、お手にとって読んでみてください!

- 作者: コール・ヌッスバウマー・ナフリック,村井瑞枝
- 出版社/メーカー: 日本実業出版社
- 発売日: 2017/02/16
- メディア: 単行本
- この商品を含むブログを見る
この書評を見て、THE GUILDのAndoさんもコメント
2018年9月29日に追記
こちらのレビューを書かれた @tadaken3 さんに教えていただきました。🙏
— Go Ando / THE GUILD (@goando) 2018年5月5日
『Google流資料作成術』はデータを使ってビジネスを改善したい人の必読書です https://t.co/VTHLHJUdQ2
最後に少しお願いです。
ここまで読んでいただきありがとうございます。
最後にあなたに少しお願いがあります。この記事が少しでも役に立った、気付きがあったという方は、ぜひこの記事をTwitterにシェアしていただきたいです。
はてなブックマークをしていただく形でも大丈夫です。コメント付きだと、もっと嬉しいです。
ぜひ、よろしくお願いいたします。
Javascriptで作るMacアプリ!JXA入門編
こんにちは!
タダケン(@tadaken3)です。
Macユーザーのあなたに業務効率化のテクニックをお伝えします。Mac OSはYosemite以降であれば、なんとjavascriptでMacの自動操作ができるんです。通称JXA(javascriprt for Automition)といいます。今回はJavascriptでMacを操作するJXAをご紹介します。JXAは簡単なMacアプリも作れてしまいます。
JXAで何ができるの?
具体的にJXAでどんなことができるのでしょうか。例えば以下の様なことができます。
- MailやiTunesなどMac標準のアプリを操作
- ファイルやFinderの操作やMac自体の設定変更
- EvernoteやChrome、Adobe PhotoshopなどApple以外のアプリも操作可能
複数のアプリを組み合わせて、ちょっとした作業を自動化する自分だけのアプリが作れるのです。例えば、ある画像ファイルをMailとEvernote両方に保存するアプリやiTunesのタイマー起動するアプリなどが作れます。基本はjavascriptなので、学習コストが低いこともメリットです。デザイナーの方でもjavascriptなら普段のWEB制作でも触れることは多いと思いますので、応用できますね!
JXAでアプリを作ってみよう
ではさっそくJXAでアプリを作っていきましょう。JXAを使うには「スクリプトエディタ」を使います。「Lancepad」の中の「その他」を開いてください。

その他を開くと中に「スクリプトエディタ」があります。スクリプトエディタを立ち上げてみましょう。

スクリプトエディタが立ち上がりましたね。
早速JXAを書いていきましょう!と言いたいところなんですが、ひとつ注意があります
スクリプトエディタでは、JXAの他にAppleScriptを書くことができます。Macの自動操作はもともとAppleScriptが標準だったのですが、Yosemite以降Javascriptにも対応し、JXAが使えるようになりました。両方に対応しているため、どちらのスクリプトを書いているのか明示する必要があります。
といってもとても簡単です。メニューバーの左上の部分を「javascript」に変更するだけです。

これで準備はオッケーです。早速スクリプトを書いて、アプリを作っていきましょう。
Macに入っているアプリを呼び出すには以下のように書きます。
Macのシステムイベントを呼び出して、ダイアログにメッセージを表示させてみましょう。
//Macのシステムイベントを呼び出す var sys = Application("System Events"); //StandardAdditionsという命令の集合があります。 //displayDialogがStandardAdditionsに含まれているため、機能をオンにします。 //最初はおまじないみたいなものと思ってください sys.includeStandardAdditions = true; //ディスプレイにダイアログを表示させる命令です。 sys.displayDialog("君はすごいフレンズなんだね");
できましたでしょうか。アプリとして保存するには、保存時にファイルフォーマットを「アプリケーション」に変更します。デスクトップにHello.appと保存してみてください。

ダブルクリックするとアプリが起動して、ダイアログが表示されます。簡単です!

ファイルをドラッグ&ドロップすると定型メールを作成するアプリを作ろう
次は実践的なアプリのサンプルをご紹介します。フリーランスで仕事をしていると定期的に成果物をメールで送信する必要があります。たいした作業ではないのですが、毎日のことなので自動化できるとトータルで結構な作業時間の短縮になります。
ファイルをドラッグ&ドロップしたら、定型的なメールを作成するアプリを作りましょう。
以下のコードをスクリプトエディタに打ち込んでみてください。contentの部分とadressの部分を自分が送りたい相手先に変更してください。
openDocumentsの部分で、ドラッグ&ドロップされたファイルを受け取り、createEmailの部分でメール本文を作成しています。スクリプトの詳細は、次回ご説明しますね。
//openDocumentsでドラッグ&ドロップされたファイルを受け取る function openDocuments(docs) { //件名を今日の日付に設定する var today = new Date(); var month = today.getMonth() + 1; var date = today.getDate(); var subject = month + "月" + date + "日の成果報告"; var content = "tadaken3さん\n\n" + "本日の作業分です、ご確認ください。\n\n"; var address = "tadaken3@hogehoge.com";//宛先のアドレス //件名、アドレス、本文、ファイルをもとにmailを作成する createEmail(subject,address,content,docs); } function createEmail(subject,address,content,docs){ var Mail = Application("Mail");//Mailアプリを呼び出す var msg = Mail.OutgoingMessage({ subject: subject, //タイトル content: content, //本文 visible: true }); Mail.outgoingMessages.push(msg) var rec = Mail.ToRecipient({ address : address // 送信先を指定 }); msg.toRecipients.push(rec); //ファイルを添付する for (d in docs) { var attachment = Mail.Attachment({fileName: docs[d]}); msg.characters.push(attachment); } Mail.activate(); }
先程と同様にアプリケーションとして保存しましょう。アプリ名はautoMailer.appとしました。 デスクトップにアプリができましたね。

作成したアプリに成果物のファイルをドラッグ&ドロップすると、、、

添付ファイル付きのメールが自動で作成されました。確認して送付すればオッケーですね!
まとめ
今回はJXAの最初の一歩として
- スクリプトエディタの使い方
- アプリの作成方法
をお伝えしました。Macユーザーには心強い味方ですね。Javascriptで書けるのもとても魅力的です。次回もJXAの実践的なテクニックについてお伝えしますね。
今回の記事はいかがでしたか?
副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも)
読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。

