タダケンのEnjoy Tech

楽しみながらラクに成果を上げる仕組みを考える

「詳解!Google Apps Script完全入門」を読めばプログラミングを習得できるのか?

f:id:tadaken3:20180325125201p:plain こんにちは!
タダケン(@tadaken3)です。

先日、「ノンプログラマーのためのスキルアップ研究会」を主催されているタカハシさん(@ntakahashi0505)から、「詳解!Google Apps Script完全入門」を献本いただきました。この場を借りてお礼を言わせていだきます。

さて、今回は書籍の内容とGAS本を使ってのおすすめの勉強法をご紹介します。

「詳解!Google Apps Script完全入門」をうまく使えば、プログラミング未経験の方でも、Google Apps Scriptを習得できるのではないかと思います。

Google Apps Scriptとは

まず、「Google Apps Scriptって何?」って方もいらっしゃる方と思いますので、簡単に説明いたします。

Google Apps Script (略称GAS)は、Googleが提供するサーバーサイドのスクリプト言語です。GASを使えば、スプレッドシートやGmail、Googleカレンダーをプログラムで操作することができます。めちゃくちゃ大雑把に言いますと、エクセルのVBA・マクロのようなものです。

例えば、

  • Googleフォームで作ったお問い合わせフォームに自動返信機能を作る
  • スプレッドシートの内容をGoogleカレンダーに一気に登録する
  • 特定の条件に合致したGmailのデータをスプレッドシートに保存して分析する

といったことができます。

GASはVBAよりもできることがむちゃくちゃ多いので、業務の効率化・自動化などにかなり役立ちます。

また、Googleのクラウドサーバー上で実行されるため、自分のPCの電源が入っていなくとも、任意タイミングで実行することもできます。例えば、特定の時間になったら、サーバ上でスクリプトを実行するといったこともできます。

サラッと書いていますが、ちゃんとやろうと思うとサーバーなどを用意したりしないといけないので、けっこう大変だったりします。

待ちに待ったGAS本の発売

そんな便利なGASなのですが、マイナー言語のため日本語の書籍はほとんど存在せず、基本的には公式ドキュメントもしくはネット上の記事を参考にするしかありませんでした。

著者のタカハシさんは「いつも隣にITのお仕事」というブログを運営されています。日夜、「IT×働き方改革」をミッションに掲げ、ITを使って仕事を効率化するためノウハウを公開しています。その中でGASの記事も公開されておりました。

ボク自身はタカハシさんが運営するブログ「いつも隣にITのお仕事」のブログ記事を参考にしながら、四苦八苦してGASを習得しました。

ある程度のプログラミング経験があれば、公式ドキュメントやWEB上の記事からGASを理解することはできるかもしれませんが、プログラミング初心者の場合はさらに大変だと思います。

そこでこの本です。

「詳解!Google Apps Script完全入門」には

  • GASのベースとなっているJavascriptの基本文法
  • クラウドサーバーで実行する上のルールや癖
  • スプレッドシートや、Gmailなどの各サービスを取り扱う上でのポイント

などがまとまっており、この本を読めば、GASの基本的な要素は、網羅できる内容になっております。

ほんとにGASを習得した時の苦労は何だったのか。もっと早く出してくれればよかったのに!と思う内容です。

「詳解!Google Apps Script完全入門」を使ったおすすめの勉強法

「詳解!Google Apps Script完全入門」はとても素晴らしい本なのですが、ひとつ書いてないことがあります。

それは

「何を作れば良いのか」

ということです。

プログラミングを勉強したことがある方はわかるかと思うのですが、基礎的な文法などを理解したあと、悩みどころがあります。

「基本はわかった!ではこのあと、何を作ったらいいのか?」

こういったことに悩んで、プログラミングを挫折してしまうケースが多いように感じますし、自分も昔そうでした。

でも安心してください!著者のタカハシさんが運営する「いつも隣にITのお仕事」には沢山のレシピが公開されています。

こういったレシピを参考に、自分が作りたいものを作りながら、わからないところや自分なりに改良したい部分を本を参考して学習してくのが効率的です。

動くものが作れると学習のモチベーションにつながります。小さいスクリプトでも試しに作ってみると色々と改良したいところが出てきます。

そこで本を読みながら、自分なり改良してみます。最初はちょっとしたものしか作れないかもしれませんが、コツコツ続けていくと、ちょっと大きめのシステムが作れるようなっていきます。

ボクはこのように学習を進めながら、プログラミングを習得してきました。

「詳解!Google Apps Script完全入門」と「いつも隣にITのお仕事」はこうしたプログラミング学習の最初の一歩を踏み出すにはとても最適なコンテンツだと思います。

とくに年末年始はまとまった時間が取れると思いますので、プログラミングを習得するには最適です。ぜひ年末年始は「詳解!Google Apps Script完全入門」を読んで、GASの勉強をしてみてはいかがでしょうか。

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~

読者登録をお願いします!

本ブログでは、Google Apps Scriptやプログラミングに関する記事を公開しています。(ときどき、それ以外のことも)読者登録してもらうと更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

「Digdag」を使って依存関係のあるタスクをコードベースで管理する

f:id:tadaken3:20171219003555p:plain こんにちは!
タダケン(@tadaken3)です。

会社で使っている分析基盤に、Digdagというワークフローエンジンを導入しました。digdagはとても魅力的なツールで、ぜひより多くの人にも使ってほしいなと思い、Digdagの導入方法をまとめてみました。

ところで、ボクはディグダといえば、ポケモンを思い出します。

Digdagとは

Digdagは複雑なタスクを実行するためのTresure Dataが開発したOSSのワークフローエンジンです。

例えば、

  • 外部APIからデータを取得する
  • 取得したデータを成形する
  • データをデータベースにインサートする

みたいな処理を順番に実行したいとします。

cronで実行することもできますが、何らかの理由でAPIからデータ取得に時間がかかったりした場合、その後の処理がエラーとなってしまいます。

ワークフローエンジンを使えば、タスクの依存関係も含めて管理するとことがでますし、エラーが発生した場合に、リトライをしたり、通知を送ったりすることができます。

類似のツールとしてAirflow、Luigiなどがあります。Digdagは、ワークフローを「*.dig」というファイルに記述していくのですが、他のツールと比較して、ワークフローの内容をシンプルに記述できる点がわかりやすくて良いなと感じ導入しました。

シンプルなツールですが、スケジュール機能、WEB上でモニタリング画面なども提供されています。詳しい内容は開発者の以下のスライドをご覧ください。

www.slideshare.net

Digdagをインストールする

centOS 7.4で試しています。digdagを動かすためには、Java 8(8u72) 以上が必要になります。基本的に公式のチュートリアル通りにインストールすれば、オッケーです。

$ curl -o ~/bin/digdag --create-dirs -L "https://dl.digdag.io/digdag-latest"
$ chmod +x ~/bin/digdag
$ echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc

念のため、きちんとインストールできたか、確認します。

$ digdag --version

digファイルを作成してワークフローを記述する

digdag initでプロジェクトファイルが作成されます。コマンドを実行してみます。

$ digdag init project-name

porject-nameディレクトリの配下にproject-name.digというファイルが作られます。

$ cd project-name
$ ls
project-name.dig

このdigファイルにワークフローを記述していきます。フォーマットはYAML拡張です。 このような感じで記述してきます。

timezone: Asia/Tokyo # Timezoneの設定

schedule: #スジェジュールを記載します。この場合、毎日7時に実行されます。
  daily>: 07:00:00 

+step1: #タスク1 (+がタスクを表します)
  sh>:echo "start task1 ${session_time}"
  
+step2: #タスク2
  sh> : ./src/sample_script.sh #シェルスクリプトも実行できます。
  _error: #タスクが失敗したときの処理も記述できます。
     echo>: echo "failure!"
     sh>: ./src/error_notify.sh #

少し話がそれますが、ボクはSlackやLINEなどに通知をするためのシェルスクリプトを作って、エラー時に通知するようにしています。

とくにLINE Notifyはトークンを用意するだけで簡単に通知が送れるので、色々試しているときは、LINE Notifyを重宝しています。

LINE Notifyの詳細については、以下の記事を参考にしてみてください。

コマンドラインから LINE にメッセージを送れる LINE Notify : LINE Engineering Blog

ワークフローを実行する

digファイルの記述ができたら、ワークフローを実行します。まずは手動で実行できるか試してみましょう。以下のコマンドで、ワークフローを手動で実行できます。

$ digdag run project-name.dig

ワークフローを定期実行するには、schedulerを起動します。以下のコマンドを実行すると、先程のdigファイルがschedulerに登録されます。設定されたタスクが毎日7字に実行されるようになります。

$ digdag sched

digファイルを更新すると、scheduler1にも自動で反映されます。

まとめ

駆け足でありましたが、digdagの使い方をまとめてみました。digdagを使うとタスクの依存関係などをコードベースでかつ簡単に管理できるようになります。

digファイルを記述していくだけでいいので、覚えることも少なくて、そのあたりがとても魅力的だなと思います。

cronで消耗している方は、ぜひ試してみてはいかがでしょうか。

参考URL

読者登録をお願いします!

本ブログでは、副業やプログラミングに関する記事を公開しています。(ときどき、それ以外のことも)読者登録してもらうと更新の励みになります。ぜひ一緒にプログラミングを学びましょう。


  1. Digdagには3つのモードがあります。ローカルモード、サーバーモード、クライアントモードです。今回はお試しということで、ローカルモードのスケジューラーの機能を利用していますが、本格的に利用するのであれば、サーバーモードを使った方が良いようです。digファイルはそのまま流用できます。

【書評】「Webサービスのつくり方」を読めば、きっとものづくりがしたくなる!

f:id:tadaken3:20180325115650p:plain こんにちは!
タダケン(@tadaken3)です。

ちょっと古い本なのですが、今日は「Webサービスのつくり方」のご紹介をしたいと思います。

「Webサービスのつくり方」の概要

著者は「ボケて」や「君のラジオ」といったWebサービス・アプリを開発してきたゆーすけべーさん

本書ではWebサービスづくりにおける「心構え」「下準備」「企画」「設計」「開発」「プロモーション」「運用」という各過程を、丁寧にそして楽しく解説されています。本書を読めば、Webサービス制作の全体像を俯瞰することができます。また、エッセイ形式なので、どこから読んでもOKな構成です。

Perl好きな著者によって書かれた本のためサンプルコードは基本Perlです。とくに難しいコードではないので、他の言語の知識があれば、基本的に理解できると思います。

「Webサービスのつくり方」を読んで感じたこと

著書自体は2012年に発刊されているので、今となっては古くなっているところもあるのですが、Webサービスやアプリを開発する上で、学びがたくさんあります。

この本が好きな理由は、本を読むと「何か作りたい」という気持ちになりことです。

「何かを作りたい」という気持ちはプログラミングを学習する上での強いモチベーションに繋がりますし、やはりものづくりは楽しいです。とくに気分が乗らないときは、この本を読んでテンションを上げています。

一般的な技術書では「どう作るのか」の部分が中心になっていますが、本書は「何を作るのか」という点にフォーカスが当てられています。プログラミングの書籍や技術ブログを読んでもみえてこない「どんなサービスを作るのか?学んだ技術でどうやってサービスやアプリをつくるのか?」という部分が具体的に勉強できます。

基本エッセイなので、サラッと読めるところも気に入っています。これが読み返したりするのにちょうどいいのかもしれません。

また、この本の良いところとして、開発以外の工程について、きちんと触れているところです。とくに開発した後の「プロモーション」「運用」の部分はWebサービスを作って終わりにせず、きちんと育ていくために重要な要素です。

プレリリースをする方法やWebサービスを運用しているサーバー監視方法まで触れられています。(ただし、紹介されている監視ソフトやサービスなどはさすがに古くなっています)

最後に

個人的に日記アプリを作りたいと考えて企画を考えているところです。そんなときふと思い出して読み返してみて、やっぱり良い本だなと感じたので、紹介してみました。

日記アプリの企画も本書を参考にしながら、ブラッシュアップしていきたいと思います。

読者登録をお願いします!

本ブログではGoogle Apps Script、Pythonの役立つテクニックを公開しています。よろしければ、本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)

【書評】「プログラマのためのGoogle Cloud Platform入門」で手を動かしながらインフラ構築を学ぶ

f:id:tadaken3:20180325120101p:plain こんにちは
タダケン(@tadaken3)です。

あなたは、プログラミングを学んでいて、自分でWEBサービスを作ってみたいと考えたことはありませんか?

自分のPC上で動かすようなちょっとしたプログラムを書けるようになってくると、今後はWEBサービスを作ってみたいという気持ちがふつふつと湧いてくることかと思います。

WEBサービスを作って公開するためには、プログラミングの知識はもちろん、ネットワークやサーバーなどのインフラを設計・構築・運用する知識が必要になってきます。

インフラ構築の基礎知識と今流行りのGoogle Cloud Platformの使い方を「プログラマのためのGoogle Cloud Platform入門」で学ぶことができます。

Google Cloud Platfromとは

Google がクラウド上で提供するサービス群の総称で、Google 社内で使われているものと同じテクノロジーを使って、インフラを構築ができます。Google Cloud Platfromは略してGCPと呼ばれます。

すごい!!

類似のサービスとしてはAmazon Web Servise(AWS)というのがあります。

Google Cloud Platfromは基本的に使う分だけお金がかかる仕組みになっています。ただし、12ヶ月間の無料クレジット枠300ドル(約30,000円分)があるので、最初の一年は基本的に無料でお試しすることができます。仮に無料枠を使い切っても、勝手に課金されるということありません。

またある程度の制限はありますが、ずっと無料で使えるサービスもあります。

例えば、Google Computer Engineというサービスを使って、無料でちょっとしたサーバーを立てることもできます。

GCEのf1-microインスタンスなどが無期限無料で使えるらしい - 覚書

インフラ構築の基本に踏みこんで解説されているので3年後もきっと役立つ

GCPには色々なサービスがあります。

  • Google Computer Engine
  • Goolgle Big Query
  • Cloud Load Balancing

なんでこんな沢山のサービスが有るかというとインフラにもいろいろな役割があるからです。

例えば

  • クライアントのやりとりをするWEBサーバー
  • 永続的にデータを保存するデータベースサーバー
  • 負荷を分散するためのロードバランサー

などがあります。こういったインフラ技術の基礎知識をGCPを通して学んでいくことができます。

インフラ技術のトレンドを追いかける

もちろんGCPは最新のクラウドサービスなので、基本的な内容だけにとどまりません。

本書ではざっくり

「WEBアプリケーション基本」
      ↓
「スケーラブルなWEBシステムの構築」
      ↓
「コンテナ実行環境を使ったインフラ構築の自動化」

といった形で、インフラ構築の流れを学んでいきます。

最終的には、機械学習を用いたGAEアプリケーションを構築するところまで体験できます。

終わりに

インフラの知識とGCPがあれば、ひとりでWEBサービスを立ち上げることもできるようになります!

今年の年末は、「プログラマのためのGoogle Cloud Platform入門」を読んで、手を動かしながらインフラ構築とGCPの知識を深めてみてはいかがでしょうか。

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

プログラマのためのGoogle Cloud Platform入門 サービスの全体像からクラウドネイティブアプリケーション構築まで

読者登録をお願いします!

本ブログではGoogle Apps Scriptの役立つテクニックを公開しています。本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

「酔いどれGCPUG」でGoogle Data Studioの話をさせていただきました!

f:id:tadaken3:20180823232903p:plain こんにちは
タダケン(@tadaken3)です。

11月28日にGoogle Cloud PlatformのUser Group(略してGCPUG)の酔いどれGCPUGにて、『Google Data Studioでイカしたダッシュボードを作る』という内容でLTさせていただきました。

今回はクラウドエースの平戸さんよりお声掛けいただき、発表の場をいただきました。

LT時の様子はこちら。

f:id:tadaken3:20171129204514j:plain

GCPUG(ジーシーパグ)とは

GCPUG(ジーシーパグ)はGoogle Cloud Platformを普及させることを目的とし、Googleと共にGCPをより良くし、盛り上げていくユーザーグループです。私たちに共感していただける方なら、GCPUGへの参加は自由です。一緒に GCP を盛り上げていきましょう。 Google Cloud Platform User Group

Google Cloud Platformをヘヴィーに扱っている方から初心者の方まで集まってワイワイやっている会です。今回の酔いどれと銘打っていることもあり、序盤からお酒が振る舞われての勉強会でした。サイコーですね。

発表内容について

ボクは『Google Data Studioでイカしたダッシュボードを作る』という内容で登壇させていただきました。

もともと「いつも隣にITのお仕事」でGoogle Data Studioの記事を書いていたので、その中から内容を抜粋して発表しました。

圧倒的に見やすいダッシュボードを作成できる「Google Data Studio」が熱すぎるtonari-it.com

Google Data Studioについてはこんな記事も書いてます。

Twitterでの反応

若干のネタ被りやマシントラブルで途中スライドが映らない事故もありましたしたが、いくつか肯定的なコメントをいただけて良かったです!

GCPUGに参加した感想

初参加なのにいきなりLTをするという強硬手段に及んだにもかかわらず、皆さん暖かく迎えてくださって、ほんとうに感謝です。酔ってたけど。

個人的には@yutah_3さんの発表されていたApache Airflowの話はとても勉強になりました。さすがGoogleの中の人。

ほかにも

など興味深いお話がたくさんありました。

自分もGCPガンガン使っていきたいなという気持ちになりました。

おまけ

二次会の抽選会でGoogle Cloud PlatformのTシャツとハンドスピナーをいただきました!

f:id:tadaken3:20171129203614j:plainf:id:tadaken3:20171129203537j:plain
自宅で適当に撮ったのでちょっとしわしわ

読者登録をお願いします!

本ブログではプログラミング・データ分析の役立つテクニックを公開しています。本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

匠メソッドで学ぶ『価値』から考える企画のまとめ方

f:id:tadaken3:20180325122442p:plain こんにちは!
タダケン(@tadaken3)です。

先日、匠メソッドを学ぶための匠塾に参加してきました。匠塾とは毎月開催されている招待制の匠メソッドを学ぶ会です。株式会社アクティアCOO 高崎健太郎さんを塾長とする有志によって開催されています。

匠メソッドとは

匠メソッドとは何なのでしょうか。匠メソッドを開発した「株式会社匠BusinessPlace」のサイトより引用します。

特徴は価値から戦略・業務を見ていくことです。 戦略立案の手法は他にも多くありますが、戦略が絵に描いた餅になったり、他から持ってきたもので現場に浸透しなかったりしがちです。 匠Methodはこういったビジネス企画における問題を価値の視点でまとめ上げ、組織全体が一体となって推進していける戦略・業務をデザインすることができる唯一の手法です。 匠Method | 匠Methodとは

一言で表すと「まず提供する価値をしっかり決めてから、ビジネスモデルや要件定義をする」というメソッドです。

匠メソッドをしったきっかけ

個人で何かを開発したいなと考えていました。 WEBサービスなのか、アプリなのかといったことをぼんやりと考えているときに以下のスライドを拝見しました。

www.slideshare.net

株式会社ビープラウドの佐藤社長のスライドです。ビープラウドでは、

  • イベント・勉強会支援サイト「Compass
  • WEBブラウザーでプログラミングを学ぶオンライン学習サービス「PyQ(パイキュー)

のサービスを提供されています。これらCompassやPyQも匠メソッドを導入して開発がされており、興味を持ちました。

価値デザインモデルと価値分析モデル

今回は初めての参加ということもあり、初心者チームに参加させていただきました。

匠塾で実施される「12月のLT大会の企画」というテーマで匠メソッドを体験します。

匠メソッドではいくつかのモデルを作ります。アイデアを出しながら、モデルを作成していきます。複数のモデルを組み合わせて企画全体を俯瞰していきます。

今回のチームでは

  • 価値デザインモデル ・・・ビジョン、コンセプトを考えながら価値を表現していく
  • 価値分析モデル・・・ステークホルダーのそれぞれの価値を分析する

の2つを体験しました。

実際には付箋を使って、他の参加者の方と企画をまとめていきます。

f:id:tadaken3:20171116094349j:plain

最後に

匠メソッドを学びつつ、自身でも価値あるサービスを提供できるように前に進んでいきたいと思います。匠メソッドはとても学びが多く、懐が深いので、ご興味のある方はこちらの書籍を読んでみてはいかがでしょうか。

匠Method: 〜新たな価値観でプロジェクトをデザインするために〜

匠Method: 〜新たな価値観でプロジェクトをデザインするために〜

読者登録をお願いします!

本ブログではプログラミングや仕事効率化に関する情報を公開しています。よろしければ、ブログの読者登録もしくはTwitterアカウントをフォローしていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

Google Apps ScriptのコードをGithubで管理できる「Google Apps Script Github アシスタント」が便利すぎる

f:id:tadaken3:20171110121704p:plain

こんにちは!
タダケン(@tadaken3)です。

Google Apps Scriptのコードを書いていて、ちょっと困るのがコードのバージョン管理です。

Google Apps Scriptはブラウザで開発していくことになり、ソースコードのバージョン管理ができません。とくに複数人で開発しているときなんかは、誰がどのように編集をしたのかわからず、何が最新版なのかわからなくなってしまいます。ソースコードを管理できないと心細いです。

そこでGASのコードをGithub上で管理できるChrome拡張の「Google Apps Script Github アシスタント」をご紹介します。「Google Apps Script Github アシスタント」を使うとGASのコードを手軽にGithubで管理できます。

「Google Apps Script Github アシスタント」を導入する

「Google Apps Script Github アシスタント」はChrome拡張です。 以下からChromeウェブストアにアクセスし、Chromeに追加ボタンを押すと簡単に追加できます。

chrome.google.com

Google Apps ScriptのIDEを開くと「Github アシスタント」のメニューが追加されます。 まずはGithubとの認証を行うため「Login SCM」を選択します。

f:id:tadaken3:20171110115255p:plain

GithubのID、パスワードを入力する画面がでてきますのでアカウント情報を入力します。

f:id:tadaken3:20171110114725p:plain

これで設定は完了です。簡単ですね。

リポジトリにコードをPushしてみる

Githubではリポジトリという単位でコードを管理します。

「Repository」を選択すると、リポジトリ一覧がプルダウンで選択できます。Gistや新しいリポジトリを作成することもできます。今回は新たにリポジトリを作成してみようと思うので「Create new repo」を選択します。

f:id:tadaken3:20171110114854p:plain

リポジトリの設定を入力する画面が出できます。リポジトリ名などを入力して、「Create」ボタンをクリックするとリポジトリが作成されます。

Githubのサイトにアクセスすると、リポジトリが作られてたことが確認できます。

リポジトリにコードをアップすることをPushといいます。早速ソースコードをPushしてみましょう。Pushするのも簡単でコードを書いた後に「Push」ボタンを押すだけです。

f:id:tadaken3:20171110125422p:plain

すると、追加されたコードのDiffとコミットメッセージが入力する画面がでてきます。コミットメッセージを入力して、Pushすると完了です。

f:id:tadaken3:20171110114938p:plain

Githubのサイトで確認するとgas-github-sampleというリポジトリに「コード.gs」が追加されました。

f:id:tadaken3:20171110115407p:plain

いや、本当に簡単ですね。

リポジトリからコードをPullして最新のコードを取得する

Github上の最新のコードを取得することをPullと言います。続いて、Pullしてコードを取得してみましょう。

Githubのサイト上で、先程のgsファイルを以下のように編集します。

  • ファイル名をコード.gsからmain.gsに変更
  • Logger.logの中身を”Hello Google Apps Script”から”Edit Github”に変更

f:id:tadaken3:20171110115450p:plain

では、Google Apps ScriptのIDEに戻ってPullできるか試してみます。 メニューバーにあるPullボタンを押します。

f:id:tadaken3:20171110125438p:plain

すると、Diffが表示されました。

f:id:tadaken3:20171110115535p:plain

そのままPullボタンを押すと、Google Apps Scriptのコードが最新の状態に変更されました。

f:id:tadaken3:20171110115548p:plain

まとめ

今回は「Google Apps Script Githubアシスタント」を使って

  • ソースコードをGithub上のリポジトリにPushする方法
  • Github上にある最新のコードをPullして取得する方法

をご紹介しました。

Githubアシスタントを使えば、Google Apps ScriptのコードをGithubで管理する事ができます。 Githubアシスタントブランチを切って管理することも可能なので、追加機能を実装するときも安心して開発できますね。

読者登録をお願い致します!

本ブログではGoogle Apps Script、Pythonの役立つテクニックを公開しています。よろしければ、本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

参考サイト

開発者のleonhartXさんによる解説記事
手軽にGoogle Apps ScriptのコードをGithubで管理する | Recruit Jobs TECHBLOG

Githubアシスタントのソースコード
GitHub - leonhartX/gas-github: sync gas code to github

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~

詳解! GoogleAppsScript完全入門 ~GoogleApps & G Suiteの最新プログラミングガイド~

Gaiaxさん主催の『Google Apps Script 活用ミートアップ』に登壇しました!

f:id:tadaken3:20180325120149p:plain こんにちは
タダケン(@tadaken3)です。

10月31日にGaiax さん主催のGoogle Apps Script 活用ミートアップにて、『Google Apps Scriptで三日坊主を克服する』という内容で登壇させていただきました。

登壇時の様子はこちら。なんか変にハニかんでますね。

f:id:tadaken3:20171101222414j:plain

Google Apps Script 活用ミートアップのに参加させていただき、たくさんの学びを得ることができました。簡単にレポートします。

Google Apps Script 活用ミートアップとは

多くの企業が活用しはじめている Google の G Suite(Google Apps)。そんな G Suite を拡張するスクリプト言語 Google Apps Script の活用事例をご 紹介! 【エンジニア交流会】Google Apps Script 活用ミートアップ - connpass

Google Apps Scriptの活用している企業が集まって、活用事例を紹介し意見交換をする場です。 企業とあるのですが、ボクは個人として参加させていただきました。

主催のGaiaxさんのオフィスがむちゃくちゃオシャレでどこぞのバーにいるかと錯覚しました。 実際にバーカウンターも設置されており、参加者にお酒も振る舞われていました。(写真をとっておくのを忘れました)

発表内容について

ボクは『Google Apps Scriptで三日坊主を克服する』という内容で登壇させていただきました。

Google Apps ScriptとLINE notify、IFTTTを組み合わせた仕組みづくりの話です。ジムに行った日から3日経過したら、LINEに通知がくるという内容を紹介させていただきました。

もともと、ブログにまとめていた内容を発表させていただいた形です。ですので、詳しい実装方法はこちらをご覧ください。

tadaken3.hatenablog.jp

当日の様子

昨日は、他にも

  • 新入社員が配属されたときに必要なWEBサービスのアカウント作成業務をGoogle Apps Script で効率化した事例
  • Google Search APIを使って、ちょっとした業務ツールを作る話
  • Twitterのエゴサーチを自動化する話
  • 非エンジニアの方がGoogle Apps Scriptにチャレンジしたエピソード

などの事例やエピソードをお聞きすることができました。

他の登壇者の方の発表内容はGaiaxさんのブログにアップされていますので、ご興味のある方はこちらもご覧になってみてください。

gaiax.hatenablog.com

また、登壇や質疑応答などで

  • コードの管理をどうするか
  • エクセルとスプレッドシートの住み分け

あたりが課題感としてあがっていました。とくにGoogle Apps ScriptはGitなどでバージョン管理するには若干手間なので、このあたりは今後、Googleがなにかソリューションを提供してほしいなと思います。

近い将来Google Cloud Source Repositoriesでうまく管理できるようになるのではないかなと予想しています。と思ったらGithubで管理できるツールがありました。素敵ですね。

tadaken3.hatenablog.jp

登壇を終えて

この手のイベントで登壇させていただくのははじめてだったので、えらく緊張しました。 個人での参加者はボクだけだと予想したので、真面目すぎず、個人でも活用できる話の内容を選びました。 若干ネタに走りましたが、うまく笑いが取れてよかったです。

参加してみて、本当に楽しいイベントでしたし、色んな人交流できてほんとうに勉強になりました。 お酒を飲みながらワイワイできて、本当に楽しい時間を過ごせました。

また、個人での参加にも関わらず、暖かく迎えてくださったGaiaxの皆さんにはほんとうに感謝です! この場を借りて、お礼をいわせていただきます。

今後もぜひ積極的にイベントにチャンレンジしていきたいです。

読者登録をお願いします!

本ブログではGoogle Apps Scriptの役立つテクニックを公開しています。本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

インベスターZを読んで学んだ「天才になる方法」と「続けるコツ」

こんにちは
タダケン(@tadaken3)です。

この週末にかけて、「インベスターZ」という漫画を一気読みしました。

「インベスターZ」は「ドラゴン桜」で有名な三田紀房さんが描いた本格投資漫画です。

「財前」という男子中学生が名門高校の投資部にはいることから物語がスタートします。学校存続のために資産運用をしていて、財前も投資部で様々なことを学んでいきます。1

中学生で投資部って結構ぶっとんでますね。

天才になるひとつの方法

「インベスターZ」の最終巻で「天才になる方法」が紹介されています。

f:id:tadaken3:20171029110749p:plain

100人が思いついたとしても行動するのは、その内のたった1人
そして、100人が行動できてもそれを続けられるのは、その内のたった1人
つまり、1万人のうち1人しかやり続ける人間はいない

天才とは、シンプルに信じてやり続けた人

まずは行動すること。そして失敗してもあきらめずに挑戦し続けること。当たり前のことですが、その当たり前のことを愚直にや理続けるのがどれだけ難しいことか改めてはっとさせられました。

ボクなりの続けるコツ

「インベスターZ」を読んでいていて、ボクなりの続けるコツを考えてみました。それは「ベストを目指すけど、完璧を目指さない」ってことす。

漫画の中で、財前は先輩に様々なことを教わります。財前がすごいなって思うところは、自分なりに考え、それをすぐに実践していることです。もちろん時には失敗もしていますが、失敗したらしたで、ケロッと新しいことに取り掛かっています。

億単位の資金を運用しているにも関わらず、「たかが金」と平然と言ってのけます。損をしてもなんとかなる。損をしても死ぬことはないという境地に達しています。

f:id:tadaken3:20171029114306p:plain

ボクは「週一回以上記事を更新する」ことを目標に、この技術ブログを運用しています。運用をしてわかったのですが、記事を書いていると「クオリティ」に満足できない局面が度々あります。

他のブログでは「もっとわかりやすいし、最新の情報を掲載している」「こんな低俗なクオリティでは公開するのが恥ずかしい」と思ってしまって筆がとまってしまうことがありました。

ですが、せっかく書いたのに公開しないのであれば、「何も書いてないのと同じ」と考え、「週一回以上記事を更新する」を守るようにしています。

サラリーマンをしながらブログ運営をしていると、どうしても仕事の波によって、ブログ執筆時間がうまく確保できないこともままあります。

もちろん時間があればもっと内容をブラッシュアップできるのにと思うこともありますが、今もっている時間でできるベストを尽くした と考えるようにしてから気が楽になりました。

「たかがブログ」です。

株式投資以外にもいろんなテーマを学べ、刺さる言葉がたくさんある

「インベスターZ」では、株式投資を中心に、ベンチャー投資(起業)、不動産、生命保険、金、節約術についての投資の手法や歴史も解説されていてとても勉強になります。

実在する起業の社長がが出演する話もあったりで、他にも刺さる名言が満載です。例えば、元ライブドア社長の堀江さん、DMM会長の亀山さん、ZOZOTOWN(スタートトゥデイ)の前澤さんといった有名ITベンチャー企業の社長が漫画の中に登場します。

DMMの亀山さんってほとんどメディアに露出されないので、独自の取材に基づくエピソードが掲載されているのは貴重です。きちんとAVのことに踏みこんでいるあたりもおもしろかったです。

f:id:tadaken3:20171029112909p:plain

きっとあなたにも刺さる言葉が見つかるはずです。騙されたと思ってぜひ読んでみてはいかがでしょうか。

インベスターZ(1)

インベスターZ(1)

2017年10月27日から10月29日まで1冊5円のセールが実施されています。お見逃しなく。

読者登録をお願いします

本ブログではプログラミングのことを中心に記事を公開しています。ときどき、それ以外のことも。よろしければ読者登録していただけると更新の励みになります。


  1. インベスターZは21巻まで発行されています。著者が、漫画本編のキャプチャやSNSの投稿を歓迎しているのものすごいところです。https://twitter.com/mita_norifusa/status/923779394459467776

SQLite3を使ってちょっとしたCSVファイルをSQLで集計する

f:id:tadaken3:20171020194951p:plain こんにちは!
タダケン(@tadaken3)です。

データ分析をしていると手元のちょっとしたファイルをSQLで集計したいことってよくあります。

例えば数万行〜数十万行程度のちょっとしたCSVファイルなど、エクセルでやるにはちょっと重たいけど、MySQLPostgreSQLのような本格的なデータベースを使うほどではないときです。

そんなとき、SQLite3を使えば、ちょっとしたデータを手元でSQLを使って集計できて便利です。

またSQLの学習にもちょうどいいですし、集計ロジックとデータを切り離すことができるのでで、集計ロジックを他のデータにも使いまわすことができます。

今回はSQLite3を使って、CSVファイルを集計する方法をお伝えします。

SQLite3とは

SQLite3はデータベースサーバを使用せずデータベース毎に1つのファイルを使って管理する極めてシンプルな構造をしています。

開発の現場ではアプリケーションに組み込みんで使われる場合が多いです。PythonPHPRubyではSQLiteを扱うライブラリが標準で組み込まれています。

また、Macには最初からSQLite3がインストールされています。

Windowsの方は以下の記事を参考にインストールしてみてください。

SQLiteインストール(Window版)

インストールできたら、SQlite3をコマンドラインから実行してみましょう。

$ sqlite3 --version
3.16.0 2016-11-04 19:09:39 0e5ffd9123d6d2d2b8f3701e8a73cc98a3a7ff5f

データベースの作成と接続

データベースを作成するにはコマンドラインで以下のように実行します。

書き方 sqlite3 データベース名

以下の例ではsample.dbを作成をします。

$ sqlite3 sample.db

「sample.db」が存在していなかった場合は新たに作成され、SQLite3の対話モードに入ります。すでに「sample.db」が存在している場合は、そのまま「sample.db」にアクセスします。1

SQLite3を終了するには「.exit」コマンドを実行します。

sqlite> .exit


カレントディレクトリにsample.dbというファイルが作られていると思います。

f:id:tadaken3:20171020192900p:plain

もう一度、「sample.db」に接続するには

$ sqlite3 sample.db

実行すると、既存の「sample.db」に接続されます。

CSVファイルをインポートする

このままだとsample.dbはからっぽです。なのでCSVファイルからデータを取り込んでいきましょう。

データをインポートする前に、ちょっと説明です。

SQLite3にはモードという概念があります。

今回はCSVファイルからデータをインポートしたいので、CSVモードに変更します。

モードを変更すると、集計結果を出力する際の区切り文字が変わります。モードを変更するには、「.mode」コマンドを実行します。

モードを変更するには以下のように実行します。

sqlite> .mode csv


モードが切り替わったら、次にデータをインポートします。 データをインポートするには「.import」コマンドを実行します。

書き方 .import 元ファイル名 テーブル名

例えば、以下のようなsample.csvというファイルがあるとします。

f:id:tadaken3:20171020192931p:plain

sample.csvを取り込んで、sampleというテーブルを作成するには以下のようにコマンドを実行します。

sqlite> .import sample.csv sample

テーブルができたどうか、「SELECT * FROM sample;」というSQLを実行して確認してみましょう。

sqlite> SELECT * FROM sample;

無事にテーブルが作られていますね。

f:id:tadaken3:20171020192455p:plain

データを集計する

あとは集計です。SELECT文を実行すれば、結果が出力されます。

sqlite> SELECT count(name) as cnt_name FROM sample;

と実行するとnameの数が表示されます。

f:id:tadaken3:20171020193834p:plain


出力した結果を外部のファイルに保存したい場合は、「.output」コマンドを使います。

書き方 .output 保存したいファイル名

.outputコマンドの後に、SQLを実行すると結果がファイルに保存されます。

sqlite> .output cnt_name.csv
sqlite> SELECT count(name) as cnt_name FROM sample;

このように結果がCSVファイルが保存されました。

f:id:tadaken3:20171020192314p:plain

まとめ

今回はSQLite3を使って

  • データベースを作成・接続する方法
  • CSVファイルからデータをインポートする方法
  • SELECT文でデータを集計する方法

をお伝えしました。今回ご紹介したモノは基本的な内容にとどまっていますので、以下のサイトでSQLite3についてより学習をすすめるのもおすすめです。

SQLite入門

読者登録、Twiiterアカウントのフォローをお願いします!

本ブログではプログラミングや仕事効率化に関する情報を公開しています。よろしければ、ブログの読者登録もしくはTwitterアカウントをフォローしていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。


  1. 拡張子はなんでもオッケーです。通例では「.sqlite3」にしますがコマンド名と同じで、ややこしいので今回の記事では「.db」にしています。

Macで画面を録画してGIFに変換する方法

f:id:tadaken3:20171013002002p:plain

こんにちは!
タダケン(@tadaken3)です。

ブログやTwitterなどでアプリの操作方法を伝えたい場合に、動画で表現できるとわかりやすいですよね。

とくに自分の作ったアプリ、ツールをGithubに公開するときにGIF動画で、アプリのデモがあるとわかりやすさ倍増です。

今回は、Macで画面を録画する方法と録画したファイルからGIF動画を作る方法をご紹介します。

f:id:tadaken3:20171012235025g:plain

QuickTime Playerで画面を録画する

画面を録画するにはMacの標準ソフトであるQuickTimePlayerを使います。QuickTimePlayerがない場合はこちらからダウンロードしてください。

QuickTimePlayerはLaunchpadから「その他」で見つかると思います。

f:id:tadaken3:20171012233609j:plain

画面を収録するには、QuickTimePlayerを起動し、ファイル>新規収録画面をクリックします。 f:id:tadaken3:20171012233659p:plain

すると「画面収録」という画面が立ち上がります。赤い丸をクリックします。

f:id:tadaken3:20171012233734p:plain

下記の画面がでできます。マウスをドラッグして録画する範囲を指定できます。すると画面撮影が始まります。

f:id:tadaken3:20171012233811p:plain

撮影を終了したい場合は、メニューバーにある停止ボダンをクリックするか、Command + Control + esc キーを同時に押すと撮影終了です。

これで.mov形式のファイルができました。

f:id:tadaken3:20171013004331p:plain

FFmpegを使ってmovファイルをgifに変換する

FFmpegは動画や音声を記録・変換・再生するためのソフトです。コマンドラインから使用することができるので、大量の動画などを処理するときや処理を自動化したいときに便利です。

いくつかGUIのGIF変換アプリを試してみたのですが、細かいオプションも指定できるので、FFmpegのほうが個人的には楽でした。

FFmpegをインストールする

FFmpegはHomebrewを使ってインストールします。

$brew install ffmpeg

インストールできたら、無事に動くか確認しましょう。「ffmpeg -version」でバージョンを確認します。

$ffmpeg -version
ffmpeg version 3.3.4 Copyright (c) 2000-2017 the FFmpeg developers

という感じで表示されれば成功です。

ffmpegコマンドでmovからgifに変換する

では、早速GIF画像に変換します。オプションはたくさんあるのですが、よく使うのは以下ものです。

  • -i:元となるmovファイルを指定
  • -r:フレームレート
  • -ss:開始時間
  • -t:開始時間からの経過時間

フレームレートは高いほどGIF画像がなめらかになりますが、ファイルサイズも大きくなります。

例えば、mov形式のファイルをフレームレート10でGIFに変換する場合は下記のコマンドを実行します。

$ffmpeg -i input.mov -r 10 output.gif

再生時間を指定して変換する場合はこのようになります。動画の最初から10秒間の部分だけGIFに変換されます。

 $ffmpeg -i input.mov -r 10 -ss 00:00:00.000 -t 00:00:10.000 output.gif

その他のオプションは

$ffmpeg -h

で確認できます。

まとめ

今回は

  • QuickTime Playerで画面を撮影する方法
  • ffmpegを使ってコマンドラインからGIFに変換する方法

をお伝えしました。

画面操作を撮影して、GIF動画に変換するケースは結構あると思いますので、知っておくと便利なテクニックです。とくにMacのアプリを人に紹介する場合など重宝します。

追記:2018/08/17

パレットを指定して作成すると、きれいなgifがつくれます。

$ffmpeg -i input.mov -vf palettegen -y palette.png
$ffmpeg -i input.mov -i palette.png -lavfi paletteuse -y -r 24 output.gif

詳しくは以下の記事も参考にしてみてください

craftzdog.hateblo.jp

読者登録、Twiiterアカウントのフォローをお願いします!

本ブログではプログラミングや仕事効率化に関する情報を公開しています。よろしければ、ブログの読者登録もしくはTwitterアカウントをフォローしていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

Googleスプレッドシートで作成したグラフをブログやSNSで公開する

f:id:tadaken3:20171007140128p:plain

こんにちは!
タダケン(@tadaken3)です。

Googleスプレッドシートの便利な機能をご紹介します。

スプレッドシートで作成したグラフは画像やインタラクティブなグラフとして公開することができます。スプレッドシートのデータが更新されると、公開したグラフもきちんと自動で更新されます。

今回はサンプルとして、ドル円の為替レートのグラフを作成して、ブログで公開する方法をお伝えします。

スプレッドシートの関数で為替レートの取得する

スプレッドシート為替レートを取得するにはGoogleFinace関数を使います。GoogleFinace関数を使うと株式市場のデータを簡単に取得できます。1

書き方 GOOGLEFINANCE("証券のティッカーシンボル","属性",開始日,終了日)


今回のサンプルでは、ドル円の為替レートを取得するため、ティッカーシンボルを「currency:usdjpy」、属性を「price」にします。日付はTODAY関数を使って直近30日分を取得しています。2

直近30日のドル円を取得 =GOOGLEFINANCE("currency:usdjpy","price",TODAY()-30,TODAY())


A1セルに上記の関数を入力するとこのように為替レートが取得できます。

f:id:tadaken3:20171007134010p:plain

GoogleFinace関数で取得した為替レートは毎日更新されます。為替レートのデータを使って折れ線グラフを作成します。

f:id:tadaken3:20171007134107p:plain

グラフを画像を公開する

作成したグラフを公開するにはグラフ右上の「メニュー」からプルダウンで「グラフを公開」を選択します。

f:id:tadaken3:20171007134326j:plain

グラフを公開する方法を選ぶとURLが発行されます。そのままブログやTwitterなどで公開しましょう。

f:id:tadaken3:20171007134423p:plain

画像リンク以外にも「インタラクティブなグラフ」iframeによるグラフの埋め込みも選ぶことができます。ただ、ブログやSNSで公開するのであれば、スマホタブレットから閲覧されることもあるので、画像リンクにすることをオススメします。

「画像リンク」にした場合も、スプレッドシートのデータが更新されると、グラフの画像も最新のものが参照されます。

今回作成したグラフをブログに貼り付けるとこんな感じです。こちらのグラフは常に直近30日の為替レートのグラフが表示されます。

https://docs.google.com/spreadsheets/d/e/2PACX-1vTmsE8ge5LiVeWR6oX7V-DSuGgKeitoCy90j1U9uTR9umulosZ5C87FtNpjV06-RrVdG_XaJRlATLpO/pubchart?oid=1901886125&format=image

グラフを「ウェブに公開」した場合も、スプレッドシート自体は公開されません。あくまで、グラフのみ公開されます。

まとめ

今回はスプレッドシートで作成したグラフをブログ・SNSで公開する方法をお伝えしました。

今回のサンプルではGoogleFinace関数を使って為替レートを取得していますが、ImportHTML、ImportXML関数を使えば、証券・為替以外のデータも使ってグラフを作成することができます。

tonari-it.com

これらのテクニックと合わせてみると、様々なデータのグラフを作ってウェブで公開できます。

読者登録、Twiiterアカウントのフォローをお願いします!

本ブログではプログラミングやデータ分析に関する情報を公開しています。よろしければ、本ブログの読者登録もしくはTwitterアカウントをフォローしていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。


  1. 対応しているのが市場が主に米国のニューヨーク証券市場、NASDAQなので、残念ながら日本市場に上場している企業の株価は2017/10/07時点では取得できません。

  2. 詳細はこちらをご覧ください。GOOGLEFINANCE - ドキュメント エディタ ヘルプ

「はじめてのハッカソン」に参加して感じたハッカソンの魅力とは

f:id:tadaken3:20170925212148p:plain

こんにちは!
タダケン(@tadaken3)です。

9月23日にハッカソン初心者向けのイベント「はじめてのハッカソン」に参加してきました。

ハッカソンに参加したのは、はじめての経験で、学びも多かったです。ハッカソンで感じたことをシェアします!

ハッカソンでサービス開発を企画から実装までいちから体験

ハッカソンとは、プログラミング用語のHack(ハック)とmarathon(マラソン)を組みあせた造語です。エンジニア、デザイナー、プランナーが集まって、企画からアプリ・サービス開発をおこなうイベントです。

日本では2013年ごろから話題を集め、今では様々なテーマ、地域でハッカソンが開催されています。

要はサービス開発の企画から実装までを一日とか数日で体験できるイベントです。

ハッカソンでどんなサービスを作ったのか

でハッカソンでどんなものを作ったのか。

僕達のチームが選んだテーマは「グローバル」でした。

企画自体はイノベーションカードというものを使っていくつかある質問に答えたり、グループワークしながら企画を考えていく形式でした。

f:id:tadaken3:20170925204222j:plainf:id:tadaken3:20170925204514j:plain
みんなでアイデアをだしあって企画を考えます。

企画内容を詰めていって「国境を超えて伝わる楽しさ」を感じてもらえるよう言葉を使わずにコミュニケーションできるWEBサービスを作ることに決定しました。

WEBサービスの名前は「Hello World」

文字で説明するよりも実際に作ったものを見てもらったほうがわかりやすいと思いますので、こちらをご覧ください。

f:id:tadaken3:20170925204657p:plain
みんなで作った「Hello World」というコミュニケーションサービス

いろいろな国の人とコミュケーションするために、文字を介さず絵文字だけでコミュニケーションすること目的としています。

具体的には、

  • 今いる場所をクリックするとその場所にユーザーアイコンが出現
  • 入力フォームから絵文字を選択すると、そのサイトを見ている人全員にメッセージを送信する

という機能があります。

企画段階では、

  • 個々のユーザーにメッセージを送信できる。
  • メッセージ送信したら矢印でアニメーションが表示される
  • ユーザーが送信したら、絵文字の履歴がアクティビティとして表示される

などの機能も検討していたのですが、実装が全然に間に合いませんでした笑

未実装の機能の他にも色々と課題はあるものの、一日で企画検討からサービス実装までおこなうという経験を一通り経験でき、すごい刺激的でした。

ハッカソン当日の流れ

当日の流れはざっくりこのようになります。

  • ハッカソンの説明
  • チーム分け(主催者側で事前に決定)
  • テーマをもとに企画検討
  • 採用技術・仕様検討
  • 実装
  • 発表

11時頃からはじまって、お昼ぐらいまで使って企画を練っていきました。お昼休みを挟んで、採用技術・仕様検討を行い、その後に実装。5時半頃に発表という感じでした。企画から実装まで一気におこなうので、あっという間に時間が過ぎていきました。

f:id:tadaken3:20170925205355j:plain
作ったサービスを紹介する様子

当日の様子は同じチームのまどぎわさんもブログにまとめていますので、参加したいなと思っている方は、こちらもぜひご覧くださいな。

madogiwa0124.hatenablog.com

「はじめてのハッカソン」ではみんなで和気あいあいと楽しめる

今回、参加した「はじめてのハッカソン」は、ハッカソン初心者のためのゆるーいハッカソンとして位置づけられています。参加する前は、技術的に不安があったのですが、実際に参加してみると、スタッフさんのサポートや、参加者の皆さんの和気あいあいと雰囲気もあり、とても楽しい時間を過ごすことができました。

とくに「はじめてのハッカソン」ではアイデアや技術レベルを競ったりすることもなく、できたものをゆるーく発表していく感じなので、技術的に不安があったり、はじめてハッカソンに参加される方にはうってつけのイベントだと思います。

ハッカソンにはプログラミング大好き人間が集まっている

チームのメンバーは

  • Sler出身でプログラミングスクールに通われているまどぎわさん
  • とあるベンチャー企業のチーフエンジニアであるやのうさん
  • 同時に3つのインターンに通っている学生さん
  • 仕事でたまたま関西から東京にきて、当日に飛び込み参加のフリーランスエンジニアさん(すごいバイタリティ)

など、いろんな人が参加していてとても刺激的でした。いろんなバックボーンの人がいる中が、ひとつ共通点があるとすると「みんなプログラミングがチョー好き」。

企画のときも、仕様検討のときもみんなで技術が好きなのでワイワイと盛り上がりました。

企画段階では熱くなって、激しい意見交換をする場面もありました。でも、それは少ない時間の中でもより良いもの作りたいという思いからくるものです。

いざ実装がはじまると、皆さん、ものすごい早さでコーディングしていきます。

ボクはサーバーサイドを担当させてもらったんですが、一緒にやらせてもらった「やのうさん」のコーディングの早さやコードレビューの凄さにビビりまくりでした。

普段独学で勉強することがほとんどだったので、他人のコーディングの方法やシステムの設計方法を垣間見れて非常に勉強になりました。

(あと、Golangをもっと勉強しよう。Golangもっと勉強しよう。)

ハッカソンを通して、自分の足りていないことや今後チャレンジしたいことを見つけられたのも良い経験です。

まとめ

ハッカソンはいつか参加してみたいと思っていたものの、技術的にレベルが高い人向けのイベントだと思っていたので、参加をためらっていました。

ですが、実際に参加することで、自分の課題も見つかりましたし、何よりみんなでワイワイいいながら、ひとつのもの作るというのは非常に楽しかったです。

技術的に不安があって、ハッカソンに参加してみたいという方には、「はじめてのハッカソン」はすごいオススメです。

直近では10月14日にIBMさんとコラボしての「IBM Cloud(Bluemix) × IoT はじめてのハッカソン」の開催が予定されています。

ぜひ、あなたも「はじめてのハッカソン」にチャンレジしてみてはいかがでしょうか。

hackathon.connpass.com

フォロワーになってください!

本ブログではプログラミングを学習する上で役立つ情報を公開しています。よろしければ、本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

三日坊主を防ぐ仕組みをGoogle Apps Scriptで作る

f:id:tadaken3:20170922204913p:plain こんにちは!
タダケン(@tadaken3)です。

新しいことを始めようと意気込んでみても三日坊主になってしまったことはありませんか。

例えば、ジム通い。

通い始めた直後はモチベーションも高く意気揚々と筋トレに勤しんでいくのですが、ときには天気が悪いことを理由に、ときには仕事が忙しいことを理由に、だんだんジムに行かなくなってしまいます。

そんなことではいけない!これではムキムキマッチョになれない!

意志の力に頼らずジムに通えるようにしようと考え、三日坊主を検知したらGoogle Apps Scriptで通知する仕組みを作ってみたところ、これが自分の三日坊主を防ぐのに大いに役立ちました。

今回は三日坊主を克服するための仕組みをGoogle Apps Scriptで作る方法をご紹介します。 ジム通い以外にも、習慣化したいものに応用できるはずです。

三日坊主克服システムの概要

三日坊主克服システムの仕組みを簡単にご説明すると

  • ジムに行った履歴を残して管理する
  • 最後にジムに通った日から3日経過すると通知が送られる
  • ジムに行った記録はボタン一つで簡単に残せるようにする

です。

三日坊主が検知されるとこのように通知が送られます。

f:id:tadaken3:20170921235328j:plain

三日坊主克服システムはWEBサービスを組み合わせて構築しました。 もちろん無料でできます。

利用したサービス・役割は以下の通りです。

図にするとこんな感じです。

f:id:tadaken3:20170922114518p:plain

スマートフォンスプレッドシートの連携をIFTTT、それ以外の部分をGoogle Apps Scriptが担っています。

では、さっそく作成方法をご説明します。

IFTTTとGoogleスプレッドシートを連携してジムに行ったことを簡単に記録できるようにする

IFTTTとは

まず、IFTTTとGoogleスプレッドシートを連携させてスマホで簡単に押せる「ジムに行った」ボタンを作ります。

IFTTTを簡単に説明すると「あるWebサービスとあるWebサービス間を自動的に連携する」WEBサービスです。

ifttt.com

例えば、「もしTwitterに投稿したら、Facebookにも同じ投稿をする」といった「Applets」を簡単に作れます。詳しいことは省略しますが、IFTTTを使うとさまざまなWEBサービスを簡単に連携できるようになり、大変捗ります。

「もしスマートフォンウィジェットにあるボタンを押したら、○○をする」というAppletsも作ることができます。

こちらを使って「もしスマートフォンウィジェットにあるボタンを押したら、スプレッドシートに日時を記録する」というAppletsを作成します。

IFTTTをダウンロードする

まずはIFTTTのアプリが必要になりますので、アプリストアで「IFTTT」と検索するか、こちらからダウンロードしてください。1

IFTTT on the App Store

IFTTT - Google Play の Android アプリ

アプリを起動したらアカウント作成画面が出てくると思いますので、「Googleアカウント」「Facebook」アカウントでログインするか、新たにアカウントを作成してください。

新しいアプレットを作る

アカウントの作成ができたら、トップの右下にある「My Applets」をタップします。ここに作ったAppletsが保存されます。

では、早速、新しいAppletを作成ましょう。Applet作成するには、右上の「+」をタップします。

f:id:tadaken3:20170922000025j:plain


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

f:id:tadaken3:20170922000145p:plain

IFTTTは「if this then that」の略でthisの部分に「きっかけ」(トリガー)、thatの部分に「行動」を指定することでAppletが作られます。

「this」の部分をタップして、トリガー部分を設定します。「button widget」を検索して選択します。

f:id:tadaken3:20170922000206j:plain

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

f:id:tadaken3:20170922000223j:plain

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

f:id:tadaken3:20170922082614j:plain

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

続いて、スプレッドシートの設定になります。

「Spreadsheet name」の部分はお好きなスプレッドシート名を入力ください。該当するスプレッドシートがない場合は、自動で作成されるのでご安心ください。

「Formatted row」の部分は記録される行の内容になります。今回は時間だけがわかればいいのでOccurredAtだけ残してあとは削除してしまいましょう。

「Drive folder path」の部分はスプレッドシートの保存場所になりますので、こちらもお好きなところに変更してください。

f:id:tadaken3:20170922000622j:plain

完了したら「next」をタップします。

Appletが作られます。最後に「Edit title」でわかりやすい名前を設定しておきましょう。

これでボタンが作成されました。スマートフォンの設定でウィジェットにIFTTTアプリを追加すると、先ほど作成されたボタンが表示されるかと思います。

f:id:tadaken3:20170922000806j:plain

早速ボタンを押してテストしてみましょう。

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

f:id:tadaken3:20170921233435p:plain

Point IFTTTとGoogleスプレッドシートを連携させる

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列に経過日数が表示されているかと思います。

f:id:tadaken3:20170921233732j:plain

C列では「=TODAY - TO_DATE(B1)」という式をセットして、経過日を計算しています。

Point Google Apps Scriptで最後に行動した日からの経過日数を計算する

Google Apps ScriptでLINEに通知を送る

LINE Notifyのアクセストークンを取得する

LINEに通知を送るには、「LINE Notify」という仕組みを使います。

まず、LINEアプリからLINE Notifyのアカウントを友達として追加します。

次にLINE NotifyのページにLINEアカウントでログインしてアクセストークンを発行します。

アクセストークンはGoogle Apps ScriptからLINEに通知するために必要になりますので、メモしておきましょう。

わからない場合はこちらの解説記事も参考にしてみてください。

qiita.com

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);
}

これですべての部品が整いました。

Point LINE NotifyでGoogle Apps Scriptから通知を送る

三日坊主克服システムの完成!

では、三日坊主克服システムを完成させましょう。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関数を通知を送りたい時間帯を選んで日タイマーでセットします。

f:id:tadaken3:20170921234555j:plain

Point トリガーを設定してスケジュールでスクリプトを実行する

まとめ

今回は、Google Apps Scriptで三日坊主克服システムの作り方を解説しました。

を組み合わせて仕組み化しました。

仕組み化することで意識せずに三日坊主を検知できるので、今までよりは三日坊主を克服しやすくなったと思います。

あなたが、三日坊主を克服して新しい習慣を身につけられることを祈っています。

最後に尊敬するTestosterone先輩の名言を掲載します。

読者、フォロワーになってください

本ブログではPythonGoogle Apps Scriptの役立つテクニックを公開しています。よろしければ、本ブログの読者もしくはTwitterアカウントのフォロワーになっていただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。


  1. 本記事ではアプリの画面で説明していますが、PCからブラウザ経由でもアプレットの作成ができます。

  2. スプレッドシートのシート名はlogに変更していますので、ご注意ください。