takedajs ログ

備考録

仕事の生産性が上がる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枚以上書いていて効果を実感しているので、また別の機会で紹介します。


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

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

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

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


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

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

まとめ

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

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

Gulpを利用してJavaScriptとCSSを圧縮する

サイト速度を最適化するために、GulpでJSとCSSの圧縮を試してみました。

Gulpが導入されいることを前提に今回の記事を書いているので、まだ導入していない方は、以下の記事を参考に導入までを行ってください。

takedajs.hatenablog.jp

今回、JSとCSSの圧縮には、以下のプラグインを利用しました。
JS : gulp-uglify
CSS: gulp-clean-css

CSS圧縮にgulp-minify-cssを利用している記事が多くあったのですが、 gulp-minify-cssは非推奨になっており、gulp-clean-cssが推奨されてるみたいです。 https://www.npmjs.com/package/gulp-minify-css

圧縮プラグイン導入

・JSを圧縮するプラグインを導入

npm install gulp-uglify --save-dev

CSSを圧縮するプラグインを導入

npm install gulp-clean-css --save-dev

・2つのプラグインが導入されたか確認

npm ls --depth=0

圧縮タスクを作成

gulpfile.jsに以下のコードを記述します。

var gulp = require('gulp');
var uglify = require('gulp-uglify');
var cleanCSS = require('gulp-clean-css');

//JS圧縮
gulp.task('minify-js', function() {
    return gulp.src("js/*.js")
        .pipe(uglify())
        .pipe(gulp.dest('dist/js/'));
        //.pipe(gulp.dest('js')); 上書きする場合
});

//CSS圧縮
gulp.task('minify-css', function() {
    return gulp.src("css/*.css")
        .pipe(cleanCSS())
        .pipe(gulp.dest('dist/css/'));
        //.pipe(gulp.dest('css')); 上書きする場合
});

JSとCSSともそれぞれのディレクトリ配下に置いたファイルを圧縮し、dist/~に圧縮したファイルを保存しています。

タスク実行と結果

JSとCSSそれぞれの圧縮前後でのコードを比較してみます。

JSの圧縮

・ターミナルで以下のタスクを実行

gulp minify-js

・圧縮前のコード(46バイト)

function test() {
    alert('テスト');
}

・圧縮後のコード(35バイト)

function test(){alert("テスト")}

CSSの圧縮

・ターミナルで以下のタスクを実行

gulp minify-css

・圧縮前のコード(47バイト)

a {
    margin: 10px;
    text-align: center;
}

・圧縮後のコード(32バイト)

a{margin:10px;text-align:center}

まとめ

Gulpを利用して簡単にJSとCSSの圧縮をすることができました。
圧縮されたあとのコードは、ファイルサイズが小さくなっているので、ページ速度に少なからず良い影響がでますね。

GTmetrixAPIでサイトのページロード時間を取得する

サイトパフォーマンステストサービスであるGTmetrixAPIを利用して、 このブログのページロード時間を取得しました。

f:id:takedajs:20160924212252p:plain

GTmetrixAPIについて

詳しい説明は公式ページに掲載されているので、そちらをご確認ください。
GTmetrix REST API | GTmetrix

無料(Basic)プランと有料プランがあるのですが、今回は無料プランを利用しました。
以下、無料プランの内容です。

  • 1解析要求 = 1クレジット
  • 無料ユーザは毎日20クレジットを貰える
  • 最初のAPIキー作成で、テスト利用で使うために100クレジットを貰える

以下、料金プランです。

f:id:takedajs:20160924212306p:plain

GTmetrixAPIの利用方法

GTmetrixAPIを利用するために、API Keyを発行します。

まず、GTmetrixAPIのサイトからSign UPします。

f:id:takedajs:20160924210319p:plain

Sign UPが完了するとAPI keyが作成できるので作成します。

f:id:takedajs:20160924210344p:plain

API keyを作成するとAPI Keyや現在のクレジット数などの情報が表示されるようになります。
解析に必要なクレジットも100与えられていることが分かりますね。

f:id:takedajs:20160924211251p:plain

これで準備完了です。

GTmetrixAPIを利用する

このブログのページロード時間を取得します。

まず、このブログページを解析し、解析結果ページのurlを取得します。

curl --user [登録メールアドレス]:[APIキー] \
     --form url=http://takedajs.hatenablog.jp/ --form x-metrix-adblock=0 \
     https://gtmetrix.com/api/0.1/test

上記のcurlコマンドを叩いた結果です。
この解析をすることでクレジットが1減ります。

{"test_id":"GlDaptHf","poll_state_url":"https://gtmetrix.com/api/0.1/test/GlDaptHf"}

次に、解析結果ページのurlを元に解析結果を取得します。

curl --user [登録メールアドレス]:[APIキー] \
     https://gtmetrix.com/api/0.1/test/GlDaptHf

上記のcurlコマンドを叩いた結果です。
目的であったページロード時間であるpage_load_time(ms)が取れているとこが分かります。

{
    "error": "", 
    "resources": {
        "har": "https://gtmetrix.com/api/0.1/test/GlDaptHf/har", 
        "pagespeed": "https://gtmetrix.com/api/0.1/test/GlDaptHf/pagespeed", 
        "pagespeed_files": "https://gtmetrix.com/api/0.1/test/GlDaptHf/pagespeed-files", 
        "report_pdf": "https://gtmetrix.com/api/0.1/test/GlDaptHf/report-pdf", 
        "report_pdf_full": "https://gtmetrix.com/api/0.1/test/GlDaptHf/report-pdf?full=1", 
        "screenshot": "https://gtmetrix.com/api/0.1/test/GlDaptHf/screenshot", 
        "yslow": "https://gtmetrix.com/api/0.1/test/GlDaptHf/yslow"
    }, 
    "results": {
        "html_bytes": "18145", 
        "html_load_time": "317", 
        "page_bytes": "40431915", 
        "page_elements": "231", 
        "page_load_time": "8235", 
        "pagespeed_score": "18", 
        "report_url": "https://gtmetrix.com/reports/takedajs.hatenablog.jp/cXeiHRtQ", 
        "yslow_score": "46"
    }, 
    "state": "completed"
}

まとめ

登録からcurlコマンドでのページロード時間取得まで、簡単にできました。
ただ、より正確な数値を出すためには、定期的にページロード時間を取得して、取得結果の平均を出す必要があります。GTmetrixAPIを利用するためのPHPライブラリが提供されているので、それを利用して簡単なアプリケーションを作ってみたいと思います。

CodeIgniterでMemcachedを検証する

CodeIgniterでMemcachedの利用前後での速度比較を行いました。
サーバにMemcachedが導入され、PHPと連携ができていることを前提に今回の記事を書いています。 まだできていない方は、前回書いた記事を参考にMemcachedPHPとの連携まで行ってください。

takedajs.hatenablog.jp

環境

  • Vagrantで構築
  • CodeIgniter Version 3.1.0

Memcachedが利用できるか確認

application/config/memcached.phpに以下を追記します。
['memcached']以外のところはデフォルトですでに記述されています。

$config['memcached'] = array(
        'default' => array(
                'hostname' => '127.0.0.1',
                'port'     => '11211',
                'weight'   => '1',
        ),
);

適当なコントローラーに以下のようなコードを書いて、Memcachedドライバーが利用できるか確認します。

public function index() {
    $this->load->driver('cache', array('adapter' => 'memcached'));

    if ($this->cache->is_supported('memcached')) {
        var_dump("成功");
    } else {
        var_dump("失敗");
    }
}

検証用コード

Memcachedにkey名がcountのデータがないときに、1億回ループした値を保存しています。 既にデータが保存されている場合は、保存されている値を表示させます。 今回、CI_Benchmarkクラスを利用してベンチマークを取っています。

public function index()
{
    $this->load->driver('cache', array('adapter' => 'memcached'));

    $this->benchmark->mark('my_mark_start');

    if (!$count = $this->cache->get("count")) {
        $count = 0;
        //1億回ループ
        for ($i = 0; $i < 100000000; $i++) {
            $count += 1;
        }
        //キャッシュに60秒保持
        $this->cache->save("count", $count, 60);
    }

    $this->benchmark->mark('my_mark_end');

    print "カウント数:" . $count . "<br />";
    print "秒数:" . $this->benchmark->elapsed_time('my_mark_start', 'my_mark_end');
}

検証結果

Memcached利用前後での処理速度の結果です。 1億回のループ分早くなっていることが分かります。 サイトパフォーマンス的にキャッシュは本当偉大ですね。

Memcached利用前

f:id:takedajs:20160922092833p:plain

Memcached利用後

f:id:takedajs:20160922091642p:plain

まとめ

過去に検証した、CodeigniterのWebページキャッシュに比べ、apiのレスポンス単位でキャッシュができるので、使い勝手が良さそうです。 キャッシュするときのkey名や保持する時間に関しては、導入するサイト毎でどうするか考える必要がありますね。

Memcachedは少し前まではよく聞くワードだったのですが、最近はRedisの方がよく聞きます。 今後、CodeigniterのRedisを使ったキャッシュの検証やMemcachedを利用したときの違いなどを調査してみたいと思います。

takedajs.hatenablog.jp

Memcachedの導入とPHPとの連携

MemcachedCentOSに導入するところから、PHPで利用可能にするための連携までを書きました。インストールするものが多いので、適宜インストールしてください。

環境

Memcachedのインストール

Memcachedのインストール

wget http://www.memcached.org/files/memcached-1.4.24.tar.gz -O memcached-1.4.24.tar.gz
tar xvf memcached-1.4.24.tar.gz
cd memcached-1.4.24
sudo yum -y install libevent-devel
make
make install

Memcachedがインストールされたか確認

memcached -V

libmemcachedのインストール

wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar xvf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make
make install

PHPとの連携

PHPモジュールのインストール

wget http://pecl.php.net/get/memcached-2.2.4.tgz
tar xvf memcached-2.2.4.tgz
cd memcached-2.2.4
sudo yum -y install autoconf
sudo yum install php-devel
phpize
./configure --with-libmemcached-dir=/usr/local/ --disable-memcached-sasl
make
make install

php.iniに以下を追記

extension=memcache.so

php.iniのパスが分からないときは以下で確認できます。

php -i | grep php.ini

apacheの再起動

sudo systemctl restart httpd

Memcachedが呼ばれているか確認
memcachedの記述が表示されれば問題ないです。

php -i | grep memcached

Memcachedの起動と自動起動設定

Memcachedを起動

sudo systemctl start memcached

Memcachedの起動を確認

systemctl status memcached

Memcached自動起動設定

sudo systemctl enable memcached

Memcached自動起動確認

systemctl list-unit-files -t service | grep memcached

まとめ

Memcachedの導入とPHP連携ができたので、次回は実際にアプリケーション側で利用してみたいと思います。

追記 2016/9/22 アプリケーション側で利用してみました。


takedajs.hatenablog.jp