@Konboi memo

主に技術に関してつらつらと。

YAPC::Asia 2015 に参加してきた #yapcasia

ブログを書くまではYAPC::Asiaということで!!

今年もYAPCに参加してきました!! とりあえず、最高だった。

コミケ#YAPC::Asia #yapc

聞いて印象に残ったトーク

1日目

Managing Containers at Scale with CoreOS and Kubernetes

CoreOSってよりかはk8sの話がメインでどんな感じに使うかのDEMO多めのトークでした。 個人的には、k8sブログとかで記事見かけてたけど、どんな風に使うのかイマイチわかっていなかったので良かった。

ただ k8s 自体の冗長化はどうすればいいのか質問すればとかったと反省。

Perlの上にも三年 〜 ずっとイケてるサービスを作り続ける技術 〜

成長しているサービスを改善している裏側だった。 読んだ本をどうやってプロダクションにとりいれてるかすごい参考になった。

紹介されている本のなかで幾つか積んであるのでさっそく読もうと思った。

ベストトーク賞おめでとうございます。

2日目

ISUCONの勝ち方

一昨年はNFS自動起動できなくてスコアでなくて

昨年は予選敗退してなんとも悔しかったので今年は勝ちたいと思って聞かせて頂きました。

聞きながら自分達がやってたやり方を振り返りながら聞けてよかった。

サーバーサイドエンジニア(特にPerl)のためのiOSアプリ開発入門

Demoがことごとく失敗してて失礼ながら笑ってしまいました ← 何度か挫折しているけれど、無料で実機に送れるとのことなのでもっかい手を出してみようかなと思いました

ソーシャルゲームにおける AWS 移行事例

同期の@tkuchikiが登壇するということで聞いてました。 会社で色々聞いていましたが、詳しいところまで把握できていなかったので勉強になりました。

上に挙げたトーク以外にもLTをはじめ色々な話を聞くことができました。

さいごに

牧さんをはじめとするYAPCのみなさん本当にお疲れ様でした!!! おかげさまで、本当に楽しい2日間(前夜祭はいけなかったので)を味わうことができました! 本当にありがとうございました!!!

自宅のルータからraspiへ振られるlocal ipを固定する

はじめに

自宅で使っているルータはElecomのWRC-F300NF

お、お前エンジニアなのにそんなルータなのかよ… とdisが飛んでくるかもしれませんが、 日常で使う分には全然困らない程度に速度出るし、安かったのでこれを使っています。

macアドレスを調べる

pi@raspberrypi ~ $ ifconfig
eth0      Link encap:Ethernet  HWaddr <mac アドレス>
          inet addr: < local ip>  Bcast:< local ip brod cast>  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:164 errors:0 dropped:0 overruns:0 frame:0
          TX packets:141 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:16804 (16.4 KiB)  TX bytes:19580 (19.1 KiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

HWaddrmacアドレスinet addr が現在振られているlocal ip。 設定が終わった後に任意のIPが振られているかはここを見る

local ip を固定する

ルータの管理画面にログインする。

img

WAN&LAN設定 > LAN設定 > 固定DHCP設定

から設定する

img

  • IPアドレスには設定したいローカルIPアドレスを。
  • MACアドレス には先ほど調べたMACアドレスを入力する
    • aa:bb:cc:dd など : で区切られているが入力するときは : は除く
  • コメント には任意

設定してルータを再起動すると設定される。 再起動後にifconfig で確認すると設定したIPが設定されていることを確認。

まとめ

固定IP振れてめでたしめでたし

pull request builder plugin を使わずgithub上にテストの結果を表示する

はじめに

現在のプロジェクトではJenkinsを使ってCIを行っています。 当初ビルドのタイミングはポーリングで行っていました。 しかしポーリングだと再度ビルドを走らせる必要がある時に空コミットする必要があったり、jenkinsのrebuild pluginを追加しポチポチしてビルドする必要がありました。

段々と億劫になり今は、Githubweb hookGithub::Hooks::Reciverというhook server経由でjenkinsのjobを実行するようにしました。

jenkins側の設定でbranchをパラメータとして渡せるようにして置くことで任意のbranchを指定してjobを実行できるようにしてあります。

と説明が長くなりましたが、今回はそのjobの実行結果をtarvis ciを連携したときのようにbuildの結果をgithubにも表示するようにしましたのでその方法をメモしておきます。

結果こんな感じに表示されるようになりました。

img

どうやったのか

説明したような仕組みでjenkinsのjobを回しているので結果を表示するためだけにpull request builder plugin を入れて設定するのは大分面倒だなと思って、何かないか色々調べていました。

調べていると以下の記事が見つかった

Githubのpull requestページに、テスト結果を表示するJenkinsの設定

この記事によると GithubCommit Status API を使えば実現出来そうということがわかったのでやってみました。

以下の様なscriptを用意しjenkinsのPost build task で実行してあげればpull request の最後のcommitのステータスを設定してくれます。

 use 5.018;
 use warnings;
 use strict;
 use FindBin::libs;

 use Furl;
 use Git::Repository;
 use JSON::XS;
 use Pithub;
 use Sub::Retry qw/retry/;

 {
     my $repo_user = ‘sample-user-name’;
     my $repo_name = ‘sample-repo-name’;
     my $git       = Git::Repository->new(work_tree => ‘project/dir/path’);
     my $sha       = $git->run('log', '-n', '1', '--pretty=format:%H');

     my $state = {
         'SUCCESS' => {
             state       => 'success',
             description => 'ぐっ!! (๑•̀ᄇ•́)و✧',
         },
         'UNSTABLE' => {
             state       => 'error',
             description => 'アタフタ ヘ( ̄□ ̄;)ノ ヽ(; ̄□ ̄)ヘ アタフタ',
         },
     };

     my $url  = $ENV{BUILD_URL};
     my $furl = Furl->new;
     my $json = retry 3, 5 => sub {
         my $res = $furl->get( "$url/api/json?tree=result" );
         decode_json $res->content;
     };
     my $result = $json->{result};

     exit(0) unless $state->{$result};

     my $ph = Pithub->new(
         token => ‘GITHUB_API_TOKEN’
     );
     $result = $ph->repos->statuses->create(
         user => $repo_user,
         repo => $repo_name,
         sha  => $sha,
         data => {
             state       => $state->{$result}{state},
             description => $state->{$result}{description},
             target_url  => $url,
         }
     );
 }

ぐっ!! (๑•̀ᄇ•́)و✧

まとめ

ステータスが出るようになってめでたしめでたし。

raspberry pi で自宅サーバー構築

はじめに

毎日の業務ではAWSを使っていて簡単にサーバー追加とかインスタンスサイズ変更とできて非常に便利に感じている。 ただ普段あまり意識しないもう少し低いレイヤーのことも出来なきゃなと思ったのでが自宅サーバーを運用しようと思う。

ただ、いきなりがっつり自宅サーバー準備しても動かす物の予定も無いし電気代もかかるのやだなーと思ってたのでraspberry pi でカジュアルに動かして見ることにする

やらないといけないであろう事をざっくりと書き出してみる

とりあえずやらないといけないのはこのぐらいかなーと

がんばるぞ〜!!

テストをコケたままにしない理由

はじめに

現在担当しているモバイルアプリゲームではマスターデータのテストを行っています。

  • リレーション先のデータが存在しているか
  • 入力されているデータが想定しているデータか
  • シソーラスのチェック

などヒューマンエラーがおきやすい所、おきた所を防ぐためにマスターデータに対してもテストを行っています。

本題

表題だけみると当たり前のことですが、運用をしていると施策のタイミング変更などやんごとない理由で上記であげたテストがコケる不十分な状態のマスターデータをデプロイする必要が出てきます。 CIサーバーではテストを回すと常にそのテストがコケた状態になります。

それがチーム内で共有されているとしてもテストがコケた状態だと それ今はコケるテストだから という状態が続く可能性があります。

その状態が続くと同一テスト内で他のテストがコケた場合に気づきにくくなります。

じゃあどうする

なので自分の場合は、そのようなケースが出てきた時はテストコードを修正し該当のデータだけテストをスキップさせる という方法を取っています

まとめ

テストこけっぱなしにするの(・へ・)ヨクナイ!

本番のマスターのDBでhistoryを残さないために

本番のマスターのDBで直接SQLを叩くことはほとんどありません。 が、どうしてもやんごとない事情でSQLを直接叩かないといけない時がでてきます。

SQLの実行自体はいいのですが、他の人が誤ってhistoryから実行したら怖いですね。 そうならないように現在のプロジェクトでは master_mysql のようなコマンドを用意し

どうしても直接本番のマスターDBでSQLを実行しないと行けない場合はそれ経由で実行しています。

master_mysql の中身は

#!/bin/sh
MYSQL_HISTFILE=/dev/null mysql -uuser_name -hhostname -ppassword db_name "$@"

こんな感じになってます。 これで他の人がhistory経由でミスすることが多少は防げると思います。

あわせて読みたい