アクセス解析結果発表
今年書いたblogの記事数
45本
今年の訪問数
今年のPV数
その他の数字
記事別トップ10
1記事が全体の1/5のPVを稼ぐ結果になりました、chefの人気とともにしっかり時間をかけて書いた記事だったので嬉しい結果です
続ける仕組み
この1年を通じて続けた事が2つあります、blogと朝活です、この1年を通じて続けれた理由を少し考えて見ました
blog
blogは毎日書いたわけではなくだいたい1週間に1本のペースで書いていました 内容は仕事や朝活で使ったツールや技術のメモのような内容です
blogを続ける為の仕組みは3点ありました
定期的に書かない
ブログを書くのを例えば1日一本などと決めてしまうと書く事が億劫になってしまいます 少なくとも僕はそうでした
1週間に一本かければ書く程度の感じで始めるのが続けるコツではないでしょうか?
書く内容をメモにする
これは技術的な内容に限定されますが、なにか作業をする時にメモを取らない人はあまりいないのではないでしょうか? 僕はなにか作業を行う時は必ず作業ログをとります、作業ログには発行したコマンドやコメントが書かれておりほぼそのまま ブログに載せる事ができます、僕は普段からmarkdownでメモをするのでなおさらそのままblogに反映する事が出来ました
短いメモでも、忘れそうならblogに公開してしまう事を心がけました
アクセス解析をする
アクセス数が上がると自然とテンションが上がります、僕のブログはだんだんとアクセス数が上がって現在は一日に100pv前後が 見に来ています 1日に100pvなんて全然大した事ないですが、別にアフェリ目的ではないので続ける為のテンションを上げる材料としては十分です
朝活
僕が朝活をを始めたのは子供が出来て寝るのが早くなってしまい、夜に作業が出来なくなったので変わりに朝6:00に起きて 2時間ぐらい作業をするようにしたのがきっかけです
朝活も考えれば朝が苦手な僕が続ける為にはコツがあったのかなっと思います
以下に朝活を続けれた仕組みを3点あげます
無理しない
基本的には平日は毎朝朝活を行うけど、たとえば前の日飲みに行って寝るのが遅いかもしれません、そんな日は無理せずそ の日の朝活はやめるとか自分に対して無理をしない事が大事なポイントかと思います
やりたい事をやる
朝活では仕事は一切しません、自分のプロダクトを作りこむとか勉強したい事をやります 要するに自分のしたい事をする、仕事はしない事がポイントかと思います
目標を決める
全然達成出来ていないですが、いつまでに何かを作り上げる事を決める、もしくは勉強する事を決める
集中する事
集中する環境として朝活ももちろんですが、スタバとかマクドナルドで作業をする事を覚えました macの電源が4時間ぐらいしかもたないのでその間に集中して作業をすませますこれがなかなか集中できます
環境音楽も今年集中する為に取り入れた事の一つです
適度な雑音は作業がはかどります、これにうす〜〜〜く音楽をかけたりしています
テンションを上げる
続ける為には続ける為のテンションを保ちつづける必要があります 技術系の情報を聞いてそれを実際にやってみたりするのは結構楽しかったりします
今年はずっとrebuild.fmを聞いていました、perlのplackとかで有名な宮川さんが始めたpodcastで定期的に収録していて 今熱い系の話からガジェットネタまでを幅ひろく聞く事ができます
もうちょっとまとめてまた続ける仕組みについて書きます
でわでわ
iphoneからandroidに変わってか思ったこと
2013年の大きな変化にiphoneからandroidにスマートフォンを変えました、理由としてはandroidを触ってない事 に対しての焦りが大きな理由です
またタイミングよくnexus5がe-mobileから発売されたのも買い替えの大きな理由でした googleから直接買うかかなり迷いましたが結局e-mobileで契約しました
まぁiphoneは電話としては使えないですがwi-fiにつなげて今まで通り使ってます
開封式
思った事
価格
端末の価格が¥39,900とiphoneに比べて半分ぐらいでしたまた月額の料金が¥2,400 + 通話料になりこれも半分ぐらいになりました 価格面に関しては大満足です
サイズ
5インチの画面はiphone4からの乗り換えだったのでめちゃくちゃでかいです、youtubeとか見るともぉーーテレビやんってぐらいの 感覚です、けどひとつだけ不満がありでかすぎて片手で操作できないのが不満ではあります
動作
iphone4の時はなにをやるにもワンテンポ挟んでかなりのストレスでしたが、nexus5はサックサクで全然ストレスになる事はありません
カメラ
当初nexus5のカメラには我慢できんくらいの不満がありました、カメラのシャッターボタンを押してからフォーカスを合わすので シャッターボタンを押したタイミングの写真が取れませんでしたが4.4.2のアップデート後はその現象は解消されたようです
容量
容量についてはe-mobileから発表されたモデルは16Gのみだったので工夫が必要でした、音楽は今まで通りiPhoneに入れて写真は とった瞬間にAtooma(アプリ)を使ってbox(ストレージサービス)に転送しています、転送された写真は定期的に削除します
本当は32G欲しいです
アプリ
基本的にiPhoneで使っていたアプリはandroidにもあるのであまり問題にはなりませんでした、できればiftttがandroidでもあれば 良かったです 全体的にですがiphoneのほうがアプリの完成度が高い気がします
あと使いやすいメールアプリが未だに見つかりません
バッテリー & 充電
バッテリーの持ちは悪いです、1日持ちません、充電もiphoneのライトニングは優秀で満タンまで充電するのに倍ぐらい時間がかかります
Qi(無接点充電)に対応しているのはすごくいいです、使ってないけど今後使いたいです
LTE & デザリング
iPhone4からの乗り換えなのでLTE & デザリングが初体験でした、LTEは早いなんてもんじゃないですね、デザリングができるのもすごくいいです いちいちモバイルルーターを持ち歩かずにすむのですごくいいです、速度的にも問題ないです
月5Gの制限がありますが、外で仕事する時に動画などの思いコンテンツを見る事は無いので問題ないです、家や会社ではwi-fiにつなぐので ほぼ問題はないかと思います、写真を自動でアップしているのでその点が少し心配していますが今の所問題なさそうです
まとめ
不満がないといえば嘘になるが全体的には満足行っています、2年契約なんで2年間使ってみます、2年後にandroidにするかiphoneにするかわ 今は分かりません
たぶんiPhoneに戻る気がするな〜〜〜
でわでわ
2013年自分の中でヒットした事(技術系)
chef
chefは今年一番の衝撃的な出来事でした、ちょうどタイミングもよく、仕事でサーバを100台ほど作る 予定がありその時に出会ったのが2013年の3月ぐらいでした
タイミングよく伊藤直也さんが書いた「入門Chef Solo - Infrastructure as Code」が出たのが3/13だったと思います 初めて買ったkindle本でした、日本語で書かれた唯一のchef本だったので穴があくまで読みました 今年通してずっと手元に置いていました
サーバの設定をrecipeにしてサーバの設定をバージョン管理できるという事はかなり衝撃でした
chef + vagrant
chefでrecipe化された設定はproduction環境を構築する事が目的ですが、vagrantと併用する事で開発環境を限りなく production環境に近づけられるという事は嬉しい副産物でした
また開発のチームで環境を統一出来るのも大きな利点でした、以前ならVmのコピー配って同様の事が可能でしたが 配るファイルのサイズを大きすぎるのと配ったあとの管理は個人に任せられるのであまりカジュアルなやり方では ありませんでした
vagrant + chefの場合はvagrantfileとrecipeを配れば基本的に同環境が出来上がります、さらにprojectのコードに 含める事でgit cloneでコードと開発環境のインフラを配布する事ができます
開発環境
以前までの僕の開発環境はmacにphp/apache/mysqlを入れてローカルに環境を構築していました、phpenvを使ってphpの 各バージョンを入れたりと工夫していましたがいかんせんローカルの環境が汚れていきます
vagrantを使うようになってからは必要なツールはprojectごとにvagrantfileを作ってその中に構築しています こうする事でローカルの環境は出来るだけクリーンに保ち、projectに必要なツールをvagrantfileとrecipeに記述する ようにしています
test (phpunit / serverspec)
今年からは本格的にテストを書きました、アプリケーション側はphpunit、インフラ側はserverspecを使っています テストを書く事で心の安心感を得る事が出来た事と単体テストを全てコード化した事での時間の短縮は非常に効率的に 開発に集中する事ができるようになりました
capistrano
かなり遅いんですがサーバへのdeployを自動化しました、だんだんと数が多くなるにつれミスが目立つようになり必要に かられてdeployの自動化を行いましたが作業の効率が段違いになりました
今年書いた、chef, vagrantの記事
自分の中でブレイクしている、vagrant + chef + gitで開発環境を構築する
2014年の抱負と目標と2013年の反省
まずは2013年の反省と分析
つだけで良いのでサービスを形にする、そしてそれを運営する
サービスは2つほど作りましたがどれも形にはなっていない、そして運営に関してはこのブログともう一つブログがありますが そっちは試行錯誤中で運営というよりは実験中というところです
そのサービスで1万円で良いの収入を得る
今年の収入は204円です・・・ 0円ではなかったのがせめてもの救いです、しかしなさけないです
インプットとアウトプットを心がける
アウトプットはこのブログで出来たかと思います インプットに関しては自分なりに必要なものをインプット出来たかと思います、具体的には以下
- chef
- vagrant
- freamwork(php)
- javascript(angularjs)
- leanstartup(アジャイル + スクラム)
人脈作りを心がける
勉強会への積極的な参加を目標にしましたが、年間で5回しか参加できませんでした
技術について貪欲でいる事を心がける
自分なりには貪欲でいれたのかな〜と思います
2014年の抱負と目標
- 今作っているサービス(Tracs)を形にする
- Tracsを実験的に使ってもらえる会社を2社見つける
- Tracsを使ってもらっている会社から定期的にfeedbackを得れる体制を作る
- 自分の商品価値について考えて文章化する
- 副業/アフェリでじゃんじゃん稼ぐ
※技術的な事に関してはプログラマーとしての基本のスキルセットなのであえて書きません
興味をもって勉強していきたいrubyとdockerなどの仮想化技術に関してとCI関係かなって思ってます
あと今年は新しいmacが欲しいです・・・副業がんばるぞ
でわでわ、良いお年を
serverspec を使って初めてのインフラテスト
仕事でserverspecを使ってテストを行ったのでその時のメモを公開します
provisoning toolにはchef(chef-solo)を使っています、今まではvagrant + chefでテスト環境を構築するだけでしたが production環境にもcookbookを定期用する事になりました、今まではテスト環境の構築だったので例えばiptablesはoffとか の設定をしていましたがそういうわけにも行かず一度全てのcookbookの見直しを行い、足りない部分は追加しました
production環境にcookbookを適用するにあたってやはりcookbookが正しいかどうかを1台づつ確認するのはさすがに手がかかり すぎるしコストもかかります、何より正しいかどうかもうたがしいです
って事でテストを書く事にしました、今となっては当たりの事ですが今までアプリのテストは書いてましたがサーバのテストを 書くのは初めてです
サーバのテストを行うにあたって色々ツールがあるようですが、一番簡単で汎用的なserverspecを使う事にしました
以下ログです
$ install
rubyはinstallされている前提です
# gem install serverspec
$ init
テストを作成するdirectoryに移動
# cd [test directory]
init
# serverspec-init Select OS type: 1) UN*X 2) Windows Select number: 1 Select a backend type: 1) SSH 2) Exec (local) Select number: 1 Vagrant instance y/n: n Input target host name: 192.168.33.10 + spec/ + spec/192.168.33.10/ + spec/192.168.33.10/httpd_spec.rb + spec/spec_helper.rb + Rakefile
色々聞かれるけどとりあえず 1) 1) n を選択
実際のテストに使ったResource Types
netを検索すると色々情報が出てきますがとりあえず公式サイトが一番わかりやすかったです
Resource Types に使えるresourceとサンプルコードが載っています
実際に使ったresourceを以下に紹介します
package resource
describe package('httpd') do it { should be_installed } end
be_installed
package('httpd') に記述されているpackageがinstallされているかをテスト
file resource
describe file('/etc/httpd/conf/httpd.conf') do it { should be_file } it { should contain "DocumentRoot \"/home/ecocatcms/current\"" } end
service resource
describe service('httpd') do it { should be_enabled } it { should be_running } end
port resource
describe port(80) do it { should be_listening } end
be_listening
port(80) に記述されているportが開いているかをテスト
command resource
describe command('convert --version') do it { should return_stdout /ImageMagick/} end
return_stdout
command('convert --version')に記述されたcommandを実行した結果から return_stdout /ImageMagick/ に書かれた記述が存在するをテスト 記述の仕方は正規表現も使える
iptables resource
describe iptables do it { should have_rule('-P INPUT ACCEPT') } it { should have_rule('-P FORWARD ACCEPT') } it { should have_rule('-P OUTPUT ACCEPT') } it { should have_rule('-A INPUT -p icmp -j ACCEPT') } it { should have_rule('-A INPUT -i lo -j ACCEPT') } it { should have_rule('-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT') } it { should have_rule('-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT') } it { should have_rule('-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT') } it { should have_rule('-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT') } it { should have_rule('-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT') } it { should have_rule('-A INPUT -p tcp -m state --state NEW -m tcp --dport 587 -j ACCEPT') } it { should have_rule('-A INPUT -j REJECT --reject-with icmp-host-prohibited') } it { should have_rule('-A FORWARD -j REJECT --reject-with icmp-host-prohibited') } end
have_rule
have_rule('-P INPUT ACCEPT')に記述された設定がされているかをテスト
php_config resource
describe 'PHP config parameters' do context php_config('date.timezone') do its(:value) {should eq 'Asia/Tokyo'} end context php_config('post_max_size') do its(:value) {should eq '5000M'} end context php_config('upload_max_filesize') do its(:value) {should eq '5000M'} end context php_config('extension_dir') do its(:value) {should eq '/usr/lib64/php/modules'} end context php_config('enable_dl') do its(:value) {should eq 1} end end
selinux resource
describe selinux do it {should be_disabled} end
be_disabled
selinuxがdisabledになっているかをテストする、ほかにもbe_enforcing, be_permissiveがある
user resource
describe user('deploy') do it {should exist} it {should belong_to_group 'deploy'} it {should have_home_directory '/home/deploy'} it {should have_login_shell '/bin/bash'} end
exist
user('deploy') が存在するかをテスト
belong_to_group
user('deploy') がbelong_to_group 'deploy'に属しているかをテスト
have_home_directory
user('deploy') のhome directoryが should have_home_directory '/home/deploy' かどうかをテスト
have_login_shell
user('deploy') のshellが should have_login_shell '/bin/bash' かどうかをテスト
$ run test
以下のコマンドでテストを実行します
# rake spec
.........................................................
Finished in 2.2 seconds
57 examples, 0 failures
テストが成功したら「.」が表示されます、テストが失敗したら「F」で表示されて、エラーの内容が表示されます エラー内容と一緒に裏で吐かれているコマンドも一緒に表示されます
$ tips
serverspecはテストの実行時にserverspecを実行するPCにログインしているユーザでテストを実行するサーバにログイン しようとします
クライアントPCがmacでテストを行うサーバがlinuxなどの場合はデフォルトのままでテストを実行するとテストサーバに対して macにログインしているユーザ名でログインしようとしてしまします
僕の場合は「spec/spec_helper.rb」を以下のように編集しました
- c.ssh = Net::SSH.start(host, user, options)
+ options[:password] = "password"
+ c.ssh = Net::SSH.start(host, "user", options)
options[:password] = "password"
鍵認証の場合は問題ないかと思いますが、僕の場合は普通にpassword認証を行うので直接passwordを書き込みました
c.ssh = Net::SSH.start(host, "user", options)
「"user"」にテストを行う対象のサーバにログインするユーザ名を直接設定しています
今回はじめてインフラのテストをしましたが、serverspecはとても使いやすかったです、chefに依存してないところが気に入りました 開発環境のvagrantにも、本番のsakura VPSにも同じようにテストを流す事ができました
次回はdockerなんかを使ってCIをまわす環境を構築してみようかと思います
でわでわ、失礼します
OSをMarvericksにしてphp-buildでphpをinstallしたら「configure: error: Cannot find libz」って言われた時の対処方法
ターミナルから以下のコマンドを実行する
$ xcode-select --install
実行後installコマンドを発行
$ php-build 5.4.19 ~/.phpenv/versions/5.4.19
問題なくinstallできました
参考サイト