読者です 読者をやめる 読者になる 読者になる

takedajs ログ

備考録

ポモドーロ・テクニックを1年間やり続けてみた。

生産性

生産性を上げたいと考えてたときに、ポモドーロ・テクニック(以下、ポモドーロ)を知りました。仕事とプライベートで1年間やり続けてみたので、ポモドーロを使った自己流のやり方やおすすめのタイマーを紹介します。

ポモドーロ・テクニックとは

ご存知の方も多いと思いますが、改めて記述します。

25分の集中した時間を1ポモドーロとし、1ポモドーロが終わるたびに5分の休憩します。 そして、4ポモドーロが終わったら、15分程度の休憩を入れる

自己流のやり方

ポモドーロをやり初めてから色々と試行錯誤して、自分にあったやり方にアレンジしていきました。以下、ブログを書いて公開するまでのタスクを例に上げて、ポモドーロを利用した自己流のやり方です。

1. ブログを公開するまでの段取りを考え段取りリストを作成する

以下のように段取りリストを書きます。作業内容の横には、ざっと作業時間を書きます。

■ブログを公開する
15 書くお題を考える
15 箇条書きで内容を書く
50 詳細を書く
10 画像を用意する
10 はてブの管理画面で清書する
5 公開する

作成した段取りリストは、いつもデスクトップ付箋に記述しています。 ショートカットキーで最前面に付箋が表示され、すぐに段取りリストが確認できるのでオススメです。

2. 25分でタイマーをスタートする

先程の段取りリストを確認して、25分でどの作業までできるかを軽く把握します。
そして、作業に入る前に25分でタイマーをスタートします。

Macで作業しているのですが、いつもこのタイマーを使ってポモドーロをしてます。(オススメです。)

Activity Timer

Activity Timer

  • HAPPY CODING UG (haftungsbeschränkt)
  • 仕事効率化
  • 無料

f:id:takedajs:20170310121106p:plain

Activity Timerの良い点
・余計な機能がなくて良い。シンプルイズベスト!
・メニューバーに時間が表示され、常に時間を確認できる。
・ポモドーロ専用タイマーではないので、25分が終わっても自動で5分休憩のカウントがされない。ただ逆にそれが良くて、「タイマーをスタートしたら集中するぞ」と考えるようになり、自分には合っていた。

3. 25分のタイマーが終了するまで作業に集中する

仕事中は、メンバーから質問など話しかけられることがあると思いますが、その時はそちらを優先します。
差し込みのタスクを振られたときは、付箋に内容を簡単にメモしておくだけです。基本的に、タイマーをスタートする前にこの25分でやると決めたことだけを行います。

4. 休憩

25分のタイマーが終了したら、たとえ今やっている作業が順調にでき気持ちが乗っていても、強制的に休憩を取ります。これがかなり重要だと思います。
作業し続けると疲れが貯まってくるので、強制的に休憩を取ることで、結果的に長い時間を集中して作業できるようになります。

Activity Timerでの25分終了のアラート表示はこんな感じです。 プッシュ通知がくるので、終了を気づけます。

f:id:takedajs:20170310121117p:plain

正しいポモドーロのやり方だと5分を計って休憩を取りますが、時間の設定が面倒なので僕は時間を計っていません。

休憩中はやること
・トイレに行く or ウォーターサーバーに水分を取りに行く。
・前のポモドーロでやり終えた作業を段取りリスト上で以下のようにインデントする。これをやることで、作業が完了しているものと完了していないことが明確に分かります。(取り消し線でも良いですが、インデントはtabボタンを押せば簡単にできるので)

■ブログを公開する
    15 書くお題を考える
    15 箇条書きで内容を書く
50 詳細を書く
10 画像を用意する
10 はてブの管理画面で清書する
5  公開する

5. 2からまた始める

このように25分+休憩を1セットとして行います。 3セットが終わったら何かしら気分転換になるものを入れてます。(MTGやコーヒーブレイク)

やり続けた感想

仕事とプライベートで1年間やり続けての感想です。

良い点

作業にリズムがでるようになった
 25分+休憩という決まったリズムで作業しているため、その時の気分に関わらず淡々と作業ができます。

短時間で集中できるようになった
 25分のタイマーをスタートさせる前に「タイマーをスタートしたら集中するぞ」と考えるようになり、スタートさせた瞬間からすぐに集中モードに入れるようになりました。

長時間集中できるようになった
 気分が乗っているときは疲れていないように感じますが、時間が経つにつれて集中力が落ちてきます。強制的に休憩を入れることで、長時間集中できるようになりました。

悪い点

ポモドーロなしでは作業ができなくなった
 これに尽きます。体が完全にポモドーロ仕様になっています。25分のタイマーをスタートせずに作業をすると体がそわそわします。

まとめ

休憩時間など細かく取るようになりましたが、結果的に生産性がかなり上がったと思います。今回書いた内容は色々と試してみて僕に合ったやり方なので、皆様も実際にポモドーロをやってみて自分に合ったやり方にカスタマイズしてみてください。
是非、良いポモドーロライフを!

mod_small_lightを利用して画像のリサイズを行う

Apache

指定したサイズで画像をリサイズするため、サーバ側でリサイズ処理を可能にするApacheモジュール「mod_small_light」を導入して試してみました。

同様の処理を行ってくれるmod_dimsやmod_tofuなどもありますが、Nginx版も開発されているmod_small_lightを使ってみました。

開発環境

mod_small_light利用に必要なもの

mod_small_lightを利用するために必要なものの導入や設定をしていきます。

Apacheモジュールを追加するために必要なapxsを導入。

$ sudo yum install httpd-devel

apxs導入確認。

$ ll /usr/sbin/apxs

-rwxr-xr-x 1 root root 22029  1月 12 17:09 2017 /usr/sbin/apxs

画像変換エンジンにImageMagickとimlib2を利用できるため、2つを導入していきます。

ImageMagick導入。

$ sudo yum -y install ImageMagick ImageMagick-devel

ImageMagick導入確認。

$ convert -version

Version: ImageMagick 6.7.2-7 2016-06-16 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP

imlib2導入。

$ yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/imlib2-1.4.2-5.el6.x86_64.rpm \
              http://dl.fedoraproject.org/pub/epel/6/x86_64/imlib2-devel-1.4.2-5.el6.x86_64.rpm

imlib2導入確認。

$ yum list installed | grep imlib2

imlib2.x86_64        1.4.2-5.el6        @/imlib2-1.4.2-5.el6.x86_64
imlib2-devel.x86_64  1.4.2-5.el6        @/imlib2-devel-1.4.2-5.el6.x86_64

以下の3つのモジュールが有効になっている必要があります。
rewrite、proxy、proxy_http

モジュールが有効になっているか確認。

$ apachectl -M | grep rewrite

rewrite_module (shared)

mod_small_light導入

mod_small_light導入

$ cd /usr/local/src
$ git clone https://github.com/yamac/smalllight.git
$ cd smallight
$ ./configure --with-apxs=/usr/sbin/apxs \
              --with-Wand-config=/usr/bin/Wand-config \
              --with-imlib2-config=/usr/bin/imlib2-config \
$ sudo make
$ sudo make install

パーミッション変更(すでに775の場合はやる必要がないです。)

$ chmod 755 /usr/lib64/httpd/modules/mod_small_light.so

mod_small_lite導入とApacheモジュール追加を確認

$ ll /usr/lib64/httpd/modules/mod_small_light.so

-rwxr-xr-x 1 root root 150140  2月 24 13:01 2017 /usr/lib64/httpd/modules/mod_small_light.so
$ cat /etc/httpd/conf/httpd.conf | grep small_light

LoadModule small_light_module /usr/lib64/httpd/modules/mod_small_light.so
$ apachectl -M | grep small_light_module

small_light_module (shared)

mod_small_light利用設定

指定URLでアクセス時にリサイズ画像を表示させるために、httpd.confを修正します。

httpd.confバックアップ。

$ cd /etc/httpd/conf
$ sudo cp httpd.conf httpd.conf.bak

httpd.confの任意の場所に以下を記述。

RewriteEngine on
RewriteRule ^/images/(.+)$ /images/$1 [L]
RewriteRule ^/resize/(.+)x(.+)/(.+)$ /small_light(dw=$1,dh=$2,ds=s,e=imagemagick)/$3 [P,L]
RewriteRule ^/small_light[^/]*/(.+)$ /images/$1
<LocationMatch ^/small_light[^/]*/>
    SetOutputFilter SMALL_LIGHT
</LocationMatch>

上記の記述内容の説明です。
・/iamges/画像名でアクセスされたときはリサイズしていない画像を表示。
・/resize/100x100/画像名でアクセスされたときは、100x100でリサイズした画像を表示(100は任意の数字)
・e=imagemagickを記述することで、画像変換エンジンにImagemagickを利用できます。

httpd.confを修正したので、Apacheの再起動。 *1

$ sudo service httpd restart

画像リサイズ結果

リサイズ前と後の画像を表示します。
mod_small_lightによって指定サイズにリサイズされていることが分かります。

リサイズ前(http://192.168.33.10/images/image.jpg)

f:id:takedajs:20170226193923p:plain

リサイズ後(http://192.168.33.10/resize/100x100/image.jpg)

f:id:takedajs:20170226193934p:plain

まとめ

mod_small_lightは、Apacheモジュールとして追加するだけで画像リサイズができるので便利ですね。
ただ、当たり前ですが画像リサイズの処理に時間がかかるので、画像キャッシュなどを上手く利用する必要があります。
今後は、高速なJPEG圧縮ライブラリ「Libjpeg-Turbo」を導入した状態でのリサイズや、もう一つの画像変換エンジンであるimlib2とImagemagicの処理スピードや画像リサイズのクオリティ比較などをやっていきたいと思います。

参考

mod_small_light で動的に画像リサイズ - akishin999の日記

ImageMagick + 画像サムネイル作成 Apache モジュール SMALL LIGHT をインストール - Code Life

GitHub - yamac/smalllight: The SMALLLIGHT is a module of Apache2 which provides a dynamic image transformation.

Google Code Archive - Long-term storage for Google Code Project Hosting.

*1:当初CentOS7、Apache2.4の環境でmod_small_lightの導入を考えていましたが、mod_small_light導入後のApacheの再起動が上手くできず今回の環境に変更しました。
なぜできなかったのか、未だに謎です。。。

PHPでHTTP並行リクエスト処理を行う

PHP Guzzle

PHPで複数のAPIから並行でデータを取得するために、PHPのHTTPクライアントライブラリである「Guzzle」のsendAllメソッドを利用してみました。
検証として、直列と並行でのデータ取得時間を比較しています。

今回の記事は、サーバにGuzzleが導入してある前提で書いています。
まだ導入されていない方は、こちらの記事を参考に導入まで行ってみてください。

開発環境

  • Vagrantで構築
  • OS: CentOS7
  • PHP: 5.6.30
  • Guzzle: 4.2

検証用コード

Guzzleでデータを直列に取得するパターン(send.php)と、並列に取得するパターン(sendAll.php)のコードを書きました。
コードの内容は、作成したAPIに扮したページ(api.php)から取得したデータを表示させています。

send.php(直列取得)

sendAll.php(並列取得)

api.php

send.phpとsendAll.phpとも以下のような情報が取得できます。
APIごとに配列に要素名を指定して実装しているので、APIごとのデータの扱いが簡単です。

実行結果

array(3) {
  ["no_1"]=>
  string(1) "1"
  ["no_2"]=>
  string(1) "2"
  ["no_3"]=>
  string(1) "3"
}

検証結果

直列と並列取得での処理速度の結果(3回計測の平均値)です。
APIの処理がだいたい5秒なので、計測結果から上手く並列で情報が取れていたことが分かります。

直列取得(send.php)
約15.13秒

並列取得(sendAll.php)
約5.12秒

まとめ

GuzzleのsendAllメソッドを利用することで、PHPで並行リクエスト処理を行えることが分かりました。
sendAllを利用して実装している記事が少なく、API側から取得した情報を表示するのに苦労しましたが、何とかできて良かったです。
サイトパフォーマンス的に並行処理はかなり貢献度が大きいと思うので、Guzzleで簡単にできるのはありがたいですね。

次は、Guzzle5から利用できるようになった、非同期処理ができるGuzzle Promiseを試してみたいと思います。

参考

PHPでHTTPの並行ダウンロードを実現する(Guzzle編) - hnwの日記

Clients — Guzzle Documentation

Guzzle Promiseを使った 非同期処理によるAPIコールの高速化 - SSSSLIDE

ComposerでGuzzleを導入する

PHP Guzzle

ComposerでGuzzleを導入して、動作確認までを書きました。
guzzleのバージョンは4系を導入しています。

開発環境

  • Vagrantで構築
  • OS: CentOS7
  • PHP: 5.4.16
  • Guzzle: 4.2

Composer導入

curl -sS https://getcomposer.org/installer | php

Guzzle導入

Guzzleバージョンは以下のサイトで確認できます。
https://packagist.org/packages/guzzlehttp/guzzle

ComposerでGuzzle(ver4.2)を導入。

php composer.phar require guzzlehttp/guzzle:~4.2

※3系を入れる場合は、guzzlehttp/guzzleの箇所をguzzle/guzzleに書き換えます。

composer.jsonに記述されたことを確認。

{
    "require": {
        "guzzlehttp/guzzle": "~4.2"
    }
}

Guzzle動作確認

index.phpでは、Guzzleを利用してresponse.phpの内容を取得しています。

index.php

<?php

require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new GuzzleHttp\Client();

$res = $client->get('http://192.168.33.10/response.php');

$body = $res->getBody();

echo $body->getContents();

response.php

<?php

echo "Guzzle動作確認成功";

以下、index.phpの実行結果です。
response.phpの内容が取得でき、Guzzleが正しく動作していることが確認できました。

f:id:takedajs:20170204181442p:plain

最後に

Guzzleの導入ができました。
次は、Guzzleの並列で情報を取得できるsendAllメソッドと Guzzle Promiseをそれぞれ検証してみたいと思います。

仕事の生産性が上がる5つの本

作業効率

少ないメンバーのプロジェクトに配属され、 エンジニアとしての自分の生産性がチームに大きな影響を与えるポジションにつきました。

チームに貢献したい気持ちがとてもあり、がむしゃらに働きました。 ただ、生産性は向上せず、仕事量を働く時間を増やすことでカバーしていました。

このままではプライベートが疎かになってしまうと考え、仕事の生産性に関する本を読み漁りました。 結果として、「少ない時間でこれまで以上の仕事量をこなせるようになった」と実感しています。

僕自身、まだまだ仕事は全くできないですが、 仕事に対する考え方や行動が変わるきっかけになった本を5つ紹介します。

少しでも参考になりましたら嬉しいです。

紹介する本

  1. デッドライン仕事術 (作者: 吉越浩一郎)
  2. 気力より体力 一流のコンディションを手に入れる (作者: 吉越浩一郎)
  3. ゼロ秒思考 頭がよくなる世界一シンプルなトレーニング (作者: 赤羽雄二)
  4. エッセンシャル思考 最少の時間で成果を最大にする (作者: グレッグマキューン)
  5. 自分の時間を取り戻そう (作者: ちきりん)


デッドライン仕事術 (祥伝社新書)

デッドライン仕事術 (祥伝社新書)

デットライン仕事術の二つのポイント
① 毎日、「お尻の時間」を決めて仕事をする(ダラダラ残業禁止)
② すべての仕事に「締切日」を入れる

この二つは、「就業時間も仕事も、すべて締切を設定する」と一つにして言い換えることができる。働く時間にも、仕事にも「締切」を設定して、それを必ず守ることでしか仕事の効率は上がらないし、逆をいえば、「締切」を設定して守るだけで、効率は飛躍的に良くなるのだ。

この本を読んだときに、自分が今まで考えてた仕事観と全く違くて衝撃を受けたのを覚えています。
仕事を終わらすためにもっと残業して働かないと、という考えで時間ばかりかけていました。
この本を読んでからは、「細かい仕事でも全てにデットラインを設定すること」、「時間をかければ良いアウトプット出せるわけじゃない、むしろ少ない時間で締切があった方が良いアウトプットが出せる」の二つを意識して仕事をすることで、目の前のことに集中して仕事ができるようになり、限られた時間でアウトプットを出すことができるようになりました。


気力より体力 一流のコンディションを手に入れる

気力より体力 一流のコンディションを手に入れる

気力が沸かないと自覚しているビジネスパーソンに必要なのは、まず、体力なのです。
もっと仕事で成果を出したいのに気力が足りないと感じているなら、体力をつけるべきです。
トライアスロンを完走できる体力のことではありません。高い成果を出せるよう、集中して仕事ができる力のことです。
多くのプロにとっては、トライアスロンを完走できる体力より、週5日、1日8時間、徹底してベストパフォーマンスを発揮できる体力の方が重要です。
ですから、どんなに見た目がマッチョでも仕事の体力がまったく不足しているということも、逆に、一見、普通の外見でも、仕事に必要な体力はマッチョな人以上に十分にみなぎっていることもあり得ます。
これも長年、いろいろな人と仕事をしてきた結果、見えてきたことです。

仕事に向き合う体作りについてのことが多く書かれています。この本の中で「8時間睡眠」、「肉を食べる」、「毎日一万歩を歩く」ことが大事!とあります。
今までは平均睡眠時間が6時間30ぐらいだったのを7時間30に変えたところ、日中かなり集中できるようになりました。睡眠の大切さをかなり実感しました。。。笑
また、7時間30は絶対寝るためには、「〜時までには仕事を終える必要がある!」というデットラインができたのも生産性が向上した要因かもしれません。


ゼロ秒思考  頭がよくなる世界一シンプルなトレーニング

ゼロ秒思考 頭がよくなる世界一シンプルなトレーニング

課題が整理され、問題点の本質が見え、本質的な解決策とそのオプションが浮かび、オプションのメリット、デメリットがすぐわかるようになる。
問題の本質と全体像を押さえた確実な対策が打てるようになる。
そうした思考の「質」と「スピード」、双方の到達点が「ゼロ秒思考」だ。
ゼロ秒とは、すなわち、瞬時に現状を認識し、瞬時に課題を整理し、瞬時に解決策を考え、瞬時にどう動くべきか意思決定できることだ。
迷っている時間はゼロ、思い悩んでいる時間はゼロになる。

この本では、ゼロ秒思考になる方法として「メモ書き」というものを紹介しています。
メモ書きとは、A4用紙に1分以内でタイトルとそれについて4行くらいを書きなぐるものです。1日10枚以上をやった方が良いと書いてあるのですが、僕は朝と夜に3枚ずつ書いています。
タイトルとしては、朝であれば「今日意識して行動すること」など、夜は「なぜ今日は18時に帰宅できなかったか?」など です。毎日同じタイトルで書いているのですが、その結果問題点が分かるのでオススメです。
また、限られた時間の中で考えてることを紙に書く必要があるので、物事に対しての瞬発力が上がった気がします。
メモ書きは1000枚以上書いていて効果を実感しているので、また別の機会で紹介します。


エッセンシャル思考 最少の時間で成果を最大にする

エッセンシャル思考 最少の時間で成果を最大にする

エッセンシャル思考とは、まさに「より少なく、しかしより良く」を追求する生き方だ。
「今、自分は正しいことに力を注いでいるか?」と絶えず問つづけるのが、エッセンシャル思考の生き方である。
世の中には、ありとあらゆる仕事やチャンスが転がっている。その多くは悪くないものだし、かなり魅力的な話も少なくない。
だが、本当に重要なことはめったにない。エッセンシャル思考を学べば、そうした玉石混交のなかから、本質的なことだけを見分けられるようになる。

業務で自分がやった方がいいと思ったことを手当たり次第やっていた自分にとって、考えが変わるきっかけになった本です。
この本を読んでから、「本当に自分がやるべき仕事か?」と自問自答をし、人に頼めることがあればお願いするようになりました。
エッセンシャル思考は、プライベートでも重要な考えだと思います。時間は本当に大切で有限だということが改めて考えさせられました。


なにを手に入れるにしても生産性の高い方法と生産性の低い方法があるのですから、「これを手にいれるための、もっとも生産性の高い方法はなんだろう?」と常日頃から意識的に考える癖をつければ、限られた時間やお金、そしてエネルギーを最大限に有効活用でき、欲しいモノを手っ取り早く手にいれられるようになるのです。

最近発売された、生産性を上げることの重要さや上げ方が書いてある本です。
生産性を上げずに仕事をしていくことのリスクや今後、上げざるを得ない時代になっていくことについて書いてあり、参考になります。

まとめ

今回紹介した本を読むことで、「生産性を上げることの大切さ」と「実際に上げるためには何をすれば良いか」を知ることができると思います。

僕自身これからも、少ない時間で仕事で成果を出して給料を上げ、残りの時間で家族と友達や自分の時間を大切に過ごしていけるよう、 引き続き生産性を上げるために努力していこうと思います。