タダケンのEnjoy Tech

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

月末日や最終金曜日にGoogle Apps Scriptを自動で実行するテクニック

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

Google Apps Scriptでは、トリガー使ってスケジュールでスクリプトを実行することができます。処理を自動化するにあたってとても心強い味方なのですが、トリガーだけではスケジュールを組むのが難しいパターンもあります(例えば月末日など)。

今回は、Dateオブジェクトから取得できる値をうまく使って自在にスクリプトをスケジュール実行するテクニックをお伝えしていきます。

毎月1日にスクリプトを実行する

毎月1日にスクリプトを実行するには、トリガーだけで実行可能です。トリガーの設定方法を見ていきましょう。

トリガー設定するには、メニューバーにある時計マークをクリックします。

f:id:tadaken3:20170703133109p:plain

実行したい処理を選んでイベントを「時間主導型」「月タイマー」に変更しましょう。すると日にちと時間を設定できます。画面の例では、毎月1日処理が実行されます。

f:id:tadaken3:20170703133123p:plain

月の最終日にスクリプトを実行する

最終日は少し工夫が必要です。最終日は月によって30日や31日もしく28日だったりします。2月の場合はうるう年も考慮しないといけません。

スクリプト側で最終日かどうか判定するロジックを入れて対応しましょう。

今日の日付に1日分足したもの(つまり明日)が月初めの1日であれば、『今日は最終日』になります。最終日の次の日は絶対に1日だからです。この方法で条件を判定しましょう。

dateオブジェクトに対して、getDateメソッドを実行することで『日』を取り出すことができます。 2017年6月30日の場合は『30』の部分です。

Point dateオブジェクト.getDate();

dateオブジェクトに更新する場合は、setDateメソッドを利用します。日を整数で与えます。

Point dateオブジェクト.setDate('日');

実際のコードはこのようになります。

//トリガー設定用
function trigger(){
  date = new Date();
  date.setDate(date.getDate()+1);//今日の日付に一日足す
  if (date.getDate() === 1){//最終日の判定
    main();
  };
}

function main(){
  //実際に処理を実行する内容をここに記載する
  Loggor.log("今日は月末です")
}

トリガーは「日タイマー」を選んで毎日実行するように設定します。

f:id:tadaken3:20170703133600p:plain

最終金曜日にトリガーを実行する

最終金曜日に処理を実行する場合は、こののように考えます。今日の日付に7を足した日付(つまり翌週の同じ曜日の日)が、来月になっていれば『今日は最終金曜日』です。

『月』を取り出すには、getMonthメソッドを使います

Point dateオブジェクト.getMonth();

実際のコードを見てみましょう。

//トリガー設定用
function trigger(){
  date = new Date();
  var month = date.getMonth()//判定したい日の月を取得


  date.setDate(date.getDate()+7);//7日を足す
  var month_next_week = date.getMonth()//7日後の月を取得
  if (month != month_next_week){//月が一致しなければ最終週
    main();
  };
}

function main(){
  //実際に処理を実行する内容をここに記載する
  Logger.log("今日はプレミアムフライデーです")
}

毎週の金曜日にトリガー設定をしておけば、最終金曜日のみ処理が実行されます。

f:id:tadaken3:20170703192947p:plain

毎月25日にトリガーを実行。25日が土日の場合は前倒しにする

25日に実行したいけど、土日の場合は日にちを前倒しして処理を実行したい場合もあると思います。例えば、お給料日を判定するような場合です。通常は25日に処理が実行されますが、25日が土日の場合は23日もしくは24日実行したい場合です。

この場合は、日にちと曜日のデータを組み合わせて条件判定を行ないます。25日に実行する場合で、具体的なケースを見ていきましょう。

  • 25日が土曜日の場合、24日が金曜日
  • 25日が日曜日の場合、23日が金曜日

つまり、以下の3パターンで処理が実行されればいいことになります。

  • 23日が金曜日
  • 24日が金曜日
  • 25日が土日ではない

曜日を取得するには、getDayメソッドを使います。getDayメソッドが返す値は数字になります。日曜日が0となる点にご注意ください。

Point dateオブジェクト.getDay();

実際のコードを見ていきましょう。

//トリガー設定用
function trigger(){
  var today = new Date();
  //getDayメソッドが返す値は、日曜日から0で始まります。対応する配列を用意します。
  var week = new Array("日", "月", "火", "水", "木", "金", "土");
  var day =  today.getDay();//曜日を取得
  //ログに曜日を出力しています。
  Logger.log(week[day])

  var date =  today.getDate();//日付を取得

 //23日かつ金曜日なら実行
  if (date === 23 &&  week[day] === '金'){
    main();
 //24日かつ金曜なら実行
  } else if (date === 24 && week[day] === '金'){
    main();
 //25日でかつ土日ではない場合に実行
  } else if (date === 25 && week[day] != '土'  && week[day] != '日'){
   main();
  };
};

function main(){
  //実際に処理を実行する内容をここに記載する
  Logger.log("今日はお給料日です!")
}

あとは、23日、24日、25日に処理を実行するトリガーを設定すれば、オッケーです。

f:id:tadaken3:20170703134244p:plain

まとめ

トリガーと日付の判定を組み合わて、定期的にスクリプトを実行する方法をお伝えしました。

Dateオブジェクトから値を取得するメソッドをまとめるとこのようになります。他にもアイデア次第で、スクリプト実行するスケジュールを組むことができると思います。

メソッド 取得でくるもの 備考
getFullYear()
getMonth() 値は0~11(1月~12月)
getDate()
getDay() 曜日 値は0~6(日曜日~土曜日)

今回の記事はいかがでしたか?

副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも) 読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。

Macユーザーにオススメ!複数のアプリ・フォルダをダブルクリック一発で立ち上げる方法

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

あなたは、朝、会社についてまず何をしますか?

チャットアプリやメーラーを立ち上げてメッセージの確認、インターネットブラウザを開いてニュースサイトをチェックして、作業フォルダを開いて・・・というよう毎朝のルーティン作業がだれしもあると思います。

複数のアプリやフォルダを立ち上げるのは案外、面倒ですよね。Macユーザーであれば、複数アプリやフォルダ・ファイルを開く作業はシェルスクリプトで簡単に効率化できます。

今回はショルスクリプトで複数のファイルやフォルダ、アプリケーションをダブルクリック1発で起動する方法をご紹介します。

Mac専用のOpenコマンドでFinderやアプリを開く

MacではOS X専用のコマンドopenコマンドを使用すると、ターミナルからFinderを起動してファイルやフォルダ(ディレクトリ)を表示することができます。

ディレクトリ・ファイルを開く

Finderを開く場合は、開きたいディレクトリのパスを指定します。例えば以下のように実行すると、デスクトップがFinderで開かれます。

open ~/Desktop


デスクトップにあるPDFファイルを開く場合の以下のように実行します。ファイルに関連付けられているアプリが自動的に起動します。

open ~/Desktop/I-am-gundom.pdf


まとめ open "ディレクトリ・ファイルのパス"

アプリを起動する

アプリケーションを起動する場合は「-a」オプションに続けてアプリを指定します。/Applicationsや/Applications/Utilitesフォルダにあるアプリやツールはこの方法で開くことができます。

open -a ”Google Chrome”

ただし、アプリを指定する際は、Finderに表示されている日本語名の名前ではなく、アルファベットなど表示されている実際のアプリを指定する必要があります。拡張子の「.app」は指定しなくても、ほとんどのアプリは起動できます。アプリ名にスペースが含まれる場合はクォーテーションでくくって指定します。

指定のアプリでファイルを開くには次のように実行します。 cotEditerというエディタでテキストファイルが開かれます。

open -a cotEditer ~/Desktop/setsuna−f−seiei.txt


まとめ open -a "アプリ名"

複数アプリを実行するスクリプトを作成する

では実際に「Chrome」「Chatwork」を開いて、デスクトップを表示するシェルスクリプトを作ってみましょう。テキストエディタを開いて、以下のようにシェルスクリプトを書いてみましょう。

#!/bin/bash
open -a "Google Chrome"
open -a ChatWork
open /Desktop

たったの4行で終わります。簡単ですね。

作成できたらファイルを保存しましょう。ここで重要なポイントです。通常シェルスクリプトは拡張子を「.sh」にして保存します。Macの場合は拡張子を「.command」にすることで、ファイルをダブルクリックしてシェルスクリプトを実行できます。*1

Point ファイル名 .command

作成したファイルは「open_some_apps.command」と名前をつけて、デスクトップに保存しましょう。

ファイルに実行権限を与える

最後にファイルに実行権限を与えます。「ターミナル」からchmodコマンドで実行権限を付与します。*2

#!/bin/bash
chmod +x ~/Desktop/open_some_apps.command

作成したファイルをダブルクリックしてみてください。Chromeとチャットワークが立ちあがり、Finderにデスクトップが表示されていれば成功です。

まとめ

今回はMacユーザーのためのシェルスクリプトのテクニックを紹介しました。ちょっとしたテクニックですが、アイデア次第で日々のルーチンワークを効率化することができます。

  • Mac専用のopenコマンドでFinderやアプリを起動する
  • シェルスクリプトの拡張子を「.command」に変更してダブルクリックで起動

次回もシェルスクリプトのテクニックを紹介していきますね。お楽しみに!

今回の記事はいかがでしたか?

副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも) 読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。

*1:ターミナルから、shコマンドでファイルを実行することもできます。Linuxとの互換性は失われてしまいます。

*2:chmodはファイルやディレクトリのファイルパーミッションを変更するコマンドです。詳しくはリンク先をご覧ください。https://ja.wikipedia.org/wiki/Chmod

副業をはじめたら税務署の相談窓口を活用しよう!

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

副業をはじめてから、気になるのは「税金」「確定申告」のことではないでしょうか。 税金って難しいですよね。ボクはあまり得意ではありません。。。

税金や確定申告に関する記事はネットでもたくさんあります。ただ、自分のケースに当てはまるかどうかがわからない場合も多いです。今回は副業を始めたばかりのあなたを心強くサポートしてくる「税の相談窓口」についてまとめました。

確定申告が必要になるケースは?

例えば、副業の場合、確定申告が必要になるボーダラインとして「所得20万円以上」があります。ポイントなのが「所得」です。所得とは収入から経費をひいた金額になります。

Point!! 所得 = 収入 - 経費

ここで、ひとつ疑問が発生します。

「どの費用が副業の経費とすることができるのか?」

ざっと考えただけでも以下のケースがあります。

  • ブログを書くために購入したPCは?
  • もともと持っていたPCは費用計上できる?
  • プロバイダの費用は?
  • 家賃は?

費用が確定したとしても、副業の場合「雑所得」と「事業所得」の2つのパターンで確定申告することが認めらています。「雑所得」と「事業所得」どちらが得なのでしょうか。その前に、自分の副業が「事業所得」として、認められるのはどういった場合なのでしょうか。

税務署の相談窓口を利用しよう

前述したように副業の確定申告ひとつとっても、たくさんの疑問が湧いてきます。それほど、税の仕組みは複雑です。複雑だからこそ、専門的な知識をもった税理士さんが必要の手助けが必要になります。しかし、税理士さんに相談するにはお金もかかります。

そこで副業を始めたばかりのあなたには、税務署の「税についての相談窓口」を利用するのがオススメします。

税についての相談窓口|税について調べる|国税庁

東京都内でも確定申告の時期(2月~3月)を外せば、空いています。平日の10時頃にいったのですが、5分ほど待っただけで相談することができました。

税務署の相談窓口を利用するメリット

無料で利用できる

当たり前ですが、税務署の方は税金のプロです。そのプロに無料で相談することができます。閑散期であれば、とくに制限時間もなく細かいところまで、丁寧に教えてくれました。

自分のケースに合わせた相談ができる

きちんと資料を用意すれば、具体的なケースまで突っ込んで聞くことができます。 今回持っていってよかったものを上げておくので参考にしてみてください。

  • 給与明細
  • 副業の取引に使用している書類。(請求書や見積書など)
  • 実際の業務内容がわかるもの(僕はPCの画面などを見せて相談しました)

書類の書き方を教えてくれる

実際の申告書にどこに何をどのように記入するのかを教えてくれます。実際に3月にならないと数字は確定しないのですが、実際の収入や費用をもとに確定申告に必要な書類の内容や書き方を教えてもらうことができました。

税務署の相談窓口でできないこと

書類自体は自分で作成する必要がある

あくまで相談にのってくれたり、書類の書き方を教えてくれるだけなので、確定申告の書類は自分で作成しなければいけません。MFクラウド会計freeeなどのクラウド会計サービスもありますので、これらを活用する手もあります。規模が大きくなったら税理士さんにお願いすることを視野に入れてもいいと思います。

平日しかやっていない

市町村にもよりますが、基本的に月~金の平日しか税務署は開庁していません。本業がある場合は、休みを取ってらないといけません。簡単な内容であれば、電話でも相談はできます。

まとめ

無料で利用できる税務署の「税についての相談窓口」を利用して感想をまとめました。副業を始めたばかりだと税金周りはわからないことも多いです。そんなときこそネットのあやふやな情報を鵜呑みにせず、税務署に直接相談にいくと安心できます。

今回の記事はいかがでしたか?

副業やプログラミングに関する記事を書いています。(ときどき、それ以外のことも) 読者登録してもらうと更新の励みになりますのでよろしくお願いいたします。

Google Apps ScriptでHTML・XMLのスクレイピングをするライブラリを公開してみた

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

HTMLやXMLを整形・解析して、必要なデータを取り出すことををスクレイピングといいます。副業のお仕事関係で、Google Apps Scriptを使い、HTMLをスクレイピングする作業が必要になったのでいろいろ調べていたのですが、せっかくなのでHTML・XMLをスクレイピングするためのGoogle Apps Scriptのライブラリを作成してみました。

コードはこちらの記事を参考にさせていただきました。ありがとうございます。

HTML/XML Parser for Google Apps Scriptのご紹介

ライブラリの基本的な情報は以下のとおりです。

ライブラリ名:
HTML/XML Parser for Google Apps Script

GitHub:
https://github.com/tadaken3/html-parser-gas

スクリプトID:
1Jrnqmfa6dNvBTzIgTeilzdo6zk0aUUhcXwLlQEbtkhaRR-fi5eAf4tBJ

まず、スクリプトIDを使って、ライブラリを追加します。 Google Apps Scritpのメニューバーの「リソース>ライブラリ」と辿っていきます。

f:id:tadaken3:20170626232437p:plain

すると以下の画面が出てくるのスクリプトIDを入力してください。

f:id:tadaken3:20170626232501p:plain

これでライブラリが追加されました。

parserライブラリの使い方

ライブラリの使い方は簡単です。以下の3つのメソッドで要素を取得します。

  1. IDを指定するgetElementByIdメソッド
  2. クラス名を指定するgetElementByClassNameメソッド
  3. タグを指定するgetElementByTagNameメソッド

IDを指定するgetElementByIdメソッド

getElementByIdメソッドでは、ID名を指定して要素を取得します。

書き方

parser.getElementById(対象の要素,ID名)

実際のコードはこのようになります。

var src = '<doc>'
        + '  <title id="doc-title">Anime Japan Expo</title>'
        + '  <chapter class="chapter">'
        + '    <paragraph class="paragraph">Do you like Anime?</paragraph>'
        + '  </chapter>'
        + '</doc>';

function parseXMLById() {
  var doc   = XmlService.parse(src),
      xml   = doc.getRootElement(),
      title = parser.getElementById(xml, 'doc-title');
  Logger.log(title.getValue());
}

するとidがdoc-titleの「Anime Japan Expo」がログに出力されます。

クラス名を指定するgetElementByClassNameメソッド

getElementByClassNameメソッドでは、クラス名を指定して要素を取得します。

書き方

parser.getElementByClassName(対象の要素,クラス名)

実際のコードはこちらです。

var src = '<doc>'
        + '  <title id="doc-title">Anime Japan Expo</title>'
        + '  <chapter class="chapter">'
        + '    <paragraph class="paragraph">Do you like Anime?</paragraph>'
        + '  </chapter>'
        + '</doc>';

function parseXMLByClassName() {
  var doc   = XmlService.parse(src),
      xml   = doc.getRootElement(),
      paragraph = parser.getElementsByClassName(xml, 'paragraph');//パラグラフを指定してます。
  Logger.log(paragraph[0].getValue());
}

クラス名がparagraphの「Do you like Anime?」がログに出力されます。

タグを指定するgetElementByTagNameメソッド

最後に、タグ名を指定するgetElementByTagNameメソッドです。

書き方

parser.getElementByTagName(対象の要素,タグ名)

サンプルコードはこのようになります。

var src = '<doc>'
        + '  <title id="doc-title">Anime Japan Expo</title>'
        + '  <chapter class="chapter">'
        + '    <paragraph class="paragraph">Do you like Anime?</paragraph>'
        + '  </chapter>'
        + '</doc>';

function parseXMLByTagName() {
  var doc   = XmlService.parse(src),
      xml   = doc.getRootElement(),
      title = parser.getElementsByTagName(xml, 'title');
  Logger.log(title[0].getValue());
}

こちらの場合は、titleタグの「Anime Japan Expo」がログに出力されます。

最後に

今回は、Google Apps ScriptでHTMLやXMLをパースするライブラリ「parser」についてお伝え致しました。HTMLやXMLをパースするイメージを掴んでいただけたでしょうか。Google Apps Scriptでスクレイピングをする際にきっと役立つと思います。:1

【追記 2017/01/23】ほかにも良さげなPaserライブラリを見つけました

「Parser」という同じ名前のライブラリを発見しました。Parsingの仕方が異なりますが、こちらも便利そうです。 ぜひ、参考にしてみてください。

www.kutil.org

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

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

tadaken3.hatenablog.jp

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

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


  1. 今回掲載したライブラリは自由に使ってもらって構いません(MIT ライセンス)。

はじめて副業で受託開発をやってみた!

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

現在、本業の傍ら「いつも隣にITのお仕事」というブログで、Google Apps Scriptや仕事効率の記事を執筆しています。

今回は、ブログがきっかけで人生はじめての受託開発の仕事を受注しましたので、その経験をまとめていきたいと思います。はじめての副業、はじめての受託開発の経験になります。

受託開発の経緯

「いつも隣にITのお仕事」プランノーツが運営しています。プランノーツは「IT×働き方改革」をミッションに掲げる会社で、Google Apps Scirptなどで仕事を効率化するためのツールを開発したり、講演・コンサルティングをおこなっています。

今やITやWEBサービスの進化により一昔前よりも格段に簡単にお仕事ができるようになりました。 そしてその多くのツールは比較的安価に手に入れることができます。 しかし皆さんは本業のビジネスでお忙しい。プランノーツが皆さまの働き方改革を支援致します。 引用:プランノーツ ミッション

僕自身も定時に仕事を終わらせたいと思っている人間なので、プランノーツのミッションに共感し、応募させていただきました。

今回は「いつも隣にITのお仕事」がきっかけになり、お仕事をいただくことができました。

プランノーツでのお仕事

プランノーツでのお仕事は、大きく2つあります。

  1. ブログ執筆作業
  2. 開発案件へのアサイン

ブログ執筆

常に開発案件があるわけではないので、普段はプランノーツの集客力あげるために、仕事効率化やGoogle Apps Script等に関するブログ執筆をおこなっています。企画から自分で考え、納期も自分で設定します。もちろん、ブログ執筆にも報酬は発生します。基本リモートワークなので、やり取りはチャットワークでおこなっています。

ブログ執筆時はWEBライティングの指導を受けれるのでとても勉強になります。ノルマがあるわけではないのですが、習慣化したいので僕はすくなくとも週1本以上は執筆するように心がけています。

以前にも、何回かブログ運営にはチャレンジしてたことがあり、その時は3日坊主になっていたのですが、現在は4ヶ月ほど継続して続いています。

継続している理由としては、

  • 自分で設定したとはいえ「きちんと締切がある」
  • 編集してくれる人がいる

が大きいのかなと考えてます。他のパートナーさんも含めて、周りにブログを運営している人も刺激になっています。

あと、ブログ主のタカハシさんがよく焼き鳥をおごってくれます。焼き鳥うまい。

開発案件

プランノーツが受注した仕事の中から、タカハシさんがいい感じに見繕って開発案件を回してくれます。開発案件はブログとは別に個別に契約となります。そのため、仕様を確認し、見積もりをし、見積書を作成して業務委託という流れになります。案件はGoogle Apps ScriptやExcel VBAを使ったツールを作ることが多いみたいです。

今回は初めてだったこともあり、とくに工数見積と単価が一番悩みました。

お問い合わせフォームを使ったシステムだったのですが、最初に実装が重たそうなところ、まだ挑戦したことがない機能を試しに実装して、問題点を明らかにしてから工数見積をおこないました。今回はこれがたまたまうまくハマりました。実際に、実装してみて思わぬ落とし穴があったんですが、そこを事前に発見しうまく見積もりに含めることができたのは大きかったです。ただそれでも、結構見積もりと実際の工数がカツカツだったので、次回はもうちょっとバッファーみようかと思います。

単価というか相場は、よくわかってないので、結構えいやーって決めました。このあたりはスキルをアップしつつ単価を上げていこうと思います。将来的には、交渉スキルもあげないと。

油断するとものすごい時給が下がっちゃうので、見積もりホント大事だなと実感しました。

あと、ブログ主のタカハシさんがよく焼き鳥をおごってくれます。焼き鳥うまい。

f:id:tadaken3:20170626171549j:plain

実際の開発業務

とてもワクワクしました。物作るのはすごく楽しいですね。金曜日にお話を頂いたこともあり、あがったテンションのまま、一気に開発しました。まだ、細かい所の修正はあるのですが、基本機能は一通り実装できたので一安心しています。

今回は土日や平日の早朝をうまく使えたのですが、案件が増えてきた場合、本業に支障がでないようにスケジュール調整もしていかないといけないなと思っています。ぼくはまだ独身のなので、時間を確保しやすかったのも大きかったです。

東京に出できたばかりで、友達が少ないので。リア充爆発しろ。

まとめ

あらためて、工数見積もりの重要性が身にしみてわかりました。副業であっても、フリーで仕事を受けた場合は、すべて自分でスケジュー管理をしなければなりません。せっかくの仕事も、工数見積もりをみあやまって、時給が下がってしまうともともとも子もありません。

繰り返しになりますが、

見積もり、とても大事。バッファーはちゃんと見積もる。

最後に、会社を頼らず自分の力だけで、お金を稼ぐことができたのは、初任給をもらった時以上の感動がありました。この感動は、初めて「ラプラス」を捕まえたときに匹敵します。

次回も、副業をする上での学びや工夫したポイントをまとめていきたいと思います。 どうぞ、お楽しみに!

コマンドラインからSlack、チャットワーク、LINEに簡単に通知が送れるNotifyというツールをリリースしました

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

以前お伝えしていたとおり、Go言語の勉強を進めています。

tadaken3.hatenablog.jp

今回はコマンドラインからSlack、チャットワーク、LINEに簡単に通知を送るツールを作成しましたので、ご紹介を致します。

Notifyの機能について

機能はとてもシンプルです。百聞は一見にしかず。こちらのデモをご覧ください。コマンド一発で、Slack、LINEやチャットワークに通知を送ることができます。デモではSlackしか載せていませんが、もちろんLINEやチャットワークにも通知が送れます。

f:id:tadaken3:20170619230038g:plain

Notifyを利用するには

せっかくなので、利用方法について簡単にご紹介させていただきます。 Notifyを利用いただくには、まず、こちらからご自身の環境にあったファイルをダウンロードしてください。

リリースページ

ダウンロードしたあとzipファイルを解答すると、notifyの実行ファイルが入っています。 こちらを実行ファイルをパスがとっているところにファイルを保存してください。

パス?って何って方は以下の記事を参考にしてみてください。

あとはホームディレクトリに、「.notify.yaml」という設定ファイルを作成します。 この設定ファイルに、各チャットツールのアクセストークンやルームID、チャンネルなどの情報を保存します。

line_access_token: XXXXXX
chatwork_access_token = XXXXXX
room_id = XXXXXX 
slack_token = XXXXXX 
channel = genneral

アクセストークンは設定ファイルに保存しなくても、コマンドラインのオプションで指定することもできます。 詳しい説明は以下のページにも記載していますので、こちらもご覧ください。

github.com

Notifyを作ろうと思った理由

「Notfiy」を作ろうと思ったきっかけは、現在、本業やブログ執筆でいろんなチャットサービスを利用しています。案件やプロジェクトによって、利用しているチャットツールが異なっているので、ひとまとめにして簡単にメッセージが送れるようにしました。

作ってみて勉強になったこと

今回は、コマンドラインツールを作成を目的にしたいたこともあり、vimというエディタで開発しました。vimを本格的に触ったので、最初は四苦八苦しながらでしたが、デスクにチートシートを貼り付けて少しずつコマンド覚えていきました。まだまだなれないことも多いですが、一回使い出すととても便利です。なにより、コマンドプロンプトやターミナルで使えるエディタというのは便利でした。

また、作成したコードをGithubにあげるだけでなく、Githubのリリースページに実際のリリースページを置くところまでやってみました。

今後やりたいこと

とりあえず、作ってリリースしたので、動くことは動くのですが、機能としてはまだまだブレッシュアップが必要だなと思っています。とりあえず、画像や添付ファイルの送信なんかにも対応していきたいと考えています。

また、コードはある程度書けるようになったのですが、設計・デザインパターンの勉強がきちんとできていないので、このあたりはもうちょっときれいに作り変えたいと思っています。

あと、テストコードもきちんと書けていないので、テストの技法なども勉強して、ちゃんとテスを書けるようにならないとなと感じました。

もし、要望や改善提案などあれば、Pull Requestいただけるとうれしいです。

「ExcelVBAを実務で使い倒す技術」、いよいよ発売です(書評)

f:id:tadaken3:20180325122314p:plain

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

今回「ExcelVBAを実務で使い倒す技術」タカハシさんに献本いただきましたので、早速紹介したいと思います。ありがとうございます。

f:id:tadaken3:20170424194727j:plain
献本いただいたVBA本

気になる目次も紹介します。

  • 第1章 脱初級への第一歩は「道具であるVBE」を使いこなすことから
  • 第2章 イミディエイトウィンドウの神髄
  • 第3章 バグを制するものはVBAを制する
  • 第4章 システムの成功と失敗の分かれ目は設計にあり
  • 第5章 できる担当者のコーディングは発想からして違う
  • 第6章 リーダブルコードでVBAを資産化する
  • 第7章 「変化」への耐久性を持たせるためのVBAの作法
  • 第8章 VBAは個人作業のみならず「チーム」にも革命をもたらす

ExcelVBAを実務で使い倒す技術は良き先輩となる本

この本の感想を一言で述べるとプログラミング初心者にとっての「良き先輩となる本」です。とくに、プログラミング経験がなく、周りに開発者の先輩・メンターがいない状態で、VBAでプログラミングを学ぼうと思う初心者の方にとっては、最良の先輩となるはずです。

例えば第3章では「エラーコードの読み方」がまとめられています。この手の内容は、開発者であれば、現場の先輩などから、おのずと習得して行くことだと思います。しかし、独学だとそうは行きません。そこで、本書が役に立つのです。

他にも、「検索の上手な使い方」や「読みやすいコードを書くためのコツ」といった、入門書には書いていないけど、開発をする上でとても役に立つ情報がこれでもかというくらい盛り込まれています。

初心者だけでなく、再入門にも!

また、初心者だけでなく、今まで何度かVBAやプログラミングに挑戦したけど、うまくいかなかったという方にも本書はとてもおすすめです。基本的なループや条件分岐といった文法を超えて、実際にプログラミングを仕事で役立てる方法を、学ぶことができます。

今までバラバラだった知識が、つながって一つの線になる感覚です。基本となる軸の通った知識があれば、どんな形でも応用ができるようになると思います。本書を読めば、コピペや写経から脱却して、オリジナルのコードを書けるようになるはずです。

まとめ

個人的には第7章『「変化」への耐久性を持たせるためのVBAの作法』がとても参考になりました。こういった作ったコードを、長期的に資産として活用していくための視点もふくまれているため、ほんとにためになる本だと思います。

ぜひ、書店やネット通販を通じてお手元にどうぞ。

ExcelVBAを実務で使い倒す技術

ExcelVBAを実務で使い倒す技術

GO言語、はじめました。

f:id:tadaken3:20180325123210p:plain

みなさん、こんにちは! タダケン(@tadaken3)です。 すっかり更新が滞ってしまいました。

突然ですが、GO言語に入門しようと思ったので、その経緯をブログに綴っておこうと思います。

なぜ、GO言語なのか

会社では基本、Python・Rなどでオレオレツールを作っていたのですが、他の人に使ってもらう際に、PythonやRをインストールしてもらわないといけないので、何かいい方法はないかなと思っていたら、GO言語にたどり着きました。

プログラミングは、基本、ネット記事や書籍をあさりながらやっていたので、独学だったということもあり、自分用のツールばかり作っていたのですが、そろそろ、一般に公開できるものが作りたいなと思ったのもきっかけです。

GitHubなんかに自分の作ったツールを公開できれば、かっこいいなあと。

f:id:tadaken3:20170424210747j:plain
Go言語を学ぶために購入した本

GO言語のメリット

node.jsなどとも迷ったのですが、以下の2点で、GOに決めました。 結構単純な理由です。

言語仕様のシンプルさ

GOは、機能の割にはシンプルな言語仕様で作られています。そのあたりがPythonに近いのかなと思って、勉強することにしました。

シングルバイナリの手軽さ

GOで書かれたプログラムは基本的に単体で実行可能なシングルバイナリとして提供できます。いったんコンパイルしてしまえば、MacやLinux、Windowsといった様々な環境で利用することができます。そのため、簡単なCLIツールなどを作るのに向いています。

まとめ

せっかくなので、このブログで定期的に学習の予定を公開できればいいなと思っています。 もしよかったら、アドバイスだったり、おすすめの書籍など教えてもらえるとうれしいです。

Golangを学んだことを活かしてCLIツールを作ってみた(追記)

GoでLINEやSlack、チャットワークにメッセージを送れるコマンドラインツールを作ってみました。

tadaken3.hatenablog.jp

実際作ってみて、言語仕様のシンプルさを実感しましたし、配布も簡単なのでとてもいいですね。

読者登録をお願いします

本ブログではプログラミングについての記事を公開しています。よろしければ読者登録していただけると更新の励みになります。ぜひ一緒にプログラミングを学びましょう。

本記事をレバテックさんが取り上げていただきました。

Go言語を勉強中という方に読んでほしい記事まとめ

他にもGo言語を学ぶ上で参考になりそうな情報がまとまっています。 こちらも参考に!

TECH::CAMPの無料体験会に参加してきた

WEBサービスを作るにあたって、プログラミングだったり、サーバー構築だったり、いろいろと学ぶことがたくさん。今までは、基本的に独学だったんだけど、効率よく学習をすすめたいなと思って、ネットを漁っていたら、TECH::CAMPという、プログラミング学習サービスを見つけた。無料の体験会があったので、参加してみた。

TECH::CAMPの概要

TECH::CAMPの特徴として

  • オンラインのカリキュラムがある
  • カリキュラムはTwitterのようなWEBサービスをつくったり、iPhoneアプリを作ったりなど、幾つかのコースがある
  • オンラインだけでなく、実際の教室にいってそこでなんでも質問できる
  • 期間は一週間、一ヶ月、二ヶ月と選べる
  • 受講後一年間は、技術的なアドバイスを受けることが可能

無料体験会の内容

基本的には、WEB上のカリキュラムにそって、学習を進めながら、コーディングをしていく。実際にエディタにコードを入力していきながら、ターミナルで実行していく感じ。コンテンツがすごい洗練されているのか、内容は非常に分かりやすかった。

わからないところが簡単に聞けるっていうのがすごい安心感ある。そして、こちらがお客さんなので、非常に丁寧に教えてくれる。あと、基本褒める。

実際の体験会では、簡単なじゃんけんゲームをつくるところで終了。

janken.rb

puts "数字を入力したら、じゃんけんゲームが始まります"
puts "[0]:グー\n[1]:チョキ\n[2]:パー"
user_hand = gets.to_i
cpu_hand = rand(3)

#相手の手を表示させる
if cpu_hand == 0
    puts 'CPUの手は:グー'
elsif cpu_hand == 1
    puts 'CPUの手は:チョキ'
elsif cpu_hand == 2
    puts 'CPUの手は:パー'
end

#結果を表示
if cpu_hand == user_hand
    puts 'あいこ'
elsif (cpu_hand == 0) && (user_hand == 2)\
      ||((cpu_hand == 1) && (user_hand == 0))\
      ||((cpu_hand == 2) && (user_hand == 1))
    puts '勝ち'
else
    puts '負け'
end

参加してみて

体験してみて、思ったのが、プログラミングに集中できる環境が手に入るのが非常に大きい。来ている人は、みんな、高いお金を出しているだけあって、集中して、プログラムを書いたり、勉強したりしている。あと、詰まった時にすぐに聞ける人がいるってのは時間短縮につながって良さそう。時間があれば、オリジナルのWEBサービスを作ってもみてもらえるみたいやし。申し込みしてみても良さそうな印象。

Twitterからキーワード検索して画像を取得する

タイトルの通り、Twitterの検索APIを利用して、特定のキーワードの画像をダウンロードするためのスクリプトになります。

https://github.com/Code-Hex/twippai 参考にしたのはここ。

実行環境 OS:OX X EI Capitan(10.11.5) Python:2.7.10

標準ライブラリの他に、こららのインストールする必要があります。

  • requests
  • requests_oauthlib
#!/usr/bin/env/python
# coding: utf-8

import os
import json
import time
import requests
from hashlib import md5
from requests_oauthlib import OAuth1

def md5hex(str):
    a = md5()
    a.update(str)
    return a.hexdigest()
    
folder = './data'

#パスが存在していればTrueを返す
path = os.path.exists(folder)

if not path:
    os.mkdir(folder)

consumer_key = ''#your key
consumer_secret = ''#your key
access_token = ''#your key
access_token_secret = ''#your key

#Twitter APIについて以下参照
#https://syncer.jp/twitter-api-matome/get/search/tweets
url = 'https://api.twitter.com/1.1/search/tweets.json'
oauth = OAuth1(consumer_key,consumer_secret,
                access_token,access_token_secret)
                #署名メソッドの指定。なくても動いた
                #signaturemethod = 'HMAC-SHA1')
                
idnum = ''
count = 1
while count <= 10:
    #Twitterの検索演算子も使える
        query_form = {'q' : u'メタモン filter:images min_retweets:1',
                                        'lang' : 'ja',
                                        'count' : 100,
                                        'result_type' : 'recent',
                                        'max_id' : idnum}
        uri = requests.get(url, auth = oauth, params = query_form)
        json_loads = json.loads(uri.content)
        
        
        for data in json_loads['statuses']:
            if 'media' not in data['entities']:
                continue
            else:
                urls = data['entities']['media']
                media_urls = urls[0]['media_url']#画像のURLを取得
                downloads = requests.get(media_urls).content #画像のDL
                print media_urls + " " + str([count])
            #%sは文字列として置換
            
            #URLを16進数形式の文字列に返して、ファイル名としている?
            filename = '%s.jpg' % md5hex(urls[0]['media_url'])
            filepath = '%s/%s' % (folder, filename)
            
            images = open(filepath, 'wb')
            images.write(downloads)
            images.close()
            count += 1
        idum = data['id']
        time.sleep(1)

JavasriptでMacを制御

YosemiteからJavascriptで、macを制御できるようになったそうな。
以前からApplescriptの延長だと。

試しにTwitterのIDを取得してみた。

var Tw = Application("Twitter");
Tw.includeStandardAdditions = true
Tw.activate()
var Acc = Tw.accounts[0];
var Uname = Acc.username();

Tw.displayDialog(Uname)


参考にしたのはこの辺。

クラウドワークスを使って仕事をしてみた。

お盆休みで、実家に帰ってきており、少しまとまった時間ができたので、「クラウドワークス」を使って、簡単な仕事を受注してみた。クラウドワークスは、インターネット上で、仕事を受注・発注しているサービス。おもにプログラマーやデザイナーなどWEB制作やアプリ開発の仕事が多いみたい。最近では、主婦の登録も多いようで、ライティングやデータ入力といった仕事もある。

crowdworks.jp

 

ぼくはとくにプログラムやデザインができるわけではないので、簡単なライティングな仕事とスマートフォンアプリのキャッチコピーを考えるコンペに応募してみた。

事前に、登録だけは済ませていたので、仕事の受注は、簡単に終わった。今まで気がつかなったのだが、仕事を発注している人にメッセージを送ることで仕事を受注できるよう。メッセージを送ると、作業画面に移行する。そこでライティングだったら指定された文章を入力する。一応時間が決められていて、(ぼくが受けた仕事の場合)一時間以内に作業を完了しないといけないらしい。時給は低いけど、結構簡単。

数をこなせばそれなりに稼げそう。以前、WBSでも、この手のサービスの特集やってたけど、スキルさえあれば、自宅なんかで仕事をして生活する環境が手に入りそう。自分もそうなれたら理想だけど。

tadaken3.hatenablog.jp

 

 

今治の「すごいタオル」は本当に凄かった

愛知県今治市に、ふるさと納税して、「すごいタオル」をもらった。今治市は日本一のタオル生産地で、国内のタオル生産量の5割を占めている。品質の高さが評価され、経済産業省の「JAPANブランド育成支援事業」に認定され、海外にも輸出されている。数年前にちょっとしたブームになっていたこともあり、「今治タオル」の評判はぼくも何回か耳にしていた。ただ、買うまでには至っていなかっただが、ふるさと納税のお礼の品として、もらえるというのを知り、試してみた。

 

実際使ってみて感じたのが、とにかく吸水性がすごい。抜群の吸水性だ。まだ新しいからかもしれないが、一回拭っただけ、お風呂上りでビショビショの体から、さっぱりと水分をぬぐってくれる。

 

タオル自体も普通に家にあるバスタオルより2回りほど大きく、厚さもかなり分厚い。ホテルにあるようなボリュームたっぷりのゴアっとしたタオルだ。ぼくは身長180cmと少し大きい体つきなのだが、それでもすっぽりと体を包みこむことができる。肌触りもふらふらしていて軽いのものプラスポイントだ。

「すごいタオル」の実売価格は5400円(税込)、ふるさと納税でもらう場合は30000円以上の寄付が必要となる。還元率は18%と、ほかのふるさと納税とくらべるとやや還元率は低い。お肉やお米だと5割を超えるケースもままある。とはいえ、食べ物の場合、時折困るのが量の多さだ。5キロほどお肉が来たり、果物が3キロ分来たりしても、ぼくのような一人暮らしだと、消化しきれない。そういった意味でも、賞味期限のない、この「すごいタオル」はありがたい。

ふるさとチョイス(ふるさと納税ポータルサイト)はこちら。

www.furusato-tax.jp

 

商品販売ページはこちら。

imabari-towel.jp


全社員、定時退社を実現する会社「クラシコム」

www.lifehacker.jp

北欧雑貨のECサイトを運営する「クラシコム」では、18時退社がデフォルトとなっている。ただ、のんびり働いているわけではなく、定時までかなり集中して仕事していよう。こんな働き方に憧れる。採用のページをみたら、残念ながら2/15に応募が締め切られていた。

定時退社をするためにいくつかポイントがあるようだが、気になったの以下の点

  • やる前に本当に必要か考える事(やらなくてもいいことを上手にやっても意味がない)
  • 仕事を詰め込みすぎない
  • エラーに寛容になること(エラーを防ぐために過大なチェック作業が必要になるのなら、ある程度のエラーを許容する)

とくに仕事を詰め込みすぎないってのは自分も戒めないとなとおもった。同様な会社にトリンプがある。トリンプもほとんど残業がない。以前、社長を務めていた鳥越さんの影響だったと思われる。鳥越さんは海外での職務経験が長かったと記憶している。海外での職務経験がある人がトップにたつといいのかもね。