ロックとチュウーハイとこりんがるな日々

日々のインプットした事をアウトプットする場所

アクセス解析結果発表

続ける仕組み

この1年を通じて続けた事が2つあります、blogと朝活です、この1年を通じて続けれた理由を少し考えて見ました

blog

blogは毎日書いたわけではなくだいたい1週間に1本のペースで書いていました 内容は仕事や朝活で使ったツールや技術のメモのような内容です

blogを続ける為の仕組みは3点ありました

  • 定期的に書かない

    ブログを書くのを例えば1日一本などと決めてしまうと書く事が億劫になってしまいます 少なくとも僕はそうでした

    1週間に一本かければ書く程度の感じで始めるのが続けるコツではないでしょうか?

  • 書く内容をメモにする

    これは技術的な内容に限定されますが、なにか作業をする時にメモを取らない人はあまりいないのではないでしょうか? 僕はなにか作業を行う時は必ず作業ログをとります、作業ログには発行したコマンドやコメントが書かれておりほぼそのまま ブログに載せる事ができます、僕は普段からmarkdownでメモをするのでなおさらそのままblogに反映する事が出来ました

    短いメモでも、忘れそうならblogに公開してしまう事を心がけました

  • アクセス解析をする

    アクセス数が上がると自然とテンションが上がります、僕のブログはだんだんとアクセス数が上がって現在は一日に100pv前後が 見に来ています 1日に100pvなんて全然大した事ないですが、別にアフェリ目的ではないので続ける為のテンションを上げる材料としては十分です

朝活

僕が朝活をを始めたのは子供が出来て寝るのが早くなってしまい、夜に作業が出来なくなったので変わりに朝6:00に起きて 2時間ぐらい作業をするようにしたのがきっかけです

朝活も考えれば朝が苦手な僕が続ける為にはコツがあったのかなっと思います

以下に朝活を続けれた仕組みを3点あげます

  • 無理しない

    基本的には平日は毎朝朝活を行うけど、たとえば前の日飲みに行って寝るのが遅いかもしれません、そんな日は無理せずそ の日の朝活はやめるとか自分に対して無理をしない事が大事なポイントかと思います

  • やりたい事をやる

    朝活では仕事は一切しません、自分のプロダクトを作りこむとか勉強したい事をやります 要するに自分のしたい事をする、仕事はしない事がポイントかと思います

  • 目標を決める

    全然達成出来ていないですが、いつまでに何かを作り上げる事を決める、もしくは勉強する事を決める

集中する事

集中する環境として朝活ももちろんですが、スタバとかマクドナルドで作業をする事を覚えました macの電源が4時間ぐらいしかもたないのでその間に集中して作業をすませますこれがなかなか集中できます

環境音楽も今年集中する為に取り入れた事の一つです

Coffitivity

適度な雑音は作業がはかどります、これにうす〜〜〜く音楽をかけたりしています

テンションを上げる

続ける為には続ける為のテンションを保ちつづける必要があります 技術系の情報を聞いてそれを実際にやってみたりするのは結構楽しかったりします

今年はずっとrebuild.fmを聞いていました、perlplackとかで有名な宮川さんが始めたpodcastで定期的に収録していて 今熱い系の話からガジェットネタまでを幅ひろく聞く事ができます

rebuild.fm

もうちょっとまとめてまた続ける仕組みについて書きます

でわでわ

iphoneからandroidに変わってか思ったこと

2013年の大きな変化にiphoneからandroidスマートフォンを変えました、理由としてはandroidを触ってない事 に対しての焦りが大きな理由です

またタイミングよくnexus5がe-mobileから発売されたのも買い替えの大きな理由でした googleから直接買うかかなり迷いましたが結局e-mobileで契約しました

まぁiphoneは電話としては使えないですがwi-fiにつなげて今まで通り使ってます

はれてiphoneandroidの2台持ちになりました

開封式

f:id:box406:20131115215952j:plain

f:id:box406:20131115220023j:plain

f:id:box406:20131115220150j:plain

思った事

  • 価格

    端末の価格が¥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で開発環境を構築する

chef でゼロからサーバ構築をやってみる

knife-soloを設定して開発マシン(mac)からchef-soloを実行する

serverspec を使って初めてのインフラテスト

2014年の抱負と目標と2013年の反省

まずは2013年の反省と分析

  1. つだけで良いのでサービスを形にする、そしてそれを運営する

    サービスは2つほど作りましたがどれも形にはなっていない、そして運営に関してはこのブログともう一つブログがありますが そっちは試行錯誤中で運営というよりは実験中というところです

  2. そのサービスで1万円で良いの収入を得る

    今年の収入は204円です・・・ 0円ではなかったのがせめてもの救いです、しかしなさけないです

  3. インプットとアウトプットを心がける

    アウトプットはこのブログで出来たかと思います インプットに関しては自分なりに必要なものをインプット出来たかと思います、具体的には以下

  4. 人脈作りを心がける

    勉強会への積極的な参加を目標にしましたが、年間で5回しか参加できませんでした

  5. 技術について貪欲でいる事を心がける

    自分なりには貪欲でいれたのかな〜と思います

2014年の抱負と目標

  1. 今作っているサービス(Tracs)を形にする
  2. Tracsを実験的に使ってもらえる会社を2社見つける
  3. Tracsを使ってもらっている会社から定期的にfeedbackを得れる体制を作る
  4. 自分の商品価値について考えて文章化する
  5. 副業/アフェリでじゃんじゃん稼ぐ

※技術的な事に関してはプログラマーとしての基本のスキルセットなのであえて書きません

興味をもって勉強していきたい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

  1. テストを作成するdirectoryに移動

     # cd [test directory]
    
  2. 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 を選択

  3. 実際のテストに使ったResource Types

    netを検索すると色々情報が出てきますがとりあえず公式サイトが一番わかりやすかったです

    http://serverspec.org/

    Resource Types に使えるresourceとサンプルコードが載っています

    実際に使ったresourceを以下に紹介します

    • package resource

      package

        describe package('httpd') do
          it { should be_installed }
        end
      
      • be_installed

        package('httpd') に記述されているpackageがinstallされているかをテスト

    • file resource

      file

        describe file('/etc/httpd/conf/httpd.conf') do
          it { should be_file }
          it { should contain "DocumentRoot \"/home/ecocatcms/current\"" }
        end
      
      • be_file

        file('/etc/httpd/conf/httpd.conf') に記述されているファイルが存在するかをテスト

      • contain

        file('/etc/httpd/conf/httpd.conf') に記述されているファイルに contain "〜"の記述が書かれているかをテスト

    • service resource

      service

        describe service('httpd') do
          it { should be_enabled   }
          it { should be_running   }
        end
      
      • be_enabled

        service('httpd')に記述されているpackageの起動設定がされているかをテスト

      • be_running

        service('httpd')に記述されているpackageが起動しているかをテスト

    • port resource

      port

        describe port(80) do
          it { should be_listening }
        end
      
      • be_listening

        port(80) に記述されているportが開いているかをテスト

    • command resource

      command

        describe command('convert --version') do
          it { should return_stdout /ImageMagick/}
        end
      
      • return_stdout

        command('convert --version')に記述されたcommandを実行した結果から return_stdout /ImageMagick/ に書かれた記述が存在するをテスト 記述の仕方は正規表現も使える

    • iptables resource

      iptables

        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

      php_config

        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
      
      • php_config

          context php_config('date.timezone') do
            its(:value) {should eq 'Asia/Tokyo'}
          end
        

        php.iniの設定項目をphp_config('date.timezone')に書く、設定項目の値を its(:value) {should eq 'Asia/Tokyo'} に書く、設定が正しいかをテスト

    • selinux resource

      selinux

        describe selinux do
          it {should be_disabled}  
        end
      
      • be_disabled

        selinuxがdisabledになっているかをテストする、ほかにもbe_enforcing, be_permissiveがある

    • user resource

      user

        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できました

参考サイト

Qiita : OS X 10.9 Marvericksでzlibがない